![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ещё одна проблема с 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]код... в студию