Форум: "WinAPI";
Текущий архив: 2002.08.26;
Скачать: [xml.tar.bz2];
ВнизИпользование потоков Найти похожие ветки
← →
Igit (2002-06-20 15:36) [0]Здравствуйте. Мне нужна помощь. У меня есть две программы. Мне надо объеденить их в одну. Они обе
такие (упрощённый вариант):
1... uses Windows;
var
mouse_pos: TPoint;
x:integer;
begin
repeat
getcursorpos(mouse_pos);
x:=mouse_pos.x;
if x=0 then setcursorpos(798, y);
sleep(115);
until false;
end.
2...
uses Windows;
var
mouse_pos: TPoint;
x:integer;
begin
repeat
getcursorpos(mouse_pos);
x:=mouse_pos.x;
if y=0 then setcursorpos(x ,800);
sleep(30000);
until false;
end.
Это конечно не сами программы, а для примера. Так вот, как мне их соеденить в одну не используя при этом модуль
Forms, а по-возмажности на чистом Win32 API.
Извините за такой глупый и длинный вопрос :))
← →
Kaban (2002-06-20 15:40) [1]... uses Windows;
var
mouse_pos: TPoint;
x:integer;
SleepTime:Integer;
begin
repeat
getcursorpos(mouse_pos);
x:=mouse_pos.x;
if x=0 then setcursorpos(798, y);
sleep(115);
SleepTime:=SleepTime+115
if SleepTime>=30000 then
begin
if y=0 then setcursorpos(x ,800);
SleepTime:=0;
end;
until false;
end.
Но вообщето проще использовать два таймера
← →
Igit (2002-06-20 15:46) [2]А как их использовать в этом случае?
← →
Kaban (2002-06-20 15:56) [3]Вот таймер, написанный на API. Потом ловите сообщение WM_TIMER
unit WinTimer;
interface
uses Windows, Classes;
type
TWinTimer=class
Parent:integer;
constructor Create(hParent:integer);
destructor Destroy; override;
private
TimerID:integer;
FInterval:integer;
FEnabled:boolean;
procedure SetEnabled(b:boolean);
procedure SetInterval(i:integer);
published
property Enabled:boolean read FEnabled write SetEnabled;
property Interval:integer read FInterval write SetInterval;
End;
var
iTimers : Integer;
implementation
constructor TWinTimer.Create(hParent:integer);
begin
FInterval:=1000;
Parent:=hParent;
FEnabled:=false;
Inc(iTimers);
TimerID:=iTimers
end;
procedure TWinTimer.SetEnabled(b:boolean);
begin
If FEnabled=b Then Exit;
FEnabled:=b;
If b Then
SetTimer(Parent,TimerID,FInterval,nil)
Else
KillTimer(Parent,TimerID)
end;
procedure TWinTimer.SetInterval(i:integer);
begin
If FInterval=i Then Exit;
FInterval:=i;
If NOT FEnabled Then Exit;
KillTimer(Parent,TimerID);
SetTimer(Parent,TimerID,i,nil)
end;
destructor TWinTimer.Destroy;
begin
KillTimer(Parent,TimerID)
end;
end.
← →
Igit (2002-06-20 17:04) [4](xedndez себя неловка...) Блин, а как?
← →
Igit (2002-06-20 17:07) [5]Punto Switcher подвёл xedndez=чувствую
← →
Kaban (2002-06-21 14:34) [6]Что а как? Как ловить сообщение? Вы на API пишите или где?
← →
Igit (2002-06-21 19:02) [7]Ну можно хотя бы пример использования этого модуля, я ведь только учусь, а не прошу чтоб все за меня делали?
← →
Cobalt (2002-06-22 10:36) [8]Для примера:
function TApplication.ProcessMessage(var Msg: TMsg): Boolean;
var
Handled: Boolean;
begin
Result := False;
if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then
begin
Result := True;
if Msg.Message <> WM_QUIT then
begin
{ Handled := False;
if Assigned(FOnMessage) then FOnMessage(Msg, Handled);
if not IsHintMsg(Msg) and not Handled and not IsMDIMsg(Msg) and
not IsKeyMsg(Msg) and not IsDlgMsg(Msg) then - это вам не понадобится}
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end
else
FTerminate := True;//типа, кто-то пытается закрыть вашу прогу
end;
end;
Как вы, быть может, знаете, суть работы Win-приложения - это реакция на оконные сообщения. У приложения есть очередь сообщений, и оно постоянно проверяет, есть ли сообщения, а если есть, то реагирует на них (вызывает "обработчики событий")
З.Ы. Смотрите в "Win32 Programmer"s Reference" (если вы, конечно, при установке Дельфей указывали, что надо ставить Хелп SDK), а еще лучше - купить MSDN на диске (у меня все никак руки не доходят, а то в хелпе некоторых "редких" ф-ий нет)
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.08.26;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c