Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1208289360
TIF
2008-04-15 23:56
2008.06.01
Быстрый поиск в ComboBox


2-1210056270
Denis14312
2008-05-06 10:44
2008.06.01
Открытие базы DBF


15-1208252315
Palladin
2008-04-15 13:38
2008.06.01
директива Overload


15-1208867243
i
2008-04-22 16:27
2008.06.01
Скорость билда проекта


2-1210214413
Steve
2008-05-08 06:40
2008.06.01
Рдактирование диаграмм в MSExcel





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский