![]() |
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:
aber ich kann immer noch in diese zellen was kopieren.
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 raik |
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; |
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 |
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 |
Re: markierung im Stringgrid verhindern
Hallo
da gibts es eine Möglichkeit mit der Selection:
Delphi-Quellcode:
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.
procedure TForm1.FormCreate(Sender: TObject);
const KeineSelection : TGridRect = (left:-1;top:-1;right:-1;bottom:-1); begin StringGrid1.Selection := KeineSelection; end; Mfg Frank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:46 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