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

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
Ссылка на комментарий
Поделиться на другие сайты

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

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



Войти
  • Похожий контент

    • Elly
      От Elly
      Вопросы по работе форума следует писать сюда. Вопросы по модерированию, согласно правилам, сюда писать не следует.
      Ответ можно получить только на вопрос, который грамотно сформулирован и не нарушает правил\устава форума.
    • igrok52
      От igrok52
      Подскажите пожалуйста. Антивирусом касперского пользуюсь много лет с 3.0 версии как все работает понимаю на пк. Подскажите пожалуйста кто знает по поводу Антивируса для Android устройств, не разу не ставил и вообще в экосистеме андроида не очень разбираюсь. Купил планшет дочке, загрузчик разблокирован, что там поставили понятия не имею, все работает но боюсь что есть какие то закладки от "китайцев" и пока не проверю не успокоюсь. Поможет антивирус касперского для андроида найти закладки или что то что может быть типа как в телефонах в китайских были закладки от китайцев которые смс отправляли на странные номера (лет 5 назад была эпидемия что и кнопочные и смартфоны дешевые слали смс по ночам в неизвестном направлении, оказалось что прошивка была с вирусами). Или для андроида версия может проверять только apk и не сможет увидеть что в системе есть вредоносы? Если что планшет из нашего ретейла, подумать не мог что у нас в солидных магазинах будут продавать планшеты с китайской прошивкой с разблокированным загрузчиком (Lenovo Xiaoxin Pad Pro 12.7).
    • MiStr
      От MiStr
      Цикл интервью с экспертами "Лаборатории Касперского" сезона 2024 года возобновляется
       
      На прошедшей в стенах "Лаборатории Касперского"  встрече , приуроченной к 18-летию Kaspersky Club, участники клуба пообщались с Еленой Лесных, старшим продуктовым маркетологом в подразделении мобильных продуктов в продуктовом маркетинге B2C. Елена рассказала о том, как была усилена защита от киберугроз и мошенников в последних обновлениях мобильной версии Kaspersky и Kaspersky Who Calls.
       
      Выступление Елены и её коллеги Никиты вызвало большой интерес у участников клуба. Не все присутствующие на встрече смогли задать свои вопросы, не говоря уже про тех, кто не смог посетить офис "Лаборатории Касперского". Именно поэтому мы пригласили Елену ещё раз пообщаться с участниками клуба, на этот раз в формате онлайн
       
      @Lena_Lesnykh готова отвечать на вопросы участников клуба по 18 октября 2024 года включительно. Традиционно интервьюируемой будет выбран лучший вопрос, автор которого получит подарок от клуба. Вопросы можно начинать задавать уже сейчас.
       

       
       
    • pokrac
      От pokrac
      Давал ребенкоу поиграть в компьютер, что то скачивал, по итогу ночью открываю компьютер, а у меня все файлы с префиксом Lock. ничего не открывается, ну и смена обоев, с тг аккаунтом для решения вопроса
    • esc.tech
      От esc.tech
      Здравствуйте, я бы хотел у вас спросить, когда вы добавите в свой антивирус дополнительное сканирование файлов? Так как в последнее время люди уже начинают шифровать вирусы что делает его незамеченным и ваш антивирус не замечает его. 

×
×
  • Создать...