На этом шаге мы рассмотрим перенос по словам и автоматическое задание размера шрифта.
Если длина текста превосходит ширину ячейки, то это может повлечь за собой искажения отображения значения ячейки. Для решения этой проблемы можно воспользоваться режимом переноса по словам или режимом автоматического подбора ширины текста по ширине ячейки.
Рассмотрим режим переноса по словам. Он включается, когда свойство ячейки WrapText установлено в значение True, и отключается, когда свойство WrapText установлено в значение False.
procedure TForm1.CheckBox1Click(Sender: TObject); //Включение/отключение переноса по словам begin Range.WrapText:=CheckBox1.Checked; end;
Режим переноса по словам позволяет разместить текст, как показано на рисунках 1 и 2.
Рис.1. Текст в ячейке не перенесен по словам
Рис.2. Текст в ячейке перенесен по словам
В этом режиме высота ячейки автоматически изменяется в зависимости от размера текста. Если текст в ячейке выравнивается по ее левой границе, то можно задать величину отступа, определяемую свойством IndentLevel объекта Range. Оператор Range.IndentLevel=2; задает отступ от левой границы ячейки в два пункта.
Когда требуется, не изменяя размер ячейки, записать в нее текст, ширина которого может превысить ширину ячейки, необходимо воспользоваться свойством ShrinkToFit. Если установить это свойство в значение True, то размер шрифта текста будет автоматически устанавливаться так, чтобы текст по ширине всегда мог вписаться в ячейку.
Рис.3. Использование свойства ShrinkToFit
Вот полный текст приложения.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComObj; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Label1: TLabel; Edit1: TEdit; Label2: TLabel; ComboBox1: TComboBox; Label3: TLabel; ComboBox2: TComboBox; CheckBox1: TCheckBox; CheckBox2: TCheckBox; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Edit1Exit(Sender: TObject); procedure ComboBox1Change(Sender: TObject); procedure ComboBox2Change(Sender: TObject); procedure CheckBox1Click(Sender: TObject); procedure CheckBox2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation var E:variant; Range:variant; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); //Создание объекта Excel и отображение окна begin E:=CreateOleObject('Excel.Application'); E.Visible:=True; end; procedure TForm1.Button2Click(Sender: TObject); //Создание рабочей книги begin E.WorkBooks.Add; end; procedure TForm1.Edit1Exit(Sender: TObject); //Определение области begin Range:=E.ActiveSheet.Range[Edit1.Text]; end; procedure TForm1.ComboBox1Change(Sender: TObject); //Задание горизонтального выравнивания begin case ComboBox1.ItemIndex of 0: Range.HorizontalAlignment:=-4108; //xlHAlignCenter 1: Range.HorizontalAlignment:=7; //xlHAlignCenterAcrossSelection 2: Range.HorizontalAlignment:=-4117; //xlHAlignDistributed 3: Range.HorizontalAlignment:=5; //xlHAlignFill 4: Range.HorizontalAlignment:=1; //xlHAlignGeneral 5: Range.HorizontalAlignment:=-4130; //xlHAlignJustify 6: Range.HorizontalAlignment:=-4131; //xlHAlignLeft 7: Range.HorizontalAlignment:=-4152; //xlHAlignRight end; end; procedure TForm1.ComboBox2Change(Sender: TObject); //Задание вертикального выравнивания begin case ComboBox2.ItemIndex of 0: Range.VerticalAlignment:=-4107; //xlHAlignRight 1: Range.VerticalAlignment:=-4108; //xlVAlignCenter 2: Range.VerticalAlignment:=-4117; //xlVAlignDistributed 3: Range.VerticalAlignment:=-4130; //xlVAlignJustify 4: Range.VerticalAlignment:=-4160; //xlVAlignTop end; end; procedure TForm1.CheckBox1Click(Sender: TObject); //Включение/отключение переноса по словам begin Range.WrapText:=CheckBox1.Checked; end; procedure TForm1.CheckBox2Click(Sender: TObject); //Включение/отключение автоподбора ширины begin Range.ShrinkToFit:=CheckBox2.Checked; end; end.
На следующем шаге мы продолжим изучение этого вопроса.