Autor |
Beitrag |
hibbert
      
Beiträge: 1007
WinServer2003, Win XP, Linux
D6 Pers, D05
|
Verfasst: Sa 06.03.04 22:26
Hi,
mit folgendem Quellcoder erzeuge ich einen Button auf einer neuen Form:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.BitBtn1Click(Sender: TObject); var new_form:tform; new_btn:Tbutton; begin new_form:=tform.Create(new_form); new_form.Show; new_btn:=tbutton.Create(new_form); new_btn.Parent:=new_form; new_btn.Caption:='Mein Button'; end; |
Nun soll dieser Button einen Quelltext erhalten.
Wie kann ich zusätzlich noch jede einzelne Form ansprechen, die müssen doch auch einen Namen haben, zb. Form1 .
Thx Hibbert
Moderiert von DeCodeGuru: Topic verschoben
_________________ I kunnen väl svara endast ja eller nej
Om i viljen eller nej
|
|
Killmag10
      
Beiträge: 297
Suse Linux / DOS / Windows All In One ;)
D4 / D2005
|
Verfasst: Sa 06.03.04 23:24
hibbert hat folgendes geschrieben: | Hi,
mit folgendem Quellcoder erzeuge ich einen Button auf einer neuen Form:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.BitBtn1Click(Sender: TObject); var new_form:tform; new_btn:Tbutton; begin new_form:=tform.Create(new_form); new_form.Show; new_btn:=tbutton.Create(new_form); new_btn.Parent:=new_form; new_btn.Caption:='Mein Button'; end; |
Nun soll dieser Button einen Quelltext erhalten.
Wie kann ich zusätzlich noch jede einzelne Form ansprechen, die müssen doch auch einen Namen haben, zb. Form1 .
Thx Hibbert |
hatt sie doch auch !
new_form
oder versteh ich dich falsch ?
_________________ Mega- inkompetente Computer- ruinierende Organisation spioniert ohne funktionierende Technik
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 07.03.04 00:53
Such mal hier nach BUTTON DYNAMISCH da steht wie du dem Button eine OnClick-Prozedur zuweist, wenn es das ist, was du willst.
|
|
hibbert 
      
Beiträge: 1007
WinServer2003, Win XP, Linux
D6 Pers, D05
|
Verfasst: So 07.03.04 23:23
jo danke, genau danach habe ich gesucht....
So, nun führe ich die Procedure zum dynamischen erstellen 3 mal durch.
Nun habe ich als 2 dynamisch erstellte formen, kann ich diese noch einzeln anspreche, oder haben diese alle den gleichen Namen?
thx hibbert
_________________ I kunnen väl svara endast ja eller nej
Om i viljen eller nej
|
|
Killmag10
      
Beiträge: 297
Suse Linux / DOS / Windows All In One ;)
D4 / D2005
|
Verfasst: Mo 08.03.04 00:10
hibbert hat folgendes geschrieben: | jo danke, genau danach habe ich gesucht....
So, nun führe ich die Procedure zum dynamischen erstellen 3 mal durch.
Nun habe ich als 2 dynamisch erstellte formen, kann ich diese noch einzeln anspreche, oder haben diese alle den gleichen Namen?
thx hibbert |
du kannst blos die letzte ansprechen die du erstellt hast.
am besten ist es wenn du es mit einen array löst !
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.Button1Click(Sender: TObject); var new_btn:array of Tbutton; begin SetLength(new_btn, 20); new_btn[0]:=tbutton.Create(new_form); new_btn[1]:=tbutton.Create(new_form); new_btn[0].Caption:='Mein 1. Button'; new_btn[1].Caption:='Mein 2. Button'; end; |
mfg. Killmag10
_________________ Mega- inkompetente Computer- ruinierende Organisation spioniert ohne funktionierende Technik
|
|
hibbert 
      
Beiträge: 1007
WinServer2003, Win XP, Linux
D6 Pers, D05
|
Verfasst: Mo 08.03.04 20:24
ok, das funzt ja, doch nun habe ich folgendes Problem:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| procedure MyButton(Sender: TObject); procedure Button1Click(Sender: TObject);
...
var Form1: TForm1; new_btn:array of Tbutton;
implementation
...
procedure Tform1.myButton(Sender: TObject); begin showmessage(''); end;
procedure TForm1.Button1Click(Sender: TObject); var new_form: tform; begin SetLength(new_btn, 20); new_btn[0]:=tbutton.Create(new_form); new_btn[1]:=tbutton.Create(new_form); new_btn[0].Caption:='Mein 1. Button'; new_btn[1].Caption:='Mein 2. Button'; new_btn[1].Left:=new_btn[0].Width+1; new_btn[0].OnClick:=myButton; new_btn[0].Parent:=form1; new_btn[1].Parent:=form1; end; |
Also das kompelieren funzt ja noch, doch wenn ich auf den Button klicke, kommt diese Nette Fehlermeldung:
Project1 hat folgendes geschrieben: | Zugriffsverletzung bei Adresse 004032CE in Modul 'Project1.exe'. Lesen von Adresse 0000BCE1. |
Warum kommt diese Meldung?
thx hibbert
_________________ I kunnen väl svara endast ja eller nej
Om i viljen eller nej
|
|
Killmag10
      
