Читать «Виртуальная библиотека Delphi» онлайн - страница 110
Unknown
MStream.Position := 0;
finally
MStream.Free;
end;
finally
GlobalUnlock(hBuf);
end;
end;
end;
20. Что означает Key<>#0 ?
В исходном тексте одного из компонентов третьих фирм я увидел строку:
if Key <> #0 then inherited KeyPress(#0);
В Windows виртуальные коды находятся в диапазоне 1-145 (Dec). Зачем нужна такая проверка?
В соответствии с соглашением Windows код клавиши #0 означает отсутствие реального нажатия. Управление в данную точку программы могло попасть, например вследствие прямого вызова, а не нажатия клавиши или же нажатие уже было обработано предком, вследствие чего код нажатой клавиши был сброшен в 0.
21. Аналог процедуры TP/BP Delay.
procedure TForm1.Delay(MSecs: Longint);
var
FirstTick: Longint;
begin
FirstTick := GetTickCount;
repeat
Application.ProcessMessages;
until GetTickCount - FirstTick >= MSecs;
end;
В Win32 API существуют также функции
22. Каким образом создать форму, которую можно таскать за поле?
Как сделать форму (окно), которое перетаскивается не за заголовок (
Нужно обрабатывать сообщение
type
TForm1 = class(TForm)
...
private
procedure WMNCHitTest(var M: TWMNCHitTest); message WM_NCHITTEST;
end;
procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);
begin
inherited;
if M.Result = htClient then
M.Result := htCaption;
end;
Примечание: окно можно сделать вообще без
23. Как программно спрятать или показать заголовок у формы?
Как программно спрятать или показать заголовок (
Вы можете попробовать следующее:
procedure TForm1.HideTitlebar;
var
Save: Longint;
begin
if BorderStyle=bsNone then Exit;
Save := GetWindowLong(Handle, GWL_STYLE);
if (Save and WS_CAPTION) = WS_CAPTION then
begin
case BorderStyle of
bsSingle, bsSizeable:
SetWindowLong(Handle, GWL_STYLE, Save and (not WS_CAPTION) or WS_BORDER);
bsDialog:
SetWindowLong(Handle, GWL_STYLE, Save and (not WS_CAPTION) or DS_MODALFRAME or WS_DLGFRAME);
end;
Height := Height-GetSystemMetrics(SM_CYCAPTION);