Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
ВнизStringGrid событие DrawCell Найти похожие ветки
← →
Сергей М. © (2006-11-17 10:25) [40]Мда ...
Маразм крепчал ..
← →
alex810 © (2006-11-17 10:26) [41]
> Чтобы заставить стринггрид перерисовать все ячейки, достаточно
> написать StringGrid.Invalidate
Только что сделал он белый а мне нужно чтобы он рисовал в соответсвии что находится в другом гриде и на каком месте.
← →
Elen © (2006-11-17 10:27) [42]
> У меня восемь гридов 7Х24
Чем дальше в лес - тем толще партизаны. Даже и не знаю что советовать...
← →
alex810 © (2006-11-17 10:27) [43]
> А зачем ещё 96 эдитов? Вочему они не в гриде?
Каждые 24 грида соответствуют одному тарифному сезону а их 4
← →
Elen © (2006-11-17 10:29) [44]
> Каждые 24 грида
А в гридах колонок сколько? и чем они заняты?
← →
ASoft (2006-11-17 10:29) [45]
> 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:32) [46]
> Каждые 24 грида соответствуют одному тарифному сезону а
> их 4
>
Думаю без скриншота не понять автора... :-\
← →
alex810 © (2006-11-17 10:34) [47]Ща попробую нарисовать
_________
! 1!2!3!4!5!
Например это первый грид. Мне нужно чтобы во втором гриде вместо 1 на перво был цвет идентификатор которого соответствовал бы единице и все это рисовалось бы пр Create формы. Например
procedure TForm3.FormCreate(Sender: TObject);
begin
прорисовка второго грида
end.
или при переходе с одного TabSheet на другой
а если не прорисовывать то рисуе последнее выделение мишью
← →
alex810 © (2006-11-17 10:35) [48]
> Думаю без скриншота не понять автора... :-\
А куда можно поместить скриншот?
← →
Elen © (2006-11-17 10:38) [49]
> Ща попробую нарисовать
У кого нибудь валидолЪчик есть? Так в чем проблема, док?
← →
ЮЮ © (2006-11-17 10:39) [50]
> Только что сделал он белый а мне нужно чтобы он рисовал
> в соответсвии что находится в другом гриде и на каком месте.
>
>
Вот в OnDrawCell этого грида и должно быть написано, где взять эти цвета, закраска этими цветами ячеек и вывод текста.
Код этого обработчика в студию, если, конечно это не те самые 2000 строк кода :)
← →
alex810 © (2006-11-17 10:39) [51]
> Каждые 24 грида соответствуют одному тарифному сезону а
>
> > их 4
Извените обшипся не грида а эдита. Запарился
← →
Elen © (2006-11-17 10:40) [52]
> alex810
в OnDrawCell второго грида прорисовывай колором из такой же ячейки первого грида учитывая твою "палитру" StringGrid1.Invalidate вызывай где угодно и не парься...
← →
ЮЮ © (2006-11-17 10:43) [53]и все это рисовалось бы пр Create формы.
Читатай внимательно [35], [50], [52]
← →
Elen © (2006-11-17 10:45) [54]
> Читатай
Что тоже валидольчик уже нужен? :)
← →
Сергей М. © (2006-11-17 10:47) [55]
> нужно чтобы во втором гриде вместо 1 на перво был цвет идентификатор
Еще раз спрашиваю - зачем !?
Ведь ты же сам сказал, что цвет ячейки грида должен точно соответствовать цвету "кликнутого" эдита !
Эдит уже хранит хранит в своем св-ве Color этот идентификатор, так на кой черт еще массив понадобился ? Объясни ты мне, тупому ..
← →
alex810 © (2006-11-17 10:54) [56]Извените связ оборвалась
Кликаем на гриде 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:57) [57]
> alex810 © (17.11.06 10:34) [47]
> Мне нужно чтобы во втором гриде вместо 1 на перво был цвет
> идентификатор которого соответствовал бы единице и все это
> рисовалось бы пр Create формы.
Ой, дайте, я тоже здесь расслаблюсь :-))
Не пора ли уже почитать основы работы используемой ОС и системы разработки? В креате формы ничего не рисуется, для отрисовки объектов им(объектам) посылаются соответствующие сообщения, при получении которых, объект и должен позаботиться о своей отрисовки.
← →
_RusLAN © (2006-11-17 10:59) [58]И как это такое получается - 50 постов, а ни автор не понял что ему советуют, ни отвечающие не поняли что надо автору. Это надо уметь...
← →
Сергей М. © (2006-11-17 11:00) [59]Ему про фому, а он все про ерему)
Ты на [55] таки соизволишь ответить ?
← →
Плохиш © (2006-11-17 11:01) [60]
> _RusLAN © (17.11.06 10:59) [58]
> И как это такое получается - 50 постов, а ни автор не понял
> что ему советуют, ни отвечающие не поняли что надо автору.
У автора талант :-)
← →
Elen © (2006-11-17 11:01) [61]Во-первых :
> Сохраняем в файле идентификатор цвета в гриде 1 и положение
> этого цвета
Для этого есть Stringgrid.row[i].Savetofile();
Во-вторых :
> Кликаем на гриде 2 и запоминаем начальную позицию выделения
>
> Отпускаем мышу и запоминаем конечную позицию выделения.
> В гриде 2 записываем цену которая указана в эдите. В гриде
> 1 записываем идентификатор цвета который соответсвтует цвету
> едита
Зачем такие сложности. Выделяй по нормальному Shift+click
И в-третьих так в чем проблема?
← →
Elen © (2006-11-17 11:04) [62]
> _RusLAN © (17.11.06 10:59) [58]
>
> И как это такое получается - 50 постов, а ни автор не понял
> что ему советуют, ни отвечающие не поняли что надо автору.
> Это надо уметь...
Терпение мой друг - общение это главное, а о чем... Да ладно, неважно.... ;)
← →
alex810 © (2006-11-17 11:04) [63][55] Идентификатор нужен для хранения в файле и последующей прорисовке в гриде при необходимости.
← →
alex810 © (2006-11-17 11:06) [64]
> Зачем такие сложности. Выделяй по нормальному Shift+click
> И в-третьих так в чем проблема?
Мне нужно чтобы выделить мышью. При закрытии программы прорисовка с грида пропадает а мне нужно чтобы при запуске программы прорисовка которая была при закрытии программы прорисовывалась все заново.
← →
Сергей М. © (2006-11-17 11:07) [65]
> alex810 © (17.11.06 11:04) [63]
Ты вообще способен понять вопрос на русском языке ?)
Я не спрашиваю тебя, зачем он нужен, я спрашиваю зачем тебе нужем массив, дублирующий уже имеющуюся в эдитах инф-цию о цвете ?
← →
alex810 © (2006-11-17 11:08) [66]
> Не пора ли уже почитать основы работы используемой ОС и
> системы разработки? В креате формы ничего не рисуется, для
> отрисовки объектов им(объектам) посылаются соответствующие
> сообщения, при получении которых, объект и должен позаботиться
> о своей отрисовки.
Я понимаю что не прорисовывалась у меня первый вопрос был как вызвать процедуру DrawCell при креате формы
← →
Elen © (2006-11-17 11:09) [67]
> Мне нужно чтобы выделить мышью.
Ну дык а я о чем - нажал шифт и выделяй мушкой от...до.
Чесс слово - я так и до сих пор не понимаю цели всего этого
← →
alex810 © (2006-11-17 11:10) [68]
> Я не спрашиваю тебя, зачем он нужен, я спрашиваю зачем тебе
> нужем массив, дублирующий уже имеющуюся в эдитах инф-цию
> о цвете ?
А что при необходимости не проще ли обратится к массиву цветов по идентификатору чем проверять какому едиту соответсвует этот идентификатор?
← →
ASoft (2006-11-17 11:10) [69]>alex810 ©
коли пустили твой сабжевый вопрос побоку (точнее, оставили в сторонке), ответь, пожалуйста >Сергей М. © (17.11.06 11:07) [65]
а то точно, здесь кого-нибудь кондрат хватит
← →
Elen © (2006-11-17 11:10) [70]
> как вызвать процедуру DrawCell при креате формы
А это ничего не даст. При креате на экране ничего нет. Все паинты потом в Show
← →
Плохиш © (2006-11-17 11:10) [71]
> как вызвать процедуру DrawCell при креате формы
Афигеть, и он начал свой пост со слов "Я понимаю", я рыдаю...
Какой смысл вызывать DrawCell при креате формы?
← →
Плохиш © (2006-11-17 11:11) [72]
> Ну дык а я о чем - нажал шифт и выделяй мушкой от...до.
Как эротично.... :-)
← →
Elen © (2006-11-17 11:12) [73]
> А что при необходимости не проще ли обратится к массиву
> цветов по идентификатору чем проверять какому едиту соответсвует
> этот идентификатор?
В Эдитах есть свойство tag. Туда и можно заложить твой иденты.
> а то точно, здесь кого-нибудь кондрат хватит
Привет Кондратию!
← →
ASoft (2006-11-17 11:12) [74]
> Я понимаю что не прорисовывалась у меня первый вопрос был
> как вызвать процедуру DrawCell при креате формы
щас придут Кетмарь и Процент, вот тогда поймешь ;)
← →
ЮЮ © (2006-11-17 11:12) [75]
> При закрытии программы прорисовка с грида пропадает а мне
> нужно чтобы при запуске программы прорисовка которая была
> при закрытии программы прорисовывалась все заново.
Ты хоть раз приведёшь код этого злосчастного OnDrawCell, который до закрытия программы все красит как надо, а после, изверг, никак не хочет?
← →
alex810 © (2006-11-17 11:12) [76]ЛЮДИ Давайте я скину кому нибудь на мыло скриншот с объяснение что мне нужно. Может он более понятней сформирует вопрос чем я.
← →
Elen © (2006-11-17 11:13) [77]
> Плохиш
Описка !!! 8D (надеюсь никому на ум не придет запятую в этом слове поставить...)
← →
Плохиш © (2006-11-17 11:14) [78]
> Может он более понятней сформирует вопрос чем я.
100 Euro по предоплате за правильно сформулированный вопрос :-)
← →
alex810 © (2006-11-17 11:14) [79]
> В Эдитах есть свойство tag. Туда и можно заложить твой иденты.
[73]
Я так и сделал
← →
Elen © (2006-11-17 11:15) [80]
> ЛЮДИ Давайте я скину кому нибудь на мыло скриншот с объяснение
> что мне нужно. Может он более понятней сформирует вопрос
> чем я.
Только не мне!!! Я точно не пойму скрин - я уже ничего не понимаю... Привет Кондратик!
Страницы: 1 2 3 4 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
Память: 0.64 MB
Время: 0.053 c