AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Label-Position auswerten

Ein Thema von Hansa · begonnen am 1. Feb 2006 · letzter Beitrag vom 3. Feb 2006
Thema geschlossen
Seite 1 von 2  1 2   
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

Label-Position auswerten

  Alt 1. Feb 2006, 19:00
Hi,

es geht um Mauspositionen. Wie und wo kann man auswerten, ob sich der Mauszeiger über einem Label befindet ?
Gruß
Hansa
 
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Label-Position auswerten

  Alt 1. Feb 2006, 19:04
Forensuche: http://www.delphipraxis.net/internal...ght=cmmouse%2A
Michael
Ein Teil meines Codes würde euch verunsichern.
 
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Label-Position auswerten

  Alt 1. Feb 2006, 19:17
Moin Hansa,

schau Dir mal Delphi-Referenz durchsuchenControlAtPos an.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
 
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4

Re: Label-Position auswerten

  Alt 1. Feb 2006, 19:37
Das ControlAtPos hört sich gut an. Nur bringt so was :

Delphi-Quellcode:
procedure Tfrm.FormMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
  inherited;
  if ControlAtPos(Point (x,y),false) = TLabel (Self) then
showmessage ('asdsaf');
end;
keinerlei Reaktion. Das MouseMove wird allerdings schon angesprochen. Lasse ich die if Abfrage weg, so kommt die showmessage. Da liegt also der Hund begraben. Nur wo ?
Gruß
Hansa
 
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Label-Position auswerten

  Alt 1. Feb 2006, 20:39
Da schlummert nicht nur ein Hund.

Das Ereignis OnMouseMove() wird nur für die Form selbst ausgelöst, für auf der Form befindliche WinControls wird es an diese delegiert. Das bedeutet, das du das Ereignis dort abholen kannst - beim Label selbst. Außerdem willst du deine Form ganz sicher nicht nach TLabel casten - oder?

Grüße vom marabu
 
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#6

Re: Label-Position auswerten

  Alt 1. Feb 2006, 21:05
Zitat von marabu:
Außerdem willst du deine Form ganz sicher nicht nach TLabel casten - oder?
Doch. Befindet sich die Maus über einem Label, dann soll das anders aussehen, als wie normal. Bei der Sache geht es allerdings nur um max. 10 Labels.
Gruß
Hansa
 
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Label-Position auswerten

  Alt 1. Feb 2006, 21:56
Moin Hansa,

Zitat von Hansa:
Befindet sich die Maus über einem Label, dann soll das anders aussehen, als wie normal.
das kannst Du einfacher haben:

interface

Delphi-Quellcode:
type
  TMyLabel = class(TLabel)
  private
    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  end;

implemenation

procedure TMyLabel.CMMouseEnter(var Message: TMessage);
begin
  self.Font.Color := clRed;
end;

procedure TMyLabel.CMMouseLeave(var Message: TMessage);
begin
  self.Font.Color := clBlack;
end;

procedure TForm1.FormCreate(Sender: TObject);

var
  mlbl : TMyLabel;

begin
  mlbl := TMyLabel.Create(self);
  mlbl.Parent := self;
  mlbl.Caption := 'TESTLABEL';
  mlbl.Left := 10;
  mlbl.Top := 10;
end;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
 
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

Re: Label-Position auswerten

  Alt 2. Feb 2006, 12:47
Christian, das würde bedeuten, sämtliche Labels umzubauen. Ich muß die auch schon zur Designzeit rumschieben können. Was ist denn hierdran verkehrt :

Delphi-Quellcode:
procedure Tfrm.FormMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
  inherited;
  i := i + 1;
  if ControlAtPos(Point (x,y),true,true) = TLabel (Sender) then
    Memo1.Lines.Add (IntToStr (i)+' Label')
  else
    Memo1.Lines.Add (IntToStr (i)+' kein Label')
end;
Wandere ich auf der Form rum, dann wird der else Zweig durchlaufen. Bewege ich die Maus über einem Label, so passiert absolut nichts. Habe deshalb das i mit eingebaut. Es ist also kein Sehfehler. 8)
Gruß
Hansa
 
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Label-Position auswerten

  Alt 2. Feb 2006, 13:14
Hansa, du hast zwar inzwischen self durch Sender ersetzt, aber wahrscheinlich doch nicht verstanden was ich dir im Beitrag #5 beibiegen wollte. Ersetze noch "TLabel(Sender)" durch "Sender as TLabel", vielleicht wird dann deutlicher, das Sender = Self = frm ist.

Um Labels mit roter Schrift hervorzuheben kannst du einfach für alle TLabel Komponenten einen gemeinsamen Event Handler verwenden:

Delphi-Quellcode:
procedure TDemoForm.LabelMouseEnter(Sender: TObject);
begin
  with Sender as TLabel do
    Font.Color := clRed;
end;

procedure TDemoForm.LabelMouseLeave(Sender: TObject);
begin
  with Sender as TLabel do
    Font.Color := clBlack;
end;
Grüße vom marabu
 
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Label-Position auswerten

  Alt 2. Feb 2006, 13:15
[quote="Hansa"]Christian, das würde bedeuten, sämtliche Labels umzubauen. Ich muß die auch schon zur Designzeit rumschieben können. Was ist denn hierdran verkehrt :
Alles

Das OnMouseMove Event wird vom Formualar gefeuert. Wenn Du mit der Maus über das Label kommst wird das OnMouseMove Event vom
Label gefeuert.

Wenn Du den Type prüfen möchest solltest Du den is Operator verwenden
if ControlAtPos(Point (x,y),true,true) is TLabel then Der einfachste Weg ist der, den Christain vorgeschlagen hat. Du kannst Dir eine eigene Labelkomponente basteln und in der Komponentenpallette registrieren.
I come from outer space to save the human race
 
Thema geschlossen
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 13:12 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