![]() |
TForm1.Canvas nicht in procedure zu verwenden?
Liste der Anhänge anzeigen (Anzahl: 1)
Hoi,
ich schreib gerade an einer Ampelschaltung für Delphi. Zuerst hab ich nur eine Ampel gemalt, die man a) Manuell oder b) Automatisch steuern lassen kann -> ich hatte keine Lust die Zeichenbefehle immer reinzukopieren -> zack das
Delphi-Quellcode:
(is jetzt nur die Ampel - Aus
Canvas.Rectangle(40,40,160,410);
Canvas.Ellipse(50,50,150,150); Canvas.Ellipse(50,175,150,275); Canvas.Ellipse(50,300,150,400); es gibt noch Rot,Gelb,Grün -> ab in eine Prozedur
Delphi-Quellcode:
--> Jetzt sagt er mir, dass ich Canvas an dieser Stelle net benutzen darf ????
procedure Ampelschalten(Zustand: Integer);{0=aus, 1=grün, 2=gelb, 3=rot}
begin If Zustand=0 then begin TForm3.Canvas.Brush.Color:=clBlack; TForm3.Canvas.Ellipse(50,50,150,150); TForm3.Canvas.Ellipse(50,175,150,275); TForm3.Canvas.Ellipse(50,300,150,400); end; If Zustand=1 then begin TForm3.Canvas.Brush.Color:=clBlack; TForm3.Canvas.Ellipse(50,50,150,150); TForm3.Canvas.Ellipse(50,175,150,275); TForm3.Canvas.Brush.Color:=clGreen; TForm3.Canvas.Ellipse(50,300,150,400); end; If Zustand=2 then begin TForm3.Canvas.Brush.Color:=clBlack; TForm3.Canvas.Ellipse(50,50,150,150); TForm3.Canvas.Ellipse(50,300,150,400); TForm3.Canvas.Brush.Color:=clYellow; TForm3.Canvas.Ellipse(50,175,150,275); end; If Zustand=3 then begin TForm3.Canvas.Brush.Color:=clBlack; TForm3.Canvas.Ellipse(50,175,150,275); TForm3.Canvas.Ellipse(50,300,150,400); TForm3.Canvas.Brush.Color:=clRed; TForm3.Canvas.Ellipse(50,50,150,150); end; Warum das nichT? Ich habe doch extra TFORM3 davor geschrieben, da ampelschaltung ja kein "Untermieter" von TForm ist. Das Projekt hängt im Anhang Vielen Dank im Vorraus mfg Pyromane |
Re: TForm1.Canvas nicht in procedure zu verwenden?
Versuch es mal nur mit "Form3" also das T vor der Bezeichnung weglassen. Sollte gehen!
|
Re: TForm1.Canvas nicht in procedure zu verwenden?
Du musst wenn schon Form3 schreiben, ohne T davor. Mit TForm3.canvas greifst du auf die Klasse zu, nicht auf die Instanz. Das kann natürlich nur einen Fehler geben, weil Canvas ja erst beim erzeugen der Instanz erzeugt wird.
|
Re: TForm1.Canvas nicht in procedure zu verwenden?
Wieso ist Ampelschalten keine Methode von TForm3? :gruebel:
Dann kannst du dir das ganze TForm3/Form3 (was für sinnvoller Name :gruebel:) sparen und hast auch einen Code der auch etwas besser objektorientiert aufgebaut ist. |
Re: TForm1.Canvas nicht in procedure zu verwenden?
O_o
Danke ;) Diesen Fehler mach ich doch immer wieder. Es ist zum verrückt werden. PS: Und nochetwas: wenn ich das Fenster minimiere, und wieder maximiere, ist der Schwarze Rahmen, der aus performance gründen nicht bei jedem Schritt neu gez. wird, verschwunden. Gibt es etwas ähnliches wie TForm3.Reactivate , indem man halt etwas machen kann, sobald das Fenster wieder nach oben geholt wird? |
Re: TForm1.Canvas nicht in procedure zu verwenden?
Verlege das Zeichnen doch in das OnPaint-Ereignis, dann kümmert sich das Formular selbst darum, wenn es neu gezeichnet werden muss.
|
Re: TForm1.Canvas nicht in procedure zu verwenden?
Oder (imho besser): Prozedur im private-Abschnitt der Form deklarieren. Außerdem solltest du in der Prozedur Case benutzen:
Delphi-Quellcode:
Mfg
type
TForm3 = class(TForm) //[..] private procedure Ampelschalten(Zustand: Integer); end; //[..] procedure TForm3.Ampelschalten(Zustand: Integer);{0=aus, 1=grün, 2=gelb, 3=rot} begin with Canvas do begin case Zustand of 0:begin Brush.Color:=clBlack; Ellipse(50,50,150,150); Ellipse(50,175,150,275); Ellipse(50,300,150,400); end; 1:begin Brush.Color:=clBlack; Ellipse(50,50,150,150); Ellipse(50,175,150,275); Brush.Color:=clGreen; Ellipse(50,300,150,400); end; 2:begin Brush.Color:=clBlack; Ellipse(50,50,150,150); Ellipse(50,300,150,400); Brush.Color:=clYellow; Ellipse(50,175,150,275); end; 3:begin Brush.Color:=clBlack; Ellipse(50,175,150,275); Ellipse(50,300,150,400); Brush.Color:=clRed; Ellipse(50,50,150,150); end; end; end; end; [Edit]hab mal wieder en bisschen länger gebraucht :mrgreen: [/Edit] |
Re: TForm1.Canvas nicht in procedure zu verwenden?
jop Robby das funzt besser.
Aber noch eine Frage: Wie kann ich die Ablauf Schleife in Echtzeit abbrechen - also nicht erst, wenn die nächste Break bzw. until Abfrage erreicht ist? |
Re: TForm1.Canvas nicht in procedure zu verwenden?
mit Timer
|
Re: TForm1.Canvas nicht in procedure zu verwenden?
Liste der Anhänge anzeigen (Anzahl: 1)
So;
ich habe das "Laufen" der Ampel jetzt in die procedur Ampellaufen gepackt; genauso, wie sie früher war.; Bei Klick auf Auto wird der Timer gestartet, es passiert aber nur Mist; bei Klick auf Abbrechen, läuft die Schaltung wie sie sein soll...; da sie aber in der Endlosschleife until 1=2 steckt, kommt man nur noch per; Taskmanager raus. ??? Mfg Pyromane |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz