Виртуальная библиотека Delphi
- Название:Виртуальная библиотека Delphi
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Виртуальная библиотека Delphi краткое содержание
Виртуальная библиотека Delphi - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
begin
{ default WndProc return value }
Result := 0;
{ handle messages here; the message number is in Msg }
Result := CallWindowProc(OldWndProc, hWndAppl, Msg, wParam, lParam);
end;
begin
Application.CreateForm(TForm1, Form1);
OldWndProc := TFarProc(GetWindowLong(Application.Handle, GWL_WNDPROC));
SetWindowLong(Application.Handle, GWL_WNDPROC, Longint(@NewWndProc));
Application.Run;
end.
10. Проблема с DragDrop для внешних программ.

Я пишу небольшую программку — "мусорную корзину". В FormCreate вызывается DragAcceptFiles(HANDLE, True) . Проблема в том, что когда размер окна восстанавливается и затем минимизируется Drag and Drop перестает работать. Я безуспешно пробовал помещать DragAcceptFiles в разные методы формы. Однако если сделать вызов DragAcceptFiles(Application.Handle, True) в MainForm.Create , то все работает. Как перехватить событие WM_DROPFILES ?

Это можно сделать так:
type
TMainForm = class(TForm)
...
procedureFormCreate(Sender: TObject);
private
procedureDropFiles( varMsg : TWMDropFiles); messageWM_DROPFILES;
end;
procedureTMainForm.DropFiles( varMsg : TWMDropFiles);
begin
DragQueryPoint(Msg.Drop, Point);
NrOfFiles := DragQueryFile(Msg.Drop, Word(-1), FileName, BufSize);
DragQueryFile(Msg.Drop, 0, FileName, BufSize);
end;
procedureTMainForm.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle, True);
end;
Подробнее о перехвате событий Windows см. Главу 7 руководства Component Writers Guide.
11. Как обрабатывать WM_DROPFILES (Drag/Drop)?
Следующий код показывает как обрабатывать это событие. Обрабатываются имена всех "брошенных" файлов. Для загрузки каждого файла вызывается CreateChild(FName) . В обработчике OnCreate данной формы вы должны вызвать DragAcceptFiles .
type
TFrameForm = class(TForm)
...
protected
procedureWMDropFiles( varMsg: TMessage); messageWM_DROPFILES;
end;
procedureTFrameForm.WMDropFiles( varMsg : TMessage);
var
I, N, Size: Word;
FName: string;
HDrop: Word;
begin
HDrop := Msg.WParam;
N := DragQueryFile(HDrop, $FFFF, nil, 0);
forI := 0 to(N-1) do
begin
Size := DragQueryFile(HDrop, I, nil, 0);
ifSize < 255 then { 255 char. string limit - not really a problem }
begin
FName[0] := Chr(Size);
DragQueryFile(HDrop, I, @FName[1], Size+1);
CreateChild(FName);
end;
end;
Msg.Result := 0;
inherited;
end;
12. Как может выделить время CPU другим задачам , подобно "DoEvents" в VB?
Эквивалент в Delphi — Application.ProcessMessages .
Если вы выполняете долгие вычисления, то вызов данного метода позволит в Win 16 выполняться параллельно другим приложениям, а в Win 32 - корректно перерисовываться вашему приложению.
13. В каком порядке происходят события при создании и показе окна?
При создании окна обработчики событий выполняются в следующем порядке:
• OnCreate
• OnShow
• OnPaint
• OnActivate
• OnResize
• OnPaint (снова)
14. UpCase для русского языка.
Данная функция (UpCase) производит преобразование только латинских символов в верхний регистр. Для правильного преобразования необходимо использовать функции Windows API, поскольку именно Windows должна "знать" о кодировке национальных символов. Причем к конфигурации BDE кодровка Windows не имеет никакого отношения — имея английские Windows без русификатора и выставив в BDE кодировку Paradox ANSII Cyrillic нормальных русских букв получить не удастся.
А функции для преобразования следующие — OemToAnsi, AnsiToOem, OemToAnsiBuf, AnsiToOemBuf в Win16 (модуль WinProcs) и OemToChar, CharToOem, OemToCharBuf и CharToOemBuf в Win32 (модуль Windows)..
15. Приложение, написанное на Delphi, не запускается минимизированным.
Проверьте глобальную переменную CmdShow для того чтобы определить, в каком состоянии запускается приложение, и модифицируйте ее как вам необходимо:
procedureTForm1.FormCreate(Sender: TObject);
begin
ifCmdShow = SW_SHOWMINNOACTIVE thenWindowState := wsMinimized;
end;
Например, если необходимо запускать приложение либо минимизированным, либо максимизированным, используйте следующий код:
procedureTForm1.FormCreate(Sender: TObject);
begin
ifCmdShow = SW_SHOWMINNOACTIVE thenWindowState := wsMinimized
elseWindowState := wsMaximized;
end;
16. Объясните разницу в помещении uses в секцию interface или implementation.
Секция interface — интерфейсная. Туда попадают объявления констант, типов (в т.ч. и объектов или классов) переменных, процедур и функций. Поэтому для этой части usesдолжен содержать ссылки на те модули, которые используются для объявлений в этой части.
Секция implementation — описание реализации интерфейсной части, здесь в usesдолжны быть упомянуты те модули, которыми вы пользуетесь для написания кода. Например, Вы хотите в модуле пользоваться функциями API Windows, для этого добавьте в объявлении implementationстроку uses WinTypes, WinProcs;или uses Windows;. Таким образом, вы явно указываете что данными модулями будете пользоваться только в секции реализации.
Конечно, можно упоминать модули только в части interface, но правильная расстановка имен модулей в соответствующем usesгарантирует исключение циклических ссылок, а также улучшает читаемость программы.
17. Как спрятать окна MDI Child?

Я пытаюсь это сделать, выставляя Form1.Visible := False , но это не помогает.

Windows не позволяет прятать окна MDI Child.
18. Как убрать заголовок у формы MDIChild?

Как убрать заголовок ( Caption ) из MDIChild?

Для MDIChild установка свойства BorderStyle := bsNone не убирает заголовок. Это можно сделать так:
procedureTMDIChildForm.CreateParams( varParams: TCreateParams);
begin
inheritedCreateParams(Params);
Params.Style := Params.Style and( notWS_CAPTION);
end;
19. Сохранение данных в Clipboard.

Мне нужно использовать clipboard для сохранения данных в собственном формате и я хочу для этого написать набор процедур ввода/вывода с использованием потоков (streams). Возможно ли создать объект TMemoryStream , эаполнить его и поместить в Clipboard?
Читать дальшеИнтервал:
Закладка: