Читать «Виртуальная библиотека Delphi» онлайн - страница 98

Unknown

var

  NewButton: TButton;

begin

  NewButton := TButton.Create(Self);

  NewButton.Parent := TWinControl(TabbedNotebook1.Pages.Objects[0]);

То же самое справедливо и для компонента TNotebook.

6. Как включить символ & в надпись (Caption)?

Попробуйте: &&

7. Как сделать окно (TForm) без заголовка (Caption)?

Попробуйте использовать следующий код:

constructor TPanelForm.Create(AOwner: TComponent);

{ Вызов SetWindowLong API для изменения стиля окна главной формы. }

{ Берется существующий стиль и убирается флаг WS_CAPTION          }

var

  LStyle: Longint;

begin

  inherited Create(AOwner);

  BorderIcons := [];

  LStyle := GetWindowLong(Handle, GWL_STYLE);

  LStyle := LStyle and not WS_CAPTION;

  SetWindowLong(Handle, GWL_STYLE, LStyle);

{ Перерисуем окно }

  ForceRepaint;

end;

procedure TPanelForm.ForceRepaint;

var

  RectWnd: TRect;

  WWidth, WHeight: Integer;

begin

{ получаем размер окна }

  GetWindowRect(Handle, RectWnd);

  WWidth := RectWnd.Right-RectWnd.Left;

  WHeight := RectWnd.Bottom-RectWnd.Top;

{ Форсируем полную перерисовку. Это должен делать InvalidateRect() }

{ но почему-то не делает  : (  }

{ "сожмем" окно }

  SetWindowPos(Handle, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE);

{ восстановим окно }

  SetWindowPos(Handle, HWND_TOP, 0, 0, WWidth, WHeight, SWP_NOMOVE);

end;

Можно поступить другим способом — выставить у формы свойство BorderStyle = bsNone, и написать следующий обработчик OnPaint:

procedure TForm1.FormPaint(Sender: TObject);

begin

  Canvas.Brush.Style := bsClear;

  Canvas.Rectangle(0, 0, Width, Height);

end;

8. Почему некоторые компоненты типа TPanel и TEdit не имеют свойства Canvas?

Все наследники TCustomControl имеют Canvas, однако, в большинстве случаев это свойство объявлено protected для предотвращения рисования 'чужаками' на компоненте. Наследники компонента всегда могут получить доступ к унаследованным protected свойствам (типа Canvas), но пользователь компонента — никогда.

type

  TCanvasPanel = class(TPanel)

  public

    property Canvas;

  end;

Если вы хотите рисовать на компоненте, у которого нет public свойства Canvas, то используйте, например, компонент TPaintBox: положите его на панель TPanel, сделайте Align = Client и рисуйте на TPaintBox.Canvas.