Главная страница
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.029 c
14-1122284720
Труп Васи Доброго
2005-07-25 13:45
2005.08.14
Цифрочитающее устройство


4-1119479507
dan
2005-06-23 02:31
2005.08.14
2 секунды


3-1118130150
_Вован
2005-06-07 11:42
2005.08.14
Как выгрузить данные из paradox-таблицы в файл формата Excel ?


9-1114345447
Yegorchic
2005-04-24 16:24
2005.08.14
Как определить виден ли объект на сцене через определённую камеру


6-1115278392
Valent
2005-05-05 11:33
2005.08.14
TidUDPClient, локальный порт