Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Imaqe nach Buttonprocedure weiterbewegen (https://www.delphipraxis.net/129707-imaqe-nach-buttonprocedure-weiterbewegen.html)

Leisegang 24. Feb 2009 10:03


Imaqe nach Buttonprocedure weiterbewegen
 
Guten Tag,
ich schreibe zur Zeit an einer Art Spiel, als Abschlussprojekt in der Schule und bin dabei auf folgendes Problem gestoßen:
Ich kann mein Image mit den Pfeiltasten bewegen, aber wenn ich dann auf einen Button klicke oder eine Showmessage aufrufe, kann ich danach mein Image nicht weiter bewegen.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  jpeg, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Image2: TImage;
    Button1: TButton;
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen}
  public
    { Public-Deklarationen}
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 case Key of
  VK_UP: begin if (image2.Canvas.pixels[image1.left-3,image1.top -3 ] in [clblack]) or (image2.Canvas.pixels[image1.left+53,image1.top -3 ] in [clblack])
               then
               Image1.top:=image1.top+1
               else
                   image1.top:=image1.top-1;
                   Key :=0;
               end;
  VK_DOWN: begin if (image2.Canvas.pixels[image1.left+53,image1.top +53 ] in [clblack]) or (image2.Canvas.pixels[image1.left-3,image1.top +53 ] in [clblack])
               then
               Image1.top:=image1.top-1
               else
                   image1.top:=image1.top+1;
                   Key :=0;
               end;
  VK_LEFT: begin if (image2.Canvas.pixels[image1.left-3,image1.top -3 ] in [clblack]) or (image2.Canvas.pixels[image1.left-3,image1.top +53 ] in [clblack])
               then
               Image1.left:=image1.left+1
               else
                   image1.left:=image1.left-1;
                   Key :=0;
               end;
    VK_RIGHT: begin if (image2.Canvas.pixels[image1.left+53,image1.top +53 ] in [clblack]) or (image2.Canvas.pixels[image1.left+55,image1.top -3 ] in [clblack])
               then
               Image1.left:=image1.left-1
               else
                   image1.left:=image1.left+1;
                   Key :=0;
               end;

  end;
 button1.visible:=true;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
button1.visible:=false;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage('Hallo');
button1.visible:=false;
end;

end.
Ich grübel seit 2 Tagen dran... aber eine Lösung kommt mir nicht auf...
Hoffe auf Hilfe

liebe Grüße
Leisegang

fkerber 24. Feb 2009 10:04

Re: Imaqe nach Buttonprocedure weiterbewegen
 
Hi!

Hat das Fenster danach noch den Fokus?
Hast du KeyPreview des Forms auf true stehen?


Ciao, Frederic

Leisegang 24. Feb 2009 10:07

Re: Imaqe nach Buttonprocedure weiterbewegen
 
Hallo,

ja Keypreview steht auf True.
Der Fokus bleibt beim Button...

himitsu 24. Feb 2009 10:10

Re: Imaqe nach Buttonprocedure weiterbewegen
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage('Hallo');
button1.visible:=false;
end;
der Fokus kann doch nicht beum Button bleiben :gruebel:

Satty67 24. Feb 2009 10:12

Re: Imaqe nach Buttonprocedure weiterbewegen
 
Der Focus kann nicht beim Button sein, wenn Du ihn angeklickt hast (Visible=False : Kein Focus)

Setze doch nach dem "button1.visible:=false;" ein Form1.SetFocus

DeddyH 24. Feb 2009 10:13

Re: Imaqe nach Buttonprocedure weiterbewegen
 
Dann aber besser Self.SetFocus oder nur SetFocus.

Leisegang 24. Feb 2009 10:18

Re: Imaqe nach Buttonprocedure weiterbewegen
 
habe es grade getestet und das form1.setfocus bringt auch nichts.
denn er geht geht garnicht mehr in die Funktion TForm1.FormKeyDown rein.
Er reagiert auf keine Eingabe mit einer Taste.

habe auch schon versucht in der Button1 Funktion die FromKeyDown wieder aufzurufen, aber da kommt dann nur eine Fehlermeldung "nicht genügend wirkliche Parameter FormKeyDown (39;[])"

himitsu 24. Feb 2009 10:20

Re: Imaqe nach Buttonprocedure weiterbewegen
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage('Hallo');
  Button1.Visible:=false;
  SetFocus; <<<<<<<<
end;

