![]() |
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 |
Re: Element auf der sich Mauscursor befindet ausführen
Möchtest du, wenn sich die Maus über ein Control bewegt, einen Klick ausführen?
|
Re: Element auf der sich Mauscursor befindet ausführen
Schau Dir mal ControlAtPos an.
|
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 |
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:
variabel sein soll.
ImageEx1Click(ImageEx1);]
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; |
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; |
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 |
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 ;)
|
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 |
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 10:46 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 by Thomas Breitkreuz