Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Charlie
0 / 0 / 0
Регистрация: 24.06.2011
Сообщений: 15
#1

ListBox сохранение и открытие - Delphi

24.06.2011, 14:18. Просмотров 855. Ответов 1
Метки нет (Все метки)

Очень нужна помощь)))Необходимо создать ListBox с битмапом или на худой конец с какими-нибудь кружками, квадратами и т.д. Читая МСДН я так понял, что во-первых у Листа должен быть стиль LBS_OWNERDRAWFIXED, а также, что в таком случае он получает два сообщения:
WM_MEASUREITEM - при созданиии;
WM_DRAWITEM - при перерисовке;
WM_MEASUREITEM содержит в себе указатель на структуру MEASUREITEMSTRUCT.
WM_DRAWITEM содержит в себе указатель на структуру DRAWITEMSTRUCT.
Хотелось бы хотя бы заполнить список например эллипсами.
пробовал вот такой код:


C++
1
2
3
4
5
6
7
HWND hList =(..........................)// Его идентификатор например 50006;
MEASUREITEMSTRUCT mSt;
DRAWITEMSTRUCT dSt;
SendMessage(hList,WM_MEASUREITEM,mSt.CtlID,&mSt);
SendMessage(hList,WM_DRAWITEM,50006,&dSt);
// Затем пытался нарисовать в списке один эллипс
Ellipse(dSt->hDc..........)
На таким образом изображения все-равно не рисуются, надеюсь на Ваши советы по данному вопросу, если можно - подкрепленные кодом))))))
Заранее спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2011, 14:18
Я подобрал для вас темы с готовыми решениями и ответами на вопрос ListBox сохранение и открытие (Delphi):

Открытие файла из ListBox
Вот что я использую, не открывает файл по двойному нажатию, только после...

Сохранение и открытие
Еще большие проблемы с открытием и сохранением...есть какой нить пример...

Listbox открытие по нажатию строки
Здравствуйте, подскажите пожалуйста, как сделать, чтобы при нажатии на строку в...

Сохранение и открытие файла
Нужно организовать сохранение данных (элементы StringGrid) в файл, а также...

StringGrid Сохранение и открытие
Помогите пожалуйста пытаюсь сохранить стрингрид в текстовый файл procedure...

Открытие и сохранение картинок
Когда открываю картинку в написанной программе а потом ее сохраняю, программа...

1
xAtom
917 / 742 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
26.06.2011, 00:01 #2
Для Чали, Всё не правильно делаешь, для ListBox в диалоге открой свойство style -> Owner draw(раскрывающий список выбери) -> Variable ну или Fixed(вместе с текстом). У меня MS VC++ 6.0, import-ируй ресурс BMP-файл вот пример кода.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
HBRUSH    brush   = NULL;
HBITMAP   bitmap = NULL;
HDC         bdc     = NULL;
 
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)  {
 
          LPDRAWITEMSTRUCT    dm; 
 
    switch (message) {
    case WM_INITDIALOG: {
        
           // загрузка битмапа из ресурсов
    bitmap = LoadBitmap( (HINSTANCE)GetWindowLong(hDlg, GWL_HINSTANCE),  
                                          MAKEINTRESOURCE(IDB_BITMAP1) );
    bdc     = CreateCompatibleDC( GetDC(hDlg) );
    brush  = CreateSolidBrush( RGB(255, 124, 128) );
 
          return TRUE;
    }
    case WM_DRAWITEM: {
        dm = (LPDRAWITEMSTRUCT) lParam; 
 
        if(dm->CtlID == IDC_LIST1) {  // рисуем на ListBox-e с идом IDC_LIST1
 
                                SelectObject(bdc, bitmap); 
                  BITMAP    bit;
                  ZeroMemory(&bit, sizeof(BITMAP));
                  GetObject(bitmap,  sizeof(BITMAP), &bit);
 
                  RECT  rect;
                  GetClientRect( GetDlgItem(hDlg, IDC_LIST1),  &rect);
                  StretchBlt(dm->hDC, 0, 0, rect.right, rect.bottom,  
                                               bdc, 0, 0, bit.bmWidth,    bit.bmHeight, SRCCOPY);
 
                  const TCHAR* str = "Hello Graphical !!!";
                  SetBkMode(dm->hDC, TRANSPARENT);
                  SetTextColor(dm->hDC,  RGB(0, 255, 0));
 
                  HGDIOBJ  gdi = SelectObject(dm->hDC,  brush);         
                  for(int i = 0; i < 15; i++) {
                  TextOut(dm->hDC,  2, 2+i*20, str, lstrlen(str));
                  Ellipse(dm->hDC, 2, 2+i*20, 19, 19+i*20);
            }
                          SelectObject(dm->hDC, gdi);
            ReleaseDC(NULL, bdc);
        }
 
        } break;
    case WM_CLOSE: 
        DeleteObject(bitmap);
        DeleteObject(brush);
        DeleteDC(bdc);
         break;
    }
    return FALSE;
}
Простой пример, вывел фоновое изображение и текст заместо иконок эллипсы.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2011, 00:01
Привет! Вот еще темы с решениями:

Сохранение и открытие матрицы
У меня есть 2 процедуры, одна на сохранение, другая на открытие, через save и...

Открытие некольних файлов в ListBox одновременно
Доброе время суток. Пишу в свое удовольствие Mp3-плеер с Bass.dll. Столкнулся с...

Treeview корректное сохранение и открытие
Добрый вечер великим умам!! Помогите еще раз бедному тупому ( Есть дерево два...

Сохранение и открытие с выбором места
Всем добрый день! Написал я прогу, она сохраняет и открывает файл с заданным...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru