Вопрос № 182469: Здравствуйте уважаемые эксперты! Наведите пожалуйста пример работы с компонентом DrawGrid. Интересует вопрос как заполнять сетку данными, а также работа с свойствами подсвечивания(изменения цвета) отдельных клеток, строк и столбцов. Спасибо большое <...
Вопрос № 182469:
Здравствуйте уважаемые эксперты! Наведите пожалуйста пример работы с компонентом DrawGrid. Интересует вопрос как заполнять сетку данными, а также работа с свойствами подсвечивания(изменения цвета) отдельных клеток, строк и столбцов. Спасибо большое
Отвечает Евгений/Genia007/ (Профессионал) :
Здравствуйте, Мироненко Николай Николаевич! Для любого компонента TDrawGridl обязательно создается обработчик OnDrawCel, т. к. без него компонент не сможет заполнить пустые клетки каким-либо изображением или текстом. Например такой:
Код:
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin //Если ячейка получает фокус, то нам надо закрасить её другими цветами if (gdFocused in State) then begin DrawGrid1.Canvas.Brush.Color:= clOlive; DrawGrid1.Canvas.Font.Color:= clWhite; end else //Если же ячейка теряет фокус, то закрашиваем её красным или зелёным или голубым if ACol = 1 t
hen //третья колонка будет зелёной, другие - ячейки красными и голубыми DrawGrid1.Canvas.Brush.color := clGreen else if ACol = 2 then DrawGrid1.canvas.brush.Color := clRed else if ACol = 3 then DrawGrid1.canvas.brush.Color := clblue; //Теперь закрасим ячейки, но только, если ячейка не Title- Row/Column //Естественно это завит от того, есть у Вас title-Row/Columns или нет. if (ACol > 0) and (ARow > 0) then begin
//Закрашиваем бэкграунд DrawGrid1.Canvas.FillRect(Rect); DrawGrid1.Font.Color:= clAqua; //Выводим текст (Text). Также здесь можно добавить выравнивание и т.д.. if (ACol = lCol) and (ARow = lRow) then begin DrawGrid1.Canvas.TextOut(Rect.Left, Rect.Top, s); s:= ''; end; end; end;
Здесь колонки раскрашиваются тремя разными цветами и выводится текст в ячейку в которой то
лько что производилось редактирование. Весь тест программы:
var Form1: TForm1; s: string; lCol, lRow: integer;
implementation
{
$R *.dfm}
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin //Если ячейка получает фокус, то нам надо закрасить её другими цветами if (gdFocused in State) then begin DrawGrid1.Canvas.Brush.Color:= clOlive; DrawGrid1.Canvas.Font.Color:= clWhite; end else //Если же ячейка теряет фокус, то закрашиваем её красным или зелёным или голубым if ACol = 1 then //третья колонка будет зелёной ,
другие - ячейки красными и голубыми DrawGrid1.Canvas.Brush.color := clGreen else if ACol = 2 then DrawGrid1.canvas.brush.Color := clRed else if ACol = 3 then DrawGrid1.canvas.brush.Color := clblue; //Теперь закрасим ячейки, но только, если ячейка не Title- Row/Column //Естественно это завит от того, есть у Вас title-Row/Columns или нет. if (ACol > 0) and (ARow > 0) then begin
//Закрашиваем бэкграунд DrawGrid1.Canvas.FillRect(Rect); DrawGrid1.Font.Color:= clAqua; //Выводим текст (Text). Т
акже здесь можно добавить выравнивание и т.д.. if (ACol = lCol) and (ARow = lRow) then begin DrawGrid1.Canvas.TextOut(Rect.Left, Rect.Top, s); s:= ''; end; end; end;
Здесь процедура DrawGrid1SetEditText передаёт переменным текст ячейки и её
номер. Свойство DrawGrid1.Options.goEditing нужно выставить в true. Компонент постоянно перерисовывается, поэтому данные нужно хранить например в StringList.
Весь проект в прикреплённом файле.
Прикрепленный файл:загрузить »
----- Помогли тебе, помоги и ты.
Ответ отправил: Евгений/Genia007/ (Профессионал)
Ответ отправлен: 16.03.2011, 15:56
Номер ответа: 266280 Казахстан, Петропавловск Тел.: 87776918987 Адрес сайта:Выложены мои программы со статусом freeware ICQ # 573729535 Абонент Skype: jonixjon
Оценка ответа: 5
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 266280
на номер 1151 (Россия) |
Еще номера »
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.