Главная страница
    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.078 c
15-1138640973
Tarantiono
2006-01-30 20:09
2006.02.19
"Программирование серверных приложений для Windows 2000", Дж. Рих


15-1138622068
Pazitron_Brain
2006-01-30 14:54
2006.02.19
Доступ к FTP без домена


2-1138826027
serko
2006-02-01 23:33
2006.02.19
Form


2-1138653560
korban
2006-01-30 23:39
2006.02.19
Запуск программы только один раз


6-1131122906
WebSQLNeeder
2005-11-04 19:48
2006.02.19
Как запретить что бы в WebBrowser вылетали окошки JavaScript? Или





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский