Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Im DBGrid auf Kommando bestimmte Felder färben (https://www.delphipraxis.net/60026-im-dbgrid-auf-kommando-bestimmte-felder-faerben.html)

rascalpo 1. Jan 2006 23:52

Datenbank: Paradox • Version: 7 • Zugriff über: TTable

Im DBGrid auf Kommando bestimmte Felder färben
 
Also, ich hab ein DBGrid.

In dem Grid sind nur Nummern eingetragen, manchmal aber auch nichts.

Wenn man eine beliebige Zelle im DBGrid anklickt (markiert), sollen alle anderen Zellen mit gleichem Wert einen blauen/roten Rand kriegen.

Wie man eine Zelle mit einem bestimmten Wert einfärbt, weiss ich schon.

Wie kann ich das machen?
Ideen, Anregungen, Voschläge??? DANKE!

Karstadt 2. Jan 2006 08:11

Re: Im DBGrid auf Kommando bestimmte Felder färben
 
hallo. Benutze die Suche :???: (wurde mir auch immer gesagt)

http://www.delphipraxis.net/internal...848&highlight=

:wink:

rascalpo 2. Jan 2006 11:59

Re: Im DBGrid auf Kommando bestimmte Felder färben
 
Sehr schön. Ich finde mit der Suchfunktion nichts darüber.
Nun, mein Problem ist nicht wie ich die Farbe eines Feldes ändere.

DBGrid zeichnet wahrscheinlich nur wenns notwendig ist.
Wenn ich also mit der Pfeiltaste im Grid navigiere, dann ändert sich nichts.
Die Farben sollten sich in Echtzeit ändern.

Eine mögliche Lösung wäre, das Draw-Ereignis vom Grid auszulösen.
Ich weiss aber auch nicht wo ich das finden kann!!

Karstadt 2. Jan 2006 12:23

Re: Im DBGrid auf Kommando bestimmte Felder färben
 
DataSoucre.onChange(Sender);
begin
Dbgrib.refresh;
end;

rascalpo 4. Jan 2006 03:12

Re: Im DBGrid auf Kommando bestimmte Felder färben
 
Danke.
Nach einigem Rumprobieren funzt das prima(sogar ohne dem refresh).

Jetzt hab ich nur noch ein einziges Problem, eine Anweisung:
Delphi-Quellcode:
procedure TMainForm.DBAllGridsDrawColumnCell(Sender: TObject;const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if (Zeiten.FieldByName(IntToStr(DataCol)).AsVariant = DBZeitGrid.SelectedField.Value) then begin
  ...       // ^da
  end;
end;
Damit will ich feststellen, ob der Inhalt von der gerade gezeichneten Zelle der gleiche ist wie der von der markierten Zelle...
Funktioniert aber nicht so wie ichs will...

Sharky 4. Jan 2006 06:57

Re: Im DBGrid auf Kommando bestimmte Felder färben
 
Hai rascalpo,


Zitat:

Zitat von rascalpo
Delphi-Quellcode:
  if (Zeiten.FieldByName(IntToStr(DataCol)).AsVariant = DBZeitGrid.SelectedField.Value) then begin
  ...       // ^da
  end;
end;

Das kann so nicht gehen. Mit Delphi-Referenz durchsuchenFieldByName kannst Du über den Feldnamen auf den Inhalt zugreifen. Du übergibst aber nicht den Namen des Feldes sondern seine Nummer. Du müsstest also nicht mit FieldByName sondern direkt mit den Delphi-Referenz durchsuchenFields arbeiten.

Ungetestet könnte das dann so aussehen:
Delphi-Quellcode:
procedure TDemoForm.DBAllGridsDrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: integer; Column: TColumn; State: TGridDrawState);
begin
  with (Sender as TDBGrid) do
  begin
    if (DataSource.DataSet.Fields[DataCol].AsVariant = SelectedField.Value) then
    begin
      //
    end;
  end;
end;
Oder aber, wenn Du den Feldnamen verwenden möchtest dann so:
Delphi-Quellcode:
procedure TDemoForm.DBAllGridsDrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: integer; Column: TColumn; State: TGridDrawState);
begin
  with (Sender as TDBGrid) do
  begin
    if (DataSource.DataSet.FieldByName(Column.FieldName).AsVariant = SelectedField.Value) then
    begin
      //
    end;
  end;
end;

rascalpo 4. Jan 2006 15:58

Re: Im DBGrid auf Kommando bestimmte Felder färben
 
Jetzt hab ichs umgeändert.

jetzt markiert er die ganze spalte, und alles drum herum, ausser dem in der Zeile, in der sich das markierte Feld befindet... :?: :?
Delphi-Quellcode:
if (Zeiten.FieldByName(Column.FieldName).AsVariant = DBZeitGrid.SelectedField.Value) then begin
funktioniert genausowenig....

ich will in OnDrawColumnCell prüfen, ob der Wert im gerade gezeichnetem Feld mit dem im gerade markiertem übereinstimmt.
was mach ich falsch???


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