Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Tabelle und Rahmen (https://www.delphipraxis.net/103323-tabelle-und-rahmen.html)

Deep-Sea 15. Nov 2007 07:43

Re: Tabelle und Rahmen
 
Zitat:

Zitat von pauletta82
[...] heißt also dass man in der ersten spalte auch per klick text einfügen kann, während die beiden letzten spalten zur reinen anzeige gedacht sind [...]

Das hört sich nun aber sehr nach TListView an ^^ ... hier mal ein Denkanstoß:

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;

pauletta82 16. Nov 2007 08:50

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]

Deep-Sea 16. Nov 2007 09:18

Re: Tabelle und Rahmen
 
Zitat:

Zitat von pauletta82
[...] gibt es keinen "allgemeinen" status, der immer ausgeführt wird??

Die Draw-Ereignisse werden bei jeder Zeichenoperation aufgerufen. Der Status ist dazu da, um zu wissen wie du ggf. Zeichnen musst - bei deiner Linie - die unabhängig vom Status ist - kannst du den Status einfach ignorieren ...

Deep-Sea 16. Nov 2007 11:45

Re: Tabelle und Rahmen
 
Ich habe Mittagspause und nix anderes zu tun wie es schein :mrgreen:

ListView.ViewStyle := vsReport;

Delphi-Quellcode:
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;
Funktioniert bei mir wunderbar :P ...

pauletta82 19. Nov 2007 08:04

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:

Zitat von Deep-Sea
Ich habe Mittagspause und nix anderes zu tun wie es schein :mrgreen:
...
Funktioniert bei mir wunderbar :P ...


Deep-Sea 19. Nov 2007 08:12

Re: Tabelle und Rahmen
 
Zitat:

Zitat von pauletta82
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...

Das habe ich schon zur Kenntnis genommen. Aber dies kann eigentlich nicht sein, da die OnDraw Ereignisse alle beim Zeichnen kommen (logisch) und nicht erst wenn die Maus über der Zeile ist ...
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 ...

pauletta82 19. Nov 2007 08:47

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]

Deep-Sea 19. Nov 2007 08:49

Re: Tabelle und Rahmen
 
Zitat:

Zitat von pauletta82
ich benutze delphi 2007... oder ob es daran liegt???

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:

pauletta82 19. Nov 2007 08:52

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]

Deep-Sea 19. Nov 2007 09:03

Re: Tabelle und Rahmen
 
Zitat:

Zitat von pauletta82
hab ein neues projekt erstellt und den code entsprechen reinkopiert, leider immer noch derselbe fehler... hier mein test-coding aus dem "leeren" projekt:

Mhh ... tut mir leid. Vlt funktioniert es bei D2007 ja nicht. :gruebel:
Evtl. testet ein netter Forumsnutzer das noch mal für uns?! ^^


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:15 Uhr.
Seite 2 von 3     12 3      

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