Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.81 MB
Время: 0.05 c
15-1163143100
Jeer
2006-11-10 10:18
2006.12.03
Вирус


15-1163590192
Click
2006-11-15 14:29
2006.12.03
Снова вопрос "организации алгоритма"


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


2-1163778805
Adios
2006-11-17 18:53
2006.12.03
?


1-1161800306
MishaL
2006-10-25 22:18
2006.12.03
TListView. Columns не меняет ширину при изменении текста





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский