Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Funktion in selbst erstellter Form (https://www.delphipraxis.net/170702-funktion-selbst-erstellter-form.html)

DelphiUser1 29. Sep 2012 14:22

Funktion in selbst erstellter Form
 
Hallo alle miteinander ;)
ich habe in der Klasse Treg=class(TForm) eine Form erstellt (myform). Diese wird während der Laufzeit erzeugt. In Unit1 habe ich eine function eingebaut, mit der ich ein Passwort verschlüsseln kann(function XorStr(const Text: string; Key: Integer): string). Der gesamte Quellcode für myform steht unten. Leider ändert sich Label3 nicht in die Verschlüsselung sondern die caption bleibt leer. Kann mir da jemand helfen?


Delphi-Quellcode:
myform:=TReg.CreateNew(Self);
with myform do
  begin
    visible := true;
    Caption := 'Registrieren(2/2)';
    Left := Form1.Left;
    Top := Form1.Top;
    ClientHeight := Form1.ClientHeight;
    ClientWidth := Form1.ClientWidth;
    Autoscroll:=false;
    Button1 := TButton.Create(myForm);
    end;
    With Button1 do
    begin
      parent := myForm;
      visible := true;
      caption := 'Prozess abschliessen';
      width:=120;
      left := 150;
      top := 150;
      OnClick := Button1Click;
    end;
    Edit1 := TEdit.Create(myForm);
    With Edit1 do
    begin
      parent := myForm;
      visible := true;
      left := 150;
      top := 50;
    end;
    Edit2 := TEdit.Create(myForm);
    With Edit2 do
    begin
      parent := myForm;
      visible := true;
      left := 150;
      top := 100;
    end;
    Label1:=TLabel.Create(myform);
  with Label1 do
  begin
  parent := myForm;
  Font.Color:=clblack;
  visible := true;
  left := 20;
  top := 100;
  Caption := 'Benutzername:';
  Font.Size:=12;
  end;
  Label2:=TLabel.Create(myform);
  with Label2 do
  begin
  Parent:=Myform;
  Visible:=true;
  left := 20;
  top := 50;
  Caption := 'Passwort:';
  Font.Size:=12;
  end;
  Label3:=TLabel.Create(myform);
  with Label3 do
  begin
  Parent:=Myform;
  Visible:=True;
  left := 200;
  top := 50;
  Caption := XorStr(Edit1.Text, 21);
  Font.Size:=10;
  Font.Color:=clblack;
  end;
   end;

DeddyH 29. Sep 2012 14:29

AW: Funktion in selbst erstellter Form
 
In Edit1 steht ja auch nichts drin, was willst Du denn da verschlüsseln? Und wieso entwirfst Du das Formular nicht ganz normal in der IDE, erzeugen kannst Du es ja immer noch dynamisch?

DelphiUser1 29. Sep 2012 15:51

AW: Funktion in selbst erstellter Form
 
Aha wie entwerfe ich es den in der IDE :-D?
Ja also das war ja echt ein blöder Fehler von mir. Das Problem ist das er jetzt gar nichts mehr macht wenn man auf den Button der selbst erstellten Form klickt, obwohl ich nichts verändert habe??

nuclearping 29. Sep 2012 16:37

AW: Funktion in selbst erstellter Form
 
Zitat:

Zitat von DelphiUser1 (Beitrag 1184967)
Aha wie entwerfe ich es den in der IDE :-D?

Was ist das für eine Frage? :mrgreen: Normal über den Form-Designer?

Datei -> Neu -> VCL-Formularanwendung

Dann nochmal

Datei -> Neu -> VCL-Formular

und da hast du in der Formularansicht doch (je nach Delphi-Version) oben oder rechts die ganzen Komponenten, die du auf die Form ziehen kannst?

Zum Beispiel ein Screenshot von Turbo Delphi. So ähnlich sieht's auch in Delphi XE aus. Da hast du bei 6 die verfügbaren Komponenten. In älteren Delphi-Versionen sind die Komponenten bei 1.
http://0.tqn.com/d/delphi/1/0/U/a/turbo_delphi_ide.gif

Wenn du so ein neues Projekt angelegt hast, ziehst du in der Form2 einfach ein TLabel, TEdit und TButton auf die Form. In den Code schreibst du bei TForm2 in Public "Passwort: String;", das sollte dann so aussehen:
Delphi-Quellcode:
unit Form2;

interface

uses
  ...

type
  TForm2 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
  private
    { ... }
  public
    { ... }
    Passwort: String;
  end;

var
  Form2: TForm2;

implementation

end.
Dann doppelklickst du im Form-Designer (Umschalten zw. Code und Form ist immer F12) auf Button1. Dadurch wird ein Event für den Button1 angelegt:

Delphi-Quellcode:
implementation

procedure TForm1.Button1Click(Sender: TObject);
begin
  // ...
end;

end.
Dort schreibst du rein:

Delphi-Quellcode:
implementation

procedure TForm2.Button1Click(Sender: TObject);
begin
  Passwort := Edit1.Text;
  Close;

  // Alternativ, wenn du weißt wie
  // Passwort := XorStr(Edit1.Text);
end;

end.
Dann wechselst du zurück auf Unit1 bzw Form1. Ziehst dort einen TButton auf die Form, damit das Ganze ungefähr so aussieht:
Delphi-Quellcode:
unit Form1;

interface

uses
  ...

type
  TForm1 = class(TForm)
    Button1: TButton;
  private
    { ... }
  public
    { ... }
  end;

