![]() |
Re: Tabelle und Rahmen
Zitat:
Delphi-Quellcode:
procedure TForm1.ListView1AdvancedCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage; var DefaultDraw: Boolean); var R: TRect; begin With (Sender as TListView).Canvas do begin R := Item.DisplayRect(drBounds); MoveTo(R.Left, R.Bottom - 1); LineTo(R.Right, R.Bottom - 1); end; end; |
Re: Tabelle und Rahmen
der ansatz ist gut, die linie wird auch gezeichnet an der richtigen stelle, aber es tritt noch folgendes problem auf:
die linie wird erst gezeichnet wenn ich mit der maus über die entsprechende zeile scrolle, wenn ich diese zeile dann anklicke und danach eine andere zeile anklicke, ist die linie unter der ersten zeile auf einmal wieder weg, sie wird erst dann wieder neu gezeichnet wenn ich wieder mit der maus darüber scrolle... ich hab schon eine ganze menge ausprobiert und versucht, aber bekomme das problem nicht in den griff, irgendwie wird diese erste linie zwischenzeitlich überschrieben, in welcher reihenfolge wird denn das listview gemalt? hab auch mal mit dem status rumprobiert, aber nichts passendes gefunden, gibt es keinen "allgemeinen" status, der immer ausgeführt wird?? begin With (Sender as TListView).Canvas do begin R := Item.DisplayRect(drBounds); MoveTo(R.Left, R.Bottom - 1); LineTo(R.Right, R.Bottom - 1); end; end;[/delphi][/quote] |
Re: Tabelle und Rahmen
Zitat:
|
Re: Tabelle und Rahmen
Ich habe Mittagspause und nix anderes zu tun wie es schein :mrgreen:
ListView.ViewStyle := vsReport;
Delphi-Quellcode:
Funktioniert bei mir wunderbar :P ...
procedure TForm1.ListView1AdvancedCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage; var DefaultDraw: Boolean); var R: TRect; begin If Stage = cdPostPaint then With Sender as TListView do begin R := Item.DisplayRect(drBounds); Canvas.MoveTo(R.Left, R.Bottom - 1); Canvas.LineTo(R.Right, R.Bottom - 1); end; end; |
Re: Tabelle und Rahmen
hallo,
soweit war ich auch schon, aber leider hats immer noch nicht geklappt, hab noch immer dasselbe problem: "...die linie wird erst gezeichnet wenn ich mit der maus über die entsprechende zeile scrolle, wenn ich diese zeile dann anklicke und danach eine andere zeile anklicke, ist die linie unter der ersten zeile auf einmal wieder weg, sie wird erst dann wieder neu gezeichnet wenn ich wieder mit der maus darüber scrolle... " nochmal zur klarstellung: die linie soll genau dann gezeichnet werden, wenn ich die "Gleich"-Taste drücke, und sie soll unabhängig von irgendwelchen mausbewegungen gezeichnet werden und auch nicht wieder entfernt werden wenn ich eine zeile markiere... Zitat:
|
Re: Tabelle und Rahmen
Zitat:
Der Fehler muss wohl bei dir oder deinem Delphi liegen :stupid: Welche Version nutzt du eigentlich? Du wirst ja sicherlich etwas mehr Code haben als diesen Schnipsel, vlt. "zerstörst" du damit den reibungslosen Ablauf?! PS: Zum testen kannst du ja ein neues Projekt anfangen und erstmal nur das Zeichnen der Linie testen. Wenn dies geht weißt du, dass der Fehler in dem Programm liegen wird ... |
Re: Tabelle und Rahmen
ich benutze delphi 2007... oder ob es daran liegt???
[...PS: Zum testen kannst du ja ein neues Projekt anfangen und erstmal nur das Zeichnen der Linie testen. Wenn dies geht weißt du, dass der Fehler in dem Programm liegen wird ...[/quote] |
Re: Tabelle und Rahmen
Zitat:
Geht denn das Zeichnen der Linie, wenn du mal ein komplett neues Projekt nur zum testen anfängt? Wenn ja, poste doch mal etwas von deinem Code, vlt. wird dort ja ein Fehler ersichtlich :wink: |
Re: Tabelle und Rahmen
hab ein neues projekt erstellt und den code entsprechen reinkopiert, leider immer noch derselbe fehler... hier mein test-coding aus dem "leeren" projekt:
procedure TForm1.FormCreate(Sender: TObject); var NewItem: TListItem; begin //zum Probieren für das ListView -->später löschen //Vorab-Definitionen lsvBand.ViewStyle := vsReport; lsvBand.RowSelect := True; //Füllen der ListView NewItem := lsvBand.Items.Add; //Zeile erzeugen (Item 0) NewItem.Caption := '4711'; //Item 0, Caption NewItem.SubItems.Add('Hallo'); //Item 0, SubItem 0 NewItem.SubItems.Add('Hallo'); //Item 0, SubItem 1 NewItem.SubItems.Add('Hallo'); //Item 0, SubItem 2 NewItem := lsvBand.Items.Add; //nächste Zeile erzeugen NewItem.Caption := '4712'; NewItem := lsvBand.Items.Add; //nächste Zeile erzeugen NewItem.Caption := '4713'; NewItem := lsvBand.Items.Add; //nächste Zeile erzeugen NewItem.Caption := '4714'; NewItem := lsvBand.Items.Add; //nächste Zeile erzeugen NewItem.Caption := '4715'; //Zellen überschreiben // Zeile Spalte lsvBand.Items[2].Caption := 'tttt'; lsvBand.Items[0].SubItems[0] := 'kiki' ; end; procedure TForm1.lsvBandAdvancedCustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage; var DefaultDraw: Boolean); var rechteck: TRect; begin with lsvBand.Canvas do begin // If Stage = cdPostPaint then With Sender as TListView do begin //zeichnet eine Linie unterhalb der Zeile "Item" rechteck := Item.DisplayRect(drBounds); MoveTo(rechteck.Left, rechteck.Bottom-1); LineTo(rechteck.Right, rechteck.Bottom-1); end; //Abfrage ob Eintrag markiert if cdsSelected in State then begin font.Color := clwhite; end end; end; [...Gut zu wissen. Ich habe "nur" D2006 ... Geht denn das Zeichnen der Linie, wenn du mal ein komplett neues Projekt nur zum testen anfängt? Wenn ja, poste doch mal etwas von deinem Code, vlt. wird dort ja ein Fehler ersichtlich :wink:[/quote] |
Re: Tabelle und Rahmen
Zitat:
Evtl. testet ein netter Forumsnutzer das noch mal für uns?! ^^ |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 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