| Autor |
Beitrag |
Besth
Hält's aus hier
Beiträge: 2
|
Verfasst: Di 01.12.09 00:22
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
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:
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
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 01.12.09 00:31
Moin und  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.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 01.12.09 00:31
Deine Prozedur aktualisieren ist keine Methode deiner Form-Klasse. Deswegen ist das Label in der Prozedur unbekannt.
|
|
Besth 
Hält's aus hier
Beiträge: 2
|
Verfasst: 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
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 01.12.09 00:50
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 01.12.09 01:54
Oder besser noch ein Tutorial über Klassen lesen.
|
|
Zorro
      
Beiträge: 76
Win 2000, Win XP Pro
Delphi 7 Architect
|
Verfasst: 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
_________________ Real programmers confuse Xmas and Halloween because DEC 25 = OCT 31
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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.
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.
(*) Ja, ich weiß: erst ab Delphi 2005 Professional / Turbo Delphi
|
|