Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > выравнивание текста в DBGrid по центру


Автор: varra 25.3.2003, 06:06
нужно установить свой-во TField.Alignment:=taCenter для всех полей всех таблиц,отображаемых в гриде. как? в цикле?? или,может, есть другой способ центрирования?..

Автор: Lobsang 25.3.2003, 17:39
Три переключателя РадиоБатон. Свойсвто TAG каждого относится с соответствующим значением типа TAligment.
Так что твой цикл сокращается только до прохода по всем столбцам, а не по каждой ячейки в отдельности.

With DBGrid1 do
begin
For i:=0 to FieldCount-1 do
Fields[i].Aligment := TAligment ((Sender as TRadioButton).Tag);
end;
end;

Автор: varra 26.3.2003, 01:28
ничего не понимаю...

procedure TForm1.N9Click(Sender: TObject);
begin
...
DBGridEh1.Visible:=true;
TextToCenter(DBGridEh1);
end;

procedure TForm1.TextToCenter(DBGrid: TDBGridEh);
var k:integer;
begin
with DBGrid do
begin
for k:=0 to FieldCount-1 do
Fields[k].Alignment:= taCenter;
end;
end;

не работает sad.gif

Автор: Cashey 26.3.2003, 05:27
А ты попробуй на Grid'е из стандартной библиотеки
Код

procedure TForm1.TextToCenter(DBGrid: TDBGrid);
var k:integer;
begin
with DBGrid do
begin
for k:=0 to FieldCount-1 do
Fields[k].Alignment:= taCenter;
end;
end;

Работает успешно!

Автор: varra 26.3.2003, 15:07
дык используется уже DBGridEH (в силу наличия ряда удобных и нужных в проекте "штучек"), я не могу вернуться к стандартному Grid'у!

Автор: Lobsang 26.3.2003, 15:19
А Что это за компонент и чего он дает за "штучки"?

Автор: varra 26.3.2003, 15:34
подробности тут: http://www.farpost.com/personal/dmitryb/RUS/default.htm

Автор: Dapo 26.3.2003, 15:35
Каким образом не работает-то? Где ошибка? Fields[i] - прямая ссылка на поле датасет-а подключенного к твоему гриду. Причем, совсем не обязательно, что Columns[i] == Fields[i] (я имею в виду отображаемые и содержащиеся данные). Может тебе именно со столбцами DBGridEh помудрить? Я с этим компонентом не работал и не знаю как он данные показывает, от чего наследуется? Может и "в ручную" придется данные отображать...

Автор: varra 26.3.2003, 16:00
>Каким образом не работает-то?
не центрируется текст

>от чего наследуется
TCustomGrid -> TCustomDBGridEh -> TDBGridEh

>Может и "в ручную" придется данные отображать...
то есть?

Автор: varra 26.3.2003, 16:11
вот что интересно:

procedure TForm1.N9Click(Sender: TObject);
begin
...
(ADODataSet1.Fields.FieldByName('Check') as TBooleanField).DisplayWidth:=2;//работает
...
ADODataSet1.Fields.FieldByName('Цена').Alignment:=taCenter;//не работает
...
end;

Автор: Dapo 27.3.2003, 11:00
Цитата(varra @ 26.3.2003, 13:00)
>Может и "в ручную" придется данные отображать...
то есть?

Обрабатывать OnDrawColumnCell или OnDrawDataCell.

>ADODataSet1.Fields.FieldByName('Цена').Alignment:=taCenter;
Здесь попробуй опустить Fields или FieldByName.

Автор: varra 27.3.2003, 18:21
не знаю, насколько рационально, но работает(!) при следующем коде:

procedure TForm1.DBGridEh1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumnEh;
State: TGridDrawState);

var t,r:integer;

begin
...
t:=TDBGridEh(Sender).Canvas.TextWidth(Column.Field.DisplayText);//длина отображаемого значения
r:=Rect.Right - Rect.Left;//длина прямоугольника
TDBGridEh(Sender).Canvas.TextOut(Rect.Left+round((r-t)*0.5), Rect.Top+2,Column.Field.Text);
end;



Автор: Dapo 27.3.2003, 19:24
Видимо этот компонент не "смотрит" на свойство Alignment для полей.

Автор: Dapo 27.3.2003, 19:35
Видимо этот компонент не "смотрит" на свойство Alignment для полей.

Автор: Noubpoeno 10.12.2022, 02:16
Модератор: Сообщение скрыто.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)