Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.11;
Скачать: CL | DM;

Вниз

Ещё одна проблема с StringGrid   Найти похожие ветки 

 
Partos   (2004-06-25 11:46) [0]

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

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

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

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

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

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


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

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


 
AlexG ©   (2004-06-25 11:56) [2]

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

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


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


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;


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

...и goRowSelect убери


 
MetalFan ©   (2004-06-25 12:04) [5]


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

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


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

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


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


> 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;


 
MetalFan ©   (2004-06-25 12:57) [8]


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

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


 
MetalFan ©   (2004-06-25 13:07) [9]

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

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;


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

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

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

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


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

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

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



Страницы: 1 вся ветка

Текущий архив: 2004.07.11;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.033 c
3-1086780258
Navy
2004-06-09 15:24
2004.07.11
Немогу добавить запись.


4-1085739046
stany
2004-05-28 14:10
2004.07.11
Сервис и GetUserName


14-1087841106
able
2004-06-21 22:05
2004.07.11
Проблемы с материнкой.


14-1087949054
jack128
2004-06-23 04:04
2004.07.11
Как часто вы работаете по ночам?


14-1086722980
Nic
2004-06-08 23:29
2004.07.11
Восттановление СССР?