TStringGrid, выравнивание текста в ячейках

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

TStringGrid, выравнивание текста в ячейках

Сообщение GAMER » 12.07.2009 19:17:44

Проблема стара как мир. Есть решения через канву.
Типа:
Код: Выделить всё
Создай обработчик события OnDrawCell
Определи в нем переменную XAlign
XAlign := ( Rect.Right - Rect.Left ) - TStringGrid( Sender ).Canvas.TextWidth( ST )
где ST - твоя строка
Далее:
TStringGrid( Sender ).Canvas.TextOut( Rect.Left + XAlign, Rect.Top, ST ) ;

Есть ли уже решения по-проще?
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: TStringGrid, выравнивание текста в ячейках

Сообщение Climber » 13.07.2009 09:01:09

Может быть это?
Код: Выделить всё
procedure TForm1.StringGridDrawCell(Sender: TObject; aCol,
  aRow: Integer; aRect: TRect; aState: TGridDrawState);
begin
TStringGrid(Sender).Canvas.TextStyle.Alignment:=taRightJustify;// еще есть taRightJustify, taCenter
end;
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Re: TStringGrid, выравнивание текста в ячейках

Сообщение GAMER » 13.07.2009 21:15:58

Вот такая ошибка возникает:
UFrmViddorders.pas(378,39) Error: Argument can't be assigned to
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: TStringGrid, выравнивание текста в ячейках

Сообщение Climber » 14.07.2009 08:48:51

Странно. У меня работает, правда, я пишу не TStringGrid(Sender), а просто StringGrid1.
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Re: TStringGrid, выравнивание текста в ячейках

Сообщение GAMER » 14.07.2009 11:45:55

Climber писал(а):Странно. У меня работает, правда, я пишу не TStringGrid(Sender), а просто StringGrid1.


Та же ошибка. Действительно странно, посколько через автоподстановку Лазарус дает написать такую строку.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: TStringGrid, выравнивание текста в ячейках

Сообщение Climber » 14.07.2009 13:09:37

Вообще-то ошибка "Argument can't be assigned to" появляется, когда пытаешься присвоить значение свойству только для чтения (если я не путаю), так что автоподстановка тут ни при чем. А вот с каких пор это свойство стало "только для чтения" - большой вопрос...
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Re: TStringGrid, выравнивание текста в ячейках

Сообщение GAMER » 14.07.2009 13:19:14

Лазарус - последние обновления по свн. Согласен, что автоподстановка ни при чем, имел в виду, что синтаксис правильно писал :)
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: TStringGrid, выравнивание текста в ячейках

Сообщение GAMER » 17.08.2009 12:42:19

Оказалось, что уже все сделано :)
Есть решение: StringGrid1.Columns...
Там настройки и заголовка и выравнивания.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: TStringGrid, выравнивание текста в ячейках

Сообщение Nik » 03.06.2010 21:11:13

Опыты показали, что

Код: Выделить всё
TStringGrid(Sender).Canvas.TextStyle.Alignment:=taRightJustify;


действительно не работает (хотя в Graphics написано: property TextStyle: TTextStyle read FTextStyle write FTextStyle;)

Но вот такой вот код работает на ура:

Код: Выделить всё
var
  xStyle: TTextStyle;
...
xStyle.Alignment:=taRightJustify;
Canvas.TextStyle:=xStyle;



Что касается StringGrid1.Columns, то с ним в некторых случаях много гемора (особенно в уже существующих проектах, где работа с Grig'ом ведётся через RowCount и ColCount).

Добавлено спустя 2 часа 37 минут 5 секунд:
Вообще-то ошибка "Argument can't be assigned to" появляется, когда пытаешься присвоить значение свойству только для чтения (если я не путаю), так что автоподстановка тут ни при чем. А вот с каких пор это свойство стало "только для чтения" - большой вопрос...


Разработчики утверждают, что это не баг, а фича:

Jesus Reyes (developer)
This is a compiler feature, for more information see: http://wiki.lazarus.freepascal.org/User_Changes_2.4.0
.

Правда, в чём там фишка я так и не понял...
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 234

Рейтинг@Mail.ru