Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.05.2008, 00:45
Iljusha Iljusha вне форума
Прохожий
 
Регистрация: 01.05.2008
Сообщения: 10
Репутация: 10
По умолчанию Поиск в Memo по заданной строке поиска

Плииииз. Помогите решить... Времени катастрофически не хватает....
Поиск.Разместить на форме компонентов Memo,два компонента Edit и компонет Button .Компонет Memo ипользуйте для ввода массива строк, первый компонент Edit-для задания строки поиска, второй компонет Edit-для ввода результата поиска (Yes,No).Для инициализации поиска используйте компонет Button .Используйте другие необходимые компоненты(Label и др.)
Ответить с цитированием
  #2  
Старый 01.05.2008, 01:01
shaman shaman вне форума
Новичок
 
Регистрация: 19.07.2007
Сообщения: 65
Репутация: 5
По умолчанию

Код:
procedure TForm1.Button9Click(Sender: TObject);
begin
 FindDialog1.Execute;
end;

procedure TForm1.FindDialog1Find(Sender: TObject);
var
 Buff,P,FT: PChar;
 BuffLen: Word;
begin
 with Sender as TFindDialog do
  begin
   GetMem(FT, Length(FindText) + 1);
   StrPCopy(FT, FindText);
   BuffLen:= Memo1.GetTextLen + 1;
   GetMem(Buff, BuffLen);
   Memo1.GetTextBuf(Buff, BuffLen);
   P:= Buff + Memo1.SelStart + Memo1.SelLength;
   P:= StrPos(P, FT);
   if P=nil then MessageBeep(0)
   else
    begin
     Memo1.SelStart:= P - Buff;
     Memo1.SelLength:= Length(FindText);
    end;
   FreeMem(FT, Length(FindText) + 1);
   FreeMem(Buff, BuffLen);
  end;
end;

Последний раз редактировалось Admin, 01.05.2008 в 20:26.
Ответить с цитированием
  #3  
Старый 01.05.2008, 01:07
Iljusha Iljusha вне форума
Прохожий
 
Регистрация: 01.05.2008
Сообщения: 10
Репутация: 10
По умолчанию

Сенкс. а как это собрать воедино?
Ответить с цитированием
  #4  
Старый 01.05.2008, 01:14
shaman shaman вне форума
Новичок
 
Регистрация: 19.07.2007
Сообщения: 65
Репутация: 5
По умолчанию

Вот исходник, там есть пример

Text_Editor.zip
Ответить с цитированием
  #5  
Старый 01.05.2008, 01:19
Iljusha Iljusha вне форума
Прохожий
 
Регистрация: 01.05.2008
Сообщения: 10
Репутация: 10
По умолчанию

не, это немножко не то. я так понял из условия задачи, должно присутствовать всего 3 поля ввода: 2 Edit и 1 Memo. Memo заполняется произвольным текстом, в edit1 заносится слово, которое надо найти и после нажатия на кнопку во втором поле edit будет ответ Y/N взависимости от того, присутствует ли в тексте данное слово.
Ответить с цитированием
  #6  
Старый 01.05.2008, 01:21
shaman shaman вне форума
Новичок
 
Регистрация: 19.07.2007
Сообщения: 65
Репутация: 5
По умолчанию

findtext:=edit1.text; - то что ищем
Ответить с цитированием
  #7  
Старый 01.05.2008, 01:29
Iljusha Iljusha вне форума
Прохожий
 
Регистрация: 01.05.2008
Сообщения: 10
Репутация: 10
По умолчанию

ну это понятно вроде, но дело в том, что я не умею пока работать с объектами, классами и методами. В книгах пишут слишком трудно для восприятия. Соответственно я любой код не смогу вставить в проект так, что бы он работал....
Вам персональное сообщение....
**********
пока пришел только к этому, но поле Memo не заполняется.. Почему?
Код:
 
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Label1: TLabel;
  private
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure InsertFileInMemo1(Memo1: TMemo; FileName: string;
  ReplaceSel: Boolean);
var
  Stream: TMemoryStream;
  NullTerminator: Char;
