PDA

View Full Version : اجراي نرم افزار در ميحيط ويندوز و Dos



Saeid59_m
سه شنبه 23 آذر 1389, 15:28 عصر
سلام
من مي خوام يه برنامه بنويسم كه وقتي توي ويندوز اجرا مي شه ، محيط ويندوزي و وقتي توي Dos اجرا مي شه محيط Dos داشته باشه (به صورت TEXTMODE) .

vcldeveloper
سه شنبه 23 آذر 1389, 17:20 عصر
برنامه های دلفی در محیط DOS کار نمی کنند. چیزی که مد نظر شما ست، حالت Console هست، نه DOS.

یک برنامه وقتی اجرا میشه، میتونه برای خودش یک پنجره Console ایجاد کنه، یا به یک پنجره Console موجود پیوست بشه. برای کار شما، با توجه به اینکه میخواید در صورت فراخوانی برنامه از Console برنامه به صورت Console اجرا بشه، و در صورت فراخوانی عادی بصورت GUI، می تونید از کدی مثل کد زیر در فایل DPR پروژه تان استفاده کنید:


program Project1;

uses
Forms,
Windows,
SysUtils,
Unit1 in 'Unit1.pas' { Form1 };

{$R *.res}

const
ATTACH_PARENT_PROCESS = DWORD(-1);

function AttachConsole(dwProcessID: DWORD): BOOL; stdcall;
external kernel32 name 'AttachConsole';

function IsConsoleApp: Boolean;
begin
/// Try to attach to parent process console (when running inside a console window)
Result := AttachConsole(ATTACH_PARENT_PROCESS);
if not Result then
begin
/// Go to console mode if the first commandline parameter is /c.
if (ParamCount > 0) and SameText(ParamStr(1), '/c') then
Result := AllocConsole
else
Result := False;
end;
end;


begin
if IsConsoleApp then
begin
try
try
writeln('This is a test');
/// Add your console code here
Readln;
finally
FreeConsole;
end;
except
on E: Exception do
writeln(E.Message);
end;
end
/// Otherwise go to GUI mode.
else
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end;

end.

اگر این برنامه از طریق یک پنجره Console اجرا بشه، یا پروسه ایی که این برنامه رو اجرا میکنه یک پنجره Console داشته باشه، برنامه به صورت Console اجرا میشه. اگر اینطور نباشه، برنامه چک میکنه که آیا اولین پارامتر خط فرمان c/ هست، یا نه؛ اگر بود، خودش یک پنجره Console میسازه، و در حالت Console کار میکنه. اگر این شرط هم برقرار نبود، برنامه به صورت GUI اجرا میشه، و Form1 را نمایش میده.

Saeid59_m
پنج شنبه 25 آذر 1389, 15:38 عصر
من برنامه هايي ديدم كه هم در ويندوز و هم در Dos (مطلق) نه حالت Consol اجرا مي شن .
نمي شه با دلفي همچين كاري انجام داد ؟

vcldeveloper
پنج شنبه 25 آذر 1389, 22:26 عصر
نمي شه با دلفي همچين كاري انجام داد ؟
نه؛ DOS یک سیستم عامل منسوخ شده 16-بیتی هست. کامپایلر دلفی کد 16-بیتی DOS تولید نمیکنه، بلکه کد 32-بیتی برای Win32 تولید میکنه.
می تونید کد Turbo Pascal بنویسید و کامپایل کنید. دلفی 1 هم قابلیت تولید کد 16-بیتی داره، ولی مطمئن نیستم قابلیت تولید کد قابل اجرا در DOS رو هم داره یا نه. علاوه بر اینها، FreePascal هم امکان کامپایل کد برای DOS داره.