SetFocus Problem
-
- Beiträge: 131
- Registriert: Sa 5. Apr 2008, 17:57
- OS, Lazarus, FPC: Linux (Debian, Xubuntu), MacOS X, MS Win, Android, Web
- CPU-Target: 32Bit/64Bit
- Wohnort: Ulm
SetFocus Problem
Hallo zusammen,
ich habe ein sehr nerviges Focusproblem. In einer Anwendung gibt es ein StringGridund ein Memo. Das Memo dient als Editor zum Beispiel für die Spalte Nr. 2.
Wenn nun das Editieren im StringGrid das erste Mal angeschaltet wird und das erste mal in die Spalte gewechselt wird in dem das Memo die Funktion als Editor übernimmt, dann kommt der Focus NICHT in den Editor.
Ein Mausclick in den Editor und der Focus sitzt korrekt. Bei einem erneuten Aktivieren des Memo Feldes sitzt der Focus gleich richtig.
Ich kann auch versuchen mit Memo1.SetFocus den Focus zu setzen, beim ersten Aufruf geht es nicht.
Das ist sehr nervend weil die Anwender das StringGrid mit der Tastatur bedienen wollen und der Griff bei ersten Aufruf zur Maus als störend empfunden wird.
Das muss ja auch gehen!?! Oder?!
Ich hänge ein gezipptes Projekt an in dem Ihr das Ganze nachvollziehen könnt.
Meine Plattform ist Linux, Lazarus 0.9.28.1, FPC 2.2 wobei ich es unter 09.29 mit FPC 2.4 getestet habe. => gleicher Effekt!
Für Hinweise wäre ich dankbar.
ich habe ein sehr nerviges Focusproblem. In einer Anwendung gibt es ein StringGridund ein Memo. Das Memo dient als Editor zum Beispiel für die Spalte Nr. 2.
Wenn nun das Editieren im StringGrid das erste Mal angeschaltet wird und das erste mal in die Spalte gewechselt wird in dem das Memo die Funktion als Editor übernimmt, dann kommt der Focus NICHT in den Editor.
Ein Mausclick in den Editor und der Focus sitzt korrekt. Bei einem erneuten Aktivieren des Memo Feldes sitzt der Focus gleich richtig.
Ich kann auch versuchen mit Memo1.SetFocus den Focus zu setzen, beim ersten Aufruf geht es nicht.
Das ist sehr nervend weil die Anwender das StringGrid mit der Tastatur bedienen wollen und der Griff bei ersten Aufruf zur Maus als störend empfunden wird.
Das muss ja auch gehen!?! Oder?!
Ich hänge ein gezipptes Projekt an in dem Ihr das Ganze nachvollziehen könnt.
Meine Plattform ist Linux, Lazarus 0.9.28.1, FPC 2.2 wobei ich es unter 09.29 mit FPC 2.4 getestet habe. => gleicher Effekt!
Für Hinweise wäre ich dankbar.
- Dateianhänge
-
focus_test01.zip
- (290.17 KiB) 100-mal heruntergeladen
-
- Beiträge: 308
- Registriert: Do 9. Apr 2009, 10:10
- OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
- CPU-Target: 32Bit
- Wohnort: 785..
Re: SetFocus Problem
Entweder bei mir tritt das Problem nicht auf oder ich habe die Problembeschreibung nicht verstanden. Hier Ubuntu 9.10 lazarus svn momentan Revision 29147 - FPC 2.4.2 | Widgetset: Gtk2
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)
-
- Beiträge: 308
- Registriert: Do 9. Apr 2009, 10:10
- OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
- CPU-Target: 32Bit
- Wohnort: 785..
Re: SetFocus Problem
Ahja das Visible bitte vors Boundsrect sonst ist das Memofeld so Verkrüppelt. Ich hab dann das Visible zur Designtime auf false gesetzt und funktioniert alles wunderbar soweit ich das sehe.
- Dateianhänge
-
focus_test02.zip
- Hier mal das was bei mir dann rausgekommen ist
- (1.97 MiB) 87-mal heruntergeladen
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)
-
- Beiträge: 131
- Registriert: Sa 5. Apr 2008, 17:57
- OS, Lazarus, FPC: Linux (Debian, Xubuntu), MacOS X, MS Win, Android, Web
- CPU-Target: 32Bit/64Bit
- Wohnort: Ulm
Re: SetFocus Problem
das ist merkwürdig. Bei mir bleibt es bei dem Problem.
Nur nach dem ersten Aufruf des Memo kommt der Cursor nicht in das Memofeld. Ich muss einmal da rein klicken.
Ab dem zweiten Aufruf ist der Cursor dann drin.
Das ändert sich mit Deiner Variante nicht.
Nur nach dem ersten Aufruf des Memo kommt der Cursor nicht in das Memofeld. Ich muss einmal da rein klicken.
Ab dem zweiten Aufruf ist der Cursor dann drin.
Das ändert sich mit Deiner Variante nicht.
-
- Beiträge: 308
- Registriert: Do 9. Apr 2009, 10:10
- OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
- CPU-Target: 32Bit
- Wohnort: 785..
Re: SetFocus Problem
Lag dann wohl doch am Problemverständnis. Alternativ zur Maus kann man auch per Tastatur nochmal auf ein anderes Feld steuern und dann zurück aber beim ersten mal ist der Focus falsch.
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)
-
- Beiträge: 308
- Registriert: Do 9. Apr 2009, 10:10
- OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
- CPU-Target: 32Bit
- Wohnort: 785..
Re: SetFocus Problem
Als Workaround funktioniert aber folgendes:
Code: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Editor:=Memo1;
end;
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)
-
- Beiträge: 308
- Registriert: Do 9. Apr 2009, 10:10
- OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
- CPU-Target: 32Bit
- Wohnort: 785..
Re: SetFocus Problem
Auch wenn da was doppelt ist, was so eigentlich nicht hingehört als workaround gehts auch so:
Code: Alles auswählen
procedure TForm1.StringGrid1SelectEditor(Sender: TObject; aCol, aRow: Integer;
var Editor: TWinControl);
begin
if (aCol=2) and (aRow>0) then
begin
Memo1.Visible:=True;
StringGrid1.Editor:=Memo1;
Editor:=Memo1;
Memo1.BoundsRect:=StringGrid1.CellRect(2,aRow);
Editor.SetFocus;
end;
end;
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)
-
- Beiträge: 131
- Registriert: Sa 5. Apr 2008, 17:57
- OS, Lazarus, FPC: Linux (Debian, Xubuntu), MacOS X, MS Win, Android, Web
- CPU-Target: 32Bit/64Bit
- Wohnort: Ulm
Re: SetFocus Problem
Super! Danke !!!
Ich muss ehrlich gestehen ich wäre nicht auf die Idee gekommen das doppelt gemoppelt zu machen
So oder so werde ich wohl einen Bugreport absetzen. Das Verhalten ist definitiv nicht OK.
Gruß,
Piper
Ich muss ehrlich gestehen ich wäre nicht auf die Idee gekommen das doppelt gemoppelt zu machen

