Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - variable über 2 funktionen?
Besth - Di 01.12.09 00:22
Titel: variable über 2 funktionen?
hey ich brauch mal hilfe - bin relativ neu in delphi :)
ich will auf nen button klicken un dann soll ne funktion aufgerufen werden ...
aber er meckert in meinem 2. beispiel
Quelltext
1:
| [Error] Unit1.pas(80): Undeclared identifier: 'txt_card2' |
irgendwie muss ich also von der 1. funktion zur 2. diesen identifier übergeben - aber wie? und ich will das nicht über parameter machn weil das is ja das label - muss doch auch so gehn ...
warum geht das
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: 32: 33:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type Tmain = class(TForm) txt_card2: TLabel; procedure btn_card2Click(Sender: TObject); private public end;
var main: Tmain; cardsout_2: integer = 0;
implementation
{$R *.dfm}
procedure Tmain.btn_card2Click(Sender: TObject); begin cardsout_2 := cardsout_2 + 1; txt_card2.caption := IntToStr(cardsout_2); end;
end. |
aber das nicht:
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: 32: 33: 34: 35: 36: 37: 38: 39:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type Tmain = class(TForm) txt_card2: TLabel; procedure btn_card2Click(Sender: TObject); procedure aktualisieren; private public end;
var main: Tmain; cardsout_2: integer = 0;
implementation
{$R *.dfm}
procedure aktualisieren; begin txt_card2.caption := IntToStr(cardsout_2); end;
procedure Tmain.btn_card2Click(Sender: TObject); begin cardsout_2 := cardsout_2 + 1; aktualisieren; end;
end. |
Narses - Di 01.12.09 00:31
Moin und :welcome: im Forum!
Besth hat folgendes geschrieben : |
| warum geht das |
Weil die Funktion hier eine Methode der Formularklasse ist. ;)
Besth hat folgendes geschrieben : |
| aber das nicht |
Diese Funktion kennt die Elemente deiner Formularklasse nicht, deshalb kannst du das z.B. so machen:
Delphi-Quelltext
1: 2: 3: 4:
| procedure aktualisieren; begin main.txt_card2.caption := IntToStr(cardsout_2); end; |
Hier würde sich aber eher anbieten, aus deinem Punktezähler eine Eigenschaft der Formularklasse zu machen und im Setter den Wert in der GUI zu aktualisieren. :idea:
cu
Narses
Delete - Di 01.12.09 00:31
Deine Prozedur aktualisieren ist keine Methode deiner Form-Klasse. Deswegen ist das Label in der Prozedur unbekannt.
Besth - Di 01.12.09 00:39
danke für die schnelle antwort :)
also das kleine wörtchen
main.
hat mir sozusagen gefehlt :)
nur zum verständnis noch:
wie mach ich denn aus meiner aktualisieren prozedur eine methode meiner form-klasse?
bzw wie mach ich eine neue eigenschaft in meiner formularklasse ^^
Narses - Di 01.12.09 00:50
Moin!
Besth hat folgendes geschrieben : |
| wie mach ich denn aus meiner aktualisieren prozedur eine methode meiner form-klasse? |
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:
| type Tmain = class(TForm) txt_card2: TLabel; procedure btn_card2Click(Sender: TObject); procedure aktualisieren; private public end;
var main: Tmain; cardsout_2: integer = 0;
implementation
{$R *.dfm}
procedure Tmain.aktualisieren; begin txt_card2.caption := IntToStr(cardsout_2); end; |
Besth hat folgendes geschrieben : |
| bzw wie mach ich eine neue eigenschaft in meiner formularklasse ^^ |
Das darfst du gerne mal in der DOH nachschlagen oder hier im Forum danach suchen. :idea: ;)
cu
Narses
Delete - Di 01.12.09 01:54
Oder besser noch ein Tutorial über Klassen lesen.
Zorro - Fr 04.12.09 11:26
Und meiner Ansicht nach ist der Weg, aus der Proc "aktualisieren" eine Methode zu machen (a), weitaus besser, als das Voransetzen von "main", um eine Methode aus einer "freigliegenden" Proc aufzurufen(b). Spätestens wenn du Variante b oft verwendest und dann mal deine Form von "main" in etwas anderes umbenennst, weißt du warum...
Gruß Zorro
jaenicke - Fr 04.12.09 11:46
Zorro hat folgendes geschrieben : |
| Spätestens wenn du Variante b oft verwendest und dann mal deine Form von "main" in etwas anderes umbenennst, weißt du warum... |
Das ist ja nicht schlimm, das Refactoring von Delphi passt das doch eh automatisch beim Umbenennen an (*), insofern ist das an der Stelle doch vollkommen egal. :gruebel:
Schlimm wird es, wenn man mehrere Instanzen des Formulars verwendet und sich über die seltsamen Effekte wundert, weil mit main natürlich nur die eine Instanz in der globalen Variable angesprochen wird. :idea:
(*) Ja, ich weiß: erst ab Delphi 2005 Professional / Turbo Delphi
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!