1 名前: ◆XcB18Bks.Y mailto:sage [2008/03/12(水) 21:09:39 ] Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を 勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが お礼はDelphiの布教と初心者の救済をお願いします。 <前スレ> くだすれDelphi(超初心者用)その45 pc11.2ch.net/test/read.cgi/tech/1198802907/ <過去スレ> DelWiki避難所(Delphi 関連の過去スレッド) delwiki.info/?Delphi%20%B4%D8%CF%A2%A4%CE%B2%E1%B5%EE%A5%B9%A5%EC%A5%C3%A5%C9
552 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 20:51:09 BE:974887-PLT(12660)] ウインドウハンドル持ってないコンポはダメじゃなかったっけ?
553 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 21:47:52 ] >>552 TGraphicControl派生コンポはTPanel置いてその中に置けばおk
554 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 22:00:58 BE:174825-PLT(12660)] >>553 なるほど じゃあ、アプリケーションメッセージで if (Msg.message = WM_DROPFILES) and (Msg.hwnd = Panel1.Handle) then こんな感じで振り分ければおkじゃね?>>>550 ※FormCreateの中に↓を入れておくこと DragAcceptFiles(Panel1.Handle, True); Application.OnMessage := AppMessage;
555 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 22:02:52 BE:626494-PLT(12660)] 実際、ppMessageはこんなかんじ procedure TFrom1.AppMessage(var Msg: TMsg; var Handled: Boolean); begin if (Msg.message = WM_DROPFILES) and (Msg.hwnd = Panel1.Handle) then begin SetForegroundWindow(From1.Handle); SendMessage(Handle, WM_DROPFILES, Msg.wParam, Msg.lParam); Handled := True; end; end;
556 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 22:04:39 BE:609375-PLT(12660)] そんで更にこんな感じ procedure TFrom1.DropFiles(var Msg:TWMDROPFILES); const NameMax = 1024; var DropFileCount: Integer; FileNameA : array[0..(NameMax + 10)] of Char; TempStr:String; begin DropFileCount := DragQueryFile(Msg.Drop, $FFFFFFFF, nil, 0); DragQueryFile(Msg.Drop, 0, FileNameA, NameMax); //お好きな処理// DragFinish(Msg.Drop); end;
557 名前:550 mailto:sage [2008/05/04(日) 22:51:03 ] みなさんありがとうございます 早速やってみますね
558 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 23:16:23 ] DragQueryPointでその位置にあるコントロールを取得しては?
559 名前:デフォルトの名無しさん [2008/05/05(月) 09:30:28 ] いつも助かっています。 Open SourceのでかいDelphiで書かれたソフトがあり、それで 勉強しようと思っています。CTRL−Cや’;’を押してどういう処理が されているのかをとりあえず見たいのですが、どういう文字の検索を すれば該当部分のコードを見れるでしょうか? OnKeyで探したのですが、それらしき処理をしている所には飛んで いかなかったのですが。
560 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 09:38:27 ] 実行させてみるのが一番いいと思うよ。 OnKeyって事はコンソールアプリじゃなくて GUI アプリなんだろ? windowsGUIならイベントは全部 TAplicatioの OnMessage でひっかけられるから この中で キーイベントを IF 文入れて ブレークポイントかけられるようにして トレースしてゆけばいい
561 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 10:43:29 ] もしTActionのショートカットに入ってたらソース上には現れない フォームを右クリックしてエディタで表示して例えば「;」なら「187」って いう生数字を探せば見つかる
562 名前:デフォルトの名無しさん [2008/05/05(月) 13:35:59 ] お返事ありがとうございました。 > 560 あまりよくわかっていませんが、FormCreateに Applicaton.OnMessage:= AppMessage; を入れて Precedure TMainFrom.AppMessage(...) var dummy:integer; begin If msg.message=WM_Keydown then dummy:=1; end; でdummy:=1に赤線(ブレーク)をしてみましたが、そこで 止まってくれません...こういう意味ではない?? >561 187という生数字を探しましたが、ありませんでした... MenuにもCTRL-Cのショートカットは登録してないですし www.sph.sc.edu/comd/rorden/ezdicom.html なのですが...
563 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 14:06:49 ] MDIChildってフォームのメニューに"Ctrl+C"と";"のショートカットが割り当てられた項目あるけど違うのけ?
564 名前:デフォルトの名無しさん [2008/05/05(月) 14:43:09 ] あ、ありがとうございました。元Sourceをみていただいて とても感謝しています。 Childwin.dfmの中を見ればいいんですね。 *.pasの中だけ、187の検索をしていました。 これをみると、Copyはshortcut16451とありますが、これは CTRL+Cでいいんですよね..?? 本当にありがとうございました。
565 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 15:10:46 ] > これをみると、Copyはshortcut16451とありますが、これは CTRL+Cでいいんですよね..?? そう
566 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 08:18:38 ] お前ら、SpTBXLibの2.0が出てますよ ttp://club.telepolis.com/silverpointdev/index.htm 2.0からTBXが不要になりました
567 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 11:44:46 ] SetLength(S, $7FFFFFFF)とやるとAccessViolationが でます。Delphiは境界テスト?もろくに行われていない製品なのでしょうか? SetLength(S, $7FFFFFFF - 10)でやっと「メモリ不足」というエラーがでます(これは 別にいいんですが)。10というのはどっからきてるんでしょうね。参照カウンタと長さ用の領域に 8バイト、終端文字に1バイト、あと?
568 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 11:48:42 ] Delphiは境界テスト?もろくに行われていない製品なのでしょうか? Delphiは境界テスト?もろくに行われていない製品なのでしょうか? Delphiは境界テスト?もろくに行われていない製品なのでしょうか?
569 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2008/05/06(火) 13:05:03 ] |,,∧ |゚Д゚彡 |⊂ミ >>567 さん ほんとうだ。。よく気がついたね。
570 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 13:46:54 ] あるいはメモリマネージャ側のエラーかもな
571 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 13:55:56 ] 今試せないけど、データ型が大きすぎとかでそんなエラーになるとオモッタなあ。違うの?Sがなんだか知らんが
572 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 14:36:26 ] 型が大きすぎでAccessViolationはねーよw
573 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 15:44:02 ] ソース見ればアクセス違反が出るまでの経緯が分かるけど、単にチェック不足だな。 要求メモリ量が負になっても気にせず続行する男気あふれるコードだ。
574 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 18:33:32 ] TSaveDialogでOptionsのofShowHelpをTrueにするとヘルプボタンが表示されますが どのイベントでひろえば良いのでしょうか。
575 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 21:14:47 ] WM_HELPを拾えばいいんでない?
576 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 23:15:22 ] 質問です^^ デルファイ7使ってるんですが 「元に戻す」(アンドゥ)ってどうやるんでしたっけ 先日分からなくて諦めました 3作業前に戻るとか出来ないんですかね^^;;;;;;
577 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 23:17:48 ] 7では無理
578 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 23:35:45 ] >>577 まじでぇえええええ^^ あり;;
579 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 09:30:11 ] >>575 ダイアログを表示しているフォームのOnHelpでも、TApplicationのOnmessage でMsg.messageをWM_HELPで判定しても procedure WMHelp(var msg: TMSG); message WM_HELP;をprivateで宣言して やってもひろえていないようです。どうして?
580 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 11:21:00 ] >>579 TApplication.HandleにRegisterWindowMessage(HELPMSGSTRING)で送られてるみたいだが
581 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 16:08:54 ] >>580 ありがとう。でも分からなかったです。とほほ
582 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 17:25:29 ] >>581 WinspectorとかでTApplicationの持つウィンドウのメッセージ監視すれば引っかかるはずだよ。 TApplication.OnMessageでは引っかからないからTApplicationのウィンドウをサブクラス化しないと受け取れないかも。
583 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 20:07:13 ] というかダイアログのHelpContextを設定しておけば Application.HelpFileで指定しといたヘルプ (の該当するトピック)を開いてくれるんだが。 それ以外のことをやりたいわけ?
584 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 07:27:53 ] TApplicationのウィンドウプロシージャーなら、Application.HookMainWindowでOK. WM_COMMANDもどこかのウィンドウに送られている。(ダイアログのトップレベルのウィンドウかも)
585 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 08:10:53 ] 色々ありがとうございます。ちなみにHTMLヘルプなもんで…HelpContextでは うまくいきませんでした。それから Application.HookMainWindow も少しだけ 試したんですが。もう少し気合入れて調べてみます。
586 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 22:12:24 ] TBXを配布しているサイトが見れないのですが、TBXを再配布しているサイトはないのでしょうか?
587 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 22:34:11 ] 微妙にバージョン違い? ttp://www.torry.net/pages.php?id=16#7246
588 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 22:54:06 ] ありがとうございます 使ってみます
589 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 02:44:36 ] type TSettings = class published property Min: Integer; property Max: Integer; property Text: String; property Switch: Boolean; end; といったプロパティをINIファイルに自動的に読み書きさせるコードのサンプルってないのかな。 WriteComponentだとプロパティの追加削除ですぐ例外吐くから使えない。
590 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 03:55:41 ] そのWriteComponent内で呼ばれるTWriterのコードでも見たら? まさにそのものをやってるメソッドがあるから
591 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 04:46:57 ] TPersistentから継承しなくても良かったっけ?
592 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 05:04:16 ] 誰か例のTGifImageの脆弱性なおしておくれ
593 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 08:06:58 ] JaneStyleはTGifImageを修正してるみたいですね
594 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 09:37:06 ] gifimage.pasの5992行から while (code >= ClearCode) do begin //ここから if UINT(Source) > UINT(@stack[High(stack)]) then begin Dec(Source); Result := Source^; Exit; end; //ここまで Source^ := table1[code]; 検証お願いします
595 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 11:04:57 ] >>594 行けたぜGJ! でも俺の場合5873行なんだがこれはバージョンの違い? 一応2.2なんだが・・・
596 名前:Zzz [2008/05/09(金) 11:24:39 ] 質問お願いします Delphi7なんですけど (最大化最小化閉じるボタンを非表示などをした)Formを 同プロジェクト内の別のFormでも使いたくFormごとコピーして 使用したいのですがコピーやり方がわかりません どうやれば実現できるのでしょうか???
597 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 11:37:16 ] ExplorerでForm1.pas/.dfmをForm2.*にコピー&リネームして ファイル内のユニット名、クラス名、Nameプロパティ名を調整。 フォーム上のコンポーネントやプロパティの設定は.dfm イベントハンドラ等のコードは.pasにあるから適当に切り貼りしてもいいかも。 名前をつけて保存でForm2とかやっちゃうとForm1が破棄されForm2を使い出すからわけわかってないと悲惨なことに。 IDEでは使いまわし支援でリポジトリなるものをサポートしているけどほとんど使ったことない。 活用してる人っているのかね。 なんにしてもプロジェクト全体のバックアップをしてから試したほうがいいかもね。
598 名前:Zzz [2008/05/09(金) 11:40:36 ] やはり意外と、つらそうな道のりですね 了解しました 地味に作成しようと思います リポジトリの使用方法も忘れてつつあるので・・・ ありがとうございました
599 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 11:40:40 ] うちは5846行目だった TGIFSubImgae.Decompressプロシージャ内のNextLZW関数内だよね?
600 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 12:45:27 ] ver2.2のNextLZWの中です ASSERT(Code < TableSize, 'Code too large'); while (code >= ClearCode) do begin //ここから if UINT(Source) > UINT(@stack[High(stack)]) then begin Dec(Source); Result := Source^; Exit; end; //ここまで Source^ := table1[code]; Inc(Source); if (code = table0[code]) then Error(sDecodeCircular); code := table0[code]; ASSERT(Code < TableSize, 'Code too large'); end;
601 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 13:17:57 ] >>596 継承して使うと似たようなフォームで少しだけ違うような場合に便利だよ ファイル⇒新規作成⇒その他 で出たダイアログのタブの今のプロジェクト内から Form1を選んで 下の ・継承 を確認して [OK]
602 名前:Zzz [2008/05/09(金) 16:50:32 ] たびたびすいません 質問です リストボックスやコンボックスのItems欄に選択「文字」を追加する 方法が分かりません ・・・と書くとItem addとか思われると思いますが、もう一歩進んで その追加したを随時に追加し、且つ保存したいのです プログラムを終了させる、プログラムを起動させる 「追加したデータが消えてる(涙・・・」 どうやれば保存できるのでしょうか 最終的には、マイナーなコンポーネントに対し保存したいのですが 基本のリストボックスやコンボックスのやり方を教授していただければ 自分で考えますので(当たり前ですけど)ヒントの程お願い致します
603 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 17:09:42 ] 終了時にファイルに保存して起動時にファイルから読み込む。
604 名前:Zzz [2008/05/09(金) 17:23:32 ] >>603 おしい それも一つの手ではあるんですが、最終的にコンポーネントの Items欄に追加したいのでItems欄に保存する方法はないのかと 言うのを知りたいのです
605 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 17:31:18 ] 質問する前に日本語を勉強する
606 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 17:41:48 ] いまいちよくわからないがexeのどこかに保存されているであろうItemsのデフォルト値に対して保存・読み出ししたいってことか? もしそうなら、コンパイルする度に値が吹き飛ぶぞw
607 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 18:42:09 ] そういうことができるなら ini ファイルはいらんがな・・
608 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 18:57:18 ] リソースを書き換えたいのか? 出来るだろうが、なんでiniファイルは駄目なんだ?
609 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 21:18:12 ] 少なくともコード書いて試して 603 に対して「おしい」とかいってるのか? const DatEx='.dat'; var ListDat:string; procedure TForm1.Button1Click(Sender: TObject); begin ListBox1.Items.Add(Edit1.Text); end; procedure TForm1.FormCreate(Sender: TObject); begin ListDat:=ChangeFileExt(Application.ExeName,DatEx); if FileExists(ListDat) then ListBox1.Items.LoadFromFile(ListDat); end; procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin ListBox1.Items.SaveToFile(ListDat); end; ちなみにみんなの言っている「日本語でおk」は 「Items欄に保存」ってのがわからんってことだぞ
610 名前:Zzz [2008/05/09(金) 23:16:25 ] >>609 むむー ListBox1.Items.SaveToFile(ListDat); で行けるかも えっと Items欄に保存ってゆうのは・・・・・・ コンボボックスとかは、選択肢をItems.Addしなくても事前に入れて置けるじゃないですか(うろ覚えすまん) あれってPgで、あるボタンを押した時のイベントでItems.Addして追加しても、 Pg終了して、再度Pg再開してコンボボックスの中見ると消えてるじゃないですか(あたりまえですけど) つまり、そのItems欄の中にデータを残しておきたい訳です (↓コンボの中) にんじん だいこん トマト ↓(いもを追加) (↓コンボの中) にんじん だいこん トマト いも ↓(システム落として再起動) (↓コンボの中) にんじん だいこん トマト (がーん いもは・・・・・)
611 名前:デフォルトの名無しさん [2008/05/10(土) 00:01:24 BE:348454-PLT(12660)] iniかレジストリ使うのが普通じゃね?
612 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 00:55:11 ] 自分で言ってるけど消えるのは当たり前なんです そういうのは外部のファイルに記録しておいて 再開したときに読み込むのがいいと思います
613 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 07:42:56 ] だから、設計時に追加した情報は、コンパイルするとリソースとしてexeに含まれるの。
614 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 10:03:01 ] TIniFile使ってやるのが一般的じゃね? >>610 の気持ちもわからんではないが・・・逆にIDEで初期値を入れられるだけでも便利と思え! ListBox1.Items.Commatext:=ReadString('ListBox1','Items',''); WriteString(ListBox1','Items',ListBox1.Items.CommaText);
615 名前:デフォルトの名無しさん [2008/05/10(土) 10:27:37 ] dfmファイルを外部に持たせればOK.
616 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 11:28:00 ] 彡川三三三ミ 川出 ::::::⌒ ⌒ヽ パクリ星からやってきたお! 出川::::::::ー●-●-) ..川(6|:::::::: ( 。。)) パクリ星の王子様の◆Style/kK.sだお! 出川;;;::∴ ノ 3 ノ ノ\_;;;;;;;;;;;;;;;;ノ Janeスレ荒らしてるヒキコモリだから友達できないお! ( * ヽー--'ヽ ) (∵ ;) ゚ ノヽ ゚ ):) チンポは極小で包茎だお!!ちなみに童貞だお!! (: ・ )--―'⌒ー--`,_) (___)ーニ三三ニ-) (∴ ー' ̄⌒ヽωニЗ 好きなものは他人のソースとオナニーとwarezだお!! `l ・ . /メ / ヽ ∵ /~- /. 今日もたくさんソースパクリまくるお!! (__)))))_)))))
617 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 14:33:41 ] >>566 おー、Sliverpoint乙
618 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 15:14:34 ] >>587 今頃で申し訳ないんですがエラーが出てインストール出来ません・・・ d6perだからですかね?proだとインストールできるんでしょうか
619 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 16:15:29 ] >>618 alpha版はdel7から対応だったように思う 2.1beta1↓ ttp://www.fileup.org/fup183413.zip.html TB2Kのパッチは自分で探してね
620 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 16:15:47 ] >>619 passはtbx
621 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 16:22:52 ] >>619-620 わざわざうpしていただいてありがとうございます! インストールしてみます
622 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 16:46:04 ] インストールできました! ありがとうございました!
623 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 18:24:43 ] インストールできたのはいいんですがメニューがボタンのようになってしまいます・・・ これじゃ当初の目的が達成できないのですが、どのようにすれば普通のメニューのように出来るのでしょうか
624 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 18:28:59 ] すみません、自己解決しました・・・
625 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 18:30:40 ] わけわかんねー事言ってんじゃねぇよタコ 小学生からやりなおせ
626 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 19:07:00 ] 今小学5年生です・・・・
627 名前:デフォルトの名無しさん [2008/05/10(土) 19:15:49 ] 「相撲」って人気有るんだな 映画化されて・・・と思った・・・おれは小学生からやり直すべき?
628 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 19:17:12 ] 相模だろw
629 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 19:18:37 ] 意味の解らない俺はどれからやり直せばいいんだ?
630 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 20:02:46 ] アセンブラからだろ とーぜん
631 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 20:30:43 ] 精子から
632 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 20:42:11 ] Office2007でコンテキストメニューを表示したとき その上にツールバーも一緒に表示するUIが何気に便利なんだけど あれどうやって実現するんだろう。
633 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 21:24:25 ] 実現も何も・・ただそういうウィンドウを表示してるだけだよ。
634 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 03:52:32 ] うまく言えないんですがエスケープシーケンスのある文字列を変換するにはどうすればいいんでしょうか たとえばabc\ndefという文字列があった時に abc#10def(#10はもちろん文字列としてではなく)に変換するみたいなのです
635 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 03:56:24 ] お願いします。APIを使ったプログラムに不自由してるくらいの実力の者です。 d.hatena.ne.jp/Wacky/20080114/1200315830 ここのサイトの通りにTMemoに検索をつけてみたんですが、検索方向が下向きに検索できるのですが、上向きには検索できません。 どうすればできるようになるのでしょうか? ちなみに環境はWindowsXPHome,Delphi5Proです。
636 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 05:17:38 ] >>634 つStringReplace >>635 TFindDialog.OptionsにfrDownが設定されているかを確認して 自分で切り替える必要があります
637 名前:634 mailto:sage [2008/05/11(日) 05:27:03 ] >>636 一応\nだけではなくて\tとか漢字とかもエスケープされてるようなので使えないです・・・
638 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 07:56:46 ] >>637 つ正規表現 TRegExp
639 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 08:09:33 ] function DecodeEscStr(const s: string): string; var i: integer; begin Result := ''; i := 1; while i <= length(s) do if s[i] in LeadBytes then begin Result := Result + copy(s, i, 2); inc(i, 2); end else begin if s[i] = '\' then begin inc(i); case s[i] of 'x':try Result := Result + char(StrToInt('$' + s[i + 1] + s[i + 2])); inc(i, 2); except end; 'b': Result := Result + #$08; 'a': Result := Result + #$07; 'f': Result := Result + #$0C; 'r': Result := Result + #$0D; 't': Result := Result + #$09; 'v': Result := Result + #$0B; 'n': Result := Result + #13 + #10; else Result := Result + s[i]; end; inc(i); end else begin Result := Result + s[i]; inc(i); end; end; end;
640 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 08:11:02 ] >>634 はもしかして C言語スタイルの \ エスケープでエンコードされた 文字をデコードしたいって事じゃないかと思ってサンプルコードを書いてみた
641 名前:634 mailto:sage [2008/05/11(日) 08:27:34 ] >>638 TRegExpは何だかさっぱりであまり使ってません・・・ >>639 ,640 ありがとうございます 元のプログラムはCのようなのですがそれの仕様が良く分からないもので・・・ 一応「テスト」という文字が「\83e\83X\83g」になるということは分かってます
642 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 09:08:54 ] それは独自仕様って事だね。 'x':try Result := Result + char(StrToInt('$' + s[i + 1] + s[i + 2])); inc(i, 2); except end; この部分を '0'..'9' , 'A'..'F':try Result := Result + char(StrToInt('$' + s[i ] + s[i + 1])); inc(i); except end; とすれば、その部分には対応すると思うけど、他にも違いがありそうだね。 仕様が判ってるのはあなただけだから、自分でやってね
643 名前:634 mailto:sage [2008/05/11(日) 09:26:00 ] >>642 それで出来たようです! ご迷惑かけました! そしてありがとうございました!
644 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 12:15:59 ] フォームのボタンなどのキャプションに付けるアクセラレータって言うんでしょうか (&A)みたいにするとAltキーとAを一緒に押すとクリックされるやつですが、 コントロールが多くなってくると、どれが使われていないのか探すのが大変です。 便利なワザみたいなの、ありませんでしょうか。
645 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 12:40:14 ] ActionList
646 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 13:24:12 ] 適当に書いてみたが何気に便利かも・・・ 表示をまともにしてコマンドラインツールにして外部ツールとして実行できると使い物になりそう。 オープンダイアログで調べたいフォームのdfmファイルを指定するとこんな感じで出る。 C: Caption = '&ClickMe!' C: Caption = 'Button1(&C)' F: Caption = #12501#12449#12452#12523'(&F)' R: Caption = '&Run' X: Caption = #32066#20102'(&X)' procedure TForm1.Button1Click(Sender: TObject); var dfm, res: TStringList; i, idx: Integer; begin OpenDialog1.InitialDir := ExtractFilePath(ParamStr(0)); if not OpenDialog1.Execute then Exit; dfm:= TStringList.Create; res := TStringList.Create; try dfm.LoadFromFile(OpenDialog1.FileName); for i := 0 to dfm.Count-1 do begin idx := AnsiPos('&', dfm[i]); if idx > 0 then res.Add(UpperCase(dfm[i][idx+1]) + ':' + dfm[i]); end; res.Sort; ShowMessage(res.Text); finally dfm.Free; res.Free; end; end;
647 名前:デフォルトの名無しさん [2008/05/11(日) 18:17:09 ] 質問です。 TMemo に長いテキストを読み込ませたいのですが LoadFromFile で一気に読み込むと一瞬フリーズしたようになります。 そこで、スクロールに合わせて小分けに読み込むようにしたいのですが何か良い方法はありませんか?
648 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 18:50:47 ] >>647 マルチスレッド
649 名前:デフォルトの名無しさん [2008/05/11(日) 19:08:34 ] >>648 お答えありがとうございます。 ですが、メモリを節約して小分けに読み込み表示してスクロールバーの振る舞いはファイルサイズに合ったものにしたいのですが、どうにかなりませんか?
650 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 19:23:38 ] はなっからスクロールバーを適正サイズにしたいってこと?そりゃ無理。どれだけの行数があるのかは 読み込んでみないとわからないっしょ?
651 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 19:26:12 ] >>650 確かにそうですね。妥協することにします。 >>647 終了です。ご回答くださった方ありがとうございました。
652 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 07:36:01 ] TStringListにいったん読み込めばいい。