Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.12.13;
Скачать: CL | DM;

Вниз

ListView в DLL   Найти похожие ветки 

 
zldo   (2008-04-26 14:38) [0]

Пишу dll c для простоты отладки использую отдельный проект (exe) благо функции рализуемые в dll практически полностью автономны. Создал форму - на форме ListView - OwnerDrawFixed, DetailNoHeader, этот контрол заплняется динамически из потока по "SynhronizeEx".
В exe все замечательно работает, при компиляции етого кода в DLL вылизают 2 проблемы:
1. Не правильно задается высота элементов (вылечил перехватом WM_MESUREITEM, в OnMessage панели на которой лежит ListView)
2. Не происходит прорисовки в ListView до тех пор пока не "появится" полоса прокрутки или размеры ListView не будут изменены вручную (т.е. изменяем размеры окна и как сдедствие размеры ListView)
Может кто подскажет с чем связаны эти глюки и как победить второй.


 
Compiler ©   (2008-04-27 15:08) [1]

Нет кода, нет помощи. Поделюсь первым.
var
 LV:PControl;
 Th:PThread;
function OnDrawItem( P:Pointer; Sender: PObj; DC: HDC; const Rect: TRect; ItemIdx: Integer;
                          DrawAction: TDrawAction; ItemState: TDrawState ): Boolean ;
var
 R:Trect;
i:integer;
begin
 R:=Rect;
 FillRect(DC,R, CreateSolidBrush(ClWhite));
{  if odsSelected in ItemState then
 begin
   FillRect(DC,R, GetSysColorBrush(COLOR_BTNSHADOW));
   SetBkMode(DC,TRANSPARENT);
 end; }
 for i:=0 to Pcontrol(Sender).Count-1 do
 begin
 R:=Pcontrol(Sender).LVSubItemRect(ItemIdx,i);
 if i=0 then begin
     R.Right:=Pcontrol(Sender).LVColWidth[i];
     Inc(R.Left,40);
   end;
 DrawText(DC,Pchar( Pcontrol(Sender).LVItems[ItemIdx,i]),
      Length(Pcontrol(Sender).LVItems[ItemIdx,i]),R,
      DT_SINGLELINE or DT_LEFT or DT_NOPREFIX or DT_VCENTER or DT_WORD_ELLIPSIS);
 end;
if odsFocused in ItemState then
   InvertRect(DC,Rect);
  Result:=True;
end;

function LVAdd(Sender:PThread):integer;
var
 i:integer;
begin
for i:=1 to 50 do  begin
  LV.LVItemAdd("Строка #"+int2str(i))  ;
  LV.LVItems[I-1,1]:="Строка #"+int2str(i)  ;
  end;
end;

procedure ShowForm(); stdcall;
var
F:Pcontrol;
begin
Applet:=newapplet("");
f:=NewForm(Applet,"");
LV:=NewListView(F,lvsDetailNoHeader,[lvoOwnerDrawFixed],nil,nil,nil);
LV.LVItemHeight:=40;
LV.LVColAdd("1",taLeft,150);
LV.LVColAdd("2",taLeft,150);
LV.SetAlign(caClient);
LV.OnDrawItem:=TonDrawItem(makeMethod(nil,@OnDrawItem));
Th:=NewThreadAutoFree(nil);
Th.OnExecute:=TOnThreadExecute(MakeMethod(nil,@LVAdd));
Th.Resume;
run(applet);
end;

exports
  ShowForm name "ShowForm";
begin
end.



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

Текущий архив: 2009.12.13;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.015 c
2-1256393458
Lamer6666
2009-10-24 18:10
2009.12.13
Работа с COM портом.


2-1256444215
STD
2009-10-25 07:16
2009.12.13
TIcon


2-1256322344
Pascal96
2009-10-23 22:25
2009.12.13
CopyPaste в Borland Pascal 7.0


15-1255453981
nstur
2009-10-13 21:13
2009.12.13
Руссификация в Delphi for PHP


15-1255166733
TStas
2009-10-10 13:25
2009.12.13
Как работают подпрограммы?