Beiträge: 297
Suse Linux / DOS / Windows All In One ;)
D4 / D2005
|
Verfasst: Mo 08.03.04 21:58
hibbert hat folgendes geschrieben: | ok, das funzt ja, doch nun habe ich folgendes Problem:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| procedure MyButton(Sender: TObject); procedure Button1Click(Sender: TObject);
...
var Form1: TForm1; new_btn:array of Tbutton;
implementation
...
procedure Tform1.myButton(Sender: TObject); begin showmessage(''); end;
procedure TForm1.Button1Click(Sender: TObject); var new_form: tform; begin SetLength(new_btn, 20); new_btn[0]:=tbutton.Create(new_form); new_btn[1]:=tbutton.Create(new_form); new_btn[0].Caption:='Mein 1. Button'; new_btn[1].Caption:='Mein 2. Button'; new_btn[1].Left:=new_btn[0].Width+1; new_btn[0].OnClick:=myButton; new_btn[0].Parent:=form1; new_btn[1].Parent:=form1; end; |
Also das kompelieren funzt ja noch, doch wenn ich auf den Button klicke, kommt diese Nette Fehlermeldung:
Project1 hat folgendes geschrieben: | Zugriffsverletzung bei Adresse 004032CE in Modul 'Project1.exe'. Lesen von Adresse 0000BCE1. |
Warum kommt diese Meldung?
thx hibbert |
ganz einfach !
du erstellst die butten in einer Form die es nicht gibt !
Delphi-Quelltext 1: 2:
| new_btn[0]:=tbutton.Create(new_form); new_btn[1]:=tbutton.Create(new_form); |
Schreib mal statt new_form den namen deiner exestirenten Form rein (zb Form1)
oder füge vor den erstellen der buttens das ein:
Delphi-Quelltext 1: 2:
| new_form:=TForm.CreateNew(Application); new_form.show; |
Denk daran auch alles mit Free wieder Freizugeben !
_________________ Mega- inkompetente Computer- ruinierende Organisation spioniert ohne funktionierende Technik
|
|
hibbert 
      
Beiträge: 1007
WinServer2003, Win XP, Linux
D6 Pers, D05
|
Verfasst: Mo 08.03.04 22:53
Hach stimmt ja, mist
naja nun funzt es, vielen Dank !!!
THX Hibbert
_________________ I kunnen väl svara endast ja eller nej
Om i viljen eller nej
|
|
hibbert 
      
Beiträge: 1007
WinServer2003, Win XP, Linux
D6 Pers, D05
|
Verfasst: Di 09.03.04 17:24
Titel: zu früh grefreut...
Mist, hab doch noch ne Frage:...
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure type_text(Sender: TObject; var txt:string); ... implementation
{$R *.dfm}
procedure Tform1.type_text(Sender: TObject; var txt:string); begin showmessage(txt); end; ... SetLength(new_edit, 20); ... new_edit[anz]:=tedit.Create(new_form); new_edit[anz].Parent:=new_form; new_edit[anz].Top:=new_rich[anz].Height+1; new_edit[anz].Width:=new_form.Width-7; new_edit[anz].OnChange:=form1.type_text(form1.Button1,'txt'); |
Folgender Fehler tritt auf und die letzte Zeile meines hier angegebenden Quelltextes wird rot markiert:
compiler hat folgendes geschrieben: | [Fehler] Unit1.pas(338): Konstantenobjekt kann nicht als Var-Parameter weitergegeben werden |
Wie kann ich solch eine Procedure ausführen?
hibbert
_________________ I kunnen väl svara endast ja eller nej
Om i viljen eller nej
|
|
rokdd
      
