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
;


alex810   (2006-11-17 09:55:00) [141]

Та с чтение файлов у меня проблем нет. А насчет ,что препада жалко я не обижаюсь если бы они хотя бы что нибудь подсказали а то сами не хр.. не знают.


Elen   (2006-11-17 09:55:00) [142]


>  2 грида и 24 эдита.

Так теперь эдиты появилисЪЪЪ. А первый грид нафея?


Сергей М.   (2006-11-17 09:52:00) [143]


> alex810 ©   (17.11.06 09:41) [10]


А причем здесь кнопка ?


> По этому идентификатору программа обращается в массив где
> находятся цвета


Хоть убей - не вижу в твоем коде никакого "массива где находятся цвета"


ASoft   (2006-11-17 09:50:00) [144]

а, дык у тебя там temp есть... просто, я привык к eof ;)


alex810   (2006-11-17 09:50:00) [145]

У меня в OnDrawCell уже есть прорисовка части грида в зависимости от выделения мыши. Попробую объяснить все заново. У меня есть 2 грида и 24 эдита. Мне нужно сделать тарификацию по часам и дням недели. Каждому эдиту соответствует свой цвет.При клике на эдит цвет во втором гриде меняется в соответствии с цветом эдита я выделяю область в гриде в это время уже осуществляется обработка события OnDrawCell также в первом гриде сохраняется значения Edit.Text. Во втором гриде прописывается идентификатор цвета. Потом я все это сохраняю. Мне необходимо при запуске программы разрисовать второй грид как он был до закрытия окна. Идентификатор у меня уже прописывается в первом гриде на том же самом месте что и цвет во втором.


ASoft   (2006-11-17 09:47:00) [146]

>alex810 ©   (17.11.06 09:41) [10]
сразу скажу, пока не забыл, читай файл и добавляй строки, а то строк/столбцов может быть больше. А файл имеет привычку внезапно заканчиваться :)


Elen   (2006-11-17 09:44:00) [147]


> alex810

Позволь навести тебя на мысль : Попробуй этот примерчик, может тебе будет так проще...
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, Grids;

type
 TForm1 = class(TForm)
   StringGrid1: TStringGrid;
   StringGrid2: TStringGrid;
   procedure FormCreate(Sender: TObject);
   procedure StringGrid2DrawCell(Sender: TObject; ACol, ARow: Integer;
     Rect: TRect; State: TGridDrawState);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var i:dword;
begin
//********* FOR ******************
Randomize;
for i :=0  to StringGrid1.RowCount-1  do
begin
StringGrid1.Cells[0,i]:=inttostr(random(256*256*256));
end;
//******* END FOR ****************
end;

procedure TForm1.StringGrid2DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
var r:Tcolor;
begin
//*******IF********//
if (acol=1)and(StringGrid1.Cells[0,arow]<>'') then begin
 r:=integer(strtoint(StringGrid1.Cells[0,arow]));
 StringGrid2.Canvas.Brush.Color:=r;
 //StringGrid2.Canvas.Pen.Color:=r;
 StringGrid2.Canvas.FillRect(rect);
end;
//*****End If*****//

end;

end.


P.S. если ты пишеш диплом - то мне жалко твоего препода (без обид)


alex810   (2006-11-17 09:41:00) [148]

Идентификатор цвета находится в первом гриде. По этому идентификатору программа обращается в массив где находятся цвета и рисует ячейки этим цветом и на томже самом месте во втором гриде.
Вот код

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];
{Здесь он должен нарисоваться}
       TForm3.StringGrid2DrawCell(StringGrid2, X,Y,, gdFixed);

      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;


Elen   (2006-11-17 09:36:00) [149]


> Мне такую проверку нужно делать вне  события OnDrawCell

Почему?


Elen   (2006-11-17 09:35:00) [150]


>  В другом StringGrid необходимо по этому идентификатору
> разрисовать ячейку в которой находится этот идентификатор
> в первом StringGrid

Что-то я не пойму. (Чешу репу...) У тебя есть в ячейках первого грида числа-цвет. Этим цветом нужно закрасить соответствующие ячейки во втором гриде или что?


alex810   (2006-11-17 09:33:00) [151]

Мне такую проверку нужно делать вне  события OnDrawCell


Сергей М.   (2006-11-17 09:31:00) [152]


> alex810 ©   (17.11.06 09:18) [3]


На то есть событие OnDrawCell.

var
 Color: TColor;

..

 if FirstGrid.Cells[ACol, ARow] = 'Красный' then
   Color := clRed
 else if FirstGrid.Cells[ACol, ARow] = 'Синий' then
   Color := clBlue
 else if FirstGrid.Cells[ACol, ARow] = 'Зеленый' then
   Color := clGreen;
 with TDrawGrid(Sender) do begin
  Brush.Color := Color;
  Canvas.FillRect(Rect);
 end;


alex810   (2006-11-17 09:25:00) [153]

Мне цвет брать не нужно. Мне нужно взять идентификотор и по этому идентификатору нарисовать цвет ячейки. Здесь можно вставить картинку, чтобы показать?


Elen   (2006-11-17 09:21:00) [154]


> alex810

Ха так тебе не нужно самостоятельно вызывать OnDrawCell. пропиши в нем брать цвет из рядомлежащего Грида и наслаждайся


alex810   (2006-11-17 09:18:00) [155]

Задача вот в чем. У меня есть два StringGrid в одной из который хранится идентификатор цвета который берется из файла. В другом StringGrid необходимо по этому идентификатору разрисовать ячейку в которой находится этот идентификатор в первом StringGrid


Сергей М.   (2006-11-17 09:16:00) [156]

The ARect parameter gives the boundaries of the cell in the coordinates of the canvas
Параметр ARect задает границы ячейки в координатах канвы.


Elen   (2006-11-17 09:14:00) [157]


> не знаю что такое Rect: TRect

Это габарит ячейки с которой будет работать событие. А зачем тебе это - помоему refresh или repaint должно быть достаточно для всей перерисовки. В чем задача?


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

Наверх

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