Чтение онлайн

на главную - закладки

Жанры

Советы по Delphi. Версия 1.4.3 от 1.1.2001

Озеров Валентин

Шрифт:

Как мне переместить форму, не имеющую заголовка?

Выберите элемент управления (или саму форму) и напишите это в его (ее) обработчике события OnMouseDown (данный пример дан только для формы):

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin

 ReleaseCapture;

 Perform(WM_SYSCOMMAND, SC_MOVE+2, 0);

end;

Классно! Намного проще

метода NCHitTest, который я предлагал. Хотя многое из того, чтобы вы мне написали, я не понял. Для чего нужно прибавлять 2 к параметру SC_MOVE? В справке по API об этом ничего не сказано.

Ну хорошо, есть недокументированный способ сообщить Windows о необходимости перемещения окна таким же способом, что и с помощью заголовка (это может вызвать неадекватную реакцию системы, не делайте этого!). Другим способом перемещения окна является перекрытие WMNCHITTEST и возвращения им значения HTCAPTION. Тем не менее, обычно я предпочитаю пользоваться методом SC_MOVE+2, поскольку он не требует создания потомков, а только создание обработчика OnMouseDown. Отчасти аналогично, вы можете добавлять константы SC_SIZE к WM_SYSCOMMAND для получения размера окна подобно тому, как если бы вы потянули его за бордюрчик. В основном мы добавляем код hittest – 9. В следующем классе определена панель, которая сама изменяет свои размеры при щелчке в ее нижнем правом углу, и сама перемещается, если вы щелкнули по ней где-то еще.

Type TMovablePanel = Class(TPanel)

Private

 Procedure wmNCHitTest(Var Message : TWMNCHitTest); message WM_NCHITTEST;

Protected

 Procedure MouseDown(Button : TMouseButton; Shift : TShiftState; X, Y : Integer); override;

End;

Procedure TMovablePanel.wmNCHitTest(Var Message : TWMNCHitTest);

Begin

 With Message, ScreenToClient(Pos) Do

If (X < Width - 10) And (Y < Height - 10) Then

Message.Result := HTCAPTION

Else Message.Result := HTCLIENT;

End;

Procedure TMovablePanel.MouseDown(Button : TMouseButton; Shift : TShiftState; X, Y : Integer);

Begin

 If Button = mbLeft Then Begin

ReleaseCapture;

Perform(WM_SYSCOMMAND, SC_SIZE + HTBOTTOMRIGHT - 9, 0);

 End Else Inherited MouseDown(Button, SHift, X, Y);

End;

– Robert Wittig

Как

работать с формой, куда динамически передаются страницы (PageControl) из форм-хранителей (с использованием наследования)?

Nomadic советует:

Кидаю проект-болванку, сделанную перед началом работы над основным -

unit Unit1; //базовая форма хранителя страницы

interface

uses ...

type TBPgFrm = class(TForm)

 Panel1: TPanel;

 PageControl1: TPageControl;

 TabSheet1: TTabSheet;

 Label1: TLabel;

public

 function PgInit: boolean; virtual;

 function PgValid: boolean; virtual;

end;

implementation

{$R *.DFM}

function TBPgFrm.PgInit: boolean;

begin

 result:= MessageDlg(Label1.Caption+': PgInit', mtConfirmation, mbOkCancel, 0)=mrOK;

end;

function TBPgFrm.PgValid: boolean;

begin

 result:= MessageDlg(Label1.Caption+': PgValid', mtConfirmation, mbOkCancel, 0)=mrOK;

end;

end.

unit Unit2; //главная форма проекта; содержит первую страницу

interface //и кнопки Cancel, Prev & Next/Finish.

uses ...

type TPagesDlg = class(TForm)

 Panel1: TPanel;

 Panel2: TPanel;

 PageControl1: TPageControl;

 TabSheet1: TTabSheet;

 Prev: TButton;

 CancelBtn: TButton;

 Next: TButton;

 Label1: TLabel;

 procedure CancelBtnClick(Sender: TObject);

 procedure FormDestroy(Sender: TObject);

 procedure NextClick(Sender: TObject);

Поделиться:
Популярные книги

Последний Паладин. Том 2

Саваровский Роман
2. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 2

Зубных дел мастер

Дроздов Анатолий Федорович
1. Зубных дел мастер
Фантастика:
научная фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Зубных дел мастер

Истребитель. Ас из будущего

Корчевский Юрий Григорьевич
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.25
рейтинг книги
Истребитель. Ас из будущего

Честное пионерское! Часть 3

Федин Андрей Анатольевич
3. Честное пионерское!
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Честное пионерское! Часть 3

Обгоняя время

Иванов Дмитрий
13. Девяностые
Фантастика:
попаданцы
5.00
рейтинг книги
Обгоняя время

Страж. Тетралогия

Пехов Алексей Юрьевич
Страж
Фантастика:
фэнтези
9.11
рейтинг книги
Страж. Тетралогия

Магия чистых душ

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.40
рейтинг книги
Магия чистых душ

Имя нам Легион. Том 4

Дорничев Дмитрий
4. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 4

Девятый

Каменистый Артем
1. Девятый
Фантастика:
боевая фантастика
попаданцы
9.15
рейтинг книги
Девятый

Морской волк. 1-я Трилогия

Савин Владислав
1. Морской волк
Фантастика:
альтернативная история
8.71
рейтинг книги
Морской волк. 1-я Трилогия

Отмороженный 8.0

Гарцевич Евгений Александрович
8. Отмороженный
Фантастика:
постапокалипсис
рпг
аниме
5.00
рейтинг книги
Отмороженный 8.0

Совершенный: охота

Vector
3. Совершенный
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Совершенный: охота

Калибр Личности 1

Голд Джон
1. Калибр Личности
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Калибр Личности 1

Личник

Валериев Игорь
3. Ермак
Фантастика:
альтернативная история
6.33
рейтинг книги
Личник