![]() |
TGrid multiselect?
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? |
AW: TGrid multiselect?
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). |
AW: TGrid multiselect?
Zitat:
Wie kann EMBA denn so eine wichtige Standard Funktion nicht einbauen.... unglaublich. |
AW: TGrid multiselect?
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; |
AW: TGrid multiselect?
[QUOTE=softtouch;1510258]
Zitat:
![]() Falls es keinen gibt bitte einen erfassen. Grüße und Danke vorab TurboMagic |
AW: TGrid multiselect?
Liste der Anhänge anzeigen (Anzahl: 2)
@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] = 'false' then 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] = 'false' then 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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:23 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