Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Урок 5 - Стандартные диалоги

Ведущий раздела KOL и MCK: Анатолий aka XVeL
Автор: Борис Моренко
WEB-сайт: http://kol.mastak.ru

Полную версию библиотеки KOL и MCK можно скачать здесь.

В основе диалогов лежат совсем другие объекты, чем PControl (для каждого свой). KOL предлагает для работы 3 вида диалога

Обьект Диалог
POpenSaveDialog открыть или сохранить файл
POpenDirDialog выбрать директорию
PColorDialog выбрать цвет.

Их конструкторы:

NewOpenSaveDialog( const Title, StrtDir: String; Options: TOpenSaveOptions ): POpenSaveDialog;

Title - заголовок диалога
StrDir - начальная директория для работы

В Options может быть следующее:

  • OSCreatePrompt - При выборе имени не существующего файла панель запросит, нужно ли создать файл.
  • OSExtensionDiffent -
  • OSFileMustExist - Предупреждать при вводе имени не существующего файла.
  • OSHideReadonly - Скрыть кнопку "Только чтение"
  • OSNoChangedir - Поиск файлов начинать в первоначально заданном каталоге
  • OSNoReferenceLinks -
  • OSAllowMultiSelect -
  • OSNoNetworkButton - Скрыть и отключить кнопку Network
  • OSNoReadonlyReturn - Запретить выбор файла с атрибутом "только чтение" и в защищенном от записи каталоге
  • OSOverwritePrompt - При сохранении файла предупреждать, если файл с указанным именем уже существует
  • OSPathMustExist -Можно вводить только существующее полное имя файла
  • OSReadonly - Включить кнопку "Только чтение"

Для диалога открытия файла (Open File), надо свойство OpenDialog установить в true, и соответственно для диалога сохранения файла OpenDialog := false.
В остальном, этот диалог идентичен своему VCL аналогу.


NewOpenDirDialog( const Title: String; Options: TOpenDirOptions ): POpenDirDialog;

Title - заголовок диалога

В Options может быть следующее:

  • odBrowseForComputer -
  • odBrowseForPrinter -
  • odDontGoBelowDomain -
  • odOnlyFileSystemAncestors -
  • odOnlySystemDirs -
  • odStatusText

Выбранный путь можно узнать через свойство Path


NewColorDialog( FullOpen: TColorCustomOption ): PColorDialog;

В FullOpen следующее:

  • ccoFullOpen - кроме базовой палитры показывается и дополнительная
  • ccoShortOpen - сначала показывается только базовая палитра но доступна и дополнительная
  • ccoPreventFullOpen - доступна только базовая палитра цветов

Пример: небольшой и мало функциональный, но текстовый редактор ;-)

program Primer;

uses
  Windows,
  messages,
  KOL;

{$R *.RES}
var
  form,
  PanTools,
  REdit,
  butOpen,
  butSave : PControl;

procedure clikButOpenSave(Dummy : Pointer; Sender : PControl);
var
  Dialog : POpenSaveDialog;
  title : string;
begin
  if sender = butOpen then  //определяем что за кнопка 
  begin
    Dialog.title := 'Открыть';
    Dialog.OpenDialog := TRUE;
    REdit.Clear;
  end
  else
  begin
    Dialog.title := 'Сохранить как...';
    Dialog.OpenDialog := FALSE;
  end;
  if Dialog.Execute then
  if sender = butOpen then
    REdit.RE_LoadFromFile(Dialog.Filename, reText, false)
  else
    REdit.RE_SaveToFile(Dialog.Filename, reText,false);
    form.StatusText[0] := PChar(Dialog.Filename);
end;

begin
  form := NewForm(Applet, 'Редактор');
  Dialog := NewOpenSaveDialog(title, '',[]) ;
  panTools := NewPanel(form, esRaised).SetAlign(caTop);
  panTools.Height := 35;
  REdit := NewRichEdit(form, []).SetAlign(caClient);
  butOpen := NewButton(panTools, 'Open').SetSize(50, 25);
  butSave := NewButton(panTools, 'Save as').SetSize(60, 25).PlaceRight;
  butOpen.OnClick := TOnEvent(MakeMethod(nil, @clikButOpenSave));
  butSave.OnClick := TOnEvent(MakeMethod(nil, @clikButOpenSave));
  run( form );
end.
На экране результат будет примерно следующий:

      

Результат примера

Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay