喫茶XRAYトップページ

[スレッド全体
]

[7072] Re6:ファイル関連ダイアログコンポーネント返信 削除
2013/11/18 (月) 23:12:04 snail
▼ Mr.XRAYさん

コンポーネントを使わせていただきました。
最初はちゃんと表示していたのが、知らないうちにダイアログが表示
されなくなって焦りました。

原因は InitDir に私がセットした値に * が含まれていたという単純ミスでした。

やっぱりコンポーネントは、ちゃんと理解した人が書いた物を
利用させていただくのが一番ですね。しかもソース付きなのが嬉しいです。

_(._.)_

[7078] Re7:ファイル関連ダイアログコンポーネント返信 削除
2013/11/26 (火) 11:33:17 Mr.XRAY
▼ snailさん

ご利用ありがとうございます.
コードはですね.あまりほめられたものではありませんので.
あと,Windows Vista 以降の仮想フォルダ関係はサポートしていません.
必要なら,このあたりが参考になるかも知れません.

[05_SHGetKnownFolderPath 関数]
http://mrxray.on.coocan.jp/Delphi/plSamples/460_SpecialFolderPath.htm#05

[08_SHGetKnownFolderItem 関数]
http://mrxray.on.coocan.jp/Delphi/plSamples/460_SpecialFolderPath.htm#08


[7091] Re8:ファイル関連ダイアログコンポーネント返信 削除
2013/12/1 (日) 01:19:47 snail
▼ Mr.XRAYさん
> ▼ snailさん
>
> ご利用ありがとうございます.

こちらこそ、いつも使わせていただいて申し訳ありません。

> あと,Windows Vista 以降の仮想フォルダ関係はサポートしていません.
仮想フォルダはまったく不要なんですが、一つ困ったことが発生しました。
たいした問題では無いのですが、存在しないフォルダをInitDirに指定して
Executeメソッドを実行すると、ダイアログが表示されない。
という現象です。InitDirに設定するときに自分でチェックすれば
いいだけなのですが、コンポーネントで対応したい。

そこでソースを改めて探すと「plBrowseFolder.pas」が無い。?
おそらくこいつはコンポーネント登録用だろうと解釈して
「plFileDialog.pas」を確認すると

  TplBrowseFolder = class(TComponent)

がありました。このソースを直接修正すれば良いのですが、いつものように
継承して新しいコンポーネントを作成しようとしたところ

E2170 非仮想メソッドはオーバーライドできません

とあっけなく弾かれてしまいました。そういえば昔も何かのコンポーネント
で同じような壁にぶつかって退散した覚えが。

何か対処方法があれば教えて下さい。




[7092] Re9:ファイル関連ダイアログコンポーネント返信 削除
2013/12/1 (日) 07:12:05 Mr.XRAY
> E2170 非仮想メソッドはオーバーライドできません

ん ? 誰ですか,そんなコンポーネント作ったのは.
しかも,堂々とネット上で得意げに公開して.
今度会ったら,よく言っておきます.(^^;


[7094] Re10:ファイル関連ダイアログコンポーネント返信 削除
2013/12/1 (日) 21:48:45 snail
▼ Mr.XRAYさん
すんません。まじめな話

> > E2170 非仮想メソッドはオーバーライドできません

この場合、元コンポーネントを修正するしか方法は無い。
という認識でよいのでしょうか。 _(._.)_


[7095] Re11:ファイル関連ダイアログコンポーネント返信 削除
2013/12/1 (日) 22:55:13 Mr.XRAY
plFileDialog.pas の Execute に virtual 指令を追加してください.

    function Execute:Boolean;
    ↓
    function Execute:Boolean; virtual;
 
動作確認に使用したコード
動作確認環境 Windows 7 U64(SP1) + Delphi XE Pro

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, plFileDialog;

type
  TMyBrowseFolder = class(TplBrowseFolder)
  public
    function Execute: Boolean; override;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
  Compo : TMyBrowseFolder;
begin
  Compo := TMyBrowseFolder.Create(Self);
  compo.Execute;
end;

{ TMyBrowseFolder }

function TMyBrowseFolder.Execute: Boolean;
begin
  Result := inherited;
end;

end.



[7096] Re12:ファイル関連ダイアログコンポーネント返信 削除
2013/12/1 (日) 23:46:40 snail
▼ Mr.XRAYさん

> > E2170 非仮想メソッドはオーバーライドできません

この場合、元コンポーネントを修正するしか方法は無い。

と覚えます。

お手数をおかけしました。


[7097] Re13:ファイル関連ダイアログコンポーネント返信 削除
2013/12/2 (月) 00:13:21 Mr.XRAY
▼ snailさん

スミマセンです.

> この場合、元コンポーネントを修正するしか方法は無い。

単に virtual 指令を付け忘れていただけなのですが,
コンポのテストを十分していないと,ということにもなります.
お許しください.


[7098] Re14:ファイル関連ダイアログコンポーネント返信 削除
2013/12/2 (月) 08:01:25 snail
▼ Mr.XRAYさん

決して苦情を言っているわけではありません。

純粋に何か回避策は無いか?と思っただけです。

気をつかわせてしまって申し訳ありませんでした。




[7099] Re15:ファイル関連ダイアログコンポーネント返信 削除
2013/12/2 (月) 08:40:13 Mr.XRAY
▼ snailさん

> 気をつかわせてしまって申し訳ありませんでした。

いえいえ,とんでもはっぷん,あるいてじゅっぶんです.
こういうことがないと修正しません,って,
修正して UP する予定もないです.ハハハッ.
また同じ問い合わせがあったら,その都度対応しますです.ハイ.

このコンポの Execute を override して使う人はあまりいないでしょうから.

できれば,Vista 以降の仮想フォルダへの対応も一緒にと考えています.
でも,具体的な対応策が思いつかないもんでして.... (^^;


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82