Главная страница
    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.046 c
15-1161867385
TIF
2006-10-26 16:56
2006.11.12
Про реестр


15-1162011397
Rbn
2006-10-28 08:56
2006.11.12
AutoCad


15-1161608930
landeron
2006-10-23 17:08
2006.11.12
картинки


15-1161732708
Германн
2006-10-25 03:31
2006.11.12
"Осеннее обострение"


15-1161818872
RAM
2006-10-26 03:27
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский