Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi 3 Spalte einer ListView (https://www.delphipraxis.net/102948-3-spalte-einer-listview.html)

crasher1985 7. Nov 2007 13:11


3 Spalte einer ListView
 
hallo ich möchte folgendes Umsetzen,

ich habe ein ListView mit Checkboxen und insgesamt 5 Spalten.
Desweiteren habe ich eine ImageListe angelegt. Nun möchte ich in der 3,4 und 5 Spalte des Listview diese Bilder anzeigen sozusagen als zusätzlichen Status in abhängigkeit einer von mir gemachten Funktion.

Also wie kann man überhaupt auf die 3 palte zugreifen? Subitems ist ja nur die 2'te und wie kann man die Bilder der Imagebox dort einfügen?

Danke für die Hilfe

Bernhard Geyer 7. Nov 2007 13:15

Re: 3 Spalte einer Listbox
 
Entweder du schreibst dir einiges an Code für das Ownerdraw-Ereignis des "normalen" Listbox/Listview oder du nimmst/kaufst dir Grid/ListView-Komponenten die mehr an features bieten wie z.B. das ElPack

crasher1985 7. Nov 2007 13:18

Re: 3 Spalte einer Listbox
 
mmhh ich kann doch aber der Normalen ListView Komponente ImageListen zuweisen hab ich gesehen da werd ich die Images doch wohl auch anzeigen können ohne großen Aufwand oder?

Und vorallem wie kann ich auf die 3 Spalte zugreifen das ist das was mich am ehsten intressiert

Bernhard Geyer 7. Nov 2007 13:20

Re: 3 Spalte einer Listbox
 
Zitat:

Zitat von crasher1985
mmhh ich kann doch aber der Normalen ListView Komponente ImageListen zuweisen hab ich gesehen da werd ich die Images doch wohl auch anzeigen können ohne großen Aufwand oder?

Und vorallem wie kann ich auf die 3 Spalte zugreifen das ist das was mich am ehsten intressiert

Für erste Spalte ja - Für die anderen Spalten ist es nicht vorgesehen -> OwnerDraw.

leddl 7. Nov 2007 13:22

Re: 3 Spalte einer Listbox
 
Zitat:

Zitat von crasher1985
wie kann man überhaupt auf die 3 palte zugreifen? Subitems ist ja nur die 2'te und wie kann man die Bilder der Imagebox dort einfügen?

Wie kommst du drauf, dass SubItems nur die 2. Spalte ist? :gruebel: SubItems[0] ist die 2. Spalte, SubItems[1] die 3. usw...
Wie Bernhard schon gesagt hast, wirst du aber Icons in anderen Spalten als der ersten in OwnerDraw selbst zeichnen müssen. ;)

Btw: Änder doch bitte mal den Titel. Ich hab mich grade schon gewundert, seit wann Listboxen 3 Spalten haben können :stupid:

crasher1985 7. Nov 2007 13:32

Re: 3 Spalte einer ListView
 
ok das hab ich nun steh ich vor dem problem hab hier im Forum verschieden Themen zu hintergrundfarben ändern per CustomDrawSubItem gefunden. Nun möchte ich aber ein bild aus einer Imagelist wie soll ich das machen?

Delphi-Quellcode:
procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);
var R: TRect;
    Text: String;
begin

if (Item.Index = 1) and (SubItem = 1) then
  begin
    //get subitems rect
    ListView1CustomDrawSubItem(Sender.Handle, Item.Index, SubItem, cdsDefault , @R);
    Sender.Canvas.Brush. :=
    Sender.Canvas.FillRect(R);
    DefaultDraw := False;
  end

end;

crasher1985 7. Nov 2007 15:23

Re: 3 Spalte einer ListView
 
kann keiner helfen?

Muetze1 7. Nov 2007 15:26

Re: 3 Spalte einer ListView
 
Schau doch mal in die Hilfe zu Delphi-Referenz durchsuchenTImageList. Diese hat eine Methode zum malen eines Eintrages auf einen Canvas. In der Routine die du gepostet hast, hast du ein Rechteck und ein Canvas. Nun nur noch beides kombinieren - so schwer ist das ist.

