Controls in Subform fokussieren

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Controls in Subform fokussieren

Beitrag von fliegermichl »

Hallo,

ich habe ein Formular, daß verschiedene Optionen zur Verfügung stellt. Dieses Formular soll wahlweise standalone oder als Subform in anderen Formularen verwendbar sein.
Das klappt eigentlich auch ausser, daß sich dessen Controls während es als Subform fungiert nicht mit der Maus fokussieren lassen. Mit Tab geht es.

Beispiel (Neues Projekt + zwei ganz normale Formulare. Form1 hat zwei Edit Controls, Form2 hat ein EditControl und folgender Quellcode in unit1.pas

Code: Alles auswählen

 
implementation
uses unit2;
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.FormShow(Sender: TObject);
begin
 if Form2 = nil then
 begin
   Form2 := TForm2.Create(Application);
   Form2.Show();
   Form2.Parent := self;
   Form2.Left := width - Form2.Width;
   Form2.Top := 0;
 end;
end;
 
end.
 


Die beiden Edit Controls in Form1 lassen sich mit der Mauss fokussieren, jenes aus Form2 nicht. Mittels Tab geht es durch alle drei.

braunbär
Beiträge: 369
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Re: Controls in Subform fokussieren

Beitrag von braunbär »

Eine Form als Parent einer anderen Form scheint in Free Pascal nichts als Probleme zu machen.

Verwende statt dessen ein TFrame, das du dann in beliebigen anderen Forms verwenden kannst (Standalone geht nicht, aber als Bestandteil einer Form, die nur dieses Frame enthält, ist es auch kein Problem).

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Controls in Subform fokussieren

Beitrag von fliegermichl »

Hm nicht nur in Lazarus,
eigentlich hatte ich das Problem in einem Delphiprogramm. :-)

Kann man Frames dynamisch zur Laufzeit in ein Formular einbinden?

Hintergrund ist der, daß ich ein ziemlich umfangreiches Ausgabeformular habe (eine Art PrintPreview mit allem möglichen Schnickschnack)

Das wird jetzt ungefähr an (übertrieben gesagt) hundert Stellen im Programm verwendet und jede dieser Stellen, hat spezielle Wünsche an die Ausgabe.
Mit dem Subform hat das supi funktioniert nur eben das fokussieren (übrigens nur) der TEdit Controls. Buttons, Checkboxen usw. alles kein Problem.

braunbär
Beiträge: 369
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Re: Controls in Subform fokussieren

Beitrag von braunbär »

Ein Frame ist im Prinzip nichts anderes als eine Subform (mit einigen Einschränkungen, so hat es z.B. keine Titelleiste), die kannst du in beliebig viele Forms auch zur Laufzeit einbinden.
Ich verwende es in der Regel so, dass ich als Parent ein Panel angebe, und die Frame selbst bekommt dann ein align=tsClient. So kann ich das Panel schon beim Design der Form fix und fertig positionieren und die Frame aber erst zur Laufzeit hineinsetzen.

In Delphi hatte ich eigentlich mit Forms in Forms keine Probleme, da hatte ich sogar überwiegend MDI Anwendungen, und das hat immer einwandfrei funktioniert. Ich habe zwar von verschiedensten Problemen gehört, aber selbst nie welche damit gehabt.

Antworten