Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Daten in einem DBGrid anders anzeigen (nicht TField.OnGetText) (https://www.delphipraxis.net/190097-daten-einem-dbgrid-anders-anzeigen-nicht-tfield-ongettext.html)

Der schöne Günther 30. Aug 2016 14:28

Datenbank: Datenbank • Version: Version • Zugriff über: FireDAC

Daten in einem DBGrid anders anzeigen (nicht TField.OnGetText)
 
Ich habe ein
Delphi-Quellcode:
TDataSet
. Sagen wir, es hat nur eine Text-Spalte.
Und jetzt möchte ich im linken
Delphi-Quellcode:
TDBGrid
den Text anzeigen während der rechte
Delphi-Quellcode:
TDBGrid
den Text rückwärts anzeigen soll.

Arg konstruiert, aber ich denke das reicht.

Wie tue ich das? Das
Delphi-Quellcode:
OnGetText
-Event des Feldes der Tabelle setzen macht ja keinen Sinn, das beinflusst ja beide DBGrids.

mkinzler 30. Aug 2016 14:30

AW: Daten in einem DBGrid anders anzeigen (nicht TField.OnGetText)
 
Z.B. als berechnetes Feld

TRomano 30. Aug 2016 14:47

AW: Daten in einem DBGrid anders anzeigen (nicht TField.OnGetText)
 
Und das berechnete Feld "machst" Du entweder im SQL-Statement oder in den Methoden des TField ...

Der schöne Günther 30. Aug 2016 14:54

AW: Daten in einem DBGrid anders anzeigen (nicht TField.OnGetText)
 
Gibt es keine Möglichkeit die ohne die Datenkomponente (z.B. Query) jedes mal anzufassen wenn man an der ANZEIGE etwas drehen will. Ich kann doch nicht z.B. ständig vier Felder zurückgeben, wenn ich einmal in Zentimetern, einmal in Zoll. Einmal mit Nachkommastellen, einmal ohne...

mkinzler 30. Aug 2016 15:00

AW: Daten in einem DBGrid anders anzeigen (nicht TField.OnGetText)
 
Du kannst das auch "in" der Datenbank machen oder wenn es um die Anzeige geht, bei der Anzeige.

Der schöne Günther 30. Aug 2016 15:16

AW: Daten in einem DBGrid anders anzeigen (nicht TField.OnGetText)
 
Ich kenne mich mit Datenbanken nicht wirklich aus, deshalb so dumme Fragen.

Was ist denn die "Anzeige"? Ich dachte das sei mein
Delphi-Quellcode:
TDBGrid
.
Bei diesem komischen
Delphi-Quellcode:
TDataSource
-Proxy habe ich auch nichts gefunden.

mkinzler 30. Aug 2016 15:22

AW: Daten in einem DBGrid anders anzeigen (nicht TField.OnGetText)
 
Man kann das Zeichnen der Spalten im Grid auch selber durchführen (Ownerdraw) bzw. wenn es nur um die Formatierung der Werte geht, dass im TField erledigen.
Oder mann macht das bei der Abfrage

SQL-Code:
select
  <Feld>, ReverseString(<Feld>) as MirrorFeld, ...

Der schöne Günther 30. Aug 2016 17:51

AW: Daten in einem DBGrid anders anzeigen (nicht TField.OnGetText)
 
Nein, wenn man das im
Delphi-Quellcode:
TField
(z.B.
Delphi-Quellcode:
OnGetText
) macht wirkt sich dass ja auch auf alle anderen Anzeigen (z.B. andere TDBGrids) aus.

Das mit dem
Delphi-Quellcode:
OwnerDraw
scheint genau das zu sein wonach ich gesucht habe. Zwar unnötig umständlich, aber damit komme ich ans Ziel. Vielen Dank :thumb:

mm1256 30. Aug 2016 18:24

AW: Daten in einem DBGrid anders anzeigen (nicht TField.OnGetText)
 
Ich benutze immer den Canvas des DBGrid um abweichende Anzeigen zu realisieren. "OnDrawColumnCell" ist dein Freund:

Delphi-Quellcode:
procedure TMyGrid.GridDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  if (Column.FieldName = 'MeinSpeziellesTextFeld') then
  with (Sender as TDBGrid).Canvas do begin
    . . .
  end;
end;

Der schöne Günther 30. Aug 2016 18:33

AW: Daten in einem DBGrid anders anzeigen (nicht TField.OnGetText)
 
Ganz genauso (nur ohne das
Delphi-Quellcode:
with
) habe ich es auch gemacht, wieder etwas gelernt :)


Delphi-Quellcode:
   TDBGridHelper = class helper for TDBGrid
      public procedure writeText(const inRect: TRect; const text: String);
   end;

procedure TForm1.DBGrid1DrawColumnCell(
   Sender: TObject;
   const Rect: TRect;
   DataCol: Integer;
   Column: TColumn;
   State: TGridDrawState
);
var
   displayText: String;
begin
   if (Column.FieldName='someFancyField') and Assigned(Column.Field) then begin
      displayText := '***' + Column.Field.DisplayText + '***';
      (Sender as TDBGrid).writeText(Rect, displayText);
   end else
      (Sender as TDBGrid).DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

procedure TDBGridHelper.writeText(
   const inRect: TRect;
   const text: String
);
const
   someMagicOffsetPx = 2; // Siehe TDBGrid::DefaultDrawColumnCell
begin
   Canvas.FillRect(inRect);
   Canvas.TextRect(
      inRect,
      inRect.Left + someMagicOffsetPx,
      inRect.Top + someMagicOffsetPx,
      text
   );
end;


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf