![]() |
TListView und Spalte
Hallo,
ich habe mit den im Titel genannten Worten unter anderem auch eine Suche hier durchgeführt. Die Themen habe ich mir angesehen, aber nichts gefunden, das mich weiterbringt. Leider kann eine einfache TListView nur eine einzige CheckBox anzeigen. Ich brauche aber mind. 5 pro Zeile und VirtualTreeView ist mir zu aufwendig. Meine Idee ist daher jetzt, dass ich statt CheckBoxen einfach kleine Symbole nehme (sieht sogar chicker aus). Wenn der Benutzer jetzt auf einen Eintrag klickt, wird einfach ein entsprechendes Bild eingeblendet oder eben nicht. Damit habe ich dann meine CheckBoxen :mrgreen: Es hapert aber bei mir an der Umsetzung. Zwar weiß ich, auf welche Zeile der Benutzer geklickt hat. Ich bekomme aber nicht das Item bzw. SubItem. Ich kenne das Ereignis OnMouseDown. Hier bekäme ich die X,Y-Koordinaten. Ich könnte daher anhand dieser Daten das SubItem errechnen. Gibt es eine einfachere Methode, um dort ranzukommen? Gruß, Alex |
Re: TListView und Spalte
sei mir nicht böse aber WAS GENAU benutzt du jetzt?
Checkboxen? Comboboxen? Listboxen? listviews? :?: Ich hab grad keine ahnung :gruebel: aber VST ist eigentlich ganz komfortabel weil man da recht leicht daten hinterlegen kann. Zur not auch in SPaltenform. Ich persönlich habs noch net geschafft in einem Listview objekte zu hinterlegen. in einer listbox geht das einfacher ^^ LG stho |
Re: TListView und Spalte
Zitat:
Delphi-Quellcode:
Oder meinst du visuelle Objekte die in der ListView angezeigt werden sollen?
var
MeinObjekt: TObject; begin with ListView1.Items.Add do begin ... MeinObject := TObject.Create; Data := MeinObjekt; end; end; ... ... TObject(ListView1.Items[0].Data).Name := 'NeuerName'; //etc... |
Re: TListView und Spalte
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Also ich kann den einzelnen Zellen Bilder zuweisen und die auch ändern (lassen)
Delphi-Quellcode:
Mir geht es jetzt nur darum, mit geringstmöglichem Aufwand herauszufinden, auf welches Bild der Benutzer grad geklickt hat. Ich habe mal einen Screenshot angehängt. Vielleicht wird dann das Problem besser verständlich.
procedure TForm1.Button1Click(Sender: TObject);
Var LI : TListItem; begin LI:=ListView1.Items.Add; LI.SubItems.Add(''); LI.SubItems.Add(''); LI.SubItems.Add(''); LI.SubItems.Add('1-5'); LI.SubItemImages[2]:=1; ListView1.Items[Pred(ListView1.Items.Count)].ImageIndex:=2; end; Gruß, Alex |
Re: TListView und Spalte
Ich habe es jetzt so probiert
Delphi-Quellcode:
Ich bekomme aber immer eine '0' ausgegeben. :wall:
procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); Var I : Integer; aLeft : Integer; begin aLeft:=0; For I:=0 To Pred(ListView1.Columns.Count) Do Begin If Y In [aLeft..(aLeft + ListView1.Columns.Items[I].Width)] Then Break Else aLeft:=aLeft + ListView1.Columns.Items[I].Width; End; MessageBox(0, PAnsiChar(IntToStr(I)), 'SubItem', mb_OK); end; Wieso klappt das nicht? |
Re: TListView und Spalte
Ich habe die Logik jetzt nicht bis ins Letzte nachvollzogen, aber müsstest Du nicht X prüfen statt Y?
|
Re: TListView und Spalte
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Ich habe jetzt aber immer noch 2 Probleme:
Alex |
Re: TListView und Spalte
Probier es mal so:
Delphi-Quellcode:
In operiert mit Mengen. Mengenelemente dürfen aber maximal den Wert 255 haben, die Summe der Spaltenbreiten ist aber größer, deshalb klappt das nicht.
procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); Var I : Integer; aLeft : Integer; CurCol: integer; begin aLeft:=0; CurCol := -1; For I:=0 To Pred(ListView1.Columns.Count) Do Begin If (X >= aLeft) and (X <= (aLeft + ListView1.Columns[I].Width)) Then begin CurCol := i; Break; end Else aLeft:=aLeft + ListView1.Columns[I].Width; End; MessageBox(0, PAnsiChar(IntToStr(CurCol)), 'SubItem', mb_OK); end; |
Re: TListView und Spalte
Du könntest statt der ListView auch einen VirtualTreeView nehmen
> ich weiß "Tree", aber sie läßt sich auch als "List" verwenden :angel: Dort kannst du erstmal die Bilder direct von der Komponente zeichnen lassen und muß ihr nur einen BildIndex und eventuell noch 'ne ImageList (falls da nicht die über das Property Angebundene genommen werden soll) übergeben. Und dann gibt es ein fertiges OnColumnClick, wo du direkt die angeklickte Spalte bekommst und nichts mehr rechnen mußt. |
Re: TListView und Spalte
Zitat:
Delphi-Quellcode:
@himitsu
begin
aLeft:=0; For I:=0 To Pred(ListView1.Columns.Count) Do Begin If (X >= aLeft) and (X <= (aLeft + ListView1.Columns[I].Width)) Then Break Else aLeft:=aLeft + ListView1.Columns.Items[I].Width; End; If I > Pred(ListView1.Columns.Count) Then I:=-1; Label1.Caption:='Zeile: ' + IntToStr(ListView1.ItemIndex) + ' | ' + 'Spalte: ' + IntToStr(I); end; Ich weise auch hier die Bildchen nur per BildIndex zu. Ich brauche VirtualTreeView dazu nicht. Die hatte ich schon einmal am Wickel. Mit kurz mal auf das Form ziehen und loslegen war nicht und die wirklich dicke Anleitung wollte ich mir nicht durchlesen. Jetzt habe ich aber immer noch ein Problem: Um ItemIndex hatte ich mich nicht gekümmert. Ich hatte mich darauf verlassen, dass sich TListView allein darum kümmert. Tut sie aber nicht. Ich sehe bei Zeile jetzt immer -1 und das obwohl ich vorher zig Zeilen angelegt habe. Daran kann es also nicht liegen... Wo liegt denn hier nun wieder mein Denkfehler? Alex |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:48 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