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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2010, 19:05   #21
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

А если проверку поместить в таймер дополнительно?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 15.09.2010, 19:08   #22
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

Да хоть куда, только дополнительно - не надо. Зачем два раза проверять?
Даже если при первой проверке будет, допустим ClRed а при повторной clWhite, как узнаешь какой из них более правильный?
Надо сделать один раз, но наверняка.
_Engine_ вне форума Ответить с цитированием
Старый 15.09.2010, 19:13   #23
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Мне нельзя, чтобы неправильно показывалось. Это очень важный момент. Так что на счет кода моего из поста №17?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 15.09.2010, 20:19   #24
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Цитата:
Сообщение от _Engine_ Посмотреть сообщение
Видимо DomiNick намекает, на то, что в этот момент не все ячейки будут отрисовываться и проверка через канвас может дать неверный ответ.
Совершенно верно...
Если не AV...
Цитата:
Сообщение от _Engine_ Посмотреть сообщение
Он предлагает при закрашивании запоминать цвета
Ну... Я думал запоминать не цвета а состояния ячеек... При изменении содержимого менять (если нужно)... А при закрашивании закрашивать цветом соответствующим состоянию...
Цитата:
Сообщение от _Engine_ Посмотреть сообщение
тут в принципе даже новое поле у грида не надо создавать, цвета можно запоминать в StringGrid.Rows[ARow].Objects[ACol]
Хм... Мне привычнее массивом... Не работал с этим полем, не приходилось чтот...
Сейчас посмотрим что там с ним можно придумать.....

artemavd, а можно поподробнее что именно должно получаться-то?)
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 15.09.2010, 20:22   #25
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

artemavd, дело в том, что при малейшем визуальном изменении ячейки (при её выделении, исчезновении и появлении из поля видимости и т.д. и т.п.) происходит её перерисовка. Например если программу с кодом из поста№17 свернуть и развернуть, то все ячейки будут белыми. Чтобы такого не было, надо изменять процедуру перерисовки TForm1.RzStringGrid2DrawCell. Это единственный способ (для данного компонента не меняя его свойств и методов)
Цитата:
Проверку на цвет можно так организовать:
Код:
if RzStringGrid2.Canvas.Pixels[RzStringGrid2.CellRect[ACol, ARow].left + 1, RzStringGrid2.CellRect[ACol, ARow].Top + 1] = clRed then
Перерисовываться будут только видимые ячейки, поэтому способ поиска по цвету пикселя несработает для большой таблицы
eoln вне форума Ответить с цитированием
Старый 16.09.2010, 03:47   #26
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
artemavd, а можно поподробнее что именно должно получаться-то?)
Ладно, поясняю. . У меня должы ошибочные ячейки закрашиваться в красный цвет. Затем, я должен по нажатию на клавишу Enter например перемещаться от одной красной ячейки к другой, пока не пройдусь по всем ячейкам, независимо от того, где в таблице находится эта красная ячейка.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 16.09.2010, 08:58   #27
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

Вот тебе пример, если надо - оптимизируешь по коду, хотя он и рабочий.
Код:
procedure TForm1.sgDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if (ACol > sg.FixedCols) and (ARow > sg.FixedRows) then
  if sg.Cells[ACol,ARow] = '3' then
    with sg.Canvas do
    begin
      Brush.Color := clRed;
      FillRect(Rect);
      sg.Rows[ARow].Objects[ACol] := TObject(clRed);
    end;
end;

procedure TForm1.sgKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
  var ACol, ARow : Integer;

begin
  case Key of
   13 : begin
          ACol := sg.Col;
          ARow := sg.Row;
          if assigned(sg.Rows[ARow].Objects[ACol]) then
            if sg.Rows[ARow].Objects[ACol] = TObject(clRed) then
            begin
              for ACol := ACol + 1 to sg.ColCount - 1 do
                if sg.Rows[ARow].Objects[ACol] = TObject(clRed) then
                begin
                  sg.Col := ACol;
                  sg.Row := ARow;
                  Exit;
                end;
              for ARow := ARow + 1 to sg.RowCount - 1 do
                for ACol := 0  to sg.ColCount - 1 do
                  if sg.Rows[ARow].Objects[ACol] = TObject(clRed) then
                  begin
                    sg.Col := ACol;
                    sg.Row := ARow;
                    Exit;
                  end;
            end;
        end;
  end;
end;
_Engine_ вне форума Ответить с цитированием
Старый 16.09.2010, 18:29   #28
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Я применил этот код, но нажимаю на клавишу Enter и ничего не происходит.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 16.09.2010, 18:35   #29
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

выдели неверную ячейку (выделенную красным), и нажми на Enter
_Engine_ вне форума Ответить с цитированием
Старый 16.09.2010, 18:39   #30
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Выделил, нажал, ячейка становится доступной для редактирования, но при нажатии на Enter я не перехожу к следующей красной ячейке.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа проверки вывода символов и цвета на принтер Absolut Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 13.09.2010 12:43
Проверить наличие eng символов? alco84 Microsoft Office Access 4 08.04.2010 11:08
программа нахождения и проверки символов/строк MixanMM Общие вопросы Delphi 14 09.07.2009 08:44
Не работает функция проверки подстроки в строке Cold_Night Помощь студентам 1 25.03.2009 01:30
Код проверки столкновений не работает. Манжосов Денис :) Общие вопросы Delphi 8 02.02.2009 10:31