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

نام تاپیک: مشکل در کار با Shell_NotifyIcon

  1. #1
    مهمان

    Tick مشکل در کار با Shell_NotifyIcon

    سلام
    این بلوک کد رو ببینین
    یه آیکون به notify area تسک بار اضافه میکنه
    برنامه رو تریس کردم همه خطوط درست کار میکنن ولی وقتی به ;end میرسه پیغام میده
    access violation at address ..... on project1.exe
    یعنی آیکون روی تسک بار میاد ولی با اجرا شدن ;end برنامه ارور میده!!!
    میدونین مشکلش چیه؟؟؟
    procedure TForm1.Button1Click(Sender: TObject);
    var t:ticon;
    a:pNotifyIconData;
    begin
    t:=ticon.Create;
    a.uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
    t.LoadFromFile('C:\Projects\Icnos\blue.ico ');
    a.Wnd:=form1.Handle;
    a.uID:=10;
    a.hIcon:=t.Handle;
    a.szTip:=itest';
    a.cbSize:=sizeof(a);
    Shell_NotifyIcon(NIM_ADD,a);
    t.Free;
    end;

  2. #2
    من کدت رو اینطوری اصلاح کردم :

    procedure TForm1.Button1Click(Sender: TObject); 
    var t:ticon;
    a:TNotifyIconData;
    begin
    t:=ticon.Create;
    a.uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
    t.LoadFromFile('C:\Projects\Icnos\blue.ico ');
    a.Wnd:=form1.Handle;
    a.uID:=10;
    a.hIcon:=t.Handle;
    a.szTip:=itest';
    a.cbSize:=sizeof(a);
    Shell_NotifyIcon(NIM_ADD,@a);
    t.Free;
    end;


    که حالا مشکل سابق رو نداری . البته این کد هم ناقصه و باید نوع پیام برگشتی رو توسط پارامتر uCallbackMessage پاس کنی که البته مقدارش بر عهده خودته .

    موفق باشی
    UNIX is simple. It just takes a genius to understand its simplicity
    -- Dennis Ritchie

  3. #3
    شرمنده ؛ اصل مطلب یادم رفت

    میدونین مشکلش چیه؟؟؟
    عزیز برادر ؛ pNotifyIconData یک اشاره گر هست به یک رکورد TNotifyIconData . ( یعنی : pNotifyIconData = ^TNotifyIconData ) اگر میخای بجای دادن آدرس یک نسخه از رکورد ، اشاره گر اون رکورد رو مقدار دهی کنی و/یا به تابعی پاس کنی باید ابتدا حافظهء مورد نیاز اشاره گر رو بهش تخصیص بدی ؛ توی دلفی روند New اینکار رو انجام میده .( اگر این حافظه رو خودت تخصیص ندی پردازندهء زبون بسته از کجا بفهمه که باید مقادیر منتسب شده رو کجا نگه داره ؟ ) بعد باید برای ارائه مقدار به "چیزی که اشاره گر به آن اشاره میکند " باید از ساختار صحیح استفاده کنی مثلا : p^.field:=something . حالا اگر بخای کد خودت رو تصحیح کنی :

    procedure TForm1.Button1Click(Sender: TObject); 
    var t:ticon;
    a:pNotifyIconData;
    begin
    (new(a;
    t:=ticon.Create;
    a^.uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
    t.LoadFromFile('C:\Projects\Icnos\blue.ico ');
    a^.Wnd:=form1.Handle;
    a^.uID:=10;
    a^.hIcon:=t.Handle;
    a^.szTip:=itest';
    a^.cbSize:=sizeof(a);
    Shell_NotifyIcon(NIM_ADD,a);
    t.Free;
    end;


    خوش باشی :)
    UNIX is simple. It just takes a genius to understand its simplicity
    -- Dennis Ritchie

  4. #4
    مهمان
    راست میگی اینپرایز جون
    دستت درد نکنه نکته کنکوری داشت :oops:
    راستی چرا این خطا رو روی ;end میده؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟
    چرا روی همون خط نمیده؟؟؟؟؟؟؟

  5. #5
    آخه IQ نداری .

  6. #6
    اگر دقت کنی هنگام Build بهت اخطار میده که احتمالا" مقدمات تولید اشاره گر فوق الذکر فراهم نخواهد شد . وقتی داره از یه اشاره گر استفاده میکنی باید به این اخطارها توجه کنی
    UNIX is simple. It just takes a genius to understand its simplicity
    -- Dennis Ritchie

  7. #7
    مهمان
    خه IQ نداری .
    مرسی عزیزم :(
    اینی جون دستت درد نکنه خیلی مرسی :flower:

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

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