Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Element auf der sich Mauscursor befindet ausführen (https://www.delphipraxis.net/107919-element-auf-der-sich-mauscursor-befindet-ausfuehren.html)

guevaradelaserna 4. Feb 2008 17:01


Element auf der sich Mauscursor befindet ausführen
 
Hallo!
Ich hatte heute mittag schonmal gepostet wegen einem ähnlichen Problem...

Ich möchte das bei allen möglichen Elementtypen (Button, Panel, Image, Imagelist, ...), die sich im OnClick ereignis befindliche Aktion mittels der Positionierung der Maus auf dem Element ausgeführt wird. Beim Button ging es mittels SetFocus bzw. ActiveControl. Jedoch kann ich diese bei Images nicht nutzen da sie von einer anderen Klasse erben. Da ich keine Ahnung von Delphi habe und auch nix im Forum gefunden habe, hoffe ich, dass ihr mir irgendwie weiterhelfen könnt.

Danke Che

toms 4. Feb 2008 18:16

Re: Element auf der sich Mauscursor befindet ausführen
 
Möchtest du, wenn sich die Maus über ein Control bewegt, einen Klick ausführen?

DeddyH 4. Feb 2008 18:19

Re: Element auf der sich Mauscursor befindet ausführen
 
Schau Dir mal ControlAtPos an.

guevaradelaserna 4. Feb 2008 18:46

Re: Element auf der sich Mauscursor befindet ausführen
 
Ja genau es soll nach einer gewissen Zeit ein Klick ausgeführt werden. Die Zeit habe ich mit einem Timer gelöst. Ich werde es aber erstmal mit dem Tipp von DeddyH probieren (danke mal wieder). Aber falls du noch eine andere Idee hast, bin ich offen dafür.

Ciao Alex

guevaradelaserna 5. Feb 2008 14:20

Re: Element auf der sich Mauscursor befindet ausführen
 
Hallo!
Mit dem Vorschlag ControlAtPos bin ich nicht weiter gekommen, da ein Image nicht zu TWinControl gehört! Habt ihr vll noch eine andere Idee, wie ich ein x-beliebiges Control mittels drüberfahren auslösen kann? Also wie im Code beschrieben, wird beim eintreten der Maus der Timer eingeschaltet und die gegenwärtige Zeit genommen. Der Timer überprüft jede Sekunde, ob der Schwellwert schon überschritten ist. Wenn dies der Fall ist soll er das jeweilige Click-Ereignis des Controls ausführen so dass dieser Teil
Delphi-Quellcode:
ImageEx1Click(ImageEx1);]
variabel sein soll.

Ciao Che
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
QueryPerformanceFrequency(a);
QueryPerformanceCounter(c);
if ((((c - b) * 1000 div a) >= 10000) and (b>0)) then
  begin
    ImageEx1Click(ImageEx1);
  end;
end;

procedure TForm1.ImageEx1MouseEnter(Sender: TObject);
begin
  timer1.Enabled:=true;
  QueryPerformanceCounter(b);
end;

procedure TForm1.ImageEx1Click(Sender: TObject);
begin
form1.Color:=clcream;
end;

procedure TForm1.ImageEx1MouseLeave(Sender: TObject);
begin
timer1.Enabled:=false;
end;

DeddyH 5. Feb 2008 14:29

Re: Element auf der sich Mauscursor befindet ausführen
 
Image muss ja auch kein TWinControl sein. Versuch mal dieses Beispiel:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var c: TControl;
begin
  c := self.ControlAtPos(self.ScreenToClient(Mouse.CursorPos),true);
  if Assigned(c) and (c is TImage) then
    begin
      Timer1.Enabled := false;
      ShowMessage('Image erwischt');
      Timer1.Enabled := true;
    end;
end;

guevaradelaserna 6. Feb 2008 11:12

Re: Element auf der sich Mauscursor befindet ausführen
 
Danke erstmal für den Code :-D . Nun steh ich aber vor dem Problem, dass ich dies mit images aus einer imagelist machen möchte. Jedoch kann ich hier nicht meine Variante mit mit dem OnEnter bzw. OnLeave als Erweiterung der Porperties von ImageList machen. Weisst du wie man den Images aus der ImageList diese Eigenschaft zuweisen kann.

Des Weiteren weiss ich noch nicht so recht wie ich an das jeweilige OnClick-Ereignis der Images rankomme.

Tut mir leid, dass ich so viele Fragen stelle, aber ich steig da nur sehr langsam durch.

Ciao Che

DeddyH 6. Feb 2008 12:08

Re: Element auf der sich Mauscursor befindet ausführen
 
Ich fürchte, Du hast hier etwas verwechselt. Ein TImage ist eine Komponente zur Anzeige von Grafiken und hat als TControl auch ein OnClick-Ereignis. Eine TImageList ist keine Sammlung von TImages, sondern von Grafiken, die über ihren Index angesprochen werden können. Somit haben die einzelnen Elemente auch kein OnClick-Ereignis, das Du auswerten könntest. Eine Möglichkeit wäre, die in der ImageList enthaltenen Grafiken (dynamisch?) in entsprechende Image-Komponenten zu laden, da würde mein Beispielcode dann wieder funktionieren. Bei weiteren Fragen einfach fragen ;)

guevaradelaserna 6. Feb 2008 13:53

Re: Element auf der sich Mauscursor befindet ausführen
 
Hey! Hast du da vll zumindest einen Ansatz zum umwandeln der Grafiken in TImages für mich? Ich habe weder in den Dokus noch im Netz was dazu gefunden!

Bye Che

DeddyH 6. Feb 2008 14:23

Re: Element auf der sich Mauscursor befindet ausführen
 
Hier mal ein Beispiel, wie man die Bitmaps aus einer ImageList der Reihe nach in ein TImage lädt:
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    ImageList1: TImageList;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    ImgIndex: integer;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var bmp: TBitmap;
begin
  if ImageList1.Count > 0 then
    begin
      if (ImgIndex < Pred(ImageList1.Count)) then
        inc(ImgIndex)
      else
        ImgIndex := 0;
      bmp := TBitmap.Create;
      try
        ImageList1.GetBitmap(ImgIndex,bmp);
        Image1.Picture.Bitmap.Assign(bmp);
      finally
        bmp.Free;
      end;
    end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ImgIndex := 0;
end;

end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:49 Uhr.
Seite 1 von 2  1 2      

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