1 名前: ◆XcB18Bks.Y mailto:sage [2008/06/24(火) 16:24:25 ] Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を 勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが お礼はDelphiの布教と初心者の救済をお願いします。 <前スレ> くだすれDelphi(超初心者用)その46 pc11.2ch.net/test/read.cgi/tech/1205323779/ <過去スレ> DelWiki避難所(Delphi 関連の過去スレッド) delwiki.info/?%E3%83%AA%E3%83%B3%E3%82%AF%2F%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%83%86%E3%82%A3%2FDelphi%20%E9%96%A2%E9%80%A3%E3%81%AE%E9%81%8E%E5%8E%BB%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89
477 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 02:30:28 ] 最初のexe起動。 次のexeをパラメータ付きで起動。 すでに起動済みならパラメータを最初のexeへ渡して自分は終了する。 タイミングによっては難しいかな。 最初のexeを終了させる方がいいかも。 いろいろ試して。
478 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 02:35:53 ] >>476 >>477 やっぱりそうゆうやり方しか無いんですかね。 やってみます。有難うございました。
479 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 05:23:51 ] >>475 自分でExe側をコーディングしているのなら、起動パラメータを弄るのではなく、 多重起動した場合、前のを落として 起動パラメータによって変更されるパラメータを変更するだけではないのかな?
480 名前:475 mailto:sage [2008/08/28(木) 12:49:11 ] >>479 すいません。 前のを落とす方法がわかりません。
481 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 14:22:09 ] mutexで排他制御をして すでに起動していたらWM_COPYDATAでパラメータを丸投げして 新しい方が自爆して すでに起動している方がパラメータを受け取ってリスタートする。 あるいは WM_COPYDATAで死ねというコマンドを送って古い方を終了させて 新しい方がそのままパラメータを処理する。 前者の方が初期化を省ける分軽くなる可能性はある。 後者の方が実装が楽になる可能性がある。
482 名前:475 mailto:sage [2008/08/28(木) 14:26:22 ] いい機会だからWM勉強してみます。 みなさん有難うございましたm(_ _)m
483 名前:デフォルトの名無しさん [2008/08/28(木) 14:50:53 ] TWebBrowserにhtmlでフォームを表示してるんですが フォームのtextarea内で改行出来ません ie・fxでは正常に改行できます
484 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 15:46:53 ] UIWebBrowserとか使っとけ
485 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 16:33:06 ] >>475 DDEを使って、既に起動している方に終了命令を送るかな 後から起動した方が、パラメータを既に起動している方に送って、 すぐに終了ってのはよくあるけど
486 名前:485 mailto:sage [2008/08/28(木) 16:59:49 ] >>475 DDEを使うとこんな感じ ※同じプログラム内に送受信を書きます 【メッセージ受信】 1. Systemパレットから DdeServerConv をフォームに置く 2. DdeServerConv の Name プロパティを "AAA" とかにする ← 後でトピック名に使われる 3. DdeServerConv の OnExecuteMacro イベントに受け取ったときの記述をする 例) Caption := Msg.Text; 【メッセージ送信】 1. uses 節に DDEMan 等(Formsも?)を追加 2. DdeClientConv を使って送信項目を書く↓ // アプリケーションが HogeHoge.exe で、トピック名が AAA の場合 SendStr = 'Tojiro-Goma'; ←送信するメッセージ with TDdeClientConv.Create(Application) do begin if SetLink('HogeHoge', 'AAA') then begin ExecuteMacro(PChar(SendStr), False); CloseLink; end; Free; end;
487 名前:475 mailto:sage [2008/08/28(木) 17:02:44 ] >>485 今回は>>481 さんの前者の方で無事成功しました。 DDEは別のところで使えそうなので参考にさせていただきます。 有難うございました。
488 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 22:11:06 ] 文字列'ABCD'があって、その文字列に1文字置きに'#'を挿入したいのですがどのようにすればいいでしょうか? こんな感じです。 A#B#C#D よろしくお願いします。
489 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 22:13:35 ] insert
490 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 23:01:40 ] Insertとforループでどうにかできました ありがとうございました
491 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 00:07:10 ] 二重ループの中で中側をブレークしてそのまま外をコンティニューするにはどうしたらいいで初夏? 取り敢えずフラグ立ててみたのですがこれしかないでしょうか? for i:=0 to Files.Count-1 do begin while .. do begin case xx of mrOk :zzz; mrIgnore:begin Flag:=True; Break; end; else exit; end; xxxx end; if Flag then Continue; zzzzzz; end; mrIgnoreの時はxxxxもzzzzzzを処理せずfor i:=ループを続けたい
492 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 03:55:45 ] 速度は遅いかもしれんけど中のループはbreakではなくcontinueで全部終わらせば 外のループへ出れる
493 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 07:52:05 ] goto使え
494 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 08:49:03 ] >>481 そっちのほうがスマートだな
495 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 13:36:05 ] bsNoneに設定したフォームで Form1.WindowState := wsmaximized を実行するとタスクバーの領域を浸食してしまうんだがお手軽に システムメニューの最大化を実装する方法ってあります?
496 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 21:31:01 ] こちらのサイトの方法を汎用化する方法はありませんでしょうか? Delphi VCL継承コンポーネントをインストールなしで使う/Tips & Tricks www.geocities.jp/asumaroyuumaro/program/tips/replacecompo.html Edti1 := CloneComponent(Edit1); みたいな方法で使いたいのですが・・・。 Hoge.Createすると、生成されずに、Createだけよばれてしまいます。 class helper使えばできる気もするのですが、class helperの同時に1つしか使えないという制限から困っています。
497 名前:496 mailto:sage [2008/08/29(金) 21:40:44 ] Result := TComponent(Original.ClassType).Create(Owner); でいける気がしました。 ちょっと試してみます。
498 名前:496 mailto:sage [2008/08/29(金) 21:51:58 ] >>497 は勘違いでした。orz とりあえずいけた気がします。 function CloneComponent(Owner, Original: TComponent; ClassType: TComponentClass): TComponent; var Stream: TMemoryStream; begin Result := ClassType.Create(Owner); if Original is TWinControl then (Result as TWinControl).Parent := (Original as TWinControl).Parent; Stream := TMemoryStream.Create; try Stream.WriteComponent(Original); Original.Free; Stream.Position := 0; Stream.ReadComponent(Result); finally Stream.Free; end; end; 使い方: Panel1 := CloneComponent(Self, Panel1, TPanelEx) as TPanel; 問題点は、PanelならPanelの上におかれたものが全部開放されちゃうことです・・・ なんとかならないかなあ・・・
499 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 23:08:08 ] 再帰
500 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 15:57:40 ] 2つのアプリを同じPCで動かしているのですが、 競合する動作があるので片方が動作すつときはもう片方の動作を止めるために WM_COPYDATAを送っています。 開発環境はxpで正常に動作しますが動作環境は98で 「このプログラムは不正な処理をおこなったので・・・」とゆうエラーが出ます。 このエラーは送信側が送信した瞬間に送信側で出ますが受信側は受信できています。 片方を落として動作させたり、片方の受信機能を外して送信した場合はエラーが出ません。 こちらの1と2をほぼそのまま利用しました。 homepage2.nifty.com/Mr_XRAY/Delphi/plSamples/650_SendText.htm
501 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 16:12:36 ]
502 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 16:57:25 ] >競合する動作があるので片方が動作すつときはもう片方の動作を止めるために そういうときには「ミューテックス」というモンを使うんですわ。 ttp://docs.codegear.com/docs/radstudio/radstudio2007/RS2007_helpupdates/HUpdate4/JA/html/delphivclwin32/SyncObjs_TMutex.html
503 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 17:50:03 ] Win98上での開発・デバッグ環境を用意しろとしか
504 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 03:59:43 ] 短い文字列型でやってみるとか。 ShortStringね。 送信側のEdit1.Textが空のときも問題ないのかな。 PCharでキャストすると、コード領域にある#0のアドレス返すから、 その辺でおかしくなるのかも。 良く分かりません。
505 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 11:32:33 ] >>498 TReaderのメソッドの中に、 コンポーネントの構成を再帰的に追っかけて読み込んでくれるメソッドがあった希ガス このメソッド使うと、イベントも含めたコンポーネントのクローンを作成することも可能。
506 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 19:37:44 ] >>502 そこはもう通り過ぎてるだろw
507 名前:496 mailto:sage [2008/08/31(日) 19:49:11 ] >>498 のコードは不完全でして、イベントハンドラ等のコピーができません。 それらをカバーするにはこちらが参考になるようです。 DelFusaBlog コンポーネントをインストールせずに使う方法 delfusa.blog65.fc2.com/blog-entry-40.html#more TMemoryStreamでイベントハンドラを別のオブジェクトにコピーするには? hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200703/07030070.txt 私はも書いてみようと思います。
508 名前:デフォルトの名無しさん [2008/09/01(月) 11:01:26 ] DLLについて質問です。 ----------------------------------- PCOPRS1CONTROL_RET Open(int port_no) port_no 使用するCOMポート番号(0 - 255) 出力 PCOPRS1CONTROL_RET_OK = 0 成功 PCOPRS1CONTROL_RET_ERR = 1 失敗 ----------------------------------- DLL内の上のような関数をテストしようと以下のようなコードを書いて実行すると関数はちゃんと走っているようなんですが矢印のところで毎回'privileged instruction at 0x0012f6d6'とエラーがでてしまいます。 これはDLLの呼び出し方が悪いのでしょうか?それとも他に原因があるのでしょうか? ---------------------------------- function Open(port_no: Integer): Integer; stdcall; external 'hogehoge.dll'; procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin i := Open(0); ShowMessage(IntToStr(i)); end; //← ----------------------------------
509 名前:デフォルトの名無しさん [2008/09/01(月) 11:49:53 ] >>500 メッセージと一緒にデータも送ってるのか? サンプルはCDSがローカル変数になってるのが良くないと思われるが 別のやりかたとしては、wmuser,wmapp,resisterwindowmessage()、ファイルマッピングオブジェクト、ミューテックスあたり
510 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 18:18:00 ] >>500 CDS.lpData:=PChar(Edit1.Text); がダメじゃないの? S := Edit1.Text; CDS.lpData := PChar(S); でどうだ。 >>508 呼び出し規約が合ってないかもね。 Cならデフォルトはcdecl。
511 名前:508 mailto:sage [2008/09/01(月) 20:51:26 ] >>510 function Open(port_no: Integer): Integer; cdecl; external 'hogehoge.dll'; ズバリその通りで上記のようにしたらエラーが出なくなりました。 ありがとうございます!
512 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 09:37:22 ] すいません、listviewのコラムの順番を変えたいんですけど ListView_SetColumnOrderArray(ListView1.Handle,3,pi); これって、3番目を1番目に移動するには pi に何を指定すれば良いんですか あと、これは全6個のうち3番目を1番目に移動するという事ですか SendMessage(ListView1.Handle,LVM_SETCOLUMNORDERARRAY,6,3) なんか、具体的な使い方が解からないので、お願いします
513 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 11:17:29 ] >>512 少しはググろうぜ ListView_SetColumnOrderArrayはLVM_SETCOLUMNORDERARRAYのマクロだからどちらも同じと受け取っておk piにはarray of Integerへのポインタを指定するっぽい 三つのカラムのうち一番右のカラムを一番左に持ってくるときは pi: array[0..2] of Integer pi[0] := 2; pi[1] := 0; pi[2] := 1; でいいと思う んで第二引数のとこには並べ替えるカラムの個数を指定するんだと思う だからListView_SetColumnOrderArray(ListView1.Handle, Length(pi), @pi);でいいような悪寒 以上ググった結果から適当に推測した結果でした
514 名前:512 mailto:sage [2008/09/02(火) 18:02:04 ] >>513 うまく出来ました しかし、コラムの内容は位置番号と一致してるけど それ以下の内容は位置番号と一致しないです やっぱり一致させるのは無理なのかな でも、使い方が解かったんで助かりました、ありがとうございますw
515 名前:デフォルトの名無しさん [2008/09/03(水) 13:41:01 ] SpTBXLibを使っている方は、おられませんでしょうか? Silverpoint Development club.telepolis.com/silverpointdev/sptbxlib/index.htm SpTBXLibは標準で便利なドッカブルパネルがあるのですが、 いくつものドッカブルパネルを上に載せて設計時にGUIデザインすると、 画面が狭くなるためフレームを使って分離できないかと考えています。 しかし、TSpTBXMultiDock に載せた TSpTBXDockablePanel 上に 他の出作ったTFrameから継承したフレームを載せると、 載せたフレームが真っ黒になってしまいます orz いままでSpTBXLib以外でのフレームでこのようなことはなかった気がします。 何か解決方法はないものでしょうか? SpTBXLib 2.2です。OSは、Vista SP1、XP SP3で確認しました。
516 名前:515 mailto:sage [2008/09/03(水) 14:23:56 ] どうやら、TSpTBXDockablePanel以外にも TSpTBXPanel 上にFrameを載せた場合にも起こるです。 上に載せたフレームの ParentColor := True でも無効な様子で、 Color := clNone から、Color := clBtnFaceにしたところ、通常のように表示されました。 しかし、残念ながらフレーム上では SpTBXLib の Theme設定が効きません。 他の部分がTheme対応なので不恰好になってしまいます。 VCLのソースを覗いてみてわかったのですが、 TXPManifest を載せて ParentBackground を有効にさせると、 設計時はダメですが、実行時は一応、SpTBXLibのThemeが効いてくれます。 しかし、画面リサイズ時などで画面のフレームの描画が崩れることが多々あります。 バグっぽい仕様な気がしてきました。(もしくはFrameに対応してない) ので公式サイトのリンク先のニュースグループで聞いてくることにします。 もし何かわかりましたら、こちらでも報告いたします。
517 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 15:25:20 ] AVGがDelphi7で生成したexeをウィルス扱いしやがったぜというお話 www.delphipages.com/threads/thread.cfm?ID=199695&G=199691&SAR=TRUE I have the new AVG 8 with Delphi 7 Pro With AVG fully updated. Create a new Delphi Project and add nothing and no controls and try and run. AVG throws a false positive Downloader.Banload.ZKA And the exe cannot be created. Add one piece of code or one simple component and no problem and no warnings.
518 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 16:11:31 ] Avast!もDelphiで生成したwin32コンソールアプリをたまに誤認するよ
519 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 16:28:11 ] ICSというコンポーネントをインストールしたんですが、いざ使おうとすると 「ユニット名〜が解決できません」と出て使えないのです。 何か他に特別なことがいるのでしょうか? インストールするのにに参照したサイトはここです。 mrxray.on.coocan.jp/Delphi/CompoInstall/index.htm verは2007です ICS www.overbyte.be/eng/products/ics.html
520 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 17:59:24 ] これIndyとどう違うの?
521 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 18:05:38 ] It is yet another internet component.
522 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 18:08:36 ] 日本語でおk
523 名前:519 mailto:sage [2008/09/03(水) 18:40:06 ] なんだか色々と弄ってたらどうにか使えるようになりました! お騒がせしました
524 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 18:44:03 ] .cbkってファイルがいつのまにかできていたのですが・・・? これは一体どのようなファイル? なのでしょう HogeFrameUnit.dfm.cbk というような ファイルでした 環境:BDS2006
525 名前:デフォルトの名無しさん [2008/09/03(水) 20:05:26 ] google ブラウザのせいでChromeがOxygeneに名前変わっててワロタ RemObjects Software: Oxygene 3.0 www.remobjects.com/product/?id={DC0A9947-5FED-4D34-8CC8-F2DCFA87A1FE}
526 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 20:09:20 ] 質問させてください<(_ _)> Delphiのボタンの色を変える方法ってありますでしょうか?? Bitボタンの文字の色を変えることはできるんですが ボタン表面自体の色を変えたいです。 imageなどで画像貼り付けも試してみましたが ボタン全体に被さってしまい、立体感がなくなってしまいます。 どなたかいい方法ご存知の方おられましたらぜひご教授ください。
527 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 20:24:03 ] >>526 ボタンにピッタリサイズのimageを作ればいいんじゃないかな
528 名前:526 mailto:sage [2008/09/03(水) 20:45:28 ] >>527 全体に合わせてしまうと立体感がなくなってしまうし 表面だけに会わせると、周りの色との違いがでてしまいます。 立体感含むボタンそのものの画像を作るしかないんでしょうか? それだと大きさによって変わるからたいへんですね^^;
529 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 21:20:26 ] >>528 WM_ERASEBKGNDを捕まえて適当に塗る
530 名前:デフォルトの名無しさん [2008/09/03(水) 21:29:20 ] >>528 ちょっと大きいPanelに乗せれば立体的に
531 名前:526 mailto:sage [2008/09/03(水) 21:41:50 ] >>529 、530 それは実行時にボタンを押したときに ちゃんと凹みますか??
532 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 21:44:19 ] やってみればいいじゃない
533 名前:デフォルトの名無しさん [2008/09/03(水) 22:11:47 ] >>526 TButtonの色変えは、かなーり昔からのFAQくさいw 色変更が可能なボタン rakasaka.fc2web.com/delphi/odbtn.html
534 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 22:15:04 ] その手の小細工を効かせたアプリは 大抵センスがよろしくないものになってしまうという
535 名前:526 mailto:sage [2008/09/03(水) 22:17:04 ] >>533 おお! これはいけそうですね!! どうもありがとうございます♪
536 名前:デフォルトの名無しさん [2008/09/04(木) 13:51:28 ] ここで質問する内容ではなさそうなので躊躇したのですが、他で該当するような 活発なスレが見付からないのでお許しください。 Delphi2009が発表されるので購入を考えているのですが、非常に高いですね・・・。 バージョンアップ版をと思ったのですが、私が以前に購入したのが10年くらい前の 初期バージョンの時代で、その後は会社購入版を使用していたため、私個人の IDを紛失してしまっています。 会社では業務の都合上Delphiの必要性がなくなったので今後のバージョンアップは 見込めない状態です。 そこで質問ですが、Delphiのバージョンアップ版を使用するにあたって過去製品で個人が 登録したIDが必要になると思うのですが、その必要性はどれくらいありますか? というのも、Microsoftのバージョンアップ版ではインストール時に過去の製品での ID等を聞かれないものですから、Delphiも大丈夫かと思いましたので質問させていただきました。 変な質問で申し訳ありませんが、私個人の出費としてはあまりにも大きな差があるもの ですから質問させていただきました。もしお分かりなられる方がいらっしゃいましたなら よろしくお願いいたします。
537 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 13:58:45 ] 某時代はそもそもユーザー登録してないとバージョンアップ版買えなかったから誰も知らないと思うぞ おそらくアクティベーション時に登録するCDNのアカウントで判断するんだろうけど。
538 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 18:13:40 ] 会社に電話して事情を説明して購入可能か聞くしかない。 正規ユーザーの条件はIDを持っていることであり バージョンアップ版は正規ユーザーであることが条件である。 ゆえにバージョンアップは不可能。とか適当なレスはつけられるが 実際に購入可能かどうかとは何の関係もないしな。
539 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 18:35:34 ] 会社で購入したことを根拠に個人でバージョンアップはどう見ても変でしょ。
540 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 18:45:09 ] >>539 初期バージョンの頃に個人で買ったって書いてあるじゃん!
541 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 19:25:07 ] それを証明できないから問題なんでしょ。 これが通るなら、新規バージョンの購入者はいなくなる。
542 名前:デフォルトの名無しさん [2008/09/04(木) 19:30:42 ] てか、Delphi2009の販促の封筒かはがきがこないんですけど、 皆さんのところには着ましたか? プレスリリースだけで後は店で買ってねってことなのかな・・・
543 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 19:31:58 ] 仕事でつかえないなら、趣味としてつかうの? Turbo Explorer でいいんじゃないの。
544 名前:デフォルトの名無しさん [2008/09/04(木) 19:40:57 ] 仕事で使う人がこんなとこで質問するの?
545 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 19:56:51 ] ActionListはどこにおくのがよいものでしょうか? FrameなどでコードやUIを分離してデザインする場合にユニットがそれぞれ分散しますよね? それぞれ、DataModuleにActionListおいておいて、 それぞれFrameなどから、 中央集権的にアクセスする感じでよいのかなあ? それと Frame を使った場合やFormがたくさんある場合に、 ほかのFormを含むユニットの依存関係ってどう処理したものなんでしょうか? ほかのFormやFrameをそのまま依存(つまり、uses)させてしまうと、分離している意味が少ない気がします。 DataModuleを介すれば、依存ユニットをusesする必要はあまりないですが、 解決になってない気もします。
546 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 20:03:26 ] >>545 自分もいろいろ試行錯誤したけど メインフォームに置くのが最適と判断した。 各フレームに対するアクションをそのフレームに委譲していくと アプリにとって本質的な状態の管理やらの制御のコードがフォームに残る。 データモジュールだとそのメインフォームに対する処理も冗長になるからちょっと面倒で無駄な感じ。 フォームユニットをスカスカにしても得るものがないしね。
547 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 20:55:40 ] デルピィ
548 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2008/09/04(木) 23:41:51 ] _________ ∧,,∧∩ / ミ,,゚Д゚彡 < 日本がんがれ! ミつ旦.ミ \ @ミ ミ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∪''∪ やあ、元気っすか? さて、いきなり、質問っす。 コマンドラインの出力をクリップボードにとりこむような exeを作りたいんだよ。 dir > clip.exe みたいな実行ができるexeをつくりたいっす。 誰かおしえてくださいな。 BlueLeaf1336-PROBLEMS-2004_0013 www.geocities.jp/fjtkt/problems/2004_0013.html これを使うといいのかな?
549 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 00:01:17 ] それやるとclip.exeが死亡するんだが… dir|clipだよね? まあ標準入力をTStringListに放り込んでいって 最後にClipBoard.Text = Strlist.Textでいけると思う。
550 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 00:56:51 ] ゴミは消しとけよ>Delフサ
551 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2008/09/05(金) 00:57:10 ] ∧,,∧ どもー ミ,,゚ 3 ゚彡 ミ つ旦)~~ 〜と,,,~),,~) んーーー、こんなの書いてみて動きましたが 標準入力は、どうやって受け取るんでしょう? program ToClip; {$APPTYPE CONSOLE} uses SysUtils, Classes, Clipbrd, GrabConsole in 'GrabConsole.pas'; var SL: TStringList; begin SL := TStringList.Create; try PipeConsole('ipconfig', SL, nil); Clipboard.AsText := SL.Text; finally SL.Free; end; end.
552 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 01:25:24 ] APIのGetStdHandleで得てReadFileで読む RTLのRead関数はCのstdinなんかに比べて貧弱だから使わない方が良い
553 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 03:32:42 ] Delphi2009のバージョンアップは、今までより1〜2万高そう。
554 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 04:52:23 ] dir > clip.exe ワロタ
555 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 07:14:12 ] program cbin; uses Windows, Classes, SysUtils, Clipbrd; {$R *.res} var s, line: String; n: Integer; begin line := ''; n := 0; while not Eof(Input) do begin Readln(s); if n = 0 then line := line + s else if n = 1 then line := line + sLineBreak + s + sLineBreak else line := line + s + sLineBreak; Inc(n); end; Clipboard.AsText := line; end.
556 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 07:16:26 ] program cbout; uses Windows, Classes, SysUtils, Clipbrd; {$R *.res} begin Write(Clipboard.AsText); end. これで dir | cbin # クリップボードに取り込み cbout # クリップボードを出力 cbout | sort | cbin # クリップボードをソート な感じで使える
557 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 18:09:41 ] このへんのはC++Builderのほうが楽だと思うよー #include<vcl.h> #pragma link "rtl.lib" #pragma link "vcl.lib" だけしとけば何も考えずにVCL使えるし
558 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 18:42:07 ] パイプで繋ぐのはシェルの役目であって プログラム自体はただの標準入出力するだけのコンソールアプリだろ。 言語選ぶようなもんでもない。
559 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2008/09/06(土) 00:44:14 ] ∧,,∧ ♪ ミ,,゚∀゚彡 ♪ ミつ[|lllll]). @ミ ミ ♪ ∪''∪ すっげー、 ありがとう。 でも、cbinだと、こういうエラーが出るんだ。なんでかな? --------------------------- デバッガ例外が発生 --------------------------- プロジェクト ClipboardIn.exe が EInOutError クラスの例外を生成しました。 'I/O エラー (6)' プロセスは停止しています。再開するにはステップ実行または実行を選択してください。 --------------------------- OK ヘルプ(H) ---------------------------
560 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 00:48:23 ] {$apptype console}が抜けてるんじゃね
561 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2008/09/06(土) 00:56:59 ] んん?ちゃんと動きました。>>560 さん。原因、そうかも。 ∧,,∧ ありがとう ミ゚Д゚*彡 ございます。 ミ(旦⊂ ミ (~,,(~,,,ミ〜 こんどは、ping -t 192.168.0.1 というずっと続く コマンドを、Memo1コントロールあたりに DOSプロンプトと同じ風に、1行つづ、出力したかったりするんですが こういうのはどのようにしたらよろしかりけり? それにしても、cbin、かっこいいな。 こういう実装もあるようです。どぞどそ。 File Area www.slis.keio.ac.jp/~anakata/filearea/filearea.html
562 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 02:56:02 ] >>561 CreateProcess, CreatePipeのサンプルがMLにあったはず。 中村氏だか戸田氏のコード。 それをサブスレッドで動かしてやれば標準出力を一行ごとに取れるだろう。 標準入力も受け付けるようなコンポーネントもあったな T*Dos*だかなんだか。かなり大昔の話だけど。 delphi component pipeあたりで探してれば見つかるんじゃねーの。知らんけど。 にしてもコマンドラインもパイプもネットワークもまるで興味なさそうだったのに 猫も進化するもんだなw
563 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 07:33:05 ] フサギコは犬だよ
564 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 08:35:50 ] Ω ΩΩ ナ、ナンダッテー!!
565 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2008/09/07(日) 00:56:56 ] わ・・・わん・・・・・・・ ∧.,,∧ >>562 さん ミ.,,゚Д゚彡 ミ つ目(ミ . 相変わらずですね。 〜ミ,,O,,,,,,つ まあ、いいけど。 Autch.netさんところや、 [プロセスコミュニケートコンポーネント(適当w)]さんのところで かかれているような応用すれば > こんどは、ping -t 192.168.0.1 というずっと続く > コマンドを、Memo1コントロールあたりに > DOSプロンプトと同じ風に、1行つづ、出力したかったりするんですが こういうのできるのかなあ。 んーー、ちょっとコーディングの感覚を取り戻す必要があるなあ。
566 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 05:12:03 ] TMemIniFileのUNICODE対応版(WideString)はどこかにありませんでしょうか?
567 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 09:56:55 ] INIファイル自体MS非推奨だからPrivate〜W系APIはない。 ついでに言えばUNICODE≠WideStringな。 MemInifileのソース抜いて頭にtype String = WideString;入れて再コンパイルしたら。
568 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 11:14:50 ] TMemIniFileはAPI非依存だから、改造すればいけそうだね
569 名前: ◆XcB18Bks.Y mailto:sage [2008/09/07(日) 15:32:45 ] >>566 ワイド文字列の値を保存するだけなら UTF8Encode関数でUTF-8に変換すればよいと思います ワイド文字列のファイル名だと大変そうですね。 >>545 アクションリストは基本的にメインフォームに置いています。 データモジュールはユーザーインターフェース(U/I。表示や編集)と無関係な 内部情報や内部処理を置く場所に徹するべきだと思います。 フォームを複数使うプログラムでは サブフォームやフレームがメインフォームを参照しないようにしています。
570 名前:545 mailto:sage [2008/09/07(日) 15:56:17 ] >>569 UIに関するものはメインフォームに置く、ということですが、その場合 サブフォームやフレームがメインフォームを参照しないようにできるんでしょうか?
571 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 16:56:06 ] Frame側でFileExecuteなんてpublicメソッドを用意して メインフォーム側のFileExecuteイベントハンドラから呼び出せば依存関係がなくなる。 publicをpublishedにしてSender.Name + 'Execute'を検索すれば少し楽になる。
572 名前:545 mailto:sage [2008/09/07(日) 20:04:55 ] いやそうでなく、フレーム側からメインフォームを参照するって話なのですが・・・ 動的にメソッド呼ぶのはなんか違くないですか?
573 名前:571 mailto:sage [2008/09/07(日) 20:31:26 ] (その逆はともかく)どうしてもフレーム、サブフォーム側からフォームを参照したくなければしなくてすむという話をしたつもりだったんだが。 動的かどうかはあまり本質的ではないと思うが。
574 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 23:22:24 ] Delphi2007にUpdate3を当てると、System.pasが見つかりませんという DCCエラーが出るのですがどうすればいいんでしょうか? 他のUpdateも必要なのかと思い、 December2007 UpdateとApril08 Hotfixも当ててみましたが改善されません。 誰かご存知でしたら、教えてください
575 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 12:29:46 ] System.pasが見つからないは大抵コンパイラ起動する引数が多かったりするだけ ライブラリパスとか減らせば直ると思うよ こっちはd6per(笑)だから参考になるか分からんけども
576 名前: ◆XcB18Bks.Y mailto:sage [2008/09/08(月) 15:35:41 ] >>570 ・内部情報と内部処理は全てデータモジュールに置く ・内部処理クラスや汎用関数は別のユニットに書く とやるようにしたらメインフォームを参照することはなくなりました。 ただ、メインフォームにデータの保持とUIが一体化しているコンポを置く場合は 難しいかもしれません。
577 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 21:53:44 ] >574 この件はローカライズの不具合で対応パッチがあったと思うけど。これか。 ttp://hiderin.air-nifty.com/delphi/2007/09/index.html#entry-20740562