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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.04.2011, 12:13
Мишка-90 Мишка-90 вне форума
Прохожий
 
Регистрация: 25.03.2011
Сообщения: 24
Репутация: 10
По умолчанию поиск пустых ячеек

Здраствуйте, у меня такой вопрос.
как мне организовать поиск пустых ячеек в стринггриде и каким-нибудь образом их выделить.
поиск с 5й строки по 278 столбец..
знаю что там нужно мучить функцию pos но ума не приложу как...
заранее благодарен
извините за такой вот вопрос...
Ответить с цитированием
  #2  
Старый 27.04.2011, 13:03
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

не надо её мучать, если Length(ячейка) = 0 - значит она пустая, ну а всё остальное - циклом.
__________________
взялся из неоткуда, ничего не прошу, помогаю просто так
ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя
Ответить с цитированием
  #3  
Старый 27.04.2011, 13:07
Мишка-90 Мишка-90 вне форума
Прохожий
 
Регистрация: 25.03.2011
Сообщения: 24
Репутация: 10
По умолчанию

Код:
var
i, j : integer;
begin
    for i := 5 to StringGrid11.RowCount - 1 do
      for j := 1 to StringGrid11.ColCount - 1 do        
         if Length(StringGrid11.Cells[i,j]) = 0 then 
                 Begin {Выделение ячейки}
                 End;

с длиной стрики = 0 разобрался, а выделить ту самую пустую ячейку как?

Последний раз редактировалось Мишка-90, 27.04.2011 в 13:15.
Ответить с цитированием
  #4  
Старый 27.04.2011, 13:31
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

вот так видимо:
Код:
if Length(StringGrid11.Cells[i,j]) = 0 then 
begin
  StringGrid11.Col := j;
  StringGrid11.Row := i;
  break; // обрывает цикл, что бы остановится на выделенной ячейке
end;
__________________
взялся из неоткуда, ничего не прошу, помогаю просто так
ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя

Последний раз редактировалось Assistant, 27.04.2011 в 13:34.
Ответить с цитированием
  #5  
Старый 27.04.2011, 13:39
Мишка-90 Мишка-90 вне форума
Прохожий
 
Регистрация: 25.03.2011
Сообщения: 24
Репутация: 10
По умолчанию

в результате оно проверяет только 1 столбец.
сделал так:

Код:
if Length(StringGrid11.Cells[j,i]) = 0 then Begin

        StringGrid11.Cells[j,i] := '0';

        StringGrid11.Col := j;
        StringGrid11.Row := i;
        break;

        ShowMessage('Пустая ячейка ');

но не всю таблицу.. и фокус мгновенно пропадает.
сообщение сделал, для того чтобы увидеть фокус (чтобы быстро всю таблицу не пробежало)
Ответить с цитированием
  #6  
Старый 27.04.2011, 13:45
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

тогда убери break; фокус будет пропадать из-за ShowMessage, тогда сделай за место ShowMessage так, убери break; и:
перед циклом
Код:
Memo1.Lines.Clear;
в цикле:
Код:
Memo1.Lines.Add('Пустая ячека ' + IntToStr(j) + ', ' + IntToStr(i);
__________________
взялся из неоткуда, ничего не прошу, помогаю просто так
ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя
Ответить с цитированием
  #7  
Старый 27.04.2011, 13:55
Мишка-90 Мишка-90 вне форума
Прохожий
 
Регистрация: 25.03.2011
Сообщения: 24
Репутация: 10
По умолчанию спасибо

всё замечательно заработало, но ещё вопрос.

как сделать так, чтобы оно нашло пустую ячейку и на ней остановилось, если второй раз при нажатиии этой же кнопки - след. ячейку показало...
если сделать с break оно только первый столбец проверяет, без него - все как нужно...

Messagee := MessageDlg('Choose Yes no or Cancel?', mtConfirmation, mbOKCancel, 0);
case Messagee of
IDOK : ;
IDCANCEL : Break;
end;

Пытаюсь так, НО если нажать нет - переходит по строке дальше, если да - то по столбцу..

Последний раз редактировалось Мишка-90, 27.04.2011 в 14:03.
Ответить с цитированием
  #8  
Старый 27.04.2011, 14:13
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

Код:
if MessageBox(Handle,'Choose Yes no or Cancel?','Question',MB_ICONQUESTION + MB_YESNO) = ID_YES then
  break;
__________________
взялся из неоткуда, ничего не прошу, помогаю просто так
ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя
Ответить с цитированием
  #9  
Старый 27.04.2011, 15:19
Мишка-90 Мишка-90 вне форума
Прохожий
 
Регистрация: 25.03.2011
Сообщения: 24
Репутация: 10
Хорошо

Спасибо гигантские =) нереально выручилии ))

но опять есть одно но..
после того как нажмёшь - кансел - и опять проверку делаешь, то что было заполненно нулями опять находится и заполняется нулём.. и так постоянно
Ответить с цитированием
  #10  
Старый 27.04.2011, 15:24
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

а вы попробуйте сами решить эту задачу
__________________
взялся из неоткуда, ничего не прошу, помогаю просто так
ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя
Ответить с цитированием
  #11  
Старый 27.04.2011, 15:33
Мишка-90 Мишка-90 вне форума
Прохожий
 
Регистрация: 25.03.2011
Сообщения: 24
Репутация: 10
По умолчанию

спасибо за помощь ^_^
довёл до ума.
вот решение:

Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i, j : integer;
Messagee : integer;
begin
    StringGrid11.RowCount := 36;
      for i := 9 to 278 do
       for j := 5 to 35 do
         if Length(StringGrid11.Cells[i,j]) = 0 then Begin
          Begin
            StringGrid11.Row := j;
            StringGrid11.Col := i;
            //break;
            Messagee := MessageDlg('Продолжить поиск?', mtInformation, mbOKCancel, 0);
              case Messagee of
                IDOK     : Continue;
                IDCANCEL : Exit;
              end;
          End;
     End;
end; 

Последний раз редактировалось Мишка-90, 27.04.2011 в 17:06.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter