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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2015, 15:39   #1
cawendish
Пользователь
 
Регистрация: 10.12.2014
Сообщений: 12
По умолчанию Вопрос о StringGrid

Здравствуйте.
Пытаюсь довести до ума в своей программе таблицу StringGrid.

1)Сделал для своей таблицы функцию фильтра. Конечно же можно ввести такой фильтр, который скроет все строки таблицы кроме фиксированной строки. Но тут же она становится редактируемой и по ней можно перемещать курсор(выделение текущей ячейки) - что не соответствует логике программы. После убирания фильтра этот баг остается, и более того при пролистовании таблицы исчезает фиксированная строка. Как сделать фиксированную строку не редактируемой я нашел. Но как запретить туда ставить курсор?

2)Сделал поиск по таблице - в результате просто перемещается выделение текущей ячейки. Как активизировать редактирование текущей ячейки и выделить искомое слово?
cawendish вне форума Ответить с цитированием
Старый 25.05.2015, 19:24   #2
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию

так в Listbox:

Код:
Listbox1.Perform(LB_SELECTSTRING, 0, LongInt(PChar('1')));
для StringGrid не нашел Perform команды

из этого что-то возьмите:

Проверить, выделена ли ячейка TStringGrid
Код:
function IsCellSelected(StringGrid: TStringGrid; X, Y: Longint): Boolean;
 begin
   Result := False;
   try
     if (X >= StringGrid.Selection.Left) and (X <= StringGrid.Selection.Right) and
       (Y >= StringGrid.Selection.Top) and (Y <= StringGrid.Selection.Bottom) then
       Result := True;
   except
   end;
 end;

 procedure TForm1.Button1Click(Sender: TObject);
 begin
   if IsCellSelected(stringgrid1, 2, 2) then
     ShowMessage('Cell (2,2) is selected.');
 end;
beegl вне форума Ответить с цитированием
Старый 25.05.2015, 21:28   #3
SQLPowerUser
Форумчанин
 
Аватар для SQLPowerUser
 
Регистрация: 19.01.2015
Сообщений: 158
По умолчанию

>>> Но как запретить туда ставить курсор?
Попробуйте в событии OnSelectCell
if Arow = 0 then CanSelect := false;

Вы как осуществляете фильтрацию? Свойство visible у строки отсутствует. Если сделать высоту = 0, то будут двойные линии. Если сделать = -1, то горизонтальные линии вообще исчезнут, но их можно дорисовать. А в событии OnSelectCell отменяем выбор этой скрытой строки. Вот мой проверенный велосипед
Код:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  if ARow = 0 then exit;
  InflateRect(Rect,1,1);
  StringGrid1.Canvas.Brush.Color := $c1c1c1;
  StringGrid1.Canvas.FrameRect(Rect);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  StringGrid1.RowHeights[3] := -1;
end;

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
begin
  if StringGrid1.RowHeights[ARow] = -1 then
  begin
    CanSelect := false;
    if StringGrid1.Row = ARow - 1 then
      StringGrid1.Row := ARow + 1
    else
      StringGrid1.Row := ARow - 1;
  end;
end;
Также рекомендую хороший компонент NextGrid (бесплатен для Delphi 6-7)
Очень напоминает StringGrid, но в нем гораздо больше возможностей, в том числе и visible для строк.

Последний раз редактировалось SQLPowerUser; 25.05.2015 в 21:37.
SQLPowerUser вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по StringGrid kta87 Общие вопросы Delphi 5 01.02.2012 13:30
Вопрос по stringgrid madkot Помощь студентам 0 26.04.2011 18:19
Вопрос о StringGrid MasterofCDM Общие вопросы Delphi 9 21.10.2009 09:53
Вопрос о StringGrid MasterofCDM Общие вопросы Delphi 2 23.09.2008 10:58