PDA

View Full Version : نوشتن و اجرا برنامه بدون ایجاد فرم



spicirmkh
سه شنبه 08 اردیبهشت 1383, 19:44 عصر
سلام

آیا می شود برنامه ای نوشت که فرم ایجاد نکنیم اما برنامه قابل اجرا باشد چون دلفی نیاز حتما به یک فرم دارد

سوال دوم : آیا می شود برنامه ای یا تایع را قبل از اجرا فرم اصلی فراخوانی کرد مثل من برنامه ActiveX نوشتم باید قبل از فرم اصلی خوانده شود

با تشکر از دوستان عزیز
مرتضی

مهدی کرامتی
سه شنبه 08 اردیبهشت 1383, 21:17 عصر
آیا می شود برنامه ای نوشت که فرم ایجاد نکنیم اما برنامه قابل اجرا باشد چون دلفی نیاز حتما به یک فرم دارد
بله، میشه، اما دقیقا میخواهید برنامه موردنظر چه کاری انجام دهد؟


آیا می شود برنامه ای یا تایع را قبل از اجرا فرم اصلی فراخوانی کرد
بله.
از منوی Project گزینه View Source را انتخاب کنید. چیزی که می‌بینید چنین چیزی خواهد بود:

program Project1;

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

{$R *.res}

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
دستورات مورد نظر را قبل از <span dir=ltr>Application.Initialize;</span> اضافه کنید.

spicirmkh
چهارشنبه 09 اردیبهشت 1383, 11:00 صبح
سلام

در مورد سوال اول فرض می خواهیم برنامه به نام Register بنویسیم که یک ActiveX را روی سیستم نصب کند بدون اینکه فرم یا پیغامی بدهد

در مورد دوم من برنامه Activex نوشتم می خواهم قبل از اینکه فرم ایجاد شود برنامه ActiveX اجرا شود و نصب پس قیا ایجاد فرم بگذارم یعنی می خواهم تابع Ceartocx اجرا کنم این تایع در یونیت ACTOCX وجود دارد

با تشکر از تمامی دوستان
مرتضی

مهدی کرامتی
چهارشنبه 09 اردیبهشت 1383, 12:04 عصر
به این مثال توجه کنید.

نکته 1: این مثال برای تست اینکه ActiveX رجیستر شده یا نه ابتدا سعی میکند یک نمونه از آن را ایجاد کند. اگر عملیات ایجاد با مشکل مواجه شد نشانه آن است که ActiveX قبلا رجیستر نشده است و بنابراین آنرا رجیستر میکند.

نکته 2: برای بوجود آوردن یونیت ShockwaveFlashObjects_TLB و یا هر یونیت Type Library دیگری (TLB) کافی است از منوی کامپوننت ActiveX مورد نظر را Import کنید. فایل TLB مربوطه بطور خودکار ساخته خواهد شد و سپس میتوانید آنرا در برنامه تان Use کنید.



program Project1;

uses
ShockwaveFlashObjects_TLB,
Dialogs,
Windows,
SysUtils,
Classes,
Controls,
Forms,
Unit1 in 'Unit1.pas' &#123;Form1&#125;

&#123;$R *.RES&#125;

&#123; Function GetWinSysDir&#40;&#41; &#125;
function GetWinSysDir&#58; string;
var
n&#58; integer;
p&#58; PChar;
begin
n &#58;= MAX_PATH;
p &#58;= stralloc&#40;n&#41;;
getsystemdirectory&#40;p, n&#41;;
Result &#58;= Result + strpas&#40;p&#41;;
end;

&#123;Function CopyFile&#40;&#41; &#125;
procedure Copyfile&#40;InFile, OutFile&#58; string&#41;;
var
Inf, Outf&#58; TFileStream;
Over&#58; Boolean;
res&#58; word;
InFFale, OutFFale&#58; boolean;
begin
if FileEXists&#40;InFile&#41; then
begin
if FileExists&#40;OutFile&#41; then
begin
// Res &#58;= MessageDlg&#40;'Do you want to overwrite existing file?', mtWarning,
// &#91;mbYes, mbNo&#93;, 0&#41;;
// Over &#58;= &#40;Res = mrYes&#41;;
Over&#58;=True;
end
else
Over &#58;= true;
inffale &#58;= false;
outffale &#58;= false;
if over then
begin
try
try
InF &#58;= TFileStream.Create&#40;Infile, Fmopenread or fmShareDenyNone&#41;;
except
on e&#58; Exception do
inffale &#58;= true;
end;
try
OutF &#58;= TFileStream.create&#40;Outfile, FmCreate or FmShareExclusive&#41;;
except
on E&#58; Exception do
outfFale &#58;= true
end;
outf.copyfrom&#40;Inf, 0&#41;;
finally
if not inffale then
FreeAndNil&#40;Inf&#41;;
if not outfFale then
FreeAndNil&#40;outF&#41;;
end;
end;
end;
end;

&#123;Function RegisterOCX&#40;&#41; &#125;
function RegisterOCX&#40;OcxFilename&#58; string&#41;&#58; Boolean;
var
hDll&#58; THandle;
pFunc&#58; function&#58; Integer;
nResult&#58; Integer;
begin
&#123; This sample implies that the dll is in the PATH &#125;
hDll &#58;= LoadLibrary&#40;pchar&#40;OcxFilename&#41;&#41;;
if hDll = 0 then
MessageDlg&#40;'Cannot load library ' + OcxFilename, mtError, &#91;mbOK&#93;, 0&#41;
else
begin
pFunc &#58;= GetProcAddress&#40;hDll, 'DllRegisterServer'&#41;;

if not Assigned&#40;pFunc&#41; then
MessageDlg&#40;'Library does not export function DllRegisterServer.',
mtError, &#91;mbOK&#93;, 0&#41;
else
begin
nResult &#58;= pFunc&#40;&#41;;

if nResult &lt;> 0 then
result &#58;= false
else
result &#58;= true;
end;
FreeLibrary&#40;hDll&#41;;
end;

end;

&#123; Program Main Body&#125;
var
p&#58; TShockwaveFlash;

begin
try
p &#58;= TShockwaveFlash.Create&#40;nil&#41;;
except
//ShowMessage&#40;'Flash Player Not Installed'&#41;;
if &#40;FileExists&#40;GetWinSysDir + '\Macromed\Flash\Flash.ocx'&#41;&#41; then
begin
RegisterOCX&#40;GetWinSysDir + '\Macromed\Flash\Flash.ocx'&#41;;
end
else
begin
If Not&#40;FileExists&#40;GetWinSysDir + '\Flash.ocx'&#41;&#41; Then
CopyFile&#40;ExtractFilePath&#40;Application.exename&#41;+'Fla sh.ocx', GetWinSysDir + '\Flash.ocx'&#41;;
RegisterOCX&#40;GetWinSysDir + '\Flash.ocx'&#41;;
end;
end;
Application.Initialize;
Application.CreateForm&#40;TForm1, Form1&#41;;
Application.Run;
end.

spicirmkh
چهارشنبه 09 اردیبهشت 1383, 14:11 عصر
با سلام و تشکر

من DELPHI 5 دارم برنامه که می خواهم اجرا کنم به اولینFunction که می رسد Error می دهد
پیغام خطا این است


&#91;Error&#93; Project1.dpr&#40;16&#41;&#58; ',' or ';' expected but 'FUNCTION' found


با تشکر

مهدی کرامتی
چهارشنبه 09 اردیبهشت 1383, 15:27 عصر
فکر کنم منظورش اینه که باید

Unit1 in 'Unit1.pas'
را بصورت

Unit1 in 'Unit1.pas';
تغییر دهید :)