![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
В гриде - посередине вместо числа [D6]
MsGuns © (2003-10-08 17:06:00)
В гриде и в репорте с ентого грида надо чтоб если сумма в поле отсутствует рисовать "-" в центреячейки. Я понимаю, что это идеотизм - именно в центре, но ТАК НАДАдля тетеньки. Я обычно выствавляю за такие выкрутасы или астрономические счета (чтоб не выеживались, блин) или вежливо посылаю. Но этот заказчие особый, а тетенька - жена дира. Короче, бьюсь, но не получается. Интуитивно чувствую, что элементарно, но не получается ;(((
Знаю, что по OnGetText или по OnDrawColumnCell, но отцентровать не получается !
Прошу прощение за ламерство, но снизойдите, мастера !
ZrenBy (2003-10-08 20:11:00) [1]
Давно уже все придумано
Windows.DrawText(Grid.Canvas.Handle,...,DT_CENTER or DT_SINGLELINE)
Arm79 (2003-10-08 19:00:00) [2]
Стараемся помаленьку ;-)
MsGuns (2003-10-08 18:57:00) [3]
>Arm79 © (08.10.03 18:46) [15]
Ну ты, блин, даешь ! Прям черту и рисуешь !!! А я обойдусь символом "подчеркивание". Перебьется ;)))
Arm79 (2003-10-08 18:49:00) [4]
Вместо длины в 6 можно использовать > DBGrid1.Canvas.TextWidth("-")
Arm79 (2003-10-08 18:46:00) [5]
В общем, что-то вроде этого.
Я не проводил анализ содержимого поля, поэтому черточки везде.
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;
MsGuns (2003-10-08 18:42:00) [6]
Значицца так:
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;
Осталось прикутить второй обработчик нужным филдам, а в первый всобачить перебор имен ентих филдов и усе заработает.
Но как-то все некрасиво, кустарно как-то ;((
А как мастера робят ?
MsGuns (2003-10-08 18:01:00) [7]
С генератором (QReport) я сам разобрался (BeforePrint детального бэнда), а с гридом чего-то не получается...
Щас еще попробую с канвой, если не получится, выкину код.
ЗЫ. Классно получилось ! "Выкину" в смысле покажу в посте. Хотя может и выкинуть бы надо ;)))
ЗЗЫ. Что-то седни у меня ручки шалят не по-детски ;)))
Anatoly Podgoretsky (2003-10-08 17:54:00) [8]
Указал юы какой генератор отчета
Delirium^.Tremens (2003-10-08 17:52:00) [9]
Пушки, воробьи...
Она что, штангенциркулем будет измерять? :-)
Добавь примерное количество пробелов и на боковую :-)
"- "
MsGuns (2003-10-08 17:51:00) [10]
A_N_D © (08.10.03 17:44) [6]
Как можно определять ширину рисуемого текста вообще для грида, если фонты в ячейках (столбцах) могут отличаться ?
>Arm79 © (08.10.03 17:44) [7]
>Такой опытный программер 8-0))),
Если б я был такой опытный, я б не лазал по форумам и вообще был бы щас не здесь...
Если не трудно, приведи, пожалуйста
Johnmen (2003-10-08 17:46:00) [11]
Ну как в гриде - понятно. Вычисляем ширину символа, ширину ячейки и далее позицию отображения символа.
А какой генератор отчетов ?
Если QR, то просто в BeforePrint"е бенда выставляешь нужное выравнивание , а в OnPrint"e - значение. Если компонент отображения типа TQRLabel, то значение можно и в бефорепринте...
>определить ширину в пикселах самой черточки
TextWidth канваса
Romkin (2003-10-08 17:44:00) [12]
Canvas.TextWidth
А на OnDrawColumnCell делай TextOut :) Никаких пробелов, там по точкам
Arm79 (2003-10-08 17:44:00) [13]
Такой опытный программер 8-0))), и просит код? Вовсе не обязательно при OnDrawColumnCell вставлять символ "-". Можно ведь его нарисовать (LineTo). Так код приводить или уже и так понятно?
A_N_D (2003-10-08 17:44:00) [14]
DBGrid1.Canvas.TextWidth("-")
MsGuns (2003-10-08 17:40:00) [15]
>Arm79 © (08.10.03 17:34) [3]
>Анализируй ширину рисуемого столбца
Надо ж во-первых, определить ширину в пикселах самой черточки, а потом уж ее дополнять справа пробелами пока не выйдет ширина=половине столбца. Но вот не соображу как енто сделать (т.е определить ширину текста). Если можно, маленький кодик...;))
Arm79 (2003-10-08 17:36:00) [16]
Или создай вычисляемое поле, в которое пихай в строковом выражении числа. Если нет числа, то "-". А столбец выровняй по центру
Arm79 (2003-10-08 17:34:00) [17]
> OnDrawColumnCell
Анализируй ширину рисуемого столбца
Delirium^.Tremens (2003-10-08 17:10:00) [18]
Если мне память не изменяет (а скорее всего изменяет), делал я такое в OnGetText для филда.
Делфи нет под рукой посмотреть :-)
MsGuns (2003-10-08 17:07:00) [19]
Пардон, забыл малюсенькую деталь: сами числа и в гриде, и в репорте выровнены к правой границе.