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

Unknown

 AddStrongType(w); {<- compile error}

 AddStrongType(TStrongType(w)); {compiles fine}

 AddStrongType(s); {compiles fine}

end;

Вопрос:

Где в Delphi обьявленны VK_Key для A-Z и 0-9?

Ответ:

Они не обьявлены в Delphi поскольку они просто могуть быть заменены буквами. VK_0 до VK_9 то же что и ASCII '0' до '9' ($30 – $39), VK_A до VK_Z то же что и ASCII 'A' до 'Z' ($41 – $5A).

Вопрос:

Как изменить оконную процедуру для TForm?

Ответ:

Переопределите в подклассе TForm оконную процедуру WinProc класса. В примере оконная процедура переопределяется для того чтобы реагировать на сообщение WM_CANCELMODE, показывающее, что выполняется messagebox или какой-либо еще диалог.

Пример:

type TForm1 = class(TForm)

 Button1: TButton;

 procedure WndProc (var Message: TMessage); override;

 procedure Button1Click(Sender: TObject);

private

 {Private declarations}

public

 {Public declarations}

end;

var Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.WndProc(var Message: TMessage);

begin

 if Message.Msg = WM_CANCELMODE then begin

  Form1.Caption := 'A dialog or message box has popped up';

 end else inherited // <- остальное сделает родительская процедура

end;

procedure TForm1.Button1Click(Sender: TObject);

 begin ShowMessage('Test Message');

end;

Вопрос:

Как узнать размеры TComboBox с показанным выпадающим списком до показа списка?

Ответ:

На событии FormShow пошлите сообщение CB_SHOWDROPDOWN в ComboBox дважды — один раз чтобы заставить список выпасть, второй — чтобы убрать его. Затем пошлите сообщение CB_GETDROPPEDCONTROLRECT, передав в качестве параметра адрес TRect. TRect будет содержать экранные кординаты прямоугольника описывающего ComboBox вместе с выпавшим списком. Затем Вы можете вызвать ScreenToClient чтобы преобразовать экранные кординаты в координаты клиентской области окна.

Пример:

var R : TRect;

procedure TForm1.FormShow(Sender: TObject);

var T : TPoint;

begin

 SendMessage(ComboBox1.Handle, CB_SHOWDROPDOWN, 1, 0);

 SendMessage(ComboBox1.Handle, CB_SHOWDROPDOWN, 0, 0);

 SendMessage(ComboBox1.Handle, CB_GETDROPPEDCONTROLRECT, 0, LongInt(@r));

 t := ScreenToClient(Point(r.Left, r.Top));

 r.Left := t.x;

 r.Top := t.y;

 t := ScreenToClient(Point(r.Right, r.Bottom));

 r.Right := t.x;

 r.Bottom := t.y;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

 Form1.Canvas.Rectangle(r.Left, r.Top, r.Right, r.Bottom );

end;

Вопрос:

Я хочу создать в своей программе меню "а ля Дельфи 4". Как это сделать?

Ответ:

1. Разместите на форме TControlBar. (закладка Additional) Установите Align = Client.

2. Разместите TToolBar (закладка Win32) внутри TControlBar.

3. Установите в True свойства Flat и ShowCaptions этого TToolBar.