Форум: "Начинающим";
Текущий архив: 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