[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 08/13 11:51 / Filesize : 238 KB / Number-of Response : 924
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

くだすれDelphi(超初心者用)その46



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にいったん読み込めばいい。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<238KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef