bsDialog:
SetWindowLong(Handle, GWL_STYLE, Save and (not WS_CAPTION) or DS_MODALFRAME or WS_DLGFRAME);
end;
Height := Height-GetSystemMetrics(SM_CYCAPTION);
Refresh;
end;
end;
procedure TForm1.ShowTitlebar;
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 or WS_CAPTION or WS_BORDER);
bsDialog:
SetWindowLong(Handle, GWL_STYLE, Save or WS_CAPTION or DS_MODALFRAME or WS_DLGFRAME);
end;
Height := Height + GetSystemMetrics(SM_CYCAPTION);
Refresh;
end;
end;
24. Как сделать приложение модальным?
Мне нужно сделать приложение модальным, для того чтобы обезопасить систему и в то же время позволить работать с программой.
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 как показано ниже:
NullItem1.ShortCut := ShortCut(VK_Tab, [ssAlt]);
(NullItem1 нужно заменить на название созданного вами объекта — пункта меню)
Шаги 4-6 предотвращают переход на приложение по Alt-Tab.
25. Как изменить шрифт у Application.Title (заголовка приложения)?
Никак. Это ограничение Windows — вы не можете изменить шрифт ни у одного заголовка ни у приложения, ни у окна. Для окна можно предложить следующее — создать свое окно без заголовка (Caption) и рамки, которое будет само выводить нужную надпись нужным шрифтом и одновременно будет способно изменять свои размеры.
26. Каким образом (желательно не специфичным для Delphi) узнать, открыто меню или нет?
Вот так:
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
Item01: TMenuItem;
Item11: TMenuItem;
Item21: TMenuItem;
private
{ Private declarations }
public
procedure WMMenuSelect(var M: TWMMenuSelect); message WM_MENUSELECT;
end;
implementation
{$R *.RES}
procedure TForm1.WMMenuSelect(var M: TWMMenuSelect);
begin
inherited;
{ Этот Beep сигнализирует вообще об открытии меню }
MessageBeep(MB_ICONASTERISK);
{ А зтот Beep - только о выборе в меню нового Item }
if M.Menu = MainMenu1.Handle then MessageBeep(MB_ICONASTERISK);
end;
end.
Разное
1. Передача переменной в отчет ReportSmith.
Следующий код показывает, как передать переменную в отчет.
В примере строковой переменной отчета 'City' присваивается значение 'Bombey'. Подразумевается, что есть готовый отчет с данной переменной. Поместите компонент TReport на форму и установите требуемые свойства для вызова печати отчета. Напишите обработчик OnClick для кнопки Button1 на форме (кнопка — для простоты):
procedure TForm1.Button1Click(Sender: TObject);
begin
Report1.InitialValues.Clear;
Report1.InitialValues.Add('@City=<Bombey>');
Report1.Run;
end;
2. Как получить русские буквы в DBD?
Имя шрифта для отображения русских букв берется из файла PDOXWIN.INI секция [Properties] строка SystemFont. Если очень хочется, то можно исправить имя 'PDOXWIN.INI' на 'DBD.INI' в файле DBSRV.DLL (он лежит там же где и DBD.EXE) по смещению $E9D8 (не забудьте после 'DBD.INI' поставить шестнадцатеричный ноль), и в секции [Properties] файла DBD.INI добавить строку типа
SystemFont = Courier New Cyr
По умолчанию имя фонта для отображения русских букв — Arial.
Действительно, если у Вас Pan Euro или русская версия Windows95, то DBD не будет показывать шрифты Cyr в Preferences/General/Default system font.
Решить эту проблему можно двумя способами:
1. записать в каталог WINDOWS/FONTS шрифты Arial Cyr от русских Windows и сделать ShutDown. После загрузки Arial Cyr будет доступен для выбора.
2. поменять шрифт в Registry вручную например на MS Sans Serif - HKEY_CURRENT_USER/SOFTWARE/Borland/DBD/7.0/Preferences/Properties ключ SystemFont.
3. Как печатать отчеты из приложения Delphi без использования ReportSmith?
1. Лучше всего использовать специализированные генераторы отчетов в виде компонентов, например QuickReport или Ace Reporter.