Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi markierung im Stringgrid verhindern (https://www.delphipraxis.net/19570-markierung-im-stringgrid-verhindern.html)

kiar 5. Apr 2004 15:26


markierung im Stringgrid verhindern
 
hallo,

wenn ein TSringgrid den fokus erhält, wird die zell markiert, die nach fixedRow und fixedCol kommt.
in der Regel zelle[1,1].

wie kann ich dies verhindern?

Ziel ist es in einer Terminplanung, zu verhindern, das in diese zelle was reinkopiert werden kann, wenn diese
zelle gesperrt ist.

wie ich das editieren erhindern kann, ist klar. wei aber das reinkopieren:
so wird das editieren verhindert:
Delphi-Quellcode:
procedure TfrmMain.MyMouseMove(var msg:TWMMouse);
var
  ACol,
  ARow : integer;
begin
   ACol:= Stringgrid1.Col;
   ARow:= Stringgrid1.Row;
   Stringgrid1.MouseToCell(msg.XPos,msg.YPos,ACol,ARow);
     // ist 'frei' dann Eingabe unmöglich machen
     if DayList[acol].isfree Then
        Stringgrid1.Options:= Stringgrid1.Options - [goEditing]
     else
        Stringgrid1.Options:= Stringgrid1.Options + [goEditing];

end
aber ich kann immer noch in diese zellen was kopieren.

raik

himitsu 5. Apr 2004 20:41

Re: markierung im Stringgrid verhindern
 
Also ich war immer der Meinung, dass wenn eine Zelle nicht editiert werden darf (kein goEditing in Options), dass dann der Inhalt auch nicht durch reinkopieren geändert/editiert werden kann. :gruebel:


In der Ereignis-Prozedur OnSelectCell des SringGrid's kannst du zum Beispiel so verhindern, dass die Zelle [1, 1] markiert werden kann, demnach kann man dort auch nicht's reinkopieren.

Delphi-Quellcode:
Procedure TForm_.StringGridXSelectCell(Sender: TObject; ACol, ARow: Integer; Var CanSelect: Boolean);
  Begin
    CanSelect := (ACol <> 1) or (ARow <> 1);
  End;


Ich würde dir auch empfehlen das andere auch noch dort reinzumachen, da das bei dir ja in 'ner MouseMove-Ereignisprozedure steht, könnte man ja locker die Felder auch mir der Tastatur anspringen, ohne das sie gesperrt werden ;)

Delphi-Quellcode:
Procedure TForm_.StringGridXSelectCell(Sender: TObject; ACol, ARow: Integer; Var CanSelect: Boolean);
  Begin
    CanSelect := (ACol <> 1) or (ARow <> 1);

   // ist 'frei' dann Eingabe unmöglich machen
   if DayList[ACol].isfree Then
      Stringgrid1.Options := StringGrid1.Options - [goEditing]
   else
      Stringgrid1.Options := StringGrid1.Options + [goEditing];
  End;

kiar 5. Apr 2004 21:07

Re: markierung im Stringgrid verhindern
 
hallo himitsu,

der fehler ist dadurch aufgetreten, weil Ostermontag frei ist und der montag bei mir im stringgrid auf col 1 liegt.

ich müsste also oncellselect immer auf den aktuellen stand bringen.

werde es mal versuchen.

danke


raik

kiar 5. Apr 2004 21:13

Re: markierung im Stringgrid verhindern
 
hallo himitsu,

das funktioniert nicht, erst wird immer die zelle[1,1] beim neustart markiert. es müsste schon vorher abgefragt werden.

mist :wall:

raik

Keldorn 6. Apr 2004 07:54

Re: markierung im Stringgrid verhindern
 
Hallo

da gibts es eine Möglichkeit mit der Selection:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
const KeineSelection : TGridRect = (left:-1;top:-1;right:-1;bottom:-1);
begin
  StringGrid1.Selection := KeineSelection;
end;
Manko an der Sache ist, daß du eine Exception auslöst, wenn das grid dann den Focus hat und du außerhalb des grids am mausrad drehst (ist zumindestens bei mir so (D6 pro, W2K). In irgendeinem Forum war dieses Problem schonmal. Wenn ich mich recht erinnere, konnte man die onmousewheel ereignisse abfragen und dort das grid selber scrollen um die exception zu verhindern.

Mfg Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:04 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