Форум: "Базы";
Текущий архив: 2003.10.30;
Скачать: [xml.tar.bz2];
ВнизВ гриде - посередине вместо числа Найти похожие ветки
← →
MsGuns (2003-10-08 17:06) [0]В гриде и в репорте с ентого грида надо чтоб если сумма в поле отсутствует рисовать "-" в центре ячейки. Я понимаю, что это идеотизм - именно в центре, но ТАК НАДА для тетеньки. Я обычно выствавляю за такие выкрутасы или астрономические счета (чтоб не выеживались, блин) или вежливо посылаю. Но этот заказчие особый, а тетенька - жена дира. Короче, бьюсь, но не получается. Интуитивно чувствую, что элементарно, но не получается ;(((
Знаю, что по OnGetText или по OnDrawColumnCell, но отцентровать не получается !
Прошу прощение за ламерство, но снизойдите, мастера !
← →
MsGuns (2003-10-08 17:07) [1]Пардон, забыл малюсенькую деталь: сами числа и в гриде, и в репорте выровнены к правой границе.
← →
Delirium^.Tremens (2003-10-08 17:10) [2]Если мне память не изменяет (а скорее всего изменяет), делал я такое в OnGetText для филда.
Делфи нет под рукой посмотреть :-)
← →
Arm79 (2003-10-08 17:34) [3]
> OnDrawColumnCell
Анализируй ширину рисуемого столбца
← →
Arm79 (2003-10-08 17:36) [4]Или создай вычисляемое поле, в которое пихай в строковом выражении числа. Если нет числа, то "-". А столбец выровняй по центру
← →
MsGuns (2003-10-08 17:40) [5]>Arm79 © (08.10.03 17:34) [3]
>Анализируй ширину рисуемого столбца
Надо ж во-первых, определить ширину в пикселах самой черточки, а потом уж ее дополнять справа пробелами пока не выйдет ширина=половине столбца. Но вот не соображу как енто сделать (т.е определить ширину текста). Если можно, маленький кодик...;))
← →
A_N_D (2003-10-08 17:44) [6]DBGrid1.Canvas.TextWidth("-")
← →
Arm79 (2003-10-08 17:44) [7]Такой опытный программер 8-0))), и просит код? Вовсе не обязательно при OnDrawColumnCell вставлять символ "-". Можно ведь его нарисовать (LineTo). Так код приводить или уже и так понятно?
← →
Romkin (2003-10-08 17:44) [8]Canvas.TextWidth
А на OnDrawColumnCell делай TextOut :) Никаких пробелов, там по точкам
← →
Johnmen (2003-10-08 17:46) [9]Ну как в гриде - понятно. Вычисляем ширину символа, ширину ячейки и далее позицию отображения символа.
А какой генератор отчетов ?
Если QR, то просто в BeforePrint"е бенда выставляешь нужное выравнивание , а в OnPrint"e - значение. Если компонент отображения типа TQRLabel, то значение можно и в бефорепринте...
>определить ширину в пикселах самой черточки
TextWidth канваса
← →
MsGuns (2003-10-08 17:51) [10]A_N_D © (08.10.03 17:44) [6]
Как можно определять ширину рисуемого текста вообще для грида, если фонты в ячейках (столбцах) могут отличаться ?
>Arm79 © (08.10.03 17:44) [7]
>Такой опытный программер 8-0))),
Если б я был такой опытный, я б не лазал по форумам и вообще был бы щас не здесь...
Если не трудно, приведи, пожалуйста
← →
Delirium^.Tremens (2003-10-08 17:52) [11]Пушки, воробьи...
Она что, штангенциркулем будет измерять? :-)
Добавь примерное количество пробелов и на боковую :-)
"- "
← →
Anatoly Podgoretsky (2003-10-08 17:54) [12]Указал юы какой генератор отчета
← →
MsGuns (2003-10-08 18:01) [13]С генератором (QReport) я сам разобрался (BeforePrint детального бэнда), а с гридом чего-то не получается...
Щас еще попробую с канвой, если не получится, выкину код.
ЗЫ. Классно получилось ! "Выкину" в смысле покажу в посте. Хотя может и выкинуть бы надо ;)))
ЗЗЫ. Что-то седни у меня ручки шалят не по-детски ;)))
← →
MsGuns (2003-10-08 18:42) [14]Значицца так:
procedure TForm1.grReportDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
const
emptnum: string = "---";
begin
if Column.FieldName<>"C10OUTQTT" then exit;
if (Column.Field.AsString="") or
(Column.Field.AsString="0") then
with Sender as TDBGrid do
Canvas.TextOut(Rect.Left+((Rect.Right-Rect.Left-Canvas.TextWidth(emptnum)) div 2),Rect.Top,emptnum);
end;
procedure TForm1.cdsRep8C10OUTQTTGetText(Sender: TField; var Text: String;
DisplayText: Boolean);
begin
if (Sender.AsString="") or (Sender.AsString="0") then Text := ""
else Text := Sender.AsString;
end;
Осталось прикутить второй обработчик нужным филдам, а в первый всобачить перебор имен ентих филдов и усе заработает.
Но как-то все некрасиво, кустарно как-то ;((
А как мастера робят ?
← →
Arm79 (2003-10-08 18:46) [15]В общем, что-то вроде этого.
Я не проводил анализ содержимого поля, поэтому черточки везде.
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
R:TRECT;
begin
R:=Rect;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
DBGrid1.Canvas.Pen.Color:=clblack;
DBGrid1.Canvas.Pen.Width:=1;
DBGrid1.Canvas.MoveTo(R.Left+round((R.Right-R.Left)/2-3), round(R.Top+(R.Bottom-R.Top)/2));
DBGrid1.Canvas.LineTo(R.Left+round((R.Right-R.Left)/2+3), round(R.Top+(R.Bottom-R.Top)/2));
end;
← →
Arm79 (2003-10-08 18:49) [16]Вместо длины в 6 можно использовать > DBGrid1.Canvas.TextWidth("-")
← →
MsGuns (2003-10-08 18:57) [17]>Arm79 © (08.10.03 18:46) [15]
Ну ты, блин, даешь ! Прям черту и рисуешь !!! А я обойдусь символом "подчеркивание". Перебьется ;)))
← →
Arm79 (2003-10-08 19:00) [18]Стараемся помаленьку ;-)
← →
ZrenBy (2003-10-08 20:11) [19]Давно уже все придумано
Windows.DrawText(Grid.Canvas.Handle,...,DT_CENTER or DT_SINGLELINE)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.10.30;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.011 c