Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 4

Модерирует : ShIvADeSt

ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

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
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 4
ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru