Форум: "Основная";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];
ВнизЕщё одна проблема с 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c