![]() |
Form zur Laufzeit
Hallo miteinander,
Ich bin gerade dabei ein Programm zu entwickeln in dem es des öfteren vorkommt, dass man mittels eines Buttons kleinere Fenster öffnet die nur von kurzer Dauer benötigt werden. Daher dachte ich mir das es vermutlich ganz sinnvoll ist diese Formulare zur Laufzeit dynamisch zu erstellen. Also wollte ich anfangen die bestehenden Formulare zu konvertieren. Dies klappt auch soweit Problemlos, jedoch erhalte ich eine "Zugriffsverletzung" ohne nähere Informationsangaben sobald Ich den "OK" Button betätige. Der Fehler wird zweifelsfrei von der "FindComponent" Funktion ausgelöst. Ich gehe davon aus das ich das Handle des Formulares nicht korrekt übergeben habe. Ich hoffe Ihr könnt mir helfen den Fehler zu finden :). PS: Das Formular hat in dieser Variation funktioniert, als Ich diesen noch in dem .pas-File des Hauptformulares integriert hatte, aber seit ich den Code in eine eigene Unit verschoben habe tritt dieser Fehler auf.
Delphi-Quellcode:
unit Form_Auth;
interface uses Windows, Graphics, Classes, Forms, Dialogs, StdCtrls, Datenbank, Funktionen_Login; type TAuth_Form = class(TForm) private procedure Auth_Button_Click(Sender: TObject); procedure Auth_Key_Press(Sender: TObject; var Key: Char); procedure Auth_Form_Destroy(Sender: TObject); public procedure Auth_Form_Create(Sender: TObject); end; var Auth_Form : TAuth_Form; Auth_PN : TEdit; Auth_Button : TButton; implementation procedure TAuth_Form.Auth_Form_Create(Sender: TObject); begin Auth_Form := TAuth_Form.Create(nil); Auth_PN := TEdit.Create(Auth_Form); Auth_Button := TButton.Create(Auth_Form); Auth_Form.Caption := 'PN'; Auth_Form.Name := 'Login'; Auth_Form.Width := 166; Auth_Form.Height := 75; Auth_Form.Position := poScreenCenter; Auth_Form.BorderStyle := bsDialog; Auth_Form.OnDestroy := Form_Auth.Auth_Form.Auth_Form_Destroy; Auth_PN.Parent := Auth_Form; Auth_PN.Name := 'Auth_PN_Edit'; Auth_PN.Text := ''; Auth_PN.Left := 5; Auth_PN.Top := 5; Auth_PN.Width := 110; Auth_PN.MaxLength := 8; Auth_PN.Font.Size := 14; Auth_PN.Font.Style := [fsBold]; Auth_PN.OnKeyPress := Form_Auth.Auth_Form.Auth_Key_Press; Auth_Button.Parent := Auth_Form; Auth_Button.Left := 119; Auth_Button.Top := 5; Auth_Button.Width := 30; Auth_Button.Height := 30; Auth_Button.Caption := 'OK'; Auth_Button.OnClick := Form_Auth.Auth_Form.Auth_Button_Click; try Auth_Form.ShowModal; finally Auth_Form.Free; end; end; procedure TAuth_Form.Auth_Form_Destroy(Sender: TObject); begin If Form2.Login_State = False then ExitProcess(0); end; procedure TAuth_Form.Auth_Button_Click(Sender: TObject); begin If Length(TEdit(Auth_Form.FindComponent('Auth_PN_Edit')).Text) = 8 then begin Form2.Username := TEdit(Auth_Form.FindComponent('Auth_PN_Edit')).Text; Funktionen_Login.Login; end Else Showmessage('Bitte gültige PN eingeben!'); If Form2.Login_State = True then Auth_Form.Close; end; procedure TAuth_Form.Auth_Key_Press(Sender: TObject; var Key: Char); begin If not (Key in ['0'..'9', Char(VK_BACK)]) then Key := #0; end; end. |
AW: Form zur Laufzeit
Wer ist "Form2" ?
Aber warum erstellst Du das Fenster nicht in der IDE und erstellst bei Bedarf eine Insatnz des Fensters? |
AW: Form zur Laufzeit
Zitat:
Zitat:
Grüße |
AW: Form zur Laufzeit
Hat sich erledigt. Ich habe einfach "CreateNew" statt "Create" verwendet.
Leider kann ich meinen Originalpost nicht editieren, daher das "Offene Frage" nicht herausnehmen. |
AW: Form zur Laufzeit
Auth_PN und Auth_Button Sollten Membervariablen von TAuth_Form sein.
Damit kannst du dir auch das vollkommen unnötige FindComponent sparen sondern einfach mit den Membervariablen arbeiten. Und die .Name-Zuweisungen sind bei dynamisch erzeuten Controls auch vollkommen unnötig. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22: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