![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]
Сказано же, что константный объект нельзя