Autor Beitrag
hibbert
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Sa 06.03.04 22:26 
Hi,
mit folgendem Quellcoder erzeuge ich einen Button auf einer neuen Form:
ausblenden 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 user profile iconDeCodeGuru: Topic verschoben

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
Killmag10
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 297

Suse Linux / DOS / Windows All In One ;)
D4 / D2005
BeitragVerfasst: Sa 06.03.04 23:24 
hibbert hat folgendes geschrieben:
Hi,
mit folgendem Quellcoder erzeuge ich einen Button auf einer neuen Form:
ausblenden 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



BeitragVerfasst: So 07.03.04 00:53 
Such mal hier nach Suche in: Delphi-Forum, Delphi-Library BUTTON DYNAMISCH da steht wie du dem Button eine OnClick-Prozedur zuweist, wenn es das ist, was du willst.
hibbert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 297

Suse Linux / DOS / Windows All In One ;)
D4 / D2005
BeitragVerfasst: 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 !

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Mo 08.03.04 20:24 
ok, das funzt ja, doch nun habe ich folgendes Problem:
ausblenden volle Höhe Delphi-Quelltext
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 297

Suse Linux / DOS / Windows All In One ;)
D4 / D2005
BeitragVerfasst: Mo 08.03.04 21:58 
hibbert hat folgendes geschrieben:
ok, das funzt ja, doch nun habe ich folgendes Problem:
ausblenden volle Höhe Delphi-Quelltext
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 !

ausblenden 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:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Mo 08.03.04 22:53 
Hach stimmt ja, mist :roll:

naja nun funzt es, vielen Dank !!!

THX Hibbert

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
hibbert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Di 09.03.04 17:24 
Titel: zu früh grefreut...
Mist, hab doch noch ne Frage:...
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 329

Win XP
D6
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Di 09.03.04 22:56 
hab mir vorhin nur deine Fehlermeldung und type_text angeschaut und nicht den restlichen Quelltext :oops: , 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.
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: 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?
ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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.

ausblenden 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 ... :roll:

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
hibbert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Mi 10.03.04 19:22 
ok stimmt ja auch wieder das mit der eingabe, sorry Peter :oops:

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 329

Win XP
D6
BeitragVerfasst: 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