Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Image dem Mousezeiger folgen (https://www.delphipraxis.net/97205-image-dem-mousezeiger-folgen.html)

Christian18 6. Aug 2007 21:02


Image dem Mousezeiger folgen
 
Hallo,

der Mittelpunkt von meinem Images, welches ich auf meiner Form habe soll immer dem Mousezeiger folgen. Wie kann ich das machen?

LG Chris

semo 6. Aug 2007 21:33

Re: Image dem Mousezeiger folgen
 
Im OnMouseMove-Event des Forms zeichnest du direkt auf den Canvas des Forms.
Position ausgehend von der aktuellen Mouse Position.

Christian18 6. Aug 2007 21:40

Re: Image dem Mousezeiger folgen
 
Hallo,

ja das bekomme ich irgendwie nicht hin

semo 6. Aug 2007 21:43

Re: Image dem Mousezeiger folgen
 
auftragsprogrammierer sind wir hier nicht :-)
zeig mal her was du bis jetzt hast und wir schauen mal in den code rein.

Christian18 6. Aug 2007 21:48

Re: Image dem Mousezeiger folgen
 
Hier mein Code:

Delphi-Quellcode:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Image1.Left:=Round(X - Image1.Width / 2);
  Image1.Top:=Round(Y - Image1.Height / 2);
end;

semo 6. Aug 2007 21:54

Re: Image dem Mousezeiger folgen
 
du musst natürlich bedenken, dass du wenn du dich mit dem mauszeiger über dem image befindest,
nicht das mousemove event des forms auftritt sondern das mousemove event des images.

musst du unbedingt ein timage verwenden?
mal doch im onformpaint event das bild selber per form.canvas.draw()
oder spricht da was gegen?

Christian18 6. Aug 2007 22:17

Re: Image dem Mousezeiger folgen
 
Hallo,

ich brauche unbedingt ein Image.

bitsetter 6. Aug 2007 22:19

Re: Image dem Mousezeiger folgen
 
Hi,

die Komponente TApplicationEvents habe ich genommen und dort im Event onMessage folgenden Code eingefügt:
Delphi-Quellcode:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  if Msg.message= Messages.WM_MOUSEMOVE then
  begin
    Image1.Left:=Round(ScreenToClient(Mouse.CursorPos).X - Image1.Width / 2);//Image1.Picture.Graphic.Width
    Image1.Top:=Round(ScreenToClient(Mouse.CursorPos).Y - Image1.Height / 2);//Image1.Picture.Graphic.Height
  end;
end;
Dann ging es bei mir.

semo 6. Aug 2007 23:44

Re: Image dem Mousezeiger folgen
 
und wer es ganz ohne komponenten mag:

Delphi-Quellcode:
unit frmMain;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    procedure MessageEventHandler(var Msg: TMsg; var Handled: Boolean);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnMessage := MessageEventHandler;
end;

procedure TForm1.MessageEventHandler(var Msg: TMsg; var Handled: Boolean);
begin
  case Msg.message of
    WM_MOUSEMOVE:
      begin
        Invalidate();
      end;

    WM_PAINT:
      begin
        Image1.Left := Round(ScreenToClient(Mouse.CursorPos).X - Image1.Width / 2);
        Image1.Top := Round(ScreenToClient(Mouse.CursorPos).Y - Image1.Height / 2);
      end;
  end;
end;

bitsetter 7. Aug 2007 01:12

Re: Image dem Mousezeiger folgen
 
Zitat:

Zitat von computer-glossar.de
und wer es ganz ohne komponenten mag:
Delphi-Quellcode:
...
    WM_PAINT:
      begin
        Image1.Left := Round(ScreenToClient(Mouse.CursorPos).X - Image1.Width / 2);
        Image1.Top := Round(ScreenToClient(Mouse.CursorPos).Y - Image1.Height / 2);
      end;
  end;
end;

Und warum änderst du jetzt die Position des Images im WM_PAINT Event, hat das einen Vorteil? IMHO wird der Code jetzt öfter als notwendig ausgeführt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:14 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