AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Form zur Laufzeit

Offene Frage von "Bernhard Geyer"
Ein Thema von Plastewolf · begonnen am 30. Jan 2015 · letzter Beitrag vom 2. Feb 2015
Antwort Antwort
Plastewolf
(Gast)

n/a Beiträge
 
#1

Form zur Laufzeit

  Alt 30. Jan 2015, 18:11
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.

Geändert von Plastewolf (31. Jan 2015 um 17:18 Uhr)
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#2

AW: Form zur Laufzeit

  Alt 30. Jan 2015, 18:26
Wer ist "Form2" ?


Aber warum erstellst Du das Fenster nicht in der IDE und erstellst bei Bedarf eine Insatnz des Fensters?
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
Plastewolf
(Gast)

n/a Beiträge
 
#3

AW: Form zur Laufzeit

  Alt 30. Jan 2015, 18:32
Wer ist "Form2" ?
Form2 ist das Hauptprogramm. Ich habe damals als kleines "Test-Projekt" damit angefangen, jedoch wurde das Projekt im Laufe der Zeit ernst und damit auch entsprechend Größer. Form2 ist das einzige Formular in dem gesamten Programm, welches noch den "Original-Titel" trägt. Ich war damals zu Faul alles händisch umzubenennen, jedoch weiß jeder was mit diesem Form gemeint ist, daher stellt das kein Problem dar.

Aber warum erstellst Du das Fenster nicht in der IDE und erstellst bei Bedarf eine Insatnz des Fensters?
Ich möchte das Programm soweit umbauen das es über eine Art "Plugin-Schnittstelle" läuft, das bedeutet ich liefere die einzelnen Formulare über ein Plugin-File nach und je nach dem was sich in dem späteren Plugin-Ordner befinden wird, werden die Funktionen des Programmes dynamisch erweitert. Dies soll den ersten Test dafür darstellen. Natürlich bin ich mir bewusst das dieses Beispiel noch nicht ausgereift ist, aber ich habe ja auch gerade erst damit angefangen.

Grüße
  Mit Zitat antworten Zitat
Plastewolf
(Gast)

n/a Beiträge
 
#4

AW: Form zur Laufzeit

  Alt 2. Feb 2015, 07:00
Hat sich erledigt. Ich habe einfach "CreateNew" statt "Create" verwendet.


Leider kann ich meinen Originalpost nicht editieren, daher das "Offene Frage" nicht herausnehmen.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Form zur Laufzeit

  Alt 2. Feb 2015, 08:29
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:22 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