Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Mehrere Formen
Arbengie - Sa 09.01.10 22:08
Titel: Mehrere Formen
Hi, hab mal wieder ne Frage:
Ich in einem Programm nun 2 Forms, und ich möchte wissen wie ich Werte aus einer Unit in die andere Unit bekomme.
Genauer gesagt habe ich in in Unit2 ein Edit Feld, wo man eine Zahl einträgt, damit sich z.B. eine Buttongröße in Unit1 verändert.
Wie bekomme ich das nun hin?
MFG
BenBE - Sa 09.01.10 22:18
Nimm die entsprechende Unit bei der anderen in die Uses-Anweisung auf. Ggf. unterhalb von Implementation, weil du sonst Zirkelbezüge reinbekommen könntest.
ffgorcky - So 10.01.10 16:33
Also ich denke, dass es am einfachsten so geht:
Du musst doch eigentlich nur eine Procedure in Form1 auf public setzen - also unter public definieren:
Delphi-Quelltext
1: 2: 3: 4:
| private
public procedure ButtonGroesseAendern(neuerWert:integer); |
und dann müsste dieses für das ändern der Breite in dieser Haupform reichen:
Delphi-Quelltext
1: 2: 3: 4:
| procedure Form1.ButtonGroesseAendern(neuerWert:integer); begin ButtonDessenGroesseZuAendernIst.Width:=neuerWert; end; |
Und in der Form2 brauch dann nur der folgende Aufruf zu sein:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure Form2.ButtonAendernClick(Sender:Tobject); begin try Form1.ButtonGroesseAendern(StrToInt(TextBoxWert.Text)); except Messagebox('Der Wert konnte nicht in einen Int-Wert umgewandelt werden!'+#13#10+' - Tippfehler?'); end; end; |
Arbengie - So 10.01.10 20:09
Jetz bin ich in Unit2 und der soll die Größe der Form1 ändern:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| uses Unit1;
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject); begin If RadioButton2.Checked=True then begin Form1.Width:='1024' and Form1.Height:='768' [b] end[/b] |
aber es kommt immer der Fehler:
[Error] Unit2.pas(39): Incompatible types: 'Integer' and 'String'
elundril - So 10.01.10 20:13
hochkomma vor und nach den Zahlen weglassen und du hast die lösung. ;)
Hochkommas markieren immer Strings!
lg elundril
Arbengie - So 10.01.10 20:49
jetzt kommt die fehlermeldung:
[Error] Unit2.pas(39): Operator not applicable to this operand type
:roll:
Xentar - So 10.01.10 20:51
Lass das and weg, und mach zwei Befehle draus.
ffgorcky - So 10.01.10 21:51
Ja, das sind für den Compiler ganz einfach zwei voneinander recht unabhängige, nacheinander abzuarbeitende Befehle.
Also sollte es dann genau so klappen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| uses Unit1;
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject); begin If RadioButton2.Checked=True then begin Form1.Width:=1024; Form1.Height:=768; end; end; |
---
Moderiert von
Narses: Beiträge zusammengefasst---
Wobei ich da immer wieder überlege, ob man da denn überhaupt fragen sollte:
"ist es wahr, dass etwas wahr ist".
Eigentlich reicht es doch auch, wenn man dort nur
Delphi-Quelltext
1:
| if RadioButton2.Checked then |
schreibt.
Und wenn man nur fragen möchte, ob etwas
nicht wahr ist (also wenn man nur den negativen Fall haben möchte), dann so:
Delphi-Quelltext
1:
| if not RadioButton2.Checked then |
FinnO - So 10.01.10 22:37
Mit dem Leidigen Thema mit dem Vergleich auf True hat mir hier ja echt ständig zu tun. Das ganze ist nicht nur überflüssig sonden in einigen Fällen schlicht und ergreifend
falsch [
http://www.delphipraxis.net/post616933.html].
Arbengie - Mo 11.01.10 20:51
Jetzt tritt das eigentliche Problem wieder auf:
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:
| uses Unit1;
{$R *.dfm}
procedure TForm2.ButtonSpeichernClick(Sender: TObject); begin If RadioButton2.Checked=True then begin Form1.Width:=1024; Form1.Height:=768; end;
If RadioButton1.Checked=True then begin Form1.Width:=800; Form1.Height:=600; WebBrowser1.Width:=787; WebBrowser1.Height:=489; end;
If RadioButton3.Checked=True then begin Form1.Width:=640; Form1.Height:=480 end end;
end. |
WebBrowser1 tritt in Unit1 auf, aber er sagt:
[Error] Unit2.pas(46): Undeclared identifier: 'WebBrowser1'
elundril - Mo 11.01.10 20:53
ja, klar. wenn du nicht dazuschreibst auf welchem Form die Komponente zu finden ist, nimmt er die, in der die Methode definiert wurde.
Lösung:
Delphi-Quelltext
1:
| Form1.WebBrowser1.MachDeinenBefehl(); |
lg elundril
Arbengie - Mo 11.01.10 21:15
Ah ok, habs gefunden. Danke.
Aber jetz compiliert der das zwar, aber es komm diese Nachricht:
Was bedeutet das nun wieder?
Moderiert von
Narses: Bild als Anhang hochgeladen.
elundril - Mo 11.01.10 21:44
das ist ein CPU fenster zum debuggen. hast du einen Breakpoint in deinem Quelltext? (kleine Rote punkte am rand einer Zeile im Editor) oder vielleicht sogar nen Fehler in deinem Programm?
lg elundril
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!