SubForms in MainForm - merkwürdiger Effekt
Hallo zusammen,
ich habe hier einen Effekt, den ich mir nicht erklären kann: Auf einem Hauptformular existiert ein TabSheet mit 3 Seiten. Auf jedes TabSheet sollen Subforms kommen, wobei alle SubForms den gleichen Vorfahren haben. Als Quelltext: Basisformular:
Delphi-Quellcode:
Beispiel eines Unterformulars:
type
TBaseForm = class(TForm) private { Private-Deklarationen } FSideName : string; FPageIdx : integer; public { Public-Deklarationen } constructor Create(AOwner: TComponent; AWinControl: TWinControl; ASideName: string; APageIDX: integer); reintroduce; overload; property PageIdx: integer read FPageIdx; property SideName: string read FSideName; end; constructor TBaseForm.Create(AOwner: TComponent; AWinControl: TWinControl; ASideName: string; APageIDX: integer); begin inherited Create(AOwner); Self.Parent:= AWinControl; FSideName:= ASideName; FPageIdx:= APageIdx; end;
Delphi-Quellcode:
TMySubForm2 = class(TBaseForm)
Label1: TLabel; CheckBox1: TCheckBox; Edit1: TEdit; procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); private { Private-Deklarationen } FGridNo : integer; FEingangNo: integer; CBState : boolean; procedure LoadDatas; public { Public-Deklarationen } constructor Create(AOwner: TComponent; AWinControl: TWinControl; ASideName: string; AGridNo: Byte; APageIDX: integer); reintroduce; overload; procedure wmSwitchCheckBox(var Msg: TMessage); message wm_SwitchCheckBox; end; constructor TMySubForm2.Create(AOwner: TComponent; AWinControl: TWinControl; ASideName: string; AGridNo: Byte; APageIDX: integer); begin inherited Create(AOwner, AWinControl, ASideName, APageIDX); FGridNo:= AGridNo; FEingangNo:= AGridNo-1; CBState:= false; outputdebugstring('cbstate set to false'); end; procedure TMySubForm2.LoadDatas; begin if cbstate then outputdebugstring('cbstate = true in loaddatas') else outputdebugstring('cbstate = false in loaddatas'); checkbox1.Checked := CBState; end; procedure TMySubForm2.wmSwitchCheckBox(var Msg: TMessage); begin if (Msg.Msg = wm_SwitchCheckBox) then begin Msg.Result:= 1; CBState:= Msg.WParam = 1; if cbstate then outputdebugstring('cbstate = true in message') else outputdebugstring('cbstate = false in message'); LoadDatas; Edit1.Text:= 'Hallo'; end; end; Hauptformular:
Delphi-Quellcode:
Das Hauptformular erzeugt also in seiner Create-Methode die Unterformulare und bettet sie auf der entsprechenden Seite des TabSheets ein. Wechsle ich im TabSheet auf die entsprechende Seite, sehe ich das Unterformular und ich kann die dortigen Elemente TCheckBox und TEdit "bearbeiten".
TForm1 = class(TForm)
(...) procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; procedure TForm1.FormCreate(Sender: TObject); begin MySubForm2:= TMySubForm2.Create(AdvTabSheet2, AdvTabSheet2, 'Seite 2', 2, 0); MySubForm2.Show; end; procedure TForm1.Button1Click(Sender: TObject); begin SendMessage(MySubForm2.Handle, wm_SwitchCheckBox, 1, 0); end; Soweit so gut. Wie weiter im Hauptformular zu sehen ist, existiert dort ein Button, der beim Klick eine Message an SubForm2 sendet. Diese Message kommt auch definitiv an. ABER: Weder die CheckBox wird gesetzt noch der Text in TEdit.Text, obwohl beide Komponenten definit NICHT nil sind. Frage: Warum wird da nix gesetzt, wo ist da der Denkfehler? Dank vorab und Gruß, Carsten |
Re: SubForms in MainForm - merkwürdiger Effekt
Wie ist denn WM_SWITCHCHECKBOX deklariert? Möglicherweise gibt es bereits eine WM Botschaft mit der selben ID, die von WndProc verarbeitet wird und somit nicht an deinen Message Handler weitergeleitet wird.
Zitat:
Zitat:
|
Re: SubForms in MainForm - merkwürdiger Effekt
Zitat:
Delphi-Quellcode:
wm_SwitchCheckBox = wm_User +1;
Zitat:
Und das perfide ist: Mache ich im
Delphi-Quellcode:
so kommt tatsächlich 'Hallo' in der Debugausgabe. Nur im Feld steht nix. :wall:
procedure TMySubForm2.wmSwitchCheckBox(var Msg: TMessage);
(...) Edit1.Text:= 'Hallo'; outputdebugstring(PAnsiChar('Sendmessage: ' + Edit1.Text)); |
Re: SubForms in MainForm - merkwürdiger Effekt
:wall: :wall: :wall: :wall: :wall: :wall: :wall:
MySubForm2 wurde sowohl in MainForm als auch im Projektquelltext erzeugt. :duck:
Delphi-Quellcode:
:oops: :oops:
Application.CreateForm(TMySubForm2, MySubForm2);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:28 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