Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];

Вниз

Создание таймера   Найти похожие ветки 

 
ZilonAtakuit   (2006-01-20 07:22) [0]

Доброго времени суток
Помогите разобраться
Создаю таймер:

    TG=class
    private
         procedure TimerProc(wnd: HWND; Msg: UINT; idEvent: UINT; Time: DWORD); stdcall;
.....
procedure TG.TimerProc(wnd: HWND; Msg: UINT; idEvent: UINT; Time: DWORD); stdcall;
begin
             Beep;
end;

procedure Tg.Load;
begin
 SetTimer(0, 0, 1000, @TG.TimerProc);
Все запускается, но таймер не работает

procedure TimerProc(wnd: HWND; Msg: UINT; idEvent: UINT; Time: DWORD); stdcall;
begin
             Beep;
end;

procedure Tg.Load;
begin
 SetTimer(0, 0, 1000, @TimerProc);
А так все работает


 
Digitman ©   (2006-01-20 08:11) [1]

procedure TG.TimerProc - это процедурный метод дельфийского класса
procedure TimerProc - это регулярная процедура

SetTimer требует указания именно регулярной процедуры, о дельфийских же классах и их методах WinAPI-функции знать ничего не знают


 
TUser ©   (2006-01-20 09:11) [2]


> Digitman ©   (20.01.06 08:11) [1]

У меня первый пример прекрасно работает. Разве что в TimerProc будет Self=nil, но тут это не страшно.

Может у автора спикер сломался?)


 
TUser ©   (2006-01-20 09:12) [3]

На всякий случай
type
  TG=class
   private
        procedure TimerProc(wnd: HWND; Msg: UINT; idEvent: UINT; Time: DWORD); stdcall;
        procedure Load;
   end;

procedure TG.TimerProc(wnd: HWND; Msg: UINT; idEvent: UINT; Time: DWORD); stdcall;
begin
  Form1.Color:=clRed;
  Free;
end;

procedure Tg.Load;
var P: pointer;
begin
 SetTimer(0, 0, 1000, @TG.TimerProc);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 with TG.Create do
   Load;
end;


 
Leonid Troyanovsky ©   (2006-01-20 09:20) [4]


> ZilonAtakuit   (20.01.06 07:22)

> Создаю таймер:


http://groups.google.com/group/fido7.ru.delphi/msg/c038319929e8e63a

--
Regards, LVT.


 
begin...end ©   (2006-01-20 09:23) [5]

> TUser ©   (20.01.06 09:11) [2]

> У меня первый пример прекрасно работает. Разве что в TimerProc
> будет Self=nil, но тут это не страшно.

Не совсем так. Self не обязательно будет nil -- он будет равен тому, что должно быть на месте wnd. На месте wnd будет то, что должно быть на месте idEvent, и т.д.

Плюс к этому, стек балансируется "с избытком" -- ОС перед вызовом TimerProc помещает туда 4 параметра, а код метода сгенерирован так, чтобы в конце удалять из стека (stdcall) 5 параметров (т.к. есть ещё и неявный параметр Self). Это чревато.

Если убрать один параметр, то будет работать нормально (но параметры останутся "сдвинуты").

Но лучше сделать что-то вроде MakeObjectInstance...


 
Digitman ©   (2006-01-20 13:12) [6]


> TUser ©   (20.01.06 09:11) [2]


> У меня первый пример прекрасно работает


Но ведет к катастрофе процесса.
См. [5]



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

Форум: "Основная";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.08 c
15-1138259977
Sulimxar
2006-01-26 10:19
2006.02.19
Портирование на Mac


8-1126147717
dm37
2005-09-08 06:48
2006.02.19
Вывод формы на второй экран монитора?


2-1138833851
BREVIS
2006-02-02 01:44
2006.02.19
Как разбить (TColor) цвет на RGB составляющие?


15-1138270203
Тульский
2006-01-26 13:10
2006.02.19
новый сервис Delphimaster?


1-1137482024
RDA
2006-01-17 10:13
2006.02.19
Вставка апострофа во всех контролах





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский