Apollon Опубликовано 4 октября, 2009 Автор Поделиться Опубликовано 4 октября, 2009 Пожалуйста User только незабуть в uses подключить модуль ShellAPI если раньше этого не сделал Подключил - всё летает хм... только вот с дизайном осталось доработать Еще вопрос: Решил отказатся от Хелп дока, а решил сделать обычный реадме в тхт расширений, вопрос - можно ли сделать так же кнопку чтобы он открывал текстовый файл который будет лежать рядом с ехе файлом ? Ссылка на комментарий Поделиться на другие сайты Поделиться
kilo Опубликовано 4 октября, 2009 Поделиться Опубликовано 4 октября, 2009 Еще вопрос:Решил отказатся от Хелп дока, а решил сделать обычный реадме в тхт расширений, вопрос - можно ли сделать так же кнопку чтобы он открывал текстовый файл который будет лежать рядом с ехе файлом ? Все таки лучше конечно HTML Help - CHМ, но дело твое. Я только не понял где именно хочешь что бы открывалось твая справка в самой твоей программе например в memo или открывалась в блокноте? Если в блокноте то аналогично вызову командной строки WinExec('notepad.exe 1.txt',sw_shownormal); где 1.txt - файл справки Ссылка на комментарий Поделиться на другие сайты Поделиться
Apollon Опубликовано 4 октября, 2009 Автор Поделиться Опубликовано 4 октября, 2009 Если в блокноте то аналогично вызову командной строки Да именно так спасибо Еще вопрос, вот есть окошко т.е. Form1, как сделать чтобы при нажатий на кнопку "Найти файл" - выходило второе окошко Form2 ? WinExec('notepad.exe 1.txt',sw_shownormal); да и еще вот с помощью команды winexec можно вызывать нотпад или же консоль, а вот fail.bat - который тоже будет лежать рядом с ехе файлом, вызывать его так же можно или нужна другая команда? Ссылка на комментарий Поделиться на другие сайты Поделиться
kilo Опубликовано 4 октября, 2009 Поделиться Опубликовано 4 октября, 2009 (изменено) Еще вопрос, вот есть окошко т.е. Form1, как сделать чтобы при нажатий на кнопку "Найти файл" - выходило второе окошко Form2 ? Очень просто в Delphi меню File - New - Form и в обработчики кнопки Найти файл пишешь procedure TForm1.Button2Click(Sender: TObject); begin Form2.ShowModal; end да и еще вот с помощью команды winexec можно вызывать нотпад или же консоль, а вот fail.bat - который тоже будет лежать рядом с ехе файлом, вызывать его так же можно или нужна другая команда? Да также WinExec('fail.bat',sw_shownormal); Изменено 4 октября, 2009 пользователем kilo Ссылка на комментарий Поделиться на другие сайты Поделиться
Apollon Опубликовано 4 октября, 2009 Автор Поделиться Опубликовано 4 октября, 2009 kilo Огромное спасибо Ссылка на комментарий Поделиться на другие сайты Поделиться
Ta2i4 Опубликовано 4 октября, 2009 Поделиться Опубликовано 4 октября, 2009 Раз уж тут про Делфи разговор, тоже хотелось бы кое о чем попросить. Мне нужно побольше информации по написанию и работе с DLLками на Делфи. А то как-то рунет беден на эту информацию, описывается лишь базовый уровень. Ссылка на комментарий Поделиться на другие сайты Поделиться
C. Tantin Опубликовано 4 октября, 2009 Поделиться Опубликовано 4 октября, 2009 Да нет, инфы вроде достаточно... особенно если учесть, что по этому вопросу (работе с ДЛЛ в делфях) особо и знать-то нечего, кроме типов линковки (статическая/динамическая), 2 штуки апи (LoadLibrary и GetProcAddress), передачи строк (либо PChar, либо String с включением ShareMem) и директивы far Ссылка на комментарий Поделиться на другие сайты Поделиться
Ta2i4 Опубликовано 4 октября, 2009 Поделиться Опубликовано 4 октября, 2009 Это и у меня есть. Вроде про директиву far, правда, не слышал. Можно подробнее? И еще. Нашел какую-то статью, где управляются объекты из dll. С используемой в примере канвой формы все нормально. А вот с изменением свойств сторонних компонент, в частности SynEdit, во время выполнения на этапе freelibrary ошибка вылазит. Ссылка на комментарий Поделиться на другие сайты Поделиться
C. Tantin Опубликовано 5 октября, 2009 Поделиться Опубликовано 5 октября, 2009 Вроде про директиву far, правда, не слышал. Можно подробнее?Стандартная директива объявления процедуры при статической линковке. И еще. Нашел какую-то статью, где управляются объекты из dll. С используемой в примере канвой формы все нормально. А вот с изменением свойств сторонних компонент, в частности SynEdit, во время выполнения на этапе freelibrary ошибка вылазит.Так надо смотреть, что загружается библиотекой, какие объекты, раздел инициализации... и корректно это выгружать. Ссылка на комментарий Поделиться на другие сайты Поделиться
Ta2i4 Опубликовано 5 октября, 2009 Поделиться Опубликовано 5 октября, 2009 Стандартная директива объявления процедуры при статической линковке. Ах, это. Тогда понятно. Так надо смотреть, что загружается библиотекой, какие объекты, раздел инициализации... и корректно это выгружать. Библиотека подключается динамически. В библиотеке функция типа: function PlugExec(Syn: TSynEdit): Boolean; begin Syn.SelText := WideUpperCase(Syn.SelText); Result := True; end А код вызова функции из библиотеки примерно такой: procedure TForm1.PlugExecItemClick(sender: TObject); var PlugExec: function(Syn : TSynEdit): Boolean; fHnd: THandle; begin fHnd := LoadLibrary(PChar('C:\test\lib.dll')); if fHnd <> 0 then begin @PlugExec := GetProcAddress(fHnd, 'PlugExec'); PlugExec(SynEdit1); //FreeLibrary(fHnd); //ставил также FreeLibrary сюда - результат тот же end; FreeLibrary(fHnd); end; Если закомментить строчку с FreeLibrary, то ошибки нет. Если оставить, как есть, вылетает ошибка. Может надо что-то добавить. Я пока тесно с библиотеками пока не работал, поэтому не знаю. Ссылка на комментарий Поделиться на другие сайты Поделиться
C. Tantin Опубликовано 5 октября, 2009 Поделиться Опубликовано 5 октября, 2009 1. Что за ошибка? 2. "Косяка" в приведённом коде не вижу. Он может быть в библиотеке. В lib.dpr и связанных модулях есть секции финализации? Ссылка на комментарий Поделиться на другие сайты Поделиться
Ta2i4 Опубликовано 5 октября, 2009 Поделиться Опубликовано 5 октября, 2009 1. Точно текст сообщения не помню. Но что-то типа неправильного чтения памяти по адресу 0x00... 2. Код самой библиотеки: library Test; uses Windows, SysUtils, SynEdit; function PlugExec(Syn: TSynEdit): Boolean; begin Syn.SelText := WideUpperCase(Syn.SelText); Result := True; end; exports PlugExec; begin end. Ссылка на комментарий Поделиться на другие сайты Поделиться
C. Tantin Опубликовано 5 октября, 2009 Поделиться Опубликовано 5 октября, 2009 Ta2i4 а что в самом модуле SynEdit? Совет: для функции PlugExec в качестве параметра передавать не объект (TSynEdit), а указатель на него (^TSynEdit). Для проверки вставь в библиотеку функцию вида "function xxx (dummy:byte): boolean; begin messagebeep (не помню параметры) end;", убери из модулей синэдит и проверь её вызов. Если ошибки не будет - значит дело в синэдите 8) Ссылка на комментарий Поделиться на другие сайты Поделиться
Ta2i4 Опубликовано 5 октября, 2009 Поделиться Опубликовано 5 октября, 2009 (изменено) Ta2i4 а что в самом модуле SynEdit? Это VCL-компонент для функции PlugExec в качестве параметра передавать не объект (TSynEdit), а указатель на него (^TSynEdit). Попробую Если ошибки не будет - значит дело в синэдите 8) Вызов функций такого рода нормальный. Наверно все-таки компонент такой противный, хочет, чтобы им только из самого приложения издевались. Изменено 5 октября, 2009 пользователем Ta2i4 Ссылка на комментарий Поделиться на другие сайты Поделиться
starik Опубликовано 5 октября, 2009 Поделиться Опубликовано 5 октября, 2009 p.s. ну крутые хацкеры юзают PEB Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти