Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   TListview, OnSelectItem Ereignis ausloesen (https://www.delphipraxis.net/179951-tlistview-onselectitem-ereignis-ausloesen.html)

Gutelo 13. Apr 2014 20:02

TListview, OnSelectItem Ereignis ausloesen
 
Hallo,

ich moechte ohne Mausklick aus dem Programm heraus ein bestimmtes Item in einer Listview selektieren und das OnSelectItem Ereignis ausgefuehrt bekommen. Ich habe es so versucht:

LI: TListItem und LV:TListView;


Delphi-Quellcode:
LI := LV.FindCaption(0,'MyItem1',true,false,false);
LI.Selected := True;
LVSelectItem(LV,LI,true);
Das Item wird selektiert. Aber die Prozedur OnSelectItem wird nicht ausgefuehrt.

Gutelo

Sir Rufo 13. Apr 2014 20:19

AW: TListview, OnSelectItem Ereignis ausloesen
 
Könntest du Delphi-Code in Delphi-Tags einschließen? Danke.

Wozu brauchst du das und wenn das so nicht geht, warum rufst du das dann nicht selber auf?
Delphi-Quellcode:
LV.OnSelectItem( ... );

Gutelo 13. Apr 2014 20:24

AW: TListview, OnSelectItem Ereignis ausloesen
 
LV.OnSelectItem( ... ); bewirkt das gleiche wie LVSelectItem(...);
Die Prozedur wird nicht ausgefuehrt.

Sir Rufo 13. Apr 2014 20:58

AW: TListview, OnSelectItem Ereignis ausloesen
 
Das sind die Delphi-Tags
Code:
[DELPHI][/DELPHI]
Und mit dem Debugger hast du auch schon überprüft, ob er diese Zeilen ausführt?
Du hast Haltpunkte gesetzt (z.B. in der Zeile
Delphi-Quellcode:
LVSelectItem(...);
) und der Code hat dort nicht angehalten?

Und nochmal: Wozu?

Gutelo 13. Apr 2014 21:18

AW: TListview, OnSelectItem Ereignis ausloesen
 
Das Problem liegt woanders.

Also die Prozedur OnSelectItem wird doch ausgefuehrt.

Das OnSelectItem kopiert das Icon des selektierten Items in eine TPaintbox. Da ich OnSelectItem in Form.OnShow aufrufe scheint der Inhalt der Paintbox nicht aktualisiert/angezeigt zu werden.

Mit TImage statt TPaintBox gehts ...

Uwe Raabe 13. Apr 2014 21:23

AW: TListview, OnSelectItem Ereignis ausloesen
 
Das Zeichnen einer PaintBox geschieht im OnPaint-Event. Es bringt nichts, da irgendwann mal was in die Paintbox-Canvas zu malen. Das wird schnell wieder gelöscht.

himitsu 13. Apr 2014 21:29

AW: TListview, OnSelectItem Ereignis ausloesen
 
Oder anders gesagt, die PaintBox merkt sich nicht was gezeichnet wurde und kann später das Bild nicht wiederherstellen.

Man kann schon irgendwann was draufmalen, aber im OnPaint muß man selber einen Code reinmachen, der das Bild wieder neu zeichnet, nachdem es z.B. übermalt/überdeckt war.

Oder eben nach/bei dem OnShow, wenn man vorher versuchte was draufzumalen, als die PaintBox noch nicht sichtbar war.

Sir Rufo 13. Apr 2014 21:48

AW: TListview, OnSelectItem Ereignis ausloesen
 
Also möchtest du quasi sowas
Delphi-Quellcode:
procedure TForm1.Paintbox1Paint( Sender : TObject );
begin
  if Assigned( LV.Selected ) then
  begin
    // Aktuelles ListItem-Icon zeichnen
    PaintBox1.Canvas.Draw( ... );
  end;
end;
und immer wenn sich das ListView-Item ändert, dann einfach ein
Delphi-Quellcode:
PaintBox1.Invalidate;
und die malt sich wieder selber.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz