Виртуальная библиотека Delphi

Тут можно читать онлайн Виртуальная библиотека Delphi - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Виртуальная библиотека Delphi
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    3/5. Голосов: 11
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 60
    • 1
    • 2
    • 3
    • 4
    • 5

Виртуальная библиотека Delphi краткое содержание

Виртуальная библиотека Delphi - описание и краткое содержание, автор Неизвестный Автор, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Виртуальная библиотека Delphi - читать онлайн бесплатно полную версию (весь текст целиком)

Виртуальная библиотека Delphi - читать книгу онлайн бесплатно, автор Неизвестный Автор
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать
картинка 87

Не только возможно, именно так поступают функции Clipboard.GetComponent и Clipboard.SetComponent . Сначала вы должны зарегистрировать свой собственный формат данных для Clipboard с помощью функции RegisterClipboardFormat :

CF_MYFORMAT := RegisterClipboardFormat('My Format Description'); Далее вы должны выполнить шаги:

1. Создать поток (memory stream) и записать туда данные.

2. Создать глобальный буфер в памяти и скопировать поток туда.

3. Вызвать Clipboard.SetAsHandle(), чтобы поместить буфер в Clipboard.

Пример:

var

hBuf: THandle;

Bufptr: Pointer;

MStream: TMemoryStream;

begin

MStream := TMemoryStream.Create;

try

{ write your data to the stream }

hBuf := GlobalAlloc(GMEM_MOVEABLE, MStream.Size);

try

BufPtr := GlobalLock(hBuf);

try

Move(MStream.Memory^, BufPtr^, MStream.Size);

Clipboard.SetAsHandle(CF_MYFORMAT, hBuf);

finally

GlobalUnlock(hBuf);

end;

except

GlobalFree(hBuf);

raise;

end;

finally

MStream.Free;

end;

end;

Внимание:не уничтожайте буфер, созданный с GlobalAlloc . Поскольку вы поместили его в Clipboard, это уже дело clipboard'а его уничтожить. Опять же, получая буфер из Clipboard, не уничтожайте этот буфер - просто сделайте копию содержимого.

Для обратного получения потока и данных, сделайте что-нибудь вроде этого:

var

hBuf: THandle;

BufPtr: Pointer;

MStream: TMemoryStream;

begin

hBuf := Clipboard.GetAsHandle(CF_MYFORMAT);

ifhBuf <> 0 then

begin

BufPtr := GlobalLock(hBuf);

ifBufPtr <> nil then

try

MStream := TMemoryStream.Create;

try

MStream.WriteBuffer(BufPtr^, GlobalSize(hBuf));

MStream.Position := 0;

{ read your data from the stream }

finally

MStream.Free;

end;

finally

GlobalUnlock(hBuf);

end;

end;

end;

20. Что означает Key<>#0 ?

картинка 88

В исходном тексте одного из компонентов третьих фирм я увидел строку:

ifKey <> #0 then inheritedKeyPress( #0);

В Windows виртуальные коды находятся в диапазоне 1-145 (Dec). Зачем нужна такая проверка?

картинка 89

В соответствии с соглашением Windows код клавиши #0означает отсутствие реального нажатия. Управление в данную точку программы могло попасть, например вследствие прямого вызова, а не нажатия клавиши или же нажатие уже было обработано предком, вследствие чего код нажатой клавиши был сброшен в 0.

21. Аналог процедуры TP/BP Delay.

procedureTForm1.Delay(MSecs: Longint);

var

FirstTick: Longint;

begin

FirstTick := GetTickCount;

repeat

Application.ProcessMessages;

untilGetTickCount - FirstTick >= MSecs;

end;

картинка 90

В Win32 API существуют также функции Sleep и SleepEx .

22. Каким образом создать форму, которую можно таскать за поле?

картинка 91

Как сделать форму (окно), которое перетаскивается не за заголовок ( Сaption ), а за все поле ?

картинка 92

Нужно обрабатывать сообщение WM_NCHITTEST :

type

TForm1 = class(TForm)

...

private

procedureWMNCHitTest( varM: TWMNCHitTest); messageWM_NCHITTEST;

end;

procedureTForm1.WMNCHitTest( varM: TWMNCHitTest);

begin

inherited; { вызов унаследованного обработчика }

ifM.Result = htClient then { Мышь сидит на окне? }

M.Result := htCaption; { Если да - то пусть Windows думает, что }

{ мышь на caption bar }

end;

Примечание:окно можно сделать вообще без Сaption .

23. Как программно спрятать или показать заголовок у формы?

картинка 93

Как программно спрятать или показать заголовок ( Caption ) у формы?

картинка 94

Вы можете попробовать следующее:

procedureTForm1.HideTitlebar;

var

Save: Longint;

begin

ifBorderStyle=bsNone thenExit;

Save := GetWindowLong(Handle, GWL_STYLE);

if(Save andWS_CAPTION) = WS_CAPTION then

begin

caseBorderStyle of

bsSingle, bsSizeable:

SetWindowLong(Handle, GWL_STYLE, Save and( notWS_CAPTION) orWS_BORDER);

bsDialog:

SetWindowLong(Handle, GWL_STYLE, Save and( notWS_CAPTION) orDS_MODALFRAME orWS_DLGFRAME);

end;

Height := Height-GetSystemMetrics(SM_CYCAPTION);

Refresh;

end;

end;

procedureTForm1.ShowTitlebar;

var

Save: Longint;

begin

ifBorderStyle = bsNone thenExit;

Save := GetWindowLong(Handle, GWL_STYLE);

if(Save andWS_CAPTION) <> WS_CAPTION then

begin

caseBorderStyle of

bsSingle, bsSizeable:

SetWindowLong(Handle, GWL_STYLE, Save orWS_CAPTION orWS_BORDER);

bsDialog:

SetWindowLong(Handle, GWL_STYLE, Save orWS_CAPTION orDS_MODALFRAME orWS_DLGFRAME);

end;

Height := Height + GetSystemMetrics(SM_CYCAPTION);

Refresh;

end;

end;

24. Как сделать приложение модальным?

картинка 95

Мне нужно сделать приложение модальным, для того чтобы обезопасить систему и в то же время позволить работать с программой.

картинка 96

Ok, пара предложений на эту тему:

1. Создайте форму, занимающую весь экран (maximized) без системных кнопок (Maximize, Minimize, System)

2. В обработчике FormDeactivate для формы вызовите метод SetFocus — это предотвратит Ctrl+Esc:

Form1.SetFocus;

3. В обработчике события FormActivate , нужно присвоить метод Deactivate для приложения:

Application.OnDeactivate := FormDeactivate;

4. Создайте всплывающее меню TPopupMenu с единственным пунктом. В свойствах данного компонента нужно установить Visible=False . Создайте процедуру для этого пункта меню, и в теле поставьте две фигурные скобки {} (для того, чтобы Delphi не удалил эту процедуру)

5. Присвойте созданное Popup-меню форме (св-во PopupMenu )

6. Задайте горячую клавишу (shortcut) для Popup-меню в методе FormActivate как показано ниже:

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Неизвестный Автор читать все книги автора по порядку

Неизвестный Автор - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Виртуальная библиотека Delphi отзывы


Отзывы читателей о книге Виртуальная библиотека Delphi, автор: Неизвестный Автор. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x