Autor Beitrag
zcidq8
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26

Win XP, Win 98
D6 Prof.
BeitragVerfasst: Sa 06.08.05 19:19 
Hallo,

ich benutze die DBGrid Komponente zum anzeigen meiner Daten. Jetzt möchte ich aber einzelne Zellen, also nicht die ganze Reihe oder Spalte, farbig markieren.
Wie geht das? Geht das überhaupt?
:roll:
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Sa 06.08.05 20:14 
Das sind die Anfänge davon, ein DBGrid nicht zu benutzen ! Würde mal ernsthaft überlegen, darauf zu verzichten und ein normales Stringrid zu verwenden.

_________________
Gruß
Hansa
alex517
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 60


D7Ent, FB, FIBPlus
BeitragVerfasst: Mo 08.08.05 11:03 
Hallo zcidq8,

warum die Arbeit mit einem Stringgrid?

Setze DBGrid1.DefaultDrawing := false und verwende das Ereignis DrawColumnCell der DBGrid.



ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if (State * [gdSelected, gdFocused, gdFixed] = []) then
  begin
    // Hintergrund des Feldes Status einfärben
    if (Column.Field.FieldName='Status'then
    begin
      case Column.Field.AsInteger of
       0: DBGrid1.Canvas.Brush.Color := clYellow;
       5: DBGrid1.Canvas.Brush.Color := clGreen;
      10: DBGrid1.Canvas.Brush.Color := clBlue;
      end;
    end;

    // Schriftfarbe des Feldes EATyp setzen 
    if (Column.Field.FieldName='EATyp'then
    begin
      case Column.Field.AsInteger of
       0: DBGrid1.Canvas.font.Color := clYellow;
      10: DBGrid1.Canvas.font.Color := clGreen;
      20: DBGrid1.Canvas.font.Color := clRed;
      end;
      DBGrid1.Canvas.font.Style := DBGrid1.Canvas.font.Style + [fsBold];  // fett
    end;

    DBGrid1.Canvas.fillRect( rect );
  end;
  DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);  // Text ausgeben lassen
end;



alex
zcidq8 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26

Win XP, Win 98
D6 Prof.
BeitragVerfasst: Mo 15.08.05 09:51 
Titel: Super!
Funktioniert ja super. Danke. Geht ja einfacher als ich dachte. :D
Lazarus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Sa 20.08.05 00:10 
Funktioniert zwar schon aber bei Multiselect nicht mehr wirklich :cry:

Ich suche eigentlich ein DBGrid, was kleine Images vor dem Eintrah machen kann, Farbige Reihen und kleine Symbole für die Sortierrichtung in den Oberewn Spaltenbuttons hat und auch Sortieren kann Spaltenweise...

Kennt da jemand was oder ein paar Tutorials Beispiele oder so ???
Logisch, am liebsten wäre eine Freewarekomponente, aber ich kann auch selber was stricken, wenn ich genug info's hätte :D
JRegier
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Sa 20.08.05 07:05 
user profile iconLazarus hat folgendes geschrieben:
Funktioniert zwar schon aber bei Multiselect nicht mehr wirklich :cry:

Ich suche eigentlich ein DBGrid, was kleine Images vor dem Eintrah machen kann, Farbige Reihen und kleine Symbole für die Sortierrichtung in den Oberewn Spaltenbuttons hat und auch Sortieren kann Spaltenweise...

Kennt da jemand was oder ein paar Tutorials Beispiele oder so ???
Logisch, am liebsten wäre eine Freewarekomponente, aber ich kann auch selber was stricken, wenn ich genug info's hätte :D


Wenn du sortieren willst "Spaltenweise" dann nimm die JEDI Komponenten!

Was meinst du bei Multiselect funzt nicht? Also du mußt State abfragen und bei State Selected eine Andere Farbe setzen!
Lazarus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: So 21.08.05 15:12 
Na ich habe testweise mal sowas gemacht :
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
with DBGrid1.Canvas do begin
    if State = [gdSelected, gdFocused] then begin
       Brush.Color := clRed;
       Font.Color  := clWhite;
    end else begin
       Brush.Color := clWhite;
       Font.Color  := clRed;
    end;
    FillRect( Rect );
    TextOut( Rect.Left, Rect.Top, Column.Field.Text );
 end;

Dann sieht das ja bunt aus, aber ich habe Rowselect und Multiselect = True;

Aber das geht dann alles nicht mehr...
Eine oder mehrere selektierte sieht man garnicht mehr ...

Dabei wollte ich nur eine Tabellierpapier - Optik...

Ich habe schon viele Samples angeschaut (google) aber irgendwas läuft bei mir nicht so...
Ich habe auch schon mit Defautdrawing false/true gefummelt aber es sieht immer doof aus alles ....
Ist bestimmt ein logischer fehler und deshalb mal wieder schwer zu finden :P

Moderiert von user profile iconKlabautermann: Code- durch Delphi-Tags ersetzt.


Zuletzt bearbeitet von Lazarus am So 21.08.05 15:19, insgesamt 1-mal bearbeitet
Lazarus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: So 21.08.05 15:18 
Also mit dem Sortieren, war es ja easy, weil ich es einfach über SQL machen konnte. Ich benutze KaDao...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TfrmMain.dbgMainTitleClick(Column: TColumn);
begin
  dmMain.tblTestFiles.DisableControls;
  dmMain.tblTestFiles.Active := False;
  try
    if boAufsteigend then
      dmMain.tblTestFiles.SQL.Text := 'Select * from KeyDefs Order by ' + Column.FieldName + '';
    else
      dmMain.tblTestFiles.SQL.Text := 'Select * from KeyDefs Order by ' + Column.FieldName + '' + ' DESC';
    boAufsteigend := not boAufsteigend;
  finally
    dmMain.tblTestFiles.Active   := True;
    dmMain.tblTestFiles.EnableControls;
  end;
end;


Diese kleinen Pfeile oben gibt es noch nicht, da noch keine Idee...

Moderiert von user profile iconKlabautermann: Code- durch Delphi-Tags ersetzt.
Lazarus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Mi 07.09.05 21:32 
So ein Ärger, habe schon zig Versionen getestet, aber meim Multiselect bekomme ich es nicht hin eine Farbumschaltung, wie ein Tabellierpapier zu machen. Irgendwie verhält sich dann alles merkwürdig.
Hat das schon mal einer gemacht und einen Tip ??
Zur Info, ich habe Multiselect und Rowselect = True....
JRegier
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Do 08.09.05 07:34 
user profile iconLazarus hat folgendes geschrieben:
So ein Ärger, habe schon zig Versionen getestet, aber meim Multiselect bekomme ich es nicht hin eine Farbumschaltung, wie ein Tabellierpapier zu machen. Irgendwie verhält sich dann alles merkwürdig.
Hat das schon mal einer gemacht und einen Tip ??
Zur Info, ich habe Multiselect und Rowselect = True....



Ich gebe dir ein Tip! :idea: Rufe nach dem Selektieren also z.B. OnMouseUp DBGrid1.Repaint auf, dann sollte es funktionieren!
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Do 08.09.05 10:01 
hi,

für die pfeile wirst du wohl ne andere komponente verwenden müssen. In den header kannst du zwar auch von hand zeichenen, daß wird aber umständlich.
Ich verwende für so etwas - pfeile, farben, multiselect etc - seit jahren erfolgreich den VirtualStringTree von Mike Lischke.
www.delphi-gems.com

Gruß
Ken

_________________
Eine Klasse beschreibt die Struktur und das Verhalten einer Menge gleichartiger Objekte.