AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi StringGrid - Reihen - Spalten - Schnittpunkt Markieren
Thema durchsuchen
Ansicht
Themen-Optionen

StringGrid - Reihen - Spalten - Schnittpunkt Markieren

Ein Thema von axellang · begonnen am 29. Mär 2014 · letzter Beitrag vom 31. Mär 2014
Antwort Antwort
Perlsau
(Gast)

n/a Beiträge
 
#1

AW: StringGrid - Reihen - Spalten - Schnittpunkt Markieren

  Alt 30. Mär 2014, 14:43
Soll die Markierung bestehen bleiben, wenn man die Maustaste wieder losläßt?

Mein Ansatz war jetzt folgender: Du hast zwei globale private Variablen, einmal GrSpalte und einmal GrZeile, die du im OnCreate des Forms auf -1 setzt. Beim Drücken mit der linken Maustaste werden diesen Variablen ACol und ARow der gedrückten Zelle zugewiesen, beim Loslassen wieder auf -1 gesetzt. Bei beiden Ereignissen wird dann StringGrid.Paint aufgerufen, wo State auf gdSelected gesetzt wird.
Delphi-Quellcode:
procedure TFormMain.StrGridTestDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  if (Spalte < 0) or (Zeile < 0) then Exit;


  if ((ACol <= Spalte) and (ARow = Zeile)) or
     ((ACol = Spalte) and (ARow <= Zeile)) then
      State := [gdSelected] else
      State := [];
end;
Aber das funktioniert auch nicht: Es wird auch hier immer nur die entsprechende Zeile, nicht aber die entsprechende Spalte markiert. Man könnte jetzt noch versuchen, diese Markierung selber zu malen, indem man die Zelle mit einer bestimmten Farbe füllt.

Apropo Radfahren und Sonne genießen: Gute Idee, werd' ich jetzt auch erst mal machen
  Mit Zitat antworten Zitat
axellang

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

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
Perlsau
(Gast)

n/a Beiträge
 
#3

AW: StringGrid - Reihen - Spalten - Schnittpunkt Markieren

  Alt 31. Mär 2014, 09:58
Eine Alternative wäre vielleicht noch gewesen, lediglich die beiden jeweiligen Fixed-Felder oben und links zu verändern bzw. farblich hervorzuheben.

Übrings ist klar, weshalb man die Maustaste gedrückt halten muß: Beim reinen Bewegen über eine Zelle wird ja nichts selektiert. Du greifst aber auf die Daten einer selektierten Zelle zurück.
  Mit Zitat antworten Zitat
axellang

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

AW: StringGrid - Reihen - Spalten - Schnittpunkt Markieren

  Alt 31. Mär 2014, 10:31
Eine Alternative wäre vielleicht noch gewesen, lediglich die beiden jeweiligen Fixed-Felder oben und links zu verändern bzw. farblich hervorzuheben.
Ja genau das passiert jetzt. Es wäre zwar schöner gewesen, wenn es eine durchgängige Markierung der Spalten/Zeilen bei der Auswahl gegeben hätte, jedoch geht es primär um eine Hilfestellung beim Ablesen. Es handelt sich hier um eine Laboranwendung in dem je nach ausgewählten Parameter sich eine neue Werteliste ergibt. Und aus der wird anhand der Fixed-Felder der Wert (Zelle) ausgewählt. Alle zusammen, also der Wert im Fixed-Feld-Links + Fixed-Feld-Oben + Wert-der-Zelle ergeben zusammen dann den neuen Parameter für weiteres.


Übrings ist klar, weshalb man die Maustaste gedrückt halten muß: Beim reinen Bewegen über eine Zelle wird ja nichts selektiert. Du greifst aber auf die Daten einer selektierten Zelle zurück.
Genau

Axel
Alexander Lang
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#5

AW: StringGrid - Reihen - Spalten - Schnittpunkt Markieren

  Alt 31. Mär 2014, 10:35
Oh, ich hatte mir deinen Code gar nicht näher angeschaut, nur kam mir gestern die Idee, daß es genügen müsse, die entsprechenden Fixed-Cells hervorzuheben.

Dann ist ja jetzt alles in Butter
  Mit Zitat antworten Zitat
axellang

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

AW: StringGrid - Reihen - Spalten - Schnittpunkt Markieren

  Alt 31. Mär 2014, 11:57
Nachdem ich ein wenig mit der vermeintlichen Lösung gearbeitet und für nützlich empfinde, habe ich den Code etwas umgeschrieben und auf der ersten Seite upgedatet.

Axel

PS: Über Farben kann man streiten
Alexander Lang
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:38 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-2025 by Thomas Breitkreuz