نمایش نتایج 1 تا 13 از 13

نام تاپیک: Go to Tray

  1. #1

    Question Go to Tray

    من از فانکشن زیر برای رفتن به System Try برنامه استفاده می کنم ...
    مشکل اینجا است که وقتی به Try می ره آیکونی از برنامه من در System Try دیده نمی شه و نمی تون دوباره اون رو برگردونم ...
    لطفا راهنماییم کنید ...
    اینم کدش :
    function MinimizeToTray(Handle: HWND): Boolean;
    var
    hwndTray: HWND;
    rcWindow: TRect;
    rcTray: TRect;
    begin
    if IsWindow(Handle) then
    begin
    hwndTray := FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'TrayNotifyWnd', nil);
    if (hwndTray = 0) then
    Result := False
    else
    begin
    GetWindowRect(Handle, rcWindow);
    GetWindowRect(hwndTray, rcTray);
    DrawAnimatedRects(Handle, IDANI_CAPTION, rcWindow, rcTray);
    ShowWindow(Handle, SW_HIDE);
    end;
    end
    else
    Result := False;
    end;

  2. #2
    کاربر دائمی آواتار Hamid_PaK
    تاریخ عضویت
    تیر 1384
    محل زندگی
    تهران
    پست
    1,125
    آیا ایکون برنامه شما در Tray وجود داره ؟؟؟ اگر نه ، یک ایکون در Tray قرار بدهید و در رویداد OnMouseClick و یا OnMouseDown فرم اصلی رو برگردانید ( Restore ) ...

    ( برای Tray می توانید از کامپوننت CoolTrayIcon استفاده کنید )

    یا حق !!!

  3. #3
    کد شما فقط برای ایجاد یک حالت انیمیشن در برنامه کاربرد داره و عملا آیکنی به System Tray اضافه نمیکنه. برای این منظور باید از تابع Shell_NotifyIcon استفاده کنید. ایجاد آیکن در System Tray قبلا در این سایت و سایت های دیگه توضیح داده شده. از همون کامپوننت CoolTrayIcon هم می تونید استفاده کنید. اگر هم از دلفی 2006 استفاده می کنید، این نسخه بصورت استاندارد با خودش یک کامپو ننت برای این کار داره.

  4. #4
    کاربر دائمی آواتار Ehsansh
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    127.0.0.1
    سن
    39
    پست
    278
    این کدی هست که من برای برنامه هام ازش استفاده میکنم:

    Var NotifyIconData : TNotifyIconData;

    with NotifyIconData do
    begin
    hIcon := Application.Icon.Handle;
    StrPCopy(NotifyIconData.szTip, Application.Title);
    Wnd := Handle;
    uCallbackMessage := WM_User+1;
    uID := 1;
    uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
    cbSize := sizeof(TNotifyIconData)
    end;

    Shell_NotifyIcon(NIM_ADD,@NotifyIconData);
    Shell_NotifyIcon(NIM_DELETE,@NotifyIconData);
    Shell_NotifyIcon(NIM_MODIFY,@NotifyIconData);

    امیدوارم کمک کنه

  5. #5
    برای Tray می توانید از کامپوننت CoolTrayIcon استفاده کنید
    این کامپوننت رو از کجا می تونم گیر بیارم ؟

    این کدی هست که من برای برنامه هام ازش استفاده میکنم:


    Var NotifyIconData : TNotifyIconData;

    with NotifyIconData do
    begin
    hIcon := Application.Icon.Handle;
    StrPCopy(NotifyIconData.szTip, Application.Title);
    Wnd := Handle;
    uCallbackMessage := WM_User+1;
    uID := 1;
    uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
    cbSize := sizeof(TNotifyIconData)
    end;

    Shell_NotifyIcon(NIM_ADD,@NotifyIconData);
    Shell_NotifyIcon(NIM_DELETE,@NotifyIconData);
    Shell_NotifyIcon(NIM_MODIFY,@NotifyIconData);
    اگه یه خورده در مورد طرز استفاده از این کدها توضیح بدید ممنون می شم...

  6. #6
    کاربر دائمی آواتار Hamid_PaK
    تاریخ عضویت
    تیر 1384
    محل زندگی
    تهران
    پست
    1,125
    دوست عزیز این کامپوننت رایگان هست .. تو گوگل یه سرچ بزن، حتما پیداش می کنی ...

    و کدی که دوست عزیز آقا احسان فرمودند، به یوزز ShellAPI مربوط می شه :

    uses ShellAPI;

    procedure TForm1.Button1Click(Sender: TObject);
    var
    NotifyIcon: TNotifyIconData;
    begin
    with NotifyIcon do begin
    cbSize := SizeOf(NotifyIcon);
    Wnd := Handle;
    uID := 0;
    uFlags := NIF_ICON + NIF_MESSAGE + NIF_TIP;
    hIcon := Application.Icon.Handle;
    StrPCopy(szTip, Caption);
    end;
    Shell_NotifyIcon(NIM_ADD, @NotifyIcon);
    end;



    یا حق !!!

  7. #7
    کاربر دائمی آواتار Hamid_PaK
    تاریخ عضویت
    تیر 1384
    محل زندگی
    تهران
    پست
    1,125
    با کمی تغییرات ...

    function MinimizeToTray(Restore: Boolean = False): Boolean;
    var
    hwndMain,
    hwndTray: HWND;
    rcWindow,
    rcTray: TRect;
    begin
    Result := False;
    hwndMain := Application.MainForm.Handle;
    if IsWindow(hwndMain) then
    begin
    hwndTray := FindWindow('Shell_TrayWnd', nil);
    hwndTray := FindWindowEx(hwndTray, 0, 'TrayNotifyWnd', nil);
    hwndTray := FindWindowEx(hwndTray, 0, 'SysPager', nil);
    hwndTray := FindWindowEx(hwndTray, 0, 'ToolbarWindow32', nil);
    if hwndTray = INVALID_HANDLE_VALUE then Exit;
    GetWindowRect(hwndMain, rcWindow);
    GetWindowRect(hwndTray, rcTray);
    if not Restore then begin
    Result := DrawAnimatedRects(hwndMain, IDANI_CAPTION, rcWindow, rcTray);
    if Result then Application.MainForm.Hide;
    end else begin
    Result := DrawAnimatedRects(hwndMain, IDANI_CAPTION, rcTray, rcWindow);
    if Result then Application.MainForm.Show;
    end;
    end;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    MinimizeToTray;
    Sleep(1500);
    MinimizeToTray(True)
    end;



    یا حق !!!

  8. #8

    Unhappy

    آقا حمید دست شما درد نکنه ، اون کامپوننت رو پیدا کردم ولی متاسفانه نتونستم نصبش کنم ...
    راستش نمی دونم مشکلم کجاست !! ( آخه من زیاد کامپوننت نصب نمی کنم ) !!
    این کامپوننت رو اینجا می زارم ، هرکی دانلود و نصب کرد به من هم یاد بده.
    اگه مراحل نصب یک کامپوننت رو مثلا با چندتا عکس توضیح بده خیلی عالی می شه...
    کار ساده اییه ولی شرمنده نتونستم نصبش کنم.
    در ضمن به راهنمایی دلفی هم سر زدم ولی زیاد دستگیرم نشد.
    اینم کامپوننت :
    CoolTrayIcon.zip

  9. #9
    کاربر دائمی آواتار Hamid_PaK
    تاریخ عضویت
    تیر 1384
    محل زندگی
    تهران
    پست
    1,125
    یکی از راه های نصب کامپوننت از راه خود پکیج آماده ای است که برنامه نویسان اون رو ساخته اند ...
    اگر پکیج نداشت هم می تونید خودتون یکی براش ایجاد کنید و یا از راه ساده تری در پکیج آماده خود دلفی اضافه اش کنید :
    1 - از منوی کامپوننت گزینه ( Install Component ) را انتخاب کنید، منوی نصب کامپوننت باز می شود.
    2 - این منو حاوی دوتا، تب است که اولی مربوط به پکیج آماده و دومی برای ایجاد پکیج جدید است.
    2-1 - فیلد اول نام و آدرس یونیت های است که شما می خواهید نصب شوند ( بعضی کامپوننت ها حاوی بیش از یک یونیت هستند پس بهتر است در یک فولدر جداگانه ای ذخیره شوند ).
    2-2 - فیلد دوم مسیرهای است که دلفی یونیت ها در خواستی شما را در آنها جستجو می کند.
    2-3 - فیلد سوم نام آدرس پکیجی است که شما می خواهید این یونیت ها در آن مجموعه قرار بگیرد ( دلیل اینکه ما یونیتها رو در پکیج های جداگانه نصب می کنیم برای سهولت در نصب و یا پاک کردن آنهاست و یا این که یونیتها در یک مجموعه هستند ).
    2-4 - فیلد چهارم و آخرین فیلد مربوط به توضیحات پکیج است که در صورت ایجاد پکیجی جدید در تب ایجاد پکیج قابل تعریف است.
    3 - بر روی دکمه جستجو ( Browse ) کلیک کرده و یونیتهای مورد نظر رو انتخاب می کنیم.
    4 - در حال حاضر تمامی یونیتهای انتخاب شده باز شده و دلفی پیغام کامپایل مجدد پکیج رو نمایش می دهد در صورت اینکه خطایی در مجموعه یونیتهای جدید یافت نشود یونیتها در پکیج نصب شده و پیغامی با عنوان اینکه پالت کامپوننتها بروز شده و نتیجه پکیج انتخاب شده ثبت شدن کدامیک کمپوننتها است دیده می شود.

    یا حق !!!

  10. #10

    Unhappy

    آقا حمید با توضیحات شما تا یه جاهایی پیش رفتم، ولی موقع کامپایل کردن چندتا Error می ده


    قبل از اینکه به قسمت کامپایل برسم هم یک پیغام ظاهر می شود ( شکل زیر ).

    راستش هر کاری می کنم نمی تونم به این پیغام ( عکس بالا ) جواب درست بدم و همیشه کنسلش می کنم.

    مورد اولی که گفتم ( Errors ) فقط در موقعییه که هر چهار تا یونیت رو وارد می کنم.
    ولی با وارد کردن یکی از یونیتها این کامپوننت نصب می شه ولی فکر نکنم کامل باشه
    عکس قسمت Properties این کامپوننت :

    در قسمت Events هم چیزی نداره !!!
    اگه بازم راهنماییم کنید ممنون می شم ( شرمنده ).

    یه چیز دیگه : اگه به قسمت Project توی عکس وسطی نگاه کنید، نوشته CoolTrayIcon_D6plus.dpk ، فکر کنم این کامپوننت برای دلفی 6 باشه. ( من از دلفی 7 استفاده می کنم )

  11. #11
    کاربر دائمی آواتار Hamid_PaK
    تاریخ عضویت
    تیر 1384
    محل زندگی
    تهران
    پست
    1,125
    اینو تست کنید ...

    از منوی Component / Install Packages / Add فایل CoolTrayIcon_D7.bpl رو انتخاب کنید ...

    یا حق !!!
    فایل های ضمیمه فایل های ضمیمه

  12. #12
    آقا حمید عزیز دیگه لازم نیست ( نصبش کردم ).
    یه کامپوننت دیگه گیر آوردم ( محصولی از SalarSoft ) خیلی راحت نصبش کردم.
    امکانات خیلی خوبی هم داره
    اگه بخواید می تونم ضمیمش کنم.
    بازم از شما و سایر دوستان به خاطر راهنماییهایی که کردید تشکر می کنم.

    یه چیز دیگه :
    حالا می خوام برنامه من در شروع ویندوز اجرا بشه و به Tray بره ولی وقتی که یک نفر دستی اجراش میکنه این اتفاق نیافته ( موقع اجرا به Tray نره ).
    اینو بلدم که کاری کنم موقع شروع ویندوز اجرا بشه ، ولی نمی دونم چه جوری به Tray بفرستمش ( فقط در شروع ویندوز ).
    آخرین ویرایش به وسیله Mahmood_M : جمعه 05 اسفند 1384 در 22:40 عصر

  13. #13
    حالا می خوام برنامه من در شروع ویندوز اجرا بشه و به Tray بره ولی وقتی که یک نفر دستی اجراش میکنه این اتفاق نیافته ( موقع اجرا به Tray نره ).
    در برنامه یک پارامتر برای Command Line تعریف کنید (مثلا : C:\MyProg.exe /startup). مقدار و تعداد پارامترهای خط فرمان را می تونید با استفاده از ParamStr و ParamCount بدست بیارید.
    در OnCreate فرم اصلی برنامه چک کنید که آیا /startup به عنوان پارامتر خط فرمان به برنامه فرستاده شده یا نه. اگر فرستاده شده بود، ایکن برنامه را در System Tray قرار بدید و فرم برنامه را Hide کنید، در غیر این صورت برنامه را بصورت عادی اجرا کنید.

تاپیک های مشابه

  1. انیمیشن sys tray
    نوشته شده توسط مجتبی کریمی در بخش VB.NET
    پاسخ: 19
    آخرین پست: دوشنبه 22 اسفند 1384, 12:38 عصر
  2. رجیستر کردن یک رویداد در برنامه های System Tray
    نوشته شده توسط Ahmad_Crack در بخش برنامه نویسی در Delphi
    پاسخ: 10
    آخرین پست: سه شنبه 16 اسفند 1384, 12:31 عصر
  3. متن در Tray ویندوز
    نوشته شده توسط روح اله معینی زاده در بخش VB.NET
    پاسخ: 2
    آخرین پست: چهارشنبه 04 آبان 1384, 18:27 عصر
  4. آیکون برنامه را رو Tray بزارید
    نوشته شده توسط reza_rajabi در بخش برنامه نویسی در 6 VB
    پاسخ: 4
    آخرین پست: یک شنبه 06 شهریور 1384, 13:14 عصر
  5. قرار دادن آیکون برنامه را در Tray (در کنار ساعت سیستم) ؟
    نوشته شده توسط hadavinia در بخش برنامه نویسی در Delphi
    پاسخ: 7
    آخرین پست: جمعه 06 شهریور 1383, 19:06 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •