Форум: "Начинающим";
Текущий архив: 2008.06.01;
Скачать: [xml.tar.bz2];
ВнизДобавление нового пункта в pop-up меню Найти похожие ветки
← →
{RASkov} © (2008-04-30 13:28) [40]> [39] DJ Kondakov (30.04.08 13:08)
> как обратиться к свойству Name объекта, передаваемого в
> параметре Sender?
TComponent(Sender).Name
Но зачем? Имя у компонентов - это только для дизайна.... в рантайм их как правило не используют...
← →
DJ Kondakov (2008-05-05 06:51) [41]Короче, новая проблема.
Пишу:
...
procedure menuitemclick(sender:tobject);
...
procedure tform1.Menuitemclick(sender:tobject);
var
libhandle:thandle;
mainproc:procedure;
begin
@mainproc:=nil;
libhandle:=loadlibrary(pchar(paramstr(0)+"\plugins\"+Tcomponent(sender).name+".dll"));
if libhandle>=32 then begin
@mainproc:=getprocaddress(libhandle,"mainproc");
if @mainproc<>nil then mainproc;
end;
freelibrary(libhandle);
end;
...
...
procedure tform1.LoadPlugins;
var
sr:tsearchrec;
GetPlugName:function:pchar;
libhandle:thandle;
mi:tmenuitem;
nm:string;
begin
if fileexists(paramstr(0)+"\plugins\*.dll") then begin
findfirst(paramstr(0)+"\plugins\*.dll",faanyfile,sr);
@getplugname:=nil;
libhandle:=loadlibrary(pchar(sr.name));
if libhandle>=32 then begin
@getplugname:=getprocaddress(libhandle,"GetPlugName");
if @getplugname<>nil then begin
mi := TMenuItem.Create(form1.PopupMenu2);
nm:=extractfilename(sr.name);
delete(nm,pos(".",nm),4);
with mi do begin
Caption := strpas(GetPlugName);
name:=nm;
onClick:=MenuItemClick(mi);
end;
form1.PopupMenu2.items.Add(mi);
end;
end;
freelibrary(libhandle);
while findnext(sr)=0 do begin
@getplugname:=nil;
libhandle:=loadlibrary(pchar(sr.name));
if libhandle>=32 then begin
@getplugname:=getprocaddress(libhandle,"GetPlugName");
if @getplugname<>nil then begin
mi := TMenuItem.Create(form1.PopupMenu2);
nm:=extractfilename(sr.name);
delete(nm,pos(".",nm),4);
with mi do begin
Caption := strpas(GetPlugName);
name:=nm;
onClick:=MenuItemClick(mi);
end;
form1.PopupMenu2.items.Add(mi);
end;
end;
end; freelibrary(libhandle);
end;
end;
...
На выделенных курсивом фрагментах получаю Incompatible types: "TNotifyEvent" and "procedure, untyped pointer or untyped parameter"
← →
Palladin © (2008-05-05 07:40) [42]может лучше жирным было выделить, а то глаза то не казенные...
← →
Loginov Dmitry © (2008-05-05 07:49) [43]> if libhandle>=32 then begin
Миллионный раз уже вижу этот код. Где же источник этой ереси? (
← →
sniknik © (2008-05-05 08:46) [44]это не ересь. просто раньше, очень давно, функция возвращала код ошибки если значение < 32. теперь это просто привычка... или подражание/копирование чужого кода.
сам пишу также... (писал вернее пока не задумался о смысле после однотипного вопроса, не полез в хелп и не увидел, что мои знания устарели.)
а сейчас уже и не уверен эта функция так себя вела или другая.
← →
Palladin © (2008-05-05 08:49) [45]в интернете встречаются статьи, старые конечно, именно с таким условием, а новых мало кто пишет, бо чего нового можно написать про dll :)
← →
Anatoly Podgoretsky © (2008-05-05 09:20) [46]Этот код из Д1
← →
Anatoly Podgoretsky © (2008-05-05 09:24) [47]
> Миллионный раз уже вижу этот код. Где же источник этой ереси?
> (
Из кодопомойки, их хоть и много, но они копируют друг у друга, размножаю глупость во вселенском маштабе. Ну а копипастеров всегда хватало.
← →
DJ Kondakov (2008-05-05 13:09) [48]Ошибка в фрагментах типа
> if @getplugname<>nil then begin mi := TMenuItem.Create(form1.
> PopupMenu2); nm:=extractfilename(sr.name); delete(nm,
> pos(".",nm),4); with mi do begin Caption := strpas(GetPlugName);
> name:=nm; onClick:=MenuItemClick(mi); end;
> form1.PopupMenu2.items.Add(mi); end;
← →
Palladin © (2008-05-05 13:12) [49]если бы ты почитал в справке чего пишут на тему "of object" ты бы давно все понял... а так ерундой страдаешь...
← →
DJ Kondakov (2008-05-07 14:11) [50]Усе понял... Пасиба... Все работает. Показать?
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.06.01;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.044 c