Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Cursor auf Komponente legen (https://www.delphipraxis.net/180334-cursor-auf-komponente-legen.html)

Ajintaro 12. Mai 2014 20:15

Delphi-Version: XE5

Cursor auf Komponente legen
 
Hi DP !

Ich habe einen TWebBrowser auf meiner Form liegen und möchte den Cursor an der Ecke unten links vom Browser platzieren. D.h. unabhängig von der Desktop-Auflösung oder der Screen-Position der Anwendung wird der Cursor immer an der Ecke unten links vom Browser platziert.

Delphi-Quellcode:
procedure TFmain.Button1Click(Sender: TObject);
var
  pt: TPoint;
begin
  WB_ScrollTo(WebBrowser1, wbPosBottom); //Webbrowser: an das ende scrollen
  pt := WebBrowser1.ScreenToClient(Mouse.CursorPos);

  e_x.Text:=IntToStr(pt.X);
  e_y.Text:=IntToStr(pt.Y);
  SetCursorPos(pt.X,pt.Y); //mouseposition setzen
Ich dachte damit kann ich zumindest den Cursor auf den Webbrowser der Anwendung setzen, aber der Cursor verlässt das Fenster der Anwendung.
Gibt es eine Methode, den Cursor auf den Ursprung (0/0) einer Komponente zu platzieren ?

Volker Z. 12. Mai 2014 22:08

AW: Cursor auf Komponente legen
 
Hallo,

suchst Du vielleicht etwas in der Richtung?
Delphi-Quellcode:
type
  TCursorPos = (cpTopLeft, cpTopRight, cpBottomLeft, cpBottomRight, cpCentered);

procedure SetControlCursorPos (const Form : TForm; const Control : TControl; const CursorPos : TCursorPos);
var
  p : TPoint;
begin
  case CursorPos of
    cpTopLeft    : p := Form.ClientToScreen (Point (Control.Left, Control.Top));
    cpTopRight   : p := Form.ClientToScreen (Point (Control.Left + Control.Width, Control.Top));
    cpBottomLeft : p := Form.ClientToScreen (Point (Control.Left, Control.Top + Control.Height));
    cpBottomRight : p := Form.ClientToScreen (Point (Control.Left + Control.Width, Control.Top + Control.Height));
    cpCentered   : p := Form.ClientToScreen (Point (Control.Left + Control.Width div 2, Control.Top + Control.Height div 2));
  end;

  SetCursorPos (p.X, p.Y)
end;

procedure TFmain.Button1Click(Sender: TObject);
begin
  SetControlCursorPos (Self, WebBrowser1, cpBottomLeft)
end;
Gruß

DeddyH 13. Mai 2014 07:44

AW: Cursor auf Komponente legen
 
Etwas vereinfacht ohne Form-Parameter:
Delphi-Quellcode:
procedure SetControlCursorPos(const Control : TControl; const CursorPos : TCursorPos);
var
  P: TPoint;
begin
  Assert(Assigned(Control), 'Kein Control zur Ausrichtung übergeben');
  case CursorPos of
    cpTopLeft:
      P := Control.ClientToScreen(Point(0, 0));
    cpTopRight:
      P := Control.ClientToScreen(Point(Control.Width, 0));
    cpBottomLeft:
      P := Control.ClientToScreen(Point(0, Control.Height));
    cpBottomRight:
      P := Control.ClientToScreen(Point(Control.Width, Control.Height));
    cpCentered:
      P := Control.ClientToScreen(Point(Control.Width div 2, Control.Height div 2));
  end;
  SetCursorPos(P.X, P.Y);
end;

Ajintaro 13. Mai 2014 09:30

AW: Cursor auf Komponente legen
 
Guten Morgen DP !

Ja genau das ist was ich versucht habe zu bauen. Von
Delphi-Quellcode:
ClientToScreen(Point(0, 0)
ausgehend, hätte ich wirklich nur die "Ecken" mit
Delphi-Quellcode:
Control.Width
und
Delphi-Quellcode:
Control.Height
selbst errechnen können.

Super Sache, werde ich mir merken. Vielen Dank !


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