![]() |
eine zelle im stringgrid auf readonly?
moin,
kann mir jemand sagen, wie ich nur eine zelle im stringgrid so formatieren kann, dass man dort nicht mehr rein schreiben kann? danke im voraus. |
Re: eine zelle im stringgrid auf readonly?
Hallo herrentor,
so kann die Zelle (1,1) nicht mehr selektiert werden. Also kann der Inhalt auch nicht mehr geändert werden.
Delphi-Quellcode:
procedure TForm1.SGSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean); begin CanSelect:=Not ((ACol=1) and (ARow=1)); end; |
Re: eine zelle im stringgrid auf readonly?
wunderbar, danke. und wie kann man jetzt einstellen, dass die zelle bei tab oder pfeil nach rechts übersprungen wird?
|
Re: eine zelle im stringgrid auf readonly?
hi, hat hier nochmal jemand was gefunden? stehe nämlich gerade vor dem problem. hab eine externe komponente die auf einem stringgrid basiert und möchte nun für einige bestimmte zellen verhindern das der wert geändert werden kann.
|
Re: eine zelle im stringgrid auf readonly?
Nabend ...,
nichts leichter als das. Jens hatte oben ja bereits beschrieben wies ungefähr geht. Also leiten wir ab ...
Delphi-Quellcode:
LG Mario
procedure TForm1.SGSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
begin if ARow = 1 then // Schreibschutz für Zeile 1 SG.Options:= SG.Options -[goEditing] else SG.Options:= SG.Options +[goEditing]; end; |
Re: eine zelle im stringgrid auf readonly?
als kleine Ergänzung bei unregelmäßigen Schreib-Sperren...
um jede zelle einzeln zu setzen hab ich die Schreibrechte in meinem DFMEditor in ein 2 dimensionales array ausgelagert (fixedcols=1,fixedrows=1,rows=7,cols=5):
Delphi-Quellcode:
hier sieht man, dass in Zeile 1 nur die ersten beiden Zellen editiert werden können in Zeile 2 und 3 dafür alle.
const
SizeEditable:array[1..6,1..4] of boolean=( (true,true,false,false), (true,true,true,true), (true,true,true,true), (false,false,true,true), (true,true,true,true), (true,true,false,false) ); procedure TForm_DFMOptions.StringGrid1SelectCell(Sender: TObject; Col, Row: Integer; var CanSelect: Boolean); begin if SizeEditable[row,col] then Stringgrid1.Options:=Stringgrid1.Options+[goEditing] else Stringgrid1.Options:=Stringgrid1.Options-[goEditing]; end; HTH Frank |
Re: eine zelle im stringgrid auf readonly?
Zitat:
|
Re: eine zelle im stringgrid auf readonly?
in meinem Fall ist es eine statische Tabelle daher die statische zuordnung (definition der Fensterpositionen und Größen). Bestimmte Fenster kann man nur an eine andere Position setzen andere auch in der Größe ändern... Da brauchte ich nix dynamisches. Für jedes Fenster eine Zeile und die spalten links,oben,breite,höhe.
Aber man kann das Konstrukt als basis nehmen um z.B. ein dynamisches array zu setzen (z.B. per ini, wobei man da eher das Objects-property nutzen sollte). Kommt halt auf den speziellen Fall an, ob man es dynamisch braucht oder halt nicht. Gruß Frank |
Re: eine zelle im stringgrid auf readonly?
Ich wollte nur darauf hinweisen, dass sowas eben nicht interaktiv ist. Also völlig abhängig von Deinem Code, egal was der User will. Hängt das "ReadOnly" von einer Bedingung ab, dann ist Ende mit Deinem Code. :mrgreen: Man kann das allgemeingültig formulieren und wiederverwenden, aber das würde den Rahmen der Ausgangsfrage wohl sprengen. CanSelect wurde ja schließlich bereits erwähnt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:56 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