![]() |
Re: Rechte Maustaste auf Image blockieren
Zitat:
Zitat:
Zitat:
|
Re: Rechte Maustaste auf Image blockieren
Hatte garnicht drauf geachtet, den Post nochmal zu Editieren
Zitat:
Und zwar bei der Mouse up und bei der Mouse down Event. Wenn ich die Rechte Maustaste drücke passiert nicht - so wie ich es wollte. Das problem ist, dass aber nun die Mouse up Event auch nicht mehr ausgelöst wird, was zur folge hat, dass der Buttons im gedrückten zustand bleibt, da die Mouse Up event, die Grafik des Buttons wieder in den Normalzustand wechselt. Und darum habe ich ja gefragt ob wer weiss, weiso die Mouse UP event nicht nicht mehr ausgelöst wird. Nur wenn ich dort die Abfrage zur linken Maustaste enferne, geht es wieder, sonst nicht. |
Re: Rechte Maustaste auf Image blockieren
Du verwirrst mich...
Wenn du rechts klicks passiert nichts, aber der Button wird trotzdem groß? Was denn nun? Irgendwie solltest du mal einen Schnipsel Code posten, damit man sich mal ein Bild davon machen kann. Ein Lösungsansatz wäre die MouseUp-Funktion manuell aufzurufen (mitt allen parametern, die du ja hast:
Delphi-Quellcode:
Sauberer wäre es je Eine Funktion zu erstellen, die du dann im Event nach bedarf aufrufst.
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin Image1MouseUp(Sender, Button, Shift, X, Y); end; Aber vielleicht solltest du zuerst mal deine Struktur Überdenken. :gruebel: Kommt mir doch etwas seltsam vor... regards Toni |
Re: Rechte Maustaste auf Image blockieren
Irgentwie scheintst du es echt nicht zu verstehen, gut hier nochmal die Code schnipsel:
Code:
procedure Tfrm_main.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin if Button = mbLeft then begin image1.Picture:=img_btn_gedrueckt.Picture; Label1.Top:=Label1.Top+2; Label1.Left:=Label1.Left-1; end; end;
Code:
procedure Tfrm_main.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin if Button = mbLeft then begin image1.Picture:=img_btn_normal.Picture; Label1.Top:=Label1.Top-2; Label1.Left:=Label1.Left+1; end; end; Und nun nochmal wo das Problem ist. Ich klicke mit der linken Maustaste auf das Image und es passiert wie im Code folgendes:
Code:
Soweit so gut. Das Image ändert seine Grafik auf die eines gedrückten Buttons.
image1.Picture:=img_btn_gedrueckt.Picture;
Label1.Top:=Label1.Top+2; Label1.Left:=Label1.Left-1; Sobald ich nun die Maustaste loslasse, sollte ja an für sich die "procedure Tfrm_main.Image1MouseUp" ausgelöst werden. Tut sie aber nicht. Heisst, dass die Grafik des gedrückten Buttons bestehen bleibt. Ändere ich nun
Code:
in
procedure Tfrm_main.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin if Button = mbLeft then begin image1.Picture:=img_btn_normal.Picture; Label1.Top:=Label1.Top-2; Label1.Left:=Label1.Left+1; end; end;
Code:
wird die "procedure Tfrm_main.Image1MouseUp" ausgelöst und die Grafik geändert, in die des Buttons im Normaozustand.
procedure Tfrm_main.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin image1.Picture:=img_btn_normal.Picture; Label1.Top:=Label1.Top-2; Label1.Left:=Label1.Left+1; end; Und meine frage war nun wieso die "procedure Tfrm_main.Image1MouseUp" nicht ausgelöst wird, sobald ich diese
Code:
Abfrage drin habe.
if Button = mbLeft then
|
Re: Rechte Maustaste auf Image blockieren
Zitat:
Egal... Ich hab jetzt mal ein Formular aufgemacht, Drei TImages drauf gezogen und davon in die beiden ersten ein Bild geladen für Button gedrückt und Butten nicht gedrückt. Dann noch ein Label auf das Dritte TImage gezogen und deinen Code in die OnMouseDown und OnMouseUp kopiert (Namen angepasst)
Delphi-Quellcode:
Was soll ich sagen... Erwartungsgemäß arbeitet es sehr gut und regelmäßig. Dein Problem muss woanders liegen.
procedure TForm1.Image3MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin if Button = mbLeft then begin image3.Picture:=Image1.Picture; Label1.Top:=Label1.Top+2; Label1.Left:=Label1.Left-1; end; end; procedure TForm1.Image3MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button = mbLeft then begin image3.Picture:=Image2.Picture; Label1.Top:=Label1.Top-2; Label1.Left:=Label1.Left+1; end; end; [Edit]Hast du mal geschaut ob du im Label1OnMouseDown und Label1OnMouseUp was hinterlegt hast? Wenn du nämlich auf die Schrift klickst, passiert garnichts - was für ein Button eher unüblich wäre. Du müsstest also diese Funktionen auch in diesen Events aufrufen. (diese Redundanz habe ich übrigens mit "Überdenke deine Struktur" gemeint. Dann kann sowas nicht passieren. - Nur ne Vermutung...[/Edit] regards Toni |
Re: Rechte Maustaste auf Image blockieren
Wenn man auf das Label drückt, wird die Mouse down Event ausgelöst, daran habe ich bereits gedacht.
Aber gut dass du es ansprichst. Ich habe echt das wichtigste vergessen zu posten: Die Mouse Down Event schaut so aus:
Code:
Bei "(befehle[1].befehl)" handelt es sich um ein Record, in dem z.B. ein String gespeichert ist.
procedure Tfrm_main.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin if Button = mbLeft then begin sendText(befehle[1].befehl); image1.Picture:=img_btn_gedrueckt.Picture; Label1.Top:=Label1.Top+2; Label1.Left:=Label1.Left-1; end; end; Der Fehler muss an dem Send Text liegen. Dieser Befehl sendet nämlich einen Text an ein Fenster namens Ultima Online, einem Online Rollenspiel. Wenn aber dieses Fenster geschlossen ist, kommt eine Fehlermeldung. Und genau dann wird die Mouse Up Event nicht ausgelöst. Ich konnte nur nicht herausfinden, was die Mouse Up Event blocked bei der "Send Text Funktion", da ich sie nicht geschrieben habe.
Code:
function SendText( Command: String ): HWND;
var Handle: HWND; i: Integer; begin Handle := FindWindow( 'Ultima Online', nil ); if ( Handle = 0 ) then Handle := FindWindow( 'Ultima Online Third Dawn', nil ); if Handle = 0 then begin Application.MessageBox( PChar( 'Der Ultima Online Client muss gestartet sein !'{'The Command ''' + Command + ''' couldn''t be sent, please start your UO Client.'} ), 'Fehler!', MB_OK+MB_ICONERROR ); Result := 0; exit; end; // Send an enter first SendMessage( Handle, WM_CHAR, 13, 0 ); // Send the command char { //cChar := Config.GetString( 'commandchar' ); cChar := '.'; for i := 0 to length( cChar ) do SendMessage( Handle, WM_CHAR, Ord( cChar[i] ), 0 ); } for i := 0 to length( Command ) do SendMessage( Handle, WM_CHAR, Ord( Command[i] ), 0 ); // Send an enter at the end SendMessage( Handle, WM_CHAR, 13, 0 ); Result := Handle; end; |
Re: Rechte Maustaste auf Image blockieren
Hm... Das ist nun echt schwierig zu testen, wenn man den UO Client nicht hat.
Du könntest mal versuchen den kompletten Quelltext aus der Funktion auszukommentieren. Dann sollte zumindest der Button richtig funzen. Wenn das so ist, weisst du, dass der Fehler ganz bestimmt in dieser Funktion steckt. Danach würde ich einen Haltepunkt am Anfang der Funktion setzen und mit F8 durchsteppen (Kommentar-Tags entfernen - logisch). Dann solltest du ja sehen was er macht und wo er aussteigt. regards Toni |
Re: Rechte Maustaste auf Image blockieren
Haette ich zwar nicht erwartet, aber es lag an der Messagebox.
Habe diese mal auskommentiert und siehe da, es ging wieder. Die messagebox scheint wohl irgentwie das wieder Hochgehen der Maustaste "abzufangen0", sodass es nicht mehr für die Mouse Up Event ausgelöst wird. Jedman eine Idee, wie ich dieses "Abfangen" verhindern kann? |
Re: Rechte Maustaste auf Image blockieren
Du bekommst doch das Handle von SendText zurückgeliefert. Wenn das Handle 0 ist, wird ja die MessageBox angezeigt. Füge also in diesem Fall nicht das Bild des gedrückten Buttons ein, sodass immer noch der "normale" Button zu sehen ist.
|
Re: Rechte Maustaste auf Image blockieren
Liste der Anhänge anzeigen (Anzahl: 1)
Hab mich eben noch mal reingedacht. Habs nun aber ein wenig eilig -> Feierabend :???: :wink:
Schau dir mal diesen Code an. Ausführliche Erklärung folgt morgen. Hat mit Focusverlust zu tun (der Event wird über dem Button nicht ausgelöst, weil es nicht mehr das aktuelle Element ist). MfG Toni |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:55 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