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

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

StringGrid событие DrawCell [D2005, XP]


Страницы:   1 2 3 4 5 6 7 8

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.


Страницы:   1 2 3 4 5 6 7 8

Наверх

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