Einzelnen Beitrag anzeigen

axellang

Registriert seit: 3. Mai 2003
Ort: München
138 Beiträge
 
Delphi XE2 Enterprise
 
#9

AW: StringGrid - Reihen - Spalten - Schnittpunkt Markieren

  Alt 31. Mär 2014, 09:54
Hi,

nachdem ich mir das Hirn beim Radfahren frei gepustet und die Einkehr im Biergarten den Rest besorgte, habe ich es heute wie folgt gelöst.

// UPDATE
Delphi-Quellcode:
private
procedure DynamicGridSelector(Sender: TObject);

//...

procedure TForm1.DynamicGridSelector(Sender: TObject);
var
  i : integer;
begin
   with TStringGrid(Sender) do
    begin
      for i := 0 to ColCount - 1 do
        Objects[i, 0] := TObject(i in [Selection.Left..Selection.Right]);
      for i := 0 to RowCount - 1 do
        Objects[0, i] := TObject(i in [Selection.Top..Selection.Bottom]);
    end;
end;

procedure TForm1.SGDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
var
  vRect: TRect;
begin
  with TStringGrid(Sender) do
    begin
      // Überschriften
      if (gdFixed in State) then
        begin
          if LongBool(Objects[ACol, ARow]) then
            begin
              Canvas.Font.Color := RGB(255,255,255);
              Canvas.Brush.Color := RGB(240,0,120);
            end;
        end;

      // GridFelder
      if (gdSelected in State) and not (gdFixed in State) then
        begin
          Canvas.Font.Color := RGB(255,255,255);
          Canvas.Font.Style := [fsBold];
          Canvas.Brush.Color := RGB(240,0,120);
        end;

      // Dummy
      vRect.Top := Rect.Top;
      vRect.Left := Rect.Left-4;
      vRect.Right := Rect.Right;
      vRect.Bottom := Rect.Bottom;

      Canvas.FillRect(vRect);
      Canvas.TextOut(Rect.Left+2, Rect.Top+2, SG.Cells[ACol, ARow]);
    end;

end;

procedure TForm1.SGMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  DynamicGridSelector(Sender);
end;

procedure TForm1.SGMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  DynamicGridSelector(Sender);
end;

Es ist zwar nicht so wie ich mir das vorstellte, aber damit kann man leben.
Vielleicht fällt es mir in ein paar Tagen ein, wie es geht


Es ging darum dem Benutzer eine optische Hilfe anzubieten, um bei der Auswahl im Grid
die Überschrift (ACol[0] und ARow[0]) in Verbindung mit dem ausgewählten Wert schnell und bequem zuzuordnen.

Obwohl es im MouseMove steht muss man, damit der Effekt feuert, die Maustaste gedrückt halten.

Axel
Alexander Lang

Geändert von axellang (31. Mär 2014 um 12:01 Uhr) Grund: CODE UPDATE
  Mit Zitat antworten Zitat