Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.03;
Скачать: CL | DM;

Вниз

StringGrid событие DrawCell   Найти похожие ветки 

 
ЮЮ ©   (2006-11-17 11:47) [120]

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 := ЦВЕТА_ЯЧЕЕК[ARow, ACol];
   TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Cells[aCol, aRow]);
   FillRect(Rect);
end;
end;


Это все что тебе нужно. Осталось в нужным местах заполнять и изменять массив цветов, вызывая после этого перерисовку всего грида StringGrid2.Invalidate


 
ЮЮ ©   (2006-11-17 11:48) [121]

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 := ЦВЕТА_ЯЧЕЕК[ARow, ACol];
   TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Cells[aCol, aRow]);
   FillRect(Rect);
end;
end;


Это все что тебе нужно. Осталось в нужным местах заполнять и изменять массив цветов, вызывая после этого перерисовку всего грида StringGrid2.Invalidate

Для невменяемого автора. Может заметит


 
Elen ©   (2006-11-17 11:49) [122]


>  Как сделать чтобы она прорисовывалась опять так как была

.Invalidate. Все вычисления по колору помести в обработчик отрисовки.
> Та я понимаю что прийдется делать цикл он у меня уже есть
>
> for X := 1 to stringgrid1.colcount do
>   for y := 1 to stringgrid1.rowcount do
>    begin
>      if Stringgrid1.Cells[x,y] = "1" then
>      begin
> Сюда что надо написать

Ничего. Вместо этого цикла Stringgrid1.invalidate; Он сам организует прорисовку.
Вот это if Stringgrid1.Cells[x,y] = "1" then лучше перенести в OnDrawCell


 
Плохиш ©   (2006-11-17 11:49) [123]


> alex810 ©   (17.11.06 11:41) [114]

Чукча-писатель!
Товагищь, в oncreate формы читаешь из файла, сохранённый ранее, массив цветов и вариант, многократно озвученный ЮЮ, отрисует твой грид без каких-либо дополнительных телодвижений с твоей стороны.


 
alex810 ©   (2006-11-17 11:50) [124]


> Это все что тебе нужно. Осталось в нужным местах заполнять
> и изменять массив цветов, вызывая после этого перерисовку
> всего грида StringGrid2.Invalidate

Только что попробовал не получается.


 
ЮЮ ©   (2006-11-17 11:50) [125]

Вынужден был кричать авторским неправильным кодом.

    Brush.Color := ЦВЕТА_ЯЧЕЕК[ARow, ACol];
    FillRect(Rect);
    TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Cells[aCol, aRow]);

Естественно, сначала стереть с доски, а потом на ней написать :)


 
ЮЮ ©   (2006-11-17 11:51) [126]


> Только что попробовал не получается.


Код OnDrawCell - в студию!!!


 
Плохиш ©   (2006-11-17 11:52) [127]


> Elen ©   (17.11.06 11:41) [112]
>
> > А что он нарисует???????
>
> То что ты пропишеш в OnDrawCell.
> Автор не обижайся - просто ты и сам не знаеш чего хочеш.

В данном случае, автор как раз знает что хочет :-) Только степень его знаний по теме не позволяет ему не только найти правильное решение, но, к сожалению, даже понять это решение уже нмогократно пережёванное здесь.


 
Elen ©   (2006-11-17 11:56) [128]

Удалено модератором


 
ASoft   (2006-11-17 11:58) [129]

так.. на чем остановились? :)
>alex810 ©
автор, пока ты не поймешь где, как и что рисуется в принципе вообще  и не сделаешь, простенький пример окрашивания столбца/строки СтрингГрида, тебе будет сложно сваять что-то серьезное!


 
Elen ©   (2006-11-17 12:01) [130]

Удалено модератором


 
alex810 ©   (2006-11-17 12:02) [131]


> Вот это if Stringgrid1.Cells[x,y] = "1" then лучше перенести
> в OnDrawCell


Я так и сделал не получается
procedure TForm3.StringGrid2DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
var x,y:integer;
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
 else
   for X := 1 to stringgrid1.colcount do
  for y := 1 to stringgrid1.rowcount do
   begin
     if Stringgrid1.Cells[x,y] = "1" then
    begin
      if (state = [gdSelected]) then
   with TStringGrid(Sender), Canvas do
   begin
     Brush.Color := Edit2.Color;
     TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Cells[aCol, aRow]);
     FillRect(Rect);
   end
    end;
end;
end;


 
ASoft   (2006-11-17 12:04) [132]