fkerber 24. Feb 2009 10:22

Re: Imaqe nach Buttonprocedure weiterbewegen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi!

Also bei mir geht das einwandfrei.
Im Anhang eine vereinfachte Version - ist das so, wie du es haben willst?


Ciao, Frederic

Leisegang 24. Feb 2009 10:24

Re: Imaqe nach Buttonprocedure weiterbewegen
 
das setfocus; klappt nicht...

und ja die vereinfachte Version stimmt mit dem überein was ich haben will.
Wie hast du das geschafft???

fkerber 24. Feb 2009 10:31

Re: Imaqe nach Buttonprocedure weiterbewegen
 
hi!

Da ist im Prinzip genau dein Code...

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage('Hallo');
button1.visible:=false;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
button1.Visible:=false;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
case Key of
  VK_UP: begin
                   image1.top:=image1.top-1;
                   Key :=0;
               end;
  VK_DOWN: begin
                   image1.top:=image1.top+1;
                   Key :=0;
               end;
  VK_LEFT: begin  image1.left:=image1.left-1;
                   Key :=0;
               end;
    VK_RIGHT: begin
                   image1.left:=image1.left+1;
                   Key :=0;
               end;

  end;
  button1.visible:=true;
end;
end.
Einziger Unterschied:
Ich habe statt nem Image ein Panel genommen, weil ich grad das Image nicht auf der Komponentenpalette gefunden habe :duck:
Und ich hab die Keydown-Sache etwas vereinfacht wegen der Abfragen...

Ciao, Frederic

Leisegang 24. Feb 2009 13:50

Re: Imaqe nach Buttonprocedure weiterbewegen
 
Jetzt bin ich entgültig verwirrt...
ich habe es eben auch ausprobiert mit einen Panel... und wieder bewegt es sich nicht weiter nach der Buttonprocedure...
:gruebel:
hab auch mal die Proceduren in die Reihenfolge gebracht wie du sie angeordnet hast... aber Pustekuchen...
...
Das Image bei der Komponentenpaltte ist unter Zusätzlich aufgelistet ;)

fkerber 24. Feb 2009 14:03

Re: Imaqe nach Buttonprocedure weiterbewegen
 
Hi!

Welche Delphi-Version verwendest du denn? Dann würde ich das ganze Projekt mal anhängen, falls dir das dann hilft.
Vllt. kannst du das gleiche auch mal machen, vllt. sieht man dann einen Unterschied.


Ciao, Frederic

Leisegang 24. Feb 2009 14:08

Re: Imaqe nach Buttonprocedure weiterbewegen
 
Ich verwende Delphi 4.
Ich würde ja lieber mit Delphi 7 oder so arbeiten, aber in der Schule zickt dann Delphi 4 rum ...

hab mein Projekt mal hier anbei gepackt
http://shanks.veritas-community.de/Projekt.rar

fkerber 24. Feb 2009 14:31

Re: Imaqe nach Buttonprocedure weiterbewegen
 
Hi!

Faszinierend :drunken:

Es scheint ein Problem mit deinem Delphi zu sein (bzw. vllt. mit D4 im Allgemeinen)

Also wenn ich deine exe öffne, geht es nicht. Lade ich in Delphi das Projekt und compiliere es, geht es (ich musste allerdings Unit3 aus den Uses und Form2 ganz entfernen, da da wohl irgendwelche Dateien fehlten)...

Fazit:
Mit D2007 geht es.
Ideen:
Leider keine, sorry.


Ciao, Frederic

Leisegang 24. Feb 2009 15:00

Re: Imaqe nach Buttonprocedure weiterbewegen
 
ups die hatte ich wohl noch drin von n paar anderen Tests...
aber daran kanns ja auch nicht liegen...

mhm... ok...
Dankeschön für deine Bemühungen.

Kann man nicht irgendwie den Focus wieder auf das Image leiten?!? Irgendwie?

himitsu 24. Feb 2009 15:44

Re: Imaqe nach Buttonprocedure weiterbewegen
 
ein TImage hat keinen Eingabefokus, da es ja nunmal kein Element zur Eingabe (Tastatur) ist.

Leisegang 24. Feb 2009 16:05

Re: Imaqe nach Buttonprocedure weiterbewegen
 
Gibts nicht eine andere Möglichkeit, dass es sich weiterbewegt?
Also irgendwie das Programm wieder darauf zu "fixieren" ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:34 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