Změna procedur – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Změna procedur – Delphi – Fórum – Programujte.comZměna procedur – Delphi – Fórum – Programujte.com

 

Ivos
~ Anonymní uživatel
8 příspěvků
29. 12. 2010   #1
-
0
-

Dobrý den jsem Začátečník s Delphi
Zdravím potřeboval bych poradit s programem. Pro tento problém jsem vytvořil testovací program obsahující jeden obrázek a jeden label.
Na formuláři je obrázek, labelem kontroluji výstup, mám použito jednoduché zapnuto x vypnuto. Potřebuji abych když zmáčknu tlačítko myši nad formulářem(tedy procedura formdown) a následně se zmáčklým tlačítkem myši pohybuji po obrazovce, aby se při "najetí" nad obrázek zaktivovala procedura picturemove....tedy z prodedury formmove na picturemove. Změnu z jedné procedury na druhou kontroluji výše zmíněným výstupem vypnuto x zapnuto. Zdrojový kod testovacího programu mám níže zkopírovaný.

V praxi toto potřebuji protože v mém programu mám možnost volby zbraně kulomet a tedy když začnu střílet mimo terč(form) chci aby když při stálé střelbě najedu nad (obrázek)terč , aby se aktivoval prodedura onpicturemove kde se mi pak následně ubírjaí životy.

Zkoušel jsem něco podobného udělat bez nutnosti zmáčnutí tlačítka a nebyl problém, procedury se při přejetí z form na picture měnily podle plánu, když je ale v podmínce, že přitom musí být zmáčknutá myš nenašel jsem ve svých znalostech nic abych tento problém vyřešil.

toto je zkopírovaný celý zdrojový kod testovacího programu...na formulář akorát dáte nějaký obrázek a label aby to fungovalo.. Moc děkuji za pomoc již nevím za kým bych se obrátil, než jsem našel toto forum.
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Image1: TImage;
Label1: TLabel;
Label2: TLabel;
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);

procedure FormCreate(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
naboje:integer;
snizeni:integer;
mousedown:boolean;
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if mousedown=true THEN begin

label2.caption:='vypnuto';
end;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if mousedown=true THEN begin

label2.caption:='zapnuto'
end;
end;




procedure TForm1.FormCreate(Sender: TObject);
begin
mousedown:=false;


naboje:=2000;
snizeni:=1;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin

mousedown:=true;
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
mousedown:=true;

end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
mousedown:=false;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
mousedown:=false;
end;

end.

Nahlásit jako SPAM
IP: 212.4.152.–
liborb
~ Redaktor
+18
Guru
30. 12. 2010   #2
-
0
-

Ty kliky a pohyby myší, co popisuješ, nejspíše vyvolají Drag & Drop operace, které se ti do toho pletou. Takže buď musíš D&D zakázat nebo ošetřovat i tyto eventy.

Nahlásit jako SPAM
IP: 78.80.52.–
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
30. 12. 2010   #3
-
0
-

To liborb :
joj..jsem začátečník v delphi..... nemohl by jsi zde prosím trochu více rozepsat jak to myslíš? děkuji mnohokrát :D
ještě jednou zde můj problém :
na formu je obrázek-vyplněné jsou procedury picturemove a formmove....při "přejezdu" z formu nad obrázek se procedura změní...to jsem si ozkoušel a ověřil právě výstupem labelu(vyp x zap)
- ovšem když je v podmínce že při tom musím být aktivní procedura picture/form down....tedy že zmáčkneme myš nefunguje to. (snažím se simulovat kulomet tj zmáčknu a furt se střílí....jedinný problém je zde ten že když se mi nezmění procedury z formmove na picturemove tak tím pádem když střílím do obrázku nic se neděje)

Prosím nápady trošičku rozvést abych to pochopil a zvládl....jedná se o maturitní program, který mám téměř hotový až na tento zákeřný problém.

popřípadě mail ivo.vanak@email.cz můžu přeposlat celý svůj maturitní program...ještě jednou moc díky za odpovědi a za pomoc všem

Nahlásit jako SPAM
IP: 212.4.152.–
liborb
~ Redaktor
+18
Guru
3. 1. 2011   #4
-
0
-

Tak problém není v D&D, ale v tom, že si hlavní okno/image (podle toho, do kterého se klikne) provede SetCapture, takže jsou zprávy od myši posílány do tohoto okna. Jednoduché řešení je tedy dát do OnMouseDown procedur ReleaseCapture:

begin

mousedown:=true;
ReleaseCapture();
end;

Nahlásit jako SPAM
IP: 78.80.52.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý