ورود

View Full Version : چیزی مثل MRU



zman123456
پنج شنبه 07 دی 1385, 19:31 عصر
سلام
تو موضوعات قبلی گشتم تنها چیزی که نزدیک بود MRU بود که به دردم نخورد.
من می خوام یه منو داشته باشم مثل یه منوی MRU.ولی نه اینکه اسم و آدرس اونارو لیست کنه.می خوام هر فایلی با پسوند خاص رو کنار EXE میزارم Caption اون Item رو از تو فایل بخونه و با Click روی اون تو منو بره و کار خاصی رو انجام بده.
**منو رو تونستم بسازم ولی نمی تونم به هر کدوم که می سازم خاصیتی مثل OnClick بدم.
لطفا راهنماییم کنید.

dkhatibi
پنج شنبه 07 دی 1385, 20:04 عصر
سلام
تو موضوعات قبلی گشتم تنها چیزی که نزدیک بود MRU بود که به دردم نخورد.
من می خوام یه منو داشته باشم مثل یه منوی MRU.ولی نه اینکه اسم و آدرس اونارو لیست کنه.می خوام هر فایلی با پسوند خاص رو کنار EXE میزارم Caption اون Item رو از تو فایل بخونه و با Click روی اون تو منو بره و کار خاصی رو انجام بده.
**منو رو تونستم بسازم ولی نمی تونم به هر کدوم که می سازم خاصیتی مثل OnClick بدم.
لطفا راهنماییم کنید.

تو منو بره و کار خاصی انجام بده یعنی چچی؟
یعنی می خوای رو ایتم خاصی که کلیک کردی رویدادی از منو اجرا بشه؟
اگه ممکنه بیشتر توضیح بده یا شکل بگذار!

zman123456
پنج شنبه 07 دی 1385, 20:40 عصر
چند تا فایل کنار Exe‌ هست که می خوام از روی آنها منوی برنامم ساخته بشه.توی فایلها Caption منو ( MenuItem ) رو دارم و یک Query.حالا می خوام فایلها رو بخونه و منو رو با Caption های توی فایل درست کنه.این کار رو انجام دادم و مشکلی ندارم.
ولی مشکل اینجاست حالا که باید هر کدوم از MenuItem ها Quey خاصی رو اجرا کنند باید برم از فایل مربوطه Query رو بخونم و توی AdoQuery فرم Loud کنم و اجرا کنم.
ولی نمی دونم کدوم MenuItem رو Click شده.تا به حال تونستم یک Procedure‌ رو به OnClick اختصاص بدم اینو الان یاد گرفتم.
حالا کمکم کنید.

dkhatibi
پنج شنبه 07 دی 1385, 21:23 عصر
کلاس نویسی راه حلته!
استفاده از کلاسهای منو و ساخت منو به طور پویا!!!
من بلد نیستم.
مدیران کمک کنن

soroush_vs
جمعه 08 دی 1385, 08:01 صبح
واقعا کار بسیار جالبیه ایده هم حرف نداره
تبریک

vcldeveloper
جمعه 08 دی 1385, 10:05 صبح
از کدی شبیه به این استفاده کنید:


const
MRUPath = 'D:\Borland\Delphi7\Projects\'; //Search path

procedure TForm1.Button1Click(Sender: TObject);
var
AnItem : TMenuItem;
F : TSearchRec;
begin
//Find any file in the search path
if FindFirst(MRUPath+'*.*',faAnyFile,F) = 0 then
repeat
if ExtractFileExt(F.Name) = '.mru' then
begin
//Create & initialize a new menu item for each found file
AnItem := TMenuItem.Create(MainMenu1);
AnItem.Caption := ExtractFileName(F.Name);
AnItem.OnClick := MruClick;
//Add the new created item to the first menu item of MainMenu1
MainMenu1.Items[0].Add(AnItem);
end;
until FindNext(F) <> 0;
FindClose(F);
end;

//OnClick event for all the MRU items
procedure TForm1.MruClick(Sender: TObject);
var
T : TextFile;
FName,
Data : string;
begin
//Extract file name from the selected meue item
FName := MRUPath + TMenuItem(Sender).Caption;
if not FileExists(FName) then
Exit;
//Read query data from the file
AssignFile(T,FName);
try
Reset(T);
Read(T,Data);
//Assing query data to AdoQuery1 and execute it.
if Data <> '' then
try
AdoQuery1.Close;
AdoQuery1.SQL.Text := Data;
AdoQuery1.Open;
except
raise Exception.Create('Query data us invalid');
end;
finally
CloseFile(T);
end;
end;

Touska
شنبه 09 دی 1385, 08:41 صبح
سلام
تو موضوعات قبلی گشتم تنها چیزی که نزدیک بود MRU بود که به دردم نخورد.
من می خوام یه منو داشته باشم مثل یه منوی MRU.ولی نه اینکه اسم و آدرس اونارو لیست کنه.می خوام هر فایلی با پسوند خاص رو کنار EXE میزارم Caption اون Item رو از تو فایل بخونه و با Click روی اون تو منو بره و کار خاصی رو انجام بده.
**منو رو تونستم بسازم ولی نمی تونم به هر کدوم که می سازم خاصیتی مثل OnClick بدم.
لطفا راهنماییم کنید.

اگر کامپوننت هم در این زمینه بخواهی فت فراوان هست : LMD,ABF,RM

zman123456
دوشنبه 11 دی 1385, 10:11 صبح
از کدی شبیه به این استفاده کنید:


AnItem.Caption := ExtractFileName(F.Name);
و
FName := MRUPath + TMenuItem(Sender).Caption;

از آقای کشاورز ممنون ولی این خط ها باعث میشه که Caption هر MenuItem رو از روی اسم فایلها بخونه ولی Caption در داخل فایل نوشته می شود.با کد شما به راحتی می شود فهمید که کدام فایل را باز کرد .ولی اگر از توی فایل خونده بشه از این روش نمیشه.
خیلی متشکرم از معرفی Component ولی می خوام خودم کدنویسی کنم.چون چیز راحتیه.