mauar
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Код из главной формы запуска формы поиска из библиотеки Код: procedure TTMSForm1.AdvGlowButton30Click(Sender: TObject); var LDllHandle : THandle; LProc : procedure; St1 : TSearchForText; St2 : procedure; begin LDLLHandle := loadLibrary ('Finds.dll'); // загружаю библиотеку в которой находится форма поиска if (LDLLHandle = 0) then begin ShowMessage ('Ошибка загрузки библиотеки!'); exit; end; try @LProc := GetProcAddress(LDllHandle, 'ShowFind'); // загружаем процедуру отображение @St1 := GetProcAddress(LDllHandle, 'SearchForText'); // загружаем функцию Поиска, @St2 := GetProcAddress(LDllHandle, 'Click'); // загружаем процедуру кликанье на кнопке поиск (НЕ РАБОТАЕТ Lproc; st2; finally FreeLibrary(LDllHandle); end; end; | Код из библиотеки: Код: library Finds; { Important note about DLL memory management: ShareMem must be the first unit in your library's USES clause AND your project's (select Project-View Source) USES clause if your DLL exports any procedures or functions that pass strings as parameters or function results. This applies to all strings passed to and from your DLL--even those that are nested in records and classes. ShareMem is the interface unit to the BORLNDMM.DLL shared memory manager, which must be deployed along with your DLL. To avoid using BORLNDMM.DLL, pass string information using PChar or ShortString parameters. } uses SysUtils, Classes, Find in 'Find.pas' {FindForm}; {$R *.res} exports ShowFind, // экспортирую процедуру отображение и загрузки формы поиска из dll SearchForText, // экспортирую функцию поиска по тексту AdvGlowButton2Click name 'Click'; // экспорт процедуры нажатия на кнопку, ВОТ ОНА И НЕ РАБОТАЕТ begin end. | Код из формы поиска находящияся в библиотеки: Код: unit Find; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, AdvTreeComboBox, ComCtrls, ExtCtrls, AdvPanel, AdvGlowButton; procedure ShowFind; // сдесь обьявляем процедуры и функции для будущего экспорта из dll procedure AdvGlowButton2Click(Sender: TObject); function SearchForText(RichEdit: TRichEdit; SearchText: string): Boolean; type TFindForm = class(TForm) AdvPanel19: TAdvPanel; PageControl1: TPageControl; TabSheet1: TTabSheet; TabSheet2: TTabSheet; TabSheet3: TTabSheet; TabSheet4: TTabSheet; TabSheet5: TTabSheet; TabSheet6: TTabSheet; TabSheet7: TTabSheet; TabSheet8: TTabSheet; AdvPanel1: TAdvPanel; AdvGlowButton1: TAdvGlowButton; AdvGlowButton2: TAdvGlowButton; Edit1: TEdit; procedure AdvGlowButton1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var FindForm: TFindForm; implementation uses MGOU_FIRE; {$R *.dfm} procedure ShowFind; begin FindForm := TFindForm.Create(Application); //создали форму FindForm.ShowModal; //показали в модальном режиме FindForm.Free; //форму закрыли - освобождаем память... end; {функция поиска текста} function SearchForText(RichEdit: TRichEdit; SearchText: string): Boolean; var StartPos, Position, EndPos : Integer; begin StartPos := 0; with RichEdit do begin Endpos := Length(RichEdit.Text); Lines.BeginUpdate; while FindText(SearchText, StartPos, Endpos, [])<>-1 do begin Position := FindText(SearchText, StartPos, Endpos, []); Endpos := Length(RichEdit.Text) - startpos; Inc(StartPos, Length(SearchText)); SetFocus; SelStart := Position; RichEdit.Perform(EM_SCROLLCARET, 0, 0); SelLength := Length(SearchText); end; Lines.EndUpdate; end; end; {Выполняем поиск по текущей активной вкладки из главной формы программы} procedure AdvGlowButton2Click(Sender: TObject); begin case TMSForm1.PageControl1.ActivePage.TabIndex of 2: SearchForText(TMSForm1.RichEdit1 , TMSForm1.Edit1.Text); 3: SearchForText(TMSForm1.RichEdit2 , TMSForm1.Edit1.Text); 4: SearchForText(TMSForm1.RichEdit3 , TMSForm1.Edit1.Text); 5: SearchForText(TMSForm1.RichEdit4 , TMSForm1.Edit1.Text); 8: SearchForText(TMSForm1.RichEdit6 , TMSForm1.Edit1.Text); 9: SearchForText(TMSForm1.RichEdit5 , TMSForm1.Edit1.Text); 11: SearchForText(TMSForm1.RichEdit7 , TMSForm1.Edit1.Text); 12: SearchForText(TMSForm1.RichEdit8 , TMSForm1.Edit1.Text); 14: SearchForText(TMSForm1.RichEdit9 , TMSForm1.Edit1.Text); 15: SearchForText(TMSForm1.RichEdit10 , TMSForm1.Edit1.Text); 17: SearchForText(TMSForm1.RichEdit11 , TMSForm1.Edit1.Text); 18: SearchForText(TMSForm1.RichEdit12 , TMSForm1.Edit1.Text); 45: SearchForText(TMSForm1.RichEdit13 , TMSForm1.Edit1.Text); 47: SearchForText(TMSForm1.RichEdit14 , TMSForm1.Edit1.Text); 48: SearchForText(TMSForm1.RichEdit15 , TMSForm1.Edit1.Text); end; end; {Закрываем окно поиска} procedure TFindForm.AdvGlowButton1Click(Sender: TObject); begin close; end; end. | Теоретически, тут должно все работать, но что то не работает. Прикол в том что на главной форме TMSForm1 расположенно 18 вкладок компонента PageControl , и на каждой из этих вкладок расположен RichEdit в котором загружен текст a .rtf формате, по идее все должно работать, если не из dll форма подгружается а просто в пакете проекта то все отлично работает. Весь день долбаюсь с ней так и не получается ничего.
используем тег more | Всего записей: 134 | Зарегистр. 31-07-2006 | Отправлено: 23:26 23-05-2009 | Исправлено: ShIvADeSt, 14:51 24-05-2009 |
|