AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

CM_HINTSHOW in Komponente

Ein Thema von Hobbycoder · begonnen am 13. Okt 2018 · letzter Beitrag vom 15. Okt 2018
 
Hobbycoder

Registriert seit: 22. Feb 2017
998 Beiträge
 
#1

CM_HINTSHOW in Komponente

  Alt 13. Okt 2018, 23:01
Ich möchte in einer meiner Komponenten einen speziellen Hint anzeigen lassen, je nach Position des Mauszeigers. In dieser Komponente verwende ich unter anderen Paintboxen in denen die Items dargestellt werden.

Mittels
Delphi-Quellcode:
procedure TKomponente.MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
  i: Integer;
  mousept: TPoint;
  newItemIndex: Integer;
  HintPos: TPoint;
begin
  mousept.X:=X;
  mousept.Y:=Y;
  newItemIndex:=-1;
  for i:=0 to self.FItemList.Count-1 do
    if PtInRect(self.FItemList[i].Rect, mousept) then
      newItemIndex:=i;
  if newItemIndex<>FMouseOverItem then
  begin
    FMouseOverItem:=newItemIndex;
    if FMouseOverItem>-1 then
    begin
      HintPos.X:=Self.FItemList[FMouseOverItem].BoundsLeft;
      HintPos.Y:=Self.FItemList[FMouseOverItem].Rect.Bottom+3;
      Hintpos:=self.FPaintBoxClient.ClientToScreen(HintPos);
      Application.CancelHint;
      Application.ActivateHint(HintPos);
    end;
  end;
end;
von der FPaintBoxClient ermittele ich das Item, über dem die Mouse befinde. Das Item wird gefunden und die Zeile Application.ActivateHint wird auch ausgeführt.

Dann will ich auf die Messages
Delphi-Quellcode:
procedure TKomponente.CMHintShow(var Message: TCMHintShow);
var
  HintStr: string;
begin
  inherited;
  if Message.HintInfo.HintControl=Self then
  begin
    if (FMouseOverItem>-1) and (FMouseOverItem<self.FItemList.Count) then
      HintStr:=Self.FItemList[FMouseOverItem].Hint else HintStr:='';
    Message.HintInfo.HintStr:=HintStr;
    Message.HintInfo.HideTimeout:=FHintDelay;
  end;
end;

procedure TKomponente.CMHintShowPause(var Message: TCMHintShowPause);
var
  PHintDelay: PInteger;
begin
  inherited;
  PHintDelay:=@FHintDelay;
  Message.Pause:=PHintDelay;
end;
reagieren, explizit natürlich auf die CM_HINTSHOW , damit ich den passenden HintStr setzen kann. Diese wird aber nie ausgeführt.

Deklaration sieht folgendermaßen aus:
Delphi-Quellcode:
    procedure CMHintShow(var Message: TCMHintShow); message CM_HINTSHOW;
    procedure CMHintShowPause(var Message: TCMHintShowPause);
      message CM_HINTSHOWPAUSE;
Es wird auch nie ein Hint angezeigt. Was könnte ich vergessen haben? Die Message CM_HINTSHOW müsste doch wenigstens ankommen.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
 


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