短いファイル名を長いファイル名に変換したい(COM版)。スクリーンセーバーの名前を変更する。デスクトップにあるアイコンの数と位置を知りたい。アップリケーションにサウンドリソースを埋め込んで使いたい。ファイルを削除してゴミ箱に移動させたい。シェルのデスクトップやマイコンピュータをプログラムから開きたい。エクスプローラのように、アプリケーションにブラウザページをつくりたい。メインフォーム以外のフォームをタスクバーに入れたい。フォームの最小化、最大化をアニメーションでやりたい。短いファイル名を長いファイル名に変換したい(COM版)。エクスプローラは内部的には、短い名前を使っているようです。いうことは、シェルのCOMインターフェースのメソッドが使えるということです。[Tips:233]のCOM版を考えてみましょう。EConvertError.Create('ファイルを変換できません。StrPas(Buffer);end;WideStringを使うことを覗けば、IShellFolderのParseDisplayNameメソッドとSHGetPathFromIDListを使うだけです。[Tips:233]よりすっきりしましたか。使用できるOS、バァージョンに注意して下さい。編集リンクファイルから参照先のファイル名を得るIShellLinkを使用すれば出来ます。アニメーションを実現するには、プログラムを組む必要がありますが、(別項でDELPHIでのコード例を見て下さい)既にこのようなコンポーネントが発表されています。http://www.delphianworld.com/direct.html?id=SY0042TAnimateWindowというのがそれのようです。dir');とやると、Memo1に"dir"の結果が表示されます(NT4.0では動きました)。標準出力をリダイレクトしてしまっているので、DOS窓(コンソール)には、なにも表示されません(この例では、コンソールを表示しないようにしていますが、表示しても空のコンソールが表示されるだけです)。してもコンソールにも表示したい場合は、AllocateConnsoleAPIで自前でコンソールを作成して、Memo1に書く内容を自前で書くのかなぁ?あとエラー処理等まるっきり省いていますのでご注意を。Windows95ではこの部分で制御を返してくれなくなります。したら対処法を書くつもり。ソースが挙げられているとの情報を得ました。作るスクリーンセーバー制作講座」http://www02.so-net.ne.jp/~rando/delphi/how2ss/index-f.htmlに詳しいです。よるレジストリの操作方法ひきさんのページで詳しい解説をしてくださっているので、参考にすると良いでしょう。編集システムアイコンをリフレッシュするフォルダのアイコンなど、システムで使われるアイコンを変更した後は、ちょっとしたトリックを使わないと画面に反映されません。具体的には、一旦アイコンの大きさを変更してまた元に戻すのだそうです。ひきさんのページでサンプルコードを見ることができます。編集コントロールパネルを作るコントロールパネル(*.CPL)を作るなんてさぞかし難しいように思われるかも知れませんが、案外簡単に作れてしまいます。押してやると言う手法が、ひきさんの日本Delphi振興会のページで紹介されています。[Delphi壁の穴]-[その2:システムを覗く]http://hp.vector.co.jp/authors/VA009712/take/delphi/kabesys.htm#allminimizeWindows+Mを押すと全起動APPが最小化するいうこと知っていましたか?知らなかったらこのコードは書けませんね。//Windowsキーを離すend;Byte('M')の代わりにOrd('M')を用いてもよいでしょう。この操作で最小化したAPPを元に戻すには、Windows+Shift+Mキーを押します。Keybd_eventの書き方は分りますね。Shiftキーの仮想キーコードはVK_SHIFTです。Win98やIE4以降インストールでデスクトップ統合を行ったWindowsではWindows+Dキーで『全ウィンドウの最小化』←→『元に戻す-すべて最小化』を切りかえられます。内部に動画データをバイナリデータのリソースにしてコンパイルします。以下のようになります。"c:\WINNT\clock.avi"このリソースを使って以下のようにして、うまくいきました。組み込まれているショートカットキーが使えないものがあります。TOLEControlの親であるTWinControlでショートカットのメッセージが止まっていて、activeXに渡されてないようなのです。activeXに直接伝えれば、症状を回避できるようです。示してくださっています。XPにはフォルダのアイコンイメージを変更することができるのですが、これを適用したフォルダをFindFirstは認識しません。この投稿に簡単な解決法は投稿されませんでした。使うことで回避できるかもしれないとの意見がありました。指定した場合、拡張子が「.jpg」のファイルだけでなく退避用にリネームした”XXXX.Jpg_”といったファイルまでヒットしてしまいます。A.WinXPには4文字以上の拡張子を正しく認識させるためのレジストリが用意されています。以下の方法を試してみてはいかがでしょうか。Win2000でも同じことができるかどうかはわかりません。内部から自身の親ウィンドウのハンドルを得るQ:ActiveXコントロールに関する事です。親ウインドウをサブクラス化しようとする時に必要なウインドウハンドルをparent等で、取得することができませんでした。親ウィンドウのウィンドウハンドルは自分自身のウィンドウハンドルであることが多いです。いう「ウィンドウ」は一番親にあたるコンテナ1つ以外には一切作成されなかったりします。メソッドを利用すれば得られます。添付すれば問題はないです。含めて配付できたとしても面倒ですね。Microsoftの次のURLからダウンロードできます。これ1本で日本語を含む各国言語に対応しています。編集Windows2000の新APIを使った半透明ウィンドウ最近、雑誌の付録についていたWin2kRC2をインストールして「半透明ウィンドウを作ってみよう」と思い立ち、TClock(KAZUBON氏作のフリーソフト)のソースファイルを参考に作ってみたので紹介します。ウィンドウの拡張スタイルにWS_EX_LAYEREDを指定して、SetLayeredWindowAttributesというAPIを使います。(英語)Win2kを使っている方は、ちょっとした遊びのつもりで試してみてください。ScrollBar1Changeのイベントを使っています。ScrollBarを動かすと、Formの透明度が変化します。編集スクリーンセーバーの名前を変更する。}コンパイラ指令でリソース文字列を埋め込んでもコントロールパネルの画面の設定には反映されません。これはWin95/WinNT4.0からの新GUIに移行した際に、コントロールパネルで表示されるスクリーンセーバーの名前はファイル名そのものに変更されたためです。プロジェクト名には日本語を使う事は出来ないので、日本語名を付けたい場合はバッチなどで変更するようにします。文字までで指定しておくことになっています。文字までにし、すべてを大文字にする必要があります。文字までの内容をコントロールパネルのスクリーンセーバーの選択肢として表示できるようになります。いうクラスがあります。カプセル化しているので以下のような制限・仕様があります。読み書きキャッシングが行われない最初の2つは容量の制限。ファイルへの読み書きをレジストリに読み書きするためのマッピング処理のため、キャッシュが効かずに低速です。ファイルを頻繁に読み書きする際に挙動不審になるという弊害もあります。上のような点をすべて解決します。・ファイルサイズの制限はシステムによってのみ制限される。・セクションの大きさはファイルサイズによってのみ制限される。この制限は問題にならないでしょう。いたいと思いましたのでヘルプを探してみました。ものがあったのですが使い方が分かりません。定義されているプロジェクトです。追加し、リソースDLLのプロジェクトを作成してください。プロジェクトグループプロジェクトグループの一覧が出ます。作成した言語のプロジェクトを開いてください。Microsoftが提供しているリファレンスはhttp://msdn.microsoft.com/library/sdkdoc/shellcc/Shell/IFaces/IActiveDesktop/IActiveDesktop.htmにあります。いうマジックナンバーが使われていますが、もしかしたら将来Windowsのバージョンが変わるとこの値も変わる可能性があります。[Delphi-ML:42104]に書かれているように、アクティブデスクトップはWindowsの準(?)標準コンポーネントですので、恐らく問題ないと思います。いう文字列が登録されているのを見つけることができます。編集デスクトップにあるアイコンの数と位置を知りたい。通常デスクトップには色々なアイコンがありますが、それらの数とそれらが置かれている位置(X,Y座標)をアプリケーション中で把握したいのです。デスクトップを覆っているリストビューコントロールに対して、メッセージを投げるなりAPIを発行するなりしてください。ListView_XXXXXX関数は、結構豊富です。テストすることをお勧めします。以下サンプルプログラムです。Referenceを調べてください。Desktopをインストールしている環境では動かないかもしれません。編集アップリケーションにサウンドリソースを埋め込んで使いたい。リソースファイルには、*.WAVファイルを埋め込むことが出来ます。これは手作業で行わなければなりません。いうファイルがあるとします。・このファイルをproject1.dprと同じディレクトリに起きます。・メニューから[ファイル|新規作成−テキスト]を選びます。TEST.WAVと1行を書き込み、PROJTEST.rc(適当でよい)という*.rcファイルとしてセーブします。リソースは、原則、大文字です。・binディレクトリにあるbrcc32.exeで、*.resファイルを作成します。プロジェクトの再構築を行えば、EXEの中にTEST.WAVのデータが埋め込まれます。Demosディレクトリの中にあるリソースエクスプローラの見本をコンパイルして、このプロジェクトのEXEファイルを読み込むと、WAVEリソースが出来ていることがわかります。以下は、簡単な使用方法です。SND_ASYNCをSND_SYNCにすると終わるまで制御が戻りません。編集エクスプローラからファイルをドラッグ&ドロップする一度はやってみたいんですよね。MLでも多いスレッドです。「Delphi2.0Q&A120選」(大野元久著)にもあります。WM_DropFilesメッセージを捕まえて、DragQueryFile関数で処理するわけですが、受け取る側のスタイルを準備しなければなりません。これは、一般的なフォームのOnCreateイベントでDragAcceptFiles(Handle,True);を使うよりも、CreateParamsをオーバーライドするのがベターだそうです。ファイル1個の場合−−メモに読み込ませる。SizeOf(FileName));ListBox1.items.add(String(FileName));end;DragFinish(Msg.Drop);End;最後のDragFinishを忘れないように。編集アプリケーションを常駐させてタスクトレイに登録したいコンポーネントをつかう人が多いんでしょうね。MLでは少ない話題です。このようなAPLを何十本も作るんでなければ、直接コーディングしてみませんか。要領は、APIのShell_NotifyIcon関数を使うことです。TaskTrayへの登録と削除は簡単にできます。頭を悩ますのは、どんなアイコンを使うのかと、TaskTrayに送られてくるメッセージを自分で決めなければならないことです。メッセージ送信先に利用しました。編集ファイルを削除してゴミ箱に移動させたい。SHFileOperation関数を使えば、ファイル単位でもフォルダーごとでもゴミ箱に移動させることができます。注意事項としては、必ずフルパスでなければならないということです。いう名前のフォルダを作ることで、任意の場所にプリンタフォルダを追加できます。編集シェルのデスクトップやマイコンピュータをプログラムから開きたい。Desktopを参照すればOKです。'デスクトップ'は半角です。end;また、主要なシステムフォルダーはHKEY_CURRENT_USER\SoftWare\Classes\CLSIDの値を使えばOKですたとえば、マイコンピュータは。TObject);beginShellExecute(Handle,'Open','EXPLORER.EXE','::{20D04FE0-3AEA-1069-A2D8-08002B30309D}','',SW_SHOW);end;という具合です。CLSIDについては、詳しくはCOMの知識が必要になります。・ネットワークコンピュータ・マイドキュメント・ゴミ箱などのCLSIDの値は、[Tips:196]にあります。コントロールパネルは。アプリケーションですので。APIを使いましょう。EConvertError.Create('ファイルが見つかりません。');end;ファイルが実在しないと例外が発生します。編集エクスプローラのように、アプリケーションにブラウザページをつくりたい。本来なら、DelphiにあるHRMLコンポーネント等を使うんでしょうが、これも、D4まででは、結局AktiveXなので、オフィス97をお持ちの方は、Webブラウザコントロール(WebBrowser)を使うととても簡単です。コントロールとして、詳しい解説があります。いうDLLファイルです。メニューで[コンポーネント|ActiveXコントロールの取り込み]を開いて下さい。無かったら、Windows\Systemディレクトリの、Shdocvw.dllを探して追加して下さい。表示されたら、インストール実行で、パレットのActiveXページにコンポーネントがインストールされます。ページ切り替えは省略しますが、フォームにこのコンポーネントを貼り付け、Alignを決めます。TObject);beginWebBrowser1.GoHome;end;とすれば、Web表示が出来上がりです。Tmp);end;end;メソッドや、プロパティの詳細は、上記のヘルプファイルを見て下さい。264番のインターネットエクスプローラオブジェクトと似通っているようです。編集MDI等で二重起動を防止して新しいファイルを開くなんか変なタイトルですいません。Exe本体やExeのショートカットにファイルをドラッグ&ドロップ(以下D&D)した時にアプリケーションが起動してファイルが開く処理を実現したとします。されたファイルを開きたいというものでしょう?そこで以下のTipsを利用します。受け取るメッセージハンドラを実装します。されるファイルは一つだとしか考慮していません。エクスプローラを起動したい/その情報を取得したいオフィス97のCD-ROM\VALUPACK\ACCESS\WEBHELP\Webrowse.hlpにInternetExPlorerオブジェクトの詳しい解説があります。エクスプローラのインスタンスを作成し、操作することができます。定義されているCreateOleObject関数で使えます。メソッドを使用します。Unassigned;end;end;便利なプロパティやメソッドがたくさんあります。ブラウザにセットすることができます。文字列として取得出来ます。ブラウザは起動しておいてください。セットするには以下の関数を使います。ページが表示されます。開いてページを表示するようです。して送りたいのですが。APIでIMEに送る。APIで判断出来ます。APIでIMEに直接セットする。例varIMC:HIMC;BufLen:longint;Buf:string;beginEdit1.SetFocus;IMC:=ImmGetContext(Edit1.Handle);Buf:='へいせい10ねん';BufLen:=length(Buf);//MS-IME98ImmSetCompositionStringA(IMC,SCS_SETSTR,PChar(Buf),BufLen,nil,0);//ATOK12ImmSetCompositionStringW(IMC,SCS_SETSTR,PChar(Buf),BufLen,nil,0);ImmReleaseContext(Edit1.Handle,IMC);end;MS-IME98とATOK12でテストしましたが、ATOK12の場合、UniCodeの方のAPIで実行しないとちゃんと動作しませんでした。わかりません(^^;#詳しくは、英語のヘルプやAPIの解説書等で調べてください。}0);FileSetDate(FHandle,DateTimeToFileDate(Date));CloseHandle(FHandle);End;タイムスタンプの設定にAPIのSetFileTimeを使う手もありますがフォルダならこれで十分です。編集メインフォーム以外のフォームをタスクバーに入れたい。フォームのウィンドウスタイルにWS_EX_APPWINDOWを加えます。WS_EX_APPWINDOW;end;とします。SW_HIDE);end;ですね。編集APPのフォームを最小化して起動したいメインフォームのWindowStyleをwsMinimizedに設定しておくと自分で起動するときは、最小化されタスクバーに入ります。他のAPPから起動する時やAPIのShowWindowやショートカットやタスクトレイなどで起動する時はちょっとやっかいです。これは、Application(変数)のフォームとメインフォームの同期がとれないからです。これはメインフォームに送られてくるスタイルフラッグに合わせて、Applicationのスタイルを合わせてやる必要があります。この方法は、MLではいくつも紹介されています。[Delphi-ML:13185](混乱ということでは、古いバージョンでは、GetStartupInfoで取得できるwShowWindow値が、CmdShowと必ずしも一致しないという問題や、D2→D3で仕様が変わっているということもあります。)以下のコードはどうでしょうか。;end;なお、子フォームの場合をDeskTopでなく、タスクバーに入れるには、0005番「メインフォーム以外のフォームをタスクバーに入れたい。編集Windowsの「ファイルの検索」ダイアログをプログラムから使いたい「ファイルの検索」ダイアログを出すには、DDEを使います。3']);DdeClientConv1.ExecuteMacro(PChar(Macro),False);DdeClientConv1.CloseLink;end;てなふうにします。フォルダがカレントになります。ちなみにどこで見つけたかというと、レジストリのHKEY_CLASSES_ROOT\Directory\shell\find\ddeexecです。{終了}end;が簡単でいいでしょう。編集フォームの最小化、最大化をアニメーションでやりたい。(DELPHI)過去のMLを検索してみましたが案外少ないようです。「最小化」の話題は結構あるのに。このような機能をもつコンポーネントがたくさんあるし、あまり重要な機能でもないということですか。これは当然ですが、SetBoundsメソッドなんかをいじっていてもダメですね。wsMinimized;inherited;end;としてもだめですね。結論的に言うと、MovWindowというAPIを使うんですが、このためのちょっとした工夫が、メッセージの理解やその処理の仕方について大変勉強になります。(コンポーネント貼り付けるだけが能ではない!)ということで、今回はちょっと解説を。・フォーム(メインも含めて)とApplicationの同期を考慮しなければならないので、双方のWindProcをオーバーライドしなければならない。・では、ApplicationのWndProcはどうすればオーバーライドのようにできるのか。いうようなことを考えて下さい。LParam);end;end;これをヒントに自分でコンポーネント化するのは簡単でしょう。一つ、フォームへのメッセージを横取りするWndProcをコンポーネントで書くということです。MLで話題になっていたので、ひとこと。0);でも似たようなものになります。編集メインフォーム以外のフォームを最小化した時もAPP全体を最小化したい複数のフォームを持つAPPで、メインフォームでないフォームのMiniMizeボタンを押すとこのフォームは左下にタイトルバー形式にアイコン化され、メインフォームはそのまま残っています。これはこれで意味があるのですが、どのフォームを最小化してもAPP全体を最小化したい時があるものです。これは、WM_SYSCOMMANDメッセージをとらえて、Appicationを最小化すればできます。Form2は、メインフォームでないフォームです。thenApplication.Minimizeelseinherited;のようになっていることからもわかるように、本来メインフォームとApplicationフォームとは別のものです。この違いからWindowStyleプロパティの独特の仕様が生まれているのでしょうか?左下にアイコン化するときは、WindowStyleプロパティは変化しないようです。フォームのWindowStyleプロパティは、メインフォームでないときは注意が必要です。編集ダイヤラを呼び出す。(TAPI32.DLLの使用)TAPI32.DLLのtapiRequestMakeCall関数を呼び出します。'');end;で、ダイアラが起動します。本格的にTAPIを使う場合は、Tapi32.dll用の定義ユニットが必要です。(28K)のTapih.pasなどがあります。ページhttp://www.kobira.co.jp/sakura/d_net_RasAPI.htmからダウンロードできます。モジュールハンドルを取り出す。