Чтение онлайн

ЖАНРЫ

Советы по Delphi. Версия 1.4.3 от 1.1.2001

Озеров Валентин

Шрифт:

end;

.....

implementation

{$R myRes.res} //ресурс с битмапом фона

procedure .FormCreate(...);

var LogBrush:TLogbrush;

begin

 FCover:=TBitmap.Create;

 FCover.LoadFromResourceName(hinstance,'BMPCOVER');

 With LogBrush do begin

lbStyle:=BS_PATTERN;

lbHatch:=FCover.Handle;

 end;

 FHBrush:=CreateBrushIndirect(Logbrush);

end;

procedure .FormDestroy(...);

begin

 DeleteObject(FHBrush);

 FCover.Free;

end;

procedure .CreateWnd;

begin

 inherited CreateWnd;

 if (ClientHandle <> 0) then begin

if NewStyleControls then

SetWindowLong(ClientHandle, GWL_EXSTYLE, WS_EX_CLIENTEDGE or GetWindowLong(ClientHandle, GWL_EXSTYLE));

FNewClientInstance:=MakeObjectInstance(NewClientWndProc);

FOldClientInstance:=pointer(GetWindowLong(ClientHandle, GWL_WNDPROC));

SetWindowLong(ClientHandle, GWL_WNDPROC, longint(FNewClientInstance));

 end;

end;

procedure .NewClientWndProc(var Message:TMessage);

 procedure Default;

 begin

with Message do

Result := CallWindowProc(FOldClientInstance, ClientHandle, Msg, wParam, lParam);

 end;

begin

 with Message do begin

case Msg of

WM_ERASEBKGND:

begin

FillRect(TWMEraseBkGnd(Message).DC, ClientRect,FHBrush);

Result := 1;

end;

else

Default;

end;

 end;

end;
 

Предотвращение

закрытия формы

Igor Nikolaev aKa The Sprite советует:

Следующий текст убирает команду закрыть из системного меню и одновременно делает серой кнопку закрыть в заголовке формы:

procedure TForm1.FormCreate(Sender: TObject);

var hMenuHandle:HMENU;

begin

 hMenuHandle := GetSystemMenu(Handle, FALSE);

 IF (hMenuHandle <> 0) THEN DeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND);

end;
 

Немедленный TrayIcon после старта приложения

Нужно чтобы при запуске приложения сразу исчезала с экрана главная форма и появлялась TrayIcon. В Ваших «Советы по Дельфи» на данный вопрос я нашел два решения (раздел Классы/TForm) к сожалению ни одно решения на моем компьютере не работало :-(. В связи с этим было решено продолжить поиск, и решение было найдено:

На Главную форму приложения помещаем компонент (TEdit или другой любой, который может иметь фокус), затем устанавливаем свойства:

Visible:=True;

TabOrder:=0;

В обработчик события OnEnter записываем (этот код взял из «Советов по Дельфи»):

Application.Minimize;

ShowWindow(Application.Handle, SW_HIDE);

Button1.SetFocus; //Устанавливаем фокус на другой компонент формы (у меня был Button1 )

Edit1.Visible:=False; //Делаем добавочный компонент невидимым – т.к. он больше нам не нужен

Механизм работы:

При запуске приложения создается форма и фокус получает компонент со свойством TabOrder:=0, при получении фокуса вызывается процедура OnEnter для нашего компонента и происходит скрытие формы.

Для восстановления формы необходим код:

ShowWindow(Application.Handle, SW_RESTORE);

Application.Restore;

Для реализации TrayIcon был использован компонент TRxTrayIcon из библиотеки RxLib ver.2.75 Данное решение имеет один недостаток – незначительное мерцание формы при ее сворачивании.

– ----------------------------------------------------------------

С уважением Пащенко Андрей Владимирович (Bibigon)

г.Архангельск, 2000. 

Заполнение формы изображением

Почитал я тут ваши 'Советы ……' и решил дополнить ответ по теме создание фона на форме раздела классы\tform

Чтобы заполнить вашу форму повторяющимся изображением нужно

1. Разместить на форме image

2. Присвоить его свойству visible значение false

Поделиться с друзьями: