Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.14;
Скачать: CL | DM;

Вниз

MMTimer and Focus   Найти похожие ветки 

 
Jon ©   (2005-01-05 16:41) [0]

I am using pMMTimer in my project. I have BitBtn"s on my form. I want timer to set focus of buttons. Focus only correct when I switch to another application then back to mine. Works fine with pTimer. I assume it is because pMMTimer runs in its own thread. Can anyone help? Using KOL 2.05 /Delphi 7 / Win XP.


 
thaddy   (2005-01-05 17:04) [1]

Call setfocus on the applet handle first, then on the control or form you want focused. Also call bringtofront on the applet handle.


 
Jon ©   (2005-01-06 15:54) [2]

Thanks for your reply Thaddy, but it was unsuccessful. I tried your suggestions many times. I think this may be a genuine bug in KOL.

I have written a short app to demonstrate the problem. Compile the code and use SPACE-BAR to advance the button. The buttons advance correctly, but the focus will always appear on the first button.

Now try switching to another application the back to this - magic! - the focus is on the correct button.

program TestFocus;

{$DEFINE MM_TIMER}

uses
Windows, Messages, Kol;

var
MainForm, BitBtn: PControl;
{$IFDEF MM_TIMER}
Timer: PMMTimer;
{$ELSE}
Timer: PTimer;
{$ENDIF}
i: Integer;

procedure TimerEvent(Dummy: Pointer; Sender: PTimer);
begin
Timer.Enabled := False; //Check - why needed if periodic is false??
if MainForm.ActiveControl.Tag = 3 then MainForm.Children[0].Focused := True
else MainForm.Children[MainForm.ActiveControl.Tag +1].Focused := True;
MainForm.ActiveControl.Color := clRed;
end;

procedure ButtonClick(Dummy: Pointer; Sender: PControl);
begin
Timer.Enabled := False;
MainForm.ActiveControl.Color := clBtnFace;
Timer.Interval := 500;
Timer.Enabled := True;
end;

begin
MainForm := NewForm(nil,"Test Focus").SetSize(280,60);
for i := 0 to 3 do
begin
 BitBtn := NewBitBtn(MainForm,Int2Str(i +1),[],glyphLeft,0,0).PlaceRight;
 BitBtn.Tag := i;
 BitBtn.OnClick := TOnEvent(MakeMethod(nil,@ButtonClick));
end;
MainForm.Children[0].Focused := True;
MainForm.ActiveControl.Color := clRed;
{$IFDEF MM_TIMER}
Timer := NewMMTimer(0);
Timer.Periodic := False;
{$ELSE}
Timer := NewTimer(0);
{$ENDIF}
Timer.OnTimer := TOnEvent(MakeMethod(nil,@TimerEvent));
Run(MainForm);
end.

PS I finally managed to get to your website using the www4mail.org service. Keep up the good work!


 
Jon ©   (2005-01-07 18:04) [3]

I have tried the test with Free Pascal Compiler and it shows the same error too. I am convinced that this is a KOL fault. Is there a way to inform the developers?



Страницы: 1 вся ветка

Текущий архив: 2005.08.14;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.028 c
14-1121230858
cvg
2005-07-13 09:00
2005.08.14
Где взять mysql.dcu?


4-1118690640
S.T.O.R.M.
2005-06-13 23:24
2005.08.14
Com-port


14-1122264112
KSergey
2005-07-25 08:01
2005.08.14
Поднять права пользователю кгурры administrators


6-1114477934
whiletruedo
2005-04-26 05:12
2005.08.14
вопрос по WebBrowser


11-1105023075
Boguslaw
2005-01-06 17:51
2005.08.14
How to pass string from TKOLThread to KOL form ?