Hallo, ich habe mein Testprogramm so weit, dass ich durch Klicken auf die Titelfelder eines DBGrid die Sortierung (ASC/DESC) umschalten kann.
Gibt es auch eine Möglichkeit, dies durch einen Indikator in der Titelzeile anzuzeigen, so wie man dies von vielen Programmen kennt (Pfeil auf/ab)?
Im Moment kann ich zwar sehen, welche Spalte sortiert ist, nicht aber in welche Richtung, außer ich verändere die Caption der Spalte.
Danke Klaus
Sortierrichtung im Titel von dbGrid
-
- Lazarusforum e. V.
- Beiträge: 999
- Registriert: Do 17. Apr 2008, 01:59
- OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
- CPU-Target: Intel i7-10750 64Bit
- Wohnort: Freiburg
Sortierrichtung im Titel von dbGrid
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
Re: Sortierrichtung im Titel von dbGrid
Moin, moin,
ich würde im Ereignis onDrawCell, je nach Sortierung, die entsprechende Titelzeile mit einer kleinen Grafik verzieren (^v).
Gruß
Baba.
ich würde im Ereignis onDrawCell, je nach Sortierung, die entsprechende Titelzeile mit einer kleinen Grafik verzieren (^v).
Gruß
Baba.
-
- Lazarusforum e. V.
- Beiträge: 999
- Registriert: Do 17. Apr 2008, 01:59
- OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
- CPU-Target: Intel i7-10750 64Bit
- Wohnort: Freiburg
Re: Sortierrichtung im Titel von dbGrid
Danke für den Tipp.
Als VB-Umsteiger fällt mir dies doch recht schwer umzusetzen. Gibt es hierfür evtl. ein Demo?
Ebenfalls bin ich am experimentieren mit Zeilenfarben in Abhängigkeit eines DB-Feldinhalts im DBGrid.
Wenn ich es richtig verstanden habe, muss ich beiden in 'OnDrawColumnCell' unter bringen und über den Canvas realisieren?
Sollte jemand bereit sein, mich hierbei etwas ausführlicher zu unterstützen, wäre ich dankbar
Mein letzter Versuch war:
Nach meinem Verständnis hätten nun ALLE Zeilen rot sein müssen - wo ist hier der Holzweg, auf dem ich wandle?
Gruß Klaus
Als VB-Umsteiger fällt mir dies doch recht schwer umzusetzen. Gibt es hierfür evtl. ein Demo?
Ebenfalls bin ich am experimentieren mit Zeilenfarben in Abhängigkeit eines DB-Feldinhalts im DBGrid.
Wenn ich es richtig verstanden habe, muss ich beiden in 'OnDrawColumnCell' unter bringen und über den Canvas realisieren?
Sollte jemand bereit sein, mich hierbei etwas ausführlicher zu unterstützen, wäre ich dankbar
Mein letzter Versuch war:
Code: Alles auswählen
procedure Tfrm_TouriEdit.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
with Sender as TDBGrid do begin
//if DataModule1.ZQuery1.FieldByName('telzusatz').AsString = 'Telefax' then
//Canvas.Brush.Color := clWhite
//else
Canvas.Brush.Color := clRed;
DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;
Gruß Klaus
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
Re: Sortierrichtung im Titel von dbGrid
Ohne es genau zu wissen, würde ich sagen dass du mit DefaultDrawColumnCell alles zurücksetzt.MacWomble hat geschrieben:wo ist hier der Holzweg, auf dem ich wandle?
Probier mal nach
Canvas.Brush.Color := clRed;
alles selber zu zeichnen.
Also z.B.
Canvas.FillRect(Rect);
Canvas.TextOut(....);
Re: Sortierrichtung im Titel von dbGrid
... ich greife auf die Zeilen in einem Grid wie folgt zu, wobei das Beispiel in einer Cell - 2Zeiligen Text in unterschiedlicher Größe ausgibt.
Dies mal so als Anregung, da kannst Du bestimmt eine Menge eigener individueller Anpassungen - wie eine Grafik auf dem Canvas - vornehmen.
Ich nutze z.B. einen ähnlichen Aufbau um in Grid´s negative Zahlen ROT anzuzeigen.
Gruß
Baba.
Code: Alles auswählen
//------------------------------------------------------------------------------
procedure TFMain.SG_Setup3DrawCell(Sender: TObject; aCol, aRow: Integer;
aRect: TRect; aState: TGridDrawState);
procedure PrintZeile(pMode : Integer; pText : String);
begin
if pMode = 1 then begin
SG_Setup3.Canvas.Font.Size := 8;
SG_Setup3.Canvas.Font.Style := [fsBold];
SG_Setup3.Canvas.Font.Color := clBlack;
SG_Setup3.Canvas.TextOut(aRect.Left, aRect.Top, pText);
end else
if pMode = 2 then begin
SG_Setup3.Canvas.Font.Size := 6;
SG_Setup3.Canvas.Font.Style := [];
SG_Setup3.Canvas.Font.Color := clRed;
SG_Setup3.Canvas.TextOut(aRect.Left, aRect.Top + 15, pText);
end;
end;
begin
if (aCol = 0) then begin
case aRow of
0 : begin
PrintZeile(1, 'Festtasten-Mode');
PrintZeile(2, '20 oder 40 Tasten anzeigen');
end;
1 : begin
PrintZeile(1, 'Tastengruppe');
PrintZeile(2, 'Startseite im Kassenfenster');
end;
2 : begin
PrintZeile(1, '10er Block (Mode)');
PrintZeile(2, '+/- oder 10er Block anzeigen');
end;
3 : begin
...
end;
end;
end;
end;
Ich nutze z.B. einen ähnlichen Aufbau um in Grid´s negative Zahlen ROT anzuzeigen.
Gruß
Baba.
-
- Lazarusforum e. V.
- Beiträge: 999
- Registriert: Do 17. Apr 2008, 01:59
- OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
- CPU-Target: Intel i7-10750 64Bit
- Wohnort: Freiburg
Re: Sortierrichtung im Titel von dbGrid
Danke für die Hinweise!
So funktioniert die farbliche Darstellung:
So funktioniert die farbliche Darstellung:
Code: Alles auswählen
procedure Tfrm_TouriEdit.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
with TDBGrid(Sender) do begin //Syntax geändert
if DataModule1.ZQuery1.FieldByName('telzusatz').AsString <> 'Telefon' then
Canvas.Brush.Color := clRed;
Canvas.FillRect(Rect); //Hatte ich vergessen
DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.