generic 7. Nov 2007 15:46

Re: 3 Spalte einer ListView
 
Du solltest auf dem VirtualStringTree von Mike Lischke umsteigen.
Der hat die Funktionen im Bauch.

Kostenlos inkl. Source
Soft Gems

crasher1985 7. Nov 2007 19:45

Re: 3 Spalte einer ListView
 
mmhh umsteigen dauert jetzt zu lange mein Chef verlangt von mir am Freitag ne Final version nur irgendwie komm ich beim Zeichen der Images nicht weiter weil ich nicht weiss woher ich den Index für X Und Y bekomme.

BITTE HELFT MIR :wall:

crasher1985 8. Nov 2007 09:45

Re: 3 Spalte einer ListView
 
so hab das ganze jetzt ein wenig anders gemacht nu irgendetwas fehlt ncoh weil nix passiert..oder vllt. kann ichs so auch garnet machen

Delphi-Quellcode:
   
    pic1 := TBitmap.Create;
    ImageList1.GetBitmap(0,pic1);
    //ListView1CustomDrawSubItem(Sender.Handle, Item.Index, SubItem, cdsDefault , @R);
    Sender.Canvas.Brush.Bitmap := pic1;
    DefaultDraw := True;

Phoenix 8. Nov 2007 09:54

Re: 3 Spalte einer ListView
 
Ich hab Dir gesagt, Du sollst mal in die Hilfe zu Canvas.Draw gucken! :evil:
Delphi-Quellcode:
Sender.Canvas.Draw(x,y, pic1);

crasher1985 8. Nov 2007 09:57

Re: 3 Spalte einer ListView
 
ja hab ich ja acuh aber woher bekomme ich x und y ich find keien Methode dazu

Phoenix 8. Nov 2007 10:00

Re: 3 Spalte einer ListView
 
Das sind die Koordinaten, wohin Du das Bild im Canvas zeichnen willst. Probiers mal mit zwei Nullen für ganz links oben :roll:. Und welche Methode findest Du nicht?

crasher1985 8. Nov 2007 10:03

Re: 3 Spalte einer ListView
 
naja ich weiss das es die koordinaten sind es soll ja aber in eine Zelle des Listview gezeichnet werden also Item 1 Subitem=1 da dachte ich es gbt was was mir die Positiojn dieser "Zelle" zurückgibt

Phoenix 8. Nov 2007 10:17

Re: 3 Spalte einer ListView
 
Du kennst Doch die Columns-Eigenschaft der Listview, oder?

Die ColumnItems haben alle eine Breite. Also ist der Linke Anfang der Zweiten Spalte 0 + Breite der Ersten. Und der Linke Anfang der Dritten ist 0 + Breite der Ersten + Breite der Zweiten. So schwer ist das nicht.

Und was die Y - Koordinate angeht, so nimmst Du die Höhe eines einzelnen Items * Index des Items.

crasher1985 8. Nov 2007 10:27

Re: 3 Spalte einer ListView
 
ok ich habs also Left sieht so aus

Delphi-Quellcode:
R.Left := ListView1.Column[0].Width + ListView1.Column[1].Width + ((ListView1.Column[2].Width)div 2)- (pic1.Width div 2);
und Top bekomm ich ja in dem Moment wo ich der Funktion das Item übergebe!

Danke an alle :angel:

crasher1985 8. Nov 2007 10:55

Re: 3 Spalte einer ListView
 
Liste der Anhänge anzeigen (Anzahl: 1)
mhh eigenartig jetzt malt er 2 Spalten top und in der dritten sitz das Häkchen(Bild) irgendwie hinter der Spalte wenn ich diese Verschiebe werden sie sichtbar.
Siehe Bild

Delphi-Quellcode:
Form1.Refresh;
und
Delphi-Quellcode:
self.doublebuffered := true;
hab ich schon getestet bringt aber nichts.


Ausserdem noch ne Frage wie kann ich es vermeiden das wenn die Spalte vergrößert wird bzw. die Position ändert das alte noch da ist er zeichnet dann neu aber die alten Bilder werden est gelsöcht wenn das Item angewählt wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:25 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