![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
StringGrid событие DrawCell [D2005, XP]
alex810 © (2006-11-17 09:10:00)Помогите пожалуйста как мне можно вызвать процедуру DrawCell щелчком по кнопке. Я думаю так но не знаю что такое Rect: TRect
procedure TForm1.Button1Click(Sender: TObject);;
begin
TForm3.StringGrid2DrawCell(StringGrid2, X, Y, ?????, gdFixed);
end
Плохиш (2006-11-17 10:57:00) [101]
> alex810 © (17.11.06 10:34) [47]
> Мне нужно чтобы во втором гриде вместо 1 на перво был цвет
> идентификатор которого соответствовал бы единице и все это
> рисовалось бы пр Create формы.
Ой, дайте, я тоже здесь расслаблюсь :-))
Не пора ли уже почитать основы работы используемой ОС и системы разработки? В креате формы ничего не рисуется, для отрисовки объектов им(объектам) посылаются соответствующие сообщения, при получении которых, объект и должен позаботиться о своей отрисовки.
alex810 (2006-11-17 10:54:00) [102]Извените связ оборвалась
Кликаем на гриде 2 и запоминаем начальную позицию выделения
procedure TForm3.StringGrid2Click(Sender: TObject);
begin
x1:=Form3.StringGrid2.Selection.TopLeft.X;
y1:=Form3.StringGrid2.Selection.TopLeft.Y;
end;
Отпускаем мышу и запоминаем конечную позицию выделения. В гриде 2 записываем цену которая указана в эдите. В гриде 1 записываем идентификатор цвета который соответсвтует цвету едита
procedure TForm3.StringGrid2MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var i,j:integer;
begin
x11:=Form3.StringGrid2.Selection.BottomRight.X;
y11:=Form3.StringGrid2.Selection.BottomRight.Y;
For i:=x1 to x11 do
begin
for j := y1 to y11 do
begin
Form3.StringGrid2.Cells[i,j]:=Cena1;
end;
end;
For i:=x1+1 to x11+1 do
begin
for j := y1+1 to y11+1 do
begin
Form3.StringGrid1.Cells[i,j]:=IntToStr(Ident1);
end;
end;
end;
прорисовываем в гриде 2 ячейки которые выделил цветом едита и записываем в них значени Edit.Text.
procedure TForm3.StringGrid2DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if (state = [gdSelected]) then
with TStringGrid(Sender), Canvas do
begin
Brush.Color := SelectedColor;
TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Cells[aCol, aRow]);
FillRect(Rect);
end;
end;
Сохраняем в файле идентификатор цвета в гриде 1 и положение этого цвета
procedure TForm3.Button1Click(Sender: TObject);
var
f: textfile;
x, y: integer;
begin
assignfile(f, '\Diplom\Tarif\Zima\Tarif1');
rewrite(f);
writeln(f, stringgrid2.colcount);
writeln(f, stringgrid2.rowcount);
for X := 0 to stringgrid2.colcount - 1 do
for y := 0 to stringgrid2.rowcount - 1 do
writeln(F, stringgrid2.cells[x, y]);
closefile(f);
///////
assignfile(f, '\Diplom\Tarif\Zima\Tarif2');
rewrite(f);
writeln(f, stringgrid1.colcount);
writeln(f, stringgrid1.rowcount);
for X := 0 to stringgrid1.colcount - 1 do
for y := 0 to stringgrid1.rowcount - 1 do
writeln(F, stringgrid1.cells[x, y]);
closefile(f);
end;
Вот тут самое интересное в это процедуре мне нужно разрисовать грид 2
соответственно таким каким он был сохранен
Procedure TForm3.LoadGrid1;
var
f: textfile;
temp, x, y: integer;
tempstr, znach: string;
begin
assignfile(f, '\Diplom\Tarif\Zima\Tarif2');
reset(f);
readln(f, temp);
stringgrid1.colcount := temp;
readln(f, temp);
stringgrid1.rowcount := temp;
for X := 0 to stringgrid1.colcount - 1 do
for y := 0 to stringgrid1.rowcount - 1 do
begin
readln(F, tempstr);
stringgrid1.cells[x, y] := tempstr;
end;
closefile(f);
////
assignfile(f, '\Diplom\Tarif\Zima\Tarif1');
reset(f);
readln(f, temp);
stringgrid2.colcount := temp;
readln(f, temp);
stringgrid2.rowcount := temp;
for X := 0 to stringgrid2.colcount - 1 do
for y := 0 to stringgrid2.rowcount - 1 do
begin
readln(F, tempstr);
stringgrid2.cells[x, y] := tempstr;
end;
closefile(f);
for X := 1 to stringgrid1.colcount do
for y := 1 to stringgrid1.rowcount do
begin
if Stringgrid1.Cells[x,y] = '1' then
begin
Edit2.Text:=Stringgrid2.Cells[x-1,y-1];
Вот тут
end;
if Stringgrid1.Cells[x,y] = '2' then Edit3.Text:=Stringgrid2.Cells[x-1,y-1];
if Stringgrid1.Cells[x,y] = '3' then Edit4.Text:=Stringgrid2.Cells[x-1,y-1];
if Stringgrid1.Cells[x,y] = '4' then Edit5.Text:=Stringgrid2.Cells[x-1,y-1];
if Stringgrid1.Cells[x,y] = '5' then Edit6.Text:=Stringgrid2.Cells[x-1,y-1];
if Stringgrid1.Cells[x,y] = '6' then Edit7.Text:=Stringgrid2.Cells[x-1,y-1];
if Stringgrid1.Cells[x,y] = '7' then Edit8.Text:=Stringgrid2.Cells[x-1,y-1];
if Stringgrid1.Cells[x,y] = '8' then Edit9.Text:=Stringgrid2.Cells[x-1,y-1];
if Stringgrid1.Cells[x,y] = '9' then Edit10.Text:=Stringgrid2.Cells[x-1,y-1];
if Stringgrid1.Cells[x,y] = '10' then Edit11.Text:=Stringgrid2.Cells[x-1,y-1];
if Stringgrid1.Cells[x,y] = '11' then Edit12.Text:=Stringgrid2.Cells[x-1,y-1];
if Stringgrid1.Cells[x,y] = '12' then Edit13.Text:=Stringgrid2.Cells[x-1,y-1];
if Stringgrid1.Cells[x,y] = '13' then Edit14.Text:=Stringgrid2.Cells[x-1,y-1];
if Stringgrid1.Cells[x,y] = '14' then Edit15.Text:=Stringgrid2.Cells[x-1,y-1];
if Stringgrid1.Cells[x,y] = '15' then Edit16.Text:=Stringgrid2.Cells[x-1,y-1];
if Stringgrid1.Cells[x,y] = '16' then Edit17.Text:=Stringgrid2.Cells[x-1,y-1];
if Stringgrid1.Cells[x,y] = '17' then Edit18.Text:=Stringgrid2.Cells[x-1,y-1];
if Stringgrid1.Cells[x,y] = '18' then Edit19.Text:=Stringgrid2.Cells[x-1,y-1];
if Stringgrid1.Cells[x,y] = '19' then Edit20.Text:=Stringgrid2.Cells[x-1,y-1];
if Stringgrid1.Cells[x,y] = '20' then Edit21.Text:=Stringgrid2.Cells[x-1,y-1];
if Stringgrid1.Cells[x,y] = '21' then Edit22.Text:=Stringgrid2.Cells[x-1,y-1];
if Stringgrid1.Cells[x,y] = '22' then Edit23.Text:=Stringgrid2.Cells[x-1,y-1];
if Stringgrid1.Cells[x,y] = '23' then Edit24.Text:=Stringgrid2.Cells[x-1,y-1];
end;
end;
Сергей М. (2006-11-17 10:47:00) [103]
> нужно чтобы во втором гриде вместо 1 на перво был цвет идентификатор
Еще раз спрашиваю - зачем !?
Ведь ты же сам сказал, что цвет ячейки грида должен точно соответствовать цвету "кликнутого" эдита !
Эдит ужехранит хранит в своем св-ве Color этот идентификатор, так на кой черт еще массив понадобился ? Объясни ты мне, тупому ..
Elen (2006-11-17 10:45:00) [104]
> Читатай
Что тоже валидольчик уже нужен? :)
ЮЮ (2006-11-17 10:43:00) [105]и все это рисовалось бы пр Create формы.
Читатай внимательно [35], [50], [52]
Elen (2006-11-17 10:40:00) [106]
> alex810
в OnDrawCell второго грида прорисовывай колором из такой же ячейки первого грида учитывая твою "палитру" StringGrid1.Invalidate вызывай где угодно и не парься...
ЮЮ (2006-11-17 10:39:00) [107]
> Только что сделал он белый а мне нужно чтобы он рисовал
> в соответсвии что находится в другом гриде и на каком месте.
>
>
Вот в OnDrawCell этого грида и должно быть написано, где взять эти цвета, закраска этими цветами ячеек и вывод текста.
Код этого обработчика в студию, если, конечно это не те самые 2000 строк кода :)
alex810 (2006-11-17 10:39:00) [108]
> Каждые 24 грида соответствуют одному тарифному сезону а
>
> > их 4
Извените обшипся не грида а эдита. Запарился
Elen (2006-11-17 10:38:00) [109]
> Ща попробую нарисовать
У кого нибудь валидолЪчик есть? Так в чем проблема, док?
alex810 (2006-11-17 10:35:00) [110]
> Думаю без скриншота не понять автора... :-\
А куда можно поместить скриншот?
alex810 (2006-11-17 10:34:00) [111]Ща попробую нарисовать
_________
! 1!2!3!4!5!
Например это первый грид. Мне нужно чтобы во втором гриде вместо 1 на перво был цвет идентификатор которого соответствовал бы единице и все это рисовалось бы пр Create формы. Например
procedure TForm3.FormCreate(Sender: TObject);
begin
прорисовка второго грида
end.
или при переходе с одного TabSheet на другой
а если не прорисовывать то рисуе последнее выделение мишью
Elen (2006-11-17 10:32:00) [112]
> Каждые 24 грида соответствуют одному тарифному сезону а
> их 4
>
Думаю без скриншота не понять автора... :-\
Elen (2006-11-17 10:29:00) [113]
> Каждые 24 грида
А в гридах колонок сколько? и чем они заняты?
ASoft (2006-11-17 10:29:00) [114]
> alex810 © (17.11.06 10:22) [38]
>
>
> > А грид 4х7 сделать раз и навсегда мысль не приходила?
>
> У меня восемьгридов 7Х24.
alex810 © (17.11.06 10:27) [43]
> А зачем ещё 96 эдитов? Вочему они не в гриде?
Каждые 24 гридасоответствуют одному тарифному сезону а их 4
Elen (2006-11-17 10:27:00) [115]
> У меня восемь гридов 7Х24
Чем дальше в лес - тем толще партизаны. Даже и не знаю что советовать...
alex810 (2006-11-17 10:27:00) [116]
> А зачем ещё 96 эдитов? Вочему они не в гриде?
Каждые 24 грида соответствуют одному тарифному сезону а их 4
alex810 (2006-11-17 10:26:00) [117]
> Чтобы заставить стринггрид перерисовать все ячейки, достаточно
> написать StringGrid.Invalidate
Только что сделал он белый а мне нужно чтобы он рисовал в соответсвии что находится в другом гриде и на каком месте.
Сергей М. (2006-11-17 10:25:00) [118]Мда ...
Маразм крепчал ..
ЮЮ (2006-11-17 10:23:00) [119]А зачем ещё 96 эдитов? Вочему они не в гриде?
alex810 (2006-11-17 10:22:00) [120]
> А грид 4х7 сделать раз и навсегда мысль не приходила?
У меня восемь гридов 7Х24.