Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Sortierung von Spalten im DBGrid mit Anzeige eines Pfeils... (https://www.delphipraxis.net/56583-sortierung-von-spalten-im-dbgrid-mit-anzeige-eines-pfeils.html)

Glühwürmchen 8. Nov 2005 11:06

Datenbank: Oracle • Version: 10 • Zugriff über: Client / Server

Sortierung von Spalten im DBGrid mit Anzeige eines Pfeils...
 
Sortierung von Spalten im DBGrid mit Anzeige eines Pfeils für die Sortierrichtung
---------------------------------------------------------------------------------

Das Thema wurde hier schon öfter mal behandelt, aber ich werde nicht schlau draus.

Ich habe eine Tabelle, deren Daten in ein DB-Grid geschrieben werden. Mein Vorgänger hat nun diesem Grid einen Sortieralgorithmus aufgepfropft, der nach der Sortierung den Spaltenkopf blass-blau einfärbt. Ich hätte gerne stattdessen - oder zusätzlich einen Pfeil/Dreieck der/das die Sortierrichtung anzeigt.

folgenden Versuch habe ich bereits gestartet:
Delphi-Quellcode:
      PfeilBmp:= TBitmap.Create;
      ImageList1.GetBitmap(0, PfeilBmp);
      if Assigned(PfeilBmp) then TDBGrid(Column.Grid).Canvas.Draw(100, 0,PfeilBmp);
      PfeilBmp.Free;
Wenn ich den Titel einer Spalte anklicke malt er ganz kurz mein Dreieck an die angegebene Position, und dann ist es aber auch gleich wieder weg (man sieht nur ein kurzes aufblinken).

Da fehlt wohl noch was - aber was?

Und wie finde ich heraus wohin er genau das BitMap setzen soll?

Bernhard Geyer 8. Nov 2005 12:38

Re: Sortierung von Spalten im DBGrid mit Anzeige eines Pfeil
 
In welcher Methode/Event wird dieser Code ausgeführt?
Er muss natürlich in einer Paint-Routine des Controls ausgeführt werden und darf nicht beim Klicken der Titelzeile ausgeführt werden. Die Zeichenfläche hat kein "Gedächtnis" und verliert ihren Inhalt sobald Windows meint es müste etwas neu gezeichnet werden (Und das ist in einem MouseClick-Event sicherlich der Fall).

Das Thema hat damit eigentlich überhaupt nichts mit Datenbanken zu tun sondern ist ein Grundsätzliches Verhalten der Zeichenflächen (Canvas) von Windows.

Glühwürmchen 8. Nov 2005 13:19

Re: Sortierung von Spalten im DBGrid mit Anzeige eines Pfeil
 
Dieser Code wird im OnTitleClick-Event des TDBGrids ausgeführt.

Zitat:

Er muss natürlich in einer Paint-Routine des Controls ausgeführt werden und darf nicht beim Klicken der Titelzeile ausgeführt werden.
Verstehe ich jetzt nicht. Der Pfeil soll doch nach dem Klick auf die TitelZelle erscheinen.
Wie müßte das richtig aussehen?

Bernhard Geyer 8. Nov 2005 14:10

Re: Sortierung von Spalten im DBGrid mit Anzeige eines Pfeil
 
Zitat:

Zitat von Glühwürmchen
Dieser Code wird im OnTitleClick-Event des TDBGrids ausgeführt.

Zitat:

Er muss natürlich in einer Paint-Routine des Controls ausgeführt werden und darf nicht beim Klicken der Titelzeile ausgeführt werden.
Verstehe ich jetzt nicht. Der Pfeil soll doch nach dem Klick auf die TitelZelle erscheinen.

Danach und auch nach jedem neuzeichen des Controls
Zitat:

Zitat von Glühwürmchen
Wie müßte das richtig aussehen?

Eine Möglichkeit des selbst Zeichnen

rainer4you 1. Dez 2005 11:32

Re: Sortierung von Spalten im DBGrid mit Anzeige eines Pfeil
 
DefaultDrawing:= False; // in den Eigenschaften des DBGrid

dann unter OnColumnDrawCell eine eigen Zeichenroutine schreiben.

Delphi-Quellcode:
procedure TForm1.OnDrawColumnCell(Sender: TDBGrid; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState; MyTable: TADOTable);
var
  MyText : string;
  bmpImage : TBitmap;
begin
    if State = [gdSelected..gdFocused] then
    begin
      bmpImage := TBitmap.create;
      ToolbarImages.GetBitmap(15,bmpImage);
      Sender.Canvas.Font.Style:= [fsBold];
      Sender.Canvas.FillRect(Rect);
      MyText:= ' '+ DataSource11.DataSet['Name']+ ', ' + DataSource11.DataSet['Vorname'];
      Sender.Canvas.TextRect(Rect,Rect.Left+16,Rect.Top+2,MyText);
      Sender.Canvas.DrawFocusRect(Rect);
      Sender.Canvas.Draw(1,1+Rect.Top,bmpImage);
      bgLabel.Color:= Sender.Canvas.Brush.Color;
      bmpImage.Free;
    end
    else begin
      Sender.Canvas.Font.Style:= [];
      Sender.Canvas.FillRect(Rect);
      MyText:= ' '+ DataSource11.DataSet['Name']+ ', ' + DataSource11.DataSet['Vorname'];
      Sender.Canvas.TextRect(Rect,Rect.Left,Rect.Top,MyText);
      bgLabel.Color:= Sender.Canvas.Brush.Color;
    end;
end;
Dein Pfeil verschwindet sonst immer weil er einfach nochmals überzeichnet wird.

mfg, silence

alex517 8. Dez 2005 10:37

Re: Sortierung von Spalten im DBGrid mit Anzeige eines Pfeil
 
Hallo Glühwürmchen,
falls du immer noch nach einer Lösung suchst hätte ich was anzubieten.
alex

waldforest 9. Dez 2005 09:41

Re: Sortierung von Spalten im DBGrid mit Anzeige eines Pfeil
 
Hallo,
ich hatte das Thema auch schon einmal und habe viele Möglichkeiten ausprobiert, aber ganz ehrlich, die Richtige Lösung habe ich erst mit Jedi-Komponenten gefunden.
Hiermit bieten sich gerade im Grid bereich weitere schöne möglichkeiten (alternierende Farbe ....)an
einfach einmal ausprobieren, ich war begeistert.

http://sourceforge.net/project/showf...group_id=45786

mfg


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