Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как запустить событие "OnDrawCell" в StringGrid 
V
    Опции темы
Mersik
  Дата 16.1.2007, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 15.1.2007
Где: Latvija, Riga

Репутация: 1
Всего: 0



Полний нол просит помоши ! надо закрасит определенную ячеику в Stringgrid ! Почитал вроде собитием OnDrawCell ! но как его запустит собитиэ то ето smile  smile   smile  smile 
PM MAIL WWW   Вверх
former
Дата 16.1.2007, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 4
Всего: 17



Пользуйся поиском. Вот например: http://www.terasoft.ru/ru/pages/texteditor.phtml

Добавлено @ 19:06 
Читай DRKB.


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
CatATonik
Дата 16.1.2007, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 12.1.2007
Где: Москва

Репутация: нет
Всего: 8



Оно само запустится, когда грид рисоваться будет. Рисоваться он тоже будет сам, т.ч. ничего делать не надо. Только обработчик OnDrawCell написать и все.
PM MAIL   Вверх
Mersik
Дата 16.1.2007, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 15.1.2007
Где: Latvija, Riga

Репутация: 1
Всего: 0



А что ето за программа ? Мне если 4то в Делфи надо smile

Добавлено @ 19:20 
да я пишу туда

Код

rocedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
   StringGrid1.rowcount :=255;
   StringGrid1.ColCount:=10;

 if  (Acol=2) and (Arow=2) then
  begin
    StringGrid1.Canvas.Brush.Color:=CLred;
    StringGrid1.Canvas.Font.Color:=ClGreen;
  end;

end;



и нол реакции ! 
PM MAIL WWW   Вверх
Sunvas
Дата 16.1.2007, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 2
Всего: 89



Код

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
stringgrid1.Canvas.Brush.Color:=clred;
if (acol=3)and(arow=3) then stringgrid1.Canvas.Rectangle(rect);
stringgrid1.Canvas.Brush.Color:=clwhite;
end;



--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Mersik
Дата 16.1.2007, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 15.1.2007
Где: Latvija, Riga

Репутация: 1
Всего: 0



Правелний ответ ! Замучался

Код

procedure TForm2.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
   Form2.StringGrid1.rowcount :=255; // задаем размер ряд 
   Form2.StringGrid1.ColCount:=10;    // колона

 if  (Acol=1) and (Arow<>0) then  // для всей первой колонки исключая первий столбец 
  begin
    StringGrid1.Canvas.Brush.Color:=$FFCCFF;   // Краска ячеики
    StringGrid1.Canvas.Font.Color:=ClBlack;        // краска шрифта
    end;

    StringGrid1.Canvas.FillRect(rect);                                                                                //ЗАКРАСИТ
    StringGrid1.Canvas.TextOut(rect.Left+1,rect.Top+1,StringGrid1.Cells[Acol,Arow]);    // перепишет поверх свезей краски техт !

енд;

PM MAIL WWW   Вверх
VaiMR
Дата 16.1.2007, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 25.11.2006

Репутация: 1
Всего: 2



Вот еще наработки по данной теме:

Код

const mcol :array[0..3] of tcolor=($FAA6EA, // 0 цвет по-умолчанию
                                   $FADD8A, // 1 выделенная ячейка
                                   $AAFFAA, // 2 правильно заполненная ячейка
                                   $AFAAFF);// 3 неправильно заполненная ячейка
const mfont:array[0..3] of tcolor=($000000, // 0 цвет шрифта по-умолчанию
                                   $000000, // 1 выделенная ячейка
                                   $000000, // 2 правильно заполненная ячейка
                                   $000000);// 3 неправильно заполненная ячейка 
 type
  tstrcolor = class(TObject)
               public
                bkcolor  :TColor;
                fontcolor:tcolor;
              end; 
...

//-------------- создание класса с цветами ячеек таблицы -----------------------
//-------------- и очистка полей таблицы ---------------------------------------------
procedure strgridcolor(protocol: TStringGrid);
var i,j:integer;
begin
 with protocol do
  for i:=1 to ColCount-1 do
   for j:=1 to RowCount-1 do
    begin
     if (Objects[i,j])=nil
      then
       Objects[i,j]:=tstrcolor.Create;
     cells[j,i]:='';
     (Objects[i,j] as TStrColor).bkcolor:=mcol[0];
     (Objects[i,j] as TStrColor).fontcolor:=mfont[0];
    end;
end;
//------------------------------------------------------------------------------

