View Full Version : تایمر در توربو پاسکال 7 برای داس
nightHunter
چهارشنبه 15 تیر 1390, 11:42 صبح
با سلام
به چه شکل میتوان در نرم افزار تحت داس که با توربو پاسکال نوشته میشه از تایمر استفاده کرد ؟
متشکرم .
Mask
چهارشنبه 15 تیر 1390, 14:06 عصر
تایمر رو باید خودت بسازی
با حلقه و اسلیپ
یوسف زالی
چهارشنبه 15 تیر 1390, 15:35 عصر
با اجازه آقای Gold:
در پاسکال بک حلقه باید بسازی برای سرتاسر برنامه.
در جایی از برنامه هم باید تست کنی ببینی که از لحظه ریستارت تایمر که یک شمارنده ساده هست چند ثانیه گذشته.
اگر از تایم مورد نظر بیشتر شد تایمر ریست می شه و یک پروسیجر کال میشه...
راه دیگه استفاده از برنامه های مقیم در حافظه هست.
nightHunter
چهارشنبه 15 تیر 1390, 21:17 عصر
با سلام
از پاسختون متشکرم .
آیا راهی هست که بتونم برنامه Console Application نوشته شده در دلفی رو توی داس اجرا کنم ؟
متشکرم .
یوسف زالی
چهارشنبه 15 تیر 1390, 21:46 عصر
سلام.
به دلایل بیشمار نه.
اگر سعی کنید این کارو کنید پیغام میگیرید:
This program must be run under Win32
اون Command Prompt خود ویندوز هم در اصل برای اینه که برنامه های نوشته شده رو در داس پشتیبانی کنه.
16 بیت تو 32 بیت جا میشه اما 32 بیت در 16 بیت نه. به همین دلیله که اجرای برنامه ها در محیط های باز تر ساده تره و معمولا هم پشتیبانی می شه.
داس به دلیل اینکه رجیسترهاش 16 بیتی هستند از اساس با ویندوز 32 بیتی و جدیدا 64 بیتی متفاوته.
به این معنا که OpCode های تولید شده خیلی کوتاهترند. آدرس دهی حداکثر تا 64KB هست. یعنی حداکثر حافظه ای که در اختیار دارید همین قدره.
از طرفی اساس کار برنامه های تحت داس وقفه یا Interrupt هست اما اساس کار ویندوز API ها هستند که عموما در فایلهایی با فرمت DLL ذخیره میشن.
فایل های اجرایی ویندوز از فرمت استاندارد PE پیروی می کنند که داستان مفصلی داره.
http://www.wotsit.org
برای اینکه بتونید فایل کامپایل شده با دلفی رو در داس خالص اجرا کنید باید تبدیل فرمت انجام بدبد که کار حضرت فیله!
امیدوارم توضیحاتم کامل بوده باشه.
Felony
پنج شنبه 16 تیر 1390, 06:12 صبح
میتونید با تابع SetTimer یک تایمر بسازید ؛ براتون یک نمونه نوشتم :
program Project1;
{$APPTYPE CONSOLE}
uses
Windows, SysUtils, Messages;
var
EventCounter: Integer;
ID: Uint;
procedure MyTimer(hWnd: hWnd; uMsg: Integer; idEvent: Integer;
dwTime: Integer); stdcall;
begin
Inc(EventCounter);
WriteLn('Timer event ' + IntToStr(EventCounter) + ' on ' + TimeToStr(Now));
end;
procedure ProcessMessages;
var
Msg: TMsg;
begin
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do
begin
if Msg.Message <> WM_QUIT then
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end
else
Exit;
end;
end;
begin
ID := SetTimer(0, 1, 1000, @MyTimer);
repeat
Sleep(100);
ProcessMessages;
until EventCounter = 10;
KillTimer(0, ID);
end.
یوسف زالی
پنج شنبه 16 تیر 1390, 11:09 صبح
جناب تاجیک فکر کنم منظور ایشون این بود که از تایمر در داس استفاده بشه.
برای همین هم تو پاسکال بودند.
با کد شما همچنان در ویندوز خواهیم ماند!
Felony
پنج شنبه 16 تیر 1390, 11:26 صبح
جناب تاجیک فکر کنم منظور ایشون این بود که از تایمر در داس استفاده بشه.
برای همین هم تو پاسکال بودند.
با کد شما همچنان در ویندوز خواهیم ماند!
نمیدونم ؛ اگر منظورشان چیزی که شما گفتید باشه ، بله کد بالا کاربردی براشون نداره .
nightHunter
پنج شنبه 16 تیر 1390, 12:57 عصر
با سلام
بله بنده توی داس مد نظرم بود . توی ویندوز با Delphi Console Application به راحتی میتوان از TTimer استفاده کرد .
متشکرم .
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.