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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.11.2012, 10:52
RodionSabitov RodionSabitov вне форума
Прохожий
 
Регистрация: 31.07.2012
Сообщения: 22
Репутация: 10
По умолчанию Некорректно работает поиск и выделени записи в DBGrid

Доброе утро!

Ситуация следующая: Delphi7, БД paradox.
организовал поиск по БД через locate.

Пример:
Выделяю кликом мыши 1 запись. В поиске, через TEdit, ввожу имя той записи, которая стоит выше выделенной. Курсор переходит на запрашиваемую запись, если кликнуть на нее, то выделяется другая запись, не та, что запрашивалась.
Если в поиске вводить запись, имя которой находится ниже выделенной изначально, то после наведения на нее(запрошенную запись) курсора и кликанья на нее - выделяется корректно, т.е. именно та запись, которая была запрошена.

Код:
Код:
procedure TMainFrm.NameEdChange(Sender: TObject);
begin
 //Data.CustTbl.Locate('CUST_NAME',NameEd.Text,[loCaseInsensitive,loPartialKey]);
 CustGrd.DataSource.DataSet.Locate('CUST_NAME',NameEd.Text,[loCaseInsensitive,loPartialKey]);
  Label2.Caption := IntToStr(CustGrd.DataSource.DataSet.RecNo);
 end;
Админ: Теги, и еще раз теги!

По поводу некорректного выделения записи: если выделить кликом мыши 1 запись и колесом мыши двигаться по таблице вверх, то получаются выделены 2 записи. как исправить это? чтобы выделялась только та запись, которая относится к выделению колесом мыши.
Изображения
Тип файла: jpg выделяем произвольную запись.JPG (91.8 Кбайт, 3 просмотров)
Тип файла: jpg запрашиваем запись, которая выше выделенной изначально.JPG (95.6 Кбайт, 3 просмотров)
Тип файла: jpg после клика на запись.JPG (88.2 Кбайт, 3 просмотров)

Последний раз редактировалось Admin, 13.11.2012 в 10:59.
Ответить с цитированием
  #2  
Старый 13.11.2012, 11:23
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от RodionSabitov
По поводу некорректного выделения записи: если выделить кликом мыши 1 запись и колесом мыши двигаться по таблице вверх, то получаются выделены 2 записи. как исправить это? чтобы выделялась только та запись, которая относится к выделению колесом мыши.
Ты пользуешься стандартным TDBGrid? Стандартный TDBGrid в Delphi 7 некорректно работает с колесом мышки. Чтобы это поправить нужно в обработчике OnMouseWheel добавить правильную обработку колеса мышки.
Ответить с цитированием
  #3  
Старый 13.11.2012, 12:01
RodionSabitov RodionSabitov вне форума
Прохожий
 
Регистрация: 31.07.2012
Сообщения: 22
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Ты пользуешься стандартным TDBGrid? Стандартный TDBGrid в Delphi 7 некорректно работает с колесом мышки. Чтобы это поправить нужно в обработчике OnMouseWheel добавить правильную обработку колеса мышки.

да, я обработал по-другому колесо мышки(взял с какого-то сайта):

Код:
procedure TMainFrm.FormCreate(Sender: TObject);
begin
   Application.OnMessage := AppMessage;
end;

procedure TMainFrm.next_Prior;
begin

CustGrd.DataSource.DataSet.Prior;

end;

procedure TMainFrm.next_record;
begin

CustGrd.DataSource.DataSet.Next;

end;

procedure TMainFrm.AppMessage(var Msg:TMsg; var Handled: Boolean);
begin

IF Msg.message = WM_MOUSEWHEEL then

if CustGrd.Focused then

if CustGrd.DataSource.DataSet.Active then

begin

IF(( msg.wParam <=32512) and

( Msg.message = WM_MOUSEWHEEL)) then

next_record;

IF(( msg.wParam > 32512) and

( Msg.message = WM_MOUSEWHEEL)) then

next_Prior
;
Handled:=true;

end;

end;

Последний раз редактировалось RodionSabitov, 13.11.2012 в 12:10.
Ответить с цитированием
  #4  
Старый 13.11.2012, 12:01
RodionSabitov RodionSabitov вне форума
Прохожий
 
Регистрация: 31.07.2012
Сообщения: 22
Репутация: 10
По умолчанию

да, dbgrid стандартный

но это не решило естественно проблему выделения строк и поиска.

проблема с поиском пропадает, если место для отображения записей в таблице не больше "размера объекта" dbgrid, но это естественно не решение.

кто может помочь?

Последний раз редактировалось RodionSabitov, 13.11.2012 в 12:31.
Ответить с цитированием
  #5  
Старый 13.11.2012, 12:44
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от RodionSabitov
да, dbgrid стандартный

но это не решило естественно проблему выделения строк и поиска.

кто может помочь?
А в свойстве CustGrd.Options dgMultiSelect ты для каких целей поставил в True?
Если там вернуть значение False то после этого работает так как тебе нужно?
Ответить с цитированием
  #6  
Старый 13.11.2012, 13:34
RodionSabitov RodionSabitov вне форума
Прохожий
 
Регистрация: 31.07.2012
Сообщения: 22
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
А в свойстве CustGrd.Options dgMultiSelect ты для каких целей поставил в True?
Если там вернуть значение False то после этого работает так как тебе нужно?


тогда не работает удаление выделенной записи, если убрать dgMultiSelect
Код:
CustGrd.SelectedRows.Delete;

как удалять выделенную запись без мультиселекта?
при этом да, глюк с 2мя выделенными записями исчезает.

Последний раз редактировалось RodionSabitov, 13.11.2012 в 13:38.
Ответить с цитированием
  #7  
Старый 13.11.2012, 14:51
RodionSabitov RodionSabitov вне форума
Прохожий
 
Регистрация: 31.07.2012
Сообщения: 22
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
А в свойстве CustGrd.Options dgMultiSelect ты для каких целей поставил в True?
Если там вернуть значение False то после этого работает так как тебе нужно?

ладно, думаю, в обработке кнопки, отвечающей за удаление записи, буду менять опцию мультиселект.
далее: скачал ehgrid, там поиск корректно работает, не знаешь?
Ответить с цитированием
  #8  
Старый 13.11.2012, 14:56
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от RodionSabitov
тогда не работает удаление выделенной записи, если убрать dgMultiSelect
Код:
CustGrd.SelectedRows.Delete;

как удалять выделенную запись без мультиселекта?
при этом да, глюк с 2мя выделенными записями исчезает.
Удалять выделенную запись без мультиселекта нужно так:
Код:
CustGrd.DataSource.DataSet.Delete;
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
RodionSabitov (14.11.2012)
  #9  
Старый 19.11.2012, 11:11
RodionSabitov RodionSabitov вне форума
Прохожий
 
Регистрация: 31.07.2012
Сообщения: 22
Репутация: 10
По умолчанию

в итоге использовал ehgrid, там есть стандартный поиск =)
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter