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

ЖАНРЫ

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

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

Шрифт:

Диалоги 

Использование InputBox и InputQuery

Тема: Использование InputBox, InputQuery и ShowMessage

Данная функция демонстрирует 3 очень мощных и полезных процедуры, интегрированных в Delphi.

Диалоговые окна InputBox и InputQuery позволяют пользователю вводить данные.

Функция InputBox используется в том случае, когда не имеет значения что пользователь выбирает для закрытия диалогового окна – кнопку OK или кнопку Cancel (или нажатие клавиши Esc). Если вам необходимо знать какую кнопку нажал пользователь (OK

или Cancel (или нажал клавишу Esc)), используйте функцию InputQuery.

ShowMessage – другой простой путь отображения сообщения для пользователя. 

procedure TForm1.Button1Click(Sender: TObject);

var

 s, s1: string;

 b: boolean;

begin

 s := Trim(InputBox('Новый пароль', 'Пароль', 'masterkey'));

 b := s <> '';

 s1 := s;

 if b then b := InputQuery('Повторите пароль', 'Пароль', s1);

 if not b or (s1 <> s) then ShowMessage('Пароль неверен');

end;
 

Текст на кнопках MessageDlg

Как можно сменить текст на кнопках диалогового окна MessageDlg? Английский язык для текста кнопок пользователь хочет заменить на родной.

Текст кнопок извлекается из списка строк, расположенных в файле …\DELPHI\SOURCE\VCL\CONSTS.PAS. Отредактируйте его, после чего пересоберите VCL.

– Steve Schafer

Дополнение

VS дополняет:

Но можно ничего не менять. Вместо MessageDlg использовать MessageBox – функция WINDOWS. И, если ваш WINDOWS русифицирован, то надписи на кнопках в диалоговых окнах будут на русском языке. 

Изменения в TOpenDialog

Delphi 1 

Почитайте про Open Dialog Box (диалоговое окно открытия файла) в файле помощи Windows API. Ознакомьтесь в статье с описанием аргумента lpTemplateName. Главное, вы можете создать новое диалоговое окно для Open Dialog Box и заменить стандартный диалог вашим собственным. 

Как вывести диалог выбора каталога?

Одной строкой 

Nomadic советует:

A: (DS): SelectDirectory, rxLib: TDirectoryEdit. 

Сообщения 

Как послать самостийное сообщение всем главным окнам в Windows?

Nomadic советует:

Пример:

Var FM_FINDPHOTO: Integer;

// Для того, чтобы использовать hwnd_Broadcast нужно сперва зарегистрировать уникальное

// сообщение.

Initialization

 FM_FindPhoto:=RegisterWindowMessage('MyMessageToAll');

// Чтобы поймать это сообщение
в другом приложении (приёмнике) нужно перекрыть DefaultHandler

procedure TForm1.DefaultHandler(var Message);

begin

 with TMessage(Message) do begin

if Msg = Fm_FindPhoto then MyHandler(WPARAM,LPARAM)

else Inherited DefaultHandler(Message);

 end;

end;

// А теперь можно в приложении-передатчике

SendMessage(HWND_BROADCAST, FM_FINDPHOTO, 0, 0);

Кстати, для посылки сообщения дочерним контролам некоего контрола можно использовать метод Broadcast. 

Как избавиться от торможения модальных окон?

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

Hемодальные диалоговые окна, находящиеся на экране во время выполнения длительных операций,могут реагировать на действия пользователя очень медленно. Это ограничение Windows, и обойти его можно так:

while Flag do begin

 PerformOperation;

 Application.ProcessMessages;

 Flag:=ContinueOperation;

end;
 

Моя программа довольно долго делает какую-то полезную работу, типа чтения дерева каталогов или обильных вычислений, и в этот момент почти не работают остальные программы. Как разрешить им это делать?

Nomadic отвечает:

A: Application.ProcessMessages.

(AA): Если вы хотите отдавать timeslices в нитях, пользуйтесь Sleep(0); это отдаст остаток слайса системе.

(Win16) Если вы хотите разрешить отработку сообщений другим программам, но не вашей, то лучше пользоваться Yield. 

Файловая система 

Метка диска под Win32

По моему глубокому убеждению для получения метки диска в среде Win95 необходимо использовать FindFile. Но это не работает, так?

Правильно, FindFile в Win32 больше не возвращает имя диска, поскольку в не-FAT файловых системах (например, в NTFS) это работает иначе, чем в FAT. Вместо этого используйте функцию API GetVolumeInformation.

– Peter Below

Восстанавление длинных имен файлов по известным коротким

boris советует:

//---------------------------------------------------------------------

// Восстанавливает длинные имена файлов по известным коротким (8.3)

// В качестве аргумента принимает полный или неполный (в т.ч. относительный)

// путь к файлу, например 'C:\WINDOWS\РАБОЧИ~1\ИТАКДА~1.LNK' или

// '..\..\COMMON~1\BORLAN~1\BDE\BDEREA~1.TXT'. Понимает сетевые имена.

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