Einzelnen Beitrag anzeigen

Moaddin

Registriert seit: 18. Jan 2007
Ort: Düsseldorf
4 Beiträge
 
Delphi 2005 Personal
 
#1

Optionen-Schaltfläche in TOpenDialog

  Alt 22. Jan 2007, 23:44
Hallo,
ich weiß, dass dieses Thema hier schon mehrfach behandelt wurde, doch keine Antwort hat mein Problem wirklich gelöst.
Ich möchte im Öffnen-Dialog eine Extra-Schaltfläche einbinden, um ein Fenster zu öffnen, in der ich bestimmte Dinge einstellen kann.
Dazu habe ich mich in Ableitungen von Komponenten eingearbeitet, bin bisher soweit gekommen, dass die Schalfläche zwar erscheint, ich aber jetzt nicht weit, wie ich auf ihr OnClick-Ereignis reagieren kann. Ich stelle mir vor, dass ich als Ereignis des TOpenOptionsDialog etwas wie ein OnOptionsClick-Ereignis habe, worein ich dann eintragen kann, dass dieses oder jenes Formular angezeigt werden soll. Doch komme ich irgendwie nicht recht weiter.

Bin für jeden Hinweis dankbar.

Hier noch der Code der Komponente:

Delphi-Quellcode:
unit mOpenOptions;

interface

uses
  Messages, Windows, SysUtils, Classes, Controls, StdCtrls, Graphics,
  ExtCtrls, Buttons, Dialogs, ExtDlgs, ComCtrls;

type
  TOptionsClick = procedure(Sender: TObject) of object;

  TOpenOptionsDialog = class(TOpenDialog)
  private
    FExtraPanel: TPanel;
    FOptionsClick: TOptionsClick;
    FOptionen: TButton;
    { Private-Deklarationen }
  protected
    procedure DoClose; override;
    procedure DoShow; override;
    { Protected-Deklarationen }
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    function Execute: Boolean; override;
    { Public-Deklarationen }
  published
    property OnOptionsClick: TOptionsClick read FOptionsClick write FOptionsClick;
    { Published-Deklarationen }
  end;

type
  TSaveOptionsDialog = class(TOpenOptionsDialog)
  private
    { Private-Deklarationen }
  protected
    { Protected-Deklarationen }
  public
    function Execute: Boolean; override;
    { Public-Deklarationen }
  published
    { Published-Deklarationen }
  end;

procedure Register;

implementation

{$R *.res}

uses
  Consts, Forms, CommDlg, Dlgs;

constructor TOpenOptionsDialog.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);

  FExtraPanel := TPanel.Create(Self);
  FExtraPanel.Name := 'ExtraPanel';
  FExtraPanel.Caption := '';
  FExtraPanel.BevelOuter := bvNone;
  FExtraPanel.BorderWidth := 2;
  FExtraPanel.TabOrder := 1;

  FOptionen := TButton.Create(Self);
  FOptionen.Name := 'BtOptionen';
  FOptionen.Caption := 'Optionen...';
  FOptionen.Parent := FExtraPanel;
  FOptionen.SetBounds(195, 0, 75, 24);

end;

destructor TOpenOptionsDialog.Destroy;
begin
  FOptionen.Free;
  FExtraPanel.Free;
  inherited Destroy;
end;

procedure TOpenOptionsDialog.DoClose;
begin
  inherited DoClose;
  Application.HideHint; // Hide any hint windows left behind
end;

procedure TOpenOptionsDialog.DoShow;
var SepRect, StaticRect: TRect;
begin
  StaticRect := GetStaticRect; // Set ExtraText area to bottom of static area
  SepRect.Top := StaticRect.Bottom;
  SepRect.Bottom := SepRect.Top+30;
  SepRect.Right := StaticRect.Right; //-6
  SepRect.Left := StaticRect.Left;
  FExtraPanel.ParentWindow := Handle;
  FExtraPanel.BoundsRect := SepRect;
  inherited DoShow;
end;

function TOpenOptionsDialog.Execute: Boolean;
begin
  if NewStyleControls and not (ofOldStyleDialog in Options) then
    Template := 'EXTDLGTEMPLATE'
  else
    Template := nil;
  Result := inherited Execute;
end;

function TSaveOptionsDialog.Execute: Boolean;
begin
  if NewStyleControls and not (ofOldStyleDialog in Options) then
    Template := 'EXTDLGTEMPLATE'
  else
    Template := nil;
  Result := DoExecute(@GetSaveFileName);
end;

procedure Register;
begin
  RegisterComponents('Moaddin', [TOpenOptionsDialog]);
  RegisterComponents('Moaddin', [TSaveOptionsDialog]);
end;

end.
Ich denke, es hat irgendwas mit FOptionen.OnClick zu tun, weiß aber nicht, wo ich das hinschreiben soll und/oder was zu ergänzen wäre...

Zwei weitere, weniger wichtige Probleme, die mich aber schon länger aufgehalten haben, sind folgende:
Bei Größen-Änderung des OpenDialog hätte ich gerne, dass die Optionsschaltfläche sich mit nach rechts bewegt(genau unter Öffnen und Abbrechen). Bleibe aber immer wieder daran hängen, dass es weder OnClick noch OnResize-Ereignisse des Dialoges gibt, mit denen ich dies verknüpfen könnte.
Zweitens wenn ich meine Komponente anstatt von OpenDialog von OpenPictureDialog ableite, werden meine Modifikationen überhaupt nicht angezeigt. Wirft für mich auch ein weiteres Rätsel auf.

Noch ein Hinweis: ich benutze Delphi 2005 Personal
Miniaturansicht angehängter Grafiken
topenoptionsdialog_180.png  
Einer der Info-Pros, die nur wegen dem fetten Stephan keine 1 bekommen haben óÒ
  Mit Zitat antworten Zitat