![]() |
Form verliert Focus beim zeigen eines zweiten Hints
Hallo,
habe das folgende Problem bei einer TForm-Komponente: Wenn der User den Hint eines TSpeedButton anzeigen lässt, bleibt das aktive Fenster (auf dem auch der TSpeedButton ist) im Vordergrund. Sobald er nun mit der Maus auf einen zweiten TSpeedbutton geht und sich dessen Hint anzeigen lässt, verschiebt sich das Fenster in den Hintergrund. Die Titelleiste dieser Form bleibt allerdings blau hinterlegt, das Fenster ist somit noch als aktiv deklariert. Dieses Problem konnte ich bisher nur mit einem Timer umgehen, der alle x-Millisekunden den Befehl: FormMain.BringToFront ausführt. Dies hat den Nachteil, dass die Fenster beim zeigen von Hints anfangen zu Flackern, was natürlich auch schlecht ist. Gibt es eine globale Änderung, um diesen Bug zu umgehen? Vielen Dank für Ihre Mithilfe. |
Re: Form verliert Focus beim zeigen eines zweiten Hints
Hallo,
ist im OI Parentshowhint=false? ..bei mir geht es nämlich. |
Re: Form verliert Focus beim zeigen eines zweiten Hints
Zitat:
ja bei allen TSpeedButtons ist ParentShowHint = false und ShowHint = true. Zur Info: Ich öffne die TForm mit Form.Show! Eine Änderung auf ParentShowhint = true brachte zwar erfolg, zeigte aber anschließend nicht die Hints an! |
Re: Form verliert Focus beim zeigen eines zweiten Hints
Weiss denn niemand eine Antwort?
|
Re: Form verliert Focus beim zeigen eines zweiten Hints
Also bei mir funktioniert das auch normal, Form bleibt im Vordergrund. Bist du dir sicher, dass du das nicht mit anderen Funktionen oder so hervorrufst? Öffne doch zum testen mal ein neues Projekt, mache zwei Speedbuttons drauf und guck, ob es so geht.
Mfg |
Re: Form verliert Focus beim zeigen eines zweiten Hints
Ich hab genau das selbe Problem! Bin schon den ganzen Tag am suchen, was das Problem sein könnte, kann aber nichts finden...
Was ich noch hinzufügen kann: Bei mir hat das 2. Fenster mit den TSpeedButtons einen eigenen Taskbareintrag. War es in dem ersten Fall auch so? Gibt es villeicht schon eine Lösung außer den Timer? |
Re: Form verliert Focus beim zeigen eines zweiten Hints
![]() Hatte ich auch das problem, hier miniprojectcode: program Project1; uses Forms, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pas' {Form2}; {$R *.res} begin HintWindowClass :=Tmyhint; Application.Initialize; Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm2, Form2); Application.Run; end. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type Tmyhint = class(THintWindow) private FActivating:boolean; FLastActive:Cardinal; public procedure ActivateHint(Rect: TRect; const AHint: string); override; end; TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation uses Unit2; {$R *.dfm} procedure Tmyhint.ActivateHint(Rect: TRect; const AHint: string); type TAnimationStyle = (atSlideNeg, atSlidePos, atBlend); const AnimationStyle: array[TAnimationStyle] of Integer = (AW_VER_NEGATIVE, AW_VER_POSITIVE, AW_BLEND); var Animate: BOOL; Style: TAnimationStyle; begin FActivating := True; try Caption := AHint; Inc(Rect.Bottom, 4); UpdateBoundsRect(Rect); if Rect.Top + Height > Screen.DesktopHeight then Rect.Top := Screen.DesktopHeight - Height; if Rect.Left + Width > Screen.DesktopWidth then Rect.Left := Screen.DesktopWidth - Width; if Rect.Left < Screen.DesktopLeft then Rect.Left := Screen.DesktopLeft; if Rect.Bottom < Screen.DesktopTop then Rect.Bottom := Screen.DesktopTop; SetWindowPos(Handle, HWND_TOPMOST, Rect.Left, Rect.Top, Width, Height, SWP_NOACTIVATE); if (GetTickCount - FLastActive > 250) and (Length(AHint) < 100) and Assigned(AnimateWindowProc) then begin SystemParametersInfo(SPI_GETTOOLTIPANIMATION, 0, @Animate, 0); if Animate then begin SystemParametersInfo(SPI_GETTOOLTIPFADE, 0, @Animate, 0); if Animate then Style := atBlend else if Mouse.CursorPos.Y > Rect.Top then Style := atSlideNeg else Style := atSlidePos; AnimateWindowProc(Handle, 100, AnimationStyle[Style] or AW_SLIDE); end; end; ShowWindow(Handle, SW_SHOWNOACTIVATE); Invalidate; finally FLastActive := GetTickCount; FActivating := False; end; end; procedure TForm1.Button1Click(Sender: TObject); begin //application.createform(tform2,form2); form2.Show; end; end. unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm2 = class(TForm) Label1: TLabel; Button1: TButton; private procedure CreateParams(var Params : TCreateParams); override; { Private-Deklarationen } public { Public-Deklarationen } end; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.CreateParams(var Params: TCreateParams); begin inherited; Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW; Params.WndParent := GetDesktopWindow; end; end. |
Re: Form verliert Focus beim zeigen eines zweiten Hints
linksbündiger Code :evil:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:04 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