//-------------- меняем цвет ячейки на нужный ----------------------------------
procedure setcolorcell(protocol:tstringgrid;ACol,ARow:Integer;flagcol:byte);
var rect:trect;
begin
 rect:=protocol.CellRect(acol,arow);
 with protocol.Canvas do
  begin
   case flagcol of
    0:   begin
          Brush.color:=(protocol.Objects[acol,arow] as TStrColor).bkcolor;
          Font.Color :=(protocol.Objects[acol,arow] as TStrColor).fontcolor;
         end;
    1:   begin
          Brush.color:=mcol[flagcol];
          Font.Color :=mfont[flagcol];
         end;
    2,3: begin
          Brush.color:=mcol[flagcol];
          Font.Color :=mfont[flagcol];
          (protocol.Objects[acol,arow] as TStrColor).bkcolor:=mcol[flagcol];
          (protocol.Objects[acol,arow] as TStrColor).fontcolor:=mfont[flagcol];
         end;
   end;
   FillRect(Rect);
   TextOut(Rect.Left+2,Rect.Top+2,protocol.Cells[ACol,ARow]);
  end;
end;
//------------------------------------------------------------------------------

//-------------- при перемещении по протоколу ----------------------------------
procedure Tworkwin.protocolDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
 if (acol>0)and(arow>0)
  then
   begin
    setcolorcell(protocol,acol,arow,0);
    if arow<2
     then
      begin
       arow:=2;
       protocol.row:=2;
      end;
    if (gdFocused in State)or(gdselected in State)
     then
      setcolorcell(protocol,acol,arow,1)
   end;
end;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
var protocol: TStringGrid;

и при инициализации формы:
   strgridcolor(protocol); // создадуться обьекты для каждой ячейки, хранящие цвета

PM MAIL ICQ   Вверх
physic
Дата 21.6.2007, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 23.11.2004

Репутация: нет
Всего: нет



в рантайм можно вызвать событие ondrawcell вот так: StringGrid1.Repaint;
PM MAIL   Вверх
Ant_ON
Дата 24.6.2007, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 7.12.2006

Репутация: нет
Всего: нет



MersikVaiMR спасибо за примеры... Давно хотел разобраться с этим вопросом. 
Единственный "минус" - у меня не хватает постов, чтобы поставить "плюсы".  smile 

PM MAIL   Вверх
Alexeis
Дата 24.6.2007, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Цитата(Ant_ON @  24.6.2007,  13:57 Найти цитируемый пост)
Единственный "минус" - у меня не хватает постов, чтобы поставить "плюсы". 
 Поставил.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ant_ON
Дата 25.6.2007, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 7.12.2006

Репутация: нет
Всего: нет



Цитата(Alexeis @  24.6.2007,  15:22 Найти цитируемый пост)
Поставил. 
 
Спасибо за помощь smile

PM MAIL   Вверх
FireSnake
  Дата 9.2.2009, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 201
Регистрация: 15.9.2006
Где: Украина, Донецк

Репутация: нет
Всего: 1



Прочитал эту тему так мне необходимо получить схожий результат. Необходимо реализовать что-то вроде такой процедуры Select(row), которая должна  выполнаять следующие - в таблице stringgrid выделялать всю строку с номером row. Изменил вышеописанную процедуру, но оно вообще перестало работать. 


Код

procedure TForm1.StrGr1DrawCell(Sender: TObject; ACol, ARow,{!!!}row{!!!}: Integer;
  Rect: TRect; State: TGridDrawState);
begin
   StrGr1.rowcount :=256; // çàäàåì ðàçìåð ðÿä
   StrGr1.ColCount:=10;    // êîëîíà

 if  (Arow=row) then  // äëÿ âñåé ïåðâîé êîëîíêè èñêëþ÷àÿ ïåðâèé ñòîëáåö
  begin
    StrGr1.Canvas.Brush.Color:=$FFCCFF;   // Êðàñêà ÿ÷åèêè
    StrGr1.Canvas.Font.Color:=ClBlack;        // êðàñêà øðèôòà
    end;

    StrGr1.Canvas.FillRect(rect);                                                                                //ÇÀÊÐÀÑÈÒ
    StrGr1.Canvas.TextOut(rect.Left+1,rect.Top+1,StrGr1.Cells[Acol,Arow]);    // ïåðåïèøåò ïîâåðõ ñâåçåé êðàñêè òåõò !


end;


Как правильно необходимо это реализовать? 

Это сообщение отредактировал(а) FireSnake - 9.2.2009, 22:47
PM MAIL ICQ   Вверх
FireSnake
Дата 9.2.2009, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 201
Регистрация: 15.9.2006
Где: Украина, Донецк

Репутация: нет
Всего: 1



Сам разобрался. Сделал глобальную переменную а не через передачу в процедуру.

Это сообщение отредактировал(а) FireSnake - 10.2.2009, 00:00
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0939 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.