![]() |
Listview vsReport Bitmaps
Hallo zusammen :-D
Ich habe eine Listview mit Viewstyle "vsreport". Bei einem bestimmten Kriterium sollen veschiedene Bitmaps angezeigt werden. Soweit funktioniert auch alles, jedoch beim Scrollen, verschwinden die Bitmaps, Zeile für Zeile :glaskugel: Kann mir vielleicht jemand helfen ? Liebe Grüße Starworld
Delphi-Quellcode:
procedure TFListe.ListView1DrawItem(Sender: TCustomListView;
Item: TListItem; Rect: TRect; State: TOwnerDrawState); var bmpImage: tBitmap; intX, intY: Integer; i,anzahl:Integer; begin I:=0; anzahl:=0; anzahl:= Listview1.Items.Count; while i < anzahl do begin with Listview1.Canvas do begin fillRect(rect); bmpImage := tBitmap.Create; try If (ListView1.Items[i].Caption) = '1' then bmpImage.Assign(Punkt1.Picture.Bitmap); If (ListView1.Items[i].Caption) = '2' then bmpImage.Assign(Punkt2.Picture.Bitmap); If (ListView1.Items[i].Caption) = '3' then bmpImage.Assign(Punkt3.Picture.Bitmap); If (ListView1.Items[i].Caption) = '4' then bmpImage.Assign(Punkt4.Picture.Bitmap); If (ListView1.Items[i].Caption) = '5' then bmpImage.Assign(Punkt5.Picture.Bitmap); intX := ((rect.Right - rect.Left) div 5) - (bmpImage.Width div 5); intY := ((rect.Bottom - rect.Top) div 5) - (bmpImage.Height div 5); draw(rect.Left + intX, rect.Top + intY, bmpImage); finally bmpimage.Free; end; end; i:=i+1; end; end; |
Re: Listview vsReport Bitmaps
Hallo,
Ich vermute mal, der Fehler liegt in der Schleife - Du übermals jedesmal alle Items! Nimm die Schleife raus und gestalte Deine Abfrage zum Setzen der entsprechenden Bitmaps auf andere Weise. roga |
Re: Listview vsReport Bitmaps
Danke für die schnelle Antwort :thumb:
Hat jemand eine Idee wie ich das realisieren könnte ? Weil ohne eine Schleife, zeigt er mir auch nur eine Bitmap an :wall: Liebe Grüße |
Re: Listview vsReport Bitmaps
Nur als Ansatz:
Delphi-Quellcode:
Vielleicht wäre hier ein Array "Punkt: array[1..5] of TBitmap;" besser geeignet.
if (Item.Caption = '1') then bmpImage.Assign(Punkt1.Picture.Bitmap) else
if (Item.Caption = '2') then bmpImage.Assign(Punkt2.Picture.Bitmap) else if ... roga |
Re: Listview vsReport Bitmaps
Danke für deine Hilfe :oops:
Leider hat beides nicht so richtig funktioniert. Ich weis einfach nicht wie Ich das neuzeichnen oder die Schleife wegbekomme :wall: Liebe Grüße Starworld |
Re: Listview vsReport Bitmaps
Liste der Anhänge anzeigen (Anzahl: 1)
Hat keiner eine Idee ?
Ich Verzweifele gerade an dem Problemchen So stelle ich mir das ganze vor Grüße SW :roll: |
Re: Listview vsReport Bitmaps
Hallo,
nach dem Screen hat die Listview 3 Spalten (Titel, Jahr, Wertung), so dass die 3 Spalte abgefragt werden muss.
Delphi-Quellcode:
Manchmal muss eben viel experimentiert werden, um ans Ziel zu gelangen :gruebel:
if (Item.SubItems.Strings[1] = '1') then ...
roga |
Re: Listview vsReport Bitmaps
Hallo zusammen
Und danke für die Antwort :oops: Ja ich hatte vergessen zu erwähnen, das ich es momentan mit einer zweiten Listview Komponente ausprobiert habe :oops: Ich hab es jetzt anders gemacht
Delphi-Quellcode:
Macht zwar im Prinzip das gleiche, aber man kann nicht jede Spalte mit einem Icon oder Bitmap versehen , oder ?
If (Bewertung.Kommentar = '1') then Fliste.ListView.Items[i-2].ImageIndex := 0 else
If (Bewertung.Kommentar = '2') then Fliste.ListView.Items[i-2].ImageIndex := 1 else If (Bewertung.Kommentar = '3') then Fliste.ListView.Items[i-2].ImageIndex := 2 else If (Bewertung.Kommentar = '4') then Fliste.ListView.Items[i-2].ImageIndex := 3 else If (Bewertung.Kommentar = '5') then Fliste.ListView.Items[i-2].ImageIndex := 4 else If (Bewertung.Kommentar = '') then Fliste.ListView.Items[i-2].ImageIndex := -1 else Liebe Grüße Starworld |
Re: Listview vsReport Bitmaps
Hallo Starworld,
habe Dir noch einen Codeschnipsel aus einer meiner Kombos rausgesucht, vielleicht hilft es Dir weiter. Ist aber ohne nachträglichen Test umgeschrieben wurden, daher auch keine Garantie auf Fehlerfreiheit!
Delphi-Quellcode:
roga
procedure TListView1.DrawItem(Sender: TCustomListView;
Item: TListItem; Rect: TRect; State: TOwnerDrawState); var i: integer; s: string; TR1, TR2, ARect: TRect; Bmp: TBitmap; Col, TransCol: TColor; AOrientation: Cardinal; begin // Hintergrundfarbe festlegen if Item.Selected then // ausgewählt begin if Focused then Col := clGray else Col := clSilver; end else Col := clWhite; // Hintergrund füllen ListView1.Canvas.Brush.Style := bsSolid; ListView1.Canvas.Brush.Color := Col; ListView1.Canvas.FillRect(Rect); ListView1.Canvas.Brush.Style := bsClear; // Schriftfarbe, evt. weitere Textattribute ListView1.Canvas.Font.Color := clBlack; // Textausgabe ARect.Left := Rect.Left + 6; ARect.Top := Rect.Top + 1; ARect.Bottom := Rect.Bottom; for i := 0 to ListView1.Columns.Count -1 do begin ARect.Right := ARect.Left + ListView1.Column[i].Width - 6; if (i = 0) then s := Item.Caption else s := Item.SubItems.Strings[i-1]; // Textausrichtung case ListView1.Column[i].Alignment of taLeftJustify: AOrientation := DT_LEFT; taCenter: AOrientation := DT_CENTER; taRightJustify: AOrientation := DT_RIGHT; end; // Grafik in 3. Spalte zeichnen if (i = 2) then begin Bmp := TBitmap.Create; if (s = '1') then Bmp.Assign(bild1) else if (s = '2') then Bmp.Assign(bild2) else ... TR1 := Classes.Rect(ARect.Left, ARect.Top + 1, ARect.Left + Bmp.Width, ARect.Top + 1 + Bmp.Height); TR2 := Classes.Rect(0, 0, Bmp.Width, Bmp.Height); TransCol := Bmp.Canvas.Pixels[0, 0]; // Transparentfarbe ListView1.Canvas.BrushCopy(TR1, Bmp, TR2, TransCol); Bmp.Free; end else // Text zeichnen DrawText(ListView1.Canvas.Handle, PChar(s), Length(s), ARect, AOrientation); // Nächste Spalte ARect.Left := ARect.Left + ListView1.Column[i].Width; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 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-2025 by Thomas Breitkreuz