Autor Beitrag
Arne Danikowski
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 194



BeitragVerfasst: Mi 06.02.08 15:54 
Also ich habe schon einiges gelesen hier im Forum aber leider noch keine Lösung

Ich habe eine Datenbank, wo einige Datensätze im Datenbankfeld ein X eingetragen haben.
Ich möchte nun diese Datensätze in einer anderen farbe darstellen

folgendes habe ich versucht:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TJP_Main.RxDBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);

 if  dm.table1.FieldByName('MARKER').AsString='X'
  then  rxdbgrid1.Canvas.Brush.Color :=clRed;


funktioniert leider nicht. Wenn ich die Eigenschaft des rxgrid1 "DefaultDrawing" auf "false" stelle#
sind alle Felder im Grid nur noch unsichtbar.

Danke für die regen, informativen und zahlreichen Antworten :)


Moderiert von user profile iconjasocul: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 07.02.2008 um 12:19
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Mi 06.02.08 16:02 
Ich mach sowas meist so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
  if Sender is TMyDBGrid then
   if not (gdSelected in State) then
    with (Sender as TMyDBGrid), Canvas do
     if not SelectedRows.CurrentRowSelected then
     begin
      if (FWirklist.FieldByName('ERRECHNET').AsFloat > max) and
         (FWirklist.FieldByName('MAXIMAL').AsFloat > 0)     then
       Brush.Color := clAqua
      else
       Brush.Color := clWhite;
      FillRect(Rect);
      DefaultDrawColumnCell(Rect, DataCol, Column, State);
     end;


Zeile 1 + 3 ändern:
TMyDBGrid musst du durch deine GridKomponente ersetzen (ist meine eigenes vererbtes Grid),
Zeile 6+7 ändern:
FWirklist ist meine Datenmenge (Clientdataset), musst du durch deine Datenmenge und deine Bedingung ersetzen

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
Arne Danikowski Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 194



BeitragVerfasst: Mi 06.02.08 16:12 
Habe das mal so umgebastelt

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
if Sender is rxdbgrid1 then
   if not (gdSelected in State) then
    with (Sender as rxdbgrid1), Canvas do
     if not SelectedRows.CurrentRowSelected then
     begin
      if dm.table1.FieldByName('MARKER').Asstring = 'X'
      then
       Brush.Color := clAqua
      else
      Brush.Color := clred;
      FillRect(Rect);
      DefaultDrawColumnCell(Rect, DataCol, Column, State);
     end;


bekomme aber beim komelieren

"if sender is rxdbgrid then" [DCC Fehler] JP.pas(3076): E2015 Operator ist auf diesen Operandentyp nicht anwendbar
Xong
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 113

WIN 2000
Borland Developer Studio 2006
BeitragVerfasst: Mi 06.02.08 16:49 
user profile iconArne Danikowski hat folgendes geschrieben:
bekomme aber beim komelieren
"if sender is rxdbgrid then" [DCC Fehler] JP.pas(3076): E2015 Operator ist auf diesen Operandentyp nicht anwendbar

Uah! =)
Meinten Sie "kompilieren"?

Ich vermute mal es fehlt ein T: "if sender is Trxdbgrid then"

So long,
Xong
Arne Danikowski Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 194



BeitragVerfasst: Mi 06.02.08 17:17 
Wenn ich daraus ein Trxdbgrid1 mache bekomme ich diese Fehlermeldung.

[DCC Fehler] JP.pas(3076): E2003 Undefinierter Bezeichner: 'Trxdbgrid1'
Xong
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 113

WIN 2000
Borland Developer Studio 2006
BeitragVerfasst: Mi 06.02.08 17:39 
Du musst doch wissen wie die Klasse der Instanz rxdbgrid1 heißt!

Ich vermutete Trxdbgrid, du versuchst Trxdbgrid1!
Es kann auch sein, dass die Klasse anders heißt. Wie ist rxdbgrid1 deklariert?
Arne Danikowski Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 194



BeitragVerfasst: Mi 06.02.08 18:30 
Das steht unter typ : RxDBGrid1: TRxDBGrid;

OK hat sich damit erledigt :(

muss TrxDBGrid und nicht TRxDBGrid1 heissen
Xong
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 113

WIN 2000
Borland Developer Studio 2006
BeitragVerfasst: Do 07.02.08 08:13 
user profile iconArne Danikowski hat folgendes geschrieben:
muss TrxDBGrid und nicht TRxDBGrid1 heissen

Ha! :P