Delphi-PRAXiS
Seite 1 von 2  1 2      

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 11: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 11: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 11:07

Re: Imaqe nach Buttonprocedure weiterbewegen
 
Hallo,

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

himitsu 24. Feb 2009 11: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 11: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 11:13

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

Leisegang 24. Feb 2009 11: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 11: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 11: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 11: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???


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz