Форум: "Начинающим";
Текущий архив: 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