PDA

View Full Version : systemerror code2



lord_viper
جمعه 25 خرداد 1386, 17:54 عصر
با سلام
من یه کامپوننت دارم مینویسم وقتی که نسب میشه ومیخواهم زش استفاده کنم (بندازمش رو فورم)همش این اررور رو میده
system error code2
the system cannot find specifed file

زیار بهش گیر بدم اررور میده
system error code 1813
the specifed resurce type cannot be find in image file
اخرش هم میگه access denided
این مشکل از کجا ای میخوره؟
با تشکر

lord_viper
یک شنبه 27 خرداد 1386, 06:40 صبح
بابا کسی نیست به دادمون برسه؟ از کلاس twincontrolهم استفاده کردم

Arman_1367
یک شنبه 27 خرداد 1386, 13:35 عصر
وقتی نوشتم تو Constructor چی نوشتی جواب ندادی یعنی نیازی به کمک نداشتی خوب.حالا اگر جواب می خواهی کدی که نوشتی را بزار تا اشکال کارت بررسی بشه.البته با کمک تمامی دوستان.

Valadi
یک شنبه 27 خرداد 1386, 19:49 عصر
آقای احدی در سایتش آموزش کامپونت نویسی را دارد و فکر کنم بدردتان بخورد

Arman_1367
یک شنبه 27 خرداد 1386, 23:25 عصر
خوب اگه فکر می کنی می خواهم سورس رو ازت کش برم مشکلی نداره فقط گله نکن که چرا کسی به دادم نمی رسه.
در ضمن من تمام برنامه های تجاری که نوشتم را با مجموعه کمپاننت هایی که خودم نوشتم درست کردم و اینرو می دونم این من نیستم که نیاز به آموزش کمپاننت نویسی دارم.

lord_viper
دوشنبه 28 خرداد 1386, 06:34 صبح
نه اقای arman_1367 من اصلا چنین فکری نمیکنم تازه خوشهال هم میشم اگه این سورس به درد کسی هم بخوره منم معمولا از کلاسها و چیزهایی که خودم مینویسم استتفاده میکنم
unit shellicon;


interface

uses
SysUtils, Classes, Controls, Forms,windows,messages,shellapi;

type
tshellicon = class(TWinControl)
private
handle:hwnd;
s:NOTIFYICONDATA;
ficon:hwnd;
fcaption:string;
fclick:tnotifyevent;
frclick:tnotifyevent;
{ Private declarations }
protected
procedure WndProc(var Message: TMessage); override;
{ Protected declarations }
public
constructor create(aowner:tcomponent);override;
procedure shellicon(a:dword);
{ Public declarations }
published
property icon:hwnd read ficon write ficon;
property caption:string read fcaption write fcaption;
property onclick:tnotifyevent read fclick write fclick;
property onrclick:tnotifyevent read frclick write frclick;
{ Published declarations }
end;

procedure Register;

implementation
constructor tshellicon.create(aowner:tcomponent);
begin
inherited create(aowner);
handle:=(aowner as tform).Handle;
caption:='shellicon';
icon:=loadicon(hinstance,IDI_APPLICATION);
end;
procedure tshellicon.shellicon(a:dword);
begin
s.cbSize:=sizeof(s);
s.Wnd:=handle;
s.uID:=1;
s.uFlags:=NIF_ICON +NIF_MESSAGE +NIF_TIP;
s.uCallbackMessage:=wm_user+s.uID;
s.hIcon:=icon;
strpcopy(s.szTip,caption);
Shell_NotifyIcon(a,@s);
end;
procedure tshellicon.WndProc(var Message: TMessage);
begin
if (Message.Msg=wm_user+1) then
begin
case Message.LParam of
WM_LBUTTONDOWN :
begin
if Assigned (onclick) then
onclick(Self);
end;
WM_RBUTTONDOWN:
begin
if Assigned (onrclick) then
onrclick(Self);
end;
end;
end;
end;
procedure Register;
begin
RegisterComponents('sample', [tshellicon]);
end;

end.

من همیشه از کلاس tcomponent استفاده میکردم و........
خلاصه ممنون از لطفتون

vcldeveloper
سه شنبه 29 خرداد 1386, 08:42 صبح
من همیشه از کلاس tcomponent استفاده میکردم
اینجا هم از TComponent استفاده کن. برای پردازش پیغام هایی که برای آیکن برنامه در System tray تولید میشه هم می تونی یه پنجره با AllocateHWnd ایجاد کنی. توضیحاتش در SDK ویندوز اومده.
برای خطایی هم که گزارش دادی، می تونی برای گرفتن آیکن برنامه از خط زیر هم استفاده کنی:
Icon.Handle := Application.Icon.Handle;
در ضمن، وقتی یک WinControl بوجود میاری، Handle این کنترل منحصر به فرد و مخصوص خودش هست. نباید مقدار Handle را با مقدار هندل Owner تعویض کنی!

Arman_1367
پنج شنبه 31 خرداد 1386, 20:53 عصر
unit shellicon;


interface

uses
SysUtils, Classes, Controls, Forms,windows,messages,shellapi;

type
tshellicon = class(TWinControl)
private
handle:hwnd;
s:NOTIFYICONDATA;
ficon:hwnd;
fcaption:string;
fclick:tnotifyevent;
frclick:tnotifyevent;
{ Private declarations }
protected
procedure WndProc(var Message: TMessage); override;
{ Protected declarations }
public
constructor create(aowner:tcomponent);override;
procedure shellicon(a:dword);
{ Public declarations }
published
property icon:hwnd read ficon write ficon;
property caption:string read fcaption write fcaption;
property onclick:tnotifyevent read fclick write fclick;
property onrclick:tnotifyevent read frclick write frclick;
{ Published declarations }
end;

procedure Register;

implementation
constructor tshellicon.create(aowner:tcomponent);
begin
inherited create(aowner);
handle:=(aowner as tform).Handle;
caption:='shellicon';
icon:=loadicon(hinstance,IDI_APPLICATION);
end;
procedure tshellicon.shellicon(a:dword);
begin
s.cbSize:=sizeof(s);
s.Wnd:=handle;
s.uID:=1;
s.uFlags:=NIF_ICON +NIF_MESSAGE +NIF_TIP;
s.uCallbackMessage:=wm_user+s.uID;
s.hIcon:=icon;
strpcopy(s.szTip,caption);
Shell_NotifyIcon(a,@s);
end;
procedure tshellicon.WndProc(var Message: TMessage);
begin
if (Message.Msg=wm_user+1) then
begin
case Message.LParam of
WM_LBUTTONDOWN :
begin
if Assigned (onclick) then
onclick(Self);
end;
WM_RBUTTONDOWN:
begin
if Assigned (onrclick) then
onrclick(Self);
end;
end;
end;
end;
procedure Register;
begin
RegisterComponents('sample', [tshellicon]);
end;

end.

من همیشه از کلاس tcomponent استفاده میکردم و........
خلاصه ممنون از لطفتون

بزار یه چیزی براتون بگم شاید به درد بخوره .

کلاً در اصول طراحی Designer ها موقع ایجاد یک کمپاننت که نیاز به Owner داریم مقدار nil قرار می گیرد هنگامی که شما از Owner به عنوان فرم استفاده کردید با مشکل مواجه می شود.راستی به همین دلیل نباید شما در این رویداد مثلاً به صورت مستقیم بدون چک کردن Parent پروسه Repaint را هم فراخوانی کنید

راستی اگر در این تاپیک زیادی بد نتیجه گیری کردم امید وارم ناراحت نشده باشید.