![]() |
Listview mit Objecten
Ich brauche für meine Studienarbeit eine TListView die in den Spalten u. Zeilen Objecte enthält (Buttons, Progressbar, usw.); So wie bei "Berg GridView 2.6" ! Das dumme ist nur ich muss das selber bauen. Dieses Thema wurde hier schon oft aber immer ungenügend behandelt. :wall:
Mit "MyButton[i].Parent := Listview1;" usw. ist kein Auslangen gefunden. Die Objecte werden beim Repaint vom ListView überschrieben und beim scrollen nicht bewegt. Vielleicht hat ja doch mal einer ne gute Idee? Danke ! Svenja :? |
Re: Listview mit Objecten
du musst sie einfach im OnCustomDraw neu zeichnen lassen.
z.B.
Delphi-Quellcode:
Procedure TForm1.JvListView1CustomDraw(Sender: TCustomListView;
const ARect: TRect; var DefaultDraw: Boolean); var _i:integer; for _i := 0 to High(mySterne) do begin mySterne[_i].Left := JvListView1.Column[0].Width; mySterne[_i].Width := JvListView1.Column[1].Width; mySterne[_i].Top := JvListView1.Items.Item[_i].Top +3; end; end; |
Re: Listview mit Objecten
Hi !
Danke für den Tip! :-D Das scrollen funktioniert ja schon ! Leider werden die Objecte beim Scrollen über den Rand des ListView's hinausgeschoben und das Ändern der Column.Width wird nicht in Echtzeit durchgeführt. Svenja
Code:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls; type TForm1 = class(TForm) ListView1: TListView; procedure ListView1CustomDraw(Sender: TCustomListView; const ARect: TRect; var DefaultDraw: Boolean); procedure FormCreate(Sender: TObject); private procedure MyButtonClick(Sender : TObject); public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} var MyButton : array of TButton; procedure TForm1.MyButtonClick(Sender : TObject); var s : string; begin s := ListView1.Items[(Sender as TButton).Tag].Caption; ShowMessage(s); end; procedure TForm1.ListView1CustomDraw(Sender: TCustomListView; const ARect: TRect; var DefaultDraw: Boolean); var i : Integer; begin setlength(MyButton, Listview1.Items.Count); for i := 0 to Listview1.Items.Count - 1 do begin MyButton[i].Parent := Listview1; MyButton[i].Left := ListView1.Column[0].Width; MyButton[i].Top := ListView1.Items.Item[i].Top +3; MyButton[i].Height := 12; MyButton[i].Width := ListView1.Column[1].Width; MyButton[i].Tag := i; MyButton[i].Caption := ListView1.Items[i].Caption; MyButton[i].OnClick := MyButtonClick; end; end; procedure TForm1.FormCreate(Sender : TObject); var i : Integer; begin setlength(MyButton, Listview1.Items.Count); for i := 0 to ListView1.Items.Count - 1 do begin MyButton[i] := TButton.Create(ListView1); MyButton[i].Parent := Listview1; end; end; end. |
Re: Listview mit Objecten
Denkanstösse:
Du könntest entweder "Paint" oder "WndProc" überschreiben und dann eine eigene Paint-Methode basteln, in der Du auch abfängst, ob das ClientRect des Listviews Koordinatenmäßig verlassen wird - dann evtl. eine Region nehmen, um den Zeichenbereich auf das ListView zu begrenzen - viel Erfolg! Gruß |
Re: Listview mit Objecten
Hi! Danke für den Tip! :lol:
Das Problem mit dem Überscrollen hab ich bereits auf einfache Art gelöst. Ich blende die Objecte beim Scrollen aus und wieder ein. ...if ListView1.Items.Item[i].Top < 20 then MyButton[i].Visible:= False else MyButton[i].Visible:= True; Am ändern der Column.Width in Echtzeit kämpfe ich noch. Werde es jetzt mal mit deinem Tip probieren. Danke Svenja ! PS: Wie ändert man in einem ListView die Column Höhe ohne den Font zu verändern ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz