Делу время, потехе час.
Наш режим дня
Бросая в воду камешки, смотри на круги, ими образуемые; иначе такое бросание будет пустою забавою.
Козьма Прутков
Подыстощив свою нервную систему серьёзными мероприятиями, мы должны подумать и о нравственном здоровье нации в своём лице, то есть развлечься невинными пустяками, - впрочем, тоже не без пользы. Давайте напишем малюсенькие программульки, которые смогут послужить основой для больших приколов (за более вредными советами обращайтесь к их папе - писателю Григорию Остеру).
Теперь уж мало кто об этом помнит, но в стародавние времена в школах время от времени проводили интеллектуальные игрища, которые назывались ЧВС, то есть Час Весёлых Состязаний. Это была некая школьная интерпретация популярного тогда КВН (его первого пришествия, а не того, который мы имеем удовольствие наблюдать сейчас). Присутствовали там, конечно, и шутки-прибаутки, но ученики не чурались и более серьёзных заданий из школьной программы.
До свиданья, форма дорогая!
Откройте новый проект и сохраните его в папке. Поместите на форму мет¬ку и установите для неё размер шрифта покрупнее
Чтобы форма всегда была видна, но не мешала обзору, задайте ей перцу:
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;
protected
Procedure WMGetSysCommand(var Message : TMessage); message WM SYSCOMMAND;
//ОБРАБОТКА НАЖАТИЯ КНОПОК НА ЗАГОЛОВКЕ ФОРМЫ 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;