Перейти к содержанию

1001 и 1 вопрос по Дельфи


Apollon

Рекомендуемые сообщения

Пожалуйста User только незабуть в uses подключить модуль ShellAPI если раньше этого не сделал

Подключил - всё летает :D хм... только вот с дизайном осталось доработать :D

Еще вопрос:

Решил отказатся от Хелп дока, а решил сделать обычный реадме в тхт расширений, вопрос - можно ли сделать так же кнопку чтобы он открывал текстовый файл который будет лежать рядом с ехе файлом ?

Ссылка на комментарий
Поделиться на другие сайты

Еще вопрос:

Решил отказатся от Хелп дока, а решил сделать обычный реадме в тхт расширений, вопрос - можно ли сделать так же кнопку чтобы он открывал текстовый файл который будет лежать рядом с ехе файлом ?

Все таки лучше конечно HTML Help - CHМ, но дело твое. Я только не понял где именно хочешь что бы открывалось твая справка в самой твоей программе например в memo или открывалась в блокноте?

Если в блокноте то аналогично вызову командной строки

WinExec('notepad.exe 1.txt',sw_shownormal);

где 1.txt - файл справки

Ссылка на комментарий
Поделиться на другие сайты

Если в блокноте то аналогично вызову командной строки

Да именно так :rolleyes: спасибо :)

 

 

 

Еще вопрос, вот есть окошко т.е. Form1, как сделать чтобы при нажатий на кнопку "Найти файл" - выходило второе окошко Form2 ?

 

WinExec('notepad.exe 1.txt',sw_shownormal);

да и еще вот с помощью команды winexec можно вызывать нотпад или же консоль, а вот fail.bat - который тоже будет лежать рядом с ехе файлом, вызывать его так же можно или нужна другая команда?

Ссылка на комментарий
Поделиться на другие сайты

Еще вопрос, вот есть окошко т.е. Form1, как сделать чтобы при нажатий на кнопку "Найти файл" - выходило второе окошко Form2 ?

Очень просто в Delphi меню File - New - Form и в обработчики кнопки Найти файл пишешь

procedure TForm1.Button2Click(Sender: TObject);
begin
Form2.ShowModal;
end

 

да и еще вот с помощью команды winexec можно вызывать нотпад или же консоль, а вот fail.bat - который тоже будет лежать рядом с ехе файлом, вызывать его так же можно или нужна другая команда?

Да также

WinExec('fail.bat',sw_shownormal);

Изменено пользователем kilo
Ссылка на комментарий
Поделиться на другие сайты

Раз уж тут про Делфи разговор, тоже хотелось бы кое о чем попросить. Мне нужно побольше информации по написанию и работе с DLLками на Делфи. А то как-то рунет беден на эту информацию, описывается лишь базовый уровень.

Ссылка на комментарий
Поделиться на другие сайты

Да нет, инфы вроде достаточно... особенно если учесть, что по этому вопросу (работе с ДЛЛ в делфях) особо и знать-то нечего, кроме типов линковки (статическая/динамическая), 2 штуки апи (LoadLibrary и GetProcAddress), передачи строк (либо PChar, либо String с включением ShareMem) и директивы far :rolleyes:

Ссылка на комментарий
Поделиться на другие сайты

Это и у меня есть. Вроде про директиву far, правда, не слышал. Можно подробнее?

 

И еще. Нашел какую-то статью, где управляются объекты из dll. С используемой в примере канвой формы все нормально. А вот с изменением свойств сторонних компонент, в частности SynEdit, во время выполнения на этапе freelibrary ошибка вылазит.

Ссылка на комментарий
Поделиться на другие сайты

Вроде про директиву far, правда, не слышал. Можно подробнее?
Стандартная директива объявления процедуры при статической линковке.

 

И еще. Нашел какую-то статью, где управляются объекты из dll. С используемой в примере канвой формы все нормально. А вот с изменением свойств сторонних компонент, в частности SynEdit, во время выполнения на этапе freelibrary ошибка вылазит.
Так надо смотреть, что загружается библиотекой, какие объекты, раздел инициализации... и корректно это выгружать.
Ссылка на комментарий
Поделиться на другие сайты

Стандартная директива объявления процедуры при статической линковке.

Ах, это. Тогда понятно.

 

Так надо смотреть, что загружается библиотекой, какие объекты, раздел инициализации... и корректно это выгружать.

Библиотека подключается динамически. В библиотеке функция типа:

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, то ошибки нет. Если оставить, как есть, вылетает ошибка.

 

Может надо что-то добавить. Я пока тесно с библиотеками пока не работал, поэтому не знаю.

Ссылка на комментарий
Поделиться на другие сайты

1. Что за ошибка?

2. "Косяка" в приведённом коде не вижу. Он может быть в библиотеке. В lib.dpr и связанных модулях есть секции финализации?

Ссылка на комментарий
Поделиться на другие сайты

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.

Ссылка на комментарий
Поделиться на другие сайты

Ta2i4 а что в самом модуле SynEdit? :rolleyes:

 

Совет: для функции PlugExec в качестве параметра передавать не объект (TSynEdit), а указатель на него (^TSynEdit).

 

Для проверки вставь в библиотеку функцию вида "function xxx (dummy:byte): boolean; begin messagebeep (не помню параметры) end;", убери из модулей синэдит и проверь её вызов. Если ошибки не будет - значит дело в синэдите 8)

Ссылка на комментарий
Поделиться на другие сайты

Ta2i4 а что в самом модуле SynEdit? :good:

Это VCL-компонент :)

 

для функции PlugExec в качестве параметра передавать не объект (TSynEdit), а указатель на него (^TSynEdit).

Попробую

 

Если ошибки не будет - значит дело в синэдите 8)

Вызов функций такого рода нормальный. Наверно все-таки компонент такой противный, хочет, чтобы им только из самого приложения издевались.

Изменено пользователем Ta2i4
Ссылка на комментарий
Поделиться на другие сайты

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
×
×
  • Создать...