Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Название:Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 краткое содержание
…начиная с 1001. Смотрите другие файлы…
Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
10. Выберите в меню Delphi IDE View | Project Source
11. Вставьте между ключевым словом begin и перед любым Application.Create() следующий код:
SplashScreen := TSplashScreen.Create(Application);
SplashScreen.Show;
SplashScreen.Refresh;
12. Измените поведение главной формы приложения при наступлении события OnShow. Добавьте следующий код:
SplashScreen.Free;
Комментарий: Реализация заставки с линейкой прогресса ничуть не сложнее, чем приведенный выше пример. Необходимо всего лишь вовремя выводить ее на экран: перед тем, как процесс начнется, и убирать только после того, как он закончится. Различие заключается в осуществлении связи (реализации механизма) между процессом и заставкой для правильного обновления линейки прогресса.
13. Запустите приложение. В приведенном выше примере, если скорость вашего компьютера значительна, то заставки вы можете и не увидеть. Следующий код демонстрирует технику создания заставки для вашего приложения — только будьте осмотрительней при его использовании.
Добавьте следующий код на этапе #11:
forx:= 1 to10000000 do begin
x:=x;
end;
{PROJECT1.DPR}
programProject1;
usesForms, Unit1 in'UNIT1.PAS' {Form1}, Unit2 in'UNIT2.PAS' {SplashScreen};
{$R *.RES}
varx: longint;
begin
SplashScreen:= TSplashScreen.Create(Application);
SplashScreen.Show;SplashScreen.Refresh;
forx:= 1 to10000000 do begin
x:=x;
x:=x;
end;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
{UNIT1.PAS}
unitUnit1;
interface
usesSysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, unit2;
typeTForm1 = class(TForm)
procedureFormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
varForm1: TForm1;
implementation
{$R *.DFM}
procedureTForm1.FormShow(Sender: TObject);
begin
splashscreen.free;
end;
end.
{UNIT2.PAS}
unitUnit2;
interface
usesSysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
typeTSplashScreen = class(TForm)
Panel1: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Shape1: TShape;
Shape2: TShape;
Shape3: TShape;
private
{ Private declarations }
public
{ Public declarations }
end;
varSplashScreen: TSplashScreen;
implementation
{$R *.DFM}
end.
Как правильно закрыть и удалить форму? Почему моя MDI Child форма при закрывании просто минимизируется?
Своим опытом делится Nomadic:
A: Обрабатывайте событие OnClose для формы и выставляйте в нем параметр Action в caFree. Дело в том, что его значение по умолчанию для MDI Child форм caMinimize. Кстати, если сделать Action := caNone, то форму нельзя будет закрыть.
Как установить максимальный и минимальный размер формы
Если вы хотите контролировать изменение пользователем размера вашей формы, воспользуйтесь установкой значения MinMax. (Если для этих целей вы используете метод resize, это работает, но выглядит не так хорошо.)
Примечание: Чтобы совсем запретить пользователю изменять размеры формы, задайте одинаковые значения для ее минимального и максимального значения. Вот пример того, как можно объявить и использовать в вашем приложении обработку системного сообщения wm_GetMinMaxInfo:
unitMinMax;
interface
usesSysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs;
typeTForm1 = class(TForm)
private
{ Private declarations }
procedureWMGetMinMaxInfo( varMSG: Tmessage); messageWM_GetMinMaxInfo;
public
{ Public declarations }
end;
varForm1: TForm1;
implementation
{$R *.DFM}
procedureTForm1.WMGetMinMaxInfo( varMSG: Tmessage);
Begin
inherited;
withPMinMaxInfo(MSG.lparam)^ do begin
withptMinTrackSize do begin
X := 300;
Y := 150;
end;
withptMaxTrackSize do begin
X := 350;
Y := 250;
end;
end;
end;
end.
TIniFile
Проблемы ini-файла
Кто-нибудь имел какие-нибудь проблемы при использовании модуля TIniFile? Я думаю здесь какая-то детская проблема с кэшированием!!!
Вот что я делал:
(* c:\test.ini уже существует *)
myIni := TIniFile.Create('c:\test.ini');
WithmyIni do begin
…. (добавляем новую секцию в test.ini
end;
myIni.Free;
RenameFile('c:\test.ini', 'c:\test1.ini');
Что я получил:
1. test1.ini НЕ ИМЕЕТ добавленной мною секции;
2. всякий раз при создании или открытии нового файла в том же самом каталоге с помощью File Manager, 'c:\test.ini' появляется вновь, и у него СУЩЕСТВУЕТ секция, которую я добавлял.
Я решил эту проблему добавлением следующей строки перед IniFile.Free:
WritePrivateProfileString( nil, nil, nil, PChar(IniFileName));
Для получения дополнительной информации обратитесь к электронной справке к разделу 'WritePrivateProfileString'.
– Tony Chang
Как создать Ini-файл в директории программы?
По умолчанию ini-файл создается в Windows-директории (например: TIniFile.Create('MFile.ini')), что приводит к «захламлению» оной. Более (эко-)логично (за исключением случаев, когда программа делается для CD-ROM) если ini-файл создается в той же директории что и главная программа. Вот пример чтения и записи ini файла из директории программы:
functionReadIni(ASection, AString : String) : String;
var
sIniFile: TIniFile;
sPath : String[60];
begin
GetDir(0,sPath);
sIniFile := TIniFile.Create(sPath + '\Name.INI');
Result := sIniFile.ReadString(ASection, AString, S);
sIniFile.Free;
end;
procedureWriteIni(ASection, AString, AValue: String);
var
sIniFile: TIniFile;
sPath : String[60];
begin
GetDir(0,sPath);
sIniFile := TIniFile.Create(sPath + '\Name.INI');
sIniFile.WriteString(ASection, AString, AValue);
sIniFile.Free;
end;
TRegistry
Дополненный TRegistry, умеет работать с значениями типа REG_MULTI_SZ (Windows NT, Windows 2000)
Кондратюк Виталийсоветует:
unitReg;
{$R-,T-,H+,X+}
interface
usesRegistry, Classes, Windows, Consts, SysUtils;
typeTReg = class(TRegistry)
public
Интервал:
Закладка: