![]() |
Hint-Window
Weiß jemand ob sich in Delphi7/2005 irgendwas in der Klasse HintWindow geändert hat? In Delphi5 ist es so, das wenn ich ein Hint selbst einblenden will ich dieses mit "ActivateHint" einblenden muss.
In den neueren Delphi - Versionen (7 und 2005) blitzt das Hint kurz auf und dann verliert das Formular den Focus und nach ca. 5-10 sekunden bekommt das Form den Focus wieder. Wenn ich jetzt die Zeile mit dem "ActivateHint" auskommentiere wird in (Delphi 2005) das Hint Ordnungsgemäß angezeigt - nagut die Höhe des Hints stimmt nicht :gruebel:. Hat jemand ne Ahnung was das sein könnte? |
Re: Hint-Window
Ich habe Delphi 7 und folgenden Testcode:
Delphi-Quellcode:
Wenn ich auf den Button klicke wird das Hintfenster angezeigt und die Anwendung behält auch den Fokus. Weiter passiert nichts. Oder habe ich was falsch verstanden? Nutze WinXP.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private-Deklarationen } HintWnd: THintWindow; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var MPos: TPoint; begin GetCursorPos(MPos); HintWnd.ActivateHint(Rect(MPos.X, MPos.Y, MPos.X + 100, Mpos.Y + 15), 'Hallo Welt!'); end; procedure TForm1.FormCreate(Sender: TObject); begin HintWnd := THintWindow.Create(Self); end; procedure TForm1.FormDestroy(Sender: TObject); begin HintWnd.Free; end; MfG Pr0g |
Re: Hint-Window
Also so wie du den Hint erzeugst dann gehört er dem FCL - Formular. Wenn jetzt der Hint über den Rand des Fensters geht wird der dort abgeschnitten.
Ich habe foldenden Code:
Delphi-Quellcode:
Das Hintwindow soll aus innerhalb einer Componente angezeigt werden.
HintParentForm := GetParentForm(Self);
GetCursorPos(FormPos); if fHintWindow = nil then begin if HintParentForm <> nil then fHintWindow := THintWindow.Create(HintParentForm) else fHintWindow := THintWindow.CreateParented(Self.ParentWindow); end; fHintWindow.ParentWindow := GetDesktopWindow; iItemLength := Canvas.TextWidth(fItems.Strings[fMouseMovedItem]) + 10; iItemHeight := Canvas.TextHeight('100') + 2; HintRect := Rect(FormPos.x,FormPos.y,FormPos.x+iItemLength, FormPos.y+iItemHeight); fHintWindow.ActivateHint(HintRect,fItems.Strings[fMouseMovedItem]); In Delphi5 hat dieser Code exakt das gewünschte Hint - Window zum vorschein gebracht. Wenn ich jetzt exakt diesen Code von Delphi 7 oder 2005 ausführen lasse, blitzt das Hint kurz auf und der Form bekommt den Focus entzogen und nach etwa 5 - 10 Sekunden automatisch wieder zugewiesen. Lasse ich das "ActivateHint" weg und setze die "Width" und "Height" Eigenschaften dann wird der Hint wieder dauernd angezeigt. :gruebel: Tja drum hab ich halt gedacht ob da was anders geworden ist, das das "ActivateHint" nicht mehr notwendig ist. |
Re: Hint-Window
Hab den Fehler gefunden :-D : ich darf den Desktop nicht als Parentwindow angeben :gruebel: .
Zeile darf ich nicht verwenden:
Delphi-Quellcode:
fHintWindow.ParentWindow := GetDesktopWindow;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:43 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-2025 by Thomas Breitkreuz