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

Вниз

Какая то беда с Windows.SetTimer   Найти похожие ветки 

 
Style ©   (2004-05-14 15:34) [0]

procedure TimeProc;
begin
 //todo
 ShowMessage("Ops")
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 SetTimer(0,0,1000,@TimeProc);
end;

Delphi 5, WinNT 4 SP6
После каждого выхода из TimerProc у меня Acces Vialation :(

В 98 Exeшник работает нормально?

Дома в Delphi7 под XP тоже все работает.

Что делать??


 
MBo ©   (2004-05-14 15:37) [1]

stdcall


 
Style ©   (2004-05-14 15:41) [2]


> procedure TimeProc; stdcall;
> begin
>  //todo
>  ShowMessage("Ops")
> end;


не помогает :(


 
MBo ©   (2004-05-14 15:58) [3]

В хелпе же описан прототип
procedure TimeProc(hwnd, uMsg, idEvent, dwTime:DWord);stdcall;


 
Style ©   (2004-05-14 16:07) [4]


> MBo ©   (14.05.04 15:58) [3]


Ой, спасибо. Что-то я уже совсем торможу Ж8-[]


 
Digitman ©   (2004-05-14 16:09) [5]


> MBo ©   (14.05.04 15:58) [3]


это называется "слышал звон, да не заню где он"

классика форума ...


 
Style ©   (2004-05-14 16:52) [6]

TTimerProc= procedure (hWindow: hwnd; Msg, idEvent, dwTime: integer) of object; stdcall;

 TClientLink = class(TComponent)
 private
   FTimerID: integer;
   FTimerEnabled: boolean;
   FTimerInterval: integer;

   procedure SetTimerInterval(const Value: integer);
   procedure DoTimer(hWindow: hwnd; Msg, idEvent, dwTime: integer); stdcall;
   { Private declarations }
 protected
   { Protected declarations }
 public

   constructor Create(AOwner: TComponent); override;
   { Public declarations }
 published
   property TimerInterval: integer read
      FTimerInterval write SetTimerInterval;
   { Published declarations }
 end;

procedure Register;

implementation

procedure Register;
begin
 RegisterComponents("NMK", [TClientLink]);
end;

{ TClientLink }

constructor TClientLink.Create(AOwner: TComponent);
var
 FProc: TTimerProc;
begin
 FProc := DoTimer;
 inherited Create(AOwner);
 FTimerEnabled := true;
 FTimerInterval := 1000;
 FTimerID := SetTimer(0,0, FTimerInterval, @FProc);
end;

procedure TClientLink.DoTimer(hWindow: hwnd; Msg, idEvent,
 dwTime: integer); stdcall;
begin
ShowMessage("Ops");
end;

procedure TClientLink.SetTimerInterval(const Value: integer);
begin
 FTimerInterval := Value;
 KillTimer(0,FTimerID);
end;


Тоже AV. :(
А как мне это сделать внутри класса? или только глобальную процедуру можно использовать?


 
MBo ©   (2004-05-14 17:08) [7]

нет, методом класса быть не может.

А что мешает VCL-ный TTimer подключить?


 
Style ©   (2004-05-14 18:24) [8]


> нет, методом класса быть не может.

Попробую догадаться, это потому что у метода в параметрах первые 4 байта - указатель на сам объект или класс?

Это я так подумал потому, что когда наоборот присваиваешь методу(событию) глобальную процедуру, то перед параметрами этой прцедуры достаточно добавить пустой Pointer;

@ClientWriteProc := @OnSocketWrite;
Server.OnClientWrite := ClientWriteProc;

procedure OnSocketWrite(Dummy:pointer; Sender: TObject; Socket: TCustomWinSocket);


> А что мешает VCL-ный TTimer подключить?


Просто хотелось как лучше, получилось как всегда :o)
Пожалуй проще TTimer добавить.


 
panov ©   (2004-05-14 19:33) [9]

Для класса я обычно делаю так:

TMyProc=procedure(<>params>);

TMyClass=class
 <params>
 FOnMyProc: TMyProc;

 procedure FOnMyEvent;
 
 property OnMyEvent: TMyProc read FOnMyProc write FOnMyProc;
//либо передается ссылка на процедуру в конструкторе.
end;

TMyClass.FOnMyEvent;
begin
 if Assigned(FOnMyProc) then FOnMyProc(<params>);
end;



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

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

Наверх





Память: 0.47 MB
Время: 0.031 c
6-1081766625
Floppy
2004-04-12 14:43
2004.05.30
Как можно произвести Refresh сетевого окружения в локальной сети?


6-1081330846
Ozone
2004-04-07 13:40
2004.05.30
TIdTCPClient


3-1084283349
ice-123
2004-05-11 17:49
2004.05.30
SQL запрос


7-1082347958
AGAMEMNUM
2004-04-19 08:12
2004.05.30
софт для сименсов


3-1084035092
Alleum
2004-05-08 20:51
2004.05.30
Программно добавить столбец





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