Beiträge: 329
Win XP
D6
|
Verfasst: Di 09.03.04 21:24
hallo,
dein Problem ist das die Parameter von onclick und der procedure unterschiedlich sind. also wenn dann die parameter global deklinieren oder(weiß nicht wie das genau geht) eine neue Kompo machen.
Robert
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Di 09.03.04 21:28
Hallo
Zitat: |
procedure Tform1.type_text(Sender: TObject; var txt:string);
begin
showmessage(txt);
end;
|
dir ist die Bedeutung von VAR bei der Parameterübergabe klar? In der Hilfe ist ein Punkt Wert-und Variablenparamter (unt Var (reserviertes Wort) guggn und siehe auch klicken.
Wenn du nur txt ausgeben willst, brauchst du das var nicht, und da du eine Stringkonstante 'txt' übergeben willst, meckert Delphi zurecht.
Mfg Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Di 09.03.04 22:56
hab mir vorhin nur deine Fehlermeldung und type_text angeschaut und nicht den restlichen Quelltext  , aber ich versteh nicht ganz, was du willst.
Wenn du einen Hinweis bekommst, wie du ein Onclick-ereignis einem dynamisch erzeugten Button zuweist, ist es mir schleierhaft, wie man dann sowas new_edit[anz].OnChange:=form1.type_text(form1.Button1,'txt'); überhaupt probieren kann. Warum sollte man denn das onchange anders machen als das onclick? Ein wenig auseinandersetzen mußt du dich schon damit, und es gibt wohl sehr viele (erklärenden) Einträge dazu bereits im Forum.
Ich hoffe, die showmessage beim onchange eines Edits ist nur ein Test, ansonsten kommst du bei einer Eingabe aus deinem Prog nicht so schnell wieder raus.
Auch würd mich mal interessieren, was für einen Text du da übergeben willst. nicht das dir bloß ein Typcast fehlt und du das Text des Edits willst.
Delphi-Quelltext 1: 2: 3: 4:
| Procedure OnChange... begin If (Sender is TEdit) then showmesssage(Tedit(Sender).text); end; |
Mfg Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
hibbert 
      
Beiträge: 1007
WinServer2003, Win XP, Linux
D6 Pers, D05
|
Verfasst: Mi 10.03.04 16:34
Also,
ich erzeuge eine neue Form mit einem editfeld darauf.
Das mit der showmessage ist auch nur ein test, eigendlich soll da nur überprüft werden, ob die enter taste gedrückt wurde oder nicht.
Wenn ja, dann soll der eingegebene Text, aus dem dynamischen editfeld, in eine listbox, welche nicht dynamisch ist, eingefügt werden.
Das ist alles, doch ich muss ja auch irgendwie den Quelltext so schreiben, dass es für das dynam. Editfeld gilt, und ganau das ist mein prob.
mfg hibbert
_________________ I kunnen väl svara endast ja eller nej
Om i viljen eller nej
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 10.03.04 16:46
(1) Du kannst ein OnChange-Ereignis nicht so aufbauen. Ein OnChange-Ereignis erhält genau einen Parameter und das ist Sender : TObject.
(2) Wenn Du Edit.OnChange eine Prozedur zuweist, machst Du das nur mit den Prozedurennamen ohne die Paramter
(3) Du kannst einem VAR-Parameter keine Konstante zuweisen. Denn der könnte ich ja keinen Wert zuweisen.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
hibbert 
      
Beiträge: 1007
WinServer2003, Win XP, Linux
D6 Pers, D05
|
Verfasst: Mi 10.03.04 18:02
Peter Lustig hat folgendes geschrieben: | (2) Wenn Du Edit.OnChange eine Prozedur zuweist, machst Du das nur mit den Prozedurennamen ohne die Paramter |
also so?
Delphi-Quelltext 1:
| new_edit[anz].OnChange:=procedurename; |
ok, das kenn ich ja schon, doch ich möchte ja gerne den Inhalt des Editfeldes auslesen und wo anders wieder einfügen, da muss ich doch irgendwie den Inhalt als var übergeben.
Wie mache ich das?
oder gibt es noch einen anderen Weg, um den inhalt eines bestimmten Editfeldes herrauszubekommen?
thx hibbert
_________________ I kunnen väl svara endast ja eller nej
Om i viljen eller nej
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 10.03.04 18:09
Wie das mit dem Text geht, hat Keldorn doch schon gepostet!
Du hast das OnChange-Event und dort wird ein Sender übergeben. Der Sender ist das entsprechende Editfeld. Und da kannst Du dann den Text auslesen.
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TForm1.Edit1OnChange(Sender : TObject): var derText : String; begin if Sender is TEdit then derText := TEdit(Sender).Text; end; |
Es wäre ja auch ziemlicher Unsinn, den Parameter beim Erzeugen des Feldes zu übergeben, wie Du es wolltest. Wie sollte da schon was drin stehen ... 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
hibbert 
      
Beiträge: 1007
WinServer2003, Win XP, Linux
D6 Pers, D05
|
Verfasst: Mi 10.03.04 19:22
ok stimmt ja auch wieder das mit der eingabe, sorry Peter
Aber wie kann ich jetzt noch überprüfen, ob eine bestimmte Taste gedrückt wurde, zb: die Enter Taste ?
thx hibbert
_________________ I kunnen väl svara endast ja eller nej
Om i viljen eller nej
|
|
rokdd
      
Beiträge: 329
Win XP
D6
|
Verfasst: Mi 10.03.04 19:35
als erstes: Wäre eigentlich ein neuer thread!!!
Wenn dann machst du eine globale variable die bei keypress auf deiner form die variable neu zuweist.
die variable ist wenn dann char oder word
Oder mit virtual key schau dazu mal im Forum!
Robert
|
|