Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2009, 09:46   #1
a_n_n_a
Форумчанин
 
Регистрация: 06.03.2009
Сообщений: 157
По умолчанию подсчет количества символов через dll

Здравствуйте=) Я опять с dll=) надо посчитать количествоа символов в МЕМО через dll=)
У меня есть Главная форма, Dll и форма в ней=) На главной форме Memo и кнопка подсчета, которая вызывает форму dll.
Вот код:
Dll
Код:
library dllforms;

uses
  SysUtils,
  Classes,
  Forms,
  DllFormUnit in 'DllFormUnit.pas' {Form2};

{$R *.res}
  
function ShowForm2 : Integer; stdcall;
var Form2 : TForm2;
begin 
  Form2 := TForm2.Create(Application);
  Result := Form2.ShowModal;
  Form2.Free;
end;  

exports ShowForm2;
begin
end.
Форма в ней:
Код:
unit DllFormUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Button1: TButton;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;
implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
var  i,k,w,b: integer;
begin
   k:=Form1.Memo1.Lines.Count-1;
   w:=0;
   for i:= 0 to k do
   begin
       b:=IntToStr(Length(Memo1.Lines.Text));      
       for j:=1 to b do
       begin
          if Pos(Edit1.Text, Form1.Memo1.Lines[i,j])>0 then
          w:=w+1;
       end;
   end;
   Label2.Caption:='Количество вхождений символа '+Edit1.Text+ 
   'равно '+IntToStr(w);
   Edit1.Text:='';
end;

end;

end.
Моя форма обращается (должна=)) к вызывающей, к полю MEMO и считае кол-во строк, символов.
Я знаю. что процедура неправильная..... Как правильно обратиться в МЕМО???
a_n_n_a вне форума Ответить с цитированием
Старый 14.05.2009, 09:57   #2
fbus
Форумчанин
 
Аватар для fbus
 
Регистрация: 23.10.2008
Сообщений: 460
По умолчанию

не понял почему объявлена форма2
Код:
var
  Form2: TForm2;
а обращаетесь к форме1?

Код:
k:=Form1.Memo1.Lines.Count-1;
если мемо на другой форме то нужно включить это тюнит в раздел uses после {$R *.dfm}
Код:
Uses Unit1;
тут
Код:
  b:=IntToStr(Length(Memo1.Lines.Text));
работать не будет. Length - это Integer. b объявлена как integer. Так что
Код:
  b:=Length(Form1.Memo1.Lines.Text);
кстати если нужно просто узнать сколько символов в memo можно воспользоваться просто:
Код:
var a:integer;
...
a:=Length(Memo1.text);
...

Последний раз редактировалось Stilet; 14.05.2009 в 11:25.
fbus вне форума Ответить с цитированием
Старый 14.05.2009, 11:09   #3
a_n_n_a
Форумчанин
 
Регистрация: 06.03.2009
Сообщений: 157
По умолчанию

вот изменила процедуру.....
Все равно не считает.... ругается=)))
Код:
procedure TForm2.Button1Click(Sender: TObject);
var  i,k,j,w,b: integer;
begin
   k:=Length(Form1.Memo1.text);
   w:=0;
   for i:= 0 to k do   {количкство строк}
   begin
         if Pos(Edit1.Text, Form1.Memo1.Lines[i])>0 then
         w:=w+1;
   end;
   Label1.Caption:='Количество вхождений символа '+Edit1.Text+' рано '+IntToStr(w);
   Edit1.Text:='';
end;
a_n_n_a вне форума Ответить с цитированием
Старый 14.05.2009, 11:27   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ругается=)))
Какими словами?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.05.2009, 11:58   #5
a_n_n_a
Форумчанин
 
Регистрация: 06.03.2009
Сообщений: 157
По умолчанию

Access violation at address 00380136 in module 'dllforms.dll'. Read of address 000002F8 - во как=))))))
a_n_n_a вне форума Ответить с цитированием
Старый 14.05.2009, 12:25   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Аня, прикрепи сюда архив проекта, ато навскидку так сказать не всегда удается, учитывая что с контролами в ДЛЛ нужно работать осторожно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.05.2009, 12:42   #7
a_n_n_a
Форумчанин
 
Регистрация: 06.03.2009
Сообщений: 157
По умолчанию

Вот мое "творение"=)
Вложения
Тип файла: rar Зад 3.rar (331.6 Кб, 7 просмотров)
a_n_n_a вне форума Ответить с цитированием
Старый 14.05.2009, 13:43   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Аня, вот я твой код подправил, но думаю что стоило бы по другому тебе делать:
Форма ДЛЛ:
Код:
unit DllFormUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
   m:pchar;
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

Uses Unit1;
           {o-}
procedure TForm2.Button1Click(Sender: TObject);
var  i,k,j,w,b: integer; s:string;mm:TStringList;
begin
//  s:=Form1.Memo1.text;
mm:=TStringList.Create;
 Edit1.Text:=m;
mm.Text:=m;
   k:=Length(m);
   w:=0;
   for i:= 0 to mm.Count-1 do
   begin
         if Pos(Edit1.Text, mm[i])>0 then
         w:=w+1;
   end;

   Label1.Caption:='Количество вхождений символа '+Edit1.Text+' рано '+IntToStr(w);
   Edit1.Text:='';
mm.Free;
end;

end.
Проект
Код:
function ShowForm2(am:pchar) : Integer; stdcall; external 'dllforms.dll';

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
begin
     ShowForm2(pchar(Memo1.Text));
end;
ДЛЛ:
Код:
function ShowForm2(am:pchar) : Integer; stdcall;
var Form2 : TForm2;
begin
  Form2 := TForm2.Create(Application);
  form2.m:=am;
  Result := Form2.ShowModal;
  Form2.Free;
end;
Насколько я понял твою задачу можно ее решить проще.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.05.2009, 14:33   #9
a_n_n_a
Форумчанин
 
Регистрация: 06.03.2009
Сообщений: 157
По умолчанию

ShowForm2(pchar(Memo1.Text));
ошибку почему то показывает на этом слове=)))
a_n_n_a вне форума Ответить с цитированием
Старый 14.05.2009, 14:50   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну и когда мы признаем отсутствие телепатических возможностей у месного населения?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчет количества слов предложении Милашка000 Общие вопросы C/C++ 2 24.04.2009 20:02
Подсчет количества открытий файла Maxx Microsoft Office Excel 6 27.01.2009 16:53
Подсчет общего количества студентов NikolayGVB Microsoft Office Excel 4 19.01.2009 19:10
Подсчет количества и частоты Ensoph Помощь студентам 6 08.05.2008 10:16
Подсчет количества заданных символов в строке Mihailo Помощь студентам 3 23.12.2007 11:58