6 :
Delフサギコ ◆A6VzDeLphI :2007/05/31(木) 22:32:02
_________ ∧,,∧∩ / ミ,,゚Д゚彡 < ななしへたぐらま さん、乙! ミつ旦.ミ \ @ミ ミ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∪''∪
_________ ∧,,∧ /だれか ミ,,゚Д゚彡 < Delphiソースで ミつ旦(ミ~~ \ IPメッセに @ミ ミ メッセージ投げる方法 ∪''∪ しらまいか?
君はそろそろ、名無しに戻ったほうがいいと思うぞ
_________ ∧,,∧ / んーー、 ミ,,゚Д゚彡 < DelphiでLibrary ミつ旦(ミ~~ \ 作っている人もいるらしいが @ミ ミ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∪''∪ 実際やろうとすると、わけがわからないんだよね。 UDPとか使っているらしいし。 誰か具体的にやりかた知らないかなあ。
>>11 アレだけ情報でているのに出来ないんだから諦めろ
_________ ∧,,∧ / 教えれない ミ,,゚Д゚彡 < んなら、だまってていいよ。 ミつ旦(ミ~~ \ @ミ ミ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∪''∪ 互換メッセンジャーのChatrunを作っている方が コンポーネント公開したい、、 というなコメントを書いているのだが、 なかなか、C++系とは違って こういうところが難しいのですよね。 誰かDelphiで接続できるコードつくってないかな。
こういう所って のはどういう所? PROTOCOL.TXT に説明あるし ues WinSock して MSGMNG.CPP を地道に パスカルに変換すればいけるだろ
>誰かDelphiで接続できるコードつくってないかな。 これがホンネだろ。この前もグダグダ言ってたら誰かコード書いてくれたし
∧,,∧ /最初から
ミ,,゚Д゚彡 < ホンネですが
U つ∀ \なにか?
〜ミ ミ ┴
∪''∪ なんだかなあ
>>15 自分でも書きましたが?
>>14 さん
うーん、ちょっと面倒っぽいですな....C++は嫌いだし嫁ないので....
まいつたな。。
まあ、おいおいやっていくか。
>うーん、ちょっと面倒っぽいですな....C++は嫌いだし嫁ないので.... C++Builderはやっとけ。
フサギコ死んでくれ delphiの為に
>>16 C++といっても、特にややこしいことはしてない 機械的に変換出来るレベルだよ
コテ叩きウザ フサももっと大人毛生やせ
名無しに戻って擁護するあたりとか流石と言っておこうか
てか、コテでしょうもない質問しかしないんなら名無しでやれよ うっとうしいねん
コテが嫌ならあぼんしろ くだすれの質問に文句垂れんな 行儀よくやりたいならMLにでも行け
Delphiで彼女はできますか?
出来ました。 当方35歳170cm85kg後頭部ハゲ 彼女 23才 158cm 43kg Cカップ 加藤あい似 感度がいいです。
ソースうpキボンヌ 俺も作る
27 :
5 :2007/06/01(金) 22:10:42
>>9 レスありがとう
直リンでソース見れた方が分かり易いと思ったので
>>5 のLink貼ったけど、
今使ってるのはこっちのオプティマイズされたのです
http://www.fourmilab.ch/md5 memcpy/memsetはDelphiの場合、Pas側でMoveとFillCharに置き換える事に
なるです(Jpeg.pasとかと同じ)
ダミーの宣言ならサイズも小さくて_fastcallにも出来て良いかと思って。
.asm吐いてみたけど、アドレス以外にコード自体の違いは無いみたいで
よく分からんです
pasコードならここのがTransformがInline化されてるので速いです
class化をやめればもうちょっと速いかもですけど、objをLinkの方が
大分速いです
http://www.sawatzki.de/
>7
IP Messengerのこと?手元に
// TIPMsg.pas, version 1.0b2
// Copyright(c) Tomoaki Takebayashi(
[email protected] )
というコメントの入ったソースがあるのだが…どこで入手したのか記憶にない。
___________
∧,,∧ /確かに個人的に
ミ,,゚Д゚彡 < EmEditorのプラグインとか
ミ つ日 \考えるとC++は詠みたいのだが。
.@ミ,,,,,, ,,ミ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
実は、目指したいのは
単純な構造のC++をDelphiコードに変換するように
構文解析をできるプログラムは組めまいかと
望んでみたりもして。
EmEditorのプラグインの場合
plugin.h→plugin.pas
で、変換できたら最高なのになあ。とも思うのだ。
>>14 さん
>ues WinSock して MSGMNG.CPP を地道に パスカルに変換すればいけるだろ
ふむふむ。。。
自分への、課題だな。
>>28 素敵ね。
BNFがわからんとか言ってるやつに構文解析は無理だ
_
∧,,∧∩ /
ミ*゚∀゚ミミ < これか!
ミ つ且~~ \
〜ミ,,,,,, ,,ミ  ̄
tota@web
http://tota.s57.xrea.com/ ∧,, ∧ ありがとう。
ミ。_。彡 ペコッ
〜ミ,,,U U,,ミ 且~~
ヒントになりました。
>>30 まあ、そのうちな!ミ・w・彡
ライセンス表記のないコンポはどーすりゃいいんだ? 修正BDSって勝手に解釈して著作権だけ表記すりゃいいのか?
ライセンス表記のないソースコードは著作権法によってのみ縛られるから 改変不可、再配布不可、引用の範囲内を超えた組み込み(プログラミングの世界ではリンクと呼ばれる)による再配布も不可。
>>33 そうなのか・・・。
てっきりTBXみたいに著作権とWebアドレスかいてりゃいいと思ってたよ。
って、結構多くない?
ライセンスが不明なコンポ。
>>32 ×修正BDSって勝手に解釈して著作権だけ表記すりゃいいのか?
○修正BSDって勝手に解釈して著作権だけ表記すりゃいいのか?
実際のところPDS文化の延長で著作権表記を勝手に書き換えたり 塗りつぶしたりしない限り好きにしてくれって事だとは思うが。 help|aboutかreadmeに謝辞書いておけば十分だろうけど 気になるなら問い合わせるしかない。
>>33 >引用の範囲内を超えた組み込み(プログラミングの世界ではリンクと呼ばれる)による再配布も不可
これってコンポを自分のアプリに取り込んで、アプリを配布するのも不可ってことだよねぇ。
困ったな。
>>36 一度、問い合わせてみるかなぁ。
たまにコンポーネントにGPLライセンスを適用してる人っているよね アレって何なんだろ? せめてLGPLにしてくれよ
>>38 Delphi のコンポーネントはスタティックリンクだから LGPL でも大差なくね?
ていうか、GPLのコンポみたことないけど、具体的にどれよ
GPLとかは後々縛られるから、おとなしく車輪の再開発したほうがいいな。 無駄だけど
俺も前にMD5を自前で実装した。ライセンスのこと考えるとよくわけわかめで、ライセンスのことで 心配するなら作っちゃおうと。そういう事考えると、.NETのクラスライブラリだけは魅力的に見える。 GPLじゃなく、MPL採用したソースもあるけど、バグ発見して修正するとなると、いちいち公開しなきゃいけないし。 もうね。めんどい。
>>42 JVCLがMPLとLGPLのダブルライセンスじゃなかったか?
47 :
デフォルトの名無しさん :2007/06/02(土) 17:40:20
C++でいうstaticなメンバ変数ってどうやって作るんですか? メンバ関数ならclassを頭に付ければいいと解ったのですが変数の方が解らないです。
>>47 基本的にはできないが、どうしてもやりたければ、
型付き定数でできるはず。
49 :
デフォルトの名無しさん :2007/06/02(土) 18:19:52
ごめん。関数staticと間違えた。 class var でできない?
>>47 古いバージョン使ってるなら
type tfoo = class;
implementation
var foo_class_var: integer;
みたいな事をやるしかない。
51 :
47 :2007/06/02(土) 20:12:55
解答tks! D6です。>49の方法はダメですた。 無理そうなので別の方法にします。
52 :
デフォルトの名無しさん :2007/06/02(土) 20:16:54
D6には、class var はないわな
delphi2007を使っています。 デバッグ中に「このエラーを無視する」としたところ、 関連するエラーで中断しなくなりました。(当然ですが) 再びこの設定を元に戻すにはどこを戻してやればいいんでしょう?
2007ってまだ体験版しかないよね
つながるじゃん
マジで?
つながるけど404
VBMP3のコールバック関数をどう書けば良いか分かりません・・・ 今は、 function vbmp3_callback(pProc:Pointer):Boolean;stdcall;external 'VBMP3'; //宣言 vbmp3_callback(@TForm1.CallBackPrc); //FormCreateで実行 Procedure TForm1.CallBackPrc(id,Sec:Integer); //コールバック関数 と、書いてますが、エラーが出ます。 VBでは、 Declare Function vbmp3_callback Lib "VBMP3.dll" (ByVal pProc As Long) As Boolean Call vbmp3_callback(AddressOf vbmp3_Proc) Public Sub vbmp3_Proc(ByVal id As Long, ByVal param As Long) となってます。(VBでの表記はReadMeから転記) 文法にエラーは無いのですが、ファイルをopenて再生を開始した途端にエラーが出ます。 ReadMeによれば、コールバック関数への引数のidは0~4の値をとるそうですが、 0~4以外の値をとっているようです。 IntToStrを使って値を確認しようとしたのですが、そうするとIntToStrの部分でエラー(実行は可能)が出ました。 分かる方居ましたら、よろしくお願いします。
とりあえずCallback関数をTForm1のメソッドではなく、只の関数として実装してみては procedure CallBackPrc(id, Sec: Integer); stdcall; begin //処理 end; procedure TForm1.FormCreate(Sender: TObject); begin vbmp3_callback(@CallBackPrc); ... end;
>60 やってみましたが、尚エラーです。 ステップ実行してみると、どうやらコールバック関数の処理が終わった瞬間にエラーが出てるようです。 更に、同時にCPUウインドウが。
なんてエラー?
ていうか、IntToStrでエラー出るってことは、それ以前にスタックかどっか破壊されてるっぽいな
プロジェクト が例外により実行を停止しました。 'access violation at 0x1001dde3: write of address 0x00011002' と出ます。
>>64 アドバイス受けるには情報が不足だと思うよ、コードさらしてみ
文字列をDelphiのstringでそのまま渡しているせいとか。
>>60 なんか変でない?
1. procedure じゃなくて Boolean を返す function じゃないの?
2. 関数名自体ははじめからポインタなのに、何で更に @ を付けるの?
を勘案すると
function CallBackPrc(id, Sec: Integer): Boolean; stdcall;
begin
//処理
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
vbmp3_callback(CallBackPrc);
...
end;
後ろについてるExternal宣言がなんか変だ。 VBの宣言に詳しくないので正しい関数名がわからんが、こんな感じに書くんじゃなかったっけ? external 'VBMP3.DLL' name 'vbmp3_callback';
試してみた
>>67 のサイトから Delphi用のサンプルvbmp3forDを落として
function vbmp3_callback(pProc:Pointer):Boolean;stdcall;external 'VBMP3'; //宣言
procedure CallBackPrc(id, Sec: Integer); stdcall; //コールバック関数
begin
form1.Caption:=format('%5d %5d',[id,Sec]);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
・・・ 他の処理 ・・・・
vbmp3_callback(@CallBackPrc); // これだけ追加
end;
これで、動くようだけど?
C:\Program Files\CYBERFRONT\Sid Meier's Civilization 4(J)\Warlords(J)\Civ4Warlords.exe を幅を指定して C:\Program Files\...\Civ4Warlords.exe みたいに短くする関数ってありますか?
...\ ってどこを指してるの?
文字列処理の話です。 例えばこんな感じで200ピクセルに収まるように文字列を適当に短くしたいです。 GetShortPathStrForPrint(Font, 200, 'C:\Program Files\CYBERFRONT\Sid Meier's Civilization 4(J)\Warlords(J)\Civ4Warlords.exe') ==> 'C:\Program Files\...\Civ4Warlords.exe';
自分で処理描いても大した手間じゃないよ
MinimizeName?
MinimizeName ですな
77 :
デフォルトの名無しさん :2007/06/03(日) 16:13:00
78 :
59 :2007/06/03(日) 16:46:22
解決しました。 >70さんのコードを眺めていて、まさかと思ってVBMP3をVer1.3.1.0に戻すと正常に動作しました。 お騒がせしました。答えてくれた皆さん、ありがとうございました。
呼び出し側がメモリブロックを確保し、そのポインタを引数にとるWin32APIの呼び出しで、 動的配列を使って例えば A: array of Integer; SetLength(A, 1024); ように、確保したとき、 引数での指定方法で、 Win32Foo(@A[0]) より Foo(Pointer(A)) の方がよろしいでしょうか?? メモリブロックのサイズが固定なら前者でもいような気がするのですが、 可変で例えばサイズが0だったりすると、前者の場合、アドレス違反がでますよね??
どうでもいいことですが、 >Win32Foo(@A[0]) >より >Foo(Pointer(A)) は Win32Foo(@A[0]) より Win32Foo(Pointer(A)) です。
>>79 違反は出なかったと思うけど。 出るようになったの?
マシン語レベルでは同じだと思うぞ。 CPUView見て。
program test; {$APPTYPE CONSOLE} uses SysUtils; var a: array of Integer; p: Pointer; begin //SetLength(a, 0); p := a; Writeln('a ' + IntToStr(Integer(p))); p := @a[0]; Writeln('@a[0] ' + IntToStr(Integer(p))); p := Pointer(a); Writeln('Pointer ' + IntToStr(Integer(p))); SetLength(a, 1); p := a; Writeln('a ' + IntToStr(Integer(p))); p := @a[0]; Writeln('@a[0] ' + IntToStr(Integer(p))); p := Pointer(a); Writeln('Pointer ' + IntToStr(Integer(p))); Readln; end. 渡すだけならどっちでもOKっぽいが・・・ @a[1]にしてもエラー出ないし・・・
試してませんでした。すみません。 試したところどっちでも問題はなさそうでした。エラーが出ないだけで、問題あるかもしれませんが。 CPUViewですか?難しそうですね。
84 :
デフォルトの名無しさん :2007/06/04(月) 12:38:17
すいません、今日始めてTurbo Delphiを触っているんですが BASICやHSPで他のプログラムを起動させるのにはexecを使いますが Delphiでは、どうやるのでしょう?
Delphiは API をそのまま呼べますので APIを使うのが簡単。 uses ShellAPI ; して、 ShellExecute するのが一番簡単です。
あっと、 実行ファイルの実行だけなら WinExec が最も簡単です。 これは uses windows してあれば使えます。 > この関数は、 以前のバージョンのWindowsとの互換性のためだけに提供されています。 > Win32アプリケーションでは、 CreateProcess関数を使ってください。 と書かれていますが、そんなのはあっちの都合なんで、使える場合は使いましょう。 ただ、巨大なexeを裏で起動なんて場合には、起動出来ない場合もあるようです。
87 :
84 :2007/06/04(月) 12:52:48
>>85 なるほど、それで調べてみます。さんくす。
88 :
デフォルトの名無しさん :2007/06/04(月) 21:59:49
Turbo Delphiって無料版Delphi6使ってたらすんなり覚えられる?
無料版があるんだから、まずそれで試してみては?
コンポインストールが出来ない無料版であるが そこまでコンポにこだわらない俺は断然turbo派 ただし動作はもっさり
ぶっちゃけDelphi6で十分高機能だからturbo使う必要性は全く無い。 ランタイムもいらないしな。
ヘルプ腐ってる。コンポの便利さを否定することはDelphiのアドバンテージを 否定することに通じるよ。「覚える」とかいう段階なら、将来がないDelphiなんか 覚えるだけ無駄だよ。
上に紹介してあったwikiを読んで プログラミングなどやったこともないボクが 初めて実行ファイルを作りました うほ! いただきまんこ Delphiって最高ですね^^; 次は痴漢じゃなくて置換だよにトライです
94 :
デフォルトの名無しさん :2007/06/05(火) 08:06:12
なんとか王子「我がDelphiは一生勝ち続けます!」
確かにプラス部分とマイナス部分があるな。 漏れはVCLソースとエディタの補助機能とリファクタリング機能目当てでTurbo使ってる。 正直、これらだけで「乗り換えた価値はあった」と思ってる。 ただ、ヘルプは本当に使いにくいので、Del6のヘルプを使ってる
買えよ
dcc32.exeを使ったコマンドラインでのコンパイルについて質問です。 最初、何も考えずにコマンドライン上で "dcc32.exe プロジェクトファイル名" と実行したら「致命的エラー: ファイルが見つかりません : 'MyEdit'」と出て(MyEditは自分で追加したコンポーネント) コンパイルができなかったので、dcc32.cfgに -LU"C:\Program Files\Borland\Delphi5\Projects\Bpl\dclusr50.bpl" と追加することでコンパイルはできるようになったのですが、 動作確認用の環境(Delphiはインストール済でコンポーネントは未インストール)で作成されたEXEを実行したところ 「プロシージャ エントリ ポイント @MyEdit@initialization$qqrv が ダイナミックリンクライブラリ Dclusr50.bplから見つかりませんでした」 というエラーが出て実行できませんでした。 IDE上でコンパイルしたものと比べてみるとファイルサイズが倍近く違っていて、 自分で追加したコンポーネントのパッケージ"dclusr50.bpl"が 実行ファイルに含まれていないのが原因だと思うのですが、 コマンドラインからのコンパイルで全てのパッケージを実行ファイルに含める方法があれば教えてください。
98 :
97 :2007/06/05(火) 13:49:56
環境を書き忘れていました。 Delphiのバージョンはコンパイル環境・動作確認環境ともにDelphi5、 OSはコンパイル環境がXPPro、動作確認環境が2000sp4です
dcc32.exeごと""で括ってるからダメなんじゃないの。
LU は実行時パッケージの追加だから実行環境に*.bplがないと実行できないのはあたりまえだろう Uオプションで dclusr.dcu をのあるディレクトリを追加してやればいいんでねえの?
Delphi7でIBXを使っていますが、データセットを閉じたり開いたりすると DBGridのスクロールバーが表示される時と表示されない時があります。 データが一行しかない時にスクロールバーが現れたり、数行あるときに隠れたりと 不安定です。解決策などありますか?
102 :
97 :2007/06/05(火) 16:00:19
>>99 ダブルクォーテーションは実行したコマンドをわかりやすく説明するために付けたもので
実際にはダブルクォーテーションは付けていません。紛らわしい書き方をして申し訳ない。
>>100 dclusr.dcu のあるフォルダを
-U"C:\Program Files\Borland\Delphi5\Lib"
で追加してみましたが結果は同じでした。
>>100 さんのを試した後、ヘルプ見ながら色々試してみて自己解決しました。
自作コンポーネントのソースがMyLibという独自のフォルダにあり、
各ソースのdcuもそちらのフォルダにあったため
-U オプションでそのパスを指定すれば意図した動作になりました。
スレ汚し失礼しました。
この汚物め!
(デルファイ製のソフトではないかもしれませんが)StringGridのセルの中にUpDownみたいな入力ボックスが入っているのを見たんですが、あれをデルファイでやるにはどうすればいいんでしょうか?
StringGridのセルの中にUpDownみたいな入力ボックスを実装すればいいよ
レスの意味もない
107 :
104 :2007/06/06(水) 16:35:03
StringGridのセルを親にしてUpDownをCreateするんでしょうか、ちょっと素人にはわかりません。
最初に一個Createしてフォーカスあたってるセルの端にUpDownを移動して云々ってことだろ。 よーするにできません。
できるだろw
StringGrid と UoDownを配置してOnCell(Sender に procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); begin UpDown1.Parent := StringGrid1; with StringGrid1.CellRect(ACol, ARow) do begin UpDown1.Top := Top; UpDown1.Left := Right-UpDown1.Width; end; end; と書いて実行させて、後はなんとかするしかないかもな
111 :
104 :2007/06/06(水) 18:10:48
あ、やりたかったのはそれかもしれません! セルを選択すると、そこに入力欄にUpDownのコントロールが出て数値を増減できるってやつです。 貴重なヒント、どうもありがとうございます。
112 :
105 :2007/06/06(水) 18:19:38
a, iitakattanohasorekamosiremasenn!
DelphiってDB作る分には極つけのツールだと思うんだけど、 紙媒体での保存のため印刷しようとすると、途端に 糞と化すのは何なんだろう、といつも思う。 そういう用途に使うなと言われればそれまでだけどね。
Delphiって帳票出力するコンポーネントついてなかったっけ? なんとかReportって感じの名前のやつ そこそこ使えたと思ったんだが・・
糞と罵ると 教えてもらえると見た
>>DelphiってDB作る分には極つけのツール 今時のデータベースはキャラクタセットにUnicodeを使ってるのが多数だから、 TNT使うなりしないといけん。データベースのキャラクタセットに Unicodeが使われる前は極めつけのツールだったけど、今じゃむしろ そういう分野にDelphi使わない方がいいと思ってる。 QuickReportのことか?あれ、Unicodeに対応してるのか?? こういう事で悩むのでお勧めしない。
問題を混ぜるな。 QuickReportがうにこーど対応してるかどうかは議論していない。
>紙媒体での保存のため印刷しようとすると、途端に >糞と化すのは何なんだろう、といつも思う。 >問題を混ぜるな。 >QuickReportがうにこーど対応してるかどうかは議論していない。 問題を混ぜるな?おまえはただ「糞」とだけ、書いていったい何が問題なのかすらも 書いてないおまえの頭も「糞」
レスを混ぜるなw
混ぜるな危険
しかしマジで、うにこーどに対応しないと漏れはDelから離脱するとオモ。
よくUnicodeUnicodeってカキコを見るけど、これってVCLのこと? Tnt使ったり、W系API直接呼んだりするのじゃダメなの?
データベースで使う、TFieldType型のftMemoやftMftMemoの最大サイズは32kbですか?2Gですか?
>>122 今回言ってるのは印刷の事だから、自前で印刷するなら
CreateFontIndirectWしてTextOutWすれば理屈の上では大丈夫なんだけど
プリンタがフォント持ってなかったり、windowsだってフォントによっては
例えば筆文字なんかは持ってないわけで、
実際には、unicodeで印刷なんてDelphiでなくても現状では無理。
日本人向けのソフトしか作らない漏れに うにコードの重要性をおしえてください。
Delphi関係ないが、WindowsはUnicodeをUTF-16じゃなくてUTF-32で扱うようにして欲しかったな。 UTF-16だと、16ビットで1文字の時もあれば、32ビットで1文字の時もあったり、処理が面倒…
それはやっぱり文字フォントで32bit空間を埋めてしまうわけにいかなかったのだろう
>>125 日本人以外にはShift_JISとかEUC-JPを使うメリットがない。
自分が知らないコードから自分の知っているコードに変換する場合、
ユニコードのような大きな文字セットに一旦変換すると解決できることが多い。
XMLでは文字コードを明示的に指定しない限りUTF-8が使われる。
文字コードの自動判定もUnicodeしか対応しないし>XML
ファイル周りのユーティリティ作っててA系のAPI使いまくってると取りこぼしが出るんだよな。 XPManifest貼り忘れて古臭いUIだったりというのも合わせて原点対象ではある。
131 :
デフォルトの名無しさん :2007/06/07(木) 16:26:45
ListView(vsReport)を使おうと思ってるんですが 指定した場所にstring文字を入れる方法と 指定した場所の内容をLavel.Captionに表示したいんですが すみませんがどう書けば良いか教えてください。
プロパティとイベントの項目全部嫁
パソコンのキーボードを叩けばいいと思います 書けますから
><みんあ酷いヨ
みんあ?ダレソレ みんあ だれっだ だれっだ だれっだ あれは デビル! デビルマーン デビールマーン この中にデビルマンがおる!
listview1.items[hoge].subitems[fuga] := 'piyo' ; label1.caption := listview1.items[hoge].subitems[fuga];
Selected
あ、指定した場所って選択した場所って事か
OnClick
140 :
デフォルトの名無しさん :2007/06/07(木) 16:39:14
141 :
デフォルトの名無しさん :2007/06/07(木) 16:39:55
選択した場所も引っこ抜けるの?
143 :
デフォルトの名無しさん :2007/06/07(木) 16:42:37
超初心者のスレタイは釣りですかそうですか・・・
別にどこもおかしくない
教えてもらっといてそりゃねぇんじゃねーか?
教えてくれた人にはめちゃ感謝してます だけど酷い人も居るんですね><
まぁこんなもんだ
酷いも何も
>>132 と
>>133 を見れば解決出来てたんだよ
答えを丸ごと教えてもらって
それで解決した気になるのは笑止だ
そしてそれが例え超初心者であってもな!
復習としてマニュアルから
その関連部分のページを拾い出してみよ
149 :
デフォルトの名無しさん :2007/06/07(木) 17:06:48
>>148 プログラム初めて1日目の私には無理すぎる件><
アホが粘着してるだけだから適当にスルーしとけ。
プログラミング初日がDelphiでListViewとは世の中も変わったものよ だからといってBASICなんて習わされた暁にはと思うが 俺的にはC言語でHello World!がオススメだな Hello World!が終わったらぶっちゃけ卒業でいいよw その後にDelphiでもやればいい
1日っていうのは嘘だな。
初日はなぁ・・TMemo貼り付けただけでメモ帳ができちゃった!ってはしゃぐところから始めないと
そういやぁ初日は… 何だっけかな? 最近忘れっぽくなった 今日は遅帰り日…
155 :
デフォルトの名無しさん :2007/06/07(木) 21:53:56
delphi2007 for win32 アップデートきた。 何がかわったんだ。
自分はC++もDelphiも使っているので、BDS2006使ってますが、 最近、Delphi2007とかC++Builder2007がでる/でたとか聞きます。 これらをまとめたBDS2006の後継となる製品はでますか? CodeGearからハガキも来ないのでよく分かりません…
>156 でることになっています。とりあえずCodeGearインフォメーションサービスセンターに電凸するとおねぃさんが やさしく説明してくれるので、バージョンアップの案内とかを送ってもらえばいいんじゃないかな。
>155 なんかすげぇサイズなんですが。ZIPのやつ(中身はさらに7zip)でも700MBって。 さすがにダウンロードしただけでお腹一杯。適用はまた明日にしました。
160 :
デフォルトの名無しさん :2007/06/07(木) 22:59:16
全角英数字使うやつは例外なく頭悪いよな
161 :
デフォルトの名無しさん :2007/06/07(木) 23:00:00
>>156 でないんじゃないかなあ。
あくまで憶測だが
Delphi7+IBXでDBクライアント作成中なんですが、 Vista対応の為にDelphi2007を検討しています。 Delphi7のソースをそのまま再利用できますでしょうか。
163 :
デフォルトの名無しさん :2007/06/08(金) 10:21:47
すいません、動的生成したコンポーネントにイベントを追加したいのですが、 イベント発生時に渡される引数はどうやって取り出すのでしょうか? 具体的にはTWebbrowserを動的生成してonNewWindow2イベント を追加したいんですが、NewWindow2イベント発生時に渡されるppdisp,cancelが 取得できなくて困ってます。
>>162 DelphiはVBとかと違ってバージョンが上がって互換が壊れた事は殆どない。
ただ、VCLのバージョンで variantの追加とか、 符号付が符号無しになったとか細かい差は当然あるけど
D7からなら変な事してなければそのまま動くと思うよ。
>>163 すみません。 エスパー修行中なんで、言ってる事が判りません。
イベントを追加するのは 単に onNewWindow2 に メソッド名を代入するだけだけど・・・・
あ、
一度、TWebBrowserを貼り付けて、 onNewWindow2 をダブルクリックして
メソッドを自動作成しておいてから、そのメソッドをコピペしてやればどうでしょ? ・・・どうだろ?
165 :
163 :2007/06/08(金) 12:04:55
自己解決しました。 というか164さんが言ってるとおり、 単にメソッド名を代入するだけでした。 onNewWindow2とまったく同じ引数を持つ手続きを作って、 TUIWebbrowser(Sender)と指定すれば、Senderのイベント発生時に渡される引数が使えました。 日本語下手ですいません。↑の説明も微妙です。
本当に自己解決か? 見てから解決したのを 自己解決と言い張ってるんじゃないの?
>>168 ありがとうございます!!!
帰って速攻試します!!
掲示板よりサンプル蔵のログ公開して欲しい・・・
∧,,∧ ミ,,゚Д゚ミζ ミ つ旦 〜と,,,~),,~) 漏れ、マニアだから、近年の Delphiサイトは、ほぼ全部ダウソしてもってるが.... 直接連絡呉りゃあ、なんとかしてもいいけど。 Wikiとか、ダウソツールしにくいところは そういうの無理だから、嫌いなのだが。。。
直接連絡するから住所と電話番号を次にください。 ↓
保存したいけどサイトにJavaScriptか何か使ってて「保存できませんでした」って出るのにはメゲる。 そういうサイトに限って内容が濃かったりするし。
∧,,∧
ミ,,゚Д゚ミ
ミ,つ旦(ミ
遠慮無くhotmailにメール汁
>>173 さん。そーっすねー。
ま、Delギコさんがzipにして漏れにくれるんだろうな。
Turbo Delphi Explorer update2を使っているんですが 最近なぜか、戻るとやり直しができなくなってしまいます。 こういう現象きいたことありますでしょうか?
177 :
デフォルトの名無しさん :2007/06/08(金) 20:16:45
>>177 ありがとうございます。チェックをはずしてみたのですが駄目した。
先ほどもなってましてて、ツールバーを一旦全部非表示にしてみたら戻ったのですが、
またなるようだったら再インストールを考えたいと思います。
ありがとうございました。
Windows XP でスラッシュ"/"を組み合わせたショットカットキーを設定しても機能しま せん。たとえば mnFindAll.ShortCut := TextToShortCut('Shift+Ctrl+/'); (※mnFindAll はメニュー項目) とした場合 Win98 ではOKですが XP ではだめです。 メニュー項目の ShortCut プロパティには Shift+Ctrl+/が設定されますがこのキーを押 しても XP では機能しないのです。なぜでしょうか?
ComboBoxってCtl3DをFalseにしても効かないんですか?
>>179 Form1.KeyDownでは拾えるだろうからそっちで拾って
mnFindAll.OnClick呼んだら。激しくインチキくさいが。
>>179 経験的に、テンキー付のキーボードの場合、
テンキー側の/に効いてしまうみたいです
自分はキーコードを直接指定する方法で回避しましたが
TextToShortCutてのは使ったことがないので、同様に
適用できるかどうかはわかりません
便乗して質問!
>>110 の方がかいてくれたTUpdownをセルに表示する方法は、TDBGridで実現するときはどうするんですか?
TDBGridにはSelectCellというメソッドはなかったはず。
>>184 uses TypInfo; を追加して
http://delwiki.info/?%A5%B3%A1%BC%A5%C9%C1%D2%B8%CB%2F%A5%B3%A5%F3%A5%DD%A4%CE%C9%D5%A4%B1%C2%D8%A4%A8 実装部に
type
TMyDBGrid = class(TDBGrid)
FUpDown1: TUpDown;
function SelectCell(ACol, ARow: Longint): Boolean; override;
constructor Create(AOwner: TComponent); override;
end;
constructor TMyDBGrid.Create(AOwner: TComponent);
begin
inherited;
FUpDown1 := TUpDown.Create(Self);
FUpDown1.Parent := Self;
end;
function TMyDBGrid.SelectCell(ACol, ARow: Longint): Boolean;
begin
FUpDown1.Visible := Fields[ACol] is TNumericField;
if FUpDown1.Visible then
with CellRect(ACol, ARow) do begin
FUpDown1.Top := Top;
FUpDown1.Left := Left ;
FUpDown1.Height := Bottom - Top;
end;
Result := True;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
DBGrid1:=ChangeComponent(DBGrid1, TMyDBGrid) as TDbGrid;
end;
なお 185 は UpDownを動的作成してるけど、フォームに貼り付けておいた 方がイベントを書いたりするのに短期的には楽。 長期的には再利用がめんどうになるんだけどね
うほっ。 ありがとうございます。 今までDBGridに貼り付けたUpDownのTopとLeftの位置をどう設定するかばかり考えていました。 早速教えていただいたとおり試してみようとおもいます。
>FUpDown1 := TUpDown.Create(Self); こいつのFreeはどうするの?
Create(Self)だからSelf=Form1が死ぬときに道連れにしてくれる。 フォームデザイナでコンポはるのと動的に生成するので特に区別されない。
なるほどー
人の質問を読むだけでも勉強になるね。
Ownerを呪文かなにかだと思ってた? 呪文の数を減らすように勉強しろよな。
193 :
184 :2007/06/09(土) 13:37:01
>>185 さんがくれたコードですが、
ChangeComponentは知らん、とはじかれてしまいました。Del5Proです。
ヘルプにも載ってませんでした。
それと、ftIntegerのセルをクリックすると、UpDownは表示されるんですが、次にUpdownをクリックしたらUpdownは消えてしまいます。
どのメソッドでUpDownの処理をすればいいんでしょうか??
>>189 え?それってTUpDownに限って?TRichEditやTFontやTEditとかも
Create(self)した後、必要なくなったら必ずFreeしてたんだけど
196 :
184 :2007/06/09(土) 14:29:46
Freeは「もしインスタンスがあれば…」Destroyしてくれるんで、別段影響ないんじゃないスかね? 素人が口はさんですんません。
もちろん、その都度Freeする方がベター。 189は言ってみれば安全装置のようなもの。 長時間稼働し続けるアプリなんかでは深刻な影響を出すこともある。
>>195 例えばユーザーがセルをクリックする度に
TUpDownをCreateするならFreeしないとメモリリークと呼ばれるバグになるけど
何千回クリックしてもインスタンスの数が1しか生成されないなら
明示的なFreeは不要だしそういうコードは無駄。
DBGrid と UpDownを貼って、 1、 フォームの OnCreate procedure TForm1.FormCreate(Sender: TObject); begin UpDown1.Parent := DbGrid1; end; //2、.DBGrid1 OnDrawOnColumnCell var oldRect: TRect; fview: boolean; procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin fview := False; if gdSelected in State then with DBGrid1 do if SelectedField is TFloatField then with TFloatField(SelectedField) do begin // FUpDown1.Max := round(MaxValue); // FUpDown1.Min := round(MinValue); UpDown1.Position := AsInteger; fview := true; end; // TIntegerField も同じように UpDown1.Visible := fView; if UpDown1.Visible then if not CompareMem(@oldRect, @Rect, Sizeof(Rect)) then with Rect do begin UpDown1.Top := Top; UpDown1.Left := Left; UpDown1.Height := Bottom - Top; end; end;
//3 UpDown1 の OnChangingEx procedure TForm1.UpDown1ChangingEx(Sender: TObject; var AllowChange: Boolean; NewValue: Smallint; Direction: TUpDownDirection); begin if not fview then exit; AllowChange := DBGrid1.SelectedField.CanModify; if AllowChange then begin with DBGrid1 do if SelectedField is TFloatField then with TFloatField(SelectedField) do begin AsInteger := NewValue end; with DBGrid1 do if SelectedField is TIntegerField then with TIntegerField(SelectedField) do begin AsInteger := NewValue end; end; end;
>>185 の SelectCell は、セルの選択前に呼ばれます。
そこでは どのフィールドを変更してるかは判りません。
仕方ないので、OnDrawColumnCell を使う事にしました。
これは表示の都度呼ばれるので、
ここで表示内容が変更されると無限ループ状態になります。
UpDown1の OnClick というのが、なぜが動かない。
で、UpDown1ChangingEx を使うしかないのだけど、これは UpDown1.Position への代入でも呼ばれるので
何かゲートが必要という事で、汚いコードになっています。
という事で思ったより厄介ですね。
202 :
184 :2007/06/09(土) 20:10:29
いやぁ、どうも骨おってくれてありがとうございます。 いいものいただきました。
JCLのインストール終わって JVCL3.31入れようとしたら Choose IDE Targetで Delphi6.0Proのチェックがグレーになって先に進めません。 どうやったらいいんでしょうか?
TDBGridはTStringGridと違ってDefaultRowHeightとかが無いようですが、どこでCellのデフォルトの幅、高さを決めるんですか?
205 :
デフォルトの名無しさん :2007/06/10(日) 16:27:26
今音楽編集ソフトを作ってるんですけどフェードアウトとか再生速度とか周波数とかってどうやって変更すればいいんですか?
206 :
デフォルトの名無しさん :2007/06/10(日) 17:17:03
>204 高さはフォントの高さに依存。 幅はColumnsで列毎に設定。 それ以上のことがした刈ればコントロール自体を改造しないと無理。 >205 Delphi単独では出来上がったWAVを鳴らすことくらいしか出来ない。 サウンド関連のスレで質問した方がよい。
207 :
デフォルトの名無しさん :2007/06/10(日) 18:35:00
TRect型に関して質問です。 Rect.Left := 0; Rect.Top := 0; Rect.Right := Image.Width; Rect.Bottom:= Image.Height; いつもこんな感じで4行のコードを書いているのですが、 1行で代入することはできないでしょうか? よろしくお願い致します。
Rect
>>208-209 即レスありがとうございました。
Rect:= Rect(0, 0, Image.Width, Image.Height);
で実現する事ができました。
どこかのHPでは4つの引数も不要な関数を見かけたのですが
所在を失念したため、Rect関数を使おうと思います。
Rect := Image1.ClientRect;
>>211 これです!胸のもやもやが取れました。
本当にありがとうございました。
214 :
デフォルトの名無しさん :2007/06/10(日) 22:58:48
質問です。 作成済みのFrameをMainFormに貼り付けて実行してみたのですが、 Frame.OnClickイベント関数がなぜか呼ばれません。 Frame内のOnClickイベントは発生しないのでしょうか? 是非ともFrame内で解決したいです。 どなたかお詳しい方、よろしくお願い致します。
215 :
デフォルトの名無しさん :2007/06/10(日) 23:19:00
いや、そんな事は無いね。 FrameだとおもってBevel貼り付けてるとか、 EnabledがFalseとか イベントハンドラ設定しているつもりでOnClickに設定されてないとか。 他のコントロールに邪魔されてるとか。 解らないならもう一度ゼロから作り直してみるのもいいかも。
>>215 >他のコントロールに邪魔されてるとか。
PanelやCaptionを貼り付けていたので、Panel.OnClickや
Caption.OnClickイベントで解決いたしました。
Frame内のどこかがクリックされた→処理時に、
Caption等にも邪魔されることが理解できました。
本当に勉強になりました。ありがとうございました。
217 :
216 :2007/06/10(日) 23:39:37
一部訂正。 OnClick→OnMouseDown
くだらんことですまん。 TurboとDelphi 2007の違いって何? なんか久々にコートギア見たらシリーズ分かれているのですが?
ShellListViewでファイルを右クリしたときに出るコンテキストメニューを 普通のListView, ListBoxでファイルのパスを格納して右クリしても出したいんですが どうやればいいですか?
>>171 niftyに許可頼んでログうpしてくれ
>>219 JCLのJclShell.pasにあるDisplayContextMenu関数とかどうだろう?
>>195 TUpDown,TRichEdit,TEdit → ○
TFont → ×
TUpDown,TRichEdit,TEditはコンポーネント(以下コンポ,TComponentのナカーマ)なのでOK,
TFontは違うので駄目です.
>>198 TUpDown.Create(self)ならそういう場合でもメモリリークにはならないと思います.
ただしTUpDownはWindowsのコントロールですから
Windowsのリソースを大量に浪費することになってしまいますね.
(Win9x系の環境だとアプリはOSの動作がおかしくなるかもしれません)
ひとつのPanelの中に、 Panel1 Panel2 Panel3 が、いずれもAlign=alTopでならんでいるとして、コード上でこれらの順を Panel3 Panel1 Panel2 のように切り替えたい。 それでPanel1.Align=alNone、Panel2.Align=alNone、Panel3.Align=alNone、とし、 並べたい順にPanel3.Align=alTop、Panel1.Align=alTop、Panel2.Align=alTopとしてみたけど、ならぶ順はバラバラ… こういうときはどうすればいいんでしょうか?
Topプロパティをいじればいい。 最初の例で言えば Panel3.Top := 0;
Delphi2006を使っています。 var d:double; begin d:=2.8; if trunc(d/0.1)<>(d/0.1) then ShowMessage('同一ではない'); end; これを実行すると、同一ではない と表示されます。 計算の上では 2.8/0.1=28 となり、28=28 なはずなので、同一のはずなのですが、 数値を2.8以外にすると、一致するようです。 なぜこのような結果になるのでしょうか。
226 :
225 :2007/06/12(火) 02:56:55
> 数値を2.8以外にすると、一致するようです。 これは余計でした。2.7等でも同じです。 単に、小数点以下第一位までの小数かチェックするための判定です。
>>225 >2.8/0.1=28 となり
実は、浮動小数点型だと、コンピュータの内部では2.8も0.1も正確に表せないため誤差が発生する
だから、2.8/0.1=28 とはならない
>単に、小数点以下第一位までの小数かチェックするための判定です。
有効桁数どのくらいかわからんけど、こんな感じかな?
if Frac( x * 10) > 0.00001 then
228 :
225 :2007/06/12(火) 03:31:47
うーん、やはりそういうもんですか。 ただ、 trunc(d/0.1)<>(d/0.1) の部分を trunc(d*10)<>(d*10) にすると、正常に判定されるんですよね。 何が違うのか、よくわからないものですね・・。
>>228 D5で試してみたけど、どっちもダメだったよ
10は浮動小数点で誤差なく表示されるから、1/0.1と10は同じじゃない。
特に、わざわざDoubleを使っているでしょ? Delphiは計算は常にExtendedでするから
余計な誤差が出るのさ。
var
d: Double;
e:Extended;
begin
d := 2.8;
E := 2.8;
caption:=format('%19.17f %19.17f',[d ,e ]);;
とやってみたら判るでしょ? 精度Doubleで良いなら、逆にExrendedで計算して丸めたら?
つか少数第四位以下の精度でよけりゃCurrency使えば解決じゃん
ravereport使用法のチュートリアル的なページってないでしょうか? 最近delphiを使い始めたんですが、ググってもRavereport関連の 情報がほとんど見つけられません。 英文マニュアルを読むか、適当に触りながら習得していくしかない んでしょうか?
>>224 ありがとうございます。
Topの存在を忘れてた…
233 :
225 :2007/06/12(火) 10:23:44
>>229 なるほど、勉強になります。
どうもです。
>>231 みんなもう印刷は自分でやってるんじゃないかな?
俺もデータベースアプリなら、簡単なマクロ作ってやってるよ。
とういうの使うの便利そうでめんどくさいもの。
プログラムにアドイン機能を追加したい場合、 LoadPackage でも LoadLibrary でも手間は同じでしょうか。
LoadPackage だとDelphiでしかアドインが作れなくなるから LoadLibrary を使うべきだろうな
オープンソフトとかじゃないので delphi オンリーでいいんですが、 手続きの手間とかを考えたとき、パッケージのほうが簡単にできるとか そんなことないですか。
239 :
デフォルトの名無しさん :2007/06/12(火) 22:35:37
Delphi6の外部ツールでHTML HELP形式のMSDNでWin32APIを検索したいんだけど 良さげなツールないですか?
難しい日本語だな・・・
241 :
デフォルトの名無しさん :2007/06/13(水) 03:41:59
C言語のDLL用のヘッダーおnトランスレートを行いたいのですが、
よいツールはご存じないでしょうか?
以下、自分で見つけたツールです。
Dr.Bob's HeadConv - C DLL Header Converter and implicit/explicit Import Unit Generator for Delphi
http://www.drbob42.com/headconv/index.htm ・型にTをつけない
・そのままだと、DLLを指定ディレクトリから読み出すのに対応していない(一応、動的呼び出しはしているようです)
等の不満があります。
242 :
241 :2007/06/13(水) 03:43:12
ソースが公開されていて、カスタマイズできるものがあればなあ・・・という感じです。
>>241 がオープンソースだったらなあ・・・
243 :
241 :2007/06/13(水) 03:49:20
8分間の自作自演でした
245 :
デフォルトの名無しさん :2007/06/13(水) 05:45:09
Delphiで、perlで言うHTML::Template、rubyで言うeRubyみたいにはないでしょうか?
eRubyまで行かなくても、HTML::Templateみたいのがあればなーと思います。
>>239 いっそのことVisualStudio EEをインスコするとか・・・無料だし
246 :
デフォルトの名無しさん :2007/06/13(水) 09:55:32
Delphiでプリンタ出力のファイルに保存することは可能なのでしょうか? TPrinterのソースを見るとそもそもlpszOutputの記述が無くて・・・・ これってTPrinterを継承したら拡張出来るレベル?それともどうやっても無理?
247 :
デフォルトの名無しさん :2007/06/13(水) 09:57:11
Explorerでファイルをコピー(Ctrl+C)したときのパスを Clipboardで取得するにはどうやりますか?
>>246 poDisablePrintToFile を指定してユーザがチェックを選ぶと
あとは勝手に保存されるのが 普通は "プリンタ出力のファイルに保存" の機能だと思うが?
つまりプログラム側では何もしなくていいと思うのだが
独自の保存形式なら、そもそもTPrinterを選ぶのが間違いでは?
249 :
246 :2007/06/13(水) 10:46:59
>248 プログラム側で自動的にファイル名を生成し保存していく処理を作りたいんです (具体的にはPostScriptファイルの保存) TPrinterの中ではDOCINFOのサイズとタイトルしか入れてないんです・・
Printer.BeginDoc の代わりに SetAbortProc StartDoc StartPage を自前でやりたいという事? でも、lpszOutput に何か指定しても意味なかったような・・・・
251 :
246 :2007/06/13(水) 11:57:12
>>250 その通りです
もっと絞るとStartDocに渡すDocInfoにlpszOutputを指定したいだけです
lpszOutputに指定したファイルパスにプリンタドライバが出力するコードを保存してくれると思っているですがそもそも間違っているんでしょうか?
>>251 ああ、では Printerを使わないようにしないとダメだね
BeginDocだけを自前でやるのは出来ない。
privateメンバのCheckPrintingでBeginされたかどうか見てるからね
だから Printers.pas をプロジェクトにコピーしてきて、それだけ書き換えるしかないと思うよ。
254 :
246 :2007/06/13(水) 13:37:12
>>253 やっぱりダメですか・・・
Printers.pasの該当箇所のみ修正してコピー
プロジェクトに追加し再コンパイルすることで本来のVCLのTPrinterより
優先して使用されると理解していいのでしょうか?
RichEditのCHARFORMAT2を使って、TRichEditのFontの操作をしたいと思っているのですがわからない事があるので教えて下さい。 TFontDialogから返ってきた値(FontName、Style、Size)をどうやって渡せばいいのでしょうか? RichEdit.pasを見ても定義されてる型や変数名がいまいちピンとこなくて途方に暮れています。 環境はDel6perです。
RichEdit1.Font.Assign(FontDialog1.Font);
257 :
デフォルトの名無しさん :2007/06/13(水) 18:25:32
>>243 これ、ダメでした。
正しく、内包のサンプルヘッダーすら、まともにコンバートできないわ・・・
今デバッグ中。
258 :
255 :2007/06/13(水) 19:07:56
>>256 そうじゃなくて
procedure TForm1.SetFontProc;
var
Format : CHARFORMAT2;
begin
FillChar(Format, SizeOf(Format), 0);
with Format do
begin
cbSize := SizeOf(Format);
dwMask := CFM_BACKCOLOR + CFM_COLOR;
crTextColor := clBlack;
crBackColor := clWhite;
Richedit1.Perform(EM_SETCHARFORMAT, SCF_ALL, Longint(@Format));
end;
end;
こんな風にFontNameやSizeを変えたいと思っています。
聞きたいのはFormatの中にどうやってTFontDialogで返ってきた値を入れればいいのかです。
宜しくお願いします。
259 :
デフォルトの名無しさん :2007/06/13(水) 19:13:36
>>257 だめだ。手つけらんねえ。
バイナリ版は動いたけど、でたらめなヘッダーを生成する orz
小さいヘッダーなので、生成されたヘッダーを参考に、手動でコンバートすることにします。
ところで、
unsigned __int64
ってそう変換すりゃいいんだろ・・・Int64で代用すりゃいいんだろうか・・・
260 :
デフォルトの名無しさん :2007/06/13(水) 19:34:58
Delphi6を使っています。 別アプリにフォーカスを当てたいのですが、どうしたら良いのでしょうか?
SetForegroundWindow FindWindow
263 :
デフォルトの名無しさん :2007/06/13(水) 20:40:47
>>259 Int64で代用しました。
ところで、C言語の可変長引数の関数の定義は、Delphiには変換できないのでしょうか?
とりあえず、 szFaceNameに、Font.Name bPitchAndFamilyに、Font.Pitch bCharSetにFont.Charset yHeightにFont.Sizeから、twip 単位って奴に変換してだな。 後は、Font.Stylesに下線とか取り消し線が含まれてたら適宜設定。 これくらいでいいんじゃ?
266 :
255 :2007/06/13(水) 20:56:20
>>262 ,265
これで解決できそうです。
どうもありがとうございました。
267 :
デフォルトの名無しさん :2007/06/13(水) 20:57:30
>>264 できそうな感じです。
調べてみます。
ヘルプに全然説明がないのがいやん。
268 :
デフォルトの名無しさん :2007/06/14(木) 01:44:36
>>268 Windows.pasに宣言されていないWin32APIをC/C++用のヘッダ.hから盗んでくるときに使う物。
271 :
デフォルトの名無しさん :2007/06/14(木) 11:43:27
試しに、wsprintfを呼び出すコードを書いてみました。 これは上手くいきました。 program wsprintf_test; {$APPTYPE CONSOLE} uses SysUtils; function wsprintf(var Output ; Format: PChar): Integer; cdecl; varargs; external 'user32' name 'wsprintfA'; procedure Main(); var s:string; begin SetLength(s,1000); wsprintf(pchar(s)^,'%5d %5d', 1,100); s := PChar(s); Writeln(s); Readln; end; begin Main; end.
272 :
デフォルトの名無しさん :2007/06/14(木) 11:50:00
で、実は、可変長引数の関数を呼び出すのではなく、 呼び出される方でして・・・ C言語のDLLに、呼び出される関数を設定して、呼び出してもらうのを想定しています。 固定長と仮定して、呼び出されるようには、以下のようにしてできたのですが、 可変長ってできるんだろうか・・・? (テスト的に、Delphi内で呼び出してます) program call_test; {$APPTYPE CONSOLE} uses SysUtils; type TPuts = procedure (par1{, ...}: string); cdecl varargs; procedure Puts(par1, par2, par3: string); cdecl; begin Write(par1, ' '); Write(par2, ' '); Write(par3, ' '); Writeln(''); end; begin TPuts(@Puts)('Hello', 'World', 'HogeMoge'); Readln; end.
273 :
デフォルトの名無しさん :2007/06/14(木) 15:19:41
Delphi6でサービスアプリケーションを作成しています。 TADOConnectionをOpenするとエラーになってしまいます。 同じプログラムを普通のアプリケーションで実行するとエラーになりません。 Delphi6のサービスアプリケーションでTADOConnectionをOpenすることは できないのでしょうか?
せめて何のエラーが出るのかを書く必要があることくらい分かるようになろうよ・・・
Delphiには1文字4バイトのUCS4Stringってのがあるようですが、 これはどう使うんですか?Stringと同じ感覚では使えないですか?
>>272 DelphiではCの可変長引数相当はアセンブラ関数でも使わないと書けない
これから設計するのなら、
・同じ型ならオープン配列パラメータ
・任意の型なら型可変オープン配列パラメータ
としてもらう方がいいのでは? どうしても可変長引数としたいなら BCBでこれらに
変換する部分を書いてリンクするのが簡単だと思う。
Cの可変長引数の場合、一つ以上の固定引数を必要とし その固定引数から可変長引数のアドレスを取得しているようだ。 ならDelphiでもそれを真似ればできる(はず) program call_test; {$APPTYPE CONSOLE} uses SysUtils; type TPuts = procedure (ParamCount: Integer { ... }); cdecl varargs; TStringArray = array[0..MaxInt div sizeof(String)-1] of String; PStringArray = ^TStringArray; procedure Puts(ParamCount: Integer { ... }); cdecl; var Params: PStringArray; I: Integer; begin Params := PStringArray(LongInt(@ParamCount)+4); for I := 0 to ParamCount-1 do Write(Params[I], ' '); Writeln; end; begin TPuts(@Puts)(4, 'Hello', 'World', 'ABC','DEF'); TPuts(@Puts)(1, 'Hello'); TPuts(@Puts)(0); end.
278 :
デフォルトの名無しさん :2007/06/15(金) 10:44:38
TStringListの各行(Index?)にaddObjectで TListとかを設定したとします。 その後、Assignで別のTStringListを代入した場合 Objectも入れ替わると思うのですが、そのとき、 最初に設定されていたTListは自動的に開放されるのでしょうか? 自分で開放してやる必要がありますか?
自動で破棄するのはContnrsのOwnsObjectプロパティのあるコンテナクラスだけだな。
ソースがSJISの場合 w: widestring; w := '漢字' + w; ってやったとき + wは一時的にSJISに変換されちゃうの?
>>278 どっちにしろ引数の数が判らないとアクセス出来ないさ。
数を渡すとか、最後をNULL で渡すとか、
もしCのprintfスタイルで渡したいのなら
Cでvsprintfのコードをコピペして来て、GCCでコンパイルしてobjをリンクする事になるだろう
ただ浮動小数点ライブラリを含むと、リンクする為にコピペが大変だけどね
285 :
デフォルトの名無しさん :2007/06/15(金) 19:18:03
左クリックをした時と 右クリックをした時で 処理を変えたいのですが、 どのように書けばよいのでしょうか。 (TShiftStateの使い方がヘルプを読んでもわからないので...) よろしくお願いします。
286 :
278 :2007/06/15(金) 20:44:38
元DLLのソースを見たところ、 幸いにして、一か所でしか使われていなく、可変長ではなく固定長として使っているようなので、 固定長になるようにヘッダーの書き換えで対処したいと思います。 たぶん、本当に可変長に使っていたら、呼び出し元を、書き換えないといけないところでした。 つきあってくださって、ありがとさんでした。
if n and KUSONAGAI_TEISUU = KUSONAGAI_TEISUU then をif flagon(n, KUSONAGAI_TEISUU) thenってかける標準関数無い?
それ if n then でいいじゃん
ビット演算じゃろ if (n xor KUSONAGAI_TEISUU)=0 とでもしとけ
if n and KUSONAGAI_TEISUU <> 0 then
標準関数ではないんじゃないか?
>>289 でいいと思うが
>>285 OnMouaeDownの引数TMouseButtonのことか?
いままでデータベースに BDE + Paradox 使ってたのですが、 いよいよVistaで動かなくなってしまったので DBISAMに乗り換えようと思うのですが、 データベースを作り直すのが大変です。 パラドックスのデータベースから、DBISAMのデータベースを作るソフトってないでしょうか。
>>294 これはVistaでパラドックスを動かすやり方になるのでしょうか?
解読に時間がかかりそうなのでひとまずお礼まで
>Paradox 形式のテーブルを利用する目的で、BDE を使用されているとのこ >とですが、BDE については開発を終了させていただいました。恐れ入りま >すが、InterBase や MSDE などへの移行をお勧めいたします。 えー、もうParadoxやBDEダメなんだ… せっかく覚えたのに…
まあ、
まあ、BDEは配布は大変だし、 パラドックスはしょっちゅうこわれるし、lckファイルはなんだか怪しい動きをするしで、 あまりよいツールだとはいいがたいから、開発終了したのかも、 しかし、折角覚えるほどパラドックスってなにか深い設定でもあったっけ?
InterBaseをつくったアプリと同時に配布したいんだけど、具体的にどうすればいいのか詳しいサイト知りませんか?
300 :
デフォルトの名無しさん :2007/06/16(土) 18:50:27
Del7でFormのFontにLucidaSansUnicode指定すると文字化けするんだけどバグ?
301 :
デフォルトの名無しさん :2007/06/16(土) 19:02:03
ターボdelphiで、空のTMemoにTEditの文字列を挿入しようとしてるんですが、 memo1.Lines[5] := Edit1.Text だと文字が表示されないんです。 無理なのかしら?(´・ω・`)
memo1.Lines.Add(Edit1.Text); じゃだめ?
>>301 while Memo1.Lines.Count<5 do Memo1.Lines.Add('');
memo1.Lines.Add( Edit1.Text );
ではダメ?
>>302 指定行に挿入したいのです
>>303 近いんですが、Edit1のonchangeイベントでTmemoに書き込むような感じなのです(´・ω・`)
行の挿入は Memo1.Lines.Insert(5, Edit1.Text); ただし既に5-1行が存在していないとエラーになるから >while Memo1.Lines.Count<5 do Memo1.Lines.Add(''); のように空行を先に作っておく必要がある。
じゃあ while Memo1.Lines.Count<5 do Memo1.Lines.Add(''); memo1.Lines[5] := Edit1.Text
lines.CommaText := 'C:\Document and Settings'; でlines.Count = 3になっちゃうんだけどスペースでばらさないようにするのはどうやるの?
6
309 :
306 :2007/06/16(土) 19:59:33
だめだ。かぶっていけない。 まかせたぞ
310 :
307 :2007/06/16(土) 20:02:09
単純に""で囲むというの以外でお願いします。
lines.Add('C:\Document and Settings');
314 :
デフォルトの名無しさん :2007/06/17(日) 11:13:15
関数の中で関数を抜けるにはどうしたらいいのでしょうか? breakでも抜けられず、今はifで最後の所まで行ってしまいます。
exit
引数違いのコンストラクタを複数作ろうと思っているのですが、 あるコンストラクタの中から別のコンストラクタ読んだらまずいでしょうか? 表面的には問題なく動くのですが。BeforeConstructionも一度しか呼ばれてないようです。 TClassA = class(TObject) protected procedure BeforeDestruction; override; public constructor Create; overload; constructor Create(A: Integer); overload; end; constructor TClassA.Create; begin Create(3); end; constructor TClassA.Create(A: Integer); begin // end; procedure TClassA.BeforeDestruction; begin inherited; ShowMessage(''); end;
Create(A: Integer); のなかの の実行部分を普通のメソッドにして両方から呼べばいいじゃないの
>>317 316です。もちろん、そうすれば、問題ないんですけど、コンストラクタ内でコンストラクタ呼んで問題ない
ならそうしちゃいたいと思いまして。
問題ない。
知ってるとは思うけど、その例なら一行にまとまるな。 constructor Create(A: Integer=3);
>>319 了解です。
>>320 デフォルト値与えるとどうなんでしょうね。
>constructor TClassA.Create;
>begin
> Create(3); -> Create;??
>end;
だと、どっちのCreateが呼ばれるのか謎ですが、試してみます。
ありがとうございました。
322 :
デフォルトの名無しさん :2007/06/18(月) 05:28:38
DirectInputについて質問です。 var hr: HRESULT; g_lpdi: IDirectInput; begin hr:= DirectInputCreate(HInstance, DIRECTINPUT_VERSION, g_lpdi, nil); // 処理 end; hrに DIERR_OLDDIRECTINPUTVERSION が返ってきてしまって、 始めの一歩のDirectInputオブジェクト生成でつまづきました。 DIRECTINPUT_VERSIONのかわりに$0900なども試してみたのですがダメでした。 解決方法をご存知の方、ご教授ください。 OS: Windows2000SP4 DirectX: 9.0C Clootie DirectX SDK: 92(April 2007)
323 :
322 :2007/06/18(月) 06:12:38
DirectX9 では DirectInputのバージョンは8でした。。。 DIRECTINPUT_VERSIONのかわりに$0700を試してみたら、 DirectInputオブジェクトの生成ができました。 DI7でコーディングは進めてみますが、 当方の環境はDX9なので、DI8が使えないのは釈然としません。 DirectInput8をなんとか使いたいです。
>>322 DirectInput8Createでは駄目かな?
325 :
322 :2007/06/18(月) 07:21:31
>324 ありがとうございます。 DirectInput8Createを使ってみようと思います。 引数が一つ増えてGUIDを使うようなので、CreateDeviceを使う必要がなくなったと予想して CreateDevice部をコメントにしてみても上手く動いているようです。 その辺りは引き続き調べて勉強してみます。
326 :
デフォルトの名無しさん :2007/06/18(月) 11:09:24
Delphi超初心者です。教えてください。 netstat -e の出力を取り込んで、値が閾値を超えていたら UN*X の kill のような感じ で別のプログラムを終了させるアプリを作ろうと思っているのですが、コマンド出力 の取り込み (Perl 等でいうバッククォートとか system() とか ) と kill にあたる処理を どうやっていいのかわかりません。 もし Delphi のコンポーネントでできないならAPIでやることになると思いますが、どんな API を使えばいいか教えていただけるとありがたいです。よろしくお願いします。
>>326 CreatePipe して TStartupInfo を用意して CreateProcess でコンソール取り込み
kill相当は判らん。 窓を持ってるならWM_QUIT かな
あとはTerminateProcessくらいしか知らない
netstat -e相当のデータなら、 直接iphelperAPIで取ってもいいんじゃない。
330 :
デフォルトの名無しさん :2007/06/18(月) 22:56:26
>>316-321 constructor は、普通に関数として呼んだ場合は、普通に関数として呼ばれます。
インスタンスは生成されません。
つーか、ヘルプに書いてある
constructor で検索しる
> クラス参照ではなくオブジェクト参照によってコンストラクタが呼び出された場合は,
> オブジェクトは作成されません。この場合に行われることは,指定されたオブジェクトの
> 操作であり,コンストラクタの実装部分で指定された文だけが実行され,
> そのオブジェクトへの参照が返されます。一般に,コンストラクタをオブジェクト参照で
> 呼び出すのは,予約語 inherited を使って親コンストラクタを実行する場合だけです。
331 :
デフォルトの名無しさん :2007/06/18(月) 22:58:20
332 :
326 :2007/06/19(火) 07:43:22
皆様どうもありがとうございます。どうやらAPIを叩かないといけないみたいですね。 手元の古いAPI本には載ってない関数もあるみたいで…。
アホなやり方 sl: TStringList; bat, log: String; bat := ParamStr(0) + '.bat'; log := ParamStr(0) + '.log'; sl := TStringList.Create; sl.Add('netstat -e > ' + ParamStr(0) + '.log'); sl.SaveToFile(bat); WinExec(bat, SW_HIDE); Sleep(3000); // TODO:ShellExecuteEx等でちゃんとした終了待ちをする sl.LoadFromFile(log); タスクの終了は WinExec('taskkill 〜', sw_hide) でできるはず
Turbo Delphi 2006を導入するに当たって .net Framework 1.1のランタイムをインストールしようとすると 『Microsoft .NET Framework セットアップ Windows インストーラの初期化中にエラーが発生しました。セットアップを終了します。』 というダイアログが出てうまくいきません. その他諸々パックで失敗したのでダウンロードに失敗したのかと思いましたが .net Framework 1.1のランタイムを単独で落としたものでも同じ結果に…. どなたか救いの手を… #ちなみに自宅の環境に入れようとしたときはうまくいきました.
すいません,自己解決してしまいました. .net Framework SDKのインストーラーを立ち上げたままにしていたのを終わらせてからやり直したら進みました. スレ汚し,失礼しました.
336 :
デフォルトの名無しさん :2007/06/19(火) 19:26:47
>WinExec(bat, SW_HIDE); Sleep(3000); うーん…
Delphi2006ENTのTSQLConnectionで ORACLE8に接続しようとしたときに 「oci.dllが起動できません。」と表示されるのですが 何が悪いのでしょうか。
OCI.DLLが無い。
スマソ。 BDS2006ってOracle8をサポートしていなかったんだな。 dbxora30.dll じゃダメらしい。
アプリが常駐している状態でCtrl+Alt+Gとかを検出するのってどうやるんですか。
フック
RegisterHotKey で グローバルホットキー みたいなのをやりたいの?
344 :
デフォルトの名無しさん :2007/06/20(水) 20:35:33
命令をn秒待たせる(停止させる)命令はdelphiには無いの? ミリ秒もあるとうれしいんだけど・・・
Sleep
>>344 一応SleepというWindows APIがあるけど、
これはスレッドごと止めてしまうからねぇ…
processmessages回せ
待たせてどうすんだ?
多分、HSPかなにかやっててDelphiに流れてきたけどWait命令に相当するものが見つからん、ということじゃまいか。
HSP…そうですか。では
351 :
デフォルトの名無しさん :2007/06/21(木) 03:40:09
Form1からForm2を呼び出すのってどうしたらいいんですかね・・・ いろいろと探してはみましたけど意外と載ってないもんで
Form2.Visible := True;
Unit1でuses Unit2;してForm2.Show; or Form2.ShowModal;
ほんとくだらねー質問なんだけど .pas, .dprに続く第三のDelphi/Pascalの拡張子って何かある?.incは除いて。 Explorerからダブルクリックすると勝手にmakeしてスクリプト的に実行できるように その拡張子に関連付けられたら便利かなと。
.dcu
文字列中の半角カナの小さい文字"ッャュョ"等を大文字に直す関数ってありますか? 無ければどのように作ればいいでしょうか。
ヵッォぉゃっょ
>>356 AnsiReplaceStr('おちんこ', 'ち', 'ま');
100万行ぐらいのCSVを LoadFromFileでTStringListに読み込もうとしたら System.OutOfMemoryException(メモリ不足) が起こって読み込めませんでした。 一気にまるごと読み込むんじゃなくて 1行ごとに読み込んでいったりする方法はないのでしょうか。
var f: test; s: string; assignfile(f, 'data.csv'); reset(f); while not eof(f) do readln(f, s); closefile(f);
362 :
278 :2007/06/21(木) 18:33:03
一か所でしか使われていないと思っていたのに、他の場所で使われていました orz >可変長引数の呼び出し
実行してみて気づいた・・・
結局、DLL側を書きかえ必須か・・・
あまりやりたくなかったですが、
>>277 の方法で、
DLLの呼び出し側のソースを改変して対処したいと思います。
363 :
278 :2007/06/21(木) 19:36:07
>>362 のようにやる前に、DLL側のソースを見たところ、
結局のところ、printfのような出力関数を、
可変個引数で、外部にまるなげしているだけのようでした orz
じゃあ、あらかじめ、_snwprintf で、1つの文字列に直してから、
固定引数で、渡すようにすればいいんじゃ?と思い、
DLL側を直したところ、なんとか、エラーもなく、無事動いているようです。
最初から、可変個引数する意味ねーーー!!
なんで、こんな実装になっとんのだ
正規表現のことなのでDelphiとは直接関係ないと思うけど、 BRegExp.DLLを使ってのことなので勘弁してください。 複数行に渡ってのマッチングをしたい時は、mを指定しますよね? あるTStringListに hogehoge abc def hogehoge って入ってるとして、 BRegExp.Match('m/(abcdef)$/m',tempStringList.text)ってやっても マッチしないのはどこが間違っているのでしょう? m/(abcdef)$/mをm/abcdef$/m m/(abcdef$)/m m/(abcdef)/m等 いろいろ変えてみましたが、全くだめなのでどなたか教えてください。
BRegExp.Match('abcdef',tempStringList.text);
>>356 さん
∧,,∧ つくっておきましたよ
ミ,,゚Д゚彡 そういう時のために
~旦と ∪ミ
 ̄ ̄|| (~,,(~,,,ミ@
]]]]]]]]]]]]]]]]]]]]]]]]]
http://delfusa.main.jp/delfusalibrary/20060527212010/StringUnit/StringUnitLight.pas function WideStringsReplace
か、function StringsReplace
をどうぞ。
使い方はこんなん。
var
OldPatterns, NewPatterns: TWideStringDynArray;
begin
SetLength(OldPatterns, 4);
SetLength(NewPatterns, 4);
ッャュョ
OldPatterns[0] := 'ッ'; NewPatterns[0] := 'ツ';
OldPatterns[1] := 'ャ'; NewPatterns[1] := 'ヤ';
OldPatterns[2] := 'ュ'; NewPatterns[2] := 'ユ';
OldPatterns[3] := 'ョ'; NewPatterns[3] := 'ヨ';
Result := WideStringsReplace(s, OldPatterns, NewPatterns);
procedure shrink(var s: string); var i: integer; begin for i := 1 to length(s) do if s[i] = #0 then begin setlength(s, i-1); exit; end; end; みたいな関数って標準でないの?
>>368 あるよ PChar() っていう 型変換関数
s := PChar(s);
で同じ事だよ
それだと無駄なコピーが発生するやん
ワガママな奴だな。 Setlength( s , StrLen(Pchar(s)) ; くらいで我慢してくれよ
FindWindowExでコンボボックス(ドロップダウンリスト)を見つけようとしてるのですが見つかりません。 FindWindowEx(hWindow, 0, 'TComboBox', nil); だと見つかるのですが FindWindowEx(hWindow, 0, 'TComboBox', ドロップダウンリストの選択中の文字); だとだめです。 何個かドロップダウンリストがあるのでFindWindowExを使って探す方法があれば教えてください
FindWindowEx(hWindow, 0, 'TComboBox', nil); でもらったハンドルで GetWindowText しては FindWindowEx(hWindow,そのハンドル0, 'TComboBox', nil); と検索していったらどう?
FindWindowExの第2引数の意味を理解してませんでした。 ありがとうございました。
375 :
デフォルトの名無しさん :2007/06/22(金) 20:51:45
C言語で作った外部のDLLの関数を呼び出したいのですが、 動的に DLLの関数を得て呼び出す場合、以下のようにする方法しかないでしょうか? // interface部で、宣言 var dll_func: function(Hoge: Integer): Integer; cdecl = nil; // implementationで、動的に割り当て dll_func := GetProcAddress(DLLHandle, 'dll_func'); // 呼び出すとき Result := dll_func(1234); これだと、dll_func が直接呼べて便利なのですが、 (var なので)dll_func が書き換えてしまえて、問題ありかな?と思うのですが、 これよりよい方法があれば、知恵をお貸しください。
クラスを作って、関数ポインタ形のプロパティにするとか type Tll_func= function(Hoge: Integer): Integer; cdecl ; THoge=class private Fll_func: Tll_func; procedure Setll_func(const Value: Tll_func); public property ll_func:Tll_func read Fll_func; end; 重くなってもいいなら、呼び出し関数を用意するとか、 あと、初期値はnilより例外を出す関数を定義しておいてそれを初期値にした方がいいよ
D6での質問です TListView を vsIcon で表示しているのですが、 項目をD&Dで移動させるとき、 デスクトップで見るようなインサートマーク(?)を表示する機能、 またはAPIはあるでしょうか?
ないです。
ActiveXな正規表現クラスってどうやって取り込んだらいいんですか? Delphi7のActiveXの取り込みでそれらしい物が見つかりません。 以前Delphi6で取り込んだときはあったはずなんですが。
[プロジェクト|タイプライブラリの取り込み] Microsoft VBScript Regular Expressions 5.5 でいけました。
var start: TDateTime; start := Now; ... ShowMessage('かかった時間:%s', [FormatTimeSpan(Now - start)]); // '00:03:12.54' みたいな表示 といった便利関数はないですか。
FormatDateTime辺りを使って自分で作れ
383 :
デフォルトの名無しさん :2007/06/24(日) 18:44:59
単語の先頭文字を大文字に変換する方法教えてください VBならProperCase関数?で出来るらしいのですが Delphiでやる方法は調べても見つかりませんでした よろしくお願いします
まず全部小文字に変換した後、先頭文字だけを大文字にする。 昔作ったことあるけど、結構簡単に作れたと記憶している
gglks "ProperCase Delphi"
386 :
デフォルトの名無しさん :2007/06/24(日) 21:34:18
一単語だけ入ってるString変数がstrWordがあったとしたら strWord[1] := UpCase(strWord[1]);
387 :
344 :2007/06/24(日) 23:09:24
遅レスすまそ サーバーに連続してアクセスするのに 1秒の間隔もなしにアクセスしたらまずいかなーと思ったんですよ。 サーバーってそういうのはOKなものなんですかねぇ?
>387 Sleep(API)とかTTimer(コンポーネント)とか。 本来はあんまり気にする必要がない(シーケンシャルにリクエストを出して構わない)はずだけど、 そこは実装依存(要はタコなサーバもありうる)なので、問題があるようならディレイをいれることで 解決する場合もある。
389 :
デフォルトの名無しさん :2007/06/25(月) 02:06:12
集合型の変数AとBの排他的論理和を求めるにはどうしたらよいですか?
functionで関数作ったのを、あとから、呼び出すのはどうすればいいですか? function A():Integer;だったら、A;でいいですか? それから、function A():Integer;の戻り値はResultに代入すればいいんですよね? function A():Integer; var x:Integer; begin if(x=1)or(x=2)then begin Result =: MessageDlg(略); end else begin Result =: MessageDlg(略); end; end; って、大丈夫ですか?宣言などはあってると思うのですが。
function A:Integer; 引数ないときは括弧省略する
Xが不定
>>394 xが不定ですか?
x:ComboBox;
で、ComboBoxから選択性にするのは大丈夫ですか?
>>395 x:ComboBox;の意味はさっぱりわからんが、xに代入してもいないのに参照するなってこと
function A(x:integer):Integer; ↑ こうしたいのでは…?
機能としては、ComboBoxで選択した値から、それが、1か2なら「1か2です」、 それ以外ならば「1か2以外です」と表示されるようなプログラムを組みたいのですが。 説明が不十分ですみません。 関数の呼び出しは、A;でいいですか?
>>398 それなら、その通りにコードを書かないとね。
プロジェクトの新規作成したら、COMBOBOXをフォームに貼り付けて、
ダブルクリックしてComboBox1Changeに、
A( ComboBox1.ItemIndex );
というのを書いて
>>391 の3行を
>>397 の1行に変更する
.NetでいうSystem.Net.Socketsみたいなソケット使いたいんだけど、delphiだとどうするの?
Delphiではソケットがクラスになってない。.NET に相当するものはない。 API直たたき。
Indy使っとけ。日本語ドキュメント皆無だが。
FormCreate内でCloseしても終われないの? うまい方法おせーて。
>>403 どうしたいのかが分からないよ。
FormCreate内でApplication.Terminate;してもいいし、
Formを非表示にした状態でShow内でCloseとかでもいいし。
>>403 PostMessageでWM_CLOSEをフォームに投げればいいのでは。FormCreate内での処理
にはならないけど、ほぼ目的は達成できると思う。
>>403 α)起動して何か処理をしたら即終了というアプリケーションを作りたい
→フォームの代わりにデータモジュールではどうですか?
フォームを無しにしてデータモジュールを1個用意し,
これのOnCreateイベントハンドラに必要なコードを書けばOKです.
β)作業が数秒かそれ以上かかるので作業中にそのフォームを表示させておきたい
→ApplicationEventsコンポを置いてこのOnIdleイベントハンドラに必要な処理コードと最後に Application.Terminate を書く.
ある条件が満たさなければフォームを表示せずにそのまま終了させたいとかそんな感じかな?
408 :
403 :2007/06/26(火) 19:48:38
>>407 そういうことなんですが、Application.Terminate, WM_CLOSEともに一瞬だけフォームが表示されるので
ちょっとよろしくないですね。
パラメータ解析して失敗したらUsage表示して終了したいだけなんで無難に.dprの頭でやることにします。
ありがとう。
USageをどこに表示するつもりなのか
プロジェクトソース(.dpr)で Application.Initialize; if パラメータ解析 then Application.CreateForm(TForm1, Form1) else UseAge('こーすんだよ'); Application.Run;
UseAge
Delphi6からBDS2006に乗り換えました。 さっそく使ってみて気になったのが、Ctrl+Spaceが全く効かないような・・・? もちろんコード支援関係は全てチェックしてあります。 バグかと思ったけど、ぐぐってもそれらしい情報ないし。 同じ事で困っている方いらっしゃいません? できれば解決方法を・・・。
TCPヘッダを直に弄るにはどーするんだ? delphiじゃ無理?
ググレカス
TCheckBoxの□の中の色を変えるにはどうすればいいんですか?
TCheckBoxはwindowsのコモンコントロールのBUTTON クラスのラッパーなので それに出来る事しか出来ない 自前で描くのが一番簡単な解決法だと
TTreeViewをFullExpandしたらツリーの下の方が表示される格好になります。 これをTreeの一番上から(Expandした後)表示されるようにするにはどう細工すればいいですか??
>>416 dクス
TImageでも継承してつくるYo
>.413
uses WinSock して地道にやりたいって事?WSAStartup あたりから検索したら?
>>419 は本人? 答えがほしくてもあおるのはどうかな
TTreeNodesとTTreeNodeの違いって何? うまく書けないので申し訳ないのだが、 Nodes:TTreeNodes; ってやって、Nodesに適当に追加して Form1.TreeView1.Items:=Nodes;ってやっても何も表示されない。 Form1.TreeView1.Items.Item[0].Assign(Nodes.Item[0]); ってやると表示される。 これってTTreeNodeの最初の1個を入れてるって事だと 思えてしまい、混乱してる。 TTreeNodeって個々のItemを扱うものじゃないの?(;´Д`)
>>421 ×これってTTreeNodeの最初の1個を入れてるって事だと
○ これってTTreeNodesの最初の1個を入れてるって事だと
WM_DDE_POKEでデータ送信する方法を教えていただけませんか。 送信したいデータには、複数のnull文字を含みます。 DdeClientConv.PokeData でいろいろ試したのですが、うまくいきません。 どうも、送信したいデータの途中までしか、送信されていない感じです。 PokeDataのソースコードを読んでみると、null文字を無条件に終端と認識してしまい、 途中のnull文字までの長さをAPIにデータ長として渡しているのが原因か? までは何となくわかりました。 が、だからどうしろと? orz というわけで、質問させていただいております。
424 :
デフォルトの名無しさん :2007/06/27(水) 17:01:50
すいません・・本当に初歩的な質問なのですが、Delphi2007で新規プロジェクトは どうやってやるのでしょうか? メニューから、ファイル→新規作成と進んでも、パッケージ・ユニット・ VCLフォームアプリケーション・フォーム・その他、って感じで 普通のプロジェクトみたいなのが無いのですが・・
>>421 Node:1つの項目
Nodes:ツリービュー1つの全項目のリスト
>>424 普通のプロジェクトって何?
VCLフォームアプリとは違うの?
426 :
412 :2007/06/27(水) 17:48:03
自己解決しました。 メッセンジャーPlusを使ってると、メッセンジャーのロックのホットキーと重なっていたようです。
>>420 だーかーら無理だって。
TCPやらIPヘッダを書き換えるなら.Net使うかプラットフォームを変えるしかない。
TDIやNDISとお話したいなら別だがな。
428 :
424 :2007/06/27(水) 18:14:51
>>425 あ・・VCLフォームアプリが普通のやつなんですね。
すいません。ありがとうw
430 :
421 :2007/06/27(水) 18:44:07
>>425 レス、ありがとうございます。
-a
|-b
c
|-d
上記のようなツリーだと、
aのNode、bのNodeというように4個のNodeがあり、
ツリー全体を持つNodesあるという認識でOKですか?
で、Nodes.Item[0]の中にツリー構造が入っているという
認識でいいですか?
>>Form1.TreeView1.Items:=Nodes;ってやっても何も表示されない。
>>Form1.TreeView1.Items.Item[0].Assign(Nodes.Item[0]);
でツリーが表示されるので。。。
図がよくわからんが、 a ├ b │└ c └ d なら、Nodes.Item[0]〜[3]がそれぞれ a〜d a.Item[0] = b a.Item[1] = d b.Item[0] = c あと、普通 TTreeView.Nodes に代入はしない。 TTreeView.Nodes.Add 等でを直接操作する。
TCPヘッダってdelphiじゃ弄れないんですね おとなしく.NETやります
ワロタ
>>433 TWebBrowser使えば簡単に出来るよ
DDoS攻撃ツールでも作るのかw? そういうときは生ソケットを弄るもんだ
TCPヘッダとHTTPヘッダがごちゃまぜになってるな
せっかくだからindy使えよ・・・
かなりマジレスだけどICS使え
マジなのかギャグなのか知らんがどれも生ソケットいじれねぇだろ・・・・・
indyでtcpパケット直書きできるの?
ICSって安定してるんだよな。
_____________
∧,,∧∩ /
ミ,,゚Д゚彡 < しつもーソ
U ミ \
@ミ ミ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∪''∪
こっちで答えてみたんだが
http://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200706/07060080.txt どうも、Indyが会社のネットワークではつながらない。
Socket Error # 10060
Connection timed out.
こんなエラーがでる。
動作させたのは下記のコード
var
SaveFileName, SaveURL: String;
fs: TFileStream;
fs := TFileStream.Create(SaveFileName, fmCreate); try
IdHTTP1.Get(SaveURL, fs);
finally fs.Free; end;
家では動くんだ。
会社では自動構成スクリプトにProxyパックを指定することになっているんだが
IndyをIE、つまりWinInetやURLMonDownloadToFile関数と
同じように自動で設定を読み込ませる方法はありますか?
教えてくださいな。
445 :
デフォルトの名無しさん :2007/06/28(木) 10:29:52
∧,,∧ ミ,,゚Д゚彡 ミ つ旦)~~ ┳┳と,,,~),,~) 旦~~ ]]]]]]]]]]]]]]]]]]]]]]]]]]]] 串リストが欲しいのではないですが。
TlistViewのOnAdvancedCustomDrawItemイベントで 描画後に処理をしたいので if Stage = cdPostPaint then としているのですが、うまくいきません OnAdvancedCustomDrawだと大丈夫なんですが OnAdvancedCustomDrawItemイベントで描画後の処理をする事はできないのでしょうか? 環境はD7です。
>>415 ひとーつ
wmPaintメッセージを捕まえて、そういう実装をする。
かなり面倒臭い。
TButtonを継承して色を変えられるボタンのコンポーネントがデルフィアンワールドにあったと思う。参考になるかも。
ふたーつ
パネルから継承したカスタムコンポーネントを作る。
パネルの中にスピードボタンとラベルを動的生成してコードで位置合わせしてマップする。
これも面倒ではあるが、1よりはわかりやすいと思う。
>>450 ありがとうございます、バグだったんですね。
サイトの方見てVCL修正したらうまく動くようになりました。
452 :
デフォルトの名無しさん :2007/06/29(金) 18:40:37
delphi懐かしいなwVer1.0から使ってたwスレあるのねー セリフボックスとかあったなー
453 :
デフォルトの名無しさん :2007/06/29(金) 18:58:48
最近Del2005とかプログラミング楽しいです
454 :
デフォルトの名無しさん :2007/06/29(金) 19:04:44
コンポーネントとゲーム作るのが大好きだったなぁ
456 :
421 :2007/06/30(土) 18:03:02
TreeviewのItemIdを変数に記憶させたい場合って、 変数の型は何にすればいいのでしょうか?
ItemIDにカーソル合わせてF1押してみな
>>457 property ItemId: HTreeItemって書いてあるんで
var hogeid:HTreeItem;
としても、コンパイルできないんです。
何を間違えているのか、理解出来ていないのかさっぱりです。 (´Д`lli)ゞ
「コンパイルできない」じゃなくて、どうできないのか書け。 どうせ問題点は別のところ。
エラー未定義の識別子HTreeItem ってでる。
usesにCommCtrlを加えればいけるっぽい。 Del6Perならインストールフォルダの*.intに対して検索かければ定義がある程度わかるはず。
VCLのメソッドならほぼ使えるようになったけれど、APIはまだ理解できていない、という程度の者です。 TMemoで、現在表示されている行の先頭行の値を知るほうほうを教えてください!
463 :
デフォルトの名無しさん :2007/06/30(土) 21:49:55
つEM_GETSCROLLPOS
バージョンごとにifdefする時用の定番のインクルードファイルってないの?
>>461 >>インストールフォルダの*.intに対して検索かければ定義がある程度わかるはず。
ありがとう
ComCtrlって言うのが、Usesにあったのでもう登録してあると思ってたよ。
見間違えてた。
ほんとに感謝
TStrings.LineBreakプロパティはDelphi6の頃にもあったのでしょうか?
>>466 無かった。D6 で確認。
Turboにはあるがいつ採用されたかは分からん。
プロセス起動の監視や割り込みってドライバかかないと駄目?
ううん
>>463 試行錯誤したけど、わからなくて代わりにEM_GETFIRSTVISIBLELINEで解決しました。
ありがとうございます。
472 :
デフォルトの名無しさん :2007/07/01(日) 16:01:22
Delphi7で例外が発生するとその瞬間、デバッガのインスペクトの表示が吹き飛んで不便なんだけど Exception.Createが呼ばれてraiseされるまでの間にデバッグブレークかける方法ってないのかな。
E := Exception.Create; // ここでブレイク raise E;
そうじゃなくてあらゆる例外生成に対してってこと。
>>469 ほぉ、そうなんだ。
ちなみにプロセス起動を阻止したりってどうするの?
477 :
デフォルトの名無しさん :2007/07/02(月) 10:47:28
Delphi7から TurboDelphi(Turbo Explorer?) って替えたほうがいいのでしょうか。 .NETみたいに大規模なランタイムとかが必要だと 移行できないんですが、 TurboDelphiのメリット、デメリットをご存知でしたら 教えていただきたいです。
>>477 要.NETなので教える必要が無いようです
>>478 2006はVER180で2007はVER185って書いてあるようだが
>480 ですね。こちらでもそのように認識しています。
program CompilerVersionCheck; uses SysUtils, Windows; {$R *.res} var MsgStr: String; begin MsgStr := 'Version不明'; {$IFDEF VER80} MsgStr := 'Delphi1'; {$ENDIF} {$IFDEF VER90} MsgStr := 'Delphi2'; {$ENDIF} {$IFDEF VER93} MsgStr := 'C++Builder1'; {$ENDIF} {$IFDEF VER100} MsgStr := 'Delphi3'; {$ENDIF} {$IFDEF VER110} MsgStr := 'C++Builder3'; {$ENDIF} {$IFDEF VER120} MsgStr := 'Delphi4'; {$ENDIF} {$IFDEF VER125} MsgStr := 'C++Builder4'; {$ENDIF} {$IFDEF VER130} MsgStr := 'Delphi5'; {$ENDIF} {$IFDEF VER130} MsgStr := 'C++Builder5'; {$ENDIF} {$IFDEF VER140} MsgStr := 'Delphi6'; {$ENDIF} {$IFDEF VER140} MsgStr := 'C++Builder6'; {$ENDIF} {$IFDEF VER150} MsgStr := 'Delphi7'; {$ENDIF} {$IFDEF VER160} MsgStr := 'Delphi8'; {$ENDIF} {$IFDEF VER170} MsgStr := 'Delphi2005'; {$ENDIF} {$IFDEF VER180} MsgStr := 'Delphi2006'; {$ENDIF} {$IFDEF VER185} MsgStr := 'Delphi2007'; {$ENDIF} Windows.MessageBox(0, PChar(MsgStr), PChar(ExtractFileName(ParamStr(0))), MB_OK); end. 変だな、これでD2007でコンパイルすると Delphi2006って表示されるんだけど....
あ、ごめん。ただしくDelphi2007って表示されますた。
Tstringlistで定義した変数の中で 第1回,… 第2回,… 第3回,… 以下続く というふうに値を入れているのに、IndexOfで第1回などとやっても 反応してくれません。(-1が返ってくる) 何かバグとかありますでしょうか?
485 :
デフォルトの名無しさん :2007/07/03(火) 01:25:32
クリエイトしないとダメなんじゃね?
IndexOfは完全一致じゃないと駄目。先頭が一致するかどうかのチェックはこんな感じ。 for i := 0 to sl.Count-1 do if AnsiPos('第一回', sl[i]) = 1 then ShowMessage('found'+sl[i]);
すぐにバグのせいとかにする奴に限ってすぐにやめたりするよな
>>480-481 ありがとうございます.
>>482-483 参考になるかわかりませんが昨日こんなの見つけたです.
http://dn.codegear.com/jp/article/34084 > Delphi 2007 for Win32用に定義された新しいCOMPILERVERSION とRTLVERSIONの値は何ですか?
> Delphi 2007 for Win32では、言語仕様に変更を加えていないため、Delphi 2007 for Win32でも引き続きVER180が定義されています。プログラマーの中では、新製品とそれ以外を区別する必要もあるでしょうから、Delphi 2007 for Win32では、VER185も定義されています。
超高速AnsiStrIPosクレクレ
KMP法やBM法による実装の Pos 関数って事?
ある条件=trueじゃなければ、フォームに貼り付けてあるフォーカスをもったEditにキー入力を送らない、っていうのはどうやって実現するんですか?
winapiならそこでeditをサブクラス化して trueならデフォルトのプロシージャに操作を送るみたいな trueならenableをfalseに設定するとか
送られてから処理しないというのではダメなの? そのフォームにキー入力がどういうルートを通ってくるかというとアプリの Application.ProcessMessage で PeekMessage -> TranslateMessage -> DispatchMessage -> を通ってくるから、ここで遮断すれば「送らない」 ってのは実現出来ると思うけど
普通に条件次第でキー入力を受け付けなくしたいだけじゃないの?
495 :
491 :2007/07/03(火) 13:48:14
Edit1.Enabled:=(ある条件=true);
>>495 良い例かは分からないけど、こんな感じでどうかな。
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if(1 = 1)then
begin
Key := #0;
end;
end;
正規表現ライブラリTRegExprって文字列型しか渡せないんでしょうか?データをTStringsでもっているので、 使う時にTStrings.Textなどで単一の文字列を構築すると、TStringsが巨大な時に、構築に時間がかかってしまうので、 文字を反復できるイテレータみたいなインターフェースもしくは、クラスを渡せるとアプリ側ではデータ構造に関係なく,独自のイテレータを実装して渡せるので 便利だなと思いまして。そんなクールな正規表現ライブラリしりませんでしょうか??
501 :
491 :2007/07/03(火) 15:05:50
>>497 あ、それがピッタリきました。
どうもありがとうございます。
>>496 答えてくださって、ありがとう。
>>500 行をまたいでマッチできるようにしたいってことじゃないなら
Exec(AInputLines: TStrings):Boolean; overload
なんてメソッドをソースに突っ込めばいいんじゃないの。
>>502 行をまたいでマッチさせたかったのですが、もうちょい調べてみます。ありがとうございました。
Delphi2007ってMastering書いた人からもみはなされてね? Delphi2008って来年でるんかな?
どういう意味?
隔離スレ池
DBGridの更新の停止ってできないですか?ダブルバッファみたいに。 DBGrid更新停止 ↓ 処理させる。 ↓ 新しいデータでDBGrid反映 ちょっとちらつくのが気になったので。
509 :
デフォルトの名無しさん :2007/07/04(水) 14:36:16
>>502 ・TStringsをイテレートしたマッチさせたい
・行をまたいでマッチさせたい
なんて、要求、コンポーネントの改造なしに_だろ
>>508 TDataSet.DisableControls
ギコナビとかで板を追加すると 新板、板URL変更チェックが完了しました 「閉じる」ボタンを押してください というところまでテキストがスクロールするけど これってどういう命令?
513 :
デフォルトの名無しさん :2007/07/04(水) 19:42:53
板違い
515 :
デフォルトの名無しさん :2007/07/04(水) 23:57:38
EUCコードをSHIFT-JISに 変換する命令はありますか?(Turbo Delphi) 何かコンポーネントが必要でしょうか?
自分で作るのは嫌なの?
jconvert.pas で出来たかな。
頻繁な文字列の連結つまり頻繁なメモリの確保はいかんよな。メモリの転送に比べてメモリの確保はボトルネックになりやすい。
TStringsのTextプロパティのゲッターGetTextStrを見てもわかるように、まず、はじめに、必要なサイズを計算し、 その分のメモリを1度に確保。その後、転送。これが賢いやり方。まぁ、扱うデータ量が少ない場合は、気づかないけど、 データ量が増えるにつれ、パフォーマンスの違いが顕在化してくる。
メモリ倍々で増やしていくStringBuilderポートすると何かと便利。
CPU使用率が何%以下とかアイドル時のみに 動作させる仕組みを教えてください
>>516 既存のものがあるなら利用したいです
無ければ自作でもなんでもしますけど・・・
>>517 どうもです
どうすればってDLL呼ぶだけじゃん
プログラムを実行したときにTStringListに読み込む決まった幾つかの文字列が あった場合、その決まった文字列をテキストファイルにして実行時に 読み込ませる。 しかし、そのテキストファイルはエクスプローラーで見えないように ソフトの一部とかには出来ないでしょうか? なんか読みにくくてすみません。
530 :
デフォルトの名無しさん :2007/07/06(金) 00:24:46
あまりたいした分量じゃないなら const msg= 'aaa'+slinebreak+ 'bbb'+slinebreak+ ... に変換するエディタマクロ・フィルタでも書いて直接定数として埋め込みとか。
532 :
デフォルトの名無しさん :2007/07/06(金) 00:28:27
>>528 適当で簡単でいいのであれば、テキストに落とすとき、xorして落として、読み込み時に
復元したらいいんじゃない?
それか、その辺の暗号アルゴリズムで暗号化して復号化してみては?
暗号化して置いておく
>>530 delphiじゃできないってことですか?
536 :
528 :2007/07/06(金) 00:43:47
レス、ありがとうございます。 初心者なんで、教えてもらってのを勉強がてら試してみます。 また、よろしくお願いします。
TApplicationEventsコンポはっつけてOnIdleイベント書くとか?
普通に文字列のリソースにしてexeに取り込むだけでしょ。
540 :
デフォルトの名無しさん :2007/07/06(金) 04:40:46
正と負を反転させるにはどうすればいいですか? 235→-235 -343423→343423 みたいに。
a := -a; a := a * -1;
TTableのIndexを一時的に無効にする方法ってありますか? Indexを[ixPrimary, ixUnique]にしてるんですが、新たに0から振りなおす際、「すでにその値は登録されているのがある」っていうエラーが出るので…
新しいテーブルを作成するのが安全じゃね?
>>545 そうですか・・
ありがとうございます。
Delphiで余ったビデオメモリの領域を使うことって出来る? というかWindowsで可能なのだろうか・・・。
548 :
デフォルトの名無しさん :2007/07/07(土) 02:00:29
>>547 結局のところ、それで、何をしたいかをかいた方がいい返事をもらえるぞ
一応、DirectX使えば、VRAMは使えるが
>>548 VRAMを仮想記憶領域にしようかと思って。
OSのメモリ管理をハックしないと駄目かなぁ?
そんなものをハック出来る知識と技術を持ってる人間なら そんなことをやろうとは考えないよw
551 :
デフォルトの名無しさん :2007/07/07(土) 20:17:02
**charのようなポインタのポインタってdelphiではどういうふうに書くのでしょうか? *charはPCharだから PPChar = ^PChar 見たいに宣言するのかな?
それでいいよ。 引数に渡して変数自体を操作したいとかなら foo(p: PPChar); ではなく foo(var p: PChar); のように書くのが多いかも
>>552 おぉ、なるほど。
知りたい情報はまさにそれでした。
ありがとう。
6からデフォルトで定義されてるけどな<PPChar
それは初耳 ま、使うこと無いだろうけど
DBGridでレコードの値をそのまま表示するのではなく、ある計算を加えてから表示するにはどうすればよいのですか。
コンソールアプリでタイトル変えるのってどうやるの? 'cmd.exe /c title NEWTITLE' 実行すれば出来るんだけど重すぎる。
558 :
デフォルトの名無しさん :2007/07/08(日) 10:16:50
タイトルと同じ名前にしたショートカットを作って、そこから起動すれば?
>>557 自分のタイトルを変えるならSetConsoleTitleっていうそのものズバリな名前のAPIがWindows.pasに定義されてる
自分以外のを変えたいならFindWindowあたりでConsoleWindowClassを調べる
>>556 項目コンポーネントのOnGetTextイベント使うか、計算項目を追加して、それを表示。
classのPrivate宣言とかに書いた変数はそのclassをCreateした時点で コンパイラによって初期化されてるのですか?
フィールドは0で初期化される。
まったくの素人なんだがお勧めのサイトとか本教えれ
基本的な質問でごめんなさい。 MDIで子フォームから親フォームへ命令を送るにはどうすればいいですか?
Unit2 の uses に Unit1を追加して、 Form1.hogehoge
>>563 ありがとう
フィールドと呼ぶのを初めて知りますた
FName とか FHeight とかの最初の F はフィールドの F なのよね。
FはファンクションのFだよ
Fは阪神の藤田のFやろ。
阪神はHだろ。
いや〜ん、のび太さんのH!
幼稚な暇つぶしはCodeGearスレで
そういや2007買ったけどまだインストールしてないな。
オレのにインストールしといたよ
FormのFかと思ってたわ
グローバル変数のプレフィックスもFつけるん?
Fつけるのはclass, objectのprivateフィールドのみ。 private FValue: Integer; published property Value: Integer; みたいに名前がかぶらないようにするため。 グローバル変数はVCLではClipboard, ScreenみたいにT取った名前をそのままつけてるな。
581 :
デフォルトの名無しさん :2007/07/10(火) 17:56:24
Fの流れきってすみません。印刷ダイアログの TPrintDialog に、アプリ 独自の TEdit や TComboBox を加えたいのですが、できるものでしょうか。 できなければ自分で作ろうと思いますが、参考となるサイトなどが ありましたら教えてください。 Delphi7 で開発。実行はWin XP と Vista です。
ふつうにはできない。 自分でつくるなら、たんに新規のフォームをつくるだけでしょ。
583 :
デフォルトの名無しさん :2007/07/10(火) 19:05:10
>581 出来ないことはないが、高度なスキルが必要ですな。最低でもWinAPIの知識は必須。 ソース有るならTPictureSaveDialogのコードを参考にすると良いかもしれぬ。
584 :
デフォルトの名無しさん :2007/07/10(火) 19:25:14
こうすれば比較的簡単に既存のコントロールをダイアログに押し込むことは出来る。 procedure TForm1.PrintDialog1Show(Sender: TObject); begin Windows.SetParent(Panel1.Handle, PrintDialog1.Handle); end; procedure TForm1.PrintDialog1Close(Sender: TObject); begin Windows.SetParent(Panel1.Handle, Handle); end; procedure TForm1.Button1Click(Sender: TObject); begin PrintDialog1.Execute; end もちろんこれだけでは実用的ではないので 適切な位置に移動したり、ダイアログ自体の大きさを変えたりする必要はあるが、 EditやCheckBoxで値を取得するのが目的ならばこれでも使えないことはない。 配置したコントロールのイベントでダイアログの中身を変更するのが目的だとかなり難しくなる。
>>582 >>583 >>584 回答ありがとうございます。581です。TPictureSaveDialogのソースや
SetParent関数を調べてみたいと思います。(D7Pro書き忘れました)
サマリが提示できるようでしたら後ほど(後々)書き込みます。
構造化型について教えてください。 PData1=^TData1; TData1=record 何かの定義 end; PData2=^TData2; TData2=record 何かの定義 end; こんなのがあって、これをツリーみたいに管理したいのですが、 イメージ的にこんなの。 OyaData-----PData1 |--PData2 OyaDataとかの定義は POyaData=^TOyaData; TOyaData=record OyaData1:TList; OyaData2:TList; end; こんな感じでいいですかね? もっといい方法があれば教えてください。
Delphi6 PersonalとTurbo Delphi Explorerがあるらしいのですが違いは何でしょうか? 今はインストール番号・インストールキーが配布されてないらしいのですが無料でこれから使う場合はTurbo Delphi Explorerだけですか? Turboの場合、ランタイムがどうとか…。
588 :
デフォルトの名無しさん :2007/07/11(水) 00:00:27
最初からrecordではなくclassとして扱った方が結局は簡単だったりする。 TTreeNode型のデータ構造を参考にすると幸せになれるかもしれない。
すみません。まだこのスレの会話についていけないズブの素人です。 Form1のKeyDownが押されたときに、Shiftを押しながらあるキー(例えばA)が押されたってのを判別するにはどう書けばいいんですか?
590 :
586 :2007/07/11(水) 01:44:35
>>589 procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (Key = Ord('A')) and (ssShift in Shift) then
begin
Application.MessageBox('Shift+A', '');
end;
end;
Ord('A') orz('A`)
Delphi5を使い始めましたが、TComboBoxのReadOnlyプロパティが見つけられません。 同じ効果を得るためにはどうすればいいですか?
>>594 styleをcsDropDownListにする
596 :
594 :2007/07/11(水) 04:51:35
ありがと!!
>>586 ツリーでデータそのものを持たせて動的配列の方が楽だよ
ただ、構造化形はクラス形と違って先行定義が出来ないから
Data1にData2が入る場合も、 Data2にData1が入る場合もあるならクラス型にしないと面倒だね
どうせポインタ形で処理するなら、クラス型でいいと思う。
TOyaData=record
OyaData1:array of TData1;
OyaData2:array of TData2;
end;
TurboDelphiです Form1の一定距離にマウスが近づいてきたら半透明にしたいのです。 どのようにしたらよいのでしょうか?
599 :
598 :2007/07/11(水) 11:27:53
自己解決致しました。 スレ汚しすいませんでした。
600 :
581 :2007/07/11(水) 11:42:31
印刷ダイアログの TPrintDialog にコントロールを追加する方法ですが、
>>584 さんの方法でとりあえずできました。
Panel1をメインフォームに置いてVisible := False; にしておいて
procedure TForm1.PrintDialog1Show(Sender: TObject);
begin
Windows.SetParent(Panel1.Handle, PrintDialog1.Handle);
Panel1.Visible := True;
Panel1.Left := 14;
Panel1.Top := 270;
SetWindowPos(PrintDialog1.Handle,HWND_TOP,0,0,510,490,SWP_NOMOVE);
end;
のようにしました。一応これでうまく動作してるのですが、変なコードが
ありましたらご指摘くださりますとありがたいです。
601 :
581 :2007/07/11(水) 11:59:44
う、、でも、TabOrder が変だ…
SendToBackとかごちゃごちゃやって解決しました。
内外問わず、どのコンポも○○ListってほぼTListやTStringListまんまな実装だけど、 Licence的に問題無いのだろうか? といってもList系で全く違うロジックとか考え付かないのだけど
機能・インタフェースが同じって程度なら無問題。 コードそのまんまコピペ・改変するなら、グレー〜黒の可能性はあるが CodeGearがDelphi開発者に対してそれをあえて問題にするとも思えないが ここで第三者があれこれ言っても何の意味も持たないので 気になるなら直接問い合わせとけ。
ラジオボタンのようにどれかが入れ替わりでチェックされて、 なおかつ、チェックされたものがもう一度クリックされると 解除(全部未チェック状態)になるコンポって無いですか?
知らないけど、そういう挙動は本人にしか求めてないだろうな
607 :
デフォルトの名無しさん :2007/07/12(木) 22:49:03
>605 自分で書くんだな。 全チェックのOnClickを共有して Sender(イベントを起こしたコントロール)以外の チェックをOFFにすると書けば実現できるだろ。
その程度の機能なら、わざわざそんなコンポ探してダウンロードしてインスコするより 自分で書いたほうが速いよな
ファイルサイズを測るにはどうすればいいですか? 例えばif (ファイルサイズが32kb未満) then 読み込み、とかやりたいのです。
function GetFileSize(APath: String): Int64; var handle: THandle; data: TWin32FindData; begin handle := FindFirstFile(PChar(APath), data); if handle = INVALID_HANDLE_VALUE then RaiseLastOsError; Windows.FindClose(handle); with Int64Rec(Result) do begin Hi := data.nFileSizeHigh; Lo := data.nFileSizeLow; end; end;
ありがとうございます。例えば32kbより小さいか?の判定は if GetFileSize('hoge.txt')<32000 then 〜 でいいんでしょうか? 32X1024?ですか?
$7FFFじゃまいか。
お願いだからプログラマともなったら、せめて 32X1024 じゃなくて 32*1024 みたいな表記にしてくれないか
>お願いだからプログラマともなったら、せめて ごめんなさい。とうていまだプログラムでメシは食えないです・・ >$7FFF これでいいんですか?
32*1024でも、32*1000でもこれは、君次第。君が1KByte=1000とする仕様のアプリをつくりたいなら 32*1000でもいい。それを使うユーザーはどう思うかはしらんけど。
617 :
デフォルトの名無しさん :2007/07/13(金) 15:49:56
スクリプトなどから、識別子からオブジェクト内のメソッドを呼び出したいのですが、 publishedメソッドにして、MethodAddress使うのが楽と聞きました。 その辺をやっている、2chで開発されたDelphiのギコBasicというのがあるらしいのですが、 どなたかギコBasicのソースお持ちでないでしょうか?
619 :
デフォルトの名無しさん :2007/07/13(金) 15:58:32
620 :
デフォルトの名無しさん :2007/07/13(金) 15:59:19
DelphiとVB、どちらが優れていますか?
621 :
620 :2007/07/13(金) 16:00:03
すいません。誤爆しました。リアルで死んできます。
VB.NETやれば年収2千万はかたいよ
正確には VB.NET をやる奴隷を5人も飼っていればだろ
624 :
デフォルトの名無しさん :2007/07/13(金) 16:57:13
DelphiはVBみたいにgenericsが使えないんですか?
CreateProcess等で実行したプロセスのメモリを一部書き換えたいのですが どのようにすればよいのでしょうか?
>>616 ありがとうございます。
希望をもって取り組みます。
endが予約語なのがたまに痛い。Start, Endと名前つけれねぇじゃねぇか。 で今は、Doというメソッド名つけたかったがまた、予約語とバッティング・・・
だから何?
630 :
デフォルトの名無しさん :2007/07/13(金) 21:15:29
>626 CreateProcessならPROCESS_INFORMATIONの中でプロセスハンドルが取得できるわな。 それを使ってOpenProcessしてWriteProcessMemoryするんだ。
D6Pで 'エラーの検索' → 'CPUウィンドウ出現' → orz の流れから素早く立ち直る方法はありませんでしょうか?
正直、いつまでD6とか言ってるんだよとか思う。
正直、D6はいいからな。
>>633 糞ヘルプ楽しい?
いまだにD5,D6,D7使ってるひと多いよ。 なぜだか分かるかな?
あ、すれ間違えた。すまぬ。
自演ミスしてらw
これはひどい
キモ恥ずかしい
pgr
>このスレを見ている人はこんなスレも見ています。(ver 0.20) >【〓SoftBank】 ホワイトプラン 42 【月額980円】 [携帯・PHS] >【8701】SBIイー・トレード証券245【北押値】 [市況1] >【〓SoftBank】 ホワイトプラン 41 【月額980円】 [携帯・PHS] いつも出るんだけどSB関係の人なのか、Delphiをどう使ってるんだろ?
でもそれIEとかで見てる人だけだしな
どーでもいい
ウィルスバスターはずっと前から出てたよ。 私の他にピアノ弾く人いるの?
A0 = class(TObject) public procedure TestProc; end; A1 = class(A0) public procedure TestProc; end; A2 = class(A0) public procedure TestProc; end; としたときにA2内から A0.TestProc A1.TestProcをコールするのは どのように指定すれば良いのでしょうか?
646 :
デフォルトの名無しさん :2007/07/14(土) 16:40:40
A1は、inherited TestProcでよいが、 A0は呼び出す手段ある?
inherited; // call A0.TestProc A0(Self).TestProc A1(Self).TestProc 三つ目はもちろん未定義
Undoバッファ付きの文字列リストクラスはないでしょうか?Undoでアンドゥ、Redoでリドゥ、 最大アンドゥ回数指定できるとベストです。
そもそもリストというデータ構造にUndoという概念はないです。 なにかに応用したければ、自分でコーディングすべきでは?
Undo、Redo って、バッファとしてスタックなのかな、データ構造としては。
652 :
デフォルトの名無しさん :2007/07/15(日) 00:18:06
ListViewのvsReport形式で ・複数の行を選択出来るようにする ・選択されているものだけをTStringListに追加する を行いたいのですが具体的にどのようにすれば良いでしょうか
こんなんかな。 ・ListView.MultiSelect := True;にする ・次の関数を使う。でClipbord.AsText に代入。 function ListViewToText(ListView: TListView): String; var OutputText: String; i, j: Integer; begin OutputText := ''; for i := 0 to ListView.Columns.Count-1 do begin OutputText := OutputText + ListView.Columns.Items[i].Caption + TAB; end; SetLength(OutputText, Length(OutputText)-1); OutputText := OutputText + sLineBreak; for i := 0 to ListView.Items.Count-1 do begin if not ListView.Items[i].Selected then continue; OutputText := OutputText + ListView.Items[i].Caption + TAB; for j := 0 to ListView.Items[i].SubItems.Count-1 do begin OutputText := OutputText + ListView.Items[i].SubItems[j] + TAB; end; SetLength(OutputText, Length(OutputText)-1); OutputText := OutputText + sLineBreak; end; Result := OutputText; end;
>>650 文字列リストはTStringsの派生クラスであると都合がいいです。
まぁ、標準ではないの知ってるのでどっかに落ちてないかなぁと思った次第です。
>>651 はい。Undo,REdoできれば、バッファの構造は問いませんが、まあ、UndoStack、RedoStackを
用意するのが定石だと思います。
やっぱ、自分で組むしかなさそうですね。
>>653 TListView.GetNextItemを使う方が綺麗に書ける。
procedure TForm1.Button1Click(Sender: TObject);
var
SelectItem: TListItem;
List: TStringList;
begin
List := TStringList.Create;
try
SelectItem := ListView1.Selected;
while Assgined(SelecteItem) do
begin
List.Add(SelectItem.Caption);
SelectItem := ListView1.GetNextItem(SelectItem, sdAll, [isSelected]);
end;
List.SaveToFile('selectitem.txt');
finally
List.Free;
end;
end;
656 :
652 :2007/07/15(日) 05:19:57
>>628 開始,実行…RunとかExecute
データなどの構築…Build
終了…Terminate
中止…Abort
こんなところで回避.
数値型の時はiStart, iEnd、文字列型の時はsStart, sEndみたいにしてるかな、俺は。
>>628 関数名のこと言ってるの?
俺は漠然とした関数名が嫌いなので、
function Fint_StartInit
みたいに書いてるよ。
頭文字はプロシージャ/ファンクション、戻り値の型(プリフィックス3文字)、
アンダーバーに続けて関数の機能名(概要)。
pascalなお前らならendの対義語はbeginじゃないか。 startならstopかgoalだべ。
661 :
デフォルトの名無しさん :2007/07/17(火) 20:10:37
delphiで書いた単純なBruteForceのソースない? MD5のものはみつかるけど、テーブル与えて単純に回すだけのソースをみてみたい。
力まかせで単純って MD5って事は 文字列検索か何か? Posのコードみたいなのを探してるの?
>>662 単純に言うと指定した文字列を使った指定した文字列の長さまでの文字列を出力するコードを探しています。
指定した文字列が'ABC'
長さの最長が2とした場合
生成されるリストは以下のような感じになります。
AA,AB,AC,BA,BB,BC,CA,CB,CC
効率、アルゴリズムをちょっと見てみたいのです。
BruteForceなのにテーブル?
>>663 アルゴリズムっていたって、それは重複を許す組み合わせ。高校の数学レベル。
力任せも糞もない。
>>664 指定した文字列=テーブル。
この文字列のキャラクタを使って総当りすると。
delphiで書いた奴って意外とないみたいなんですよねぇ。
某暗号のソースではインラインアセンブラなんか使って感動したもんだが・・・。
そんなんわざわざネットで公開するようなもんでもないだろ。
そういやDelphi2005から実装されたinline関数ってまともに使えるようになった?
>>667 C/C++で書かれたライブラリならBCCでコンパイルすればDelphiに直接objリンクできるよ。
そういう話でもなさそうだが。
アセンブラ使わなくても20行くらいでかけそうだが。
Cなら一行でもいけるかもな
既存の1万行のプログラムも改行取り払えば、1行で書けるけどな。
ふと、ループ使えば3行ですむのを5千行以上書いてるコードを思い出した。 何でも高速化のためらしいが今でもよく意味がわからない。
世の中のオナニー好きには困ったもんだな。
>>673 一行の制限があるDelphiでは無理。
>>676 ほんとに制限あるのか??それは、Delphiの***IDEのエディタ***の制限なんじゃないか??
普通コンパイラは行単位にコンパイルするわけじゃないので。
質問です THoge = record ... end; THoges = array of THoge とか自分で定義したレコードの配列に色々とデータを保持してるとして それをTMemoryStreamとかでそっくりそのままファイルに保存することは出来るんでしょうか?
レコードの内容によるよ Strings とか動的配列を含んでいると簡単ではない そうでなければ TStreamの wirteメソッドで 簡単に書き出せる。
var Hoge:THoges; begin Stream.WriteBuffer( Hoge[0] , length(Hoge)*Sizeof(Hoge[0]) );
681 :
678 :2007/07/18(水) 08:46:48
レコードの内容は三次元動的配列みたいなアホなことになってます
>>680 さんのようなことはやってみたんですが書き出せませんでした
仮に一次元動的配列とした場合の手順はどんな感じでしょうか?
レコードの内容が動的配列なら 1、バイナリーではなくテキストで行う 1行をカンマ区切りで動的配列するような方式 2、バイナリーのデータ構造を自前で設計する RIFFなんかを参考にして、
まず、1要素だけ書き込む・読み込むメソッドをつくってみる。うまくいったら、 for で回す。これで完璧。
効率は悪いけどソフトの設計が楽なのは、レコードではなくTComponentかTPersistent 継承のクラスにして メンバーはpulished なプロパティとして実装する事 これを入れ子にすれば、TStreamのメンバーで簡単に保存して再生出来る。 バイナリーでもテキストでも
published にできる型には制限があるでしょ。永続化にたよったコーディングは 関心しないな。
var arr: array of Integer; var i: Integer; fs := TFileStream.Create len := SizeOf(arr); fs.Write(len, SizeOf(len)); fs.Write(arr[0], len * SizeOf(arr[0]); fs.SaveToFile ... fs.LoadFromFile fs.Read(len, SizeOf(len)); SetLength(arr, len); fs.Read(arr[0], len * SizeOf(arr[0]);
型が決まってるならソレでいいね。 サイズゼロの時もとりあえず大丈夫っぽい。 Variant配列だと、さらに種類まで必要かもな
len := SizeOf(arr); ってなんだ?動的配列は動的に確保されたメモリブロックへのポインタだから、 SizeOf(arr)は32bit環境だと4返すんじゃまいか。 Length(arr)じゃねぇの?
Delphiとは直接関係無いんだけどDelphiしか使えないんで許して。 プログラムエディタみたいなものを作りたくてシコシコやってるんだけど、 例えば、proc aaa(int intA , +int IntB , int IntC , +int IntD)みたいなルーチンがあって、 +があるものは使ったり使わなかったり自由な引数。 実際に使われた時に aaa(intHoge, intPage, intHage) ってなってたとして、後から引数がint intA , +int IntB , int IntC の組み合わせか、 int intA , int IntC , +int IntDの組み合わせかを知るには どういった仕組みにすればいいのかヒントください。 自分では、ルーチンを入力するダイアログを用意して書き込む時にAddObjで Lines.strings引数の組み合わせを記憶させておこうかと思っているんですがもっといいのあります? 長文すみませんでした。
使ったり使わなかったりできる自由な引数??? Delphiで引数のデフォルト値のことかな?? そもそも、普通曖昧さをなくすために、デフォルト値を与えられる引数は右からなんだけど。 つまり、君の例で言うと、int IntBに+をつけたいならint IntCも+をつけなきゃいけない。
いや、君の質問の答えになってなかったけど、 >自分では、ルーチンを入力するダイアログを用意して書き込む時にAddObjで >Lines.strings引数の組み合わせを記憶させておこうかと思っているんですがもっといいのあります? これってどういう意味??ダイアログ??ユーザーにどちらの組みかダイアログを使って指定してもらう ってこと?
>>690 ,691
言葉足らずですみません。
>>使ったり使わなかったりできる自由な引数???
プログラムエディタといってもDelphiとかじゃなくて、
工作機械を扱ってまして、その機械独自の言語なんです。
>>これってどういう意味??ダイアログ??ユーザーにどちらの組みかダイアログを使って指定してもらう
ってこと?
ウィンドウって言ったほうがいいのかな?
ルーチンを入力してもらう時に、そのルーチンのどの引数を使うか指定、もしくは
引数分のTEditを動的に作って、何個目の引数が使われたかを記憶しておこうかなと。。。
入力後の修正で引数を変える時とかに、またウィンドウを出して使われている引数のところに
入力済みの引数の値を入れて表示すれば使い勝手がいいかなと考えています。
なんか分かりづらくて申し訳ない。
型が違うわけでは無いからオーバーロード関数というわけにはいかんな。
フラグ引数を追加する?それとも値オブジェクトを導入して多態で解決?
そこまで大袈裟な話でも無いか。
>>690 の方法ならA-C-Dの場合はBにダミー値(A-B-Cの時に扱わない値。-1とか)
を渡すだけで良いと思われ。
694 :
678 :2007/07/18(水) 13:44:41
>>686 さんのをベースにしてやってみます
RIFFとかも参考になりそうです
ありがとうございました
なんかね。いきなりLines.stringsとかAddObjとか出てきてね。混乱するね。 AddObjってTStringsのAddObject?LinesってTStrings型の変数かなとかね。 Linesっていうぐらいだから、行単位に何かその行の状態(この場合引数?)を保存しておきたくて、 それをTStringsのObjectsに割り当てたいってことかな。それなら、君のやり方は 分かりやすくいいとは思う。 >引数がint intA , +int IntB , int IntC の組み合わせか、 >int intA , int IntC , +int IntDの組み合わせかを知るには は普通にこの場合、引数4つ分の記憶領域を用意しておいて、そこにつっこんでおけば いいんじゃない?で、ある値の時は、その引数は指定されていなかったと決めれば。
696 :
689 :2007/07/18(水) 14:28:25
分かりにくい文章に付き合ってもらってありがとうございます。 質問が分かりにくいってことは、自分でもやりたい事がはっきりしていない 証拠なんですが、どういうやり方があるのか悶々としてたので。 自分のやり方でもいいみたいなので、作るだけ作ってみます。
697 :
デフォルトの名無しさん :2007/07/18(水) 16:23:21
ComboBoxのitemにフォルダにあるmstファイルの一覧を表示させる方法がわかりません。 どうかご教授お願いします。
ComboBox1.Items.LoadFromFile('mstファイルの一覧'); つう話か?
699 :
697 :2007/07/18(水) 16:35:51
>>698 一つのフォルダの中に多数のmstファイルがあるのですが、
それをすべてComboBoxのitemに入れて表示させたいのです。
その方法が見つからず、ご質問させていただきました。
700 :
697 :2007/07/18(水) 16:40:53
説明不足でした。 itemに表示させたいのはファイル名です。
FindFirst,FindNext,FindClose
マルチスレッドのプログラムのサンプルを眺めていたら スレッドのコンストラクタの中で、 inherited Create(False) ってやっているやつと、 inherited Create(True) ってやっているやつがあるんだけど、違いは何のでしょうか?
TThread.Createの解説参照
704 :
697 :2007/07/18(水) 16:50:51
>>701 ありがとうございます。
ヘルプを見ながら頑張ってみます!
>>703 constructor Create(CreateSuspended: Boolean);
でした。ありがとうございました。
706 :
デフォルトの名無しさん :2007/07/18(水) 17:30:38
アイコンみたいなのをいっぱい作って デスクトップ上でいろいろ動かしてみたいのですが、 こういうのはどうすればいいのでしょうか?
うまく説明できませんが・・・ 関数の宣言時の引数にconst を付けると、「関数内で値は変更しないから、値のコピー(値渡し)はしなくてもいいよ」 という、最適化のためのヒントをコンパイラに与えるってことですよね。レコード型などを受け取る関数に使うと思います。 もうちょっとコンパイラ寄りに考えれば、「値をコピーしないで、ポインタ(参照)を渡す」ということでしょうか。 では、関数内で、受け取った引数を書き換えることがないのであれば、 レコード型でもクラス型でもStringでもInteger等のプリミティブ型でもなんでも、 const を付ける べき なのでしょうか。 質問した理由はVCLを見ると、Integerを受け取る関数で、constを付けているときと付けていないとき両方あるので… Integerだったらポインタと同じ大きさなので、値渡しで問題ないような気がするんですが。 最終的に値渡しにするか、参照渡しにするかはコンパイラが決めることなので、常にconst付けてればいいんですか。
コード生成に影響はない。 なのでどっちも効率は同じ。 ただし procedure A(const A: Integer); のようにconstをつけてしまうと A := A * 2; のように手続き・関数内で値をいじれなくなるので不便なことがあるので 自分は一切つけてないな。
>>706 勝手にデスクトップのアイコンをいじる事は出来ないけど、「デスクトップマスコット」
でぐぐれば色々参考になると思う。クリッピングリージョンによる切抜きとか。
>>707 呼び出し側に「参照でもらうけども値は変えませんよー。」って保証するためのものだと思う。
ここって回答者のレベルがひくすぎね? あまりにも不適格で笑えるんんだが。
笑えるんんだが。
713 :
デフォルトの名無しさん :2007/07/18(水) 18:39:53
>>706 ありがとうございます。
いろいろやってみようと思います。
>>711 ここには質問うけたら検索して探してあげるような変人しかいいない
つか大半ははコンポーネントの使い方に対する質問ばかりで
答えるるほうもウザがってるのもも事実
変人しかいいない 答えるるほうもウザがってるのもも事実
>>707 ヘルプの「定数パラメータ」を読めば判ると思うが、integerにconst付けても参照渡しにはならない
717 :
デフォルトの名無しさん :2007/07/18(水) 20:17:08
浮動小数で、2変数の値を一致するか否か、の関数があったと思うのですが、 名前を失念してしましました。 どのたか、知りませんか? Equalsでもないし、IsEqualでもなし・・・
718 :
デフォルトの名無しさん :2007/07/18(水) 20:26:29
Math.SameValue でした。ありがとうございました。
Delphi(デルファイ)について、 他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を 勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが お礼はDelphiの布教と初心者の救済をお願いします。
>>711 > ここって回答者のレベルがひくすぎね?
それなら、試しに君がレベルの高い回答とやらを実践してみてくれ。
ここは回答者も何が何だか分からない回答を勇気をもって書き込むスレなんだよ。
自演なんてじぇんじぇんしてないよ
> ここって回答者のレベルがひくすぎね? ていうか、Delphiの本ってなさすぎ。 聞くしかねーくらい。
ツリービューとかリストビューでアイテムの選択状態を維持したまま、 他のコントロールにフォーカスを移す方法って無いですか? ヘルプにあったCustomDrawItemのサンプルをやってみましたが だめでした。 (サンプルがそのまま動かなかったので、少し変更して実行しました。) よろしくお願いします。
>>724 維持できているはず。
プロパティのHideSelectionをFalseにすれば、選択している状態を視覚的に確認できたはず。
726 :
725 :2007/07/19(木) 14:41:51
今確認したけど、やっぱり出来ているみたい。 何も小細工する必要ないっぽいです。
727 :
724 :2007/07/19(木) 14:55:42
ホントだ。 お恥ずかしい。 ありがとうございます。
FindFirst関数のPATHの指定のところで'*.csv'とファイルタイプを指定したのですが、 *の部分を'文字列 + *.csv'のような条件に変える事はできるのでしょうか? また、出来る場合の方法を教えていただけませんか?
>>728 "test*.csv" とかにするのがフツーだと思うが
FindFirst のワイルドカードはあやしいので、
Masks ユニットの MatchesMask関数 でチェックするのが一般的らしい
出来る、というかそのまんまだ。
Exeと同じ場所ってことなら IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName))+'*.csv' とか。
733 :
デフォルトの名無しさん :2007/07/19(木) 19:30:44
ShellListViewでファイルをダブルクリックしたときに関連付けで開かれますが それをプログラム側で別のアプリを使って開くようにするにはどうすればいいでしょうか。
734 :
デフォルトの名無しさん :2007/07/20(金) 00:38:18
DelphiでC言語のmemcompの代わりになる関数ありますか? 大小関係も必要です。
>>733 これでどうかな
procedure TForm1.ShellListView1Click(Sender: TObject);
begin
ShellListView1.AutoNavigate := Assigned(ShellListView1.Selected) and ShellListView1.SelectedFolder.IsFolder;
end;
procedure TForm1.ShellListView1DblClick(Sender: TObject);
begin
if Assigned(ShellListView1.Selected) then
ShowMessage(ShellListView1.SelectedFolder.PathName+'をダブルクリック');
end;
procedure TForm1.ShellListView1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = VK_RETURN)and (Shift=[]) and Assigned(ShellListView1.Selected) and not ShellListView1.SelectedFolder.IsFolder then
begin
ShowMessage(ShellListView1.SelectedFolder.PathName+'をエンター');
ShellListView1.AutoNavigate := false;
end else
ShellListView1.AutoNavigate := true;
end;
>>734 function memcomp(a,b:Pointer;l:Integer):BOOL;assembler;
asm
push edi
push esi
mov edi,edx
mov esi,eax
xor eax,eax
xor edx,edx
repe cmpsb
mov al,[esi-1]
mov dl,[edi-1]
sub eax,edx
pop esi
pop edi
end;
ShellTreeView/ListView/ComboBoxを気合入れて作り直したようなコンポってあったりする? Samplesページにあるだけあって微妙に手抜き感が漂ってるんだよな・・・
738 :
デフォルトの名無しさん :2007/07/20(金) 13:11:37
TStringListなんかで、LoadFromFileしてる最中って、 そのファイルを排他にしますか? 排他にするんだったら、排他にしないファイルの読み込みコンポはありまつか?
書き込み禁止で読み込みは禁止してないなTStringList.LoadFromfileは。 書き込みも許可したいならTFileStream.CreateでfmOpenReadだけつければいける。
あ〜、やっぱ書き込み禁止にしちゃいますか。 じゃ、TFileStreamしてみます。
s1という変数に'2ch_テスト用ファイル_ここを切り出したい.txt'という文字列が入っていたとして、 『ここを切り出したい』という部分のみを取り出し、ラベルに表示させるにはどのような方法を用いればいいのでしょうか? ちなみに『ここを切り出したい』より前の『テスト用ファイル』の部分は文字数が固定ではありません。 2ch _ _ の3つは固定文字です。
質問です。クラスでこういう風に定義したいのですが property Font: TFont read GetFont write SetFont; アプリケーション側からFont.Height:=100;とかのアクセスが出来ません。 function GetFont , procedure SetFontで代入したりAssignしたり 色々やっても反映されなかったりエラーが出たりします。 TFontをプロパティとして公開して、クラス内のFBitmap.Canvas.Font.Heightとかを書き換えたいんですが どうすればいいんでしょうか?
>>742 TControl 継承なら、最初から Fontプロパティがあるから、
ただ published なメンバーとして
property Font;
だけとすれば使える。
constructor TControl.Create(AOwner: TComponent); で
FFont := TFont.Create;
FFont.OnChange := FontChanged;
とされていて、Fontを変更すれば TControl.FontChanged; で CM_FONTCHANGEDメッセージが送られる。
だから、 CM_FONTCHANGED ハンドラを置き換えればいい
TControl 継承でないなら、TControl のこれらの処理を真似するといい
>>743 FFont.OnChangeを置き換えたら出来たっぽいです
ありがとうございました
>>471 テスト用ファイル か ここを切り出したい
に _ が含まれる可能性は?
>>734 function memcmp(p1, p2: Pointer; c: integer): integer; cdecl; external 'msvcrt.dll';
XP、Delphi6 personalでJVCL 3.32をインストールしました。 インストーラーは起動するのですが、Choose IDE Targetの画面で "〜update not installed"等のメッセージとともに IDE選択チェックボックスがグレーアウトされてインストールのnext stepに進めませんでした。 \jvcl\install\JVCLInstall\JVCLData.pas のupdateチェックを // Result := Target.LatestUpdate >= 2; // Update 2 required Result := True; のようにして無理やりインストールしました。 ちなみにupdate pack2(Japanese)は当ててあります。 JvColorButton等で作った簡単なサンプルは動いているのですが インストールはこれでいいのでしょうか。
748 :
デフォルトの名無しさん :2007/07/21(土) 12:56:08
とりあえず動けばいいなら
>>746 誰かに使ってもらいたいなら、msvcrt.dll が無い場合もあるだろうから 自前で書いた方がいいと思うよ
750 :
デフォルトの名無しさん :2007/07/21(土) 13:33:45
time:longword; time:=timegettime+random(10000); としたいのですが、timegettimeは符号無し randomは符号ありのようで 符号付型と符号無し型の演算により、オペランドが拡張されました と警告が出てしまいます。 そのままコンパイル出来るのですが、これってどう回避したらいいのでしょう?
代入する型にあわせて 片方を longword( 元) と型変換したらいいよ
752 :
デフォルトの名無しさん :2007/07/21(土) 13:55:14
>>749 ありがとうございました。今度比較するときに使ってみようと思います。
753 :
デフォルトの名無しさん :2007/07/21(土) 14:22:22
>>751 ありがとうございます。警告が消えました〜。
これってやらないとどうなるのですほ?
754 :
デフォルトの名無しさん :2007/07/21(土) 14:30:46
なんかわらた
>>753 やらなくても何の問題もないが、警告が出るので誰かがそのコード見ると、グチグチ言ってくる可能性がある。
は?
>>753 例えばtimegettimeが100、randomが-200の場合
100+(-200)=-100で符号なしLongWordに突っ込むとおかしなことになるよという
ありがたい警告なのでここでは無視してOK。
大抵左辺の方に合わせてキャストすれば警告は消えるけど機械的にやるのも危険。
効率が問題にならないならより大きなint64で受けておいたほうが無難かもね。
時間周りの処理のオーバーフローバグは再現したりしなかったりで検出が面倒だから。
timeGetTimeは1ms単位だから 電源入れっぱなしのパソコンではやがてオーバーフローしてしまう int64 なんかを使うとそういう時に 逆に問題になってしまう。 単純に、32bitで減算するのが一番いい。 なお time:=timegettime+random(10000); をして if Longint(timeGettime-time) <0 then ・・・・ とやるのは OK だけど if timeGettime < time then ・・・・ とやってはいけない
API自体のオーバーフロー対策はまた別の話。
760 :
デフォルトの名無しさん :2007/07/22(日) 20:51:56
処理が終わったら勝手に死んでくれるスレッドってどうかけばいい? OnTerminateの中でSender.Freeとしても死んでくれない・・・。
TThread.FreeOnTerminateプロパティをTrueにするとか。
762 :
デフォルトの名無しさん :2007/07/22(日) 21:07:30
763 :
デフォルトの名無しさん :2007/07/23(月) 04:24:12
indyをスレッド内で実行してコネクション張ってるときにアプリを終了すると 必ずindy周りでメモリーリークするのはどのように対処したらよいのでしょうか? メモリリークはFastMM4で確認。 indyのGStackCriticalSectionの事ではありません。 スレッドはindyのもの(TIdThreadComponent)ではなく普通のTThread(又はそれを継承したもの)です。 TIdThreadComponentを使うとたまに固まることがあったのでそれを使えっていうのはなしお願いします。 それでは、よろしこんぱいる!!!!!!
FindFirst/Next/CloseでファイルリストをTStringListに格納すると 当然Unicodeのファイル名はSJISに変換されてしまうんですが ShellExecute等で実行したり操作しようとするとまったく存在しない為にエラーになってしまいます。 内部のデータ構造をWideStringに切り替えるのはちょっと無理なので UI上の表示はSJISの不正確なままでよいとして 何とかファイル操作だけは正常に行えるようには出来ないでしょうか? 例えばUnicodeだったら8.3形式に変換するとかそんな感じで。
俺なら1も2もなくStringlistをやめる
FindFirstFileExW / FindNextFileW / FindClose で cFileName と得たファイル名で FileExistしてみてエラーなら cAlternateFileName を採用するようにしたら?
>>764 string型を使う以上、そういう問題は作る前に普通は気づくんだけどな。
回答者のレベル低すぎw
ヘタレですが思いつく解決策… ・WideStringの文字列リストもどきを作る ・TStringListにUTF-8に変換して格納,ShellExecuteなどを呼び出すときにWideStringに再変換
FillCharをソースから探すと、System.pasに宣言とコードが見つかりますが (これってMozilla Public Licenseだったんですね) procedure _FillChar(var Dest; count: Integer; Value: Char); という “髭付きの形で” 宣言されてるのが分かります。 しかしながら実際使用する際は、髭無しで使用することになるのですが (髭を付けるとエラーになる)その仕組みは、どこでどういう指定がなされて 現れてるものなのでしょうか? 自前で髭を付けた関数は、当然の様に髭が必要となります。 また、StringOfCharでは、インラインアセンブラの中で_FillCharと髭付きで CALLもされています。 その辺の差異も併せてご教授下さい。
コンパイラマジックとか言うやつじゃねぇ??
UTF8へ変換する時、Delphiに用意されているUTF8Encode関数使う時は要注意だな。 この関数まずいよ。
全然まずくないんですが 単なる知ったか?
本当のUTF8期待してUTF8Encode使ったらまずいだろ?だから、使う時要注意って書いたんだよ? おまえ馬鹿?
隔離スレ逝ってね
レスはええな。NEETでやること無くて、ここ張り付いてるの?お馬鹿さん。
自己紹介乙
>>773 マジかよ…
直さないと逝けないわけだが、もうDelphi忘れちゃったよ…
>>776 普通にまずいだろ…常識的に考えて…
ヒント:自演
isvalidutf8 とかいう関数がよういされていないかな
WideStringはUCS2でありUTF16ではない。 つまりサロゲートなんてないのだ。低脳。
>>784 あーあ、もう少し遊ぼうと思ってたのにw
やっぱり知ったかじゃん 俺の言ったとおり
787 :
デフォルトの名無しさん :2007/07/23(月) 20:50:35
どーでもいいけど
>>763 も答えてくれませんかね〜?
ここってネットワーク系の質問がよく流されてるみたいだけど何で?
得意な人がいないってこと?
>>787 終了時にしか解放しないものでのメモリリークなら気にするな
9x系OSでの使用を前提としてるなら知らん
・Delのバージョンくらい書け ・Indyのバージョンくらい書け ・最新バージョン試したかどうか、パッチ全部あてたかくらい書け ・リークしたヒープが何のクラスまたは何のデータかくらい調べろ
790 :
デフォルトの名無しさん :2007/07/23(月) 21:53:51
>>789 7
9.0.18
10も同じ症状じゃ。
TIdHttpに関係するもん全部じゃ。
1 - 12 bytes: String x 10
13 - 20 bytes: EIdSocketError x 1, TList x 3, TIdHTTPProtocol x 1, TIdStackWindows x 1, String x 4, Unknown x 3
21 - 28 bytes: TIdProxyConnectionInfo x 1, TIdRFCReply x 2, String x 4
29 - 36 bytes: TIdSimpleBuffer x 1, String x 3, Unknown x 2
37 - 44 bytes: TIdSocketHandle x 1, TIdManagedBuffer x 1, TIdURI x 1
45 - 52 bytes: TStringList x 2
53 - 60 bytes: TIdHeaderList x 6
85 - 92 bytes: TThrdHttpClientA x 1
117 - 124 bytes: TIdIOHandlerSocket x 1
125 - 132 bytes: TIdSocksInfo x 1, TIdHTTPResponse x 1
149 - 156 bytes: TIdHTTPRequest x 1
317 - 348 bytes: TIdHTTP x 1
791 :
デフォルトの名無しさん :2007/07/23(月) 21:56:07
>>788 だからGStackCriticalSectionのことじゃないって最初に書いてるじゃん・・・。
TIdThreadComponentを使え 以上
聞く側が凄く横柄なのもゆとりの影響?
ヒント:夏休み
なるほど
すみません。 教えてください。 delphiをまだほとんど理解していないのですが、 サンプルプログラムというのがあります。 これをすべてダウンロードして使用したいのですが、 ダウンロードしても使い方が分かりません。 どうやって使えばいいのでしょうか???
開く コンパイル 実行
コンパイルっていうのは・・・・? メニューバーのプロジェクトの中にある ”project1をコンパイル”というやつですか?
プロジェクトを開く → 実行(F9)
聞く前に試せよ
ctrl+f9
>>790 今日は気分がいいから俺がやさしく教えてあげる。
まずスレッドに不可視のウインドウをくっつけなさい。
くっつけたらメインが終了するときにメッセージを投げなさい。
これでスレッドの大半のリークは消える。
生のスレッドのままじゃいい仕事は出来ませんぜ。
まだリークが残ってるならコンポを生成する時に親を指定しなさい。
そう、もちろん親はメインウインドウだ。
これでリークはなくなる。
以上、二周りも年下の娘と先月結婚した天才より。
>>805 >以上、二周りも年下の娘と先月結婚した天才より。
kwsk
>>805 メモリリークなんてどうでもいいので最後の一文を俺にもできるよう教えてください
>>790 は単にスレッドの終了の仕方がまずいだけだろ
ウィンドウ作ったら、メッセージポンプまわさにゃならんだろ。まんどくさい
スレッドって今一正常な終了の仕方がわからんのよねぇ 某、del製通信ソフトもかなり漏れてるしさ WaitForMultipleObjectsなんかで終了を待ったりするのが正常なんですかね、天才さん?
>>811 タイマー使ってるところが笑えるな。
終了に関してはみんないろいろやってんのねぇw
TThreadはコンポーネント化しちゃうといろいろ楽だよ。 OnStartで初期化処理 OnTerminateで終了処理 OnExecuteThreadMainにメインの処理書いて Synchronize;で呼び出されるOnSynchronizeで同期処理。 UseThread := Falseにすると OnExecuteThreadMainはプライマリスレッドで実行されデバッグも簡単。
流れ豚切りで初心者な質問ですいません 階層フォルダ/ファイルのデータを ツリービューを使ってフォルダ/ファイル名のみ表示させ 特定拡張子のファイルが選択される時のみ 内部データを行ごとに別の場所に表示 とさせたいのですがFindFirstすらうまく使えてません; どんな感じで書いたら良いのでしょうか。 環境はDelphi6peronal Build6.240up2です
>>813 なんかスレッドセーフかどうかがぐじゃぐじゃになりそうだな
初期プロジェクトの保存フォルダってレジストリのどこをいじったら変更できたっけ?
ほんと、Delphiという殻に閉じこもってるレベルの低いやつらばっかだな。ここは。
だったら何か例をしめしてくれよ
Delphi(デルファイ)について、 他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を 勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが お礼はDelphiの布教と初心者の救済をお願いします。
821 :
デフォルトの名無しさん :2007/07/24(火) 13:02:01
Delphi7でコンポーネントを作っています。 そのコンポーネントにColumnsという公開プロパティを持たせています。 このColumnsプロパティはTListViewのColumnsプロパティの様に 設計時にオブジェクトインスペクタから[・・・]ボタンでダイアログを表示させて リストを編集できるようにしたいのです。 TListViewのプロパティエディタを流用したいのですが、該当のソースが見つかりません。 流用が可能であればそのプロパティエディタがドコにあるのか教えてください。 また、半分あきらめて自分でプロパティエディタと編集ダイアログを作りかけています。 Columnsプロパティの[・・・]ボタンをクリックさせてフォームを表示させることが出来ましたが そのフォームのアイテムをクリックしたときにそのアイテムに紐づけたColumnのプロパティを オブジェクトインスペクタに表示することができません。 どちらの解決策でも構わないので、教えてください。
823 :
821 :2007/07/24(火) 13:44:07
>822 ありがとう!ためしてみます!!
HTMLヘルプにHelpContextで対応させるのって、Del7の頃は自前でいろいろやったんだけど Del2007になっても同じ?Del側で対応してくれたりしてる?
825 :
デフォルトの名無しさん :2007/07/24(火) 18:54:06
マルチモニタ対応ってどうやるんでつか?
827 :
825 :2007/07/24(火) 19:14:28
起動する画面のプライマリーモニター/セカンダリーモニターを切り替えたいです。 調べてみたら、Screen.Monitors[i].LeftのプロパティをFormにセットすれば良いのは分かりましたが、 i=1がプライマリー、i=0がセカンダリーでイメージと逆なんですね。 何か厄介ですね。
>>827 順番とプライマリ/セカンダリは関係ない
Primaryプロパティ見ろってヘルプにも書いてあるだろ
829 :
デフォルトの名無しさん :2007/07/25(水) 09:10:49
イラクが韓国人質を解放する条件を部隊隊除の他に25日の準決に負ける事を追加してきたんだけど・・・ 最悪だなあの国。みてて笑っちまった!
「隊除」ってなに?
831 :
デフォルトの名無しさん :2007/07/25(水) 12:15:09
if Rewrite(F) then〜 という文を書いたところ、エラーが発生しました。 Boolean型ではないと言われたので、調べたところ条件をつければ良いとわかりました。 if Rewrite(F) = ○○ then〜と書きたいのですが、Rewriteは戻り値として何を返すのでしょうか? 初歩的(?)な質問かもしれませんが、ご教授お願いします。
戻り値はありません
833 :
デフォルトの名無しさん :2007/07/25(水) 12:37:39
>>832 ありがとうございます。
他に何か方法がないか、自分なりにもう一度探してみます。
イラク?
835 :
デフォルトの名無しさん :2007/07/25(水) 15:24:40
デュアルCPUやクアッドCPUに対応したソフトを作るにはどうしたらよいのでしょうか? そもそもDelphiで出来ますか?
TTheadで処理をスレッドに分割すればいいんじゃねーの
838 :
デフォルトの名無しさん :2007/07/25(水) 15:34:36
あらま。 マルチコア対応のソフトってたんなるマルチスレッド対応ってことなのか。 難しく考えすぎた。 サンクス。
というかexeをいっぱい起動すればよろしい。
840 :
デフォルトの名無しさん :2007/07/25(水) 22:00:51
FreeNotificationってなに? これで通知されるコンポを登録すると、通知された側のコンポはどこで何をするの? なんかヘルプみてもよくわからん。
たとえば、他のコンポーネントを参照するプロパティを持つコンポーネントがあったときなどに、 参照先のコンポーネントが破棄されたときに、そのプロパティをnilに設定しするとか。
842 :
デフォルトの名無しさん :2007/07/25(水) 23:30:42
んーと、TEditのFocusControlでいったらどっちが登録する側で、どっちが登録される側? TEditが登録される側で、TLabelが登録する側であってる? あと登録した(された?)側の対応するイベントって何でしょう?
TLabelが他のコンポーネントを参照するプロパティFocusControlを持ってるから、 TLabelが登録する側だよ。でも、実際は、FreeNotificationで登録するとお互い登録し合うことになる。 >あと登録した(された?)側の対応するイベント ん?デストラクタとか? 上の例でいうと、TEditが破棄される時に、TLabelのNotificationメソッドが呼ばれ、 破棄が通知される。
844 :
デフォルトの名無しさん :2007/07/26(木) 00:00:46
>>843 おーなるほど、Notificationでいろいろすればいいのねん。
よくわかりました。
846 :
デフォルトの名無しさん :2007/07/26(木) 00:45:49
TComponent.Create(AOwner: TComponent)のAOwnerに TPanelとかのコンテナクラスを指定すると何でAVが発生するの? TFormとかなら発生しないのに、とっても不思議。
VCLソース内をトレースすればわかる。
イベントが実行されてるときはボタンを押せなくしたいのですが、 どのような関数を使えばいいのでしょうか?
button1.enabled:=false;
self.enabled:=false; //イベント処理 self.enabled:=true;
ありがとうございます!無事解決しました!!
ハガキ大の紙に大きくIntegerの中の数字を印刷したいのですがどうすればいいのですか?
小さくは印刷できてるの?
854 :
852 :2007/07/26(木) 23:51:23
>>853 はい。
しかし左上にとても小さく印刷されます。
856 :
デフォルトの名無しさん :2007/07/27(金) 02:47:25
TntUnicodeControlsってどのバージョンまでがフリーなんだっけ?
857 :
852 :2007/07/27(金) 11:38:22
>>855 こんな感じ
FormにButton1とPrintDialog1をつくる
usersにPrintersを追加
その後これをソースに書き込む
procedure TForm1.Button1Click(Sender: TObject);
var
PrintFile:TextFile;
begin
if Form1.PrintDialog1.Execute=True then begin
AssignPrn(PrintFile);
ReWrite(PrintFile);
Writeln(PrintFile,x); //xは表示したいグローバル変数
CloseFile(PrintFile);
end;
end;
>>857 素直にPrinter関数使えば?
ヘルプにやり方載ってるし
859 :
デフォルトの名無しさん :2007/07/27(金) 23:15:57
1〜100までの数字をランダムに重複なしで10個選び出すアルゴリズムはどんなのが考えられますか? random(100)+1で重複していればやり直しでは効率が悪すぎますので。
Delphiと関係ない。 アルゴリズムが分かってから、またおいで。
>856 2.3.0かな?
>>859 var
tmp: TStringList;
n, idx: Byte;
begin
Randomize;
Memo1.Lines.Clear;
tmp := TStringList.Create;
try
for n:=1 to 100 do
tmp.Add(IntToStr(n));
for n:=1 to 10 do
begin
idx := Random(tmp.Count);
Memo1.Lines.Add(tmp[idx]);
tmp.Delete(idx);
end;
finally
tmp.Free;
end;
end;
そこまでやったら重複やり直しのほうが軽いだろ
>>864 そうか?
つか、このソースでいいたいことは種用意してそっから適当に差っぴけってことなんだけどね。
軽くしたいならこの考えでゴニョゴニョやっていくが、あんたはどーすんの?
10個選ぶくらいなら重複をやりなおすわw
・・・まぁいいか、夏休みだしな。
100から10なら重複をみながらやり直しでもいいが、 1000から999個のような場合は明らかに863がいいとおもう スマートだな
869 :
デフォルトの名無しさん :2007/07/28(土) 08:29:21
雨が降っても選挙行こうな!! 自分の選挙区に道路とか空港とか利益誘導ばっかり 主張するやつには投票するなよ。 世襲議員、2世議員は投票するなよ 選挙前に限って「弱者のための政治」というやつには気をつけろ!自民党のベテラン議員に多い! 委員会で質問しないようなやつには投票するなよ 業界団体の利益ばかり主張するやつに投票するなよ ホームレスとかネットカフェ難民、介護難民問題を 取り上げる「弱者のため」の議員を探そう!!
deleteが重く感じる理由なんだろう。 一番先頭とswapするようにして idx := Random(tmp.Count-(n-1) ); Memo1.Lines.Add(tmp[idx]+(n-1) ); とすれば、繰り返し使える
重複チェックのほうがコストかかるような気がするのは俺がアマグラマだから?
>>863 TStringList なんか使ったら重いよ
>>871 数値を扱うコストは文字列を扱うコストより圧倒的に小さい
取り出す個数が極端に多くなければ重複チェックのほうが軽いよ
そうじゃなくて文字使わずに配列やらポインタとか使って最適化した場合の話。 仮に早かったとしてチェックしてやり直しなんてコード、コスト削減の為に一般的にやんの?
var tmp: array[0..99] of integer; n, idx, tmpcount: integer; begin Randomize; Memo1.Lines.Clear; tmp := TStringList.Create; for n:=0 to 99 do tmp[i] := n+1; tmpcount := 100; for n:=1 to 10 do begin idx := Random(tmpcount); Memo1.Lines.Add(IntToStr(tmp[idx])); tmp[idx] := tmp[tmpcount-1]; dec(tmpcount); end; これでどうよ
> tmp := TStringList.Create; すまん、この行はいらんw
>>874 最適なアルゴリズムなんて条件によって変わる
ソーティングでもおざなりでいい時はバブルソート使うしな
878 :
デフォルトの名無しさん :2007/07/28(土) 11:49:22
も〜なんでもいいじゃん
>>863 は
>>865 を言いたかった
それを実践してみたのが
>>875 そしてアルゴリズム次第で重複チェックしてリトライのほうが速い場合もある
というわけで宿題タイムはこれで糸冬 了..._〆(゚▽゚*)
はい、次〜
procedure UndupeRandom(Range: Integer; var Dest: array of Integer); var Count, i: Integer; begin for Count := 0 to Length(Dest) - 1 do begin // 毎回1づつレンジを縮める Dest[Count] := Random(Range - Count); // 生成した乱数より小さいものの数だけインクリメント for i := 0 to Count - 1 do if Dest[i] <= Dest[Count] then Inc(Dest[Count]); end; end;
>>861 のはスマートだね。
procedure GetRnd();
var
i,r,n,guide,x: integer;
ptr array of integer;
begin
for i:=1 to n do ptr[i] := -1;
guide := 1;
randomize();
while (guide<=n) do
begin
r := random(n-guide+1) + guide;
if ptr[r]=-1 then x := r
else x := ptr[r];
//xが取り出された乱数
if ptr[guide]=-1 then ptr[r] := guide
else ptr[r] := ptr[guide];
guide := guide + 1;
end;
end.
誰も相手にしなかったくせに何で
>>863 がソース提示すると一斉に我も我もとレスする奴がいるんだろう・・・
procedureやfunctionのあるレスを見たらテンションが上がるのが性です
アルゴリズムを問われる質問は皆スルーしてるし アルゴリズムを考えるのが不得意な人が殆どと言ってみるテスト
土方プログラマが多いってこった。
>>884 ここはもう底辺しかのこってないってことか
そういうことにしたいのですね:-p
unko-
かつてはランダムに何かするアルゴリズムは適当に作っていましたが 奥村晴彦氏の『アルゴリズム事典』を見て 自分の考えたアルゴリズムが間違っていたのにショックを受けたものです.
それはいい経験をしましたね
891 :
名無しさん@そうだ選挙に行こう :2007/07/29(日) 17:32:49
Delphi7なんですけど 久々に起動して以前作ったプログラムを修正してコンパイルしようとしたのですが 凄く動作が遅くなってるのです、例えばコード補完時やコンパイルの速度も明らかに遅いです 同様の現象を解決された方はおられますか?
暑いからヘバってんじゃね?
変なコンポやパッケージ外せ
デフラグ
>>891 ウィルスチェック
あと、メモリ増設してみれ
オプソのDelphi製コミックビューアくれ
てめぇで作れカス
898 :
デフォルトの名無しさん :2007/07/29(日) 22:07:09
>>892-895 停電でつかえなかった orz
わかった、エアコン全快でコンポ外してデフラグかけてウイルスチェックしてみます
StringGridのセル内に表示させた文字列を、中央揃えにする方法がわかりません。 よろしくお願いします。
>>899 補足しますとグリッドのOnDrawCellイベントを使って自分で描画します.以下サンプル.
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
// @背景を塗りつぶす
StringGrid1.Canvas.FillRect(Rect);
// ARectの範囲を上下左右-2ピクセル減らす
InflateRect(Rect, -2, -2);
// Bセルの内容(文字列)をRectの範囲に水平方向中央寄せで描画
DrawText(StringGrid1.Canvas.Handle, PChar(StringGrid1.Cells[ACol, ARow]),
-1, Rect, DT_NOPREFIX or DT_CENTER);
end;
重要なのはBのDrawTextというWindowsのAPIです.
蛇足の典型例
夏厨も現れず、今年は閑散としてていいね。来年もあるといいね・・・
EmptyStringとは一体なんでしょうか? ヘルプで探してもでてこないし、困っています。
空文字列をResultに突っ込むときに内部定数で使われてるだけじゃねーの。 何に困ってるのか知らんけどSource\*.pasをgrepしろ。
>>902 こういう濃いサイトに限ってJavaScriptかなんかでダウソできなくしてやがる・・
イジワルやめてくれ!
turbo delphiでsqliteを使用するサンプルとかどこかに無いでしょうか? ぐぐってみたけどぐぐりかたが悪いのか見つからないんですorz
はーい _____________ ∧,,∧∩ / ミ,,゚Д゚彡 < 質問っす U ミ \ @ミ ミ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∪''∪ InputBox機能を使いたいのですが 諸般の事情で容量節約しなければいけなく Dialogs.pasは使いたくないので APIを使用したいです。 そういうAPIはありますか? Delphiでの使い方を知ってたら教えてください。
Win32API直叩き&リソースエディタでダイアログ作る
>>913 おぉありがとうございます。無事動きました。
>>908 JavaScript オフにすればいいやん
916 :
デフォルトの名無しさん :2007/08/01(水) 15:15:32
パスの最後に、円記号を付加するルーチンがあったと思うのですが、 覚えている方はいらっしゃいますでしょうか? IsPathDelimiter とか、その辺だったような
917 :
デフォルトの名無しさん :2007/08/01(水) 15:17:40
SysUtils.IncludeTrailingPathDelimiter でした。 SysUtils.ExcludeTrailingPathDelimiter もありますね
918 :
デフォルトの名無しさん :2007/08/01(水) 15:54:43
こんちは。 C++のソースをDelphiに、移植中なのですが、 C++の動的生成しない classのデストラクタをどう実装したらよいか迷っています。 record で実装しようと思ったのですが、 デストラクタはスコープから外れたときに、自動でよばれないですよね? うーん。 とりあえず、考えたところ ・使い終わったら、明示的にデストラクタを呼ばせる ・interfaceで実装して、自動で解放。 メモリ確保、解放の速度は、気にしない
919 :
デフォルトの名無しさん :2007/08/01(水) 15:55:19
> record で実装しようと思ったのですが、 > デストラクタはスコープから外れたときに、自動でよばれないですよね? 間違えました。 record では、デストラクタは定義できないですよね?
Delphiの基本構造は、 try //処理 finally //コンポーネント.free end じゃね?
>・使い終わったら、明示的にデストラクタを呼ばせる 基本はこれ。 コンポーネントの場合はコンストラクタでオーナーを指定すれば、オーナーが破棄されるときオーナーが勝手に破棄してくれる。
922 :
デフォルトの名無しさん :2007/08/01(水) 17:39:11
サンクス。 やっぱ、明示的に開放、Delphi流かあ。 (単なる構造体で、コンポーネントではないので・・・) やはり、使う側で、try-finally-endしてもらって解放が定石ですか
923 :
デフォルトの名無しさん :2007/08/01(水) 17:39:50
x やっぱ、明示的に開放、Delphi流かあ。 o やっぱ、明示的に開放が、Delphi流かあ。
分からないことに無理に応えて質問者を混乱させるのやめようぜ。 Delphiでもスコープ外れたら自動開放するようにできるよ。 確かShellApiあたりでそんなコード見た希ガス
他のアプリをアクティブにするのってどーすればいいの?ソフトキーボード作りたいの。 フォーム上のボタンがクリックされたら直前のアプリにキーを送信したいんだけど、 直前のアプリのハンドルは取得出来るんだけどそのアプリをアクティブにする方法がわからない… ぐぐってやっとこんなの見つけたんだけどうまく行かん。誰か教えて〜 ちなみに環境はWinXP SP2 Del7ent です function TForm1.ForceBringWindowToTop(hTargetWnd: HWND): Boolean; var dwTargetTID, dwActiveTID: DWORD; begin Application.Restore; dwTargetTID := GetWindowThreadProcessId(hTargetWnd, nil); dwActiveTID := GetWindowThreadProcessId(GetForegroundWindow, nil); if dwTargetTID = dwActiveTID then Result := BringWindowToTop(hTargetWnd) else begin AttachThreadInput(dwTargetTID, dwActiveTID, True); try Result := SetForegroundWindow(hTargetWnd); finally AttachThreadInput(dwTargetTID, dwActiveTID, False); end; end; end;
>>925 余計なコードを外して単純化することから始めろよ
class型のクラスではなく、object型のクラスでも作れば?
929 :
925 :2007/08/01(水) 18:58:56
>>927 出来ました!大感謝です!
今日ずっと悩んでたのに、こんな簡単に出来ちゃうんだ
ビックリ
>>926 その通りでしたね…
出来ない出来ないといじってるうちに、ソースがどんどん複雑になっちゃってたみたいです。
お二人とも有難うございました。
930 :
デフォルトの名無しさん :2007/08/01(水) 19:11:17
>>924 もし、それができるなら教えてほしいっす!
ShellAPIはざらっと名がみましたが、APIしかなかたです。
>>928 Objectもデストラクタ動きませんよね
_________
∧,,∧ / ちょうど
ミ,,゚Д゚彡 < 新型のrecord型
ミつ旦(ミ~~ \ を調べようかと。
@ミ ミ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∪''∪
Delphi 7以降の言語およびコンパイラの新機能
http://dn.codegear.com/jp/article/34409 recordにコンストラクタとデストラクタを実装すると
どうなるんだろうか...
var
MyRecord: TMyRecord;
begin
MyRecord.Create(Value);
end;
みたいなコードが書けるみたいだ...
type TMyObject = class(TInterfacedObject) public constructor Create; destructor Destroy; override; procedure Greet; end; constructor TMyObject.Create; begin ShowMessage('Create'); end; destructor TMyObject.Destroy; begin ShowMessage('Destroy'); inherited; end; procedure TMyObject.Greet; begin ShowMessage('hello, world'); end; procedure TForm1.Button1Click(Sender: TObject); var i: IUnknown; obj: TMyObject; begin obj := TMyObject.Create; i := Obj; obj.Greet; end; 通常の変数に加えてIUnknownな変数に突っ込んで開放させるサンプル
933 :
デフォルトの名無しさん :2007/08/01(水) 19:38:00
>>932 二つ問題点
・TInterfaceObjectなオーバーヘッド(recordに比べて)
・IUnknownに代入するくらいなら、try-finally-end節で解放するかも
>>933 すぐ上の方で書かれてることをさも今気づいたみたいに語るテクニックが素晴らしいですね
935 :
デフォルトの名無しさん :2007/08/01(水) 22:01:16
>>936 932 さんのは TInterfacedObject を継承している Class 限定でしょ。
それはそれで有りと思うけど、すっきり云々の話では無いだろ。
レコード型は普通の変数と同じく、スコープを外れると自動的に開放される。 それが気持ち悪いなら、そのレコード型のポインタを定義して、new dispose で明示的に生成・開放をするのが正解。 いずれにしろ、生成・開放をペアで実行するコードを書く癖をつけることは 非常によいことだと思う。
939 :
デフォルトの名無しさん :2007/08/01(水) 23:54:08
結局、スマートにはかけない、ということで、いいでしょうか?
実は、数年前にも、できないか悩んでいたので、
この際、はっきり、Delphiではできないということで。
>>936 これも結局、解放したい場合に、interfaceの変数を追加しないといけないですよね
>>938 いや、そうじゃなくて・・・。
デストラクタなどを使って、自動的に開放されるようにしたいんですが。
構造体に含まれるstringとかのことを言ってらっしゃいます?
C++とかの構造体を知らない人に説明しても理解してもらえないと思う・・・
何したいのか良く分からんけど、 initialization/finalization ではなくて?
悪いけど全然違う。
>>940 C++の構造体とDelphiのRecord型では、何が違うの?教えて!
結局は、動的に生成したインスタンスへの参照が無くなったら
自動的にメモリ開放したいってだけじゃないの?
だとしたら [Delphi-ML:41732] みたいになるのだろうから
スマートな書き方はないんじゃまいか。
つーかその移植したいというソースを貼れば可能か否か速攻で解決するのに 情報小出しにしてそれはダメだとか何とか難癖つけてるのは何故? あとID出ない板なんだし質問者が分かるようにレス番くらい入れようよ
946 :
デフォルトの名無しさん :2007/08/02(木) 04:53:30
ボタンなどに使用する画像はただでもらえるところ無いでしょうか?
WideStringに入っている文字列に1個1個アクセスして、その文字がひらがなだったら取り出したい。 if WStr[i]='あ' or WStr[i]='い' or WStr[i]='う' or … とやるしか方法が思いつかないのですが、ベテランの方ならどうするのでしょう?
948 :
デフォルトの名無しさん :2007/08/02(木) 05:49:52
>>931 どれもそそる拡張ばかりだな・・・・
Delphi7ベースで移植してくれよ
IDEがもっさりしすぎなんだよ、D7以降のやつはよ。
>>947 if (WStr[i]>='ぁ') and (WStr[i]<='ゞ') then
951 :
918=919=922=923=933=935=939 :2007/08/02(木) 07:31:48
>>945 手際悪くてスマソ。
組み込み言語Squirrelのアドオン、SqPlus(とうか、DXSquirrel)を、Delphiに見真似で実装してます
要点だけ取り出すとたとえば、こんなソースです。
#include <stdio.h>
class CTest
{
public:
CTest() { printf("CTest constructor \n"); }
~CTest() { printf("CTest destructor\n"); }
void Hoge() { printf("CTest::Hoge\n"); }
};
int main()
{
CTest test;
test.Hoge();
return 1;
}
結果としては、以下のようなのを期待しています。
CTest constructor
CTest::Hoge
CTest destructor
>>945 が一体何がわからなかったのかがわからないが
まとめると
・質問に対する直接の答えは
>>932 ・ただし、Delphiでは素直にfoo := TFoo.Create; try finally foo.Free; end;するのが一般的。
たしかに「何がわからなかったのかがわからない」ね。 ガベージコレクトが本質そうじゃないし。
読解力ねぇな・・
>>953 この質問からガベコレ抽出するようなレベルじゃ理解できなくて当然
956 :
デフォルトの名無しさん :2007/08/02(木) 17:11:00
Del7なんだけど、ダイアグラムってどう使うんですか? 便利な使い方ってある?
959 :
デフォルトの名無しさん :2007/08/02(木) 19:13:48
960 :
A型 :2007/08/02(木) 19:38:37
つか、この統計意味わからん。 何でA型が一番なわけ? 科学的解釈0。 それ以前にそんなスイッチ自体、世界に数個だろ。 何が押す可能性が21.3%だよ。 世界が滅ぶかもしれねーつのに、押すわきゃねーつーの!!
ボタンを押したくない場合、押されたくない場合は Enableプロパティをfalseにすればグレーアウトされ ボタンを押せなくなります。
963 :
O型 :2007/08/02(木) 23:54:11
むしろ血液型占いを幼少時から散々聞かされて それに合わせた性格になってたりしてなw 俺20歳すぎるまでず〜とA型と思ってたら実はO型だった。 周りからはほぼ100%で「A型でしょ?」って言われます。
|\ ∧,,∧ AB型です /\>''",《"《"《ミ,,゚Д゚彡  ̄ ̄ゝ..,《'_.《_.,(ノ/⌒i) ゛;,;:;::::;;:;:;:,;,,;,;;.,,:,,:ノ U"U
>>955 荒れそうだからやめよかと思ったけど
どうしても知りたいので、お願いだから
正解教えてくれ。
多分、なんだかんだ言ってはぐらかしそう
だけどな。
>>964 すごい…1文字判定するためにそんな処理をするというのか。
獅子は兎を狩るのにも全力を尽くすってやつか。
>その文字がひらがなだったら取り出したい。 というのが、 ・カタカナだったら排除したい ・"あかさたなはまやらわん"だったら取り出したい という仕様変更にも容易に対応とれる形でコーディングしておくことを 考えると、便利だと思いますよ。
>
>>947 >if (WStr[i]>='ぁ') and (WStr[i]<='ゞ') then
ん?
これでほんとにできた??
>>964 そのライブラリがusesしてるXPtestってなんやねん?自作?
俺のDelにはないぞ。
はは
というか、テストコードど本体まぜるなよってフサにいいたい。
>>969 これでいいみたい。
if (WStr[i]>=WideString('ぁ')) and (WStr[i]<=WideString('ゞ')) then
974 :
デフォルトの名無しさん :2007/08/03(金) 09:23:07
WideChar('あ')でいいんじゃまいか
listviewの習作としてフォルダ内のファイルの ファイル名、サイズ、更新日時の一覧を取得するプログラムを作ったのですが、 エクスプローラやその他の同等の機能を持つものと比べてかなり遅いようなのですが、 これを早くするにはどうしたらいいでしょうか。 ちなみにソートは全項目追加後にstNoneからstTextに変えています。 処理時間を計るために各所でタイムスタンプを出しているのですが ソートはほぼ無視できる時間なのに対して、FindFirst〜FindNextの部分で 大半の時間を占めています。 FindFirst(dir, faAnyFile, sr); ListView1.SortType := stNone; ListView1.Items.BeginUpdate; repeat if (sr.Attr and faDirectory) <> 0 then begin continue; end; listItem := ListView1.Items.Add; listItem.Caption := sr.Name; listItem.SubItems.Add( IntToStr(sr.size) ); dateTime := FileDateToDateTime(sr.Time); dateStr := DateTimeToStr(dateTime); listItem.SubItems.Add( dateStr); until FindNext(sr) <> 0; FindClose(sr); ListView1.Items.EndUpdate;
ListView1.SortType := stNone; ListView1.Items.BeginUpdate; これをFindFirstの上にもってく。 あとは、時間掛かる処理を描画するときにやるとか。
listview1.owndata := Trueにして仮想リストビューを使う。 データの保持をlistview自身にやらせる通常のやり方は劇遅いよ。
>>976 >>977 ありがとうございます。
実測で1/10時間程度になりました。
ありがとうございました。
>>964 Unicodeでは現在,$03040台から$3090台までをひらがなに割り当てているようで
$03041(ぁ)から$03094(ゔ)と$0309B(゛)から$0309E(ゞ)までが実際に定義されているみたいなので
わざわざひらがなテーブルを作る必要はありません.
この2つの範囲のいずれかに収まるかどうかという条件式は以下のようになると思いますが
if (WStr[i]>='ぁ') and (WStr[i]<='ゔ') or (WStr[i]>='゛') and (WStr[i]<='ゞ') then
実際にはDelphi 6などだと 'ゔ' みたいなShift-JISでは表現できない文字列は記述できないので
実際のコードはもっと複雑になると思います.
一方で未使用部分を除外しなくても実害はないと思われますので
>>949 で問題ないと思います(シンプルでわかりやすいですし).
>>980 お疲れさまでした.
>>981 if (WStr[i]>=WideString(#$3041))...と書けばいいのでは?
983 :
デフォルトの名無しさん :2007/08/03(金) 23:27:55
質問です。 ネットワークコンピュータにある指定されたファイルが存在するか確認するにはどうしたら良いですか? 今までFileExistsを使っていたのですが、正しく帰ってきませんでした。 D5EntSP2を使っています。
984 :
デフォルトの名無しさん :2007/08/03(金) 23:56:15
WNetOpenEnum
Win32APIの日本語ヘルプの最新版はどこかでダウンロードできますか?
986 :
デフォルトの名無しさん :2007/08/04(土) 14:13:11
THX! ちなみになんていうファイル名ですかね。 API32WH.HLPは無かったのですが。
.hlp形式はもう時代遅れなんで最新のAPIリファレンスには対応していないから 外部ツールでヘルプ呼び出すツール作るしかない。
D6Personalですが、 ビット単位でファイル入出力するにはどうしたらいいでしょうか。 フォーマットの決まっているバイナリファイルを解析または書き出す プログラムを作ろうとしているのですが、ファイルフォーマット内のフィールドが バイト単位になっていないためバイト単位の入出力だと多少不都合があります。 1バイトに満たない端数の部分を考慮しつつバイト単位で読み書きすることは できると思うのですが、これより簡単な方法は無いでしょうか。
990 :
AB型 :2007/08/04(土) 23:12:47
ないです。
ありがとうございます。 シコシコ作ります。
配列をSetLengthで小さくする時は配列の中身はクリアした方がいいんですか?
普通の組み込み型の配列であれば不要。当然だけどクラス型の配列(実体はポインタの配列)だったりした 場合は必要に応じて指しているインスタンスを解放する必要がある(かもしれない)。
組み込み型の配列ってなんだ?VCLで宣言済みの動的配列ってことか?
IntegerやWORD、あるいはStringのような型のこと。
そんな脳内用語使われても知らんがな
ヘルプくらい嫁よ
あ〜プリミティブ型の動的配列ってことか。 ヘルプに書いてあるのか?
999 :
デフォルトの名無しさん :2007/08/06(月) 03:05:36
uPnPを使ってuPnP対応のルータにポートを開閉を要求するにはどうしたらよいのでしょうか? indyで何かよいサンプルがあればよいのですが、見つける事ができません・・・。
1000ならみんなしあわせ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。