AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TGrid multiselect?

Ein Thema von softtouch · begonnen am 17. Aug 2022 · letzter Beitrag vom 20. Aug 2022
Antwort Antwort
Benutzerbild von softtouch
softtouch

Registriert seit: 13. Feb 2015
Ort: Kerpen
235 Beiträge
 
Delphi 12 Athens
 
#1

TGrid multiselect?

  Alt 17. Aug 2022, 13:59
Ich kann einfach keine Eigenschaft des TGrid finde, welche multiselect von rows erlaubt, wie es eben mit dem VCL Grid und fast jedem 3rd. Party Grid möglich ist.
Wird das etwa gar nicht vom FNMX TGrid unterstützt?
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.533 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TGrid multiselect?

  Alt 17. Aug 2022, 23:52
Nein, da gibt es tatsächlich keine mitgelieferte Option.

Du könntest aber z.B. eine TCheckColumn verwenden, um eine Zeile auszuwählen.

Zusätzlich könnte man noch bei Bedarf in den OnPaint-Events selber etwas farblich hervorheben (da wo eine Zeile gecheckt ist).
  Mit Zitat antworten Zitat
Benutzerbild von softtouch
softtouch

Registriert seit: 13. Feb 2015
Ort: Kerpen
235 Beiträge
 
Delphi 12 Athens
 
#3

AW: TGrid multiselect?

  Alt 18. Aug 2022, 06:58
Nein, da gibt es tatsächlich keine mitgelieferte Option.

Du könntest aber z.B. eine TCheckColumn verwenden, um eine Zeile auszuwählen.

Zusätzlich könnte man noch bei Bedarf in den OnPaint-Events selber etwas farblich hervorheben (da wo eine Zeile gecheckt ist).
Danke, ich denke, dann wird mir wohl nichts anderes übrig bleiben, als doch wieder die TMS Komponenten zu nutzen. Ich wollte eigentlich alles diesmal komplett ohne 3rd. Party Komponenten erstellen.

Wie kann EMBA denn so eine wichtige Standard Funktion nicht einbauen.... unglaublich.
  Mit Zitat antworten Zitat
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
214 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: TGrid multiselect?

  Alt 18. Aug 2022, 08:17
Bei uns wird per Doppelklick Multiselekt angeboten. Eventuell hilfreich.

Delphi-Quellcode:
procedure TSuchForm.GridDblClick(Sender: TObject);
begin
  if Grid.CellFont[0,Grid.Row].Style=[] then begin
     Grid.CellFont[0,Grid.Row].Style:=[fsBold];
     Grid.CellFont[0,Grid.Row].Color:=clRed;
     Grid.CellFont[0,Grid.Row].Size :=10;
  end else begin
     Grid.CellFont[0,Grid.Row].Style:=[];
     Grid.CellFont[0,Grid.Row].Color:=clBlack;
     Grid.CellFont[0,Grid.Row].Size :=10;
  end;
end;
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#5

AW: TGrid multiselect?

  Alt 18. Aug 2022, 22:38
[QUOTE=softtouch;1510258]

Wie kann EMBA denn so eine wichtige Standard Funktion nicht einbauen.... unglaublich.
Schon mal geschaut, ob es dafür schon einen Feature Request in QP https://quality.embarcadero.comgibt?
Falls es keinen gibt bitte einen erfassen.

Grüße und Danke vorab

TurboMagic
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.533 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: TGrid multiselect?

  Alt 20. Aug 2022, 00:20
@Edelfix: Was für ein Grid verwendest Du da? Wohl kein FMX TGrid, denn die Eigenschaft Cellfont sagt mir nichts. Davon abgesehen würde ich bei einem Doppelklick eher eine Ausführung einer Aktion erwarten und nicht eine Selektion, das ist eher ungewöhnlich.

Dann doch z.B. lieber mit Strg+Links Click eine Zeile an oder abwählen.

Kann man natürlich auch ohne die CheckColum machen. Das Boolsche Array muss man aber eben mitführen und der Anzahl der Zeilen anpassen.

Beim StringGrid kann man selber das Grid nehmen, um den Checkstatus zu managen.

Habe anliegend mal kurz ein Minidemo erstellt, das zeigt einmal für TGrid und TSTringGrid die Selektion per Checkbox und Alternativ mit Strg+Links-Click. Das könnte man bei Bedarf natürlich auch noch auf Shift+Links-Klick prüfen und erweitern, um Bereiche zu selektieren.

Ergänzender Hinweis: Um Strg+Shift in den Gridevents abfragen zu können, habe ich die OnMouseUp-Events manuell reingehängt.
Die Checkzeichen-Symbole im Header-Text sind einfach Unicode-Zeichen.

Siehe anliegenden Screenshot und Demoprojekt (nur Source, keine Exe).

Nachtrag zum hochgeladenen Demo: Die Prüfung beim StringGrid-Demo, ob StrG+Klick und CellClick zusammentreffen (dann würden Sie sich gegenseitig aufheben) hätte ich nicht in de CellClick-Event machen müssen, sondern im sgMouseUp-Event.

Richtig sähen die beiden Events dann so aus:
Delphi-Quellcode:
procedure TF_Main.sGridCellClick(const Column: TColumn; const Row: Integer);
var
  sg: TStringGrid; b: String;
begin
  if Column.Parent.parent is TStringGrid then begin

    sg := TStringGrid (Column.Parent.parent);

    // To avoid same time use of clicking CheckColumn and using Strg+LeftKick
    //if sg.Col = chk2.Index then exit; // nicht hier...

    if Column is TCheckColumn then begin
      if sg.cells[column.Index, Row] = 'falsethen begin
        sg.cells[column.Index, Row] := 'true';
      end else begin
        sg.cells[column.Index, Row] := 'false';
      end;
    end;
  end;

  sg.BeginUpdate;
  sg.EndUpdate;
end;

procedure TF_Main.sGridMouseUp(Sender: TObject; Button: TMouseButton; shift: TShiftState; x, y: single);
var
  sg: TSTringGrid;
begin
  if ssCtrl in shift then begin
    if Sender is TStringGrid then begin
      sg := TStringGrid (Sender);

      if sg.Col = chk2.Index then exit; // ... sondern hier

      if sg.cells[chk2.Index, sg.row] = 'falsethen begin
        sg.cells[chk2.Index, sg.row] := 'true';
      end else begin
        sg.cells[chk2.Index, sg.row] := 'false';
      end;

      sg.BeginUpdate;
      sg.EndUpdate;
    end;
  end;
end;
Miniaturansicht angehängter Grafiken
griddemo.jpg  
Angehängte Dateien
Dateityp: zip GridDemo.zip (93,9 KB, 9x aufgerufen)

Geändert von Harry Stahl (20. Aug 2022 um 13:03 Uhr)
  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 00:03 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