Autor Beitrag
muzy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: Mi 17.09.08 19:18 
Hey :)

Ich habe mal wieder eine Frage. In der Schule habe ich bsiher nur gelernt, das Prozeduren nur über Buttons und Timer aufgerufen werden können.

Aber ich brauche ca 20 Prozeduren und dafür immer einen Button wäre extrem doof.

Ich hab einfach mal versucht diese Prozedur selbst zu machen, jedoch haben diese nie die globalen Variablen angenommen, bzw kannten die nicht.

Deswegen bitte ich um eine Muster-prozedur die auch alle globalen Variablen anerkennt.

Mit besten Dank im Vorraus

Sebastian aka Muzy

PS: Ich hab die bekannten Suchmaschinen schon "befragt" aber ohne Erfolg. Deswegen helft bitte einem Anfänger :)
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 765
Erhaltene Danke: 130



BeitragVerfasst: Mi 17.09.08 19:22 
Zeig doch am Besten mal den nicht funktionierenden Quelltext bzw. Ausschnitte. Ev. sieht man da den Fehler besser.

ub60
muzy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: Mi 17.09.08 19:27 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure Ampelaenderung
begin
 Autoimageint:=random(10);
 AutoImage.left:=AutoImage.left+2;
end;


Das Problem ist das er auf einmal die Variable Autoimageint nicht kennt. Was mache ich falsch?
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mi 17.09.08 20:06 
user profile iconmuzy hat folgendes geschrieben:
Das Problem ist das er auf einmal die Variable Autoimageint nicht kennt.

Du musst ihm sagen, was Autoimageint ist. Sieh dir dazu mal den Abschnitt Variablen und Variablentypen aus dem Crashkurs von user profile iconChristian S. an.
muzy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: Mi 17.09.08 20:11 
Ahh, heißt das ich muss in jeder procedure nocheinmal extra sagen, was für ein Variablentyp das ist den ich benutze?
Obwohl ich die schon vorher deklariert habe? -- Komisch

also wäre eine gültige Procedure das hier:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure Ampelaenderung (Autoimageint: Integer)
begin
 Autoimageint:=random(10);
 AutoImage.left:=AutoImage.left+2;
end;


stimmt das?

Und was ist wenn ich mehrere Variablentypen habe z.B. Boolean + Integer und string zusammen?

Muzy

PS: Nachdem ich bereits meinen PC durch einige vermutete Programmteile zum abstürzen gebracht habe, lass ich meinen Vorschlag lieber durch Profis verifizieren.
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mi 17.09.08 20:14 
user profile iconmuzy hat folgendes geschrieben:
Ahh, heißt das ich muss in jeder procedure nocheinmal extra sagen, was für ein Variablentyp das ist den ich benutze?
Obwohl ich die schon vorher deklariert habe? -- Komisch

Wenn du die Variable bereits definiert hast, brauchst du das nicht mehr zu tun. Die Prozedur, die du hier gepostest hast, besitzt einen Parameter. Diesen müsstest du angeben, wenn du die Prozedur startest. Das dürfte nicht erwünscht sein, wenn du globale Variablen verwendest.

Zeig mal deinen ganze Quelltext, mir ist gerade nicht ganz klar, wo das Problem liegt.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 480

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 17.09.08 20:18 
Das Problem ist, dass due Auf AutoImage zugreifst, was höchstwahrscheinlich ein Image auf der Form ist. Du solltest also die Prozedur, die du da hast zu einer Methode der Form machen. Dafür fügst du die Zeile
ausblenden Delphi-Quelltext
1:
procedure Ampelaenderung (Autoimageint: Integer);					

da ein, wo oben in der Unit auch die ganzen anderen Prozeduren untereinander stehen (Button1Click usw.) und änderst dann die Prozedur selbst zu
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Ampelaenderung (Autoimageint: Integer) 
// wenn deine Form-Klasse anders heißt, dann entsprechend anders. ;-)
begin 
 Autoimageint:=random(10); 
 AutoImage.left:=AutoImage.left+2
end;

Dann sollte es funktionieren.

Edit: Aber das Dingen macht so keinen Sinn. Der Parameter wird ignoriert bzw. neu berechnet, und dann überhaupt nicht verwendet.

_________________
We are, we were and will not be.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 17.09.08 20:23 
Deine Prozedur muss zum Formular gehören, dann kennt es auch Variablen / Eigenschaften des Formulars ;-).
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:
24:
TForm1 = class(TForm)
...
private
  DeineVariable: Integer;
  procedure ZaehleHinzu(uWert: Integer);
public
  procedure Button1Click(Sender: TObject);
end;

...

procedure TForm1.ZaehleHinzu(uWert: Integer);
begin
  DeineVariable := DeineVariable + uWert;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  DeineVariable := 10;
  ZaehleHinzu(4); // DeineVariable ist dann 14
  ShowMessage(IntToStr(DeineVariable));
  ZaehleHinzu(10); // DeineVariable ist dann 24
  ShowMessage(IntToStr(DeineVariable));
end;

Alternative: Vor jeden Zugriff auf die Variable Form1. davorschreiben.


Zuletzt bearbeitet von jaenicke am Mi 17.09.08 20:23, insgesamt 2-mal bearbeitet
muzy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: Mi 17.09.08 20:23 
Vielen Dank für die Hilfe, ich glaub ich weiß wo mein Fehler liegt.

Und die Prozedur macht qauf dem ersten Blick keinen bzw kaum Sinn, jedoch sollen wir nach 6 Wochen Delphi in Informatik eine Verkehrssimulation erstellen mit Ampelschaltung und Fußgänger.

Ich wette es geht bei mir auch einfacher, aber das klappt schon irgendwie.

Muzy


PS: Besten Dank, jetzt hab ich rund 1 Duzend Buttons weniger =)