Einzelnen Beitrag anzeigen

Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#1

Selektieren im DBCtrlGrid

  Alt 12. Apr 2004, 09:41
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
Martin Schaefer
  Mit Zitat antworten Zitat