Все бесплатно
    Все ссылки на файлы, расположенные на страницах сайта, добавлены пользователями и доступны для бесплатного скачивания. За содержание этих файлов администрация сайта ответственности не несет.



Вопросы
  Подсчет времени какого-либо события
   Категория: Математика
  Undo в memo
   Категория: Компоненты
  Найти все компьютеры в сети
   Категория: Интернет и Сети
  Wav файл внутри exe-файла
   Категория: Файловая система
  Загрузка файлов в THTMLViewer и TFrameBrowser
   Категория: Интернет и Сети
  Создание кнопки на панели в IE
   Категория: Интернет и Сети
  Как произвести поиск файлов во вложенных папках
   Категория: Файловая система
  BDE. Расположение БД по псевдониму
   Категория: Базы данных
  Создать индекс для таблицы ABS (Absolute Database)
   Категория: Базы данных

Delphi: Компоненты

TMStringGrid for Delphi 5-XE2 + Source + Demo

Дата: 17.09.2012 | Комментариев: 0 | Просмотров: 2794
Компонент TMStringGrid это полностью функциональный компонент TStringGrid со следующими замечательными дополнениями:

Объединение ячеек.
Выравнивание текста ячеек
Возможность исполнения ячейки в виде ComboBox или с кнопкой.
Возможность менять местами колонки и строки
Имеется функция для вывода выровненного текста на любой канве.

Данные отличия реализуются с помощь следующих дополнительных свойств и методов:

TMStringGrid = class(TMDrawGrid)
  ---
public
  ---
  function MergeCells(ALeft, ATop, ARight, ABottom : LongInt) : integer; overload;
  function MergeCells(Selection : TGridRect) : integer; overload;
  procedure SplitCells(ALeft, ATop, ARight, ABottom : LongInt); overload;
  procedure SplitCells(ACol, ARow: LongInt); overload;
  procedure SplitCells(Selection : TGridRect); overload;
  procedure ClearMergedCells;
  procedure Move(const MovedCell : TMovedCell; FromIndex, ToIndex: Longint);
  ---
  function GetMergedInfo(ACol, ARow: Integer; var MrgedCellInfo : TMrgedCellInfo) : boolean;
  property MergTextAlign[ACol, ARow: Integer]: TTextAlign write SetMergTextAlign;
  property CellTextWidth : integer read FCellTextWidth;
  property CellTextHeight : integer read FCellTextHeight;
  ---
published
  property PickList: TStrings read GetPickList write SetPickList;
  property CellButtonStyle : TCellButtonStyle read FCellButtonStyle write FCellButtonStyle default btsAuto;
  property OnTextAlignChange : TTextAlignChange read FOnTextAlignChange write FOnTextAlignChange;
  property OnCellButtonStyleChange : TButtonStyleChange read FOnCellButtonStyleChange write FOnCellButtonStyleChange;
  property OnCellButtonclick: TNotifyEvent read FCellButtonclick write FCellButtonclick;
  property OnGetPickListitems : TGetPickListItems read FGetPickListitems write FGetPickListitems;
end;


Метод

function GetMergedInfo(ACol, ARow: Integer; var MrgedCellInfo : TMrgedCellInfo) : Boolean

определяет, находится ли ячейка с координатами ACol, Arow в объединенной области. Если находится, функция возвращает True и заполняет структуру MrgedCellInfo, имеющую тип TmrgedCellInfo:

TMrgedCellInfo = record
  MergedRect : TGridRect;
  IsFixed : boolean;
  MergedTextAlign : TTextAlign;
end;


Здесь MergedRect — координаты объединенной области (Left, Top, Right, Bottom).

MergedTextAlign — определяет флаг выравнивания текста объединенной ячейки.

TTextAlign = (TO_TOPLEFT, TO_TOPCENTER, TO_TOPRIGHT, TO_CENTERLEFT,
  TO_CENTERCENTER, TO_CENTERRIGHT, TO_BOTTOMLEFT, TO_BOTTOMCENTER,
  TO_BOTTOMRIGHT, TO_EDITCONTROL);


Метод

function MergeCells(ALeft, ATop, ARight, ABottom : LongInt) : integer; overload;
function MergeCells(Selection : TGridRect) : integer; overload;


— перегружаемая функция, объединяющая область ячеек таблицы, ограниченную координатами ALeft, ATop, ARight, ABottom или Selection. Если функция завершается удачно, то возвращаемое значение ровно 0, если координаты введены неправильно, то возвращаемое значение ровно 1, если пытаться объединить фиксированные ячейки с обычными ячейками, то возвращаемое значение ровно 2.