var
  Form1: TForm1;

implementation

// WICHTIG!
uses
  Unit2;

end.
Dann doppelklickst du wieder auf den Button, Code:

Delphi-Quellcode:
implementation

// WICHTIG!
uses
  Unit2;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2.ShowModal;
  ShowMessage(Form2.Passwort);
end;

end.
Fertig. Wenn du dich nun nicht zu ... anstellst, sollte das laufen. :mrgreen:

DelphiUser1 29. Sep 2012 21:03

AW: Funktion in selbst erstellter Form
 
haha erstmal danke an nuclearping für die Mühe, aber ich bin jetzt auch schon ein Jahr im Programming dabei, also wie ich eine neue Form anlege, ist mir dann doch klar, aber Auftrag war es die Form während der Laufzeit zu erzeugen. Der Begriff IDE war mir wahrscheinlich nur nicht so geläufig :)

himitsu 29. Sep 2012 21:33

AW: Funktion in selbst erstellter Form
 
Man könnte sich aber auch fragen, wieso jemand eine statische Form dynamisch erstellen zusammenbauen will, wo doch die statische Erstellung (als DFM) wesentlich einfacher ist?

Gut, wenn man unbedingt will, kann man sich natürlich gerne mehr Arbeit machen, als nötig.

nuclearping 29. Sep 2012 21:39

AW: Funktion in selbst erstellter Form
 
Zitat:

Zitat von DelphiUser1 (Beitrag 1185025)
haha erstmal danke an nuclearping für die Mühe, aber ich bin jetzt auch schon ein Jahr im Programming dabei, also wie ich eine neue Form anlege, ist mir dann doch klar, aber Auftrag war es die Form während der Laufzeit zu erzeugen. Der Begriff IDE war mir wahrscheinlich nur nicht so geläufig :)

Die Form zur Laufzeit zu erzeugen könnte dann zB so aussehen:
Delphi-Quellcode:
// Deine Hauptform
unit Form1;

interface

uses
  ..., Unit2;

type
  TForm1 = class(TForm)
    ...
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { ... }
    FForm2: TForm2;
  public
    { ... }
  end;

implementation

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2 := TForm2.Create(Self);
  with Form2 do
    try
      Form2.ShowModal;
      // ...
    finally
      FreeAndNil(Form2);
    end;
end;

end.
Dynamisch zur Laufzeit erstellen heisst nicht, sie auch selbst zusammenzubasteln, sondern nur die Instanz zur Laufzeit zu erzeugen. :stupid:

DelphiUser1 29. Sep 2012 22:08

AW: Funktion in selbst erstellter Form
 
Ja das ist natürlich richtig, aber es bestanden genaue Vorgaben, also es soll schon so gemacht werden. das Seltsame ist das gerade die Onclick-Methode des Buttons auf der erzeugten Form nicht mehr geht. also der Code für die Form ist ja oben und hier nochmal der Quelltext für das Onclick Ereignis, wer findet den fehler :?:
Delphi-Quellcode:
procedure TReg.Button1Click(Sender: TObject);
var sl, sd, sf: TStrings;
i:integer;
begin
Label3.Caption:=XorStr(Edit1.Text, 21);
  sl := TStringlist.Create;
  sf :=TStringlist.Create;
  sl.add(Label3.Caption);
  sl.savetofile(path+ Edit2.Text +'.txt');
  sd :=TStringlist.Create;
sd.Add(Form1.Edit3.Text);
sd.Add(Form1.Edit4.Text);
sd.Add(Form1.MaskEdit1.Text);
sd.Add(Form1.Edit6.Text);
sd.Add(Form1.ComboBox3.Text);
  for i := 0 to Form1.Checklistbox1.Items.Count-1 do
      if Form1.Checklistbox1.Checked[i] then
      sf.Add(Form1.Checklistbox1.Items[i]);
  sd.SaveToFile(path+'Info'+Edit2.Text+'.txt');
  sf.SaveToFile (path+'Hobbys'+Edit2.Text+'.txt');
  sd.free;
  sl.free;
  sf.free;
  Showmessage ('Du hast erfolgreich ein Konto angelegt');


  if MessageDlg('Willst du dich jetzt anmelden?', mtConfirmation, [mbyes, mbno], 0) = mrYes then
  begin
  Form1.Visible:=True;
  Form1.PageControl1.ActivePageIndex:=0
  end else
  Form1.Close;
end;

Bummi 29. Sep 2012 22:57

AW: Funktion in selbst erstellter Form
 
Delphi-Quellcode:
   Autoscroll:=false;
    Button1 := TButton.Create(myForm);
//end;//das muß raus
    With Button1 do
    begin
      parent := myForm;

nuclearping 29. Sep 2012 23:22

AW: Funktion in selbst erstellter Form
 
Zitat:

Zitat von DelphiUser1 (Beitrag 1185033)
Ja das ist natürlich richtig, aber es bestanden genaue Vorgaben, also es soll schon so gemacht werden.

Was? Euch wurde gesagt, dass ihr die Inhalte der Form per Code erstellen müsst? Wer verlangt denn sowas absurdes? :stupid:

Ich meine es ist gut zu wissen, wie es funktioniert und wenn man es kann. Aber das jemandem als (Haus?)Aufgabe zu Lernzwecken aufzubürden ... Ich weiß ja nicht. :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:12 Uhr.
Seite 1 von 3  1 23      

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