Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Prozeduren ohne Buttons, Timer etc.


muzy - Mi 17.09.08 19:18
Titel: Prozeduren ohne Buttons, Timer etc.
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 - 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 - Mi 17.09.08 19:27


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 - 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 [http://www.christian-stelzmann.de/artikel/crashkurs.htm#variablenundvariablentypen] aus dem Crashkurs [http://www.christian-stelzmann.de/artikel/crashkurs.htm] von user profile iconChristian S. an.


muzy - 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:


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 - 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 - 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

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

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.


jaenicke - Mi 17.09.08 20:23

Deine Prozedur muss zum Formular gehören, dann kennt es auch Variablen / Eigenschaften des Formulars ;-).

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.


muzy - 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 =)