Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2012, 18:27   #1
Zeronim
Пользователь
 
Регистрация: 27.06.2010
Сообщений: 11
По умолчанию Добавить элементы управления в OpenDialog

Здраствуйте, возникла такая проблема. Имеется главная форма, а на ней компоненты медиаплеер и трекбар. Также имеется диалог выбора файла Opendialog. Как можно медиаплеер и трекбар запихнуть в окно OpenDialog'a? А также можно ли как нибудь отслеживать какой файл выделен, до выполнения opendialog.execute? Поделитесь мыслями на этот счет, если есть.

Последний раз редактировалось Zeronim; 10.07.2012 в 18:28. Причина: Синтаксические ошибки
Zeronim вне форума Ответить с цитированием
Старый 10.07.2012, 21:31   #2
volvo877
Форумчанин
 
Аватар для volvo877
 
Регистрация: 01.06.2009
Сообщений: 108
По умолчанию

Идея вот такая (сделал Interceptor class, чтоб не писать свой компонент, но можно написать и отдельным компонентом, естественно):

Код:
type
   // Перед описанием класса формы
   TOpenDialog = class(Dialogs.TOpenDialog)
   private
      ParentHandle : THandle;
      FMainPanel : TPanel;
      FMediaPlayer : TMediaPlayer;

   protected
      procedure DoClose; override;
      procedure DoShow; override;
      procedure DoSelectionChange; override;

   public
      constructor Create(AOwner : TComponent); override;
      destructor Destroy; override;
      function Execute : Boolean; override;
   end;

   TForm1 = class(TForm)
   // ...


// Реализация:

constructor TOpenDialog.Create(AOwner : TComponent);
begin
   inherited Create(AOwner);
   ParentHandle := 0;

   Options := [ofFileMustExist, ofEnableSizing, ofHideReadOnly, ofPathMustExist];
   FMainPanel := TPanel.Create(Self);
   with FMainPanel do
   begin
      Name := 'MainPanel';
      Caption := '';
      SetBounds(204, 5, 500, 200);
      BevelOuter  := bvNone;
      BorderWidth := 1;
   end;

   // Теперь на эту панель добавляешь все что нужно:
   FMediaPlayer := TMediaPlayer.Create(Self);
   with FMediaPlayer do
   begin
      Align := alTop;
      Parent := FMainPanel;
   end;
End;

destructor TOpenDialog.Destroy;
begin
   inherited;
end;

procedure TOpenDialog.DoClose;
begin
   inherited;
end;

function IsDirectory(const DirName: string): Boolean;
var
  Attr : Integer;
begin
  Attr := FileGetAttr(DirName);
  Result := (Attr <> -1) and (faDirectory = (Attr and faDirectory));
end;

procedure TOpenDialog.DoSelectionChange;
begin
   if not IsDirectory(Self.FileName) then
   begin
      FMediaPlayer.Close;
      FMediaPlayer.FileName := Self.FileName;
      FMediaPlayer.Open;
   end;
   inherited;
end;

procedure TOpenDialog.DoShow;
var
   DialogHeight, DialogWidth : Integer;
   PreviewRect, StaticRect : TRect;
Begin
   ParentHandle := GetParent(Handle);
   GetClientRect(Handle, PreviewRect);
   StaticRect := GetStaticRect;

   DialogWidth := StaticRect.Left + (StaticRect.Right - StaticRect.Left) + 500;
   DialogHeight := StaticRect.Top + StaticRect.Bottom + 30;
   MoveWindow(ParentHandle,(Screen.Width - DialogWidth) div 2,
                           (Screen.Height - DialogHeight) div 2,
                           DialogWidth, DialogHeight, True);
   PreviewRect.Left := StaticRect.Left + (StaticRect.Right - StaticRect.Left);
   Inc(PreviewRect.Top, 4);
   PreviewRect.Right := PreviewRect.Left + 500;

   FMainPanel.BoundsRect := PreviewRect;
   FMainPanel.ParentWindow := Handle;
   inherited;
end;

function TOpenDialog.Execute : Boolean;
begin
   if NewStyleControls and not (ofOldStyleDialog in Options) then
      Template :='DLGTEMPLATE'
   else
      Template :=nil;

   Result := inherited Execute;
end;
В результате получается вот так:
Изображения
Тип файла: jpg open_dialog.jpg (15.7 Кб, 178 просмотров)
volvo877 вне форума Ответить с цитированием
Старый 11.07.2012, 01:06   #3
Zeronim
Пользователь
 
Регистрация: 27.06.2010
Сообщений: 11
По умолчанию

volvo877, спасибо! правда не совсем понятно как оно работает, но буду разбираться)
Zeronim вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Элементы управления Geradot ASP.NET 0 07.04.2012 21:10
Элементы управления 3_3Mishanya3_3 C# (си шарп) 2 25.05.2011 19:23
Элементы управления Lawliet32 Win Api 5 25.04.2010 21:12
Элементы управления ольгаг Microsoft Office Excel 0 12.03.2010 09:45
Элементы управления Rom1k06 Microsoft Office Excel 7 28.08.2008 09:47