ZColorStringGrid проверялся на: Delphi 7, 2005-XE2; C++Builder 6.
ZCLabel проверялся на:
- Lazarus 0.9.28.2 (FPC 2.2.4 + Debian 5.0 + KDE3.5), Lazarus 0.9.30.2 (FPC 2.4.4 + Debian 6.0.3 + GNOME / Windows)
- Delphi 7, 2005-XE2
- C++Builder 6
Стиль ячейки
Пример кода для Delphi
|
Пример кода для C++Builder-a
|
procedure TfrmMain.FormCreate(Sender: TObject);
var
i, j: integer;
begin
//заполняем грид
for i := 1 to ZColorStringGrid1.ColCount - 1 do
for j := 1 to ZColorStringGrid1.RowCount - 1 do
ZColorStringGrid1.Cells[i, j] := IntToStr(i * j);
//Цвет фона
ZColorStringGrid1.CellStyle[1, 1].BGColor := clYellow;
ZColorStringGrid1.CellStyle[2, 1].BGColor := clGreen;
ZColorStringGrid1.CellStyle[3, 1].BGColor := clLime;
//Меняем стиль у колонки
ZColorStringGrid1.CellStyleCol[1, false] := ZColorStringGrid1.CellStyle[1, 1];
ZColorStringGrid1.CellStyleCol[2, true] := ZColorStringGrid1.CellStyle[2, 1];
//Меняем стиль у ряда
ZColorStringGrid1.CellStyleRow[3, false] := ZColorStringGrid1.CellStyle[3, 1];
//Шрифт
ZColorStringGrid1.CellStyle[2, 3].Font.Size := 12;
ZColorStringGrid1.CellStyle[2, 3].Font.Name := 'Tahoma';
ZColorStringGrid1.CellStyle[2, 3].Font.Style := [fsBold, fsItalic];
ZColorStringGrid1.CellStyle[2, 2].Font.Color := clWhite;
//Рамка ячейки
ZColorStringGrid1.CellStyle[3, 3].BorderCellStyle := sgLowered;
ZColorStringGrid1.CellStyle[4, 3].BorderCellStyle := sgRaised;
end;
| void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
int i = 0;
int j = 0;
//заполняем грид
for (i = 0; i < ZColorStringGrid1->ColCount; i++)
for (j = 0; j < ZColorStringGrid1->RowCount; j++)
{
ZColorStringGrid1->Cells[i][j] = IntToStr(i * j);
}
//Цвет фона
ZColorStringGrid1->CellStyle[1][1]->BGColor = clYellow;
ZColorStringGrid1->CellStyle[2][1]->BGColor = clGreen;
ZColorStringGrid1->CellStyle[3][1]->BGColor = clLime;
//Меняем стиль у колонки
ZColorStringGrid1->CellStyleCol[1][false] = ZColorStringGrid1->CellStyle[1][1];
ZColorStringGrid1->CellStyleCol[2][true] = ZColorStringGrid1->CellStyle[2][1];
//Меняем стиль у ряда
ZColorStringGrid1->CellStyleRow[3][false] = ZColorStringGrid1->CellStyle[3][1];
//Шрифт
ZColorStringGrid1->CellStyle[2][3]->Font->Size = 12;
ZColorStringGrid1->CellStyle[2][3]->Font->Name = "Tahoma";
ZColorStringGrid1->CellStyle[2][3]->Font->Style =
TFontStyles() << fsBold << fsItalic;
ZColorStringGrid1->CellStyle[2][2]->Font->Color = clWhite;
//Рамка ячейки
ZColorStringGrid1->CellStyle[3][3]->BorderCellStyle = sgLowered;
ZColorStringGrid1->CellStyle[4][3]->BorderCellStyle = sgRaised;
}
|
Выравнивание и отступы
Пример кода для Delphi
|
Пример кода для C++Builder-a
|
procedure TfrmMain.FormCreate(Sender: TObject);
var
i, j, r: byte;
begin
//Выравнивание: горизонталь - слева, вертикаль - центр
ZColorStringGrid1.Cells[1, 0] := 'H:L + V:C';
//Выравнивание: горизонталь - справа, вертикаль - центр
ZColorStringGrid1.Cells[2, 0] := 'H:R + V:C';
//Выравнивание: горизонталь - слева, вертикаль - сверху
ZColorStringGrid1.Cells[3, 0] := 'H:L + V:T';
//Выравнивание: горизонталь - по центру, вертикаль - снизу
ZColorStringGrid1.Cells[4, 0] := 'H:C + V:D';
for i := 0 to 5 do
begin
r := i + 1;
for j := 1 to 4 do
begin
ZColorStringGrid1.Cells[j, r] := IntToStr(i);
//Отступ по горизонтали
ZColorStringGrid1.CellStyle[j, r].IndentH := i;
end;
//Справа
ZColorStringGrid1.CellStyle[2, r].HorizontalAlignment := taRightJustify;
//Сверху
ZColorStringGrid1.CellStyle[3, r].VerticalAlignment := vaTop;
//по центру
ZColorStringGrid1.CellStyle[4, r].HorizontalAlignment := taCenter;
//Снизу
ZColorStringGrid1.CellStyle[4, r].VerticalAlignment := vaBottom;
//Отступ по вертикали
for j := 3 to 4 do
ZColorStringGrid1.CellStyle[j, r].IndentV := i;
end;
end;
| void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
//Выравнивание: горизонталь - слева, вертикаль - центр
ZColorStringGrid1->Cells[1][0] = "H:L + V:C";
//Выравнивание: горизонталь - справа, вертикаль - центр
ZColorStringGrid1->Cells[2][0] = "H:R + V:C";
//Выравнивание: горизонталь - слева, вертикаль - сверху
ZColorStringGrid1->Cells[3][0] = "H:L + V:T";
//Выравнивание: горизонталь - по центру, вертикаль - снизу
ZColorStringGrid1->Cells[4][0] = "H:C + V:D";
int i = 0;
int j = 0;
int r = 0;
for (i = 0; i <= 5; i++)
{
r = i + 1;
for (j = 1; j < 5; j++)
{
ZColorStringGrid1->Cells[j][r] = IntToStr(i);
//Отступ по горизонтали
ZColorStringGrid1->CellStyle[j][r]->IndentH = i;
}
//Справа
ZColorStringGrid1->CellStyle[2][r]->HorizontalAlignment = taRightJustify;
//Сверху
ZColorStringGrid1->CellStyle[3][r]->VerticalAlignment = vaTop;
//по центру
ZColorStringGrid1->CellStyle[4][r]->HorizontalAlignment = taCenter;
//Снизу
ZColorStringGrid1->CellStyle[4][r]->VerticalAlignment = vaBottom;
//Отступ по вертикали
for (j = 3; j < 5; j++)
ZColorStringGrid1->CellStyle[j][r]->IndentV = i;
}
}
|
Объединение ячеек
Пример кода для Delphi
|
Пример кода для C++Builder-a
|
procedure TfrmMain.FormCreate(Sender: TObject);
var
Rct: TRect;
res: integer;
begin
//Объединение фиксированных ячеек
res := ZColorStringGrid1.MergeCells.AddRectXY(1, 0, 3, 0);
if (res <> 0) then
begin
{Если не удалось объединить ячейки}
end;
ZColorStringGrid1.Cells[1, 0] := 'Объединённая ячейка';
Rct.Top := 1;
Rct.Left := 0;
Rct.Right := 0;
Rct.Bottom := 3;
ZColorStringGrid1.MergeCells.AddRect(Rct);
ZColorStringGrid1.Cells[0, 1] := 'Текст';
//Попытка объединения фиксированных ячеек с нефиксированными
res := ZColorStringGrid1.MergeCells.AddRectXY(0, 4, 3, 5);
if (res <> 0) then
ZColorStringGrid1.Cells[0, 4] := 'Провал'
else
ZColorStringGrid1.Cells[0, 4] := 'Получилось!';
//Проверку на объединение можно не делать
ZColorStringGrid1.MergeCells.AddRectXY(2, 1, 4, 4);
ZColorStringGrid1.Cells[2, 1] := ZColorStringGrid1.Cells[1, 0];
end;
| void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
int res = 0;
//Объединение фиксированных ячеек
res = ZColorStringGrid1->MergeCells->AddRectXY(1, 0, 3, 0);
if (res != 0)
{
/* Если не удалось объединить ячейки */
}
ZColorStringGrid1->Cells[1][0] = "Объединённая ячейка";
TRect Rct;
Rct.Top = 1;
Rct.Left = 0;
Rct.Right = 0;
Rct.Bottom = 3;
ZColorStringGrid1->MergeCells->AddRect(Rct);
ZColorStringGrid1->Cells[0][1] = "Текст";
//Попытка объединения фиксированных ячеек с нефиксированными
res = ZColorStringGrid1->MergeCells->AddRectXY(0, 4, 3, 5);
if (res != 0)
{ZColorStringGrid1->Cells[0][4] = "Провал";}
else
{ZColorStringGrid1->Cells[0][4] = "Получилось!";};
//Проверку на объединение можно не делать
ZColorStringGrid1->MergeCells->AddRectXY(2, 1, 4, 4);
ZColorStringGrid1->Cells[2][1] = ZColorStringGrid1->Cells[1][0];
}
|
Поворот текста в ячейках
ВНИМАНИЕ: Поворачивать текст можно только используя TrueType шрифты!
Пример кода для Delphi
|
Пример кода для C++Builder-a
|
procedure TfrmMain.FormCreate(Sender: TObject);
var
i, j: integer;
begin
//Устанавливаем всем ячейкам TrueType шрифт
for i := 0 to ZColorStringGrid1.ColCount - 1 do
for j := 0 to ZColorStringGrid1.RowCount - 1 do
begin
ZColorStringGrid1.CellStyle[i, j].Font.Name := 'Tahoma';
ZColorStringGrid1.CellStyle[i, j].Font.Size := 12;
end;
//Поворот в объединённых ячейках
ZColorStringGrid1.MergeCells.AddRectXY(0, 1, 0, 4);
ZColorStringGrid1.CellStyle[0, 1].Rotate := 90;
ZColorStringGrid1.Cells[0, 1] := 'Поворот' + sLineBreak +
'текста на' + sLineBreak + '90 градусов';
ZColorStringGrid1.MergeCells.AddRectXY(1, 0, 3, 0);
ZColorStringGrid1.CellStyle[1, 0].Rotate := 180;
ZColorStringGrid1.Cells[1, 0] := 'Поворот на 180 градусов';
ZColorStringGrid1.MergeCells.AddRectXY(2, 1, 4, 6);
ZColorStringGrid1.CellStyle[2, 1].Rotate := 60;
ZColorStringGrid1.CellStyle[2, 1].Font.Size := 16;
ZColorStringGrid1.CellStyle[2, 1].HorizontalAlignment := taCenter;
ZColorStringGrid1.Cells[2, 1] := 'Поворот' + sLineBreak +
'многострочного' + sLineBreak + 'текста на' +
sLineBreak + '60 градусов';
//Поворот в обыкновенных ячейках
ZColorStringGrid1.CellStyle[1, 1].Rotate := 180;
ZColorStringGrid1.Cells[1, 1] := 'Текст';
end;
| void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
int i = 0;
int j = 0;
//Устанавливаем всем ячейкам TrueType шрифт
for (i = 0; i < ZColorStringGrid1->ColCount; i++)
for (j = 0; j < ZColorStringGrid1->RowCount; j++)
{
ZColorStringGrid1->CellStyle[i][j]->Font->Name = "Tahoma";
ZColorStringGrid1->CellStyle[i][j]->Font->Size = 12;
}
//Поворот в объединённых ячейках
ZColorStringGrid1->MergeCells->AddRectXY(0, 1, 0, 4);
ZColorStringGrid1->CellStyle[0][1]->Rotate = 90;
ZColorStringGrid1->Cells[0][1] = String("Поворот") + sLineBreak +
String("текста на") + sLineBreak + String("90 градусов");
ZColorStringGrid1->MergeCells->AddRectXY(1, 0, 3, 0);
ZColorStringGrid1->CellStyle[1][0]->Rotate = 180;
ZColorStringGrid1->Cells[1][0] = "Поворот на 180 градусов";
ZColorStringGrid1->MergeCells->AddRectXY(2, 1, 4, 6);
ZColorStringGrid1->CellStyle[2][1]->Rotate = 60;
ZColorStringGrid1->CellStyle[2][1]->Font->Size = 16;
ZColorStringGrid1->CellStyle[2][1]->HorizontalAlignment = taCenter;
ZColorStringGrid1->Cells[2][1] = String("Поворот") + sLineBreak +
String("многострочного") + sLineBreak + String("текста на") +
sLineBreak + String("60 градусов");
//Поворот в обыкновенных ячейках
ZColorStringGrid1->CellStyle[1][1]->Rotate = 180;
ZColorStringGrid1->Cells[1][1] = "Текст";
}
|
Примеры использования ZCLabel:
Выравнивание и поворот текста
Для успешного запуска на форме нужно разместить 15 ZClabel-ов, установить им:
TrueType шрифт, ширину и высоту (80 и 70).
Пример кода для Lazarus/Delphi
|
Пример кода для C++Builder-a
|
procedure TfrmMain.FormCreate(Sender: TObject);
var
i: integer;
num: integer;
ZCL: TZCLabel;
s: string;
ang: integer;
sEOL: string;
begin
num := 0;
ang := 0;
{$IFDEF FPC}
sEOL := LineEnding;
{$ELSE}
sEOL := sLineBreak;
{$ENDIF}
s := 'Пример текста' + sEOL + 'какой-то';
//пробегаем по всем компонентам
for i := 0 to ComponentCount - 1 do
if (Components[i] is TZCLabel) then
begin
ZCL := Components[i] as TZCLabel;
ZCL.Font.Size := 10;
ZCL.Caption := s;
inc(num);
if (num mod 5 in [1, 2, 3]) then
begin
ZCL.Transparent := false;
ZCL.Color := clYellow;
end else
begin
ZCL.Font.Size := 14;
inc(ang, 50);
//Угол поворота
ZCL.Rotate := ang;
end;
//Выравнивание по горизонтали
ZCL.AlignmentHorizontal := num mod 3;
//Выравнивание по вертикали
ZCL.AlignmentVertical := num mod 5;
end; //if
end;
| void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
int num = 0;
int ang = 0;
int t;
TZCLabel * ZCL;
String s = String("Пример текста") + sLineBreak + String("какой-то");
//пробегаем по всем компонентам
int i = 0;
for (i = 0; i < ComponentCount; i++)
{
if (ZCL = dynamic_cast<TZCLabel *>(Components[i]))
{
ZCL->Font->Size = 10;
ZCL->Caption = s;
num++;
t = num % 5;
if ((t > 0) && (t < 4))
{
ZCL->Transparent = false;
ZCL->Color = clYellow;
} else
{
ZCL->Font->Size = 14;
ang += 50;
//Угол поворота
ZCL->Rotate = ang;
}
//Выравнивание по горизонтали
ZCL->AlignmentHorizontal = num % 3;
//Выравнивание по вертикали
ZCL->AlignmentVertical = num % 5;
}
}
}
|
Рисование на произвольном канвасе
Пример кода для Lazarus/Delphi
|
Пример кода для C++Builder-a
|
procedure TfrmMain.FormCreate(Sender: TObject);
var
Rct: TRect;
i: integer;
t: byte;
Cl: TColor;
sEOL, s: string;
begin
{$IFDEF FPC}
sEOL := LineEnding;
{$ELSE}
sEOL := sLineBreak;
{$ENDIF}
ZCLabel1.Visible := false;
Image1.Canvas.Brush.Color := clWhite;
Image1.Canvas.Brush.Style := bsSolid;
Image1.Canvas.Rectangle(0, 0, Image1.Width, Image1.Height);
Rct.Left := 0;
Rct.Top := 0;
Rct.Right := 120;
Rct.Bottom := 50;
for i := 1 to 5 do
begin
ZCLabel1.Font.Size := 10 + i;
//Рисует текст на канвасе цветом шрифта
ZCLabel1.DrawTextOn(Image1.Canvas, 'Some text', Rct, false);
Rct.Top := Rct.Top + 10;
Rct.Bottom := Rct.Bottom + 10;
Rct.Left := Rct.Left + 1;
Rct.Right := Rct.Right + 1;
end;
Rct.Left := 0;
Rct.Right := Image1.Width;
Rct.Top := 0;
Rct.Bottom := Image1.Height;
i := 0;
ZCLabel1.AlignmentVertical := 2;
ZCLabel1.AlignmentHorizontal := 0;
t := 255;
while (i <= 90) do
begin
ZCLabel1.Rotate := i;
cl := t shl 8;
//Рисует текст на канвасе заданным цветом
ZCLabel1.DrawTextOn(Image1.Canvas, 'Some text', Rct, cl, false);
inc(i, 5);
dec(t, 14);
end;
//Выравнивание
ZCLabel1.AlignmentVertical := 0;
ZCLabel1.AlignmentHorizontal := 2;
i := 0;
while (i <= 90) do
begin
ZCLabel1.Rotate := i;
ZCLabel1.DrawTextOn(Image1.Canvas, 'Some text', Rct, false);
inc(i, 10);
end;
ZCLabel1.Font.Size := 20;
ZCLabel1.Rotate := -30;
ZCLabel1.AlignmentVertical := 1;
ZCLabel1.AlignmentHorizontal := 1;
//Расстояние между строками
ZCLabel1.LineSpacing := -10;
s := 'ZClabel' + sEOL + 'пример рисования' + sEOL +
'на произвольном канвасе';
ZCLabel1.DrawTextOn(Image1.Canvas, s, Rct, clGreen, false);
//Сохраним полученную картинку в файл
Image1.Picture.Bitmap.SaveToFile({some_path}'1.bmp');
end;
| void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
ZCLabel1->Visible = false;
TRect Rct;
Rct.Left = 0;
Rct.Top = 0;
Rct.Right = 120;
Rct.Bottom = 50;
Graphics::TCanvas *CNV;
CNV = Image1->Canvas;
CNV->Brush->Color = clWhite;
CNV->Brush->Style = bsSolid;
CNV->Rectangle(0, 0, Image1->Width, Image1->Height);
CNV->TextOut(10, 10, "dasd");
String z = "Some text";
int i = 0;
for (i = 1; i < 6; i++)
{
ZCLabel1->Font->Size = 10 + i;
//Рисует текст на канвасе цветом шрифта
ZCLabel1->DrawTextOn(CNV, z, Rct, false);
Rct.Top += 10;
Rct.Bottom += 10;
Rct.Left += 1;
Rct.Right += + 1;
}
Rct.Left = 0;
Rct.Right = Image1->Width;
Rct.Top = 0;
Rct.Bottom = Image1->Height;
i = 0;
ZCLabel1->AlignmentVertical = 2;
ZCLabel1->AlignmentHorizontal = 0;
int t = 255;
TColor cl = clBlack;
while (i <= 90)
{
ZCLabel1->Rotate = i;
cl = t << 8;
//Рисует текст на канвасе заданным цветом
ZCLabel1->DrawTextOn(CNV, "Some text", Rct, cl, false);
i += 5;
t -= 14;
}
//Выравнивание
ZCLabel1->AlignmentVertical = 0;
ZCLabel1->AlignmentHorizontal = 2;
i = 0;
while (i <= 90)
{
ZCLabel1->Rotate = i;
ZCLabel1->DrawTextOn(CNV, "Some text", Rct, false);
i += 10;
}
ZCLabel1->Font->Size = 20;
ZCLabel1->Rotate = -30;
ZCLabel1->AlignmentVertical = 1;
ZCLabel1->AlignmentHorizontal = 1;
//Расстояние между строками
ZCLabel1->LineSpacing = -10;
String s = String("ZClabel") + sLineBreak + String("пример рисования") +
sLineBreak + String("на произвольном канвасе");
ZCLabel1->DrawTextOn(CNV, s, Rct, clGreen, false);
//Сохраним полученную картинку в файл
Image1->Picture->Bitmap->SaveToFile(/* some_path */"1.bmp");
}
|
|