Delphi-PRAXiS

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 VST GetText Problem (https://www.delphipraxis.net/137351-vst-gettext-problem.html)

youuu 19. Jul 2009 10:07


VST GetText Problem
 
Hi,

habe ein Problem mit VST.GetText, wenn ich

Delphi-Quellcode:
procedure TFormMain.VstGetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: string);
Var
  Customer: TCustomerdaten;
begin
  Customer:= TCustomerdaten(Vst.GetNodeData(node)^ );

  case Column of
    0: CellText:= Customer.company_name;
    1: CellText:= Customer.email;
    2: CellText:= Customer.company_industry;
    3: CellText:= Customer.Anrede +' '+Customer.name;
    4: CellText:= Customer.create_date;
    5: CellText:= Customer.customer_number;
    6: Celltext:= Customer.status;
  end;
end;
Funktioniert alles, ich kann Nodes löschen usw.

Allerdings wenn ich nun

Delphi-Quellcode:
procedure TFormMain.VstGetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: string);
Var
  Customer: TCustomerdaten;
begin
  Customer:= TCustomerdaten(Vst.GetNodeData(node)^ );

  If Customer.status = 'aktive' Then
    Sender.Font.Color:= ClGreen
  Else if Customer.status = 'inaktive' then
    Sender.Font.Color:= ClRed;

  case Column of
    0: CellText:= Customer.company_name;
    1: CellText:= Customer.email;
    2: CellText:= Customer.company_industry;
    3: CellText:= Customer.Anrede +' '+Customer.name;
    4: CellText:= Customer.create_date;
    5: CellText:= Customer.customer_number;
    6: Celltext:= Customer.status;
  end;
end;
Probiere, damit die spalten eingefärbt werden und dann auf den Button Node löschen klick, passiert gar nichts mehr und das Programm hängt sich auf und im Taskmanager verursacht das Programm aufeinmal 50% auslastung.

Wie kann das sein?


PS: Lösch Button sieht so aus

Delphi-Quellcode:
procedure TFormMain.ButtonDeleteClick(Sender: TObject);
begin
  Try
    If Application.MessageBox('Möchten Sie den Kunden wirklich löschen?', 'Kunden löschen', MB_OKCancel or MB_SETFOREGROUND) = IDok then
      CustomerDelete; // Funktion
  Except
    Showmessage('Sie müssen einen Kunden auswählen.');
  End;
end;
Wobei nichtmal die MessageBox dann aufgerufen wird, wenn ich die Zeilen einfärbe

Bernhard Geyer 19. Jul 2009 10:10

Re: VST GetText Problem
 
Wenn du permanent die Farbe des Controls änderst (Sender.Font.Color) wird jedesmal das Control komplett neu gezeichent.
Das Färben muß in entsprechenden Draw-Routinen des Grids erfolgen und dann auf dem aktuellen Canvas des Controls und nicht auf dem allgemeinen Font-Property.

youuu 19. Jul 2009 10:18

Re: VST GetText Problem
 
Das hab ich mir fast gedacht, das es sich immer neu zeichnet so kam es mir nämlich vor ;) nun hab ich gewissheit.

Danke.

Edit: hab es nun so gelöst:

Delphi-Quellcode:
procedure TFormMain.VstCustomerBeforeCellPaint(Sender: TBaseVirtualTree;
  TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
  CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect);
begin
  Customer:= TCustomerdaten(VstCustomer.GetNodeData(node)^ );

    If Customer.status = 'aktive' Then
      TargetCanvas.Brush.Color := clGreen
    Else
      TargetCanvas.Brush.Color := clRed;

    TargetCanvas.FillRect(CellRect);
end;
Allerdings wie war der befehl um nur die Schriftfarbe zuändern und nicht die Hintergrundfarbe der Spalte

Bernhard Geyer 19. Jul 2009 12:14

Re: VST GetText Problem
 
Zitat:

Zitat von youuu
Allerdings wie war der befehl um nur die Schriftfarbe zuändern und nicht die Hintergrundfarbe der Spalte

Müsste über TargetCanvas.Font.Color gehen

youuu 19. Jul 2009 12:21

Re: VST GetText Problem
 
Das denk ich auch, bloß was muss hier rein dann

Delphi-Quellcode:
TargetCanvas.FillRect(CellRect);
Das hab ich nicht raus gefunden :/

semo 19. Jul 2009 13:37

Re: VST GetText Problem
 
Ich würde im Event VSTPaintText die property TargetCanvas.Font.Color deinen Wünschen nach setzen.
Das OnGetText Event dient lediglich zum Ermitteln des Textes - wie der Name des Events ja schon vermuten lässt.

youuu 19. Jul 2009 13:47

Re: VST GetText Problem
 
Genau das hab ich gesucht.

Danke

semo 19. Jul 2009 13:48

Re: VST GetText Problem
 
No problem,
der VST hat schon ne Menge zu bieten.

Am besten schaut man sich mal die Demos an.
Diese kann man direkt von der Webseite des Autors downloaden.


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