Рейтинговые книги
Читем онлайн Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 91 92 93 94 95 96 97 98 99 ... 123

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

3. В обработчике события формы OnCreate разместить следующий код : 

form1.brush.bitmap:=image1.picture.bitmap;

Хочу заметить , что при использовании этого св-ва св-ва color & style не действительны! А самое главное при изменении размеров формы ваше повторяюшееся изображение будет автоматически перересовываться и вам не понадобится обрабатывать событие paint & resize.

С уважением, Dmitry Morsin

Создание консольных приложений

Создание консольных приложений. (Об этом в советах немножко есть, но очень не конкретно)

Как уже отмечалось в совете [000092] (да и в Хелпе) в консольных приложениях в Delphi можно использовать в принципе весь дельфийский арсенал. Правда и работать они будут лишь под Windows. (Кстати этот способ можно применить для модернизации программ на Паскале под Windows).

Этот код был использован для вывода результатов работы программы проверки (неважно чего) чтобы не приходилось смотреть файл с результатами. Главная проблема была в том, что консоль (если запуск был из Windows) оставалась висеть позади формы до её закрытия. Вреда конечно никакого, но не приятно. Если же запуск из Нортона или т.п., то всё идёт нормально

Program MyProgram;

{$APPTYPE CONSOLE}

uses

 Windows, Forms, Dialogs, SysUtils, StdCtrls, Controls; // и (или) т.п.

 …

var

 …

 SH,SW: integer;

 MainForm: TForm; // если нужна форма

 Memo: TMemo;

 // могут быть также любые другие визуальные компоненты

 …

 // здесь могут быть процедуры и функции, т.е всё как в обычном Паскале

Begin

 … // здесь какой-то код

 { а здесь, перед выводом формы, есть два пути:}

 { так}

 FreeConsole; // Отцепиться от консоли, т.е она просто исчезнет (в случае запуска из Windows) и останется только форма

 { или так}

 //  Handle:= GetForegroundWindow; // Получить Handle консоли

 //  ShowWindow(Handle, SW_HIDE);  // Спрятать консоль

 // а в конце, перед завершением

 //  ShowWindow(Handle, SW_SHOW); // Показать консоль

 { для помещения формы в центр экрана}

 SH:= Screen.Height;

 SW:= Screen.Width;

 MainForm:= TForm.Create(nil);

 with MainForm do try

  BorderStyle:= bsSizeable;

  Height:= 390;

  Width:= 390;

  Left:= (SW - Width) div 2;

  Top:= (SH - Height) div 2;

  Caption:= 'Моя программа';

  // здесь могут быть и другие компоненты

  Memo:= TMemo.Create(MainForm);

  with Memo do begin

   Parent:= MainForm;

   Align:= alClient;

   BorderStyle:= bsNone;

   Font.Name:= 'Courier New Cyr';

   Font.Size:= 9;

   ScrollBars:= ssVertical;

   Lines.LoadFromFile('MyProgram.txt');

  end;

  ShowModal;

 finally

  Free;

 end;

 { или можно вывести сообщение, например в случае неудачи (или наоборот)}

 with CreateMessageDialog('Текст сообщения', mtInformation, [mbOk]) do try

  Caption := 'Заголовок';

  ShowModal;

 finally

  Free;

 end;

 // это для второго пути, иначе она так и останется висеть свёрнутой

 // ShowWindow(Handle, SW_SHOW); // Показать консоль

End.

С уважением, Михаил Чумак. 

События приложения

Delphi 1 

…проблема в том, что когда приложение Delphi минимизировано, десктиптор окна в этом случае совершенно другой. Объект Application в действительности дескриптор собственного окна! Application.Handle является окном, которое активно при минимизированном приложении. Когда вы минимизируете ваше приложение, все формы просто прячутся (hidden). Обратите внимание на методы Application Minimize и Restore. Также обратите внимание, что у TApplication есть два недокументированных события, OnMinimize и OnRestore. Они принадлежат приложению, поскольку в TForm нет обработчиков событий, возникающих при минимизации главного окна. Немного странно. Я думаю так сделано для поддержки SDI-приложений. 

Нужны ли мне формы в сервере приложений?

Nomadic отвечает:

Да.

Необязательно, чтобы они были видимы, но должна присутствовать хотя бы одна. Чтобы сделать главную форму невидимой, установите

Application.ShowMainForm := False

в файле проекта.

Пример:

begin

 Application.ShowMainForm := False;

 Application.Initialize;

 Application.CreateForm(TForm1, Form1);

 Application.Run;

end.

Создание формы на основе строки

Обзор

В данном документе рассказывается о том, как в Delрhi можно создать экземпляр формы на основе строки, содержащей имя типа. Код примера прилагается.

На кого расчитан данный документ?

На любого программиста, имеющего начальные знания для работы с Delphi. Имеет отношение к любой версии Delphi.

Создание формы на основе строки

Чтобы можно было создать экземпляр формы на основе строки, содержащей имя типа, вы должны в первую очередь зарегистрировать данный тип в Delphi. Это выполняется функцией "RegisterClass". RegisterClass описан следующим образом:

procedure RegisterClass(AClass: TPersistentClass);

AClass – класс TPersistent. Другими словами, класс, который вы хотите регистрировать, в какой-то точке должен наследоваться от TPersistent. Поскольку все элементы управления Delphi, включая формы, соблюдают это требование, то проблем быть не должно. Но такой способ не пройдет, если регистрируемые классы наследуются непосредственно от TObject.

После регистрации класса, вы можете найти указатель на тип, передавая строку в FindClass. Функция возвратит ссылку на класс, которую можно использовать для создания формы. Небольшой поясняющий пример:

procedure TForm1.Button2Click(Sender: TObject);

var

 b : TForm;

 f : TFormClass;

begin

 f := TFormClass(findClass('Tform2'));

 b := f.create(self);

 b.show;

end;

Данный код создаст тип TForm2, который мы зарегистрировали с помощью RegisterClass.

Демонстрационный проект

Создайте новый проект, затем добавьте 4 формы так, чтобы в общей сложности получилось 5. В реальном проекте вы можете заполнить их необходимыми элементами управления, для данного же примера это не важно.

1 ... 91 92 93 94 95 96 97 98 99 ... 123
На этой странице вы можете бесплатно читать книгу Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров бесплатно.

Оставить комментарий