та
> alex810 ©   (17.11.06 12:02) [131]
>
>


>  FillRect(Rect);

так и хочется сказать известную здесь фразу "чукча писатель..." :(


 
KilkennyCat ©   (2006-11-17 12:05) [133]

тайнопись.


 
Elen ©   (2006-11-17 12:06) [134]


> alex810

Когда я говорю Вот это if Stringgrid1.Cells[x,y] = "1" then лучше перенести
> в OnDrawCell
имеется только это, а тоы весь цикель дтуда зафигачил. Совет : попробовать на более простых задачах и примерах понять механизм отрисовки.


 
Плохиш ©   (2006-11-17 12:07) [135]


> alex810 ©   (17.11.06 12:02) [131]

Враньё, этот код компилятор делфи даже не пропустит.


 
Elen ©   (2006-11-17 12:08) [136]


> alex810

Так. Давай спочатку - тебе нужно проверить цифру в ячейке, найти соответствующий ей цвет и отрисовать в такой же ячейке по позиции в другом гриде. Так?


 
Плохиш ©   (2006-11-17 12:09) [137]


> procedure TForm3.StringGrid2DrawCell(Sender: TObject; ACol,
>  ARow: Integer;


>    for X := 1 to stringgrid1.colcount do
>   for y := 1 to stringgrid1.rowcount do

А я - Папа Римский. Спокойно дети мои, спокойно. Там со всеми разберутся...


 
Плохиш ©   (2006-11-17 12:11) [138]


> Плохиш ©   (17.11.06 12:07) [135]

Хотя, умеют же чукчи код форматировать :-)


 
alex810 ©   (2006-11-17 12:12) [139]


> Так. Давай спочатку - тебе нужно проверить цифру в ячейке,
>  найти соответствующий ей цвет и отрисовать в такой же ячейке
> по позиции в другом гриде. Так?

ДАаааааа


 
Elen ©   (2006-11-17 12:13) [140]


> ДАаааааа

Воооо. Нука запусти это :
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;
 const colors : array[0..23] of TColor =
(clWhite,clBlack,clMaroon,clGreen,clOlive,clNavy,clPurple,clTeal
,clGray,clSilver,clRed,clLime,clYellow,clBlue,clFuchsia,clAqua,clMoneyGreen
,clSkyBlue,clCream,clMedGray,clActiveBorder,clActiveCaption,0,0);
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(23));

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(colors[strtoint(StringGrid1.Cells[0,arow])]);
 StringGrid2.Canvas.Brush.Color:=r;
 //StringGrid2.Canvas.Pen.Color:=r;
 StringGrid2.Canvas.FillRect(rect);
end;
//*****End If*****//

end;

end.


Мысли появляются?


 
ASoft   (2006-11-17 12:13) [141]


> Плохиш ©   (17.11.06 12:09) [137]

это у него от отчаянья
> Плохиш ©   (17.11.06 12:11) [138]

копипаст, однако


 
ЮЮ ©   (2006-11-17 12:16) [142]

может код поймет лучше слов?

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   StringGrid1: TStringGrid;
   Button1: TButton;
   procedure FormCreate(Sender: TObject);
   procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
     Rect: TRect; State: TGridDrawState);
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
   FDefaulGridColors: array of array of TColor;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
 i, j: integer;
begin
 SetLength(FDefaulGridColors, StringGrid1.RowCount, StringGrid1.ColCount);
 for i := 0 to StringGrid1.RowCount - 1 do
   for j := 0 to StringGrid1.ColCount - 1 do begin
     FDefaulGridColors[i, j] := RGB(
       Round(i / (StringGrid1.RowCount - 1) * 255),
       Round(j / (StringGrid1.ColCount - 1) * 255),
       0
     );
     StringGrid1.Cells[j, i] := IntToStr((i + 1));
   end;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
begin
 StringGrid1.Canvas.Brush.Color := FDefaulGridColors[ARow, ACol];
 StringGrid1.Canvas.FillRect(Rect);
 StringGrid1.Canvas.Font.Color := StringGrid1.Font.Color;
 StringGrid1.Canvas.TextRect(
   Rect, Rect.Left + 2, Rect.Top + 2, StringGrid1.Cells[aCol, aRow]
 );
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 // перекрасим текущую ячейку в белый
 FDefaulGridColors[StringGrid1.Row, StringGrid1.Col] := clWhite;
 StringGrid1.Invalidate;
end;

end.


 
alex810 ©   (2006-11-17 12:19) [143]

