Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
1-1161179463
breeze
2006-10-18 17:51
2006.12.03
Как поставить фокус на subitem в Listview


15-1163749228
TohaNik
2006-11-17 10:40
2006.12.03
Вот они, те кто влияет на неокрепшие души.


15-1163143100
Jeer
2006-11-10 10:18
2006.12.03
Вирус


15-1163581041
ANB
2006-11-15 11:57
2006.12.03
Oracle vs Sybase


2-1163504867
MishaLukash
2006-11-14 14:47
2006.12.03
TCustomDBGrid? видел только в хелпе





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский