Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на Delphi и Lazarus


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты данной рассылки

Орловский Дмитрий
Статус: Профессор
Рейтинг: 4200
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2643
∙ повысить рейтинг »
cradlea
Статус: Практикант
Рейтинг: 1428
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Delphi и Lazarus

Номер выпуска:1584
Дата выхода:17.03.2011, 19:30
Администратор рассылки:Киселёва Алёна aka Verena (Профессор)
Подписчиков / экспертов:261 / 186
Вопросов / ответов:1 / 1

Вопрос № 182469: Здравствуйте уважаемые эксперты! Наведите пожалуйста пример работы с компонентом DrawGrid. Интересует вопрос как заполнять сетку данными, а также работа с свойствами подсвечивания(изменения цвета) отдельных клеток, строк и столбцов. Спасибо большое <...



Вопрос № 182469:

Здравствуйте уважаемые эксперты! Наведите пожалуйста пример работы с компонентом DrawGrid. Интересует вопрос как заполнять сетку данными, а также работа с свойствами подсвечивания(изменения цвета) отдельных клеток, строк и столбцов. Спасибо большое

Отправлен: 11.03.2011, 18:58
Вопрос задал: Мироненко Николай Николаевич (Практикант)
Всего ответов: 1
Страница вопроса »


Отвечает Евгений/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;
Здесь колонки раскрашиваются тремя разными цветами и выводится текст в ячейку в которой то лько что производилось редактирование. Весь тест программы:
Код:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids;

type
TForm1 = class(TForm)
DrawGrid1: TDrawGrid;
procedure DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
procedure DrawGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
const Value: String);
private
{ Private declarations }
public
{ Public declarations }
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;

procedure TForm1.DrawGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
const Value: String);
begin
s:= Value;
lCol:= ACol;
lRow:= ARow;
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 (Россия) | Еще номера »
  • Отправить WebMoney:


  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.



    В избранное