Форум: "Начинающим";
Текущий архив: 2007.04.29;
Скачать: [xml.tar.bz2];
ВнизDBGrid+DrawText Найти похожие ветки
← →
vitv © (2007-04-08 13:50) [0]Из примера вырезал следующую функцию, добавив свои поля. Не работает, ругается:
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;
← →
Anatoly Podgoretsky © (2007-04-08 13:57) [1]> vitv (08.04.2007 13:50:00) [0]
Сказано же, что константный объект нельзя
← →
vitv © (2007-04-08 18:31) [2]
> const Rect: TRect;
А как поступить?
← →
Loginov Dmitry © (2007-04-08 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 - это откуда?
← →
vitv © (2007-04-08 19:54) [4]
> 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
← →
vitv © (2007-04-08 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
Не работает :))) Та же ошибка...
← →
Loginov Dmitry © (2007-04-08 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 00:15) [7]
> Loginov Dmitry © (08.04.07 19:09) [3]
> А WinProcs - это откуда?
Из Д1. уст. :)
← →
Loginov Dmitry © (2007-04-09 00:46) [8]> Из Д1. уст. :)
Отстал я от жизни, что поделаешь... :)
← →
Германн © (2007-04-09 01:04) [9]
> Loginov Dmitry © (09.04.07 00:46) [8]
>
> > Из Д1. уст. :)
>
>
> Отстал я от жизни, что поделаешь... :)
>
Кстати уж сколько лет в обед тому Д1. А и в BDS2006 в ConditionalDefines для каждого нового проекта по умолчанию добавляется: WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
← →
Германн © (2007-04-09 01:07) [10]Пардон. Не в ConditionalDefines, а в Unit aliases, конечно.
← →
Германн © (2007-04-09 01:14) [11]
> 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);
← →
vitv © (2007-04-09 10:05) [12]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-10 03:11) [13]> Спасибо! Заработало, но многострочный грид не получился.
Плтому что TDBGrid сам учтанавливает высоту строки грида, исходя из размера Font-а. Так что "переносы" просто не видны в ячейке. Для проверки попробуй нарисовать в два раза меньшим шрифтом: Canvas.Font.Size := Grid.Font.Size div 2.
З.Ы. Неужели так трудно добавлять заголовок метода? Ессли это метод формы, то иcпользуется Canvas формы, а не Canvas грида.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.04.29;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.035 c