So oder so werde ich wohl einen Bugreport absetzen. Das Verhalten ist definitiv nicht OK.
Gruß,
Piper
-
- Beiträge: 308
- Registriert: Do 9. Apr 2009, 10:10
- OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
- CPU-Target: 32Bit
- Wohnort: 785..
nachgesehn:
Ich hab das ganze mal nachgesehn. Evtl. hilfts jemand der in der Lage ist einen Patch dafür zu schreiben. Ich habe gerade keine Idee wie das gehen soll. Das Problem ist in der Konstellation ein Parent-Wechsel nach dem Setfocus.
following code was tried in Stringgrid1.OnSelectEditor:
//looking up the selecteditor-proceure:
following code was tried in Stringgrid1.OnSelectEditor:
Code: Alles auswählen
procedure TForm1.StringGrid1SelectEditor(Sender: TObject; aCol, aRow: Integer;
var Editor: TWinControl);
begin
if (aCol=2) and (aRow>0) then
begin
Memo1.Visible:=True;
Editor:=Memo1;
Memo1.BoundsRect:=StringGrid1.CellRect(2,aRow);
Editor.SetFocus; //!!! here is the focus that doesn't work
end;
end;
Code: Alles auswählen
procedure TCustomGrid.SelectEditor;
var
aEditor: TWinControl;
begin
aEditor := GetDefaultEditor(Col);
if EditingAllowed(FCol) and Assigned(OnSelectEditor) then begin
// in some situations there are only non-selectable cells
// if goAlwaysShowEditor is on set initially editor to nil,
// user can modify this value in OnSelectEditor if needed
if not SelectCell(FCol,FRow) then
aEditor:=nil;
OnSelectEditor(Self, fCol, FRow, aEditor); //!! here the above procedure with the setfocus is called
end;
if aEditor<>Editor then
Editor := aEditor; //!! here SetEditor is called that contains changing Parent with impact on focus
end;
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)