Фенечки, или "Остероиды" в Delphi

Делу время, потехе час.

Наш режим дня

 

Бросая в воду камешки, смотри на круги, ими образуемые; иначе такое бросание будет пустою забавою.

Козьма Прутков

Подыстощив свою нервную систему серьёзными мероприятиями, мы должны подумать и о нравственном здоровье нации в своём лице, то есть развлечься невинными пустяками, - впрочем, тоже не без пользы. Давайте напишем малюсенькие программульки, которые смогут послужить осно­вой для больших приколов (за более вредными советами обращайтесь к их папе - писателю Григорию Остеру). 

 

Теперь уж мало кто об этом помнит, но в стародавние времена в школах время от времени проводили интеллектуальные игрища, которые назывались ЧВС, то есть Час Весёлых Состязаний. Это была некая школьная интерпретация популярного тогда КВН (его первого пришествия, а не того, который мы имеем удовольствие наблюдать сейчас). Присутствовали там, конечно, и шутки-прибаутки, но уче­ники не чурались и более серьёзных заданий из школьной про­граммы.

 

До свиданья, форма дорогая!

Откройте новый проект и сохраните его в папке. Поместите на форму мет¬ку и установите для неё размер шрифта покрупнее

Delphi

Чтобы форма всегда была видна, но не мешала обзору, задайте ей перцу:

AutoSize= TrueBorderStyle= bsNone

Добавьте к описанию типа формы две выделенные строки:


public
{ Public declarations }
protected
Procedure LastFocus(var Mess : TMessage) ; sage WM ACTIVATE;
Теперь мы сможем обрабатывать сообщение WindowsWM_ACTIVATE, ко­торое окно получает при потере и получении фокуса ввода (не актив­ная/активная форма). Если значение флага fActiveв сообщении WM_ACTIVATEравно WA_INACTIVE, то форма становится неактивной (те­ряет фокус), в противном случае (флаг fActiveравен WA_ACTIVEили WA_CLICKACTIVE) - активной (получает фокус). Мы художественно офор­мим эти события: в метку label1 будем выводить соответствующие надпи­си:
//ФОРМА ПОЛУЧАЕТ ИЛИ ТЕРЯЕТ ФОКУС
Procedure TForm1.LastFocus(var Mess : TMessage) ;
var
s: string; cl: TColor;
Begin
IF Mess.wParam = WA_INACTIVE
Then Begin cl:= clBlue; s:= 'Чао!' end Else Begin cl:= clRed; s:= 'Привет!'end;
label1.Color:= cl; label1.Caption:= s;
Inherited;
End;
Естественно, вы можете «побезобразничать» и по-своему, как говорится, в меру своей испорченности.
Поскольку у нашей формы нет «ни окон, ни дверей», то будем закрывать её двойным щелчком на метке (почему не по форме?):
//ЗАКРЫТЬ ФОРМУ
procedure TForm1.Label1DblClick(Sender: TObject);
begin
close
end;

Запустите программу - она порадует вас словом «Привет!». Ради этого стоило постараться! Но только вы щёлкните мышкой на каком-нибудь другом окне, как наша форма - тоже вежливо! - попрощается с нами
Delphi
Что называется, культуру - в массы! Ну, разве не прелесть, эта мулечка? То есть фенечка... А ведь есть и другие!
О кнопках системных замолвите слово...
Есть и другая возможность заставить форму «огрызнуться» на действия неискушённого пользователя. Аналогично первому случаю допишите пару строк:

protected
Procedure WMGetSysCommand(var Message : TMessage); message WM SYSCOMMAND;
В этот раз мы будем обрабатывать сообщение Windows WM_SYSCOMMAND, которое ОС посылает окну при различных манипуляциях с ним. По значе¬нию параметра uCmdType этого сообщения мы можем судить о том, какая из системных кнопок была нажата:

//ОБРАБОТКА НАЖАТИЯ КНОПОК НА ЗАГОЛОВКЕ ФОРМЫ Procedure TForm1.WMGetSysCommand(var Message : TMessage) ;
var s: string;
Begin s: = ’’;
case Message.wParam of
SC_CLOSE: s:= ’Не закрывай меня!’;
SC_MINIMIZE: s:= ’Не сворачивай меня!’; //== SC_ICON SC_MAXIMIZE: s:= ’Не разворачивай меня!’; //== SC_ZOOM end;
if s<> ’’ Then showmessage(s)
Else Inherited;
End; 
А уж как вы сумеете прокомментировать действия пользователя, зависит только от вашего остроумия!
Закрыть форму можно, просто щёлкнув на ней:
//ЗАКРЫТЬ ФОРМУ
procedure TForm1.FormClick(Sender: TObject);
begin
close
end;
Конечно, картинка на экране будет без всяких там прикрас
Исходный код программы находится в папке FOCUS.
Delphi
dle

Помоги проекту! Расскажи друзьям об этом сайте: