| Autor |
Beitrag |
ultraz06
      
Beiträge: 84
|
Verfasst: Do 29.01.09 21:06
hi^^
ich bin immernoch bei meinem moorhuhn klon, nun habe ich schon ein bild auf der form welches als ballon dargestellt,abgeschossen werden kann.
nun habe ich ein 2 bild hinzugefügt baer immer wenn dieses gezeichnet wird flimmert es so komisc,
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.Zeichnen; var n:integer; begin Puffer.Canvas.Draw(0, 0, Hg); for n:=0 to timer2.interval do case n of 0: if gruenSichtbar then begin Puffer.Canvas.Draw(xgruen, ygruen, gruen); PaintBox1.Canvas.Draw(0, 0, Puffer) end; 1: if blausichtbar then begin Puffer.Canvas.Draw(xblau, yblau, blau); PaintBox1.Canvas.Draw(0, 0, Puffer); end; |
nun ich denke es liegt daran das bei 0 und 1 immer PaintBox1.Canvas.Draw(0, 0, Puffer);
ausgeführt wird.
aber wie kann ich umgehen?
also es soll so aussehen das gruensichtbar und blausichtbar ja unabhängig voneinander sind, gibt es da einen weg das in ener if-then anwendung darzustllen, da sie aber unabhänging sind weiß ich nicht wie es geht
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 29.01.09 21:34
|
|
ultraz06 
      
Beiträge: 84
|
Verfasst: Do 29.01.09 21:39
ich habe es jetzt so gemacht
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.Zeichnen; begin Puffer.Canvas.Draw(0, 0, Hg); if gruenSichtbar and blausichtbar then begin Puffer.Canvas.Draw(xblau, yblau, blau); Puffer.Canvas.Draw(xgruen, ygruen, gruen); PaintBox1.Canvas.Draw(0, 0, Puffer) end else if blausichtbar then begin Puffer.Canvas.Draw(xblau, yblau, blau); PaintBox1.Canvas.Draw(0, 0, Puffer)end else if gruensichtbar then begin Puffer.Canvas.Draw(xgruen, ygruen, gruen); PaintBox1.Canvas.Draw(0, 0, Puffer) end else if gruensichtbar=false and blausichtbar=false then PaintBox1.Canvas.Draw(0, 0, Puffer) ;
end; |
aber das stimmt mit meiner
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:
| procedure TForm1.paintbox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin
if anz<=0 then if Button = mbRight then begin Image1.Visible := true; Image2.Visible :=true; Image3.Visible := true ; Image4.Visible := true; Image5.Visible:=true; anz:=5; end; if anz>0 then if (X >= xblau) and (X <= xblau + blau.Width) and (Y >= yblau) and (Y <= yblau + blau.Height) then blausichtbar := false else
if (X >= xgruen) and (X <= xgruen + gruen.Width) and (Y >= ygruen) and (Y <= ygruen + gruen.Height) then gruensichtbar := false else end; | nicht überein
immer wenn ich einen ballon anklicke verschwindet er zwar, aber wenn ich den 2 ballon anklicken will verschwindet er nicht sondern bleibt einfach nur stehen oO
|
|
Horschdware
      
Beiträge: 744
Erhaltene Danke: 54
Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
|
Verfasst: Fr 30.01.09 10:40
also...
zu deiner Zeichnen-Routine:
Die ist doppelt-und-dreifach gemoppelt.
Ohne Prüfung auf Funktion kann man die zunächst einmal folgendermaßen kürzen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.Zeichnen; begin Puffer.Canvas.Draw(0,0,Hg); if (gruenSichtbar) then Puffer.Canvas.Draw(xgruen,ygruen,gruen); if (blauSichtbar) then Puffer.Canvas.Draw(xblau,yblau,blau); PaintBox1.Canvas.Draw(0,0,Puffer); end; |
Du schreibst, die Zeichnen-Routine stimmt nicht mit der MouseDown-Routine überein.
Wie meinst du das? Was stimmt hier nicht überein?
Du schreibst, der zweite Ballon "bleibt stehen". Wenn ich das richtig verstehe, setzt du eine Variable "blausichtbar" / "gruensichtbar" auf false, um den ballon auszublenden.
Setze doch mal einen Breakpoint (siehe Delphi Hilfe) und schaue nach, welchen wert die entsprechende Variable hat. Wird die korrekt auf "false" gesetzt? Falls "nein", ist hier dein Ansatzpunkt.
Ich schätze aber eher, dass dein Problem darauf zurückzuführen ist, dass du nicht die ganze Grafik neuzeichnest.
Das kannst du prüfen, indem du zuerst auf den Ballon klickst, so dass dieser "stehen bleibt". Dann verschiebe das Fenster so an den Rand des Bildschirms, dass der Ballon nicht mehr zu sehen ist. Dann verschiebe das Fenster zurück. Ist der Ballon jetzt noch zu sehen? Falls "nein", so ist hier dein Ansatzpunkt.
edit:
Dein Code kann so übrigens gar nicht funktionieren.
| Zitat: | Delphi-Quelltext 1: 2: 3: 4:
| if (X >= xgruen) and (X <= xgruen + gruen.Width) and (Y >= ygruen) and (Y <= ygruen + gruen.Height) then gruensichtbar := false else end; | |
Das else ist zuviel / gehört hier nicht rein
_________________ Delphi: XE - OS: Windows 7 Professional x64
|
|
|