Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi eine zelle im stringgrid auf readonly? (https://www.delphipraxis.net/23186-eine-zelle-im-stringgrid-auf-readonly.html)

herrentor 30. Mai 2004 13:43


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.

Jens Schumann 30. Mai 2004 13:54

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;

herrentor 30. Mai 2004 14:24

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?

kaiser1401 15. Nov 2006 17:43

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.

Hobby-Programmierer 15. Nov 2006 18:25

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:
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;
LG Mario

_frank_ 15. Nov 2006 22:59

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:
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;
hier sieht man, dass in Zeile 1 nur die ersten beiden Zellen editiert werden können in Zeile 2 und 3 dafür alle.

HTH Frank

Hansa 15. Nov 2006 23:23

Re: eine zelle im stringgrid auf readonly?
 
Zitat:

Zitat von _frank_
als kleine Ergänzung bei unregelmäßigen Schreib-Sperren...
...hier sieht man, dass in Zeile 1 nur die ersten beiden Zellen editiert werden können in Zeile 2 und 3 dafür alle...

Also gut. Was, wenn in Zeile 1 nur die Zellen 3 und 4 editiert werden sollen und 1,2 eben nicht ? Solche Konstrukte sind IMHO zu starr. Lassen sich schwerlich vererben und alles muss wieder doppelt und dreifach programmiert werden.

_frank_ 15. Nov 2006 23:39

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

Hansa 15. Nov 2006 23:50

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 15:25 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