Delphi-PRAXiS

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 Hint-Window (https://www.delphipraxis.net/35047-hint-window.html)

MatthiasW 1. Dez 2004 19:53


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?

Pr0g 1. Dez 2004 21:03

Re: Hint-Window
 
Ich habe Delphi 7 und folgenden Testcode:
Delphi-Quellcode:
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;
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.

MfG Pr0g

MatthiasW 1. Dez 2004 23:08

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:
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]);
Das Hintwindow soll aus innerhalb einer Componente angezeigt werden.

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.

MatthiasW 2. Dez 2004 08:46

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 20:01 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