Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Selektieren im DBCtrlGrid (https://www.delphipraxis.net/19985-selektieren-im-dbctrlgrid.html)

mschaefer 12. Apr 2004 10:41


Selektieren im DBCtrlGrid
 
Ein herrliches Oster - Moin, moin

Trotz dieser entspannten Feirtagsstimmung hat mich ein Running - Problem mal wieder an den
Computer gezogen:

Wie kann ich in einem DBCtrl-Grid ein Selektieren von Datensätzen erreichen und dies zum
Beispiel über unterschiedliche Panelfarben darstellen ? Das ganze soll wie beim DBGrid über die Shift-Taste in Verbindung mit den Cursortasten funktionieren. Mein Hauptproblem ist derzeit das
interne markieren der Datensätze.

Zunächst zeige ich den bisherigen Ansatz:
Die Farbe des Panels kann man im OnPanelPaint - Ereignis festlegen:


Delphi-Quellcode:
procedure MyForm.DBCtrlGrid_tlistePaintPanel(
  DBCtrlGrid: TDBCtrlGrid; Index: Integer);
var
    State : integer;
begin
     // Problem
     State := Markierung         // Wo kann ich mir merken welches Panel markiert ist ??
     // Problem - Ende

     if DBCtrlGrid.PanelIndex = Index then State := -State;
     {                                                                         }
     {                                                                         }
     Case State of
            1 : begin
                   DBCtrlGrid.Canvas.Brush.Color := clwhite;
                end;
          - 1 : begin
                   //       DBCtrlGrid.Canvas.Pen.Color  := clyellow; //
                   DBCtrlGrid.Canvas.Brush.Color := clyellow;
                end;
            2 : begin
                   //       DBCtrlGrid.Canvas.Pen.Color  := $00E1E1E1; //
                   DBCtrlGrid.Canvas.Brush.Color := $00E1E1E1;
                end;
          - 2 : begin
                   //      DBCtrlGrid.Canvas.Pen.Color  := $00D5FFFF ; //
                   DBCtrlGrid.Canvas.Brush.Color := $00D5FFFF;
                end;
     end ;
     {                                                                         }
     {                                                                         }
     DBCtrlGrid.Canvas.Rectangle
     ( DBCtrlGrid.Canvas.PenPos.X, DBCtrlGrid.Canvas.PenPos.Y,
       DBCtrlGrid.PanelWidth,      DBCtrlGrid.PanelHeight  );
end;


Die Tastaturereignisse kann ich im KeyPress-Ereignis des DBCtrlGrids abfangen
Delphi-Quellcode:

procedure TMyForm.DBCtrlGrid_ListeKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if  ssShift in Shift
  then Case Key Of
             {Cursor Up / Down }
             38,40  : Begin
                            // Problem
                            if  Markierung = 1
                            then Markierung := 0
                            else Markierung := 1;
                            // Problem - Ende
                      End;
        end;
  ;
end;


Aktuelles Problem, wo schreibe ich das Flag für markiert oder nicht markiert hin.
Vermeiden möchte ich regelmässige Datenbankzugriffe, da danach die Datenbankmenge neu
aufgebaut wird und somit sich die Position im DBCtrlGrid verschiebt.

Ideen - Ostereinfälle und Gedankensprünge sind herzlich willkommen !

Grüße // Martin


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz