Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.30;
Скачать: CL | DM;

Вниз

В гриде - посередине вместо числа   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.016 c
3-98438
Polina
2003-10-10 17:12
2003.10.30
Использование DBLookupComboBox в сетке DBCtrlGrid


7-98898
Pilipiuk Evgeniy
2003-08-14 19:42
2003.10.30
снова com-порт


1-98648
REA
2003-10-21 15:19
2003.10.30
TOleContainer


1-98679
Ev1972
2003-10-21 13:32
2003.10.30
StretchDraw: как копировать часть рисунка?


3-98453
nick-from
2003-10-11 12:13
2003.10.30
значение NULL в ХП