PDA

View Full Version : shortcut تو برنامه خودمون



devil00x
شنبه 04 شهریور 1385, 00:04 صبح
آقا من یه برنامه نوشتم حالا میخوام مثل ویندوز کاربر بتونه از منوهای موجود واسه خودش رو دسکتاپ برنامه یعنی فرم اصلی shortcut بزنه .
کسی می تونه راهنمایی کنه که چه کاری باید انجام بدم/.
قبلا از همکاری همگی متشکرم

bmanfy
چهارشنبه 13 دی 1385, 17:55 عصر
من یه کار شبیه ای انجام دادم
شما میتونی این ایکن ها رو روی فرم اصلی بذاری و ویزیبل اونها رو فالس کنی و در صورتی که کاربر خواصت اون شرنکات نمایش داده بشه ویزیبل ایکن مورد نظر رو ترو کنی

MNosouhi
چهارشنبه 13 دی 1385, 18:27 عصر
قا من یه برنامه نوشتم حالا میخوام مثل ویندوز کاربر بتونه از منوهای موجود واسه خودش رو دسکتاپ برنامه یعنی فرم اصلی shortcut بزنه .
لازم نیست این کار رو بصورت کد نویسی انجام بدید (البته نه این که نشه ، کار سختی نیستش) ، بعد از اینکه برنامتون کامل شد با InstallShield برای برنامتون یه Setup درست کنید ، اون خودش در ضمن نصب برنامتون Shortcut رو هم اضافه میکنه (البته باید تنظیمش بکنی)

dkhatibi
چهارشنبه 13 دی 1385, 18:43 عصر
از کد زیر استفاده کن


uses
Registry,
ActiveX,
ComObj,
ShlObj;

type
ShortcutType = (_DESKTOP, _QUICKLAUNCH, _SENDTO, _STARTMENU, _OTHERFOLDER);

function CreateShortcut(SourceFileName: string; // the file the shortcut points to
Location: ShortcutType; // shortcut location
SubFolder, // subfolder of location
WorkingDir, // working directory property of the shortcut
Parameters,
Description: string): // description property of the shortcut
string;
const
SHELL_FOLDERS_ROOT = 'Software\MicroSoft\Windows\CurrentVersion\Explore r';
QUICK_LAUNCH_ROOT = 'Software\MicroSoft\Windows\CurrentVersion\GrpConv ';
var
MyObject: IUnknown;
MySLink: IShellLink;
MyPFile: IPersistFile;
Directory, LinkName: string;
WFileName: WideString;
Reg: TRegIniFile;
begin

MyObject := CreateComObject(CLSID_ShellLink);
MySLink := MyObject as IShellLink;
MyPFile := MyObject as IPersistFile;

MySLink.SetPath(PChar(SourceFileName));
MySLink.SetArguments(PChar(Parameters));
MySLink.SetDescription(PChar(Description));

LinkName := ChangeFileExt(SourceFileName, '.lnk');
LinkName := ExtractFileName(LinkName);

// Quicklauch
if Location = _QUICKLAUNCH then
begin
Reg := TRegIniFile.Create(QUICK_LAUNCH_ROOT);
try
Directory := Reg.ReadString('MapGroups', 'Quick Launch', '');
finally
Reg.Free;
end;
end
else
// Other locations
begin
Reg := TRegIniFile.Create(SHELL_FOLDERS_ROOT);
try
case Location of
_OTHERFOLDER : Directory := SubFolder;
_DESKTOP : Directory := Reg.ReadString('Shell Folders', 'Desktop', '');
_STARTMENU : Directory := Reg.ReadString('Shell Folders', 'Start Menu', '');
_SENDTO : Directory := Reg.ReadString('Shell Folders', 'SendTo', '');
end;
finally
Reg.Free;
end;
end;

if Directory <> '' then
begin
if (SubFolder <> '') and (Location <> _OTHERFOLDER) then
WFileName := Directory + '\' + SubFolder + '\' + LinkName
else
WFileName := Directory + '\' + LinkName;


