Учим меня писать плагины :)
Учим меня писать плагины :)
Решил попробовать написать плагинчик, маленький такой
и сразу куча непоняток:
1)Первое чем воспользовался - InputBox, вопрос почему используя InputBox Helptopic приходится указывать полностью с путем, а при Message можно без пути???
API.Message(API.ModuleNumber, 0,'Contents',@Msg,2,1); открывает мой *.hlp файл
API.InputBox(nil,nil,nil,'',CMD,0,'Contents',0); открывает главную страницу хелпа фара.
Да и вообще InputBox как-то по формату не вписывается в идеологию...
2)Далее InputBox меня не удовлетворил, перешел к DialogInit и DialogRun, в PluginW есть куча обёрток для работы с элементами диалога типа DlgItem_GetCheck, а обертки получения текста из эдита нет, почему?
3)Почему бы в писании не сказать что для обработки событий диалога не обязательно писать свой обработчик, я воспользовался API.DialogInit(API.ModuleNumber,-1,-1,76,10,'Contents',@DialogItems,8,0,0,API.DefDlgProc,0); правильно ли это?
Если будут ответы, то ждите дальнейших вопросов
P.S. под x64 паскалевский исходник умеет только FreePascal компилить? дайте ссылочку.
и сразу куча непоняток:
1)Первое чем воспользовался - InputBox, вопрос почему используя InputBox Helptopic приходится указывать полностью с путем, а при Message можно без пути???
API.Message(API.ModuleNumber, 0,'Contents',@Msg,2,1); открывает мой *.hlp файл
API.InputBox(nil,nil,nil,'',CMD,0,'Contents',0); открывает главную страницу хелпа фара.
Да и вообще InputBox как-то по формату не вписывается в идеологию...
2)Далее InputBox меня не удовлетворил, перешел к DialogInit и DialogRun, в PluginW есть куча обёрток для работы с элементами диалога типа DlgItem_GetCheck, а обертки получения текста из эдита нет, почему?
3)Почему бы в писании не сказать что для обработки событий диалога не обязательно писать свой обработчик, я воспользовался API.DialogInit(API.ModuleNumber,-1,-1,76,10,'Contents',@DialogItems,8,0,0,API.DefDlgProc,0); правильно ли это?
Если будут ответы, то ждите дальнейших вопросов
P.S. под x64 паскалевский исходник умеет только FreePascal компилить? дайте ссылочку.
SimSU ··· ·· -- ··· ··-
Re: Учим меня писать плагины :)
http://www.freepascal.org/download.varSUSim wrote:P.S. под x64 паскалевский исходник умеет только FreePascal компилить? дайте ссылочку.
Re: Учим меня писать плагины :)
только Px хороший чел,
а остальные жлобы... плин! почему бы не посоветовать???
блюдете тайну??? и скрываете от остальных тонкости
P.S. или вам топик не понравился?
а остальные жлобы... плин! почему бы не посоветовать???
блюдете тайну??? и скрываете от остальных тонкости
P.S. или вам топик не понравился?
SimSU ··· ·· -- ··· ··-
-
- Posts: 1329
- Joined: Mon 04 Apr, 2005 13:41
- Location: San Ramon, CA / Kharkov, UA
- Has thanked: 32 times
- Been thanked: 61 times
Re: Учим меня писать плагины :)
Ну зачем же так... исходники ведь открыты
2) например так (если версия delphi < 2009, то вместо PChar поставить PWideChar)
3) передавай nil в этом параметре.
2) например так (если версия delphi < 2009, то вместо PChar поставить PWideChar)
Code: Select all
function GetDataPtr(hDlg: THandle; Id: Integer): PChar;
begin
Result := PChar(Info.SendDlgMessage(hDlg, DM_GETCONSTTEXTPTR, Id, 0));
end;
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
Re: Учим меня писать плагины :)
просто я уже сам разобрался (две недели ждать ответа это не айс, или в этой теме Творцы плагинов совсем не общаются?)
и на счет пункта 3
и насчет пункта 2 (спасибо, конечно, за ответ, Yegor), я сделал чуть по другому потому, что текст я хотел видеть и после DialogFreee:поправьте меня если я не прав!
и на счет пункта 3
и насчет пункта 2 (спасибо, конечно, за ответ, Yegor), я сделал чуть по другому потому, что текст я хотел видеть и после DialogFreee:
Code: Select all
function GetItemText(const hDlg:THandle; ID:integer):PFarChar;
begin
GetMem(Result,(API.SendDlgMessage(hDlg,DM_GETTEXTLENGTH,ID,0)+1)*SizeOf(TFarChar));
API.SendDlgMessage(hDlg,DM_GETTEXTPTR,ID,LONG_PTR(Result));
end;
SimSU ··· ·· -- ··· ··-
-
- Posts: 1329
- Joined: Mon 04 Apr, 2005 13:41
- Location: San Ramon, CA / Kharkov, UA
- Has thanked: 32 times
- Been thanked: 61 times
Re: Учим меня писать плагины :)
Если вы сделали GetMem, то скорее вам нужно использовать DM_GETTEXT с соответствующей структурой FarDialogItemData в качестве параметра, а не DM_GETTEXTPTR. А сейчас каша какая-то...
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
Re: Учим меня писать плагины :)
При использовании DM_GETTEXT приходится использовать кроме GetMem еще и Move, это имхо лишнее... И (почему каша? ) этот вариант стабильно работает на различных системах и Фарах разных версий...Yegor wrote:Если вы сделали GetMem, то скорее вам нужно использовать DM_GETTEXT с соответствующей структурой FarDialogItemData в качестве параметра, а не DM_GETTEXTPTR. А сейчас каша какая-то...
Плиз, разъясни...
SimSU ··· ·· -- ··· ··-
-
- Posts: 1329
- Joined: Mon 04 Apr, 2005 13:41
- Location: San Ramon, CA / Kharkov, UA
- Has thanked: 32 times
- Been thanked: 61 times
Re: Учим меня писать плагины :)
Прошу прощения, не досмотрел, вы используете DM_GETTEXTPTR, а не DM_GETCONSTTEXTPTR. Все нормально.
Единственное что, можно проверить что длина не ноль, чтобы не вызывать лишний раз SendDlgMessage, да и GetMem тоже.
Единственное что, можно проверить что длина не ноль, чтобы не вызывать лишний раз SendDlgMessage, да и GetMem тоже.
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
-
- Posts: 3651
- Joined: Wed 23 Nov, 2005 11:11
- Location: Москва-Питер
- Has thanked: 2 times
- Been thanked: 19 times
Re: Учим меня писать плагины :)
Пока что да.SUSim wrote:А метасимволы "!.!" надо самому разбирать в ручную?
http://forum.farmanager.com/viewtopic.p ... 538#p68538