Форум: "Начинающим";
Текущий архив: 2011.02.13;
Скачать: [xml.tar.bz2];
Внизstringgrid Найти похожие ветки
← →
Jacksotnik © (2010-11-25 10:43) [0]Добрый день всем. У меня такой вопрос.
Есть 2 стриггрида используются для наглядности при импорте данных, в один выводятся клиенты по которым прошло обновление данных, а во-второй новые клиенты которые добавились в базу.
Я хочу все это свести в один stringgrid и в нем разделять эти записи цветами, помогите реализовать по сути данные о новых и о обновленных абсолютно одинаковые тоесть нет какогото признака по которым можно их различить, просто проверяется наличие человека в базе по коду если есть то обновляется а если нет то добавляется новый
вот кусок кода где это происходит:
if myquery1.RecordCount=1 then
begin
if strtofloat(buf[5])>summ then
begin
//Тут хочу сдалать один цвет
inc(j);
stringgrid1.Cells[0,j]:=buf[1];
stringgrid1.Cells[1,j]:=buf[5];
stringgrid1.Cells[2,j]:=buf[6];
end;
end
else if myquery1.RecordCount=0 then
begin
//А тут другой цвет
inc(k);
stringgrid2.Cells[0,k]:=buf[1];
stringgrid2.Cells[1,k]:=buf[5];
stringgrid2.Cells[2,k]:=buf[6];
end;
помогите пожалуйста как можно раскрасить эти ячейки
← →
Плохиш © (2010-11-25 10:53) [1]У каждой ячейки есть свойство object.
← →
Jacksotnik © (2010-11-25 10:59) [2]Можно подробней и с примером пожалуйста, ато я не совсем понял
← →
12 © (2010-11-25 11:42) [3]procedure TForm1.strngrd1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if (ACol = 1) and (ARow = 1) then strngrd1.Canvas.Brush.Color := clRed;
strngrd1.Canvas.FillRect(Rect);
end;
← →
Anatoly Podgoretsky © (2010-11-25 11:46) [4]OnDrawColumnCell
← →
Leonid Troyanovsky © (2010-11-25 11:53) [5]
> Jacksotnik © (25.11.10 10:43)
> Я хочу все это свести в один stringgrid и в нем разделять
> эти записи цветами
http://delphimaster.net/view/2-1287849951/
--
Regards, LVT.
← →
Jacksotnik © (2010-11-25 12:00) [6]Спасибо всем. Вроде разобрался
← →
Jacksotnik © (2010-11-25 13:53) [7]Возник новый вопрос. У меня должно быть 2 цвета в таблице. Но после каждого вызова onDrawCell оно перерисовывает всю таблицу и то что было нарисовано не сохраняет, короче получается все одним цветом
← →
12 © (2010-11-25 14:03) [8]procedure TForm1.strngrd1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if (ACol = 1) and (ARow = 1) then strngrd1.Canvas.Brush.Color := clRed;
if (ACol = 2) and (ARow = 2) then strngrd1.Canvas.Brush.Color := clGreen;
strngrd1.Canvas.FillRect(Rect);
strngrd1.Canvas.TextOut(Rect.Left, Rect.Top, strngrd1.Cells[ACol, ARow]);
← →
Германн © (2010-11-25 14:05) [9]
> Возник новый вопрос. У меня должно быть 2 цвета в таблице.
> Но после каждого вызова onDrawCell оно перерисовывает всю
> таблицу и то что было нарисовано не сохраняет, короче получается
> все одним цветом
> У каждой ячейки есть свойство object.
>
← →
Jacksotnik © (2010-11-25 14:14) [10]
> У каждой ячейки есть свойство object.
Можете поподробней описать как с этим свойством работать именно в моем случае, я не могу разобраться с ним
← →
Jacksotnik © (2010-11-25 14:17) [11]нашел вот єто:
stringgrid1.Objects[acol,arow]:=tobject($FFCCFF);
но куда его ставить и что с ним делать не приложу ума. Помогите пожалуйста
← →
Jacksotnik © (2010-11-25 14:19) [12]Меня интересует вопрос именно сохранения состояния уже закрашенных ячеек.
← →
Плохиш © (2010-11-25 14:20) [13]Обучаю основам программирования - дорого, по предоплате.
← →
Jacksotnik © (2010-11-25 14:21) [14]Очень смешно.
← →
Anatoly Podgoretsky © (2010-11-25 14:22) [15]
> Меня интересует вопрос именно сохранения состояния уже закрашенных
> ячеек.
Никакого сохранения не надо.
← →
Jacksotnik © (2010-11-25 14:28) [16]Ну кто-то может написать как правильно использовать свойство objects в моем случае
← →
И. Павел © (2010-11-25 14:38) [17]> Ну кто-то может написать как правильно использовать свойство
> objects в моем случае
Все уже расписали. Осталось только объединить это вот так:procedure TForm1.sgDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
sg.Canvas.Brush.Color := TColor(sg.Objects[ACol, ARow]);
sg.Canvas.FillRect(Rect);
sg.Canvas.TextOut(Rect.Left, Rect.Top, sg.Cells[ACol, ARow]);
end;
procedure TForm1.FormShow(Sender: TObject);
var i, j: integer;
begin
for i := 1 to sg.RowCount do
for j := 1 to sg.ColCount do
if i <> j then sg.Objects[j, i] := TObject(clGreen)
else sg.Objects[j, i] := TObject(clRed);
end;
← →
Jacksotnik © (2010-11-25 15:00) [18]Спасибо тебе, работает только при открытии форма весь stringgrid залит черным)))
← →
И. Павел © (2010-11-25 15:07) [19]> Спасибо тебе, работает только при открытии форма весь stringgrid
> залит черным)))
Наверное, FormShow не привязан к соответствующему событию формы, и поэтому все объекты ссылаются на 0.
Это просто пример. В твоей программе изначально нужно заливать не green и red, а, например, white.
А при редактировании значения ячейки, пишем, например:
sg.Objects[x, y] := TObject(clRed)
И измененная ячейка выделяется красным.
← →
Jacksotnik © (2010-11-25 15:10) [20]Спасибо. Все работает
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.02.13;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.003 c