if WorkingDir = '' then
MySLink.SetWorkingDirectory(PChar(ExtractFilePath( SourceFileName)))
else
MySLink.SetWorkingDirectory(PChar(WorkingDir));

MyPFile.Save(PWChar(WFileName), False);
Result := WFileName;
end;
end;

function GetProgramDir: string;
var
reg: TRegistry;
begin
reg := TRegistry.Create;
try
reg.RootKey := HKEY_CURRENT_USER;
reg.OpenKey('Software\Microsoft\Windows\CurrentVer sion\Explorer\Shell Folders', False);
Result := reg.ReadString('Programs');
reg.CloseKey;
finally
reg.Free;
end;
end;

// Some examples:

procedure TForm1.Button1Click(Sender: TObject);
const
PROGR = Application.exename;
var
resPath: string;
begin
//Create a Shortcut in the Quckick launch toolbar
CreateShortcut(PROGR, _QUICKLAUNCH, '','','','Description');

//Create a Shortcut on the Desktop
CreateShortcut(PROGR, _DESKTOP, '','','','Description');

//Create a Shortcut in the Startmenu /"Programs"-Folder
resPath := CreateShortcut(PROGR, _OTHERFOLDER, GetProgramDir,'','','Description');
if resPath <> '' then
begin
ShowMessage('Shortcut Successfully created in: ' + resPath);
end;
end;

mzjahromi
پنج شنبه 14 دی 1385, 06:57 صبح
دوستان لطفا متن سوال رو کامل بخونید.
منظور دوستمون چیز دیگه است
----------------------------------------------------
خود من برای این کار از ایجاد داینامیک لیبل استفاده کردم(البته نه برای Shortcut برای لیست آخرین منوهای استفاده شده) شما هم میتونید با ایمیج یا یه چیزی شبیه به اون این کار رو به صورت ایجاد داینامیک انجام بدید.

dkhatibi
پنج شنبه 14 دی 1385, 11:54 صبح
آقا من یه برنامه نوشتم حالا میخوام مثل ویندوز کاربر بتونه از منوهای موجود واسه خودش رو دسکتاپ برنامه یعنی فرم اصلی shortcut بزنه .
کسی می تونه راهنمایی کنه که چه کاری باید انجام بدم/.
قبلا از همکاری همگی متشکرم

می خوای روی فرم اصلی از چی ShortCut بسازی؟

arshia_
شنبه 16 دی 1385, 08:38 صبح
فکر کنم دوست ما قصد داره کاری کنه که کاربر مثلا با کلیک راست روی یک گزینه در منو برای سهولت کارش یه میانبر روی فرم اصلی برنامه بذاره که دفعات بعدی به جای رفتن به منوی تو در تو به راحتی با کلیک روی اون میانبر بتونه به مقصودش برسه
می تونی یه کار ساده انجام بدی
چند تا آیتم به صورت پیش فرض روی فرم تعریف کنی و هر وقت کاربر یکی از موارد منو رو خواست یه اون آیتم ها پاس بدی تا هم آیتم حالت نمایش پیدا کنه و هم بتونه بعد از کلیک فرم مورد نظر رو فراخوانی کنه یعنی هر منویی رو انتخاب کرده بود توسط این آیتم فراخونی بشه

حرفه ای
شنبه 16 دی 1385, 10:29 صبح
چند تا راه حل داری ساده ترینش استفاده از TreeView و یا ListView است
توی یک تابع به هر فرم و یا گزارش که قصد داری که کاربر از اون ShortCut بسازه یک کد اختصاص بده مثل :


Procedure VisibleForm(sender : Byte);
begin
case sender of
1: form1.showmodal;
2: form2.showmodal;
3: report1.preview;
end;

حال ShortCut ها روی توی TreeView و یا ListView نشان بده می توانی از File مجزا یا بانک استفاده کنی
به هر نود کد shortcut رو بده و اگر کاربر کلیک کرد تابع بالا رو صدا کن

برای استفاده راحت تر از TreeView می تونی از خاصیت Data اون استفاده کنی

البته خیلی کلی گفتم امتحان کن هرجا مشکل داشتی درخدمتیم :متفکر: :قلب: