Форум: "Начинающим";
Текущий архив: 2007.05.20;
Скачать: [xml.tar.bz2];
Вниззакраска ячеек в гриде Найти похожие ветки
← →
bagos © (2007-04-24 16:59) [0]вот скажите мне программеры,можно ли в обработчике DrawCell для закраски множества ячеек использовать циклы?
Спасибо,прост где то читал или слышал что низя,не помню где,
хотел вашего мнения послушать
← →
Сергей М. © (2007-04-24 17:01) [1]Можно.
Уж это-то мы тебе разрешаем)
← →
bagos © (2007-04-24 17:02) [2]Я знал что мне не откажут:)
← →
Правильный Вася (2007-04-24 17:14) [3]DrawCell вызывается для отрисовки конкретной ячейки
← →
{RASkov} (2007-04-24 17:14) [4]> [2] bagos © (24.04.07 17:02)
Только учитывай, что DrawCell вызывается для каждой ячейки грида....
> можно ли в обработчике DrawCell для закраски множества ячеек
> использовать циклы?
Т.е. я так понял, что ты хочешь "красить" сразу несколько ячеек в этом обработчике?
← →
bagos © (2007-04-24 19:38) [5]мне нужно закрасить около 10 ячеек,разумеется они всегда разные :)
← →
{RASkov} © (2007-04-24 19:42) [6]> [5] bagos © (24.04.07 19:38)
Крась их используя ARow и ACol и не надо никаких своих циклов...
← →
Углук © (2007-04-25 20:42) [7]Я красил так, как спрашивающий человек хочет. Могу сказать, что очень кривой способ. Ячейки действительно перекрашиваются в цикле ( даже если юзать ACol,ARow), при этом блицают. Правда, я их градиентом закрашивал...
← →
Германн © (2007-04-25 21:31) [8]
> Углук © (25.04.07 20:42) [7]
>
> Я красил так, как спрашивающий человек хочет. Могу сказать,
> что очень кривой способ.
Это не "кривой" способ, это абсолютно неверный способ!
← →
Leonid Troyanovsky © (2007-04-25 22:21) [9]
> Германн © (25.04.07 21:31) [8]
> > что очень кривой способ.
>
> Это не "кривой" способ, это абсолютно неверный способ!
Ясень пень, что кривой, ведь для перерисовки просто зовут
Invalidate, InvalidateCell, InvalidateRect или как там его.
--
Regards, LVT.
← →
Германн © (2007-04-26 01:02) [10]
> Leonid Troyanovsky © (25.04.07 22:21) [9]
>
>
> > Германн © (25.04.07 21:31) [8]
>
> > > что очень кривой способ.
> >
> > Это не "кривой" способ, это абсолютно неверный способ!
>
>
> Ясень пень, что кривой, ведь для перерисовки просто зовут
> Invalidate, InvalidateCell, InvalidateRect или как там его.
>
>
> --
> Regards, LVT.
>
Не понял, увы. Наверно луна не в той фазе :(
← →
{RASkov} © (2007-04-26 12:19) [11]> Я красил так, как спрашивающий человек хочет. Могу сказать,
> что очень кривой способ. Ячейки действительно перекрашиваются
> в цикле ( даже если юзать ACol,ARow), при этом блицают.
> Правда, я их градиентом закрашивал...
Краски не жалеете.... Нафига одну и туже ячейку "красить" туеву хучу раз? Еще бы не блицали....
Еще раз:
Для перерисовки(прорисовки) ячейки, есть событие OnDrawCell, которое вызывается для каждой ячейки [ACol, ARow], и если ипользовать там еще и циклы для закраски нескольких ячеек, то они будут краситься по несколько раз "все"....
← →
bagos © (2007-04-26 12:39) [12]Бейте,пинайте,не могу понять как правильно красить ячейки. Крашу используя цикл.
GG := StrToInt(StringGrid1.Cells[0, 2]) - 2;
For I:=1 to ValueListEditor1.RowCount - 1 do
begin
ARow := I + 1;
Row_Xz := StrToInt(StringGrid1.Cells[0, FF]);
ACol := StrToInt(ValueListEditor1.Cells[1, I]);
If ARow=I+1 then
begin
S := StringGrid1.Cells[ACol,FF];
Rect := StringGrid1.CellRect(ACol,FF);
StringGrid1.Canvas.Brush.Color:=clSkyBlue;
StringGrid1.Canvas.FillRect(Rect);
StringGrid1.Canvas.TextRect(Rect, Rect.BottomRight.X-70, Rect.BottomRight.Y-18, S);
end;
Знаю что по уродски...
Но по другому не умею :(
← →
bagos © (2007-04-26 12:40) [13]GG := StrToInt(StringGrid1.Cells[0, 2]) - 2; -- эт лишнее
Row_Xz := StrToInt(StringGrid1.Cells[0, FF]); и это тоже
← →
homm © (2007-04-26 12:55) [14]> Знаю что по уродски...
> Но по другому не умею :(
Тебе чё сказали в [11]? И еще где-то раньше??
Для перерисовки(прорисовки) ячейки, есть событие OnDrawCell
в него приходит индекс этой ячейки горизонтальный и вертикальный (ACol, ARow).
В ней и закрашивай ту ячейку, которую тебя просят. А уж эта процедура вызовиться много раз для всех ячеек, та что не одн незакрашеной не останеться.
← →
{RASkov} © (2007-04-26 13:00) [15]> [12] bagos © (26.04.07 12:39)
И где этот "ужас" находится? на OnDrawCell? Покажи полный обработчик где это находится с учетом [13]....
Впринципе если на OnDrawCell - то тогда убери это оттуда в другое место.....
> Rect.BottomRight.X-70, Rect.BottomRight.Y-18,
Может проще - Rect.Left+2 и Rect.Top+2 ?
← →
{RASkov} © (2007-04-26 13:09) [16]> ARow := I + 1;
> Row_Xz := StrToInt(StringGrid1.Cells[0, FF]);
> ACol := StrToInt(ValueListEditor1.Cells[1, I]);
> If ARow=I+1 then
Интересно :)
И что за FF....
← →
bagos © (2007-04-26 19:39) [17]
> {RASkov} © (26.04.07 13:09) [16]
Интересно :)
И что за FF....
это называется запутование самого себя...procedure TForm1.resultDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
col,row,row_xz:integer;
i,j,h:integer;
s,s1,s2,s3,s4,s5:string;
rect1,rect2,rect3,rect4,rect5:trect;
gg,ff:integer;
begin
if s_a_prinad.Keys[1]="" then begin
end
else begin
//
result.Canvas.Brush.Color:=clBtnFace;
s4:=result.Cells[0,0];
rect4:=result.CellRect(0,0);
result.Canvas.FillRect(rect4);
result.Canvas.TextRect(rect4,rect4.BottomRight.X-73,rect4.BottomRight.Y-18,s4);
//
result.Canvas.Brush.Color:=clBtnFace;
s5:=result.Cells[0,1];
rect5:=result.CellRect(0,1);
result.Canvas.FillRect(rect5);
result.Canvas.TextRect(rect5,rect5.BottomRight.X-55,rect5.BottomRight.Y-18,s5);
for h:=1 to result.ColCount-1 do begin
result.Canvas.Brush.Color:=clBtnFace;
s3:=result.Cells[h,0];
rect3:=result.CellRect(h,0);
result.Canvas.FillRect(rect3);
result.Canvas.TextRect(rect3,rect3.BottomRight.X-40,rect3.BottomRight.Y-18,s3);
end;
gg:=strtoint(result.Cells[0,2])-2;
for i:=1 to s_a_prinad.RowCount-1 do begin
ff:=i+1;
row_Xz:=strtoint(result.Cells[0,ff]);
row:=strtoint(s_a_prinad.cells[0,i])-gg;
col:=strtoint(s_a_prinad.Cells[1,i]);
if ff=i+1 then begin
s:=result.Cells[col,ff];
s1:=result.Cells[col,0];
rect:=result.CellRect(col,ff);
rect1:=result.CellRect(col,0);
result.Canvas.Brush.Color:=clSkyBlue;
result.Canvas.FillRect(rect);
result.Canvas.FillRect(rect1);
result.Canvas.TextRect(rect,rect.BottomRight.X-70,rect.BottomRight.Y-18,s);
result.Canvas.TextRect(rect1,rect1.BottomRight.X-40,rect1.BottomRight.Y-18,s1);
end;
end;
for j:=2 to result.RowCount-1 do begin
result.Canvas.Brush.Color:=clBtnFace;
s2:=result.Cells[0,j];
rect2:=result.CellRect(0,j);
result.Canvas.FillRect(rect2);
result.Canvas.TextRect(rect2,rect2.BottomRight.X-40,rect2.BottomRight.Y-18,s2);
end;
end;
end;
визуально работает как нужно, но я как чувствовал что не прально делаю
Спасибо за ответы
← →
{RASkov} © (2007-04-26 21:13) [18]> [17] bagos © (26.04.07 19:39)
Нифига не понятно что к чему...
Сделай скрин твоей формы и прокомментируй его здесь. От чего и как должны красится ячейки в сгриде..
Вообще [17] - это ужас.... я даже разбирать не стал :(
← →
homm © (2007-04-26 21:42) [19]> визуально работает как нужно, но я как чувствовал что не
> прально делаю
Ты глуп, ужасно глуп. Даже если предположить что ты не понял того, что тебе здесь по 10 раз каждый сказал, ты мог бы еше раз попросит уточнить то что тебе не далось, вместо этого ты продлжаешь липить свои ужасные нарезки кода. Зачем ты вообще сюда обратился, если слушать не желаешь?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.05.20;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.045 c