AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Form verliert Focus beim zeigen eines zweiten Hints
Thema durchsuchen
Ansicht
Themen-Optionen

Form verliert Focus beim zeigen eines zweiten Hints

Offene Frage von "Jessica"
Ein Thema von sega84 · begonnen am 17. Mär 2008 · letzter Beitrag vom 30. Apr 2008
Antwort Antwort
sega84

Registriert seit: 18. Sep 2006
73 Beiträge
 
Delphi XE2 Professional
 
#1

Form verliert Focus beim zeigen eines zweiten Hints

  Alt 17. Mär 2008, 09:06
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.
  Mit Zitat antworten Zitat
Benutzerbild von Der.Kaktus
Der.Kaktus

Registriert seit: 22. Jan 2008
Ort: Erfurt
958 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Form verliert Focus beim zeigen eines zweiten Hints

  Alt 17. Mär 2008, 10:49
Hallo,

ist im OI Parentshowhint=false? ..bei mir geht es nämlich.
Gruss Kaki

Repeat Until true=false;
  Mit Zitat antworten Zitat
sega84

Registriert seit: 18. Sep 2006
73 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Form verliert Focus beim zeigen eines zweiten Hints

  Alt 17. Mär 2008, 11:46
Zitat von Der.Kaktus:
Hallo,

ist im OI Parentshowhint=false? ..bei mir geht es nämlich.
Hallo,
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!
  Mit Zitat antworten Zitat
sega84

Registriert seit: 18. Sep 2006
73 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Form verliert Focus beim zeigen eines zweiten Hints

  Alt 18. Mär 2008, 08:32
Weiss denn niemand eine Antwort?
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Form verliert Focus beim zeigen eines zweiten Hints

  Alt 18. Mär 2008, 08:40
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
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
Jessica

Registriert seit: 1. Apr 2008
1 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Form verliert Focus beim zeigen eines zweiten Hints

  Alt 1. Apr 2008, 15:47
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?
  Mit Zitat antworten Zitat
iskywalker

Registriert seit: 12. Okt 2007
16 Beiträge
 
#7

Re: Form verliert Focus beim zeigen eines zweiten Hints

  Alt 30. Apr 2008, 15:12
http://groups.google.de/group/borlan...d5bbd819ad6b73

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.
  Mit Zitat antworten Zitat
Benutzerbild von tomsel
tomsel

Registriert seit: 8. Dez 2005
Ort: am Chiemsee
304 Beiträge
 
Delphi 7 Professional
 
#8

Re: Form verliert Focus beim zeigen eines zweiten Hints

  Alt 30. Apr 2008, 15:56
linksbündiger Code
Ein Experte ist ein Mann, der hinterher genau sagen kann, warum seine Prognose nicht gestimmt hat. (Winston Churchill)
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:24 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