УРА!!!!!!!!!!!! Получилось всем огромное спасибо. Особенно тебе Elen ты была со мной самая терпеливая.


 
ЮЮ ©   (2006-11-17 12:20) [144]

Удалено модератором


 
alex810 ©   (2006-11-17 12:22) [145]

Удалено модератором


 
Elen ©   (2006-11-17 12:24) [146]


> alex810

Вооо. Теперь самое трудное - втолковать сие твоему преподу. Держись студент... ;)


 
alex810 ©   (2006-11-17 12:26) [147]


> Вооо. Теперь самое трудное - втолковать сие твоему преподу.
>  Держись студент... ;)

А втолковывать ничего не надо они все равно прогу не смотрят


 
Сергей М. ©   (2006-11-17 12:28) [148]


> втолковывать ничего не надо они все равно прогу не смотрят


Вот откуда начинается "разврат" будущих инженеров)

"А поршень у двигателя ваще сделан из дерева, патамуша диплом все равно никто не читает" (с) студенческо-дипломное


 
Elen ©   (2006-11-17 12:37) [149]


> А втолковывать ничего не надо они все равно прогу не смотрят

Так нафик тебе эта лабуда на 140 постов. Нарисовал бы в Кореле форму и вставил в отчет.... Лады, надеюс на бущее понял как это делать.


> "А поршень у двигателя ваще сделан из дерева, патамуша диплом
> все равно никто не читает"

К сожелению в моем институте такая же каша.


 
Anatoly Podgoretsky ©   (2006-11-17 12:55) [150]

> Плохиш  (17.11.2006 12:11:18)  [138]

Да брось, откуда
Какое же это форматирование

     begin
end
  else

и ниже

 begin
  end
   end;

Похоже отступы делались методом случайных чисел


 
Anatoly Podgoretsky ©   (2006-11-17 12:56) [151]

> alex810  (17.11.2006 12:26:27)  [147]

> они все равно прогу не смотрят

Наивный, смотрят, просто могут ничего не сказать, если они уже на тебя плюнули.


 
Сергей М. ©   (2006-11-17 13:06) [152]

А я, братцы-кролики, так и не въехал, нафига автору "первый StringGrid", показывающий пользователю какие-то там "идентификаторы" ...

Мне теперь что, на свалку истории ?)


 
Сергей М. ©   (2006-11-17 13:09) [153]

Где там Суслик (С) ?)
Намедни он живо интересовался сей патологией ..


 
Elen ©   (2006-11-17 13:17) [154]


> афига автору "первый StringGrid",

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


> Где там Суслик (С) ?)

Ха Жалко тут Кетмар не появился.


 
Сергей М. ©   (2006-11-17 13:23) [155]


> Автор писал


Все это расчудесно)

Но, повторюсь, тупица я эдакий,  мне не понятно, для чего тот кто по идее должен лупиться на экран, изображающий эту программу, обязан лупиться на эти идентификаторы)

Их, эти идентификаторы, с чем употреблять-то ? Нахрена они показаны тому самому "кому-то" ?) Просто "щоб було" ?)


> Жалко тут Кетмар не появился.


"Да ...уж .." (с) Киса В.


 
Elen ©   (2006-11-17 13:27) [156]


>  Просто "щоб було"

Таки ДА. А що? Може комусь i треба.

P.S. Тупиц тут нет - есть шутники


 
Сергей М. ©   (2006-11-17 13:41) [157]


> Elen ©   (17.11.06 13:27) [156]



> А що? Може комусь i треба


Да вот и прелюбопытно мне - таки кому ?

Преподу оно, как выясняется, даром не надо.. Реальных юзеров сего "шедевра" тоже вроде бы не предвидится ..



Страницы: 1 2 3 4 вся ветка

Текущий архив: 2006.12.03;
Скачать: CL | DM;

Наверх




Память: 0.82 MB
Время: 0.047 c
1-1161708596
carmen
2006-10-24 20:49
2006.12.03
Создание dbgrideh на листе tabsheet компонента pagecontrol


2-1163774426
asg.aleks
2006-11-17 17:40
2006.12.03
редактирование bdf файла из формы


2-1163751720
qui_
2006-11-17 11:22
2006.12.03
inline


2-1163602889
Новый_Юзер
2006-11-15 18:01
2006.12.03
Панель инструментов и кнопки с картинками из ImageList a


1-1161205924
Zurius
2006-10-19 01:12
2006.12.03
Помогите "разобраться с DBGrid