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

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

закраска ячеек в гриде


bagos ©   (2007-04-24 16:59:00) 

вот скажите мне программеры,можно ли в обработчике DrawCell для закраски множества ячеек использовать циклы?
Спасибо,прост где то читал или слышал что низя,не помню где,
хотел вашего мнения послушать


homm   (2007-04-26 21:42:00) [1]

> визуально работает как нужно, но я как чувствовал что не
> прально делаю

Ты глуп, ужасно глуп. Даже если предположить что ты не понял того, что тебе здесь по 10 раз каждый сказал, ты мог бы еше раз попросит уточнить то что тебе не далось, вместо этого ты продлжаешь липить свои ужасные нарезки кода. Зачем ты вообще сюда обратился, если слушать не желаешь?


{RASkov}   (2007-04-26 21:13:00) [2]

> [17] bagos ©   (26.04.07 19:39)

Нифига не понятно что к чему...
Сделай скрин твоей формы и прокомментируй его здесь. От чего и как должны красится ячейки в сгриде..
Вообще [17] - это ужас.... я даже разбирать не стал :(


bagos   (2007-04-26 19:39:00) [3]


> {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 13:09:00) [4]

> ARow := I + 1;
> Row_Xz := StrToInt(StringGrid1.Cells[0, FF]);
> ACol := StrToInt(ValueListEditor1.Cells[1, I]);
> If ARow=I+1then

Интересно :)
И что за FF....


{RASkov}   (2007-04-26 13:00:00) [5]

> [12] bagos ©   (26.04.07 12:39)

И где этот "ужас" находится? на OnDrawCell? Покажи полный обработчик где это находится с учетом [13]....
Впринципе если на OnDrawCell - то тогда убери это оттуда в другое место.....
> Rect.BottomRight.X-70, Rect.BottomRight.Y-18,

Может проще - Rect.Left+2 и Rect.Top+2 ?


homm   (2007-04-26 12:55:00) [6]

> Знаю что по уродски...
> Но по другому не умею :(

Тебе чё сказали в [11]? И еще где-то раньше??

Для перерисовки(прорисовки) ячейки, есть событие OnDrawCell

в него приходит индекс этой ячейки горизонтальный и вертикальный (ACol, ARow).
В ней и закрашивай ту ячейку, которую тебя просят. А уж эта процедура вызовиться много раз для всех ячеек, та что не одн незакрашеной не останеться.


bagos   (2007-04-26 12:40:00) [7]

GG := StrToInt(StringGrid1.Cells[0, 2]) - 2; -- эт лишнее
Row_Xz := StrToInt(StringGrid1.Cells[0, FF]); и это тоже


bagos   (2007-04-26 12:39:00) [8]

Бейте,пинайте,не могу понять как правильно красить ячейки. Крашу используя цикл.
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;

Знаю что по уродски...
Но по другому не умею :(


{RASkov}   (2007-04-26 12:19:00) [9]

> Я красил так,  как спрашивающий человек хочет. Могу сказать,
> что очень кривой способ. Ячейки действительно перекрашиваются
> в цикле ( даже если юзать ACol,ARow), п ри этом блицают.
> Правда, я их градиентом закрашивал...

Краски не жалеете.... Нафига одну и туже ячейку "красить" туеву хучу раз? Еще бы не блицали....
Еще раз:
Для перерисовки(прорисовки) ячейки, есть событие OnDrawCell, которое вызывается для каждой ячейки [ACol, ARow], и если ипользовать там еще и циклы для закраски нескольких ячеек, то они будут краситься по несколько раз "все"....


Германн   (2007-04-26 01:02:00) [10]


> Leonid Troyanovsky ©   (25.04.07 22:21) [9]
>
>
> > Германн ©   (25.04.07 21:31) [8]
>
> > >  что очень кривой способ.
> >
> > Это не "кривой" способ, это абсолютно неверный способ!
>
>
> Ясень пень, что кривой, ведь для перерисовки просто зовут
> Invalidate, InvalidateCell, InvalidateRect или как там его.
>
>
> --
> Regards, LVT.
>

Не понял, увы. Наверно луна не в той фазе :(


Leonid Troyanovsky   (2007-04-25 22:21:00) [11]


> Германн ©   (25.04.07 21:31) [8]

> >  что очень кривой способ.
>
> Это не "кривой" способ, это абсолютно неверный способ!

Ясень пень, что кривой, ведь для перерисовки просто зовут
Invalidate, InvalidateCell, InvalidateRect или как там его.

--
Regards, LVT.


Германн   (2007-04-25 21:31:00) [12]


> Углук ©   (25.04.07 20:42) [7]
>
> Я красил так,  как спрашивающий человек хочет. Могу сказать,
>  что очень кривой способ.

Это не "кривой" способ, это абсолютно неверный способ!


Углук   (2007-04-25 20:42:00) [13]

Я красил так,  как спрашивающий человек хочет. Могу сказать, что очень кривой способ. Ячейки действительно перекрашиваются в цикле ( даже если юзать ACol,ARow), при этом блицают. Правда, я их градиентом закрашивал...


{RASkov}   (2007-04-24 19:42:00) [14]

> [5] bagos ©   (24.04.07 19:38)

Крась их используя ARow и ACol и не надо никаких своих циклов...


bagos   (2007-04-24 19:38:00) [15]

мне нужно закрасить около 10 ячеек,разумеется они всегда разные :)


{RASkov}   (2007-04-24 17:14:00) [16]

> [2] bagos ©   (24.04.07 17:02)

Только учитывай, что DrawCell вызывается для каждой ячейки грида....

> можно ли в обработчике DrawCell для закраски множества ячеек
> использовать циклы?

Т.е. я так понял, что ты хочешь "красить" сразу несколько ячеек в этом обработчике?


Правильный Вася   (2007-04-24 17:14:00) [17]

DrawCell вызывается для отрисовки конкретной ячейки


bagos   (2007-04-24 17:02:00) [18]

Я знал что мне не откажут:)


Сергей М.   (2007-04-24 17:01:00) [19]

Можно.
Уж это-то мы тебе разрешаем)


Наверх

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