![]() |
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:
Ich grübel seit 2 Tagen dran... aber eine Lösung kommt mir nicht auf...
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. Hoffe auf Hilfe liebe Grüße Leisegang |
Re: Imaqe nach Buttonprocedure weiterbewegen
Hi!
Hat das Fenster danach noch den Fokus? Hast du KeyPreview des Forms auf true stehen? Ciao, Frederic |
Re: Imaqe nach Buttonprocedure weiterbewegen
Hallo,
ja Keypreview steht auf True. Der Fokus bleibt beim Button... |
Re: Imaqe nach Buttonprocedure weiterbewegen
Delphi-Quellcode:
der Fokus kann doch nicht beum Button bleiben :gruebel:
procedure TForm1.Button1Click(Sender: TObject);
begin showmessage('Hallo'); button1.visible:=false; end; |
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 |
Re: Imaqe nach Buttonprocedure weiterbewegen
Dann aber besser Self.SetFocus oder nur SetFocus.
|
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;[])" |
Re: Imaqe nach Buttonprocedure weiterbewegen
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin ShowMessage('Hallo'); Button1.Visible:=false; SetFocus; <<<<<<<< end; |
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 |
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??? |
Re: Imaqe nach Buttonprocedure weiterbewegen
hi!
Da ist im Prinzip genau dein Code...
Delphi-Quellcode:
Einziger Unterschied:
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. 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 |
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 ;) |
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 |
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 ![]() |
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 |
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? |
Re: Imaqe nach Buttonprocedure weiterbewegen
ein TImage hat keinen Eingabefokus, da es ja nunmal kein Element zur Eingabe (Tastatur) ist.
|
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