Autor |
Beitrag |
zcidq8
Beiträge: 26
Win XP, Win 98
D6 Prof.
|
Verfasst: Sa 06.08.05 18: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?
|
|
hansa
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Sa 06.08.05 19: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
Beiträge: 60
D7Ent, FB, FIBPlus
|
Verfasst: Mo 08.08.05 10:03
Hallo zcidq8,
warum die Arbeit mit einem Stringgrid?
Setze DBGrid1.DefaultDrawing := false und verwende das Ereignis DrawColumnCell der DBGrid.
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 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;
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]; end;
DBGrid1.Canvas.fillRect( rect ); end; DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State); end; |
alex
|
|
zcidq8
Beiträge: 26
Win XP, Win 98
D6 Prof.
|
Verfasst: Mo 15.08.05 08:51
Titel: Super!
Funktioniert ja super. Danke. Geht ja einfacher als ich dachte.
|
|
Lazarus
Beiträge: 33
|
Verfasst: Fr 19.08.05 23:10
Funktioniert zwar schon aber bei Multiselect nicht mehr wirklich
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
|
|
JRegier
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: Sa 20.08.05 06:05
Lazarus hat folgendes geschrieben: | Funktioniert zwar schon aber bei Multiselect nicht mehr wirklich
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 |
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
Beiträge: 33
|
Verfasst: So 21.08.05 14:12
Na ich habe testweise mal sowas gemacht :
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
Moderiert von Klabautermann: Code- durch Delphi-Tags ersetzt.
Zuletzt bearbeitet von Lazarus am So 21.08.05 14:19, insgesamt 1-mal bearbeitet
|
|
Lazarus
Beiträge: 33
|
Verfasst: So 21.08.05 14:18
Also mit dem Sortieren, war es ja easy, weil ich es einfach über SQL machen konnte. Ich benutze KaDao...
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 Klabautermann: Code- durch Delphi-Tags ersetzt.
|
|
Lazarus
Beiträge: 33
|
Verfasst: Mi 07.09.05 20: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
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: Do 08.09.05 06:34
Lazarus 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! Rufe nach dem Selektieren also z.B. OnMouseUp DBGrid1.Repaint auf, dann sollte es funktionieren!
|
|
CenBells
Beiträge: 1547
Win 7
Delphi XE5 Pro
|
Verfasst: Do 08.09.05 09: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.
|
|