Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Вниз

Как сделать многострочный LISTBOX используя только WIN API   Найти похожие ветки 

 
5Stas5   (2006-10-23 23:53) [0]

Вопрос возможно ламерский, но с WIN API я еще не работал
//Вот мой код создания LISTBOX
..HLISTBOX:hWnd;

HLISTBOX:=CreateWindowEx (WS_EX_CLIENTEDGE,
"LISTBOX","",
LBS_OWNERDRAWFIXED or
WS_CHILD or WS_VISIBLE  or
LBS_NOTIFY,
90,8,
246,163,
wnd,LISTBOX,HInstance, nil);

// Конец создания

Так как я понял надо после создания LISTBOX"а отлавливать
сообщение WM_DRAWITEM

Я отлавливаю это сообщение и передаю параметр  в свою процедуру
DRAWITEM(lParam:longint);
//т.к lParam это указатель на структуру DRAWITEMSTRUCT
DRAWITEMSTRUCT это структура как я понял структура данных для прорисовки
Дальше чем это у меня дело не пошло.
LISTBOX постоянно пустой
пробывал
DrawText(p.hdc,("Текст"),30,p.rcItem,0);
B как написано в хелпах (видел С# эквиваленты,
вообще приложение вылетает)
DrawText(p.hdc,LPSTR(p.itemData),30,p.rcItem,0);

procedure DRAWITEM(lParam :longint);
var P:^DRAWITEMSTRUCT;
begin
P:=@lParam;
end;


Дальше мне ничего не понятно, что делать в проресовке?

Для указания высоты Item"a я знаю есть сообщение
LB_SETITEMHEIGHT но я даже не могу нормально перерисовать
LISTBOX.

Помогите чем можите.


 
Ketmar ©   (2006-10-24 00:13) [1]

>[0] 5Stas5 23-Oct-2006, 23:53
>P:=@lParam;
вот это -- бред. lParam -- УЖЕ указатель. а ты получаешь указатель на указатель. здесь достаточно простого приведения типов.


 
5STAS5   (2006-10-24 00:43) [2]

Это как?
На счет указатель на указатель ты прав.

Обьясни > достаточно простого приведения типов.


 
Германн ©   (2006-10-24 01:22) [3]


> Обьясни > достаточно простого приведения типов.
>


 with P(lParam)^ do ...
 with DRAWITEMSTRUCT(lParam^) do..

Выбирай любой.


 
Германн ©   (2006-10-24 01:26) [4]

А также читай в справке про typecast.


 
5STAS5   (2006-10-24 12:02) [5]

Можете навести пример?


 
5STAS5   (2006-10-25 23:28) [6]

Вот готовое решение. (может кому пригодиться)
С typecast так толком и не разобрался.
Но все равно спасибо.

procedure DRAWITEM(lParam :longint);
var p: PDRAWITEMSTRUCT;
 S:String;
 L,Top,F,bv: integer;
 Line1,RET: String;
 ptr,i,t,k,j,n: integer;
 buf:array [1..255] of wchar;
begin
with PDRAWITEMSTRUCT(lParam)^ do
begin
FillRect(hDC,rcItem,0);
S:=Cells[itemId]+" ";
SetTextColor(hDC,RGB(0,0,0));

 L:=rcItem.Left+7;
 Top:=rcItem.Top;
 F:=18;
 ptr := Length(S); i:=38; j:=38;
 if ptr>i then
   begin
      n:=1; k:=0;
      t:=(ptr div i)+1;
      for k:=0 to t do
        begin
         while S[j]<>" " do
               Dec(j);
        Line1 := Copy(S, n, j - n);
        n:=j+1; Inc(J,i);
        if j>ptr then j:=ptr;
      TextOut(hDC,L, Top-(-F*k), Pchar(Line1), Length(Line1));
         end;
      SendMessage (HLISTBOX, LB_SETITEMHEIGHT, itemID, (k-1)*F);
    end
      else
        begin
      SendMessage (HLISTBOX, LB_SETITEMHEIGHT, itemID, F);
      TextOut(hDC,L, Top, Pchar(S), Length(S));
        end;

     if (itemState and ODS_FOCUS <> 0) then
      begin
        DrawFocusRect(hDC, rcItem);
      end;

end;

end;


LISTBOX:=CreateWindowEx (WS_EX_CLIENTEDGE,
"LISTBOX","",
LBS_OWNERDRAWVARIABLE or
WS_CHILD or WS_VISIBLE  or
LBS_NOTIFY,
90,8,
246,163,
wnd,LISTBOX,HInstance, nil);


 
Ketmar ©   (2006-10-26 01:17) [7]

>[6] 5STAS5 25-Oct-2006, 23:28
>С typecast так толком и не разобрался.
метла нынче недорога.


 
Германн ©   (2006-10-26 02:11) [8]


> Ketmar ©   (26.10.06 01:17) [7]
>
> >[6] 5STAS5 25-Oct-2006, 23:28
> >С typecast так толком и не разобрался.
> метла нынче недорога.
>

Не. Есть ещё шанс, что автор превзойдёт уровень метлы. Всё же он смог правильно применить на практике первый пример из [3].


 
Ketmar ©   (2006-10-26 02:35) [9]

>[8] Германн(c) 26-Oct-2006, 02:11
>он смог правильно применить на практике первый пример из [3].
это ещё ни о чём не говорит. всех применений-то -- copy/paste.


 
Германн ©   (2006-10-26 02:40) [10]


> это ещё ни о чём не говорит. всех применений-то -- copy/paste.
>

Не. Ты не прав. Тут давеча было применение copy/paste к моему ответу. И был "облом с претензиями" :-) И тут "copy/paste в лоб" не сработало бы.


 
Германн ©   (2006-10-26 03:07) [11]

Люблю я аббревиатуры! Часто их пользую. Часть моих вышеуказанных прижилось на сём форуме, часть нет :-)
Предлагаю ещё две FLL и SLL (по-русски ЛПУ и ЛВУ). Навеяно новациями ЮЗ.
Так вот автор, имхо, уже прошел стадию FLL, поскольку честно признался, что
> С typecast так толком и не разобрался.

Но в своём решении [6] правильно применил тот самый typecast.
:-)


 
Ketmar ©   (2006-10-26 04:15) [12]

>[11] Германн(c) 26-Oct-2006, 03:07
уговорил. автор отпущен на поруки. %-)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.071 c
15-1161940904
zdm
2006-10-27 13:21
2006.11.12
часто используемые строки


3-1157963510
Loginov Dmitry
2006-09-11 12:31
2006.11.12
Восстановление базы данных


2-1161599893
Megabyte
2006-10-23 14:38
2006.11.12
Компоненты работы с почтой


1-1159697211
race1
2006-10-01 14:06
2006.11.12
Изменение размера формы за краешек


15-1161262853
ПЛОВ
2006-10-19 17:00
2006.11.12
Что есть Виста





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский