1 :
デフォルトの名無しさん :
2006/05/23(火) 19:07:57
2 :
デフォルトの名無しさん :2006/05/23(火) 19:08:59
2 とったぞー
4 :
デフォルトの名無しさん :2006/05/23(火) 19:09:41
5 :
デフォルトの名無しさん :2006/05/23(火) 19:10:19
おk立てたぞ ではどうぞ↓
6 :
デフォルトの名無しさん :2006/05/23(火) 19:19:33
>>1 おつかれさまです。
999を再投下させていただきます。
すいません上で書いた者ですが、サーバーが繋がっていない時にSocket.SendTextで例外が発生しないのは仕様なんでしょうか?D5です。
procedure XXXX(var message: TMessage); message WM_XXXX; procedure XXXX(var message: TMessage); begin message.Msg := WM_HOGE; end; WM_XXXXを処理させたくないのですが、 こんなふうに勝手にメッセージを変更してもいいのでしょうか?
ダメ。とりあえずコメントにしておけ。
procedure XXXX(var message: TMessage); begin // end; これでいいの? ありがとう
それ何か意味あるんか? あとメッセージメソッドは inherited しとけ。
普通にinheritedしたらメッセージ処理しちゃうじゃん message.Msg := WM_NULL; inherited; とかすればいいのでは
>>6 ヘルプから
非ブロッキングソケットの場合,データは独自の内部バッファを持つ WinSock DLL に送られます。
WinSock が追加のデータを受け付ける場合,SendBuf はキューにあるバイト数を直ちに返します。
WinSock の内部バッファスペースが送信されるバッファを受け付けられない場合,SendBuf は -1 を返し,
キューにはデータが入りません。
この場合は,WinSock がすでにキューにあるデータを送信する機会を得るのを少し待ってから,再試行します。
ブロッキングソケットの場合,SendBuf は実際に書き込まれたバイト数を返します。
接続への書き込み中にエラーが発生した場合は,SendBuf は接続を終了し,ESocketError 例外を生成します。
非ブロッキングにしているのなら仕様です。
OnErrorが発生しなければ送信できたものと解釈してください。
14 :
デフォルトの名無しさん :2006/05/24(水) 10:21:55
>>13 やはり仕様なのですね。
ブロッキングにする方向で考えてみたいと思います。
ありがとうございました。
DelphiだとInt型の数値を表示するときは IntToStrで変換しないといけんの? C言語みたいに%dや%fみたいな自動的に変換してくれる(?)記号はないの?
つ Format
IntToStr() は Format() の簡易版、だよね
Thx・・・ Writelnでいろいろやってみたんだが Writeln(111)はちゃんと動くし Writeln('Hello,World')もうごくんだね。。。 で、ちょっと今コンソールアプリケーション作ってるんですが 十進数を二進数に変えるプログラムなるものを勝手に作ってみた var i,j:integer; begin i:=9; While i<>0 do begin j:=i mod 2; writeln(j); i:=(i-(i mod 2)) div 2; end; readln; end. たとえばこれで実行したら 1 0 0 1 って縦に表示されちゃうんだけど 1001っていう風に横に表示させるにはどうすればいいの・・・
>17 違いますよ?
writelnじゃなくてwriteという関数を使うんだ。
∫,,,,,,,,,∧,,∧ ⊂,,,,,,,,,つ,,゚Д゚ミつ 前スレのこれ。 > 985 名前:デフォルトの名無しさん[sage] 投稿日:2006/05/23(火) 16:04:28 ID: > 実行中アプリのフルパスからトップレベルウィンドウのハンドルを得るにはどうすればいいでしょうか? > 988 名前:985[sage] 投稿日:2006/05/23(火) 17:03:59 ID: > テキストファイルにアプリのパスをずらずらっと書いてだ > そやつらにWM_CLOSEを送って終了させたい訳だ。 > んでWM_CLOSEをPostMessageする為にはウィンドウハンドルがいると。 > あらかじめクラス名とかを調べておくのは面倒なのでフルパスからなんとかトップレベルウィンドウのハンドルが得られないかと。 > EnumWindowsとかやってみたんだがどれがトップレベルウィンドウかコードから判別する方法が知りたい訳だ。 > パスが一致する物全てにWM_CLOSE送ってもいいんだが、かっちょ悪いっしょ? > 989 名前:名無し募集中。。。[sage] 投稿日:2006/05/23(火) 17:14:50 ID: > テキストファイルにずらずらっと書いたアプリを > CreateProccess使って自前で起動したのなら > プロセスIDからウィンドウハンドル取得が出来る > そうでないなら俺もやり方知らんから > 知ってる人いたら教えて欲しい > 990 名前:デフォルトの名無しさん[sage] 投稿日:2006/05/23(火) 17:18:56 ID: > CreateToolhelp32Snapshot は使えないかな 発想を変えて、Windowをすべて列挙して プロセスパスを求めて、そいつが該当したらWM_CLOSEを送信する。 トップレベルウィンドウはWindow列挙してOwnerなしとかの条件で タスクマネージャーのタスク表示と互換にしとけばいいんじゃないの?
∫,,,,,,,,,∧,,∧ ツコトデ ⊂,,,,,,,,,つ,,゚Д゚ミつ たぶん、Win2K以降。 function GetProcesFileNameFromWinHandle(Handle: hWnd): String; var PID: Cardinal; SnapShot: THandle; ModuleEntry32: TModuleEntry32; begin Result := ''; // ハンドルから作成スレッドを調べてプロセスIDを得る GetWindowThreadProcessId(Handle, PID); // TModuleEntry32構造体の初期化 ModuleEntry32.dwSize := SizeOf( TModuleEntry32 ); // システム中の情報のスナップショットをとる SnapShot := CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, PID); try // 最初のモジュールの検索 if Module32First( SnapShot, ModuleEntry32 ) then Result := string( ModuleEntry32.szExePath ); finally CloseHandle( SnapShot ); end; end;
∫,,,,,,,,,∧,,∧ ワスレテタ ⊂,,,,,,,,,つ,,゚Д゚ミつ 備考: uses TLHelp32; 参考:[Delphi:70691] Re: 実行ファイルのフルパスの取得(win2000)
>20さん できますた!ありがとんです
25 :
デフォルトの名無しさん :2006/05/24(水) 23:28:51
lnは改行して表示だっけか >Writeln(111)はちゃんと動くし >Writeln('Hello,World')もうごくんだね。。。 が動くのはoverloadされてるから
>>21 ,22,23
フサフサヌコタソあんがとさん。
んで今まさにそのなんちゃらsnapshotとウィンドウ列挙で色々やってる所なんだが(Halbow氏の所のとググリ先で拾ったソース合体で)
>>トップレベルウィンドウはWindow列挙してOwnerなしとかの条件で
>>タスクマネージャーのタスク表示と互換にしとけばいいんじゃないの?
↑これで詰まってる所(´・ω・`)トップレベルウィンドウ"だけ"の列挙ムズス。
条件をきつくするとリストアップして欲しいアプリが漏れ、ゆるくすると大量のウィンドウがリストアップされる。
例えばJane2ch.exeならウィンドウクラス名がTApplication以外のウィンドウが54個!!
unDonut.exeならメインウィンドウ以外が21個!!も列挙されてしまう。
ちょっち諦めムードが漂ってきた所。
WS_EX_APPWINDOWが付いてるか確認するんじゃ駄目だった?
Owner なし、Visible である、って条件だけでかなり、タスクバーの数に近づくはずだけど。
∫,,,,,,,,,∧,,∧ ヌコタンですが ⊂,,,,,,,,,つ,,゚Д゚ミつ Owner なし、Visible である、 WM_GETTEXTで文字がある、 ([Windows タスク マネージャ]や[Program Manager]じゃない) ってのでタスクマネジャ互換だよ。
∫,,,,,,,,,∧,,∧ そいえば ⊂,,,,,,,,,つ,,゚Д゚ミつ EnumChildWindowsは必要ねーぞ。 EnumWindowsで十分。 列挙コードに問題があるんちゃうかと。
|,,∧ トコロデ |゚Д゚彡 漏レモ質問 |⊂ミ エエカ? | ミ |`J THotkeyでWinキーも認識するように するにはどうしたらええん?
MSDN を読んだ限りでは無理っぽいが
>>30 >>列挙コードに問題があるんちゃうかと。
どう考えても列挙コードに問題ありのようです。
ちょっち改造実験中。
つうか、理解出来ていないコードがあるのがそもそも問題っぽいw コールバックとか。
>>31 俺も気になる。
ランチャーとかでWinキー対応しているのもあるからな。
>>22 こういうコードとか フック系のAPIの紹介コードは 作成罪が成立したら注意しないといけないね
InputBoxのようなダイアログを自前で作っています。 EditBoxに入力してエンターキーを押すと OKボタンを押してフォームを閉じるという処理を行っているのですが、 Winの警告音が鳴って閉じる現象をどうにかしたいです。 改行出来ないEditBoxで改行しようとして警告されているのは分かります。 どうにかしてEditBoxで出来ないでしょうか? procedure TDiarogForm.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_RETURN then begin OKButton.SetFocus; OKButton.Click; end; end;
ヒント:var Key
>>37 OKButton.Default := True;
>>35 それって MSDN の例を Delphi に移植しただけだし、フックだって似たようなもの。
それがひっかかるようだと MSDN は閉鎖だな
TQueryで取得したフィールドがNULLかどうかを調べる方法は無いでしょうか? 具体的に言うと、 var query: TQuery; begin query := TQuery.Create(nil); query.DatabaseName := データベース名 query.SQL.Add('SELECT foo, bar FROM hoge'); try query.Open(); ※1 finally query.Close(); query.Free(); end; end; 上記のコードでフィールドfooとbarがNULLのときの処理を書きたいのです
if query.FieldByName('foo').IsNull then
44 :
42 :2006/05/25(木) 19:09:24
IsNullなんてものがあったのか・・・ IDEの入力候補に出てこなかったからてっきり無いものだと思ってました(;´Д`) つまらん質問でスレ汚してごめんなさい。お騒がせしました
delphi今日からはじめました。 くだらnことだが、repeat文なんですけど、 複文であってもbegin-end要らないらしいですが、それはなぜですか? 文法や変数の型にうるさいといわれるPascalなのにそういうことには ルーズなんですね。
repeatと書いたら必ず例外なくuntilがあるから
>>46 でもbegin endつけても問題ないんでしょ?
begin end;なんてどこに書いたって処理されるでしょ ただbeginの数とend;の数が合わなかったら怒られるけど。 procedure TForm1.Button1Click(Sender: TObject); begin begin begin begin showmessage('あほー'); end; end; end; end; end. こんなコードも余裕で通る
そりゃ単文でも複文でも入るから当たり前でしょ
クラス名を文字列で受け取って、そのクラスのインスタンスを作成することは出来ますか? 以下のような事をしたいのですが・・・ var A:TObject; begin A := CreateForClassName('TStringList');
できません。
即レス感謝です やっぱり無理ですか。 DMS使ってスクリプト上でなら実現できそうな気がしてきました・・・が、 素直に諦めます;
>>52 その調子でDelもやめて、
他の将来性のある言語にシフトしましょう。
よろしくお願いします。
Delphi6PersonalとTntコンポとIndyを使って
フォーム上にWebページ(文字コードUTF8N)のソースを表示しようと思い、
var
Html : WideString;
begin
Html := IdHTTP1.Get('
http://hoge.com );
TntMemo1.Text := Html;
end;
こういう風に書いたんですが、文字化けまくりです。
あと何を書けばよいのでしょうか?
>>50 RegisterClasses してたり、
実行時型情報を持っていれば可能
GetClass/FindClass でヘルプを見るといい
FindClass は GetClassを呼んで、nilなら例外を出すだけ
ソースを持っていればClasses のTReader.GetFieldClass で使ってる
おかげさまで自作プログラムのボタンは無事押せました。 返信いただいた皆様有難うございます。 今度は親ウインドウのキャプションがバージョンアップで変わってしまう アプリケーションなんですがどうしたらこのハンドルを取得できるのでしょうか? hWindow := FindWindow('TMainForm',''); hChild := FindWindowEx(hWindow, 0, 'TBitBtn', '開始'); 例えばこんな感じでやってみたのですがhWindowには0が入ってしまって・・・ GetWindowTextを使うのかなとも思いますがFindWindowの後に発行してループで回しながら検索するのかなぁ
EnumWindowsでなんとか汁。
FindWindow('TMainForm', nil);
>55 Thxです DelphiMLの39569の記事にサンプル載ってました 要は、クラス名(文字列)とクラス参照を紐付けとくワケですか
>>56 自前のアプリならプログラムのメインフォームのクラス名が
FindWindowの第1引数に指定する値だぞ
という事で実行中アプリのフルパスのみからのトップレベルウィンドウのハンドル取得は諦めました。 列挙条件をきつくすれば確かにある程度のアプリはトップレベルウィンドウだけの列挙に成功しましたが、 どうにも限界があるようなので(自分に)フルパスとウィンドウクラス名を指定する事にしました。 もしうまくいけばプロセスIDが同じ子ウィンドウから導き出されたトップレベルウィンドウのハンドルは 一致して然るべきだが、どうにもうまくいかない。 WM_CLOSEを送るべきウィンドウクラス名を調べていた時に発見した事。 当たり前だろうが、閉じるボタンでHideするようなアプリは終了出来ない。 ObjectDockの、ウィンドウクラス名がObjectDockの物にWM_CLOSEを送ると設定が吹き飛ぶ。 ObjectDockServerに送れば正常に終了される。 これにより、あるフリーソフトで終了させるとObjectDockの設定が吹き飛ぶ事からそのソフトは恐らく パスの一致するウィンドウ全てにWM_CLOSEを送っている疑惑が浮上。 同名の複数プロセスを全て終了させる事からもこれは濃厚である。ってどうでもいいか。 んじゃ、さいなら。
厨房アプリ作成、乙
64 :
デフォルトの名無しさん :2006/05/26(金) 19:39:44
いつも読み書きされているファイルを他のフォルダーにコピーしたいのですが、 これを追記可能モードでコピーするにはどうすればいいのでしょうか?
65 :
54 :2006/05/26(金) 20:06:14
>>59 できました! ありがとうございます!
ところで、UTF8DecodeすればTNTコンポじゃなくても日本語表示されるんですね。
それが意外でした。
>>66 他のプログラムが読み書きしてるファイルを更新可能な状態のまま、コピーするにはどうしたらいいの?
できない。
なぜそんな事が必要になるのか理解すらできない
思い出しカキコですんません。 アニキがDelphiやってて、そんな流れでボクも最近パソコンにインスコしてみたんですが、 初めは5からインストールして、しばらくいじった後、比較的新しいDelphi7を入れました。 それで初回起動のとき、「Delphi5の設定になっています。Delphi7の設定にしてもいいですか?」っていう内容のダイアログがでたので、「はい」って選んだんですが、これでよかったんですかね? 5はもう使っちゃまずいのかな、5と7は同一環境に入れては駄目だったのかな?などと考えてしまう時があるんですが、問題ありませんか?
俺5,6,7入れてるけど何も問題ないよ
>>71 Thanxです。
じゃ、なんだったんだろうな…
使えるなら、このまんまでいきます!
73 :
デフォルトの名無しさん :2006/05/27(土) 12:21:38
>>69 バックアップをしたいのですけど、時々他のプログラムがデータを読み書きしに来るので
エラーになってしまうのですよ。
なので、追記可能モードとかでファイルのコピーが出来ればよかったのですが。
データベースとかだといつも使ってるファイルをバックアップしてそうだけどどうやっているんでしょ?
そもそも変更途中のファイルをコピーしたってバックアップにならないと思うぞ
行列を読み込みたいんだけど・・・Unko[i,j] 8 9 9 9 2 3 3 4 iとjの数の指定なしにどうやったらできる? stringlist.countで列は取得できたけど・・ 行はコンマの数かぞえなきゃだめ? それとももしかしてpascal言語だと一発で読みこめたりする?w
>>75 CVS形式を動的配列に読むってことだろうか
だったら要素数が分からなければムリ
もっと詳しく
空白区切りが欲しいのかカンマ区切りか判らないから両方に対応させるとしたら type TExtArray= array of Extended; function StrToExtArray(s:string):TExtArray; var i,i0,n:Integer; var w:string; begin SetLength(Result,100); i:=1; n:=0; while length(s)>=i do begin while s[i] in[',',' ',#9] do inc(i);//セパレータの連続状態 i0:=i; while s[i] in['0'..'9','.'] do inc(i);//数値連続状態 w:=copy(s,i0,i-i0); if w='' then break; Result[n]:=StrToFloat(w); inc(n); if n>=length(Result) then SetLength(Result,n*2+100); end; SetLength(Result,n); end;
78 :
デフォルトの名無しさん :2006/05/27(土) 18:36:22
VBの.NET化により旧VBの独壇場であったデータベースを利用した小規模なスタンドアローンアプリ市場が空白地帯となった。 驚くべきことに、旧VBのライバルだったDelphiはその空白地帯を戦わずして得ることが出来たにもかかわらず、わざわざ.NET化してしまった。 しかも営業不振でIDE売却という憂き目にすらあっている。 Delphiにとっては明らかにチャンスであるにもかかわらず、この有様である。 まことに哀れみを誘う。
79 :
sage :2006/05/27(土) 23:45:42
.NETリストラ組乙
80 :
デフォルトの名無しさん :2006/05/28(日) 02:29:58
こんばんは。本当の初心者で質問するのも恥ずかしいのですが、1つ教えてほしいことがあります。 画像ファイル(GIF)を表示させる記述をしたのですが、「拡張子gifの画像形式は処理できません。」と エラーになってしまいます。 delphiでは本当にgifは対応していないのでしょうか? それとも別の書き方をすればちゃんと表示できるのでしょうか? 使っているのはDelphi6パーソナルです。 procedure TForm1.Button1Click(Sender: TObject); begin image1.Picture.LoadFromFile('~画像ファイルまでのパス~\risa1.gif'); end;
対応していない。 英語で書かれたGIFのライブラリを使うか、 imgctl.dllを使うか、 どうにか工夫するしかない
「delphi gif」で検索すれば幾つか出てくる ただしアニメーションgifの表示は無理だと思ったほうがいい
80じゃないけど > アニメーションgifの表示は無理 これって無理なの?
>83 Delphiより日本語勉強したら?
>>85 どっか変?それともこういう風に引用しろってこと?
> アニメーションgifの表示は無理だと思ったほうがいい
それなら悪かったです
88 :
デフォルトの名無しさん :2006/05/28(日) 11:54:24
Delphiにgcを搭載して欲しい
89 :
73 :2006/05/28(日) 12:14:34
>>74 いや、そうじゃないんですよ。
変更途中のファイルをバックアップするんじゃなくて、しょっちゅう変更されているファイルのバックアップです。
変更途中のファイルは、相手のプログラムが占有しているので読みにもいけませんよね。
でも、こっちが読んでいるときには相手のプログラムからの書き込みは許可したいってことです。
バックアップしたファイルが若干古くなってしまうのはバックアップできないよりマシなので気にしないです。
>>89 >でも、こっちが読んでいるときには相手のプログラムからの書き込みは許可したいってことです。
このタイミングでは、相手のプログラムにはちょっと待ってもらえばいいんじゃないの?
最近はどんなソフトでも、ひと段落したら Ctrl + F9 をつい押してしまう。
>>90 これは自分でファイルを作る場合ですよね。
>>91 相手のプログラムに待たせる方法なんてあるのでしょうか?
>>93 えっと、今現在、どうやってファイルをコピーしてるわけ?
95 :
91 :2006/05/28(日) 15:08:44
>>93 あー、相手プログラムのソースがなきゃ出来ないね。
(パラサイトで出来なくもないけど)
>>94 バックアップしてないです。。。
なので、きちんと定期的にバックアップしようと思っていまして。
>>96 Delphiで、
1、バックアップしたいファイルを読出+fmShareDenyNoneで開いて
2、バックアップ先のファイルを新規作成で開いて
3、1をメモリに読んで2に書き出すのを繰り返す
98 :
80 :2006/05/28(日) 19:53:21
>>81 ,82
レスどうも有難うございます。
delphi以外なにもやったことがなく、しかも独学なので
2ちゃんの初心者スレだけが頼りです。
どうもありがとうございました。
Paradoxって、もうバージョンアップしないというようなことを聞いたんですが、使うのはやめたほうがいいですか? 未来のOSで動く保証がないってことなんですか?
そりゃいずれ32bitプログラムがサポートされなくなる頃には 使えなくなるだろうが、あと10年は大丈夫だろう。 ただOracleやSQLServerがタダで手にはいるようになった今 あえてParadoxを使う必要があるかどうかは解らない。
Oracleって、有名ですね。 使ってみたいですけど、参考になるDelphi本ってみつからないですね。 Paradoxのなら何冊かみつかってるんですが。 初心者には手が出しづらいです。 MySQLをいれてみましたが、軽くて速くていいですね。 使ってみたいとも思ってますが。
ローカルDBにOracle やSQLServer は重すぎだろ。 Delphi ならInterbase が一番充実していると思うが。 > Paradoxって、もうバージョンアップしない 1995年からね。 > MySQLをいれてみましたが dbExpress だと古いバージョンしか使えないから注意。
Paradox、使います。 SQLとか覚えると他のDBの勉強にもなると思うので。 ありがとうございます。
105 :
デフォルトの名無しさん :2006/05/28(日) 23:23:46
Oracleのフリー版てあるんすか?ぜひ使ってみたい 詳細教えて
つ Oracle Database 10g XE
Express Edition か。
昨日Delphiを始めてみたばかりなんですが 「とりあえずこの辺読んどけ」的なサイトを 教えてくれませんか?
ParadoxってBDEでしか扱えないんじゃなかったっけ?
もしそうならParadoxはやめとけ。
>>103 の言うInterbaseもしくはFirebirdがお手軽かと。
Interbase の日本語PDF マニュアル嫁ば。
Delphiで無料なのはバージョン6だけですか?
Delphiで作成したDLLをCやC#やJAVAで使用することは出来ますか? また、どのようにすれば使用できるんでしょうか?
>>112 Delphi 2005 Personal ドイツ語版
>>113 C ... エクスポートしてある関数を呼び出すだけ
C# ... PInvoke
Java ... DLL をWeb サービス化
C/DelにDLLの区別はない JavaはJNIで相互参照可能 C#はしらね
>>109 すいません&ありがとうございます
そこだけ見落としてました(汗
117 :
115 :2006/05/29(月) 23:23:00
すまそ>114さんが正しい JNIはJavaで使うことを前提に作られたDLLのみだ
2ストロークショートカットを実装したいのですがそういったコンポーネントはありますか? それとも自前で作らないとダメですか?
Delphi用のJNIユニットがある。JavaからDelphiのコードを呼ぶことも逆も可能。 "Delphi JNI"でググれ。
>>118 探してみたが、見つからなかった。
自分で作った方が早いかも。
DelphiのTCP/IPの初歩でよく作られるホスト、ポートを通知して行うチャットツールなようなものがありますよね? あれのサーバー側のプログラムを自宅鯖で常時起動、ポート開けて待機状態にしておいていつでもクライアント側から繋いで チャットができるようにしたいと思ったのですが、可能ですよね? それと、そうした場合自宅鯖の方のセキュリティがなんとなく不安なんですが大丈夫なのでしょうか?
可能 サーバープログラムで使用するポート以外を閉じておけばまず大丈夫
それを考えるのもプログラマー
>>122 つまり100番ポートをサーバープログラムで開けた場合でもそれが原因で不正な進入などが増加することは
無いってことですね?
ありがとうございました
100番ポートを通って進入してきたらどうしょうもないけどなw あと、ポート番号は60000以降を使用すべき
>>123 繋いできたときに特定のメッセージが送られてこなかったら強制切断するとかそーいうことですか?
>>125 60000以降ってのはポートスキャン対策ということでしょうか?
自前のソフトでポート番号を使用する場合は 出来るだけ重複のしない60000台以降を使えって どっかで読んだ、ただそれだけ ちなみに100番はTCPでnewacctに割り当てられてるから使えないな
Delphiと関係ない。
すんません。中級者以上の人のコードをみてると、 procedure hogehoge(hogeparam: boolean; var hogeInt: integer); みたいに手続きの引数の中でvarを入れてるのをみるんですが、これは「扱いはローカル変数じゃないよ」ってことなんですか? 仮に、 procedure hogehoge(hogeparam: boolean; hogeInt: integer); としたときとの違いがイマイチよくわからないんですけど。
はぁ? var つけると、参照渡しになるから、プロシージャ内での変更が呼び出し元にも反映される。 ヘルプ読みなよ。基本中の基本。
procedure Hoge(var iVal:Integer);//参照渡し begin iVal:=1;//WriteLnの結果は'1' end; procedure Hoge(iVal:Integer);//値渡し begin iVal:=1;//WriteLnの結果は'0' end; procedure Hoge(const iVal:Integer);//定数渡し begin iVal:=1;//コンパイルエラー end; var I:Integer; begin I:=0; Hoge(I); WriteLn(I); end;
133 :
デフォルトの名無しさん :2006/05/30(火) 22:58:10
今初級本を読みながら勉強中で、質問が1つあります。 初級本の例題を見ると、classの宣言の部分にあるprocedureの位置が、 以前の例題と今取り掛かっている例題とでは違います。 procedureをclassの宣言のすぐ下(①)とpublicの下(②)に書くのでは、 どのような違いがあるのでしょうか?よろしくお願いします。 type TForm1 = class(TForm) ←以前の例題ではこの辺り(①) Image1: TImage; Image2: TImage; Timer1: TTimer; Button1: TButton; Button2: TButton; Button3: TButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; procedure Timer1Timer(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private 宣言 } public img1 : integer; img2 : integer; state : boolean; procedure check; ←今作業中の例題ではここ(②) end;
>>132 関数でポインタを引数にしたときみたいに呼び出し元もかわるんですね。
constがローカル内では変更できないのは知ってましたが・・
ありがとうございます。助かります。
>>131 偉そうな書き方するくらいなら、ナンも書かんとけや!!!
読んでて気分悪くなるだけだからよ! な? 頃すぞ? プゲラ
態度のよい質問者だな。最近はこんな奴らばかり。
131=132 の可能性はないのか?
一般論としては 131 が正しい。ヘルプ嫁
>>134
ヘルプ嫁ですんだら、このスレいらねーよ プゲラ
漏れも131が正しいと思うぞ。 134は131の2行目が読めなかったのか?
>133 クラス宣言の直下はDelphiのIDEが自動的に書き込む場所なので、 慣れない間は触らない方がよい。 自分で定義するフィールドやメソッドはprivateまたはpublicの所に書くべき。 なお、プログラム的にはpublic扱い。自分で作ったクラスなら何ら問題ない。
質問させてください。 (Hairetsuはinteger型の配列) Hairetsu[1] := StrToInt(Edit1.Text); Hairetsu[2] := StrToInt(Edit2.Text); Hairetsu[3] := StrToInt(Edit3.Text); というようなものがあるのですが、 これをfor文を使ってまとめることはできますか? 試しにfor文の中に、 Hairetsu[i] := StrToInt('Edit' + i + '.Text'); というように記述してやってみたのですが、これだと Edit1.Textの中身ではなく、Edit1.Textという文字列自体を Integerに変えようとしてエラーが起きてしまうのですが、 どのようにすればいいのでしょうか?
var CP:TComponent; begin for i:=1 to 3 do begin CP := Self.FindComponent("Edit"+IntToStr(I)); If(Assigned(CP)then begin Hiretsu[i]:=(CP as TEdit).Text; end; end; end;
>>141 ありがとうございました。
これは自分では思いつきそうもなかった。
143 :
133 :2006/05/31(水) 00:25:33
>>139 どうもありがとうございました。
「プログラム的にはpublic扱い」とか、初心者からみると詳しそうですごいなー、と思います。
また質問するかもしれないので、その時もよろしくお願いします。
大域変数Edit[1..3]:TEdit を宣言してFormのonCreateに Edit[1]:=Edit1; Edit[2]:=Edit2; Edit[3]:=Edit3; でやってた・・
質問の仕方が悪い奴にそれなりのレスがつくのはしょうがない。 ヘルプ嫁で済むならこんなスレいらないし、なんつーか、初心者との対話っていうか触れ合いっていうかコミュニティがいいんじゃないか? ムカつかせるような返事なら最初から書くべきでないと思う。荒れるから。
状況次第ですな。 141の方法は汎用性は高いが、名前で捜しているので効率が悪い。 144はポインタを使っているのでこっちの方がずっと速度が速い。
質問者じゃないけど
>>141 のやりかたってなんかいい事あるんですか?
俺ならたぶんこう書いてしまうと思う
var
i:integer;
begin
for i:=1 to 3 do
hairetsu[i] := strtoint(tedit(findcomponent('edit'+inttostr(i)).text);
end;
> ヘルプ嫁で済むならこんなスレいらないし
そんなことない。
>>131 の説明と
>>132 の例文は、もっと詳しくちゃんとヘルプに
のっている。おそらく
>>130 はヘルプも見てないと思われ。
D6per のヘルプのキーワード に var を入れると一目瞭然。
値パラメータと変数パラメータ
大部分のパラメータは,値パラメータ(デフォルト)か変数パラメータ(var)のどちらかになります。値パラメータは値で渡され,変数パラメータは参照で渡されます。以下の 2 つの関数を例にとって,これを具体的に見てみます。
function DoubleByValue(X: Integer): Integer; // X は値パラメータ
begin
X := X * 2;
Result := X;
end;
function DoubleByRef(var X: Integer): Integer; // X は変数パラメータ
begin
X := X * 2;
Result := X;
end;
どちらの関数も返す結果は同じですが,渡される変数の値を変更できるのは 2 番目の DoubleByRef 関数だけです。これらの関数を次のように呼び出してみます。
(以下省略するがかなり詳しく書いてある)
もうよくね?
>147 ってか普通はEdit1とかそのままの名前で使わないっしょ? そういう場合は>144のようなやりかた(ただしグローバルじゃなくて フォームのprivate変数で)が柔軟でよいのでは?
151 :
デフォルトの名無しさん :2006/05/31(水) 01:42:11
質問のレベルを一気に下げてしまう内容ですが、教えてください。 さっきまで書いていたソースを画面上の緑三角ボタンで実行しようと思ったら、 グレーアウトしていて実行できません。(隣の一時停止ボタンも同様です。) どこか設定を変えてしまったのか、必要なファイルを消してしまったのでしょうか? どうすれば実行できるようになるでしょうか?
コンパイルはF9かCtrl+F9が便利だと思うよ
153 :
151 :2006/05/31(水) 01:53:03
>>152 回答ありがとうございます。
F9とctrl+F9をやってみましたが、今回は反応ありませんでした・・・。
記述した内容が間違いまくっている?とかで、実行できないのかな・・・。
もう一度書いた内容を見直してみます。
再起動すれ
publishedに書けばプロパティとして公開されるからpublicと同じ扱いだと言っているのでは?
StringList型のデータを受け取ときは下のように書いていた procedure hoge(var aList: TStringList); でも、TStringListtって実際はオブジェクトへのポインタだから var付けなくても参照渡しになるんだよね、最近知った。
正しくは、参照の値渡しなわけだが。参照自体を変更したいときはやはり var を つけなければならない。
159 :
デフォルトの名無しさん :2006/05/31(水) 10:50:38
素人な質問で初歩的な質問で恐縮ですが 教えて頂けますでしょうか。 ホイールマウス(真ん中のスクロール用)に対応させたいのですが どのようにすればよろしいのでしょうか? FormのonMouseWheelあたりが関係するのかな?と思いましたが イベントの書き方がよく分かりません。 Memoなどの例で具体的なコードで教えて頂ければ幸いです。
マウスドライバに依存するらしいよ。 俺の環境 Del6Per Win2k USB でないマウス では一行もコード書かなくても TMemo はホイールでスクロールする
>>160 さっそくのレス、ありがとうございます。
Del7+Win2k+PS2(ロジクール)下ではピクリとも動きませんでした…
たとえば2つ以上、スクロール可能なコンポーネントがあった時は
どちらがスクロールするのかしないのか、また同時にケースがあると思うので
基本的には、コードを書かないとダメだと思いますので
恐れ入りますが、引き続きご意見をお待ちしております。
何もコード書かない場合、通常はフォーカスのあるコントロールがスクロール。 フォームのOnMouseWheelでHandledをTrueにすれば、コントロールにはメッセージが行かない。 Del7+WinXP+MSマウス
163 :
デフォルトの名無しさん :2006/05/31(水) 13:14:12
10秒ごとに1足していくっていうプログラムはどうすれば書けますか? TIMEERイベントを10秒にして1+1しても10秒後に2と表示されるだけで その後ずっと2で止まってしまいます。for文使っても10秒後にfor文で指定した 上限の値が出力され結局2で止まってしまいます。どなたか教えてください
Delphi6 の quickreportで、グループが変わったらページ番号のリセットを したいのですが、PageNumberプロパティは読みとり専用で直接書き込めません。 ページ番号をリセットするにはどうしたらよいでしょうか?
>>163 コードが示されないことには返答のしようがない・・・
166 :
159 :2006/05/31(水) 13:43:56
>>162 こちらもレス、ありがとうございます。
ゴメンなさい、初歩な質問で恐縮ですが
> HandledをTrue
と言うのは、どの項目・箇所で指定する物なのでしょうか?
>>165 Label1.Caption := IntToStr(1+1);
こんなふうにやってんじゃね?
168 :
163 :2006/05/31(水) 13:45:46
今こんな感じです。Timerのプロパティの方でインターバルを10000にしてます procedure TForm1.Timer1Timer(Sender: TObject); var k:integer; begin k:=1+1; label1.Caption:=IntToStr(k); end; procedure TForm1.Button1Click(Sender: TObject); begin Timer1.Enabled := True; end; end.
>>166 >フォームのOnMouseWheelでHandledをTrueにすれば、コントロールにはメッセージが行かない。
って書いてあるけどこれの意味が解らない(通じない)の?
フォームの OnMouseWheel イベントの Handled 引数を True にするって意味だと俺は理解したけど・・・
>>168 ローカル変数をいじっても意味ないじょ・・・
>>168 おんなじ事じゃ!
var
k:integer; //←こいつをこの辺にくっつけとけ
procedure TForm1.Timer1Timer(Sender: TObject);
begin
k:=1+1;
label1.Caption:=IntToStr(k);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled := True;
end;
>>168 変数のスコープだけかと思ってたら
他にもおかしいじゃねぇか!!
こいつは
k:=1+1;
こうじゃ!!
k:=k+1;
>>172 そこが最初に突っ込むべき場所だと思うお
1ずつ足すだけなら Inc(k); でもいいんじゃない
175 :
163 :2006/05/31(水) 14:44:59
わー!!超恥ずかしいミス!!みんなありがと!
176 :
159 :2006/05/31(水) 14:57:32
>>169 そうです、超初心者なので意味が分からないです。
申し訳ないです・・・
>>176 procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
Handled := True;
end;
ただし、コントロールにはメッセージが行かない。かは、俺は試してない・・・
178 :
159 :2006/05/31(水) 17:31:14
>>177 重ね重ね、ありがとうございます。
Handled := True; と直接書くとは思いませんでした・・・
それで試した結果ですが、memoはクリアしたのですが
QuickReportは動きませんでした。
どのコンポーネントを動かすか選んでコードを書く方法はあるのでしょうか?
恐れ入りますがよろしくお願いいたします。
>>178 QuickReportは使ったことないのでうまくいくのか解らないけど
フォームの OnMouseWheel イベントでアクティブなコントロールを調べて
スクロールバーの位置を変えれば出来るんじゃない?
>>164 PageNumber は使わずに、自分で変数を用意する。
>>179 QuickReportはアクティブでは調べられないみたいなのでマウス位置で判断すれば出来そうですな
182 :
デフォルトの名無しさん :2006/05/31(水) 21:52:17
TabControl や PageControl の OnDrawTab で自前で描画しているのですが、 選択ページのフォーカスマークって言うんですか、あれを消すには どうしたらいいでしょう。
派生して CreateParams() を override して TCS_FOCUSNEVER = $8000; をセットする
ClientSocket、ServerSocketを使用したTCP/IP通信で連続して通信するときに繋がらないように ClientSocket.Socket.SendText('hoge'); sleep(20); ClientSocket.Socket.SendText('hoge'); といつもやってるのですが、もっとうまい方法は無いでしょうか?
186 :
デフォルトの名無しさん :2006/06/01(木) 09:56:42
>>183 回答ありがとうございます。ちょっと試してみます。
何らかのセパレータ挟んだ方がいいと思うけどね。 ソケット通信で時間的な要素に意味を求めるのは危険というかナンセンスというか・・・ 良くないと思う。
Delphiでメモリーリークが激しいのですが、何かチェックしておくべきことがありましたら教えてください。 容疑者としてはStringlistが一番怪しいのですが、finallyできちんと開放しています。 他は計算とファイル出力のループだけなので怪しいのはいないのですけど、小さなデータを2Mbyteぐらいのテキストファイルに 出力を繰り返すだけなのに3日後に使用メモリ量が180Mbyte超えるとは思えないので。
それだけならソースうpしたほうが早いと思うよ 怪しいと思ってるstringlistはかならず開放してるとか言われてもどうアドバイスしていいかわからない
Delphiで作ったアプリをLinuxで動くようにすることはできますか? また、どのような方法があるのでしょうか?
プラットフォームに依存する処理をしていなければ Kylixで開いてコンパイルするだけで実行ファイル作られる、はず・・・
そのKylixとやらは無料ですか・・?
Delphi7 Enterpriseに付いてきたような
ちょっとふとした質問 コマンドラインで、引数をチェックする関数はありませんでしたっけ。 今は、ParamCountでまわして、ParamStrで文字列比較してます。 Delphiでなくて他の言語でしたっけ・・・
FindCmdLineSwitchなんてのもあるよ
質問です Cの strpbrk と同じ動作する関数はありませんか?
対象の文字列が ' であるかどうか調べたいのですが ' 自体どうやって指定すればよいのでしょうか JavaScriptやPerlみたいに if str[i] = '\'' then .. とかやってみたけど無理でした..。
''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
>201 ありません。 >202 シングルクォートを2つ並べると一文字の'と同じ扱いになる。 この場合なら if str[i]='''' then.....
206 :
202 :2006/06/01(木) 21:19:45
>>205 ありがとうございました。
覚えておきます。
>>205 ないですか・・・
ふぅむ、1つづつ比較するのは面倒ですね。
>>208 自分で作れるならここに質問してません・゚・(ノД`)・゚・
>>209 >ふぅむ、1つづつ比較するのは面倒ですね。
面倒ってことはやり方は分かるんじゃないのか?
>209 実は一つだけ逃げ道があるんだな。 StrPBrkという関数がShlwapi.dllの中にあるので、 これをインポートすればほとんど同じ事が出来る筈。 C言語スタイルなのでString型変数をそのまま使えないけど。
ユニットのinterfaceの最後辺りに、 function StrPBrkA(psz:LPCSTR;pszSet:LPCSTR):LPSTR;stdcall;external 'Shlwapi.dll'; とexternal命令でインポートすればおけ。あとは普通の関数と同じように使える。 なお、これはASCII用の関数。UNICODE用はStrPBrkW。
>>209 glibcとかBSDのlibcからパクってくればいいじゃん。
そのまま使うならBCCで、単純な文字列操作だけだろうからDelphiに書き直すのも簡単。
・・・。 おおぉ、ありがとうございます。 試してきますm(_ _)m
その前に、自力で試したぶんを書きます。 スマートにできるならご教授下さい。 function strpchk (s:string; target:string):string; var TPos, TLen, i, j : integer; str : string; begin j:= Length(s) -1; for i:=0 to j do begin str := copy(s, i+1, 1); TPos := pos(str,target); TLen := Length(target); if TPos <> 0 then Result :=copy(target, TPos, TLen-(TPos-1)); end; end;
あれ・・・? これだったら、見つからなかったら戻り値がないですね・・・
function StrPBrk2(S:String; sTarget:String):String; var I:Integer; begin Result := ''; for I:=0 to Length(S)-1 do begin if Pos(S[I],sTarget)>=1 then begin Result := String(@S[I]); //←ポインタ使ってるんで注意 Exit; end; end; end;
Stringって1..Length(S)じゃなかったけ?
>>218 そそ、0には要素数がはいってるとかなんとか。
ん? 仮に選択文字が100個あったら、100回繰り返すよな while文の方がいいんじゃないか?
Exit
Break じゃなくて Exit ? Breakじゃなくて?
この場合どっちも変わらん
売却されるって話どうなったの?
225 :
デフォルトの名無しさん :2006/06/02(金) 08:52:18
再就職の話どうなったの?
226 :
デフォルトの名無しさん :2006/06/02(金) 09:06:59
VCLにはベクトル演算関連のユニットは含まれていないようですが、 サードパーティ製のライブラリで定番のものは何かありますか?
ない
228 :
デフォルトの名無しさん :2006/06/02(金) 12:33:18
ていうか、あまり深く考えなくても C向けのDLLをインポートして用が済んでしまうので、 わざわざDel用のライブラリ作ろうとする人がいないんだな。 ということで、まずはDLLを探してみることをお薦めしてみる。
229 :
デフォルトの名無しさん :2006/06/02(金) 13:27:33
計算アルゴリズム
ttp://pc8.2ch.net/test/read.cgi/tech/1090227743/939 とするとまぁ、線分は方向ベクトルであらわしておいて内積とるのが無難だね。
いろいろポカがあったんで極力ちゃんと書いてみた。
#include<cmath>
struct Point2D {
double x;
double y;
Point2D(x, y) : x(x), y(y) {;}
};
struct Vector2D {
double x;
double y;
Vector2D(const Point2D& p)
: x(p.x), y(p.y) {;}
Vector2D(const Point2D& p1, const Point2D& p2)
: x(p1.x-p2.x), y(p1.y-p2.y) {;}
Vector2D getUnitVector(void) const;
};
230 :
デフォルトの名無しさん :2006/06/02(金) 13:28:15
940 名前: 子供の頃から忘れ物の多い924 [sage] 投稿日: 2005/10/12(水) 15:10:14 inline double innerProduct(const Vector2D& v1, const Vector2D& v2){ return(v1.x*v2.x+v1.y*v2.y); } inline double norm(const Vector2D& v){ return(innerProduct(v,v)); } inline double abs(const Vector2D& v){ return(sqrt(norm(v,v))); } inline Vector2D Vector2D::getUnitVector(void) const { double absv = abs(*this); return(Vector2D(x/absv, y/absv)); } inline double getRadian(const Vector2D& v1, const Vector2D& v2) { return (acos(innerProduct(v1.getUnitVector(), v2.getUnitVector())); }
231 :
デフォルトの名無しさん :2006/06/02(金) 13:29:55
942 名前: デフォルトの名無しさん [sage] 投稿日: 2005/10/12(水) 15:25:08 >モジュラ演算は無視して良いですか? 結果が-300度とかになっても問題なければ無視してもいい +90度と-90度も 線分の場合は区別する場合と、区別しない場合もあるしね >ベクトルの内積とは、x1*x2 + y1*y2、で良いですか? >absのaとbは何を表すのでしょうか? a,bが判らないのと同じく x1 x2も判らんけど、座標っぽい雰囲気があるなあ 座標じゃなくて方向ベクトルだから線分の終点-始点 でなければいけないよ。 でabsはその方向ベクトルの絶対値 sqr( x2^2+y2^2 )* abs( x1^2+x1^2) 950 名前: 949 [sage] 投稿日: 2005/10/12(水) 16:43:38 ちなみに正確な距離を出したいのではなく遠い近いを比較したいだけならnorm()で十分。 951 名前: デフォルトの名無しさん [sage] 投稿日: 2005/10/12(水) 16:45:04 hypotを使った方がいいよ sqr(dx^2+dy^2) == hypot(dx,dy)
232 :
デフォルトの名無しさん :2006/06/02(金) 18:19:27
Delphi6のアップデート2パックを実行しようとしているのですが、 delphi6update2.exeを実行しても解凍していますの表示は出てくるのですがその後の画面が表示されません。 タスクマネージャーを見るとdelphi6update2.exeはタスクに残っていますが1時間待っても動きません。 D6はもちろん終了させています。 TempFolderに解凍されたUpdate関係のファイルがあったのでそこのSetup.exeを実行しても何も表示されません。 このSetup.exeもタスクマネージャーにはずっと残っています。 これを回避する方法がありましたら教えてください。
234 :
デフォルトの名無しさん :2006/06/02(金) 19:02:30
>>233 もちろんやってみましたが、駄目でした。
ファイルサイズは同じです。
c:\ に置いて実行してみるとか。
ユーザー名に2バイト文字が含まれるとか、そんなので不具合の出るアプリがあったりするが、どうか?
IEだと駄目だと思ってFlashGetで別フォルダにDownLoadしてみたけど駄目でした。
>>235 駄目ぽ。
>>236 デフォルトのフォルダ名ぽ。
もうDel6は使うな、という某のシグナルかもね
>237は未来人。ハルヒと戯れてやってください 非公式パッチ当てたとかは? Del6にあったかどうか知らんが。
>>211 ,212
そういう情報はどこを見ればわかりますか?
243 :
デフォルトの名無しさん :2006/06/03(土) 01:24:53
タイマーを使って心電図のようなグラフィックをつくりたいんですがうまくいきません。 ボタンを押したらタイマーが起動しMoveTo、LineToを使って10秒おきに座標与えて 10秒おきに描かれていくっていうのが理想なんですが何か良い方法ありませんか?
「何がうまく行かないのか」書かないと。
245 :
デフォルトの名無しさん :2006/06/03(土) 01:38:42
Delphi 2005とVB 2005でどちらが優れていますか?
246 :
デフォルトの名無しさん :2006/06/03(土) 01:39:08
今、 procedure TForm1.Timer1Timer(Sender: TObject); begin PaintBox1.Canvas.MoveTo(0,0); PaintBox1.Canvas.LineTo(50,50); PaintBox1.Canvas.LineTo(100,100); PaintBox1.Canvas.LineTo(200,150); PaintBox1.Canvas.LineTo(300,200); みたいな感じで書いていてintervalは10秒おきにしてるんですが私のやりたい事は 時間経過 0秒 10秒 20秒 30秒 座標 (0,0)→(50,50)→(200,150)→(300,200) って感じで10秒おきに折れ線グラフのようなグラフを描画していきたいのですが 上記のコードだと10秒間で、(0,0)→(50,50)→(200,150)→(300,200)の折れ線グラフが一気に描画されてしまいます
初心者向けなら、 var Counter: Integer; procedure TForm1.Timer1Timer(Sender: TObject); begin with PaintBox1.Canvas do begin FillRect(PaintBox1.ClientRect); MoveTo(0,0); if Counter > 0 then LineTo(50,50); if Counter > 1 then LineTo(100,100); if Counter > 2 then LineTo(200,150); if Counter > 3 then LineTo(300,200); end; Inc(Counter);
初心者だって配列使うぐらいできるだろう。それはあまりにもひどい。
251 :
56 :2006/06/03(土) 09:30:41
キャプションが不定の親ウインドウを検索するのはキャプションをnilにしてうまく出来ました! それで次は同じクラスを持つ複数の子ウインドウのうち1つを選択したいのですがキャプションがありません。 選択したいウインドウはTPanelなんですがFSDevで見ても違うのは座標くらい、 その座標も親ウインドウから見た相対座標でないので使えそうもありません。 どうしたらうまく選択できるのでしょうか? よろしくお願いします。
クラス名でも検索できるよ
>>239 そのデフォルト以外のディレクトリを指定する画面すら表示されないぽ。
>>246 TForm1 = class
~~
private
x,y: integer; ←onCreateとかで初期化
PaintBox1.Canvas.MoveTo(0,0);←これはonShowで
あとはtimerイベントの中でLineTo(x,y);の後に次の数値をx,yに代入しておくとか
かな?
256 :
デフォルトの名無しさん :2006/06/03(土) 13:59:53
.jsファイルを開くメソッドってありますか? WinExec(C:\hoge.js, SW_SHOW) とかやってみたんですがダメでした。
普通は、関連付けを利用するなら WinExec() じゃなくて ShellExecute() だろ
実行したいのか? それとも開いて内容を見たいのか?
>>254 再インストールしたほうがいいのかも
ファイルが破損してて読み込めないとか
関連付けられたアプリで開くならShellExecute 開くアプリを指定したいならCreateProcess 中を見たいならテキストファイルだからAssignFileなりTStringList.LoadFromFileなりTFileStream
261 :
256 :2006/06/03(土) 16:48:42
262 :
56 :2006/06/03(土) 17:00:46
>>252 うーん、検索は出来るんですけど押したいボタンのあるウインドウかをどうやって判断するんでしょう?
プログラム可能なら、へなちょこなクラス名にするといい。 可能でないなら、具体例を示さないとアドバイスできない。
264 :
246 :2006/06/03(土) 21:59:53
>>248 さん
返信ありがとう!無事に出来ました!!
ただ、もう一つ悩んでいる事があります。
配列の要素から最大の値を取るものと最小の値を取るものを抽出したいのですが可能ですか?
265 :
246 :2006/06/03(土) 22:01:04
可能ってか、if 文で大小比較するだけ。
267 :
246 :2006/06/03(土) 22:35:23
すいません。言葉足りませんでした。if文でやってるんですけど 配列の要素が300近くあるのでなんか一発で出来るような関数ってないのかな~ と思ってきいてみました! あと246でも書いたんですけど10秒おきにじょじょに描画されるグラフの 最大値と最小値を10秒ごとの値を確認しながら更新するってのをやりたいんですけど うまくいきません。 具体的にはif文で最大値と最小値を模索して表示しているんですが(下記コード参照) if a[2] > a[3] then label3.Caption:=IntToStr(a[2]); if a[3] > a[4] then label3.Caption:=IntToStr(a[3]); if a[4] > a[5] then label3.Caption:=IntToStr(a[4]); これだと10秒後にいきなり最大値と最小値がキャプションされてしまいます。 株ゲームなのでいきなり最高値と最安値が表示されては意味無いので困っています・・。 上で教わったとおりカウンタを使って if Counter > 0 and kabuka[1] > kabuka[2] then label3.Caption:=IntToStr(kabuka[1]); としてみましたが型が合わないと言われコンパイルと降りませんでした。 聞いてばっかですいません。
WideString用のTStringListって有りますか?
まずは文法から覚えるといい if (Counter > 0) and (kabuka[1] > kabuka[2]) then label3.caption := InttoStr(kabuka[1]);
>>251 EnumChildWindows で全部列挙し、それらしいのを探すしかない。
>>267 最大値、最小値の値を保持する変数 max と min を使って、最後に表示した部分と比較
するんだよ。
で、最大値だったら、max にその値を代入する。最小値も同じ。そうすると、更新される
たびに max と min を表示するだけでリアルタイムで最大、最小を表示することが出来る。
プログラミングのコードより、論理を考えたほうがいいよ。
273 :
デフォルトの名無しさん :2006/06/04(日) 00:51:49
教えてください。「procedure ******」というようにメソッドの定義をする場合、 必ず定義の中身はbegin/endでくくる(※①)ものなのでしょうか? それとも場合によってはbegin/endは不要(※②)なのでしょうか? begin・endの使い方を完全に理解できているわけではないため、時々書き忘れてしまいます。 ----------------------------- ①procedure ******; begin ・・・・・・・・・; end; ----------------------------- ②procedure ******; ・・・・・・・・・; ----------------------------- よろしくお願いします。
1
275 :
273 :2006/06/04(日) 01:00:23
どうもありがとうございます。ちゃんと書くようにします。
276 :
デフォルトの名無しさん :2006/06/04(日) 01:35:45
質問させてください。 AとBという画像ファイルがあって、それらが同じ画像かどうかを判別するにはどうしたらいいですか? 作ろうと思っているのは、デジカメの管理ソフトなんですが。 今やってみたのは、TStringListでそのまま読み込んで、 if StrList1 = StrList2 then ~ とやったんですが、同じ画像なはずなのに上手くいきません。
参照を比較してもダメ。中身を比較しないと。 っていうか、それ以前に画像なのにTStringListつかってどうする。
TStringListでやると手軽に開けたんでw 中身の比較というと、どういったのを書けばいいですか?
バイナリの比較でいいなら var Mem1, Mem2: TMemoryStream; begin Mem1 := TMemoryStream.Create; try Mem2 := TMemoryStream.Create; try Mem1.LoadFromFile('Hoge'); Mem2.LoadFromFile('Hige'); if (Mem1.Size = Mem2.Size) and CompareMem(Mem1.Memory, Mem2.Memory, Mem1.Size) then ShowMessage('同じだタコ') else ShowMessage('ちげーよカス'); finally Mem2.Free; end; finally Mem1.Free; end;
end; がいっこ足りんかった
281 :
デフォルトの名無しさん :2006/06/04(日) 03:03:12
ありがとうございます。できました。TMemoryStreamという便利なのがあるんですね。 知らなかったんで、いちいちBMPに保存してRGBを調べないといけないのかと思ってました。
282 :
56 :2006/06/04(日) 09:12:16
>>271 有難うございます
またも新しい関数なのでmsdn見ながらいろいろやってみます。
283 :
デフォルトの名無しさん :2006/06/04(日) 19:09:36
前スレで他のアプリを強制的に終了させるのはWM_TERMINATEって言われたんだけど、そんなコマンド無いって怒られてしまいます。 WM_CLOSEで終了できないアプリを終了させるにはどうすればいいのでしょうか?
WM_CLOSEをシカトするアプリに強制退去を願うなら DestroyWindowで無理矢理ぶっ壊すとか?
TerminateProcessに終了したいプロセスハンドルをセットして実行汁。 プロセスハンドルはOpenProcessでPIDをセットして取得する。
てか、コマンドってなんだ?
WM_CLOSE はアプリを終了するメッセージじゃないよ。
WM_QUITの間違いじゃない? それと、Delphiで作ったアプリなら DestroyWindow じゃ駄目でしょ。
DestroyWindow もアプリを終了する API じゃないよ。 強制終了なら、上にある TerminateProcess 使うべき。
hndl := FindWindow(nil, '電卓')); if hndl<>0 then begin ProcessID := GetWindowThreadProcessId(hndl, @PID); hProcess := OpenProcess(PROCESS_TERMINATE, False, ProcessID); TerminateProcess(hProcess , 0 ); CloseHandle(hProcess); end; これでやったらマシン自体が暴走してしまいます。 M$は暴走してるもの意外ではTerminateを使うな、って言ってるみたいだけど、 タスクマネージャーできちんと終了できるのだから何かきちんと終了させる方法はあると思うのですけど、 どうすればできるのでしょうか?
SendMessageでWM_CLOSE送ればいいんじゃない
('・ω・`)
293 :
デフォルトの名無しさん :2006/06/05(月) 11:54:01
見えない
>>291 暴走しててそれでも終了できないのがあるんですよ。
まずはTerminateProcessの戻り値を見て 正常に終了出来てるか確認したほうがいいんじゃないかな
>>290 ThreadID := GetWindowThreadProcessId(hndl, @ProcessID);
>>294 SendMessageTimeout で WM_CLOSE してシカトされたら Terminate とかじゃなかったっけ?
TThreadのExecuteが終了したことを知る手段はないでしょうか。 OnTerminateで知るのがよいのか、Executeを最後にフラグを立てるのがよいのか・・・
basic の GOTO みたいに、処理を途中で違う場所へ飛ばす命令はありますか? if ( i <> 0 ) then begin 処理... end else begin end;
>>298 Executeの終わりでSetEventするなり、スレッドのハンドルをWaitForSingleObjectするなり。
おかしな所で送ってしまいましたΣ basic の GOTO みたいに、処理を途中で違う場所へ飛ばす命令はありますか? if ( i <> 0 ) then begin 処理... end else begin アプリを終了 end; if (j <> 0) then begin 処理... end else begin アプリを終了 end; というように、if 文を連続で書いている状態でして、 見やすくする方法はありますか?
>>299 Delphiにもgoto文あります。ヘルプを見れ。
>>302 goto以外で、実現する方法ありませんか?
>>303 ありました・・・ ありがとうございます。
Basic だけの命令だと思いこんでいて、調べていませんでした。
>>304 実現って、既にif文で書けてるんじゃないの?
306 :
305 :2006/06/05(月) 21:31:12
やべ、途中送信。 goto なんて使ったら尚更可読性落ちるぞ。
if 文ネストになっていて、どうにか脱却できないかなと思いまして。 このまま続けてみます。
308 :
デフォルトの名無しさん :2006/06/05(月) 21:49:31
加算された値に加算するにはどうすれば良いんですか? 例えば、初期値100にeditから受け取った値5を加算し、105を表示。 次にまた、8を入力し加算し113にしたいときなんかどうすればいいんでしょう? a:=100; b:=a+StrToInt(edit.text); label1:=IntToStr(b); みたいに書いてるんですがこれだと何度加算しても105になっちゃうんで困ってます。
ifのネストになっているならExitを効果的に使うんだ if Hoge = 0 then form1.Close else if Uho = 'otoko' then form1.caption end; ↑こんなのならform1.Closeの後にExitを入れれば次のelseはいらなくなる
>>308 Delphiというよりプログラムの基礎をもう少し勉強するんだ
>>308 初期化は1回だけにしないと・・・てか、こんな例じゃダメだ端折りすぎ。
> label1:=IntToStr(b); ありえない。質問するときは、ちゃんと動くコードをしめすこと。
>>308 bを上に定義しといて
b:=b+a+StrToInt(edit.text);
だろ?普通
>>309 わかりました。やってみます。
ヘルプで Exit 手続き の例を見ようとしたら、
追加情報はありません(141)
と出ます。
何が書かれてるんでしょうか。
delphiのgotoは使い方によってはありだと思うよ
可読性上げるのなら、ifの条件判定部を関数化して その関数をまとめたチェッカークラス作るのも手だね 再利用する時には関数名からチェック内容も推測出来るし一石二鳥。
ある文から、複数の文のどれかを検索し、 HITした文字以下を返すプログラムはどう書けばいいですか? ○○%#△△ からは %#△△ を ○○&#△△%#◇◇ からは &#△△ と %#◇◇ を という風に % & ' って文字のどれかがHITした後の文字を切り出すのです。 300行くらいある文からそれぞれ取り出したいんです。
多重ネストしたループで、任意の階層だけループを抜ける場合とか
数が多いなら関数作っても良いし、少ないなら単にExit使えば良い ifのネストを減らすとか、可読性を大事にすることは凄く良いことだ 間違っても10階層ネスト朝飯前のようなイタ飯屋になってはいけない
>318 特定の文字列を捜すにはPos関数を使う。 文字列の一部を切り出すにはCopy関数を使う。 ただし%&' 別個に捜す必要があるわけだから、%&' を別個に捜して、 一番最初に見つかった位置に対して切り出しする必要があるのでちょっと大変。 (Cならstrpbrkという便利な関数が有るんだけどねぇ…)
>>322 その strpbrk というものを delphi で再現できないんですか?
一文字ずつ調べてった方が速いんじゃ……(Cの時も
>>320 話は全然変わるが
例外処理やらif、whileやらを併せて使うと5重ネストとか朝飯前になってしまって非常に見づらくて困る。
おまけにifとifとの間にコメントが挟まれててどっちのコメントかもわかりにくい。
しかも現行で稼動実績のある部分なので修正入れることもできず・・・
今後こうならないためにどうすべきですかね(´・ω・`)
>322 >212辺りを参照。ただしC言語仕様なので、 Del用に転用するにはそれなりの知識が必要なのです。 >325 if文での処理をarray[boolan] of で宣言した配列で代用できるであります! これは代入する値をif文で切り替えるようなケースだけではなく、 関数ポインタやクラスへのポインタを使用することで、処理自体の分岐も実現できる可能性があるであります! 同様にcaseの代わりも範囲型の配列で代用できるであります!
例外処理一つにできないか考えるべき。
>>279 のコードは駄目。
後は関数内関数を使って見やすくする。
328 :
デフォルトの名無しさん :2006/06/06(火) 15:51:49
PaintBox1.Canvas.Brush.Color:=clWhite; PaintBox1.Canvas.Brush.Style:=bsHorizontal; キャンバスに描いたグラフの後ろに等間隔でメモリ線を敷きたいと思い Brush.Style:=bsHorizontalで線を敷いてみたんですが黒地に白線の背景になってしまいました。 これを白地の黒線にしたいのですがどうやればできますか? 一応Brush.color:=clWhiteとかやってみたんですが効果無しです。 どなたか教えてください。
330 :
329 :2006/06/06(火) 16:20:16
331 :
デフォルトの名無しさん :2006/06/06(火) 16:46:30
返信ありがとうございます!
>>329 Pen.color:=clWhite(白線にする)
と書いても無反応です。
>>328 そこみたんですがわかりませんでした。
白でFillRectして黒でstyleにps何がしを設定してからLineToした後にグラフ書くとか
>>331 Brush.Styleが合ってないと思われる。線を引くだけなら背景の塗りつぶしはしない
>>328 これだけでは判断できないんですけど、LineToで線引いてるんだよねぇ?
いや、ハッチブラシを使いたかったんでしょ。こんな場合はありえないが。
336 :
デフォルトの名無しさん :2006/06/06(火) 17:47:43
タイマー使って徐々にグラフを描くっていう感じの仕様にしたいので その都度、LineToで線を引くのはだるくてBrushStyleで代用できないかな~ と思ったんですけどテキスト見ながらコンパイルしたらなぜか 黒地に白線になってしまい困っています。
MoveTo() LineTo() を使った方が簡単。間隔とか背景色といろんなことが自由にできるし。
338 :
デフォルトの名無しさん :2006/06/06(火) 21:22:51
Posは最初のマッチを返しますが、 最後にマッチした位置を返す関数はありますか?
while pos<>0 do でまわす
ふざけないでください
343 :
デフォルトの名無しさん :2006/06/06(火) 22:01:32
var hoge; でグローバル変数にする方が classの変数にするよりメモリ消費が少ないのは何故ですか?
そんなことを気にするのは何故ですか?
逆にメモリ消費が多いと期待どおりなのか?
346 :
343 :2006/06/06(火) 22:05:23
同じなら期待通りです
ファイル名に使えない文字が入力されたか調べるためにStringListに禁止文字を格納し EditのOnChangeイベントで一文字ずつIndexOfを使って、該当したら削り取るような処理をしています。 var i:Integer; tmp:String; begin for i := 1 to Length(Edit1.Text) do begin if SL.IndexOf(Edit1.Text[i]) = -1 then tmp := tmp + Edit1.Text[i]; end; Edit1.Text := tmp; end; もっとスマートなやり方があるのではないかと思いますのでヒントでも頂けたらと。
348 :
343 :2006/06/06(火) 22:09:00
オブジェクト参照がある分、クラス内変数がメモリ消費が多いのは当たり前。 メモリ効率より便利さを優先してのクラスライブラリである VCL 使ってて、 メモリ消費を気にするのは、ちょっと理解に苦しむ。
Pos 関数みたいに、前から検索していき 見つかった箇所以下の文字列を取得するのは、 RightStr関数 使うより楽な方法ありますか?
>>347 TStringList より列挙型使ったほうがいいんでない?
const
InvalidChar = [' ', #9, '\', '/', ':', ',', ';', '*', '?', '"', '<', '>', '|'];
var
i: Integer;
Source, Dest: String;
begin
Source := 'hogehog\e.txt';
Dest := '';
for i := 1 to Length(Source) do
if not(Source[i] in InvalidChar) then
Dest := Dest + Source[i];
end;
352 :
351 :2006/06/06(火) 22:26:34
ありゃ、InvalidChar にスペースとか含んでら。 その辺は適宜修正してくれ
>>349 なんとなく分かったような・・・
大きい変数はclassに入れない方がいいんですね。
>>347 KeyPressで弾けばいいんじゃね?例はアルファベットのみ
procedure TMainForm.Edit1KeyPress(Sender: TObject; var Key : Char);
const
Arrow_Keys := ['a'..'z','A'..'Z'] ;
begin
if not Key in Arrow_keys then Exit ;
end;
>>354 Key := #0 にするの忘れてた・・・
>>350 Copy関数使え。あるいはSetStringとか
> 大きい変数はclassに入れない方がいいんですね。 メモリ消費の多い少ないは、クラス変数にするかどうかと全く関係ないです。 クラスのインスタンスと1対1の関係がある場合は、クラスのフィールド変数にすべきです。 基本的には、クラスに密着して、クラスのメソッド内で参照・変更される変数は すべてクラスのフィールド変数にすべきです。 グローバル変数とは使い方がまったく違います。
それを分かった上でなんでその疑問が出てくるんだ・・・
delphi使いはメモリ消費を気にしないんですね
メモリ消費を気にするなら Delphi つかってらんないだろ
メモリマネージャは1M単位でメモリを確保していると言うのに…。
>>361 まずちゃんと動く物を作るのが先だろ
それが難しいからみんな頑張ってるのに・・・
365 :
347 :2006/06/06(火) 23:43:46
>>351 はぁー、列挙型使うんですか、つうか列挙型ってこんな風に使えるんですね。
inですか、in。なるほどー、勉強になります。
#9ってTab文字なんですね、今知りました。
どうでもいいですが","はファイル名に使えるようです。
さらにどうでもいいですが、XPの場合ですがファイル名を変更しようとして入力中に出るバルーンと
決定しようとした時に出るダイアログの表示文字列が違うのはなんなんでしょうねw
(バルーンには禁止文字がダイアログと比べて2文字足りない上にダイアログに表示される","はファイル名に使えるw)
>>354 KeyPressではじくのもやってたんですが、BackSpaceが入力出来なくなるのとコピペされるとだめなのでやめました。
っていうかコピペは出来るようにしておきたいので。
まぁVB使いなんでしょう 仕事にしろ趣味にしろ、普通のプログラマならメモリの使用量より可読性や保守性を重視すると思いますが。 VBの場合はメモリ最適化テクニックが色々と出回っていますが Delphiではコンパイラが最適化を行うので、メモリの使用量を意識する必要はありません (メモリ解放等は必須)
>>366 コピペもしたかったのか、こんなんでどう?
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
const
Arrow_Keys = ['1'..'9','0','a'..'z','A'..'Z',Chr(VK_BACK)];
begin
// 対象キーが押されていれば最上位ビットがONになる(マイナス値)
if GetKeyState(VK_CONTROL) < 0 then begin
end else begin
if not (Key in Arrow_keys) then begin Key := #0; Exit end;
end;
end;
D6の古い環境にD7を入れたらシリアルが不正って言われる。。。 Borlandに電話したら明るい声で「OSを再インストールしてください」。 これってどうしようもないのでしょうか。 Win2000 memory1024M 念のためにD6を削除してレジストリのHKCUのBorlandの項をすべて消したのですけど駄目でした。
関係ないかも試練が C:\Documents and Settings\ユーザー名\.borland にあるファイル全部削除したらどうよ どうなるかは知らないので試す前にバックアップとっといてくれ
372 :
347 :2006/06/07(水) 15:23:09
>>368 なるほどというか、目から鱗です。「はぁー!なるほどー!」っていう気持ちが伝わるでしょうか。
ソースだけがどんどんレベルアップして私はおいてけぼり状態ですw
ホントにいいスレです、レス下さった皆さんありがとう。
>>369 ∧_∧∩ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ´∀`)/< 先生!どう使うかわかりません!
_ / / / \
\⊂ノ ̄ ̄ ̄ ̄\  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
||\ \
||\|| ̄ ̄ ̄ ̄ ̄||
|| || ̄ ̄ ̄ ̄ ̄||
.|| ||
>>372 ただし、コピペ可能にすると検査なしで入力されてしまうから
きちんと弾きたいのならChangeで検査したほうがいい。
あと、Changeで検査するときはコピペのときにカーソル位置を考慮しないとダメだったような?
>>363 k w s k
もしかして、最近のFastMMってそうなん?
メモリプールしてくれてんのかな?
>>378 サンクス。
プールしてんのね。
どうりで、メモリ確保が早くなったわけだ
380 :
347 :2006/06/07(水) 19:06:58
>>374 どうもです。なんとかうまくいきそうな感じになりました。
どうやらKeyPressでChangeも発生するようなので全部Changeでやる事にしました。
GetKeyState関数やら列挙型の使い方とか知ることが出来て満足です。みなさんありがとう。
コンポーネントパレットをじっと見つめるんだ
何も浮かび上がってきません><
ListViewじゃね?
>>383 まじかよ
installフォルダにDemosってあるだろ
そのなかにVirtual Listviewってのががあるから見てみろりん
386 :
381 :2006/06/07(水) 20:47:45
>>385 Demoの中に見つかりました~。ありがとうございます(_ _)
へなちょこです。 OpenJaneのソースが面白くて眺めてます。 特に階層メニューの作成が面白いです(procedure TMainWnd.CommandCreate;という所です) が、このソースではサブメニューが1階層しか出来ないようです。 現在自分が使っているJaneViewではTABの付け方でいくらでも(?)サブメニューを階層化出来ています。 再帰処理にでもなっているのかと思っているのですが、そこはへなちょこ、全くアルゴリズムの想像がつきません。 そこでぜひともソースがどうなっているのか知りたいのです。 何処かで閲覧出来ませんでしょうか?
板違い。ソフトウェア板に行け。
390 :
215 :2006/06/08(木) 01:12:16
気になるから納得いくまでやってみた。 // strpchk(比較文字群, 対象物, io) {//////////////////////////////////////////////////////////////////// strpbrk もどき //例) strpchk('+-*/' , 'アンソニ-1' , 0) io = 0: 見つかった位置からの文字列を返す io = 1: 見つかった位置の場所を返す (string) io = 0,1以外 '0' を返す。 }//////////////////////////////////////////////////////////////////// function strpchk (s:string; target:string; io:integer):string; var sLen, MaePos, TPos, TLen, i: integer; str : string; begin str := '0'; Result := '0'; TLen := Length(target); sLen := Length(s); MaePos := TLen ; for i:=0 to sLen-1 do begin TPos := pos(s[i+1], target); if TPos <> 0 then begin if TPos < MaePos then begin if io = 0 then begin str := copy(target, TPos, TLen - (TPos-1) ); end else if io = 1 then begin str := IntToStr(TPos) ;
391 :
215 :2006/06/08(木) 01:13:02
end else begin str := '0' ; end; MaePos := TPos ; end; end; end; Result := str ; end;
もしかして LastDelimiter ?
C言語の\n(改行)にあたる文字は何でしょうか
いつの間にか良スレ
397 :
デフォルトの名無しさん :2006/06/08(木) 10:59:51
Delphi2005で使えるIndy10の最新版ってどこにありますか? 公式サイトにはD4-7まではあるんだけど、それ以降で使えるものがありませんのでお手数ですが教えてください。
関数1つで戻り値の型をstringとintegerの2つ準備させる方法は copy 関数みたいに2つ用意しないとダメですか?
>>400 record使えばよろしかろ
initializeが必要になるんだっけ?
ダメですね。
memoコンポーネントを使ったのですが 文字をどんどん入力してった時に 縦にスクロールするのは良いのですが 横はスクロールをしない設定はできますか? 決めた枠の中で入力をできるようにしたいです ScrollBarsをssVerticalにしてるだけじゃダメでした チョー初心者な僕にやさしく教えてください
WordWrap := True;
できました! お兄さんありがとう
対象の文字が数値型かどうか調べるにはどうしたらいいですか if 0 = integer then じゃ無理でした
> if 0 = integer then この例の 0 は数値リテラルなので調べるまでもなく数値以外の型にはなり得ません。
StrToIntで例外発生したらFalseを返す関数を作ればどうだろう ↓こんな感じ function IsNumber(AStr: String):Boolean; begin Result := True; try StrToInt(pString); except Result := False; end; end; VCL内に一発で判断出来る関数あれば他の人教えて
えっと、簡単に書きすぎました。 0の部分は変数なんです。それを整数型かどうかチェックしたいのです。 >if s = integer then
・・・言ってる事が変ですね。 変数なら整数以外入ってないし・・・ えっと、 数値(0~9)かどうかのチェックでした。
>>410 StrToInt(pString); の行を
if (StrToInt(AStr) < 0) or (StrToInt(AStr) > 9) then Result := False;
414 :
デフォルトの名無しさん :2006/06/08(木) 17:00:05
テキストエディタを作ってるんですが、JIS/S-JIS/EUCはどうやって見分けるんですか?
function IsNumerical(c: widechar): boolean; begin case c of '0','1','2','3','4','5','6','7','8','9': Result:=True; else Result:=False; end; end;
>>414 Delphi関係ないような気が…。nkfのソースでも読んでみれば?
>>392 それ、見つかった一番前の奴調べる奴ないん?
ヘルプには載ってないがTryStrToIntぐらい常識だろ
419 :
デフォルトの名無しさん :2006/06/08(木) 19:47:02
Delphi 2005よりVB 2005の方が優れていてしかも安いって本当ですか?
>>418 どこらへんの地域の常識か構文で提示願いたい
ヘルプには載ってないのが常識なわけないだろ・・・ってDelのヘルプが糞なのは常識だが
>>421 同意
・・・ヘルプよりヘルプらしいサイトないだろか
VCLはヘルプ見るよりソース読むのがよっぽどよく分かる
Delphi6を使っています。 MenuにはFontやParentFontプロパティが無いのですが、そのあたりを変えたい場合どうすればいいんでしょう?
メニューのフォントはシステム設定で固定なので設定不可 どうしてもシステムの設定に依存させたくなければ、オーナードロー(自分で描く)しか方法がない。 TToolBarのMenuプロパティにMainMenuを割り当てれば 最上位のメニュー項目だけは任意のフォントを使うことも出来るが。
>>414 それは意外と難しい
変換するコードはあちこちに転がってるがどのコードかを判別するのは案外ない
俺は結局某雑誌の記事を元に自分で実装した
427 :
424 :2006/06/09(金) 01:14:28
>>425 そうですか・・・、とりあえず諦めます。
もうちょっと色々身に付けてからチャレンジしようと思います。
xyzzyみたいな自動判別しててソース公開されているのを参考にしたらどうか
>>426 横からで申し訳ありませんが、その雑誌名(判れば刊行年月も)
教えてもらう訳にはいかないでしょうか
430 :
414 :2006/06/09(金) 08:34:58
>>426 自分もお願いします。
Delマガとかですか?
サイトのアクセス解析するソフトを作りたいんですが、GoogleやYahooとかの検索ワードってURLエンコードされてますよね? あれのデコード・エンコードをしたいんですが、どのようにやればよいのでしょうか?
>>429-430 翔泳社のWindowsデベロッパーマガジン2006年1月号の記事
「文字コードなんて怖くない!」ってやつ。
JIS(iso-2022-jp)/SJIS/EUC/Unicode/UTF-8の判別方法が載ってた
サンプルコードで載ってたのはVBだったけどそんなに難しくなさそう
だったんでdelphiに翻訳した
433 :
431 :2006/06/09(金) 09:19:32
タスクバーのヒントはどうすれば表示されるように出来ますか?
Application.Hintにヒント文字列を設定
>>435 やはりApplication.Hintでいいんだ
でもApplication.ShowHint := True;もやったけど表示しなかった・・・
すまん、タスクバーとタスクトレイを混同してた タスクバーのヒントはApplication.Titleに文字列を設定すればいい
>>437 Application.Title も設定してるけど・・・
タスクバーのタスクスイッチボタンの上にマウスを置いたときに表示する ヒントは、タスクバーが表示してるんです。表示されるのは、ボタンに Application.Title 相当が収まりきれない場合だけです。 procedure TForm1.FormCreate(Sender: TObject); begin Application.Title := 'Short'; end; これでは、ヒントは表示されませんが procedure TForm1.FormCreate(Sender: TObject); begin Application.Title := 'Loooooooooooooooooong'; end; これだと表示されます。
>>439 >Application.Title 相当が収まりきれない場合だけです。
知らなかった・・・ありがとう (収まってるからだったのか)
441 :
デフォルトの名無しさん :2006/06/09(金) 15:41:59
mp3のタグを扱いたいんだけどいいコンポーネントある? タグを読むのはあっても、タグを書き込めるコンポーネントがみつからない。
あるPopupMenuのサブメニュー(menuList(TMenuItem))に個数不定の項目を、メニューを表示する度にOnPopupで作りなおしています。 作りなおす前に'MenuList.Clear'としているのですが、こんなんでいいんでしょうか? 作成したサブメニュー項目1つ1つに対してFreeしなければいけないんでしょうか?
444 :
442 :2006/06/09(金) 17:15:38
>>443 そうでしたか、レスありがとうございます。
445 :
デフォルトの名無しさん :2006/06/09(金) 17:53:13
DelphiでCのfmodに相当する関数はありますか? 実数型の剰余を求めるものです。
ない、と思う。5分で作れる、とも思う。
function FMod(const X, Y: Extended): Extended; begin if IsNan(X) or IsNan(Y) or IsInfinite(X) or (Y = 0) then Result := NaN else if IsInfinite(Y) or (X = 0) then Result := X else Result := Sign(X) * (Abs(X) - Abs(Int(X / Y) * Y)); end; これであってる?
うーむ、Abs() は必要ですか?
449 :
447 :2006/06/09(金) 18:56:42
>>448 あら、必要ないですね・・
無駄に考えすぎでした。
先生質問です。 つい最近Delphi始めたもので、質問するのも恥ずかしいのですが・・・ base := StrtoInt(base2); base2の文字列を整数値に変換しようとこう入力すると、 「StrtoIntは未定義の識別子」と出てしまいます。 何故でしょうか?
>>450 uses に SysUtils があるかな?
>451 書き忘れてました。ありがとうございます!
>>441 DLLならいくらでもあるっす。コンポだけが全てじゃないが。
質問です。 Delphi2005のIDEで簡単なプログラムを組んでみたのですが、 実行してみると「プロセスが生成できません」とエラーウィンドウが出て、実行出来ません。 とんでもなくしょーもないミスをしてそうなのですが、Delphiは始めたばかりで分かりません・・・。 教えてえろい人
非公式パッチを当ててVCL.NETを起動してないか? VCL.NETには対応していないから注意。
いまどきD2005を使ってるのが驚き。
457 :
441 :2006/06/09(金) 22:44:40
>>454 そのプログラムをエクスプローラーから実行していない?
すでに実行済みのプログラムは終了させないと作れないよ。
>>454 インストールしたばかりで使用許諾を受けてない…
なんて事はない?
2005は使用許諾を受けないと動かないんだ? ふーん。 使用許諾のためのサイトが運営されなくなるとIDEはまったく使い物にならなくなるってことでつか?
ヴビ厨が解雇されるまでの時間よりは長いのではないかと。
かちゅ~しゃの左側のカテゴリー表示って、どのコンポーネント使ってるの?
>>454 実際に使用許諾を受けていなくても
webやメールで取得のチェックボックスをを選んでいればコンパイル出来るが
何も選んでいないとコンパイル前にはじかれるんだよ
465 :
デフォルトの名無しさん :2006/06/10(土) 20:37:14
10個くらいの画像を重ねて印刷するために、 1.TBitmap の Transparent を True にして 2.TMetafile の Canvas に Draw してから 3.Printerの Canvas に Draw してます。うちのインクジェットプリンタではちゃんと印刷されるのですが、 知り合いのカラーレーザープリンタでは印刷されません。 このような現象について、何かヒントでも何でもありましたら お願いします(Delphi7で、Windowsは両方ともXPです)
467 :
465 :2006/06/10(土) 21:44:45
これってStretchDrawだけじゃ無くてただのDrawでも該当するのでしょうか? 何はともあれ、ちょっとここに書いてある手続きを取り入れて試してみます。 ありがとうございました。
>465 商用ソフトならば、サードパーティのレポートフォームを使えば 面倒なこと考えずに済むかもしれない。
469 :
454 :2006/06/11(日) 13:22:13
実行>実行が出来ないだけで、デバッグ無しで実行、コンパイルなどは正常に出来ました。 何故でしょうか。
>>469 取り合えず再インスコぐらいしたんだろうな?
BDS2006 にバージョンアップするか、D7 以下の旧バージョン使うのを推奨する。 D2005 はまじめに使うものじゃない。
472 :
454 :2006/06/11(日) 14:06:50
>470 2回やり直した >471 ググってみました。 この程度の問題なら、自分が使うにあたって問題無いと思います。 不快に感じる事があれば、その言葉を思い出して変えてみます。
473 :
デフォルトの名無しさん :2006/06/11(日) 18:05:01
[致命的エラー] Project1.dpr(15): 'Unit1.pas' ユニットはコンパイルできませんでした 実行したらこんなん出てきたんですが・・・まずいですか?
うん、どう見てもまずいじゃん
475 :
デフォルトの名無しさん :2006/06/11(日) 18:16:37
何がまずいんですか? 根本的に作り直さなきゃいけないんですか? それとも インストールしなおすとかですか? どうかご教授おねがいします。
お前が出してる情報が少なすぎて分からんが、 少なくともUnit1に問題があるのは確かだ とりあえずUnit1を洗いなおすんだ
477 :
デフォルトの名無しさん :2006/06/11(日) 18:32:43
わかりました、やってみます。
478 :
465 :2006/06/11(日) 18:34:35
色々調べてたら分かったんですが、あのサイトの中村さんって本まで出してる
凄腕の方だったんですね。図書館で借りてきてしまいました。
で、ビットマップの印刷って実はとっても難しいものだったんですね。
とりあえず、対策版を先方に送って結果待ちです。また、
>>468 さんありがとう
ございます。検討したいと思います。
ジャブジャブと勢いよくな!
480 :
477 :2006/06/11(日) 18:47:37
もしかして、FormでやることってFrameじゃできないんですか?
エラー全部貼ればすむものを
482 :
デフォルトの名無しさん :2006/06/11(日) 19:32:16
使用承諾未承認みたいのが立ち上げるときに出るのに 普通に使えるんですがいいんですか? ちなみにDelphi6の体験版です。
Q&A掲示板にマルチポスト止め。
485 :
477 :2006/06/11(日) 19:40:11
マルチポスト止めってなんですか? 半年ググレは勘弁してください。
486 :
デフォルトの名無しさん :2006/06/11(日) 19:45:13
プログラムを保存しようとするとusesに「StdCtrls」って でてくるんですけどなぜですか? コンパイルしてもエラーはでないんですが実行してもどなにもおこりません
487 :
251 :2006/06/11(日) 20:23:48
キャプションを持たない特定ウインドウを判定するのはGetWindowRectを使って何とか出来ました。 助言くださった方有難うございます。 で、次の問題なのですがポップアップウインドウがなぜか選択できないのです。 postMessage(hcWindow, WM_LBUTTONDOWN,0,MakeLParam(100,15)); postMessage(hcWindow, WM_LBUTTONUP,0,MakeLParam(100,15)); //ここでポップアップメニューが開く hChild1 := FindWindowEx(hcWindow, 0,'#32768',nil); //ここでポップアップメニューのハンドルを取得したい if hChild1 > 0 then begin postMessage(hChild1, WM_LBUTTONDOWN,0,MakeLParam(100,15)); postMessage(hChild1, WM_LBUTTONUP,0,MakeLParam(100,15)); end; このように記述してもhChild1には0が入ってしまいます。 よろしくお願いします。
>>486 >StdCtrls
そのユニットが StdCtrls を使ってるから。
>実行してもどなにもおこりません
日本語でおk or おまいのコードが間違ってるから。
>>487 ポップアップメニューは子ウィンドウじゃないから。
Exじゃない方のFindWindowで取れたと思うよ。
490 :
251 :2006/06/11(日) 22:01:18
>489 有難うございます 早速下のようにやってみたのですがやはりhChild1には0が・・・ どこかおかしいんでしょうか? hChild1 := FindWindow('#32768',nil);
491 :
デフォルトの名無しさん :2006/06/11(日) 22:16:19
>>488 一回実行できたのに、保存してDelphi消して、また立ち上げて
実行すると何にも起きないんです。なぜですかね?
ちなみにProjectのprogramはこんな感じなんですが問題ありますか?
program Project1;
uses
Forms;
{$R *.res}
begin
Application.Initialize;
Application.Run;
end.
492 :
491 :2006/06/11(日) 22:28:16
unit1のprogramは↓なんですが何かおかしいですか? これだけじゃわからないのかもしれませんが(汗) unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Label1: TLabel; RadioGroup1: TRadioGroup; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end;
493 :
491 :2006/06/11(日) 22:29:24
続きです。 var Form1: TForm1; implementation uses Unit2; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Form1.Visible:=False; Form2.Visible:=True; end; end.
>>491 begin
Application.Initialize;
Application.CreateForm(TForm1, Form1); ←ココ重要
Application.Run;
end.
>>494 同時に
uses
Forms, Unit1;
にしとかないとコンパイルとおらないぞ
>>491 program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
意味分かるよな?
つか、デフォルトでいじらなきゃ、まんまなわけだが。なにやってるんだ・・・
498 :
491 :2006/06/11(日) 23:17:41
えっと意味はわかりませんがそれに書き直せばいいんですね? ありがとうございます。やってみます。
499 :
491 :2006/06/11(日) 23:27:04
>>497 それがなぜだか勝手にかわってしまうですよ。
Projectを保存しますか?とか出るのを「はい」にしたらいけないのでしょうか?
新規作成で最初からやり直した方が早くね?
501 :
491 :2006/06/11(日) 23:44:31
>>500 また全部(ボタンとかラベルとか)を作るのがめんどかったので・・・
っていうかできました。後はUnit2,3,4,5....をProjectに打ち込めば
いいんですよね?ホントありがとうございました。
502 :
デフォルトの名無しさん :2006/06/12(月) 00:12:58
delphiのお試し版しか持っていないので、製品版を購入しようと思います。 ビックカメラとか、そういうところに売っていますか? (電気屋さんにはあまり行かないので、分かりません。) アマゾンでは絶版/売り切れという扱いになっていました・・・。
504 :
502 :2006/06/12(月) 00:38:26
>>503 どうもありがとうございます。
delphiってあんなに種類があるんですね。
プロフェッショナルって、値段も結構するんですね(--;)
>>504 ソース的にはあやふやなのだが
しばらくするとTurbo 版という物が出るらしい。
廉価版なのではという噂もある。
と言うわけで急いでなければ、秋まで待ってみるという手もある。
外れたら御免なさい。
506 :
502 :2006/06/12(月) 00:57:44
>>505 情報どうもありがとうございます。
デルファイってあんまり初心者本が出てないから、ヘルプの機能を使いながら
勉強したかった(今のお試し版ではヘルプが見れません)ので、
急ぐ理由はないけれど、製品版が早く手に入れば嬉しいという感じです。
買おうかどうか迷っているうちに秋になったりして・・・(^0^;)
Delphi6Personalを使ってソフトを作っているんですが 色んなケースに対応したりスレッドを使ったり、 GUIのコントロールの数が増えていくうちに、 イベントハンドラを含めた関数が膨大になってしまって クラスビューや関数ジャンプもないので 大きくなればなるほど保守に困っています。 数万行~のソースをDelphiで管理するときどうされてますか?
>>507 1人で数十万~数百万のソース書いて保守してるけど
GExpertsを使ったり上手くクラスを使ったりしてやってるよ。
保守を楽にする為には設計で苦労する。
設計を楽にする為には保守で苦労する。
どちらかに偏ると思うけどがんばるしかないねぇ~。
>>508 数百万のソースを書いてるって、1人でできるもんなのかよ。
>>507 Pro版ならCtrl+上下でinterface/implementationを行き来できるので
interface節の宣言がそのままクラスビューや関数ジャンプのかわりになってたりして。
まあ構造ツリーだかクラスエクスプローラだかもあるし。
ちょっと待て 数十万から数百万て範囲アバウト過ぎね?
>>507 UNITという単位を旨く使って、出来るだけ独立性が高くて再利用可能にしてゆくしかないよ
行でもすげぇな でも数年弄ってればそれぐらいになるな 俺のも
いま担当してるソフトのソース行数約5万行だった
コメントは4万行くらい?
>>506 商用で、使わないんなら
Delphi6のPersonalが無料ですよ
質問です。URLエンコードしたものがYahooで使えないんですけど、どーしたらいいですか? Googleでは使えました。
521 :
デフォルトの名無しさん :2006/06/12(月) 20:47:14
エスパーの出番ですよ
522 :
伊藤 :2006/06/12(月) 20:49:28
GOOGLEでやれ
524 :
デフォルトの名無しさん :2006/06/12(月) 20:56:30
YAHOOのアドレス間違ってる
525 :
デフォルトの名無しさん :2006/06/12(月) 21:27:16
>UTF-8
ステップ数って行数の事じゃないの?
1つのステップを複数行に分けて書くことも出来る。 複数のステップを1行に纏めて書くことも出来る。
528 :
251 :2006/06/12(月) 23:45:13
postMessage(hcWindow, WM_LBUTTONDOWN,0,MakeLParam(100,15)); postMessage(hcWindow, WM_LBUTTONUP,0,MakeLParam(100,15)); sleep(500); hChild1 := FindWindow('#32768',nil); if hChild1 > 0 then begin postMessage(hChild1, WM_LBUTTONDOWN,0,MakeLParam(10,15)); postMessage(hChild1, WM_LBUTTONUP,0,MakeLParam(10,15)); end; 487の件ですが判りました sleepを取っていなかったのでプップアップメニューウインドウを捕まえきれていませんでした。 しかし、その後ポップアップメニューを選択しようとウインドウに対してメッセージを送信したのですが ポップアップメッセージが閉じてしまうのです。 これはどういうことでしょう?
ポップアップて右栗で出てくるヤツか? あれは確かOSが管理するモーダルループに入るから ハンドルなんて絶対に取れない気がする
530 :
251 :2006/06/13(火) 00:05:46
>529 クラス#32768の普通のPopupMenuで489さんのおかげでハンドルは取れるようになりました。 ただ選択しようとクリックをメッセージで送信すると閉じてしまうんです・・・
そりゃクリックしたら閉じるだろう
とある2つあるのボタンのイベントが、 一つのイベントハンドラを共有しているか論理評価したいのですが、 boolval := (Button1.OnClick = Button2.OnClick); とかやってもコンパイルエラーで蹴られます。なぜですか? 普通の関数ポインタとかでは出来るんですが…
>>532 こうするらしい。
BoolVal := (@Button1.OnClick = @Button2.OnClick);
Button1.OnClick はメソッドだから、そのような文では参照できない。 Label1.Caption := IntToStr(SizeOf(TNotifyEvent)); では、8と表示されて、メソッドはオブジェクト参照を持つので普通の関数ポインタではなく、 6ビットの長さ。 procedure TForm1.Button2Click(Sender: TObject); begin if Int64(@Button1.OnClick) = Int64(@Button2.OnClick) then ShowMessage('true') else ShowMessage('false'); end; これではどうでしょう?
× 6ビットの長さ。 ○ 64ビットの長さ。
ܷܵܶ
TMediaPlayerにリソースからMIDIを読み込ませたいと思ったんですが、LoadFromResourceみたいなメソッドがありません。 で、いろいろ調べてるうちにMIDIをアプリケーションから一度ファイルに落として、それをMediaPlayerに読み込ませるって手法(.FileName:='hoge.mid'みたいに)を見つけたんですが、 Stream経由や、直でリソースを読ませる方法って無いんですか?
ボタンを押したら3分後にbeepで警告音を鳴らし 毎日5時になったらbeepで音を鳴らすというプログラム作ってるのですが TTimerコンポーネントを二つ配置し ボタンを押したらTimer1コンポーネントをEnalbe:=Trueにして Timer1をインターバル180000にしてBeepにするといった感じでいいのでしょうか・・・ 5時になったらbeepで音を鳴らすのは Timer2のインターバルを1000にして 1秒ごとに今の時間をチェック→5時だったら音を鳴らす そうじゃなかったら何もしない といったのがいいのかな? もっと効率の良いやり方あります?
つ ベクターでダウソ
>>541 さんへ
AVIStream Delphiなどでググってみたんですが、3件とかしか出ません。
あまり熟成されてないようです。
APIを使うようですが、APIをバリバリ使えるテクニックが未だないもので…
ちょっとあきらめようかと思います。
ヒント、ありがとうございます。
AVIStream Delphi の検索結果 約 293 件 AVIStream の検索結果 約 1,730 件 ( ゚Д゚)?
midi だったらsndPlaySound でいけるかも。 mmsystem をuses する。
>>543 さんへ
あ、日本語のサイトだけっす。英語サイトは工房にはキツイ・・
>>544 さんへ
DirectXはDDDDとかのコンポ使えるだけっす orz
>>545 さんへ
sndPlaySoundやってみたんですけど、リソースからの読み込みがうまくできなくて。
Waveの方はリソースから読めたんですけど、MIDIはリソースコンパイラが対応してないんですかね?
使った事無いから駄目って意見よく聞くけど、わからないから質問してきてる以上、 回答は全て知らない方法じゃね?
工房のくせにDelphiなんてやってんじゃねーよ。 Delphiが許されるのは30過ぎのオサーンまでだぞ。
>>546 > リソースからの読み込みがうまくできなくて。
TResourceStream
まで
あらら、いい加減な事教えてゴメン。
>>548 がいいたいのは、30歳以上のおさーんだけってことじゃないか。
俺はあと2日で30なんだが、この場合もアウトか。
midiStreamOpenとかは駄目なの?
しすもんです。 CoolBarにToolBarをのっけて、Menuプロパティでメニューを設定して、 移動可能なメニューを作ったのですが、XPManifistを乗っけると、 挙動が変です。 なんというか、ボタン?みたいに盛り上がるんです。 盛り上がらずに、Flatにする方法はないでしょうか
Delphiは30過ぎのオサーンしか使ってないアダルトソフト 若者はみんなVB.NET
560 :
528 :2006/06/14(水) 06:50:07
うーん WIN32 APIの板で聞いた方がいいのかな じゃね
>558 Buttonも配置してみてちゃんとスタイルが適用されているか確認してみれ。
その不具合、けっこう有名だ。>CoolBarにToolBarをのっけて
フォームを一番右上に配置するときは Form1.Top:=0; Form1.Left:=0; でできますが フォームをちょうど右下になるようにするにはどうしたらよいでしょう・・・
それだと左上になるだろ? ちなみに右下は DskhWnd := GetDesktopWindow; nhDc := GetDC(DskhWnd); nWidth := GetDeviceCaps(nhDc, HORZRES); nHeight := GetDeviceCaps(nhDc, VERTRES); で解像度とってフォームのwidthとheight引いてtopとleft出せ
Self.Left := Screen.Width - Self.Width; Self.Top := Screen.Height - Self.Height;
できました わざわざありがとうございました(´・ω・`)
漫才かよ、こいつら
568 :
558 :2006/06/14(水) 16:45:35
569 :
558 :2006/06/14(水) 16:53:52
コンポーネントのXPMenu使ってるんですね。試してみます。
570 :
558 :2006/06/14(水) 17:37:42
>>558 Delphi2006用ソースをDelphi6でコンパイルしたときに同じような感じになった
572 :
558 :2006/06/14(水) 18:57:28
XPMenuの作者にメールだしても、エラーで帰ってくる。鬱だ・・・
アクションを実行したいのですが、 Action1.Execute; と Action1Execute(nil); と どう違うのでしょうか。両方ともアクションが実行後に戻ってくるのでしょうか。
>>573 VCLのソース見たら、OnExecuteイベント呼んでるだけだった。
つまり、Action1.Executeと、Action1.Execute(Action1)は一緒
>>574 ありがとうござんす。ソースを見てみましたが、良く分かりませんでした。
で、何となくですが、Action1Execute(Action1);
としました。
いや、Action1.Execute を呼ぶべきじゃないのか。
SenderにNIL代入してイベントハンドラ呼ぶのは止めておけ。思わぬ例外に泣くぞ。
それは一個人の流儀だろ
>>558 TToolBar.FlatをTrueじゃだめなのか?
if文に論理(かつ、または、ノット等)を入れるときはどうしたらいいの? たとえば if 1+1=2 then Label1.caption:='正しい'; これはちゃんと通るんだけど if 1+1=2 and 2+2=4 then Label1.caption:='正しい'; は互換性の無いとか言われてコンパイルエラーでます・・・
if (1+1=2) and (2+2=4) then
if (1+1=2) and (2+2=4) then 論理演算子andの方が=より優先順位高いので カッコを付けないとコンパイラは if (1 + 1 = (2 and 2))と解釈してしまう
>>583 括弧は省かない方がいいぞ
優先順位が決まってるからいらないって意見もあるけど・・・
明示的に付けておいたほうが後々のトラブルはない。
良いも悪いもつけないとビルドが通らん
ほんと、国語力ないのが多いな・・・
しろーとな質問ですみません memoで、文章内容が変更されたどーかを知りたいんですが onChangeだと、マウス操作だけでフラグが立っちゃいます 内容変更があった時に、保存ボタンを使えるようにしたいです
modified
ܷܵܶ
TMemoのModifiedプロパティを使用する。 Trueなら変更有り、Falseなら変更無し 注意点としてソース内でTMemo.Textを変更した場合は Modifiedプロパティは変化しないので自前で管理する必要がある
>>584 エラーになるならないではなくて、頭の中では括弧つきでコーディングしてるのだから
コードも省かないでおけってことだよ・・・
ありがとー!バッチリです! Modifiedなんてとってもグレイトな物があるのを知りませんでした それと注意点まで教えてくれて、ホントに感謝です
>>593 if とか演算の括弧は省くなってことを言いたいだけですよ。
あまりそいつには触らない方がいいと思うよ
andの優先順位が高いことには不条理を感じることもあるな まあ後からソース見ると見やすくなってることがあるから否定まではしないけど
ビット演算子のアンドと論理演算子のアンドで記法が同じなのが混乱の原因
だってTrue/Falseは1/0じゃん? まぁ互換性エラーになるが。
599 :
デフォルトの名無しさん :2006/06/15(木) 21:46:59
delphi2005と7の違いは大雑把にどんなところが違うのでしょうか? また、2005で作成したソースを7で開いたり実行したりすることは可能でしょうか?
>>599 2005: 重い、落ちる、バグ多い
2005使うくらいなら、2006の方を進める
602 :
599 :2006/06/15(木) 22:48:20
>>600 ありがとん。でも.netて何だろ(・ω・)?
当分初心者だから使わなさそう。
603 :
599 :2006/06/15(木) 23:06:34
>>601 あれっ、2006なんて出てるんだ・・・。
ますます選べなくなりそう。
>>603 2006はfor~inとか構文拡張も多いしFastMMだし、2006>7>>>>
>>2005 と思っときゃ間違い無いよ。
ただIDEの日本語対応度だけは7が上かも。
>>605 >>>>>の付き具合からすると、2005は余程不便なのかな・・・。
>ただIDEの日本語対応度だけは7が上かも。
この1行で7に決めました。ありがとう。
606 :
558 :2006/06/15(木) 23:34:12
>>605 不便っつーより、機能だけ見れば順当にバージョン順なんだけど、2005はIDEがよく落ちる。それだけ。
マシンスペックが今時のなら、間違いなく2006薦めるが
VS2005にしとけ
なぁ、2007日本語版出るのかな? とんと噂聞かねぇ・・
便乗して質問、Del6のソースをBDS2006で開けますか?(そのままコンパイル可能?)
>>605 バッチ当てればD2005もD2006も同じ。
だからこんな感じ。
D7>>>>>>>>D2006>D2005
最新のPCだろうが何だろうが
D2005以降はもっさりするのでお勧めできない。
後デザイナの挙動も少しおかしい。
よってその選択で正解。
Delphi6パーソナル版で 他のプログラムに干渉することできる? たとえば他のプログラムを最小化したり、Windowを移動したり キーボードを押したり・・・
FindWindow, EnumWindowsでウィンドウハンドルとってSendMessage
>>613 全然同じじゃねーて D2006>D2005 は同意
プログラムで音量上げるにはどうすればいいですか?
ちょっと説明不足ですね TrackBarやEditコンポーネントで入力した数値で音量を変える みたいなことをやりたいんです
ファイルをネットで更新するコンポーネントってないですか? ようは、Windows Updateみたいなことをアプリケーションに乗せたいのですが
でlpひ2006のことなんだけど、デバック時のロー カル変数ウインドですが、配列の中身を展開したま まステップ実行することはできないのですか? ステップすると閉じちゃうんですけど。 あと、これもデバック中なんですけど、エディタ内 の変数にマウスポインタをあわせるとツールチップ で変数が確認できますが、これの反応も鈍いです。 ヒントが出たままだと次の変数にポインタを持っ ていっても反応しないんですけど・・・。 これは仕様でしょうか?
そういうのはBDSスレへ
TListViewで、Ctrl++ キーを押すと列の幅が自動調整されますが、 これをコードではどのように書けばいいのでしょうか?
とりあえずスレのレベルが低いということだけはガチ
くだすれにいるくせにスレのレベルが低いとはどういう事なんだろう
>>626 Ctrl + +キーで列の幅が自動調整されるなんて今知ったw
for i := 0 to ListView1.Columns.Count -1 do
ListView1.Column[i].Width := LVSCW_AUTOSIZE;
LVSCW_AUTOSIZEをLVSCW_AUTOSIZE_USEHEADERにすると
カラム長に合わさるよ
ダウンローダーみたいなのを作りたいのですが ファイルのダウンロードってどうやればいいんでしょうか?
Indy
そのindyでどうやればいいんですか?
procedure TForm1.Button1Click(Sender: TObject);
var
fs: TFileStream;
begin
fs := TFileStream.Create('hoge.dat', fmCreate);
try
IdHTTP1.Get('
http://hogehoge/hoge.dat ', fs);
finally
fs.Free;
end;
end;
Webの巡回ソフトの用のものをTWebBrowserを使って作ろうとしています 巡回先にJavaScriptでconfirm()メソッドによる確認ダイアログが でるところがあり,自動でOKボタンを押したいのですが うまくいきません.現在は以下のようなやり方を試しています. どなたか,よい方法があれば教えてください. var DlgWhnd :HWnd; begin DlgWHnd := FindWindow(NIL,'Windows Internet Explorer'); SendMessage(DlgWHnd,WM_COMMAND,IDOK,0); end;
マルチポストは良くない。 なんか思いついたらQ&A 掲示板の方に書くから。
>>635 ありがと...Q&Aで返信つかないままどんどん下がるので
さびしくなってこっちにもかいてしまいました
みんなどんどん返信つくのに..
イミフメだから。そのコード、どんなタイミングで実行してるの?
フォーカスあるなら Returnキー押すコード書くだけ。
フォーカスはあるようです エンターキー押すコードっていうと keybd_event(VK_RETURN,0,0,0); ?? これだと、でてくるダイアログには効かないようで ダイアログを手動で閉じた後に実行されます
だから、いつ実行してるの? モーダルダイアログなんだろ。 ShowMessage() の後にコード書いても、閉じるまで実行されないのと同じ。
ダイアログのOKボタンを押さないと駄目では? タイマー使うか、 Form1.Handle に PostMessage しても上手く行くかもね。
WebBrowserのonCommandState にkeybd_event(VK_RETURN,0,0,0); でいけそうです
↑onCommandStateChange のまちがい
Editコンポーネントで数値以外の入力を禁止するには何すればいいんでしょうか
つ TMaskEdit
メッセージダイアログの中で改行するにはどうすればいいのでしょうか?
FindFirstでファイル、フォルダの検索をした場合に検索される順番に決まりはあるのでしょうか? フォルダ→ファイルの順番のように見えますが。
>>648 ファイルシステムの実装による。
大抵作っていった順序。. ..が先に来るな。
>>648 FATは作成順。
NTFSは名前順。
検索順を変えたいなら、十分でソートする。
命名スレで暴れているDel厨君うざいですよ
654 :
648 :2006/06/17(土) 16:55:16
>>650 ,651
早速の回答ありがとうございます。
なるほど、ファイルシステム依存なんですね。こりゃまいった。
んで
>>十分でソート
ってなんざんしょ?
自前で
656 :
648 :2006/06/17(土) 17:16:13
>>655 あっ、自分でって事ですね?すんません想像力無くて。
じっぶん で十分って変換されるのか 初めて知った
じゅぶん かもしれん
659 :
デフォルトの名無しさん :2006/06/17(土) 19:44:36
昨日はじめたばかりです。 質問するのもおこがましいレベルだと思ったんですが 2時間ほどググってもわからなかったので、 もしよかったら教えてください。 Form1の上にEditをいくつか並べました。 コンパイルしたアプリを起動して、 一度どれかのEditをクリックしてフォーカスさせたとします。 この状態から、フォーカスを解除させる方法はありませんでしょうか? (他のEditにフォーカスを移動、ではなく、起動直後のように完全に解除する方法です) Form1.SetFoccus;ではダメみたいなのですが。。。。 どうやるのでしょう。。。。? はずかしいしつもんですみません。。。。orz
>>660 本当にありがとうございます!!!!!!
精進します!
662 :
デフォルトの名無しさん :2006/06/17(土) 20:09:58
>。。。。 とか >!!!!!! とか 自虐、ウザイ
なんだと!!!!!!!!!
ごめんなさい。。。。orz ごんどからきおつけます。。。。
>645 OnKeyPressで必要ない文字の場合はKey=#0でなかったことにする Ctrl-Vに対策したければOnChangeで必要ない文字を削除
666 :
665 :2006/06/17(土) 22:10:50
× Key=#0 ○ Key := #0;
D6です。メニューにフォルダを展開し、クリックすると開くようにしたいのですが、 サブメニューのある項目のOnClickイベントが暴発します(選択状態になるとOnClickが呼ばれます) どのようにすれば暴発を防げるでしょうか?
ツリービューつかったダイアログつくれ
「ある項目」ったって誰も知らない
try ... except end; で囲むとか。
671 :
667 :2006/06/18(日) 02:26:47
>>669 すまんね、'サブメニューのある'項目だな。
つまり、'サブメニューのある'項目にもOnClickハンドラがあるのですよ。
すると'サブメニューのある'項目をマウスポインタが通過するだけでOnClickが呼ばれる。
>>670 例外が発生するとかではないので無理っぽい。
本来'サブメニューのある'項目自体にOnClickを割り当てるのがおかしいとは思うがどうにかならんのか、と。
> マウスポインタが通過するだけでOnClickが呼ばれる OnClickが呼ばれる過程を鑑みればそんなことありえない 諦めてサッカー見てろよ ガーナおめ
と思ったけどそうなるみたいだな 諦めてサッカー見てくる
最小再現コードを見せて。
目的にメニューの機能がフィットしてないので諦めれ
>>667 でフォルダをメニューに展開とか言ってるがファイル数が1000とかあったらどうなるよ?
似たようなもの作ったことがある。 フォルダを表す項目の OnClick でフォルダを開くのではなく、 サブメニューにそのフォルダを開く為の項目を入れればよい。 フォルダの OnClick ではサブアイテムを作成して掘り下げていく。 一定個以上のファイルやフォルダがあったら超過分は切り捨てて ... とかにしとけばおk。
ランチャーでも作ってるんだろうか 解決したらぜひ教えてほしい
レコード型で、 TMyMenu=record MenuNum: integer; // で、このMenuNumの宣言と同時に3を代入してしまいたい!const MenuNum = 3;みたいに。 MenuCaption: array [0..MenuNum-1] of string; //で、こういうふうに使いたい。 ・ ・ end; んですが、レコード型のメンバーで宣言と同時に代入みたいなことができないようです。 代替方法としてはどうすればいいですか?
const MenuNum = 3 でいいんじゃないの?
680 :
デフォルトの名無しさん :2006/06/18(日) 05:53:47
サブメニューを変更すると、親メニューのハンドルが無効にならなかった?
>>678 グローバル変数なら、宣言と同時に初期化が可能。
var
P: TPoint = (X:0; Y:0);
ただその例はおかしい。 MenuCaption は動的配列にしないと駄目。
そうなると動的配列の初期化は出来ない。
classで実装するべき。
その部分はTStringList型を使うべき。
682 :
678 :2006/06/18(日) 07:10:59
ご意見、ありがとうございます。 やっぱクラスにするか、679さんの言うとおりただの定数にするかどっちかかなぁ… この部分だけなのでわざわざクラスにするのも何かなぁって思ってたんです。 普通の定数にすることにします。
わざわざ、という発想がわからんなぁ。クラスでいいと思うが。
GCがないからインスタンス生成に対する心理的抵抗が非常に大きいというのは非常に理解できるよ。
QDのDDSDコンポーネントとTMediaPlayerコンポーネントを両方使うと TMediaPlayerでOpen;した時に不明なエラーが~って出てしまうのですが、 これはDDSDを使うのをあきらめるしか無いですか?
686 :
デフォルトの名無しさん :2006/06/18(日) 11:35:49
よくわからんが 各プロシージャの繋がりをナビゲーターで視覚的に見れるVerってあるの? あとハイパーリンクとかポップアップで見れるとか? プログラムの世界って上下スクロール環境を当たり前のものとして考えすぎてない?
687 :
デフォルトの名無しさん :2006/06/18(日) 11:46:52
>>684 うむ。こういうときばかりは、Delphi.NETがうらやましくなる・・・
>>687 ガーベジコレクション。ゴミ集め。
つまり、Object.Freeしなくても勝手に開放してくれるということ。
>>645 SetWindowLong(Edit1.Handle, GWL_STYLE, GetWindowsLong(Edit1.Handle, GWL_STYLE) or ES_NUMBER);
>>686 マウス世代からするとスクロールしか念頭にないんじゃない?
というか普通に教えてくれ。
スクロールが当たりませじゃないものって何がある?
>当たりませ
GC まかせは気持ち悪いところもあるんだよ。ちゃんと Free をすれば済むことを なんでためらって、動的に配列数を可変にしようとするのを諦めるのか、わからん。
>693 動的配列はいまいち使い方がわからないんだけど、 詳しくというか使い方の例題が乗っているサイト知らない? 動的配列使いたいんだけど StringList ばかり使ってる。
俺もStringListばっかり使ってる
>>694-695 例えば、
var
StrArr: array of string;
count: integer = 0;
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
if (Length(StrArr) <= count) then SetLength(StrArr, Length(StrArr) + 10);
StrArr[count] := IntToStr(count);
Inc(count);
Memo1.Lines.BeginUpdate;
Memo1.Clear;
for i := 0 to count-1 do
Memo1.Lines.Add(StrArr[i]);
Memo1.Lines.EndUpdate;
end;
のようにすると、メモリが許す限りいくらでも増やせる。開放も気にしなくよい。
配列要素数を減少させるときも SetLength() を使う。
697 :
667 :2006/06/18(日) 16:10:33
>>672 ,673
なぜかなるんですねぇ・・・。
>>674 メニューを作成し、項目aを作成、項目aにサブメニューbを作成、項目aのOnClickにShowMessageでも書く。
実行し、メニュー項目aをポイントするとShowMessageされてしまう・・・、ってな感じ。
>>675 そうですよねぇ、本来のメニューの使い方ではないんですよねぇ。
>ファイル数が1000とか
ファイルは表示してませんが、サブフォルダがあるかどうかの判定に時間がかかる場合があって大変です(´・ω・`)
>>676 どうやらそういう方向で考えないとだめっぽいですね。
>>677 ランチャー'のような物'を目指してたんですが、皆さんのレスを見てると普通のメニューでは無理っぽい模様です(´・ω・`)
常にプログラムを常駐させて キーボードを別のキーに置き換える (F1キーを押したらCTRL+Aと同じ動作をさせるとか) 動作をさせるのはどうすればいいんでしょうか。
APIでタスクトレイに登録、キーフック
今日初心者本を見ながらDelphi始めたのですが、 「FileListBox」と「DirectoryListBox」と「DriveComboBox」を連動させるのに DriveBomboBoxのOnChangeイベントに Dir_main.Drive := Drv_main.Drive; を記入しろとあるのですが、 これを記入してもDir_main.Drive := Drv_main.Drive;は適切な識別子ではありませんとエラーが出て 先に進めません。 どうすればいいのでしょうか。
それは、Win16 の名残り。使わない方がいいよ。
TStrings (List) で、区切る文字列の指定を , だけにしたいのですがどうしたらいいでしょうか。 通常だと、半角スペースも区切り文字に指定されてしまいます。
>>703 に便乗。
CommaText を使うと格納されているリストを文字列として取得できるんだけど、
それを , じゃなくて半角スペースで取得する方法知らない?
半角スペースでも区切られるでしょ。試したの?
あ、アホレスだった。リストの方なら、A + ' ' + B + ' ' + ... 簡単に作れる。
>>703 半角、全角スペースを含む文字が区切り文字に含まれている場合は
区切り文字をダブルクォーテションで囲めば半角、全角スペースで区切られない
>>704 Delimiterプロパティを変更すれば任意の文字を区切り文字に設定可能
あるいはベタにStringReplace
半角、全角スペースを無視したい場合は別の文字に置換してCommaTextにブチ込む
sTemp := StringReplace(sTemp, ' ', 'hankaku', [rfReplaceAll]);
sTemp := StringReplace(sTemp, ' ', 'zenkaku', [rfReplaceAll]);
sTempList.CommaText := sTemp;
値が必要な時になったら
Strings[0] := StringReplace(Strings[0], 'hankaku', ' ', [rfRelaceAll]);
区切り文字を指定したいなら区切り文字をカンマに、半角、全角、カンマを
別の文字に置換してCommaTextに(ry
sTemp := StringReplace(sTemp, '&', ',', [rfReplaceAll]);
sTemp := StringReplace(sTemp, ' ', 'hankaku', [rfRplaceAll]);
sTemp := StringReplace(sTemp, ' ', 'zenkaku', [rfReplaceAll]);
sTemp := StringReplace(sTemp, ',', 'kanmma', [rfRplaceAll]);
>>706 A := a[i] + ' ' ;
という風に for i:= 0 to a.count -1 do 文で回してるんだけど、最後にスペースつくからそれを回避したくて。
・・・って、 a.count を取得しといて if で最後つけないように指定すればいいのか。
空白区切りで取得できたら楽なのに。
>>708 最初の項目 a[0] に i=1 から順に + ' ' + a[i];
>>707 置換かー・・・ なんか余計手間に思えるけど結果それのが分かりやすい・・・かな?
ありがとう試してみる。
区切り文字は、create のあとに Delimiter を指定すればいいってのはわかってるんだけどね。
それを取得する方法がカンマしかないのかなーと。
分解を取得で違う方法にするってのは、通常考えない事だから仕様にないのは当然か。うーん。
>>709 それだと a[0] の文字列が取得できないじゃない?
リロードしろ俺。
というか回答者いっぱい居てなんだか優しいなここの人らは。
>>709 よくわからんのだけど?
a[0] を ' ' + a[i] で書き換えて行けって事?
>>707 ご飯から返ってきたら返答がありました。
それでやってみたら、できました。 ありがとうございましたm(_ _)m
s := a[0]; for i := 1 to count - 1 do s := s + ' ' + a[i];
716 :
701 :2006/06/19(月) 22:45:10
これを入力しないと次の項目に進めないのですが 使わない方がいいってこの本自体の事でしょうか?
「FileListBox」と「DirectoryListBox」と「DriveComboBox」のことだ。 それは Windows3.1 の残党。Windows95 以降は TTreeView と TListView を 使うべきだし、実際世の中のアプリはそうなってる。
Internet Explorer をDelphiで操作するプログラムを作りたいんですが、どのようにやったらいいでしょうか?
ヒント1:ActiveX ヒント2:OLE2
「Internet Explorer をDelphiで操作する」って、具体的にどうしたいの? 外から制御するのは変態プログラム。普通は TWebBrowser をつかって、間接的にコンポとして 使う。誰か初心者スレを紹介してくれるはず。
>>701 その本古すぎ。初心者スレで勉強すべし。
× 初心者スレで ○ 入門サイトで
723 :
718 :2006/06/20(火) 00:26:01
>>720 Webメーラーを使ったSPAM送信するプログラムを作りたいんです。
そんなのは教える気はないな。
725 :
718 :2006/06/20(火) 00:47:45
何故ですか?
正直、SPAMをDelphi+IEで送ろうとする>723の涙ぐましい努力に敬意を表する。
なんか使い方にもよるかもしれないけどStringReplaceてめっちゃ遅くない? あまりにうざかったんんで自力で書いたのは俺だけかな
はっきり言って遅いよ。 特に文字列が長ければ長いほど対数的に遅くなる。
>>729 何か他の言語と比べて遅いならわかるけど、
体感で遅いと感じるんだよね?
それだと使いどころを間違ってるとしか言えない。
勿論。使い所が悪いとダメ。
>>727 こいつは「StringReplaceより優れた関数つくったぜぇー」って勘違いして自慢したいだけだからほっとけ
StringReplace って、初心者用でしょ。ちょっと考えれば、あんなものよりマシなのは だれでも作れるわな。ってか、文字列操作用には Delphi のライブラリはダメダメだな。
734 :
デフォルトの名無しさん :2006/06/20(火) 02:47:15
なんでことさらに
>>732 みたいな書き込みをしたがるのかわからん。
以前も「けなすくらいなら書き込まんとけ!」みたいなことでもめてたことがあったが、関係ないもんから見てても気分悪くなるよ。
736 :
デフォルトの名無しさん :2006/06/20(火) 02:54:22
ぶっちゃけ標準ライブラリに似たような機能あるのに 自作ライブラリで自己満足して、保守で他人に迷惑かける奴って協調性無い奴おおいよな。
なんだ?Del厨は口が悪いなw 貧乏臭いてか、育ち悪いの丸出しww たぶんカーチャンがパートから帰ってきてブツクサ職場の文句なんか言ってるのを聞いて育ってるからだろうなぁ。 余裕をもてよ、Del厨諸君。 て、無理か? プププ
余裕がない奴が多い、ってのは一理あるかも
>>737 よっぽどコンプレックスをお持ちでなによりです。
今日も生きててご苦労様です。
もうやめようぜ。
Delphiの話しようぜ
DelphiのStringReplaceは初心者用とかいてありますが 中級車は何をつかうのでしょうか? そして上級者は何をつかうのでしょうか? さらにその上のひとは何を使うのでしょうか? わたしは調初心者です。 教えてください。
わざとからかって質問してんだろう?
もしよかったら他の関数もレベル分けされているものがあれば教えてください。 とりあえずStringReplaceは初心者用ですね。c⌒っ*゚∀゚)φ メモメモ...
TStringList に入れて、一行づつ StringReplace で置換すれば速くなるよ。
てか、数十バイト程度の文字列処理用だね。処理速度が欲しければ自分で書くか、 誰かが書いたヤツを使う。
コードでスクリーンショット(PrintScreen押すだけ)を撮りたいのですが どうやればできるのでしょうか? そこからImageなんかに貼り付ける事は可能でしょうか? よろしくお願いします
いづれにしても、AnsiPos() や Copy() を多用して、切った貼ったを繰り返す関数は 遅い。AnsiStrPos() 系のポインタ操作系で、一度に位置を取得してコピーする回数を 最小限にする関数を作らないといけない。ほんと、Delphi は標準ライブラリだけでは 満足な文字列操作なんかできないよ。
>>747 keybd_event(VK_SNAPSHOT, 0, 0, 0);
keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0);
これでPrintScreenを押したことになる
あとはImageのキャンバスに貼り付けるだけ
745より速くしたい場合は、標準ライブラリでは無理だから自分で書く。 Boyer-Moore法で位置を探し、メモリの確保を一度に行えば速くなる。
751 :
747 :2006/06/20(火) 03:59:45
FAQだが遅いのはStringの長さの拡張&コピー。 for i := 1 to 100000 do s := s + '*'; とやってくと何度もバッファの拡張されデータがコピーされる。これが文字列が長いとかなり遅くなる。 StringReplaceが場合によって遅いのは内部でこれをやっているから。 毎回毎回ヒープ+PCharはなにかと面倒なのでStringBuilder的なクラスを作ればかなり現実的な速度に収まる。 で、その上にSR相当のものを構築する。 別にSRは初心者用というわけじゃないよ。性質を理解していれば。
速い関数を作れる人がわざわざ遅い関数を使うことなんかあり得ない。そう言う意味では StringReplace() は初心者専用とは言える。
StringReplaceの速度が問題になることなんてまずないから安心して使うといいよ 問題になった時は既に君はこのスレを卒業してる
ありえないって断言しちゃったよこの人。 速度最優先で組んでるならCでもやればいいのに。
初心者でもながぁーい文字列を操作することもあるでしょ。 スカな実装の StringReplace() を擁護したり、使用を勧めるのはアフォだけ。
> 速度最優先で組んでるならCでもやればいいのに。 速度を重視しないなら、ライブラリが充実している .NET アプリの方がマシですね。 それに C で組むと速度が上がる、とかにはなんの根拠もない。
> 速度最優先で組んでるならCでもやればいいのに。 なるほど、Delphi では遅いアプリしかつくれないんだな・・・
文字列を操作するツール以外なら 正規表現ライブラリもあるし別に自作で作る必要性がないな。 数十万行のソースの中でそんな関数あると邪魔。 そんな些細なことにこだわるのは学生ぐらいだろ。 プロほど可読性、保守性を考えてるというのに。
速度で言うとC>=C++>Delphi>>>>>>.Netだな。 .Net以外はたいしてかわりゃしねぇがな。
> 速度で言うとC>=C++>Delphi>>>>>>.Netだな。 なんの根拠もないし。言語とコンパイラ実装をごっちゃにしてる時点でアウト。
要は、Delphi の文字列処理用ライブラリはダメダメだってことだ。 それを「可読性、保守性」とかいって放置するのはプログラマの怠慢。
マウスホイールを回すとDBGridの選択行がスクロールしてしまいます。 実際の行(インジケーター)は移動していないので、表示がおかしくなります。 これを防止する方法はありますか。
764 :
初心者 :2006/06/20(火) 11:38:28
いや、なんかすごいですね。 よかったらStringReplaceExみたいな関数つくってあげてくれませんか?
>>764 うーん。
遅い原因は 複数の置換を行うと O^2 とデータ量x置換数に比例する事にあるんで
目的に応じて設計しないといけないからなわけで
置換といっても正規置換もやりたいの? とかによって規模が一気に巨大になるし
StringReplaceって、OldStr、NewStr、Strを入れたらOldStrをNewStrに置き換えてくれるやつでそ? だったらこいつの高速版で長い文字列でも問題なし版ってことじゃダメなの?
まぁStringReplace使ったぐらいで初心者あつかいされるなら ほとんどのDel使いは初心者だわな。
>>764 根拠、根拠言ってる奴に作ってもらうとよろし。
もう作ってるらしいから。
つーか、もうどうせならHalbowのサイトでも見ながらWin32 APIで実装したらいいんじゃない。
速度を追い求め非効率生産、勝手にやってろって感じだな。
> ほとんどのDel使いは初心者だわな。 いや、実際キロバイト級の文字列に StringReplace を使うようじゃ、初心者並みといえるんじゃない?
> だったらこいつの高速版で長い文字列でも問題なし版ってことじゃダメなの? そうなんだ。話を言語のせいにしたり、正規表現に拡大したり、API を使うとか 極論に走るのは、頭悪い香具師がDel厨に多いってことだ。検索一回、メモリ確保一回 で済むように書くだけなのに、なにを騒いでるんだか。
>>769 IndyやOpenJaneみてるとそれぐらいの規模でもStringReplace使ってるみたいだよ。
だから、だめライブラリなんだけどね。
俺は別に動けば速くても遅くても関係ない。自分が使うわけじゃないし。 客なんてほとんど素人だからStringReplaceが遅いから処理が遅いなんて言い出すわけねーっつの。
StringReplace論議はこれぐらいにして 次の質問者どうぞ↓
775 :
718 :2006/06/20(火) 16:27:28
Internet Explorer をDelphiで操作するプログラムを作りたいんですが、どのようにやったらいいでしょうか?
操作って具体的に何がしたいのか
StringReplaceが遅いって言うやつはよくいるけど、速いソースを出してくるやつは見たこと無いな
それだったらIEなんか使わないでIndyのhttpコンポーネント使えばいいじゃない
汎用性と速度は反比例する物だからね 速いソースはそれぞれの目的に特化した物になってるから公開しても意味無いからじゃないの
> 速いソースはそれぞれの目的に特化した物になってるから公開しても意味無いからじゃないの 外観が StrngReplace() とまったく一緒にすることは簡単。文字列処理用のライブラリ なら探せばいっぱいあるよ。
>探せばいっぱいあるよ。 >探せばいっぱいあるよ。 >探せばいっぱいあるよ。 >探せばいっぱいあるよ。 >探せばいっぱいあるよ。 >探せばいっぱいあるよ。
srはもういいっていってんのがわかんねえの? 続きやりたきゃStringReplace板でも作ってそこでやれ
784 :
デフォルトの名無しさん :2006/06/20(火) 17:43:06
>>779 indyは初心者が作ってるらしいので嫌です
>>783 そんな下らん事言う前に、お前がソース出せば一瞬で終わるよw
StringReplaceは存在しなくていいと思ってる厨の考え 1.StrngReplace使う奴は初心者で作成物も駄目ライブラリ。 2.速い関数を作れる人がわざわざ遅い関数を使うことなんかあり得ない。 3.いまから使用を進めるのアホだけ。 4.保守を理由に速度の遅い標準ライブラリを使う奴は駄目な奴。 5.宣言が一緒のStringReplaceは簡単に作れるしライブラリも探せばいっぱいある。 etc... すばらしいお考えです。 論破されて何もいえません。 今までくちごたえしてごめんなさい。 ほんとうにごめんなさい。ごめんなさい。ごめんなさい。
ぱぱっとStringReplace互換のソースを書いてここに貼り付けたらみんなハッピーになれるのにねw
Del厨ってスクリプト書けば5分で終わるCUIなフィルタも String使ってチマチマチマチマその10倍時間かけてGUIアプリ書くしなんか思考に柔軟性がないんだよな。 ケースバイケースという言葉を学習していただきたい。
いえてる。
>>787 寺子屋スレでやってたでしょ。ああいう感じ。
ここはDelスレだろ >スクリプト書けば5分で終わるCUIなフィルタ はスクリプトのスレに行けばいいだけで。
GUI 以外は、ダメダメな標準ライブラリしか持たない厨たちの悲哀・・・
>>792 とかの方がよっぽどひとつの環境で全て済ますことにこだわってるじゃねーかww
794 :
デフォルトの名無しさん :2006/06/20(火) 18:38:38
comettrees.pasてどこにあるか知っていませんか?
>>793 ちょ・・・
本人気づいてないんだから、そっとしておいてあげようよ
知りません。
GUI 以外は、ダメダメな標準ライブラリしか持たない厨たちの悲哀・・・
ライブラリがダメなところは、いくらでも改変可能なのが利点だからね
StringReplaceを試しにVB.NETで書き直して1MBのテキスト処理させてみたら3.7倍高速化されたよ。 なんかショック。 今まで積み上げてきた自信が足元から崩れ去ったような感じだ・・・
そらまー、処理系云々よりデータ量と実装方針で決まるタイプの処理だからな。 ちょっとしゃれた実装のスクリプト言語が一位に来ても驚かんよ。
>>799 でも、チマチマした最適化よりPCのスペックアップの方が有効だけどね。
>>753 からここまでは見る価値ないから透明あぼーんでいいよ
連鎖あぼーんすればこのレスも見えなくなるな
脱Delphi初心者の基準はStringReplaceを10倍高速化できるかどうかということだね。 むなしい抗弁をしている暇があったら一度チャレンジしてもらいたい。
>>803 「10倍」ってのが厨っぽい。
まず元の長さとパターンと一致数と云々……に対するオーダーを下げるのが目標。
それができたら同じアルゴリズムに対して効果的な機械語の吐かせ方を模索。
これは酷い IDが出ない板ならではの展開だなこれは
srはもういいっていってんのがわかんねえの? 続きやりたきゃStringReplace板でも作ってそこでやれ 何回でも書くぞ 運営がIDださないのなんでなん?
>>806 ID出すように設定変更するのが面倒だから
質問があります。 Internet Explorer をDelphiで操作するプログラムを作りたいんですが、どのようにやったらいいでしょうか?
>>808 何をしたいか書け
起動したいのならShellExecute
組み込みたいのならTWebBrowser
ActiveXつくりたいならPro版以上でウィザード起動
>>808 一番簡単なのはStringReplace。
ただパフォーマンスに難ありだからあまり複雑なことには向かないかも。
今日は暑いからな…
へぇー、StringReplace って IE も操作できるのか、すげぇ
VB使いの方がよっぽどレベル高いね
Del 厨は StringReplace でなんでもできる。
>>816 だね。とにかく欠点を直視しないのが特徴。そこらへんが徹底してる。痛々しい。
>StringReplace() は初心者専用とは言える。 >スカな実装の StringReplace() を擁護したり、使用を勧めるのはアフォだけ。 >脱Delphi初心者の基準はStringReplaceを10倍高速化できるかどうかということだね。 なんでぃ!! たいそうな御託ならべたってソースの一つも張れないじゃないか! 謝罪と賠償汁!!
819 :
デフォルトの名無しさん :2006/06/20(火) 22:39:02
賠償をするのか
RegExpとWSHどっちが速い?
MLにあったReplaceStringとかじゃあかんの?
いまだStringReplaceな流れの中すみませんが質問 他アプリのコンポーネントのプロパティって取得したりできますか? もしくは、他アプリのボタンが押されたタイミングでフックさせてイベントを起こしたりできるのでしょうか? 可能なのであれば実現方法等教えて頂きたいです。宜しくお願いします。
>>他アプリのコンポーネントのプロパティ 他アプリが別プロセスを意味するなら一般には不可能。 マップファイルが手に入っている等ならやり方次第で可能かも。 >フック 可能。SetWindowsHookExとかそのへん。
> たいそうな御託ならべたってソースの一つも張れないじゃないか! そうだね。残念でしたね。初心者は素直に StringReplace つかっとけ。
826 :
823 :2006/06/21(水) 00:13:33
>>824 ありがとうございます。
調べてみたらなんかいろいろ難しそうなのでえっちらおっちらやってみます。
827 :
デフォルトの名無しさん :2006/06/21(水) 00:35:29
DelphiでAjaxは使えますか? VBには専用フレームワークもあるそうですが。
コンポーネントライブラリの TarSock ネットワーク関連コンポーネント・クラス集 これが目的にあいそうと思ったけどDLできないorz TCP/IP で、サーバークライアント型のソフトを作り たいと思うのですが、どこか参考になるサイト等は ありませんか?
>>829 英語サイト・・・orz
日本語でないですか?
delphiでエレベータの制御はできますか?
\  ̄ ̄ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( ・∀・) ∧ ∧ < 二度と口にするなゴルァ!! ( ⊃ ) (゚Д゚;) \____________  ̄ ̄ ̄ ̄ ̄ (つ_つ__  ̄ ̄ ̄日∇ ̄\| BIBLO |\  ̄ ======= \
シンドラー社のはVB製だろ
エレベーターの制御にStringReplaceは使えますか?
遅くて指定階を通り過ぎることがあってもいいなら、使える。
StringReplaceまた盛り上がってきました!
どこが?835と836で頭が冷えました。なんであんなに熱くなってたんだろ…
NGWord: StringReplace
だれかWifeReplace関数作ってください。
StringReplaceにバグ見つけたんですが なんだか報告して良いようなふいんきでもないですね・・・
いいえ、構いません。 どうぞ報告してくださいカス。
StringReplaceで
>>822 を知ることができたので大満足です。
良かったね。つーか、文字列を操作するのに string なんてほとんど使わないし。
>>845 そうなん?
文字列処理ルーチンばっかり使ってるんだけど、
何が良い?
847 :
デフォルトの名無しさん :2006/06/21(水) 21:47:57
ポインタ使えよww
別に相当シビアに速度求めなければどうでもいいし
ダメ
そこはらめぇ・・・
MEMOのコンポーネントを使ってなのですが・・・ ・プログラム中で(ボタンを押しで)、MEMOの文章を入れ替えたいのですが TStringListとかエラーが出て、ぜんぜんよく分からないです。。。 ・MEMOのコンポーネント表示枠中だけで操作が出来るよう固定したいです。 スクロールバーを付けて無くても、勝手に下側にスクロールしてしまって 困っています。(本当はそのほうが便利だと思うのですが) とっても素人な質問ですみません・・・
>>822 それMBCS非対応
対応版がNiftyのMLやCodeCentralにあるけど
他にもBM法組み込んだのとか異人さんはいろいろ出してるよね
>>842 Null文字も処理したいなら関数らんとね
> 別に相当シビアに速度求めなければどうでもいいし 処理するテキストのサイズと置換する数にもよるが10倍以上はやくなる場合は普通にあるよ。 チャレンジする(ググって探す)価値はある。
このオッサンはいつまで初心者スレで粘るつもりなんだろうか・・・
>>840 function WifeReplace(var OldWife: TWife): TWife;
begin
dispose(OldWife);
result := Kekkonsoudansyo.getNewWife;
end;
関係ないが、ループさせてベンチ採るとCompareString(NORM_IGNORECASE)より CompareStringを呼び出すAnsiStrLIComp使った方がちょと早い
ポインタ覚えたばかりの学生だろ。
>>853 そういうことはやりたい奴だけやればいいじゃん
普通に使う分には10倍程度早くなったところでどうでもいい
Del 厨って不思議。.NET アプリが遅いからネイティブマンセーなのか、と思ったら 10倍遅くてもOKだってさ。 もっとも C# なら、StringReplace() より速いけどね。
VB.NET で3.7倍。
>>859 10msで終わる処理を1msにする必要がないんだが、
たった9ms縮めるのに労力を使うのが.NETなのかい?
.NETは逆にその速度以上にするにはMSに頑張ってもらうしかないからな 自分で思い通りに書き換えられないとは可哀想で仕方がないよ
1GBのテキストファイルを処理しなけりゃならないなら考えるけど、 せいぜい数百KBのテキストなら処理に一秒もかからないからなあ。
stringは確かに遅い。 プロファイルとったら、文字列の操作部分だったので、 stringから、PCharにしたら、10倍速くなった。 とはいえ、よほどクリティカルな部分でもない限り、 最適化はしないと思うよ。 速度より、開発効率だからな
つーか.NETで速くなった云々の例って、+演算子じゃなくStringBuilder使用してるだろ? Delphiのstringの+は.NETのstringの+より速く DelphiのPChar使用コードは.NETのStringBuilderより速いのに Delphiのstringの+と.NETのStringBuilder比べてる馬鹿がいたんだ、昔。 それやってること違うじゃんと小一時間(ry
どうしてDelスレ住民はこんなに釣れるかね。 ほかの言語の初心者スレに比べるとかなり荒らしが多いスレなんだから そろそろ慣れてもいいと思うんだが
>>855 dispose(OldWife);でクラッシュするみたいです
Baby.Parent.mother が OldWife を参照しているのが原因です。
Dispose(Me); これで解決しますよ^^
870 :
デフォルトの名無しさん :2006/06/22(木) 04:25:54
>>864 開発効率重視するのがどうしてStringReplaceなんて原始的な手段を選ぶの?
言い訳に必死杉。
VB使いがStringBuilderや正規表現を当たり前のように使えるのがそんなにうらやましいの?
はいはいうらやましいです VBはいいですねうわあびっくりだこれはすごい
>>870 釘を打つのに重機持ち出してきて不満が出ない境遇(客とか)は確かに羨ましい。
>>870 なんか言葉の意味すら分からなくなったようで可哀想だから説明するけど、
開発効率重視ってのは、車輪の再発明せずに既存のもので作るって話。これは「開発」速度ね。
速度重視ってのは自分で関数を作り直すってこと。インラインアセンブラで組んだり。こちらはコードの「実行」速度ね。
VBではMSに貰った関数以上のものは使えないし作れないから、そういう発想がないのかな?
まあこれでひとつ賢くなったね。良かった良かった。
VB厨はそろそろ後釣り宣言を出すと思いますけど、 優しいDelphi使いさんたちは彼を笑顔で見守ってあげて下さいね^^
>>873 へー。車輪の再発明をしないとStringReplace以外の選択肢がないんだ。
VCLって機能豊富なんだね。
>>874 後釣り宣言は既出。にも拘らず粘ってるものだからみなかわいそうになって相手してるものと^^
function WifeReplace(var OldWife: TWife): TWife; var i:integer; begin OldWife.setISyaryou(Me.getMoney); dispose(OldWife); for i:=0 to OldWife.Kodomo.Age20 - 1 do OldWife.Kodomo.getYouikuhi(Me.getMoney); result := Kekkonsoudansyo.getNewWife; end;
>OldWife.setISyaryou(Me.getMoney); OldWife.setIsyaryou(慰謝料)ね。 こんなものに丁寧になってもしょうがないが・・
879 :
デフォルトの名無しさん :2006/06/22(木) 08:41:56
VB使いでさえ今やAjaxぐらいのことはやってるのに、Del厨は未だにWin GUIに文字列操作か。
↑ブビ厨のフリするな。この基地外Del厨。
まぁ、なんにしろ StringReplace() の実装が糞なことが原因なわけで、 こんなものをライブラリに入れている某もひどいが、開発効率重視とかいって それを使っている Del ユーザは、どうかしてると思う。
いまだにDel使ってる時点でどうかしてるだろ・・・
ふつうVB使うよね?
Delphi超初心者スレだぜここ…て VB営業か一連のレスかw
まだやってるな・・・ 別に誰がStringReplace使おうといいじゃんよ。初心者スレだし。 粘着うざすぎ。
StringReplace は初心者専用だしね。
でも、正規表現の方が柔軟性があるよ。 どうしてそれを認めようとしないの?
柔軟性あるけど、単機能じゃないから、使いにくい。それだけ。
正規表現を使った部分文字列の置換って、速度的にはどうなの?
まぁすべてがVBに軍配が上がるし
( ´,_ゝ`)プッ
↑そんなに悔しかったの?w
VB厨の見分け方 VB厨はコードが読めないのでスレにコードを貼り付けると急に静かになるぞ! みんなもやってみよう。
つーか粘着基地外の黙らせ方も教えてください。おながいします
Delphiで、1つのプロジェクトを複数人で開発する場合の開発手法について教えてください。 ACCESS+Oracleで作成していた社内アプリをDelphiで再作成しようとしています。 ACCESSの構成は、1つのサブシステムあたり10画面+10帳票程度程度のものが4つで、各サブシステム間で画面の行き来をする必要が 発生したので、Delphiではこれらの4つのサブシステムを統合し、1つのプロジェクトにしようと思っています。 アプリケーションとしては今まで通りC/S型にしたいのですが、複数人で効率よく1つのプロジェクトを開発をするにはどのような 手法が一般的でしょうか。
897 :
896 :2006/06/22(木) 13:02:59
↑について、開発環境はDelphi7でWin32アプリを作成したいと思っています。
つStarTeam
つ WinCVS (お金が無い場合)
>>877 やっぱりdispose(OldWife);で落ちるね。エラー処理しておいた方がいいかも
try
dispose(OldWife);
except
dispose(Me);
finally
kodomo.getHokenkin;
end;
VB厨はDelphiでも正規表現使えるの知らないのかな? RegExp移植されてるし、WSHも簡単に使えるんだが。 ところで64bit版にはDelphi7では対応できない? タブへのOwnerDrawがうまくいかないんだが。
VB厨はデフォルト以外に関しては考えが及ばないんだよ。ほっといてやれ。
>>896 つSubversion(&ToritoiseSVN)
904 :
896 :2006/06/22(木) 14:18:41
レスありがとうございます。資源を一元管理するツールなんてのがあるんですね。 資源管理のためのツールを使うための勉強しなければいけないというのは大変ですが。 StarTeamというのはボーランド製なので、Delphiとの相性は抜群なんでしょうが、これ以上 お金はかけられないので、WinCVSかSubversionでいってみようと思います。 どうもありがとうございました。
MEMOのコンポーネントを使ってなのですが・・・ ・プログラム中で(ボタンを押しで)、MEMOの文章を入れ替えたいのですが TStringListとかエラーが出て、ぜんぜんよく分からないです。。。 ・MEMOのコンポーネント表示枠中だけで操作が出来るよう固定したいです。 スクロールバーを付けて無くても、勝手に下側にスクロールしてしまって 困っています。(本当はそのほうが便利だと思うのですが) とっても素人な質問ですみません・・・
>>904 みたいなのばかりだから某の事業が行き詰るんだよ。もっとお布施しろ。
スレタイ読めない奴は死ね 氏ねじゃなくて死ね
----■-----■--------------------- ---■■-----■-------■■■■■■■■■■■■-- --■■-----■■■■■■-------------■■-- -■■--■---■----■------------■■--- --■-■■--■■■--■■-----------■■---- ---■■--■■-■■■■-----------■■----- --■■-------■■-----------■■------ --■---■---■■■■----------■------- -■■■■■■--■■--■■---------■------- ----■---■■----■■--------■------- --■-■-■----■■-----------■------- --■-■-■-----■■----------■------- -■■-■-■-----------------■------- -■--■----■■■------------■------- ----■------■■■----------■------- ----■--------■■------■■■■-------
>>908 覚えてるだけで100万はしたよ
あなたは?
>>905 私の知る限り現世に神はいないので、
それだけの情報で全てを解決できる人はいません
もっと詳細に書きましょう
前者はTMemo同士の文章を入れ替えるのか、
別で確保してある文字列と入れ替えるのか分かりません。
後者は困ってることが分かっただけで何をしたいのか分かりません。
スレタイ読めない奴は死ね 氏ねじゃなくて死ね
↑ こんな書き込みするやつが100万お布施するような会社だから、事業が行き詰るんだよ。
荒らしの書き込みをStringReplace()で消し去ることはできますか?
今日もやることがなくひたすら初心者スレを荒らし続ける孤独なBorland信者のオッサンサミシス
今日もやることがなくひたすら初心者スレを荒らし続ける孤独な元VB厨のオッサンサミシス
>>905 Memo1.Lines.Text = 入れ替えたい文章
TMemoのスクロールバーを表示しないようにするのか?
それならMemo1.ScrollBars := ssNone
918 :
905 :2006/06/22(木) 17:19:08
すみません、説明不足でしたか・・・
2つの質問は共にMEMOコンポーネントを使った事なのですが
・ボタンを押す事によって、MEMOのLinesに書かれてる文章を
プログラムコードに事前に書いておいた文章に差し替えたいです。
Editだと、Edit.Text := '入換えたいよ~'と掛けるのですが
Memoだと、Memo.Lines := ?????なのです・・・
Memoコンポーネントを複数貼っておいて
その中身同士をコピーもしくはMemoその物を見せたり消したり
と言うのを思いついたのですが、たぶん良くない方法だと思いましたし
ここで賢人に教えて頂ければ、Delphiのプログラミングを始め色々壁に当たってる事にも
一人で悶々としてる状態から、新しい見方・考え方で突破できるかと思い
ここに書きました。
・もう一つは、サイズを決めておいたMemoコンポーネントの中だけで
入力を受付け制限をしたいです。
WordWrapを設定すると、右側(行方向の文字数)は制限できるのですが
下側(列方向)は、ScrollBarsをssNoneに設定しておいても
文字入力がどんどんあればいくらでも改行して
どんどん下側にスクロールしてしまいます。
>>1 に書かれていた超低レベルなのですが
すみませんがやさしく教えて下さい。
お願いいたします。
919 :
905 :2006/06/22(木) 17:25:38
>>917 レスありがとうございます!
長文を書いている間で気がつきませんでした。
~nes. "Text" が抜けてたのですね。
さっそくやってみました、行けました!
改行も '+ #13'を足してクリアーできました。
もう一つの質問ですが、スクロールバーの表示を消したいだけじゃなくて
用意しておいたMemoコンポーネントの四角内だけで文字入力を制限したいです。
>>918 OnKeyPress内で行数調べて、超えてるようならReturnの入力を無効にする
921 :
905 :2006/06/22(木) 17:35:59
>>920 ありがとうございます
なるほど方法は理解できました!
でも行数を調べる方法が分からないのと
コピペの時はダメっぽい方法ですよね。。。
ゴメンなさい、もう少しヒントをくださいませ・・・
memo1.Lines.Count
>>750 の探した位置の保持て、Array of Integer で適時SetLengthするか
TListかCardinalListみたいなもの使うのんですか?
TMemoのonChangeで指定行数以降を削除するとか。 ってonChangeはあったかのぉ
まさにStringReplaceの出番だな。
残念ながら無い
なにが?
>用意しておいたMemoコンポーネントの四角内だけで文字入力を制限したいです。 難しそう。最後の行での改行入力、途中行での削除、挿入、矢印キー、、、、一つ一つ つぶしていくのは大変。ま、初心者なら無理。
そんなつまんないレスしかできないなんて初心者以下ですね^^;
面白い事を言うスレじゃないし
いや、つまらないかもしれんが、それが現実。上級者なら、そもそもそんな仕様を 思いつかない。初級者は限界を知らないから、ものすごいことを考えるものだな。
なんだかんだ言って雑談するの好きなのな
自称上級者のミジンコが初心者を見下して楽しむスレですよ
Delphi5を友達にすすめられたんだけど… 「プロジェクトを開く」をするとUnit1だけはソースのタブが出るけど、その他のUnitのタブは「表示→ユニットの表示」をしないと開かれません… これって、プロジェクトを開けばプロジェクトに追加しているすべてのUnitが自動でひらかれるように設定できませんか?
> 自称上級者のミジンコが初心者を見下して楽しむスレですよ
そんなこというなら、
>>918 の二番目の回答を書いたらどうだ?
最低だなおまえら。
Javaみたいにソースでコンポーネントを宣言して配列にしたりとかできますか?
938 :
925 :2006/06/22(木) 22:49:40
onChange利用してみましたよぉ procedure TForm1.Memo1Change(Sender: TObject); const MaxRows = 10; begin with Memo1.Lines do if Count > MaxRows then begin BeginUpdate; while (Count > MaxRows) do Memo1.Lines.Delete(MaxRows); EndUpdate; end; end; テストしてて気づいた ・数百行のテキストをコピペするとうっとまる ・指定行数+1までカーソルが動いてしまう(入力は不可) 指定行以降削除なんて非効率で間違いでしたすいません
939 :
925 :2006/06/22(木) 22:52:49
あーインデント消えてもうた まぁ使い物にならんソースなので別にいいだろう
なんでこうPCに詳しいやつって陰険なのが多いんだ?
942 :
936 :2006/06/22(木) 23:01:00
>>940 俺はお前ら神の如き上級者に見下されてるただの超初心者だからな。
・オブジェクトの配列を作ることは出来る ・でもnew[]のように1回で全要素のコンストラクタを呼ぶことが出来ない。(delete[]も同じ) 一つ一つCreateするしかない。
>941 逆。陰険だからこそPCに依存するようになったの。
と陰険なミジンコが申しております
本当に気になるところ全部直したいなら、
TMemo(つーかEDITコントロール)弄り回すよか、エディタコンポ見繕ってきて改造するべきだろうなあ、と思いつつも
>>938 一旦TStringListにでも移して処理したら軽くなるんじゃね?
正規表現ならPerlが一番いいね。
>>943 なるほど方法はあるわけですか
ソースファイルにコンポーネントの情報を格納しているようなところが見当たらないんですけど
別にファイルにあるんですかね?
>>948 言ってることがよーわからんがデザイナで設定した内容のことなら
.dfmをエディタで開くとわかるかも
951 :
デフォルトの名無しさん :2006/06/22(木) 23:47:07
こんばんは。1つ質問があります。 「1÷2=0.5」のような割り算をさせる方法を教えてください。 最初y,s,wをreal型に指定したあと、 y := strtofloat(edit1.text); s := strtofloat(edit2.text); w := y div s; としたところ、「div演算子は使えません」とエラーになってしまいます。 「1÷2=0.5」のような割り算をさせる場合、どのような記載をすればいいのでしょうか? よろしくお願いします。
>>951 div …… 整数の割り算(対応する余りは mod )
/ …… 実数の割り算(結果は小数なので余りの概念なし)
953 :
951 :2006/06/22(木) 23:56:11
>>952 どうもありがとうございます!
割り算もできないようじゃ先は長いな・・・(´ー`;)
StringReplaceさえ使えれば大丈夫
いい加減StringReplaceウザイ
NGWordに入れとけ>StringReplace
3つもあぼーん続いてるが何があったんだ
↑あぼーんして、そこ気にしてる馬鹿
StringReplaceが遅い事がなぜVB厨の琴線に触れたのか、私には理解できない。
↑デル厨のフリするな。この基地外VB厨。
のついでにデル厨とVB厨も指定しとけ
お前ら低レベル過ぎてワロタw デル厨もVB厨も頭の中が平和で羨ましいよww 外に出てこられると迷惑なんで一生ここで罵り合ってて下さいwwwwwww
あのさあ、BDSスレの流れを初心者スレにもちこまんでくれんかな?
>入力する文字数を制限するのはどうですか? これじゃ、全然だめだろ。一行に1文字だけの場合もあるし、100文字の場合もあるし。 改行を考えれば破綻する。
922 じゃ駄目なのか?
StringReplaceじゃ駄目なのか?
いい加減StringReplaceウザイ
NGWordに入れとけ>StringReplace
3つもあぼーん続いてるが何があったんだ
____ __,,/ _, ----`ヽ :. :. / _ ___ 、\ / / i \ \\ :. :. ,'./ i ヽ:. ヽ:.:.. ヽ.ヽ ,'/ / .ハ ヽ ヽ:.:.:.:. ヽ::.. ヽヽ :. :. |i .i i .i / ヽ ト 、 \、:.:.:. ',:.',:.:.lヽ} |i .i l :N_, -弋 \弌弋ナ:}:.:} :. |i∧ ', :{ ,ィjモト \ イjミトイイV :. な… .| :メヽ.', `ozZ} izN。ハ::{ なんなんですか? :. | :ヾ_! ゝ "゙゙ ' `゙ ハ.:', :. ここ、どこですか? | :.:_イ .:.ヽ. (二フ , イ :.:.:!:.ヽ なんで壁にお尻付けると :. / rィイ | :.:.ヽ: >r/`<ノ .:.::.}ヽ、\:. 前屈出来なくなるんですか? / ∧l;l ! :.:.:.://{二 ̄ .} ..:..::リ//ハ.:\ :. / .{. ',ヾ、ヽi .:.:.{ /(^` |.:.:.:.//: : :.}: . ヽ.:. / / ) ヽ ヾ、ヽ:.ハ ヤ{ ∧/.-‐'": : |:.:. i ', ./ .,イ .:..} : :\ヾレ'ハ ∧__ノノハヾ、 : : : l:.:.: .ハ ', { /| .:.:ハ : : :i Y {ヾ`Yヽニン'ノ}: : } : : : :/:.:.:/ }:.} V | .:.:/:.:|_,ィ' ̄ ヽ三{ `ー-ノ : イ : : :/:.:i.:{ リ ヽ:.:{、.:.V : : ヘ : : {: : :/:.::∧| ヽ! )人 : : :人 : : : / \! :. " ヽ : : : : :/イ{ :.ノ: : : :.\ :. :. \__///: :\______/: : : : : : : ヽ / //: : :|;|: : : : : : i: : : __: : : : ', :. / 、 {;{ |;| . : i/. : : : : : :| / `Y;{. . . .|;|. : : : /i: : : : : : : : :l
↑あぼーんして、そこ気にしてる馬鹿
/ ヽ i' i'⌒`i `i\ i i i i \ i i i j\ \ i i i i \ \ i ヽ ヾ \ ,. \ .i \ \ \ \ i \ ヽ \ (`) _______,.,.、 i /,.,.,.,.,jk ,._ / _/ ̄|::::::| (二二二) ) / i i i i i  ̄i `)=[ll|ヾ,.,.,|::::::| (二二二) ) i ノi  ̄i ̄) ̄ ̄ ∪000:::.l::::::|;;;;(;;;;;;;;;;;;;;;;);) i i ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ヽ、 i | i i i i i
ジーコ「Delphiが売れないのは電通のせい」
976 :
デフォルトの名無しさん :2006/06/23(金) 21:59:43
あげ
ジーコ「Del厨に一番足りないのはプロフェッショナリズム。 プログラマは自分の欠点を知らなくてはいけないし、それは日常のなかでも、会社のなかでも同じことだ。 業務で開発しているプログラマは数人で、全員が仕事を持っているわけではない。 自分の会社で、実務をこなし続ける必要がある。」
すぐ荒らしか。分かり易すぎる。
979 :
デフォルトの名無しさん :2006/06/24(土) 04:32:49
次スレもう要らないよね?
むしろ荒らし隔離用が2スレあってもこれだけもれてくるんだから 20スレくらい次スレ作ったほうがいいんじゃないか
てか荒らししかいないんだから、このすれいらない
もうDelphiっていらないよね!
勧めるならC#の方にしなさい。
あ、でもDel使いのほとんどは C# にはもう行っちゃてるでしょ。 いまから VB.NET はないだろな・・・
Delphi初心者スレで 他言語の営業 最低だ・・・
>>986 Del厨が他スレでよくやってたことだよ
988 :
デフォルトの名無しさん :2006/06/24(土) 17:42:08
Del厨って言動がチョンみたい
989
990
991
992
993
994
995
996
997
Del厨って何で初心者スレ荒らすの? 信じられない。
次スレは要らない
1000も要らない
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。