procedure TForm1.FormCreate(Sender: TObject);
begin
   with MStringGrid1 do
     MergeCells(0,0, ColCount - 1, 0);
end;


или

procedure TForm1.Button1Click(Sender: TObject);
begin
   with MStringGrid1 do
     MergeCells(Selection);
end;


Метод

procedure SplitCells(ALeft, ATop, ARight, ABottom : LongInt); overload; 
procedure SplitCells(ACol, ARow: LongInt); overload;
procedure SplitCells(Selection : TGridRect); overload;


— перегружаемая процедура, разбивающая объединенную область ячеек таблицы, ограниченную координатами ALeft, ATop, ARight, ABottom или Selection или имеющую в составе объединенной области ячейку с координатами ACol, ARow.

procedure TForm1.Button2Click(Sender: TObject);
begin
   with MStringGrid1 do
     SplitCells(0,0, ColCount - 1, 0);
end;


или

procedure TForm1.Button2Click(Sender: TObject);
begin
   with MStringGrid1 do
     SplitCells(0,0);
end;


или

procedure TForm1.Button3Click(Sender: TObject);
begin
   with MStringGrid1 do
     SplitCells(Selection);
end;


Метод

procedure ClearMergedCells;

процедура, разбивающая все объединенные ячейки.

Метод

procedure Move(const MovedCell : TMovedCell; FromIndex, ToIndex: Longint);
— процедура, позволяющая менять местами колонки или строки с номерами FromIndex, ToIndex. MovedCell — константа, имеющая тип TMovedCell, определяющая что нужно перемещать, колонки или строки.

type
  TMovedCell = (MCol, MRow);

procedure TForm1.Button4Click(Sender: TObject);
begin
   MStringGrid1.Move(MCol,1,3);
end;


выполнение данной процедуры приведет к перемещению колонки с номером 1 в колонку с номером 3. При этом колонки с номерами 2, 3 сместятся влево.

Свойство

property MergTextAlign[ACol, ARow: Integer]: TTextAlign write SetMergTextAlign;

определяет выравнивание текста объединенной ячейки, содержащей координаты ACol, ARow.

procedure TForm1.Button1Click(Sender: TObject);
begin
with MStringGrid1 do
begin
   MergeCells(Selection);
   with Selection do
    MergTextAlign[Left, Top] := TO_CENTERCENTER;
end;
end;


Свойства

property CellTextWidth : integer read FCellTextWidth;
property CellTextHeight : integer read FCellTextHeight;

определяют ширину и высоту многострочного текста при прорисовке ячейки

var Bool : boolean;
procedure TForm1.MStringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
    with MStringGrid1 do
    begin
     if Bool and (CellTextHeight > RowHeights[ARow]) then
     begin
      RowHeights[ARow] := CellTextHeight;
      Bool := false;
     end;
    end;
end;  

procedure TForm1.MStringGrid1GetEditText(Sender: TObject; ACol,
  ARow: Integer; var Value: String);
begin
   Bool := true;
end;


данная процедура автоматически подгоняет высоту ячейки так, чтобы многострочный текст полностью помещался в ячейке (Только если определено OnTextAlignChange и для данной ячейки TextAlign <> TO_EDITCONTROL)

var Bool : boolean;
procedure TForm1.MStringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
   with MStringGrid1 do
     if Bool and (CellTextWidth > ColWidths[ACol]) then
     begin
       ColWidths[ACol] := CellTextWidth + 4;
       Bool := false;
     end;
end;

procedure TForm1.MStringGrid1GetEditText(Sender: TObject; ACol,
  ARow: Integer; var Value: String);
begin
   Bool := true;
end;


данная процедура автоматически подгоняет ширину ячейки так, чтобы однострочный текст полностью помещался в ячейке.

Свойство

property PickList: TStrings read GetPickList write SetPickList;

заполняет раскрывающийся список значениями по умолчанию при CellButtonStyle=btsPickList.

Свойство

property CellButtonStyle : TCellButtonStyle read FCellButtonStyle write FCellButtonStyle default btsAuto;

— имеет тип TCellButtonStyle и определяет стиль кнопок в ячейках по умолчанию.

TCellButtonStyle = (btsAuto, btsEllipsis, btsPickList);


Свойство

property OnTextAlignChange : TTextAlignChange read FOnTextAlignChange write FOnTextAlignChange;

