Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DBGrid+DrawText


vitv ©   (2007-04-08 13:50:00) 

Из примера вырезал следующую функцию, добавив свои поля. Не работает, ругается:
Constant object cannot be passed as var parameter

procedure Form6.DBGrid9DrawDataCell(Sender: TObject; const Rect: TRect;
 Field: TField; State: TGridDrawState);
 var
   C: array[0..255] of Char;

begin
Canvas.FillRect(Rect);
 StrPCopy(C, DataModule2.IBDataSet2.fieldbyname('SG').AsString);
 WinProcs.DrawText(Canvas.Handle, C, StrLen(C), Rect, DT_WORDBREAK);
end;


ЮЮ   (2007-04-10 03:11:00) [1]

> Спасибо! Заработало, но многострочный грид не получился.

Плтому что TDBGrid сам учтанавливает высоту строки грида, исходя из размера Font-а. Так что "переносы" просто не видны в ячейке. Для проверки попробуй нарисовать в два раза меньшим шрифтом: Canvas.Font.Size := Grid.Font.Size div 2.

З.Ы. Неужели так трудно добавлять заголовок метода? Ессли это метод формы, то иcпользуется Canvas формы, а не Canvas грида.


vitv   (2007-04-09 10:05:00) [2]

Loginov Dmitry ©   (08.04.07 23:28) [6]

Тогда так попробуй:

var
S: string;
......
begin
...
S := DataModule2.IBDataSet2.fieldbyname('SG').AsString);
DrawText(Canvas.Handle, PChar(S), Length(S), PRect(@Rect)^, DT_WORDBREAK);
end

Спасибо! Заработало, но многострочный грид не получился.
Может я работаю не в том направлении?


Германн   (2007-04-09 01:14:00) [3]


> vitv ©   (08.04.07 22:04) [5]
>
>
> > var
> >  S: string;
> > ......
> > begin
> > ...
> >  S := DataModule2.IBDataSet2.fieldbyname('SG').AsString);
>
> >
> >
> >  WinProcs.DrawText(Canvas.Handle, PChar(S), Length(S),
>  Rect,
> >  DT_WORDBREAK);
> > end
>
> Не работает :))) Та же ошибка...

Как раз строка тут и не причём. Этот параметр описан в DrawText как LPCTSTR. А вот предпоследний параметр DrawText описан как LPRECT. И именно он не может быть константным параметром. А в DBGrid9DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
он как раз константа!


Германн   (2007-04-09 01:07:00) [4]

Пардон. Не в ConditionalDefines, а в Unit aliases, конечно.


Германн   (2007-04-09 01:04:00) [5]


> Loginov Dmitry ©   (09.04.07 00:46) [8]
>
> > Из Д1. уст. :)
>
>
> Отстал я от жизни, что поделаешь... :)
>

Кстати уж сколько лет в обед тому Д1. А и в BDS2006 в ConditionalDefines для каждого нового проекта по умолчанию добавляется: WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;


Loginov Dmitry   (2007-04-09 00:46:00) [6]

> Из Д1. уст. :)


Отстал я от жизни, что поделаешь... :)


Германн   (2007-04-09 00:15:00) [7]


> Loginov Dmitry ©   (08.04.07 19:09) [3]


> А WinProcs - это откуда?

Из Д1. уст. :)


Loginov Dmitry   (2007-04-08 23:28:00) [8]

Тогда так попробуй:

var
 S: string;
......
begin
...
 S := DataModule2.IBDataSet2.fieldbyname('SG').AsString);
 DrawText(Canvas.Handle, PChar(S), Length(S), PRect(@Rect)^, DT_WORDBREAK);
end


vitv   (2007-04-08 22:04:00) [9]


> var
>  S: string;
> ......
> begin
> ...
>  S := DataModule2.IBDataSet2.fieldbyname('SG').AsString);
>
>
>  WinProcs.DrawText(Canvas.Handle, PChar(S), Length(S), Rect,
>  DT_WORDBREAK);
> end

Не работает :))) Та же ошибка...


vitv   (2007-04-08 19:54:00) [10]


> Loginov Dmitry ©   (08.04.07 19:09) [3]
> var
>  S: string;
> ......
> begin
> ...
>  S := DataModule2.IBDataSet2.fieldbyname('SG').AsString);
>
>
>  WinProcs.DrawText(Canvas.Handle, PChar(S), Length(S), Rect,
>  DT_WORDBREAK);
> end
>
> А WinProcs - это откуда?
> <Цитата>

из примера DelphiWorld


Loginov Dmitry   (2007-04-08 19:09:00) [11]

var
 S: string;
......
begin
...
 S := DataModule2.IBDataSet2.fieldbyname('SG').AsString);

 WinProcs.DrawText(Canvas.Handle, PChar(S), Length(S), Rect, DT_WORDBREAK);
end

А WinProcs - это откуда?


vitv   (2007-04-08 18:31:00) [12]


> const Rect: TRect;

А как поступить?


Anatoly Podgoretsky   (2007-04-08 13:57:00) [13]

> vitv  (08.04.2007 13:50:00)  [0]

Сказано же, что константный объект нельзя


Наверх

Титульная страница Поиск, карта сайта Написать письмо