Autor Beitrag
Besth
Hält's aus hier
Beiträge: 2



BeitragVerfasst: 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
ausblenden 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
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:
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
    { Private declarations }
  public
    { Public declarations }
  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:
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:
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
    { Private declarations }
  public
    { Public declarations }
  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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 01.12.09 00:31 
Moin und :welcome: im Forum!

user profile iconBesth hat folgendes geschrieben Zum zitierten Posting springen:
warum geht das
Weil die Funktion hier eine Methode der Formularklasse ist. ;)

user profile iconBesth hat folgendes geschrieben Zum zitierten Posting springen:
aber das nicht
Diese Funktion kennt die Elemente deiner Formularklasse nicht, deshalb kannst du das z.B. so machen:
ausblenden 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

_________________
There are 10 types of people - those who understand binary and those who don´t.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 01.12.09 00:31 
Deine Prozedur aktualisieren ist keine Methode deiner Form-Klasse. Deswegen ist das Label in der Prozedur unbekannt.
Besth Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 01.12.09 00:50 
Moin!

user profile iconBesth hat folgendes geschrieben Zum zitierten Posting springen:
wie mach ich denn aus meiner aktualisieren prozedur eine methode meiner form-klasse?
ausblenden 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
    { Private declarations }
  public
    { Public declarations }
  end;

var
  main: Tmain;
  cardsout_2: integer = 0;

implementation

{$R *.dfm}

procedure Tmain.aktualisieren;
begin
  txt_card2.caption := IntToStr(cardsout_2);
end;


user profile iconBesth hat folgendes geschrieben Zum zitierten Posting springen:
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

_________________
There are 10 types of people - those who understand binary and those who don´t.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 01.12.09 01:54 
Oder besser noch ein Tutorial über Klassen lesen.
Zorro
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76

Win 2000, Win XP Pro
Delphi 7 Architect
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 04.12.09 11:46 
user profile iconZorro hat folgendes geschrieben Zum zitierten Posting springen:
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