Отправляет email-рассылки с помощью сервиса Sendsay

Советы по Delphi

  Все выпуски  

Советы по Delphi


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

Здравствуйте, уважаемые подписчики! На этот раз я затрону сразу два небольших вопроса:
1. Панели управления, превращающиеся в окна при их перетаскивании.
2. Фон отдельных ячеек в StringGrid.

1. Во многих программах используют панели инструментов, которые можно перемещать друг относительно друга, а при попытке "перетащить" такую панель далеко, она превращается в отдельное окно. При перемещении этого окна на старое место, панель принимает стандартный вид.

К сожалению, так просто реализовать это можно только в Delphi5 и выше. Я прошу прощения у всех тех, кто пользуется более ранними версиями Delphi.

Для создания панелей в двумя полосами слева, которые можно двигать друг относительно друга, используют компонент ControlBar (вкладка Additional), на котором обычно размещают один или несколько ToolBar (вкладка Win32). Чтобы сделать возможным "вытаскивание" панели из ControlBar нужно написать следующий код:

procedure TForm1.FormCreate(Sender: TObject);
begin
  ToolBar1.DockSite := true;
  ToolBar1.DragKind := dkDock;
  ToolBar1.DragMode := dmAutomatic;
end;

procedure TForm1.ControlBar1DockOver(Sender: TObject;
  Source: TDragDockObject; X, Y: Integer; State: TDragState;
  var Accept: Boolean);
begin
  Accept := (Source.Control is TToolBar);
  if Accept then with Source.DockRect do begin
    TopLeft := ControlBar1.ClientToScreen(ControlBar1.ClientRect.TopLeft);
    Right := Left + Source.Control.Width;
    Bottom := Top + Source.Control.Height;
  end;
end;
Вы можете убрать метод FormCreate, установив нужные свойства компонента ToolBar1 на стадии разработки при помощи Object Inspector.


2. Часто не хватает возможностей компонентов TStringGrid и TDrawGrid. В этом случае можно воспользоваться событием OnDrawCell для рисования произвольных изображений в ячейках таблицы. Каждый раз, когда нужно вывести на экран какую-то ячейку, вызывается событие OnDrawCell. В качестве параметров сообщаются строка и столбец, координаты и размеры ячейки, а также ее состояние (выделение, фокус, стационарность).

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

procedure TForm1.FormCreate(Sender: TObject);
var
  x, y, i: integer;
  s: string;
begin
  randomize;
  for y := 0 to StringGrid1.RowCount - 1 do
    for x := 0 to StringGrid1.ColCount - 1 do begin
      s := '';
      for i := 0 to random(20) do
        s := s + chr(ord('a') + random(26));
      StringGrid1.Cells[x,y] := s;
    end;
end;

const
  colors: array [0..4] of TColor = (clLime, clAqua, clFuchsia, clSilver, clYellow);

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if (ARow >= 1) and (ACol >= 1) then with StringGrid1.Canvas do begin
    Brush.Color := colors[(ARow + ACol) mod 5];
    FillRect(rect);
    Font := StringGrid1.Font;
    TextOut(rect.left + 2, rect.top + 2, StringGrid1.cells[ACol, ARow]);
  end;
end;


Все советы и замечания присылайте, пожалуйста, на delphi4all@narod.ru

Всего доброго,
Даниил Карапетян.






http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу
Рейтингуется SpyLog

В избранное