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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2011, 18:38   #1
casio23
Форумчанин
 
Аватар для casio23
 
Регистрация: 29.12.2010
Сообщений: 186
По умолчанию Проблема по поиску

Написал типа справочника, короче на форме ListView,Memo1,ComboBox,Edit(10шт.) ,Buton,Edit_Pole

в крации о работе программы, Memo - загружен текст, ListView - отображает 1ю строку из мемо (ФИО), ComboBox - выбор-список что нужно найти (ФИО,номер тел и т.д) EditPoisk - текст который нужно найти

вот как я делаю
Код:
procedure TKatalog.SearshPole;
var
      Find:string; 
      i:integer;
      Itog : integer;
      LineNum: longint; // номер строки
      CharsBeforeLine: longint;
      rct:TRECT;
      b: integer;
      coun : integer;
const LVM_GETITEMRECT=4110;  LVIR_BOUNDS=0;
begin
coun:= 0;
    if ComboBox_Pole.ItemIndex = 0 then coun := ;//ФИО
    if ComboBox_Pole.ItemIndex = 1 then coun := ;//Номер тел
    if ComboBox_Pole.ItemIndex = 2 then coun := ;//Дом тел
    if ComboBox_Pole.ItemIndex = 3 then coun := ;//Адрес
    if ComboBox_Pole.ItemIndex = 4 then coun := 18;//стать
    if ComboBox_Pole.ItemIndex = 5 then coun := 8;//сколько лет
    if ComboBox_Pole.ItemIndex = 6 then coun := 19;//семейное положение
    if ComboBox_Pole.ItemIndex = 7 then coun := 2;//сколько детей
    if ComboBox_Pole.ItemIndex = 8 then coun := ;//служба в армии
    if ComboBox_Pole.ItemIndex = 9 then coun := ;//места отдыха
    if ComboBox_Pole.ItemIndex = 10 then coun := ;//место работы

     find := Edit_Pole.Text; // Записываем в find текст из Edit

  For i := 0 to memo1.Lines.Count - 1 do // Запускаем цикл поиска строки
begin
  If  Pos(FIND, memo1.Lines.Text) <> 0 Then
Begin
      memo1.SetFocus();
      memo1.SelStart := Pos(FIND,memo1.Lines.Text) - 1;
      memo1.SelLength := Length(FIND);}
      LineNum := SendMessage(memo1.Handle, EM_LINEFROMCHAR, memo1.SelStart,0);{посылка сообщения, возвращающая номер строки}
      CharsBeforeLine := SendMessage(memo1.Handle, EM_LINEINDEX, LineNum, 0);{посылка сообщения, возвращающая номер столбца}
      Label1.Caption := 'Line ' + IntToStr(LineNum - coun);{вывод номера строки}
      itog := LineNum -coun;
      Label2.Caption := 'Position ' + 
IntToStr((memo1.SelStart -CharsBeforeLine) + 1);{вывод номера столбца}
      Label3.Caption := Basa_StringList.Lines[itog];
end;
   end;
//поиск по ListView
    for b:=0 to ListView.Items.Count-1  do
begin
    If pos(Label3.Caption, ListView.Items[b].Caption)>0 then
begin
       ListView.Selected:=ListView.Items[b];
       rct.Left:=0;
       SendMessage(ListView.Handle,LVM_GETITEMRECT,0,integer(@rct));
       ListView.Scroll(0,(b-ListView_Basa.TopItem.Index)*(rct.Bottom-rct.Top));
       ListViewClick(Self);
    end  else ListView.Items[b].Selected := False;
  end;

Цитата:
так вот, столкнулся с проблемой что если есть одинаковые строки в мемо то он дальше не ищет, подскажите как это сделать?


Цитата:
FindDialog уже смотрел не понравился

Последний раз редактировалось casio23; 13.02.2011 в 18:40. Причина: .
casio23 вне форума Ответить с цитированием
Старый 13.02.2011, 19:58   #2
niki2012
Пользователь
 
Аватар для niki2012
 
Регистрация: 03.01.2011
Сообщений: 64
По умолчанию

Не знаю поможет ли Вам, но поиск в строке можно осуществлять с помощью функции pos(имя_строки, что_ищем) (если не найдено, возвращает 0, иначе позицию искомого в строке). Вопрос не совсем понял - Вам нужно чтобы он искал дальше или нет? Если нет - используйте break для выхода из цикла.
Программист - это не тот, кто пишет программы, а тот, чьи программы работают.
niki2012 вне форума Ответить с цитированием
Старый 13.02.2011, 20:46   #3
casio23
Форумчанин
 
