喫茶XRAYトップページ

[スレッド全体
]

[4745] [お気に入りに追加]のダイアログ表示返信 削除
2011/5/13 (金) 16:50:16 Mr.XRAY
[お気に入りに追加]のダイアログ表示のコードを書いてみました.
shdocvw.dll内のDoAddToFavDlgという関数で表示(モーダル表示)できるんだそうです.

VCLで未定義のWin32 API関数の使用
http://mrxray.on.coocan.jp/Delphi/Others/Usage_Win32API.htm#01

で,関数そのものを使うのは簡単にできるんですが.
やってみちら,文字が1文字分しか処理してくれんない.
この関数,Ansi版だったんですね.で,AnsiCharに直して動作しました.

う〜む.何か,つまらない.
サンプルプログラム集掲載はボツですね.
動作確認は,Windows 7 U64 + Delphi 2010(UP5)です.

unit Unit1;

interface

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

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

  //PITEMIDLISTの使用にはusesにShlObjが必要
  //文字列はAnsiでないと正常動作しない
  function DoAddToFavDlg(
             hWindow     : HWND;
             wpszInitDir : PAnsiCHAR;
             cchInitDir  : UINT;
             wspzFile    : PAnsiCHAR;
             cchInitFDir : UINT;
             pidlBrowse  : PITEMIDLIST
             ): BOOL; stdcall; external 'shdocvw.dll';

var
  Form1: TForm1;

implementation

uses ActiveX;

{$R *.dfm}

//=============================================================================
//  お気に入りダイアログの表示(タスクバーにアイコン表示なし)
//
//  使用する関数のMSDNの記事より
//  http://msdn.microsoft.com/en-us/library/aa753580%28VS.85%29.aspx
//
//  BOOL DoAddToFavDlg(
//    HWND hwnd,
//    CHAR *pszInitDir,
//    UINT cchInitDir,
//    CHAR *pszFile,
//    UINT cchInitDir,
//    LPITEMIDLIST pidlBrowse
//  );
//
//  PItemIDListの使用にはusesにActiveXが必要
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
  wpszInitDir : array[0..MAX_PATH - 1] of AnsiChar;
  wpszFile    : array[0..MAX_PATH - 1] of AnsiChar;
  pidlBrowse  : PItemIDList;
begin
  StrPCopy(wpszFile, '素敵なサイト');
  //[お気に入り]フォルダの項目識別子を取得
  SHGetSpecialFolderLocation(Handle,
                             CSIDL_FAVORITES,
                             pidlBrowse);

  //DoAddToFavDlgはAnsi版であることに注意
  if DoAddToFavDlg(Handle,
                  wpszInitDir,  //終了後に入力した名前のフルパス名が戻ってくる
                  MAX_PATH,
                  wpszFile,     //終了後に入力した名前部分のみが戻ってくる
                  MAX_PATH,
                  pidlBrowse)   //作成先のフォルダを項目識別子で指定
                  then begin;


    //ここに実際の[お気に入り]への登録コードを書く
  end;

  //項目識別子の解放
  CoTaskMemFree(pidlBrowse);
end;

end.



[4756] Re:[お気に入りに追加]のダイアログ表示返信 削除
2011/5/15 (日) 12:45:17 Mr.XRAY
> う〜む.何か,つまらない.
> サンプルプログラム集掲載はボツですね.


と思ったのですが,追加しておきました.

[03__[お気に入りの追加]ダイアログをモーダル表示]
http://mrxray.on.coocan.jp/Delphi/plSamples/942_TEmbeddedWB.htm#03

[4763] ネット検索のノウハウ返信 削除
2011/5/17 (火) 10:42:46 Mr.XRAY
ネットでDelphiの参考となるコードを検索することが多いと思います.
手持ちの参考書と同時に,検索も1つノウハウだと思います.

この[03_[お気に入りの追加]ダイアログをモーダル表示]のリスト3
http://mrxray.on.coocan.jp/Delphi/plSamples/942_TEmbeddedWB.htm#list3
に,
procedure CreateIntShotCut(aFileName, aURL: PChar);
という関数のコードがあります.
これは,他のサイトのコードを借用しています.
これをどうやって見つけ出したかです.

まず,お気に入りですから,URLのショートカットです.
これをMicrosoftのキーワードを含めて検索します.
あるいは,SDKをインストールしていたら,この中を検索します.
参考コードがある場合があります.
IUniformResourceLocator関数を使用したサンプルがあります.
コードはC++です.
もしかしたらDelphiのコードにしたものがネット上にあるかも知れない.
と予測して検索する.という手順で見つけました.
見つけたら,このインターフェイスが,標準のDelphiのVCL内にあるか
確認します.また,このサンプルは,TEmbeddedWBコンポですから,
このソースも確認します.
なければ実装が必要ですから,今回はTEmbeddedWBのソースにありましたから,
インターフェイスの実装は必要ありませんでした.
このインターフェイスまたは定数が定義してあるpasファイルをusesに追加
します.


一般のDelhiの参考コードは,まず,Delphiのキーワードも含めて検索します.
当サイトのように,各ページにDelphiという語句があるページは見つけやすく
なります.逆に,当サイトの記事は,Delphiという語句がないと,ほとんど
検索結果に入ってきません.

なければ,Delphiの語句を抜いて検索します.
その際,例えばボタン関係の場合,Buttonではなく,TButtonのように,先頭に
Tを付けての検索もします.
結構違いがあります.

今はブログが全盛の時代で,検索すると,同じブログの同じ記事が検索リストに
出てきますが,当サイトの記事はそういうことはありません.
これは,基本的にどうしようもありません.

その他にもいろいろノウハウがあるかも知れません.
ちなみに,2チャンネルの記事もリストされますが,基本的に見ません.
貴重なサンプルがあるかも知れませんが,体質的に合いませんので(笑)


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