Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.063 c
1-98641
TUser
2003-10-17 13:03
2003.10.30
regular expresions


14-98797
Сатир
2003-10-10 14:41
2003.10.30
Профессор Башкирского университета опроверг основы физики и химии


1-98606
Igit
2003-10-19 11:48
2003.10.30
pascal - возведение в степень


14-98833
Merlin
2003-10-10 23:59
2003.10.30
Странные глюки с интернетом в локальной сети


1-98580
stranniks
2003-10-17 20:44
2003.10.30
И снова combobox





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский