AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Rechte Maustaste auf Image blockieren
Thema durchsuchen
Ansicht
Themen-Optionen

Rechte Maustaste auf Image blockieren

Ein Thema von Stony2k · begonnen am 18. Jun 2005 · letzter Beitrag vom 27. Jun 2005
Antwort Antwort
Seite 2 von 3     12 3      
Olli
(Gast)

n/a Beiträge
 
#11

Re: Rechte Maustaste auf Image blockieren

  Alt 20. Jun 2005, 14:42
Zitat von Stony2k:
Man kann auch mit der rechten Maustaste auf den "Button" klicke, was ich aber für ziemlich unestetisch halte, da man bei den original Buttons auch nicht rechts drauf klicken kann.
... ich auch

Zitat von Stony2k:
*hochschieb*
Weiss keiner nen Rat?
Erklär dich mal! Rat wozu? Du hast doch direkt obendrüber gesagt:
Zitat von Stony2k:
jau danke nun funzt es wunderbar.
Hatte nämlich später das Problem, dass die Mouse UP Event nicht mehr ausgelöst wurde.
Aber so scheint es nun zu funzen, danke. Ansonsten melde ich mich.
Generell bearbeitet Windows - und im Endeffekt dein Programm - nur jene Nachrichten, für die auch eine (Callback-)Funktion zur Verfügung steht.
  Mit Zitat antworten Zitat
Benutzerbild von Stony2k
Stony2k

Registriert seit: 21. Mai 2005
Ort: Moers
76 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: Rechte Maustaste auf Image blockieren

  Alt 21. Jun 2005, 13:54
Hatte garnicht drauf geachtet, den Post nochmal zu Editieren

Zitat von Stony2k:
Die Rechte Maustaste ging zwar nicht aber die Mouse Up Event wurde ja dennoch ausgelöst, darum hat sie das Label dann auch immer verschoben. So sieht nun der neue Code aus und es funzt wunderbar, ich muss sagen ohne euch wäre ich nicht darauf gekommen
Folgendes: Ich habe nun die Anfrage ob man die linke Maustaste drückt eingefügt.
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.
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#13

Re: Rechte Maustaste auf Image blockieren

  Alt 21. Jun 2005, 14:15
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:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Image1MouseUp(Sender, Button, Shift, X, Y);
end;
Sauberer wäre es je Eine Funktion zu erstellen, die du dann im Event nach bedarf aufrufst.


Aber vielleicht solltest du zuerst mal deine Struktur Überdenken. Kommt mir doch etwas seltsam vor...

regards

Toni
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Benutzerbild von Stony2k
Stony2k

Registriert seit: 21. Mai 2005
Ort: Moers
76 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: Rechte Maustaste auf Image blockieren

  Alt 22. Jun 2005, 12:18
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:
    image1.Picture:=img_btn_gedrueckt.Picture;
    Label1.Top:=Label1.Top+2;
    Label1.Left:=Label1.Left-1;
Soweit so gut. Das Image ändert seine Grafik auf die eines gedrückten Buttons.
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:
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;
in
Code:
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;
wird die "procedure Tfrm_main.Image1MouseUp" ausgelöst und die Grafik geändert, in die des Buttons im Normaozustand.
Und meine frage war nun wieso die "procedure Tfrm_main.Image1MouseUp" nicht ausgelöst wird, sobald ich diese
Code:
if Button = mbLeft then
Abfrage drin habe.
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#15

Re: Rechte Maustaste auf Image blockieren

  Alt 22. Jun 2005, 12:39
Zitat von Stony2k:
Irgentwie scheintst du es echt nicht zu verstehen, gut hier nochmal die Code schnipsel:
Irgendwie schreibst du auch IMHO sehr mißverständlich.

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:
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;
Was soll ich sagen... Erwartungsgemäß arbeitet es sehr gut und regelmäßig. Dein Problem muss woanders liegen.

[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
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Benutzerbild von Stony2k
Stony2k

Registriert seit: 21. Mai 2005
Ort: Moers
76 Beiträge
 
Delphi 7 Enterprise
 
#16

Re: Rechte Maustaste auf Image blockieren

  Alt 22. Jun 2005, 19:28
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:
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;
Bei "(befehle[1].befehl)" handelt es sich um ein Record, in dem z.B. ein String gespeichert ist.
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;
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#17

Re: Rechte Maustaste auf Image blockieren

  Alt 23. Jun 2005, 07:30
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
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Benutzerbild von Stony2k
Stony2k

Registriert seit: 21. Mai 2005
Ort: Moers
76 Beiträge
 
Delphi 7 Enterprise
 
#18

Re: Rechte Maustaste auf Image blockieren

  Alt 23. Jun 2005, 13:56
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?
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#19

Re: Rechte Maustaste auf Image blockieren

  Alt 23. Jun 2005, 14:44
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.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#20

Re: Rechte Maustaste auf Image blockieren

  Alt 23. Jun 2005, 16:17
Hab mich eben noch mal reingedacht. Habs nun aber ein wenig eilig -> Feierabend

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
Angehängte Dateien
Dateityp: zip neuer_ordner_121.zip (209,5 KB, 7x aufgerufen)
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz