![]() |
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; |
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?
|
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?? |
AW: Funktion in selbst erstellter Form
Zitat:
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. ![]() 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:
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:
unit Form2;
interface uses ... type TForm2 = class(TForm) Label1: TLabel; Edit1: TEdit; Button1: TButton; private { ... } public { ... } Passwort: String; end; var Form2: TForm2; implementation end.
Delphi-Quellcode:
Dort schreibst du rein:
implementation
procedure TForm1.Button1Click(Sender: TObject); begin // ... end; end.
Delphi-Quellcode:
Dann wechselst du zurück auf Unit1 bzw Form1. Ziehst dort einen TButton auf die Form, damit das Ganze ungefähr so aussieht:
implementation
procedure TForm2.Button1Click(Sender: TObject); begin Passwort := Edit1.Text; Close; // Alternativ, wenn du weißt wie // Passwort := XorStr(Edit1.Text); end; end.
Delphi-Quellcode:
Dann doppelklickst du wieder auf den Button, Code:
unit Form1;
interface uses ... type TForm1 = class(TForm) Button1: TButton; private { ... } public { ... } end; var Form1: TForm1; implementation // WICHTIG! uses Unit2; end.
Delphi-Quellcode:
Fertig. Wenn du dich nun nicht zu ... anstellst, sollte das laufen. :mrgreen:
implementation
// WICHTIG! uses Unit2; procedure TForm1.Button1Click(Sender: TObject); begin Form2.ShowModal; ShowMessage(Form2.Passwort); end; end. |
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 :)
|
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. |
AW: Funktion in selbst erstellter Form
Zitat:
Delphi-Quellcode:
Dynamisch zur Laufzeit erstellen heisst nicht, sie auch selbst zusammenzubasteln, sondern nur die Instanz zur Laufzeit zu erzeugen. :stupid:
// 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. |
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; |
AW: Funktion in selbst erstellter Form
Delphi-Quellcode:
Autoscroll:=false;
Button1 := TButton.Create(myForm); //end;//das muß raus With Button1 do begin parent := myForm; |
AW: Funktion in selbst erstellter Form
Zitat:
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 00:58 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