Аватар для casio23
 
Регистрация: 29.12.2010
Сообщений: 186
По умолчанию

Цитата:
Сообщение от niki2012 Посмотреть сообщение
Не знаю поможет ли Вам, но поиск в строке можно осуществлять с помощью функции pos(имя_строки, что_ищем) (если не найдено, возвращает 0, иначе позицию искомого в строке). Вопрос не совсем понял - Вам нужно чтобы он искал дальше или нет? Если нет - используйте break для выхода из цикла.
Я использую Pos, да мне нужно что бы поиск продолжался дальше, а то он выделил в мемо что нашел первый раз и все и останавливается
casio23 вне форума Ответить с цитированием
Старый 13.02.2011, 21:14   #4
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Код:
while eof do
цикл закончица тогда когда доидет до конца текста, почитаи в инете больше
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 13.02.2011, 21:55   #5
casio23
Форумчанин
 
Аватар для casio23
 
Регистрация: 29.12.2010
Сообщений: 186
По умолчанию

я практически сделал, поиск правда не хотелось использовать FindDialog, но
пришлось, только вот проблемка прошелся я по строкам нашел то что нужно, и как только доходит к концу все поиск прекращается, а как сделать что бы он и вверх искал?
вот функция по какой я обрабатываю поиск
http://www.delphisources.ru/pages/fa...tr_search.html
casio23 вне форума Ответить с цитированием
Старый 13.02.2011, 22:02   #6
casio23
Форумчанин
 
Аватар для casio23
 
Регистрация: 29.12.2010
Сообщений: 186
По умолчанию

и если кто знает как в ListView сделать быстрый поиск по Caption
я делаю вот так, работает но только немного не так

Код:
var
         rct:TRECT;
        b: integer;
const LVM_GETITEMRECT=4110;  LVIR_BOUNDS=0;

begin
  for b:=0 to ListView_Basa.Items.Count-1  do
begin
    If pos(Edit.text, ListView_Basa.Items[b].Caption)>0 then
begin
       ListView_Basa.Selected:=ListView_Basa.Items[b];
       rct.Left:=0;
       SendMessage(ListView_Basa.Handle,LVM_GETITEMRECT,0,integer(@rct));
       ListView_Basa.Scroll(0,(b-ListView_Basa.TopItem.Index)*(rct.Bottom-rct.Top));
       ListView_BasaClick(Self);
     end  else ListView_Basa.Items[b].Selected := False;
    end;

end;
casio23 вне форума Ответить с цитированием
Старый 13.02.2011, 22:41   #7
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Покажи структуру Мемо и LV, тогда помогу. Только пожалуйста не даже не старайся объяснить своими словами... Просто покажи структуру, какая она? А лучше скрин, или сам исходник, просто у тебя слишком уж много каких то ненужных и некрасивых на первый взгляд строчек(быдло-код).
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Старый 14.02.2011, 00:03   #8
casio23
Форумчанин
 
Аватар для casio23
 
Регистрация: 29.12.2010
Сообщений: 186
По умолчанию

Цитата:
Сообщение от MyLastHit Посмотреть сообщение
Покажи структуру Мемо и LV, тогда помогу. Только пожалуйста не даже не старайся объяснить своими словами... Просто покажи структуру, какая она? А лучше скрин, или сам исходник, просто у тебя слишком уж много каких то ненужных и некрасивых на первый взгляд строчек(быдло-код).
Вот исходник, посмотрите пожалуйста как оптимизировать поиск (по маске,и быстрый поиск в Listview)
Вложения
Тип файла: rar find.rar (219.0 Кб, 13 просмотров)
casio23 вне форума Ответить с цитированием
Старый 16.02.2011, 12:29   #9
casio23
Форумчанин
 
Аватар для casio23
 
Регистрация: 29.12.2010
Сообщений: 186
По умолчанию

помогите с поиском
casio23 вне форума Ответить с цитированием
Старый 16.02.2011, 14:32   #10
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Извиняюсь что не в тему, но не легче ли справочники через базу данных сделать и для поиска использовать SQL запросы, а не придумывать велосипед.
SERG1980 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прошу оценить. альтернатива поиску Пепел Феникса Софт 13 12.08.2011 21:28
Внимание вопрос по поиску! alexkey Microsoft Office Excel 11 25.09.2009 18:50
Вопрос по поиску в БД Evgenii БД в Delphi 1 17.06.2009 09:50
программа по поиску списков литературы Marinca Свободное общение 1 14.12.2008 23:24