begin
  Stream := TMemoryStream.Create;
  try
    { Загружаем текст... }
    Stream.LoadFromFile('1.txt');

    { Добавляем в конец текста терминирующий ноль... }
    Stream.Seek(0, 2);
    NullTerminator := #0;
    Stream.Write(NullTerminator, 1);

    { Вставляем текст в Memo... }
    if not ReplaceSel then
      Memo1.SelLength := 0;
    SendMessage(Memo1.Handle, EM_ReplaceSel, 1,
      LongInt(Stream.Memory));
  finally
    Stream.Free;
  end;
end;
end.
Вот что еще нашел в материалах сайта:
Код:
function SearchForText_AndSelect(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, [stMatchCase])<>-1 do 
    begin 
      Endpos   := Length(RichEdit.Text) - startpos; 
      Position := FindText(SearchText, StartPos, Endpos, [stMatchCase]); 
      Inc(StartPos, Length(SearchText)); 
      SetFocus; 
      SelStart  := Position; 
      SelLength := Length(SearchText); 
    end; 
    Lines.EndUpdate; 
  end; 
end; 


procedure TForm1.Button1Click(Sender: TObject); 
begin 
  SearchForText_AndSelect(RichEdit1, 'Some Text'); 
end;
Вопрос будет в следующем, как вот это надо прикрутить к первому (мемо), что бы всё работало?
...Уже битый час ломаю голову...

Последний раз редактировалось Iljusha, 01.05.2008 в 03:23.
Ответить с цитированием
  #8  
Старый 01.05.2008, 04:03
Iljusha Iljusha вне форума
Прохожий
 
Регистрация: 01.05.2008
Сообщения: 10
Репутация: 10
Печаль

Большая просьба не игнорировать... Для профи - дело 5и минут, ддля новичка - неделя изучения литературы.. А сдавать уже завтра..
"Подтолкните" хотя бы в нужном направлении..
Ответить с цитированием
  #9  
Старый 01.05.2008, 20:17
Аватар для Admin
Admin Admin вне форума
Администратор
 
Регистрация: 03.10.2005
Адрес: Россия, Москва
Сообщения: 1,551
Версия Delphi: Delphi 7
Репутация: выкл
По умолчанию

Цитата:
Сообщение от shaman
procedure TForm1.Button9Click(Sender: TObject);
begin
FindDialog1.Execute;
end;


procedure TForm1.FindDialog1Find(Sender: TObject);
var
Buff,P,FT: PChar;
BuffLen: Word;
begin
with Sender as TFindDialog do
begin
GetMem(FT, Length(FindText) + 1);
StrPCopy(FT, FindText);
BuffLen:= Memo1.GetTextLen + 1;
GetMem(Buff, BuffLen);
Memo1.GetTextBuf(Buff, BuffLen);
P:= Buff + Memo1.SelStart + Memo1.SelLength;
P:= StrPos(P, FT);
if P=nil then MessageBeep(0)
else
begin
Memo1.SelStart:= P - Buff;
Memo1.SelLength:= Length(FindText);
end;
FreeMem(FT, Length(FindText) + 1);
FreeMem(Buff, BuffLen);
end;
end;
Admin: Недельный бан за несоблюдение правил форума, пункт 2.8.
Ответить с цитированием
  #10  
Старый 01.05.2008, 23:44
Iljusha Iljusha вне форума
Прохожий
 
Регистрация: 01.05.2008
Сообщения: 10
Репутация: 10
По умолчанию

...Человек помочь хотел...

Последний раз редактировалось Iljusha, 02.05.2008 в 07:03.
Ответить с цитированием
  #11  
Старый 02.05.2008, 07:02
Iljusha Iljusha вне форума
Прохожий
 
Регистрация: 01.05.2008
Сообщения: 10
Репутация: 10
По умолчанию

вобщем я вот так сделал. Думаю тему можно закрывать:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
   function ListContained(st: string; StList: TStrings): boolean;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
function Tform1.ListContained(st: string; StList: TStrings): boolean;
var
  i: longint;
begin
  result := false;
  for i := 0 to StList.Count - 1 do
    if St = StList.Strings[i] then
    begin
      result := true;
      break
    end
end;

procedure TForm1.Button1Click(Sender: TObject);
var
ss:boolean;
a:string;
begin
a:=Edit1.Text;
 ss:=ListContained(a, Memo1.Lines);
 if ss=TRUE then
 begin
 Edit2.Text:='Yes';
 end
 Else Edit2.Text:='No';

 end;

end.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:18.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025