-имеет процедурный тип TTextAlignChange и определяет способ задания стиля кнопок в ячейках.

type
  TTextAlignChange = procedure(Sender: TObject; ACol, ARow: Longint; var TextAlign: TTextAlign) of object;
procedure TForm1.MStringGrid1TextAlignChange(Sender: TObject; ACol,
  ARow: Integer; var TextAlign: TTextAlign);
var CellInfo  : TMrgedCellInfo;
begin
     with MStringGrid1 do
      if GetMergedInfo(ACol, ARow, CellInfo) then
       if CellInfo.IsFixed then
           TextAlign := TO_TOPCENTER
       else
          TextAlign := TO_CENTERCENTER;
end;


данная процедура определяет выравнивание текста в объединенных фиксированных и нефиксированных ячейках.

Свойство

property OnCellButtonStyleChange : TButtonStyleChange read FOnCellButtonStyleChange write FOnCellButtonStyleChange;

-имеет процедурный тип TButtonStyleChange и определяет способ задания стиля кнопок в ячейках.

type
  TButtonStyleChange = procedure(Sender: TObject; esCol, esRow: Longint; var CellButtonStyle: TCellButtonStyle) of object;

procedure TForm1.MStringGrid1CellButtonStyleChange(Sender: TObject; esCol,
  esRow: Integer; var CellButtonStyle: TCellButtonStyle);
begin
  CellButtonStyle := btsAuto;
  if esCol = 1 then
    CellButtonStyle := btsPickList;
  if esCol = 2 then
    CellButtonStyle := btsEllipsis;
end;


данная процедура определяет стиль кнопок в ячейках колонок.

Свойство

property OnCellButtonclick: TNotifyEvent read FCellButtonclick write FCellButtonclick;

имеет процедурный тип TNotifyEvent и определяет реакцию на нажатие кнопки ячейки при CellButtonStyle = btsEllipsis.

procedure TForm1.MStringGrid1CellButtonclick(Sender: TObject);
begin
  with MStringGrid1 do
   ShowMessage(IntToStr(Col) + '  ' + IntToStr(Row));
end;


Свойство

property OnGetPickListitems : TGetPickListItems read FGetPickListitems write FGetPickListitems;

имеет процедурный тип TGetPickListItems и определяет реакцию на раскрытие списка ячейки при CellButtonStyle = btsPickList.

type
  TGetPickListItems = procedure(Sender : TObject; ACol, ARow: Integer; Items: TStrings) of Object;

procedure TForm1.MStringGrid1GetPickListitems(Sender: TObject; ACol,
  ARow: Integer; Items: TStrings);
begin
   Items.Clear;
   if ARow = 1 then
   begin
     Items.Add('Text 1');
     Items.Add('Text 2');
     Items.Add('Text 3');
   end else
   begin
     Items.Add('String 1');
     Items.Add('String 2');
     Items.Add('String 3');
   end;
end;


Процедуа

procedure DrawAlignedText(Canvas : TCanvas; StrVal : string; TextAlign : TTextAlign; var ARect: TRect; var NeedWidth, NeedHeight : integer);

позволяет рисовать выровненный текст в прямоугольнике ARect и возвращает длину и высоту текста, если текст не умещается в прямоугольнике ARect. (Применяется для автоматического выравнивания ширины колонки или высоты строки)

procedure TForm1.MStringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var NeedWidth, NeedHeight : integer;
begin
   DrawAlignedText(MStringGrid1.Canvas, IntToStr(ACol) + '  ' + IntToStr(ARow), TO_CENTERCENTER, Rect, NeedWidth, NeedHeight);
end;

procedure TForm1.Button5Click(Sender: TObject);
var NeedWidth, NeedHeight : integer;
    Rect: TRect;
begin
   Canvas.Font.Size := 26;
   Canvas.Font.Color := clRed;
   Rect := ClientRect;
   DrawAlignedText(Canvas, 'Text', TO_BOTTOMRIGHT, Rect, NeedWidth, NeedHeight);
end;


К матеиралу прилагается демонстрационная программа, в которой показываются основные особенности использования данного компонента

TMStringGrid for Delphi 5-XE2 + Source + Demo


Источник Королевство Delphi





Все используемые на сайте статьи, файлы и логотипы компаний принадлежат их законным владельцам. Если вы являетесь правообладателем "TMStringGrid for Delphi 5-XE2 + Source + Demo" и не желаете, чтобы ваша информация находилась на нашем сайте, напишите нам и эта информация будет удалена.
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.