Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ещё одна проблема с StringGrid [D7, Win2k]


Partos ©   (2004-06-25 11:46:00) 

Все ещё раз приветы....

Вобщем у меня есть всё тот же Стринггрид.И он не умещаеться в форму полностью.Соответственно в нём появляеться скролинг.Я в данном стринггриде также выставил свойство goRowSelect и теперь при перемещении по стринггриду выделяеться не ячейка а вся строка.

Так же я написал обработчик клика на любую ячейку последнего столбца Стринггрида. При этом событии в эту ячейку пихаеться символ.

Теперь проблема:

Запускаю приложение.Прокручиваю скролинг и кликаю на последней ячейке...Символ заносится, всё нормально!. Но при переходе на другую строку скролинг прокручивается  в самое начало (я так понмаю это из-за goRowSelect=true). А если пользователь кликнул на том же последем столбце только уже другой строки, то он пока заново не проскролит то и  не увидит что изменилась последняя ячейка уже другой строки.А это не дела!Очень неудобно!!!Так же нельзя сделать изменение подряд в нескольких строках в одном и том же столбце если столбцы в конце стринггрида!Каждый раз придёться прокручивать скролинг....Пользователи меня сожрут!!! Уже как-то странно посматривают на мою ляшку!СПАСИТЕ!!!!Я ещё молодой!!!

Со скролингом я никогда не работал! Подскажите плиз как сделать чтоб и goRowSelect=trueосталось и при переходе на другую строчку скролинг не прокручивался в начало а оставался на месте...Вобщем если кто-нибудь знает как на ёлку залезть и попу не ободрать-кричите...


Леприкон   (2004-06-25 13:24:00) [1]

Это проверка на фиксированные ячейки. Надеюсь, ты понял, что этим кодом ты берёшь на себя ответственность за внешний вид редактируемых ячеек (или тех, которые можно "выбрать"). Однако, я посчитал лишним брать на себя ответственность за фиксированные ячейки. Пусть их StringGrid рисует, как сам умеет.
Вот такой я частичноответственный. :))

PS:Очень рад за твою ляшку и половую жизнь.


Partos   (2004-06-25 13:14:00) [2]

Леприкон!!! Круто!!!Ты мне очень помог!!! Теперь я не буду страдать от пыток этих безумных пользователей с их вечно голодными взглядами! Моя ляшка, моя молодость и половая жизнь спасены!! :)Я не буду хромать и может ещё ни одна подруга посмотрит на меня ;)

Только если можешь - объясни мне зачем вот это:
if (ACol>FixedCols-1) and (ARow>FixedRows-1) then

Почему мы применяем цвет только к тем ячейкам, которые выходят за FixedCols-1 и FixedRows-1?...Немножко я вот тут не понимаю! А так конечно классный алгоритм! Я не думал что всё так легко!


MetalFan   (2004-06-25 13:07:00) [3]

или примерно так:

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
 ARow: Integer; var CanSelect: Boolean);
begin
 if aRow >= StringGrid1.FixedRows then
 begin
 if(aCol=pred(StringGrid1.ColCount)) then
 begin
   if StringGrid1.Cells[aCol,aRow]='' then
     StringGrid1.Cells [aCol,aRow]:='V'
   else
     StringGrid1.Cells[aCol,aRow]:='';
     FLastLeftCol := StringGrid1.LeftCol;
   end
   else
     FLastLeftCol :=  -1;
 end;
end;

procedure TForm1.StringGrid1TopLeftChanged(Sender: TObject);
begin
 if FLastLeftCol <> -1 then
 begin
   StringGrid1.LeftCol := FLastLeftCol;
   FLastLeftCol := -1;
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 FLastLeftCol := -1;
end;


MetalFan   (2004-06-25 12:57:00) [4]


> Но при переходе на другую строку скролинг прокручивается
>  в самое начало (я так понмаю это из-за goRowSelect=true).

правильно понимаешь)
сделай как в [3],[4]
или "растяни" грид так, чтобы не было горизонтальнго сролла


Partos   (2004-06-25 12:42:00) [5]


> MetalFan ©   (25.06.04 12:04) [5]
>
> кажи обработчик


procedure TForm1.SGSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
begin
if(ACol=9) then
  if StringGrid1.Cells[ACol,ARow]='' then
                              StringGrid1.Cells [ACol,ARow]:='V'
  else StringGrid1.Cells[ACol,ARow]:='';
end;


AlexSV   (2004-06-25 12:30:00) [6]

смотри у StringGrid'a LeftCol, TopRow, OnTopLeftChanged


Леприкон   (2004-06-25 12:04:00) [7]

...и goRowSelect убери


MetalFan   (2004-06-25 12:04:00) [8]


> Так же я написал обработчик клика на любую ячейку последнего
> столбца Стринггрида. При этом событии в эту ячейку пихаеться
> символ.

кажи обработчик


Леприкон   (2004-06-25 12:02:00) [9]


procedure TForm1.SGDrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
begin
 with SG do
   if (ACol>FixedCols-1) and (ARow>FixedRows-1) then
     if ARow=Row then
       begin
         Canvas.Brush.Color:=clSilver;
         Canvas.TextRect(Rect,Rect.Left,Rect.Top,Cells[ACol,ARow]);
       end
     else
       begin
         Canvas.Brush.Color:=Color;
         Canvas.TextRect(Rect,Rect.Left,Rect.Top,Cells[ACol,ARow]);
       end;
end;

procedure TForm1.SGSelectCell(Sender: TObject; ACol, ARow: Integer;
 var CanSelect: Boolean);
begin
 SG.Invalidate;
end;


AlexG   (2004-06-25 11:56:00) [10]

как на ёлку залезть и попу не ободрать-кричите...
подгузник и вперед!

Возможно, нужно самому скролить стргрид...


MetalFan   (2004-06-25 11:53:00) [11]

код... в студию


Наверх

Титульная страница Поиск, карта сайта Написать письмо