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

このエントリーをはてなブックマークに追加
1ななしへたぐらま ◆XcB18Bks.Y
Delphi(デルファイ)について、
他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を
勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが
お礼はDelphiの布教と初心者の救済をお願いします。

<前スレ>
くだすれDelphi(超初心者用)その41
http://pc11.2ch.net/test/read.cgi/tech/1176867736/

<過去スレ>
DelWiki避難所
http://delwiki.info/?Delphi 関連の過去スレッド
2ななしへたぐらま ◆XcB18Bks.Y :2007/05/31(木) 21:07:14
□質問しながら多少、相手してもらいながら
Delphi初心者のための寺子屋
http://pc11.2ch.net/test/read.cgi/tech/1132756268/
Delphiで無料でプログラミングしてみるお
http://pc11.2ch.net/test/read.cgi/tech/1158233434/

□雑談類は以下のスレに
バカボンのDelphi不買・販促・その他談話室その29
http://pc11.2ch.net/test/read.cgi/tech/1153227982/
【Borland】 CodeGearオッチャ その2【(ノ∀`)アチャー】
http://pc11.2ch.net/test/read.cgi/tech/1178362571/

Borland Developer Studio 2006 No.13
http://pc11.2ch.net/test/read.cgi/tech/1175861395/
Borland Developer Studio 2006 アンチスレ
http://pc11.2ch.net/test/read.cgi/tech/1153353434/
VB vs Delphi @夏厨2006
http://pc11.2ch.net/test/read.cgi/tech/1152851763/
3ななしへたぐらま ◆XcB18Bks.Y :2007/05/31(木) 21:08:27
□Webとかの通信関係
【Delphi】 Indyコンポーネント 【C++Builder】
http://pc11.2ch.net/test/read.cgi/tech/1093654251/
delphiで2ch保守プログラムを作ろう
http://pc11.2ch.net/test/read.cgi/tech/1165632604/

□ゲームを作りたい人
Delphi持ってるならGLSceneを使え
http://pc11.2ch.net/test/read.cgi/tech/1163269079/
【Delphi】 ゲームつくるぞ(゚Д゚)ゴルァ 2【Delphi】
http://pc11.2ch.net/test/read.cgi/gamedev/1097836469/
Delphiでアクションゲームが作りたい!! Part2
http://pc11.2ch.net/test/read.cgi/gamedev/1027482533/
ネットワークゲーム作成のお勉強(Delphi専用スレ)
http://pc11.2ch.net/test/read.cgi/gamedev/1028278884/
delphiでMMO
http://pc11.2ch.net/test/read.cgi/gamedev/1072515100/

□borland/CodeGear以外の実装もあるよ
【Delphi互換!?】FreePascal【GPL】
http://pc11.2ch.net/test/read.cgi/tech/1137051510/
4デフォルトの名無しさん:2007/05/31(木) 21:38:55
CodeGear
http://dn.codegear.com/jp/


ボーランド 日本の 残骸
http://202.33.253.145/bds/index.html
5デフォルトの名無しさん:2007/05/31(木) 21:55:43
http://www.akanko.net/marimo/data/rfc/rfc1321-jp.txt

この手のobjをDelphiで使う場合、memory.hとか使わないで
MD5.hにmemcpy/memsetの宣言を書くだけで問題は無いですかね?
6Delフサギコ ◆A6VzDeLphI :2007/05/31(木) 22:32:02
           _________
   ∧,,∧∩  / 
  ミ,,゚Д゚彡 < ななしへたぐらま さん、乙!
   ミつ旦.ミ   \ 
 @ミ   ミ     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ∪''∪
7Delフサギコ ◆A6VzDeLphI :2007/05/31(木) 22:32:59
           _________
   ∧,,∧   /だれか
  ミ,,゚Д゚彡 < Delphiソースで
   ミつ旦(ミ~~ \ IPメッセに
 @ミ   ミ     メッセージ投げる方法
   ∪''∪    しらまいか?
8デフォルトの名無しさん:2007/05/31(木) 22:36:05
君はそろそろ、名無しに戻ったほうがいいと思うぞ
9デフォルトの名無しさん:2007/05/31(木) 23:14:17
>>5
使ってる関数は全部実装しないとダメだよ
でも、実装されてるみたいだけどね。

あとMD5ならpasコードもあるよ
ttp://homepage1.nifty.com/Ayakawa/soft/delphi.htm
10デフォルトの名無しさん:2007/06/01(金) 11:45:12
>>7
あれってソース公開されてるよね?
11Delフサギコ ◆A6VzDeLphI :2007/06/01(金) 12:53:05
           _________
   ∧,,∧   / んーー、
  ミ,,゚Д゚彡 <  DelphiでLibrary
   ミつ旦(ミ~~ \ 作っている人もいるらしいが
 @ミ   ミ     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ∪''∪

実際やろうとすると、わけがわからないんだよね。
UDPとか使っているらしいし。

誰か具体的にやりかた知らないかなあ。
12デフォルトの名無しさん:2007/06/01(金) 14:06:54
>>11
アレだけ情報でているのに出来ないんだから諦めろ
13Delフサギコ ◆A6VzDeLphI :2007/06/01(金) 15:00:31
           _________
   ∧,,∧   / 教えれない
  ミ,,゚Д゚彡 <  んなら、だまってていいよ。
   ミつ旦(ミ~~ \ 
 @ミ   ミ     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ∪''∪

互換メッセンジャーのChatrunを作っている方が
コンポーネント公開したい、、

というなコメントを書いているのだが、
なかなか、C++系とは違って
こういうところが難しいのですよね。

誰かDelphiで接続できるコードつくってないかな。
14デフォルトの名無しさん:2007/06/01(金) 15:30:12
こういう所って のはどういう所? PROTOCOL.TXT に説明あるし
ues WinSock して MSGMNG.CPP を地道に パスカルに変換すればいけるだろ
15デフォルトの名無しさん:2007/06/01(金) 15:32:49
>誰かDelphiで接続できるコードつくってないかな。

これがホンネだろ。この前もグダグダ言ってたら誰かコード書いてくれたし
16Delフサギコ ◆A6VzDeLphI :2007/06/01(金) 15:59:42
   ∧,,∧    /最初から
  ミ,,゚Д゚彡 < ホンネですが
   U  つ∀ \なにか?
 〜ミ  ミ ┴  
   ∪''∪    なんだかなあ
>>15
自分でも書きましたが?

>>14さん
うーん、ちょっと面倒っぽいですな....C++は嫌いだし嫁ないので....
まいつたな。。

まあ、おいおいやっていくか。
17デフォルトの名無しさん:2007/06/01(金) 16:03:20
>うーん、ちょっと面倒っぽいですな....C++は嫌いだし嫁ないので....

C++Builderはやっとけ。
18デフォルトの名無しさん:2007/06/01(金) 16:28:26
フサギコ死んでくれ
delphiの為に
19デフォルトの名無しさん:2007/06/01(金) 16:34:48
>>16 C++といっても、特にややこしいことはしてない 機械的に変換出来るレベルだよ
20デフォルトの名無しさん:2007/06/01(金) 16:40:38
コテ叩きウザ
フサももっと大人毛生やせ
21デフォルトの名無しさん:2007/06/01(金) 16:48:31
名無しに戻って擁護するあたりとか流石と言っておこうか
22デフォルトの名無しさん:2007/06/01(金) 19:21:19
てか、コテでしょうもない質問しかしないんなら名無しでやれよ
うっとうしいねん
23デフォルトの名無しさん:2007/06/01(金) 19:46:11
コテが嫌ならあぼんしろ
くだすれの質問に文句垂れんな
行儀よくやりたいならMLにでも行け
24デフォルトの名無しさん:2007/06/01(金) 20:30:00
Delphiで彼女はできますか?
25デフォルトの名無しさん:2007/06/01(金) 20:44:59
出来ました。

当方35歳170cm85kg後頭部ハゲ

彼女 23才 158cm 43kg Cカップ 加藤あい似

感度がいいです。
26デフォルトの名無しさん:2007/06/01(金) 20:52:32
ソースうpキボンヌ
俺も作る
275: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/


28デフォルトの名無しさん:2007/06/01(金) 22:21:12
>7
IP Messengerのこと?手元に
// TIPMsg.pas, version 1.0b2
// Copyright(c) Tomoaki Takebayashi([email protected])
というコメントの入ったソースがあるのだが…どこで入手したのか記憶にない。
29Delフサギコ ◆A6VzDeLphI :2007/06/02(土) 00:55:23
             ___________
    ∧,,∧     /確かに個人的に
   ミ,,゚Д゚彡 <  EmEditorのプラグインとか
   ミ つ日   \考えるとC++は詠みたいのだが。
 .@ミ,,,,,, ,,ミ       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

実は、目指したいのは
単純な構造のC++をDelphiコードに変換するように
構文解析をできるプログラムは組めまいかと
望んでみたりもして。

EmEditorのプラグインの場合
plugin.h→plugin.pas
で、変換できたら最高なのになあ。とも思うのだ。

>>14さん
>ues WinSock して MSGMNG.CPP を地道に パスカルに変換すればいけるだろ
ふむふむ。。。

自分への、課題だな。

>>28
素敵ね。
30デフォルトの名無しさん:2007/06/02(土) 00:57:53
BNFがわからんとか言ってるやつに構文解析は無理だ
31Delフサギコ ◆A6VzDeLphI :2007/06/02(土) 01:02:19
             _
   ∧,,∧∩    /
  ミ*゚∀゚ミミ  <  これか!
  ミ つ且~~   \
〜ミ,,,,,, ,,ミ        ̄

tota@web
http://tota.s57.xrea.com/

  ∧,, ∧     ありがとう。
  ミ。_。彡   ペコッ
〜ミ,,,U U,,ミ 且~~  

ヒントになりました。

>>30
まあ、そのうちな!ミ・w・彡
32デフォルトの名無しさん:2007/06/02(土) 10:24:25
ライセンス表記のないコンポはどーすりゃいいんだ?
修正BDSって勝手に解釈して著作権だけ表記すりゃいいのか?
33デフォルトの名無しさん:2007/06/02(土) 10:26:48
ライセンス表記のないソースコードは著作権法によってのみ縛られるから
改変不可、再配布不可、引用の範囲内を超えた組み込み(プログラミングの世界ではリンクと呼ばれる)による再配布も不可。
34デフォルトの名無しさん:2007/06/02(土) 10:33:52
>>33
そうなのか・・・。
てっきりTBXみたいに著作権とWebアドレスかいてりゃいいと思ってたよ。

って、結構多くない?
ライセンスが不明なコンポ。
35デフォルトの名無しさん:2007/06/02(土) 10:36:05
>>32
×修正BDSって勝手に解釈して著作権だけ表記すりゃいいのか?
○修正BSDって勝手に解釈して著作権だけ表記すりゃいいのか?
36デフォルトの名無しさん:2007/06/02(土) 10:44:53
実際のところPDS文化の延長で著作権表記を勝手に書き換えたり
塗りつぶしたりしない限り好きにしてくれって事だとは思うが。

help|aboutかreadmeに謝辞書いておけば十分だろうけど
気になるなら問い合わせるしかない。
37デフォルトの名無しさん:2007/06/02(土) 10:46:25
>>33
>引用の範囲内を超えた組み込み(プログラミングの世界ではリンクと呼ばれる)による再配布も不可

これってコンポを自分のアプリに取り込んで、アプリを配布するのも不可ってことだよねぇ。
困ったな。

>>36
一度、問い合わせてみるかなぁ。
38デフォルトの名無しさん:2007/06/02(土) 11:04:58
たまにコンポーネントにGPLライセンスを適用してる人っているよね
アレって何なんだろ?
せめてLGPLにしてくれよ
39デフォルトの名無しさん:2007/06/02(土) 12:00:08
>>38
Delphi のコンポーネントはスタティックリンクだから LGPL でも大差なくね?
40デフォルトの名無しさん:2007/06/02(土) 12:02:20
【GPL】ライセンス問題討論すれ7【BSDL】
http://pc11.2ch.net/test/read.cgi/linux/1154170666/
41デフォルトの名無しさん:2007/06/02(土) 12:21:16
>>39
だなw
42デフォルトの名無しさん:2007/06/02(土) 12:21:58
ていうか、GPLのコンポみたことないけど、具体的にどれよ
43デフォルトの名無しさん:2007/06/02(土) 12:25:53
GPLとかは後々縛られるから、おとなしく車輪の再開発したほうがいいな。
無駄だけど
44デフォルトの名無しさん:2007/06/02(土) 12:43:51
俺も前にMD5を自前で実装した。ライセンスのこと考えるとよくわけわかめで、ライセンスのことで
心配するなら作っちゃおうと。そういう事考えると、.NETのクラスライブラリだけは魅力的に見える。
GPLじゃなく、MPL採用したソースもあるけど、バグ発見して修正するとなると、いちいち公開しなきゃいけないし。
もうね。めんどい。
45デフォルトの名無しさん:2007/06/02(土) 16:36:09
>>42
JVCLがMPLとLGPLのダブルライセンスじゃなかったか?
46デフォルトの名無しさん:2007/06/02(土) 16:42:42
>>45
soudakkeka
47デフォルトの名無しさん:2007/06/02(土) 17:40:20
C++でいうstaticなメンバ変数ってどうやって作るんですか?
メンバ関数ならclassを頭に付ければいいと解ったのですが変数の方が解らないです。
48デフォルトの名無しさん:2007/06/02(土) 18:18:33
>>47
基本的にはできないが、どうしてもやりたければ、
型付き定数でできるはず。
49デフォルトの名無しさん:2007/06/02(土) 18:19:52
ごめん。関数staticと間違えた。

class var でできない?
50デフォルトの名無しさん:2007/06/02(土) 19:31:13
>>47
古いバージョン使ってるなら
type tfoo = class;

implementation

var foo_class_var: integer;

みたいな事をやるしかない。
5147:2007/06/02(土) 20:12:55
解答tks!

D6です。>49の方法はダメですた。
無理そうなので別の方法にします。
52デフォルトの名無しさん:2007/06/02(土) 20:16:54
D6には、class var はないわな
53デフォルトの名無しさん:2007/06/02(土) 22:29:57
delphi2007を使っています。

デバッグ中に「このエラーを無視する」としたところ、
関連するエラーで中断しなくなりました。(当然ですが)

再びこの設定を元に戻すにはどこを戻してやればいいんでしょう?
54デフォルトの名無しさん:2007/06/02(土) 22:31:28
2007ってまだ体験版しかないよね
55デフォルトの名無しさん:2007/06/02(土) 22:41:18
昨日から繋がらないけど閉鎖?
http://www.tolderlund.eu/delphi/
56デフォルトの名無しさん:2007/06/02(土) 22:43:42
つながるじゃん
57デフォルトの名無しさん:2007/06/02(土) 22:45:49
マジで?
58デフォルトの名無しさん:2007/06/02(土) 22:49:27
つながるけど404
59デフォルトの名無しさん:2007/06/03(日) 00:40:17
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の部分でエラー(実行は可能)が出ました。

分かる方居ましたら、よろしくお願いします。
60デフォルトの名無しさん:2007/06/03(日) 01:08:44
とりあえずCallback関数をTForm1のメソッドではなく、只の関数として実装してみては

procedure CallBackPrc(id, Sec: Integer); stdcall;
begin
//処理
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  vbmp3_callback(@CallBackPrc);
  ...
end;
61デフォルトの名無しさん:2007/06/03(日) 02:14:16
>60
やってみましたが、尚エラーです。

ステップ実行してみると、どうやらコールバック関数の処理が終わった瞬間にエラーが出てるようです。
更に、同時にCPUウインドウが。
62デフォルトの名無しさん:2007/06/03(日) 02:20:29
なんてエラー?
63デフォルトの名無しさん:2007/06/03(日) 02:24:37
ていうか、IntToStrでエラー出るってことは、それ以前にスタックかどっか破壊されてるっぽいな
64デフォルトの名無しさん:2007/06/03(日) 02:33:48
プロジェクト が例外により実行を停止しました。
'access violation at 0x1001dde3: write of address 0x00011002'

と出ます。
65デフォルトの名無しさん:2007/06/03(日) 03:38:43
>>64
アドバイス受けるには情報が不足だと思うよ、コードさらしてみ
66デフォルトの名無しさん:2007/06/03(日) 03:49:35
文字列をDelphiのstringでそのまま渡しているせいとか。
67デフォルトの名無しさん:2007/06/03(日) 03:59:07
>>64
ttp://web.archive.org/web/20060521074149/www.angel.ne.jp/~mike/vbmp3/index.html

ようわからんが、ここが参考にならんか?
68デフォルトの名無しさん:2007/06/03(日) 06:15:19
>>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;
69デフォルトの名無しさん:2007/06/03(日) 07:10:05
後ろについてるExternal宣言がなんか変だ。
VBの宣言に詳しくないので正しい関数名がわからんが、こんな感じに書くんじゃなかったっけ?

external 'VBMP3.DLL' name 'vbmp3_callback';
70デフォルトの名無しさん:2007/06/03(日) 08:12:32
試してみた >>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;

これで、動くようだけど?
71デフォルトの名無しさん:2007/06/03(日) 10:42:36
C:\Program Files\CYBERFRONT\Sid Meier's Civilization 4(J)\Warlords(J)\Civ4Warlords.exe
を幅を指定して
C:\Program Files\...\Civ4Warlords.exe
みたいに短くする関数ってありますか?
72デフォルトの名無しさん:2007/06/03(日) 10:46:50
...\ ってどこを指してるの?
73デフォルトの名無しさん:2007/06/03(日) 11:38:24
文字列処理の話です。
例えばこんな感じで200ピクセルに収まるように文字列を適当に短くしたいです。
GetShortPathStrForPrint(Font, 200, 'C:\Program Files\CYBERFRONT\Sid Meier's Civilization 4(J)\Warlords(J)\Civ4Warlords.exe')
==> 'C:\Program Files\...\Civ4Warlords.exe';
74デフォルトの名無しさん:2007/06/03(日) 12:06:32
自分で処理描いても大した手間じゃないよ
75デフォルトの名無しさん:2007/06/03(日) 12:20:34
MinimizeName?
76デフォルトの名無しさん:2007/06/03(日) 15:34:35
MinimizeName ですな
77デフォルトの名無しさん:2007/06/03(日) 16:13:00
>>71
シビライゼーション面白いよな
7859:2007/06/03(日) 16:46:22
解決しました。

>70さんのコードを眺めていて、まさかと思ってVBMP3をVer1.3.1.0に戻すと正常に動作しました。


お騒がせしました。答えてくれた皆さん、ありがとうございました。
79デフォルトの名無しさん:2007/06/03(日) 18:42:04
呼び出し側がメモリブロックを確保し、そのポインタを引数にとるWin32APIの呼び出しで、
動的配列を使って例えば
A: array of Integer;
SetLength(A, 1024);
ように、確保したとき、
引数での指定方法で、
Win32Foo(@A[0])
より
Foo(Pointer(A))
の方がよろしいでしょうか??
メモリブロックのサイズが固定なら前者でもいような気がするのですが、
可変で例えばサイズが0だったりすると、前者の場合、アドレス違反がでますよね??

80デフォルトの名無しさん:2007/06/03(日) 18:43:34
どうでもいいことですが、
>Win32Foo(@A[0])
>より
>Foo(Pointer(A))

Win32Foo(@A[0])
より
Win32Foo(Pointer(A))
です。
81デフォルトの名無しさん:2007/06/03(日) 20:35:15
>>79
違反は出なかったと思うけど。 出るようになったの?
マシン語レベルでは同じだと思うぞ。 CPUView見て。
82デフォルトの名無しさん:2007/06/03(日) 20:36:25
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]にしてもエラー出ないし・・・
83デフォルトの名無しさん:2007/06/04(月) 01:28:37
試してませんでした。すみません。
試したところどっちでも問題はなさそうでした。エラーが出ないだけで、問題あるかもしれませんが。
CPUViewですか?難しそうですね。
84デフォルトの名無しさん:2007/06/04(月) 12:38:17
すいません、今日始めてTurbo Delphiを触っているんですが
BASICやHSPで他のプログラムを起動させるのにはexecを使いますが
Delphiでは、どうやるのでしょう?
85デフォルトの名無しさん:2007/06/04(月) 12:45:31
Delphiは API をそのまま呼べますので APIを使うのが簡単。

uses ShellAPI ; して、 ShellExecute するのが一番簡単です。
86デフォルトの名無しさん:2007/06/04(月) 12:51:45
あっと、 実行ファイルの実行だけなら WinExec が最も簡単です。
これは uses windows してあれば使えます。

 > この関数は、 以前のバージョンのWindowsとの互換性のためだけに提供されています。
 > Win32アプリケーションでは、 CreateProcess関数を使ってください。

と書かれていますが、そんなのはあっちの都合なんで、使える場合は使いましょう。
ただ、巨大なexeを裏で起動なんて場合には、起動出来ない場合もあるようです。
8784:2007/06/04(月) 12:52:48
>>85
なるほど、それで調べてみます。さんくす。
88デフォルトの名無しさん:2007/06/04(月) 21:59:49
Turbo Delphiって無料版Delphi6使ってたらすんなり覚えられる?
89デフォルトの名無しさん:2007/06/04(月) 22:20:41
無料版があるんだから、まずそれで試してみては?
90デフォルトの名無しさん:2007/06/04(月) 22:55:35
コンポインストールが出来ない無料版であるが
そこまでコンポにこだわらない俺は断然turbo派
ただし動作はもっさり
91デフォルトの名無しさん:2007/06/04(月) 23:10:54
ぶっちゃけDelphi6で十分高機能だからturbo使う必要性は全く無い。
ランタイムもいらないしな。
92デフォルトの名無しさん:2007/06/04(月) 23:11:05
ヘルプ腐ってる。コンポの便利さを否定することはDelphiのアドバンテージを
否定することに通じるよ。「覚える」とかいう段階なら、将来がないDelphiなんか
覚えるだけ無駄だよ。
93デフォルトの名無しさん:2007/06/05(火) 03:43:07
上に紹介してあったwikiを読んで
プログラミングなどやったこともないボクが
初めて実行ファイルを作りました

うほ!
いただきまんこ



Delphiって最高ですね^^;
次は痴漢じゃなくて置換だよにトライです
94デフォルトの名無しさん:2007/06/05(火) 08:06:12
なんとか王子「我がDelphiは一生勝ち続けます!」
95デフォルトの名無しさん:2007/06/05(火) 08:35:20
確かにプラス部分とマイナス部分があるな。
漏れはVCLソースとエディタの補助機能とリファクタリング機能目当てでTurbo使ってる。
正直、これらだけで「乗り換えた価値はあった」と思ってる。
ただ、ヘルプは本当に使いにくいので、Del6のヘルプを使ってる
96デフォルトの名無しさん:2007/06/05(火) 08:36:18
買えよ
97デフォルトの名無しさん:2007/06/05(火) 13:48:02
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"が
実行ファイルに含まれていないのが原因だと思うのですが、
コマンドラインからのコンパイルで全てのパッケージを実行ファイルに含める方法があれば教えてください。
9897:2007/06/05(火) 13:49:56
環境を書き忘れていました。

Delphiのバージョンはコンパイル環境・動作確認環境ともにDelphi5、
OSはコンパイル環境がXPPro、動作確認環境が2000sp4です
99デフォルトの名無しさん:2007/06/05(火) 14:00:31
dcc32.exeごと""で括ってるからダメなんじゃないの。
100デフォルトの名無しさん:2007/06/05(火) 14:18:31
LU は実行時パッケージの追加だから実行環境に*.bplがないと実行できないのはあたりまえだろう
Uオプションで dclusr.dcu をのあるディレクトリを追加してやればいいんでねえの?
101デフォルトの名無しさん:2007/06/05(火) 15:31:51
Delphi7でIBXを使っていますが、データセットを閉じたり開いたりすると
DBGridのスクロールバーが表示される時と表示されない時があります。
データが一行しかない時にスクロールバーが現れたり、数行あるときに隠れたりと
不安定です。解決策などありますか?
10297:2007/06/05(火) 16:00:19
>>99
ダブルクォーテーションは実行したコマンドをわかりやすく説明するために付けたもので
実際にはダブルクォーテーションは付けていません。紛らわしい書き方をして申し訳ない。

>>100
dclusr.dcu のあるフォルダを

-U"C:\Program Files\Borland\Delphi5\Lib"

で追加してみましたが結果は同じでした。

>>100さんのを試した後、ヘルプ見ながら色々試してみて自己解決しました。
自作コンポーネントのソースがMyLibという独自のフォルダにあり、
各ソースのdcuもそちらのフォルダにあったため
-U オプションでそのパスを指定すれば意図した動作になりました。

スレ汚し失礼しました。
103デフォルトの名無しさん:2007/06/05(火) 16:05:17
この汚物め!
104デフォルトの名無しさん:2007/06/06(水) 16:17:38
(デルファイ製のソフトではないかもしれませんが)StringGridのセルの中にUpDownみたいな入力ボックスが入っているのを見たんですが、あれをデルファイでやるにはどうすればいいんでしょうか?
105デフォルトの名無しさん:2007/06/06(水) 16:19:39
StringGridのセルの中にUpDownみたいな入力ボックスを実装すればいいよ
106デフォルトの名無しさん:2007/06/06(水) 16:27:50
レスの意味もない
107104:2007/06/06(水) 16:35:03
StringGridのセルを親にしてUpDownをCreateするんでしょうか、ちょっと素人にはわかりません。
108デフォルトの名無しさん:2007/06/06(水) 16:37:03
最初に一個Createしてフォーカスあたってるセルの端にUpDownを移動して云々ってことだろ。
よーするにできません。
109デフォルトの名無しさん:2007/06/06(水) 16:41:08
できるだろw
110デフォルトの名無しさん:2007/06/06(水) 17:29:11
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;

と書いて実行させて、後はなんとかするしかないかもな
111104:2007/06/06(水) 18:10:48
あ、やりたかったのはそれかもしれません!

セルを選択すると、そこに入力欄にUpDownのコントロールが出て数値を増減できるってやつです。
貴重なヒント、どうもありがとうございます。
112105:2007/06/06(水) 18:19:38
a, iitakattanohasorekamosiremasenn!
113デフォルトの名無しさん:2007/06/06(水) 23:43:30
DelphiってDB作る分には極つけのツールだと思うんだけど、
紙媒体での保存のため印刷しようとすると、途端に
糞と化すのは何なんだろう、といつも思う。

そういう用途に使うなと言われればそれまでだけどね。
114デフォルトの名無しさん:2007/06/06(水) 23:47:36
Delphiって帳票出力するコンポーネントついてなかったっけ?
なんとかReportって感じの名前のやつ
そこそこ使えたと思ったんだが・・
115デフォルトの名無しさん:2007/06/06(水) 23:49:18
糞と罵ると
教えてもらえると見た
116デフォルトの名無しさん:2007/06/07(木) 00:38:38
>>DelphiってDB作る分には極つけのツール
今時のデータベースはキャラクタセットにUnicodeを使ってるのが多数だから、
TNT使うなりしないといけん。データベースのキャラクタセットに
Unicodeが使われる前は極めつけのツールだったけど、今じゃむしろ
そういう分野にDelphi使わない方がいいと思ってる。
QuickReportのことか?あれ、Unicodeに対応してるのか??
こういう事で悩むのでお勧めしない。


117デフォルトの名無しさん:2007/06/07(木) 01:36:56
問題を混ぜるな。
QuickReportがうにこーど対応してるかどうかは議論していない。
118デフォルトの名無しさん:2007/06/07(木) 01:56:22
>紙媒体での保存のため印刷しようとすると、途端に
>糞と化すのは何なんだろう、といつも思う。
>問題を混ぜるな。
>QuickReportがうにこーど対応してるかどうかは議論していない。
問題を混ぜるな?おまえはただ「糞」とだけ、書いていったい何が問題なのかすらも
書いてないおまえの頭も「糞」

119デフォルトの名無しさん:2007/06/07(木) 02:09:27
レスを混ぜるなw
120デフォルトの名無しさん:2007/06/07(木) 02:48:05
混ぜるな危険
121デフォルトの名無しさん:2007/06/07(木) 04:11:21
しかしマジで、うにこーどに対応しないと漏れはDelから離脱するとオモ。
122デフォルトの名無しさん:2007/06/07(木) 04:47:31
よくUnicodeUnicodeってカキコを見るけど、これってVCLのこと?
Tnt使ったり、W系API直接呼んだりするのじゃダメなの?
123デフォルトの名無しさん:2007/06/07(木) 06:34:13
データベースで使う、TFieldType型のftMemoやftMftMemoの最大サイズは32kbですか?2Gですか?
124デフォルトの名無しさん:2007/06/07(木) 07:09:01
>>122
今回言ってるのは印刷の事だから、自前で印刷するなら
CreateFontIndirectWしてTextOutWすれば理屈の上では大丈夫なんだけど
プリンタがフォント持ってなかったり、windowsだってフォントによっては
例えば筆文字なんかは持ってないわけで、
実際には、unicodeで印刷なんてDelphiでなくても現状では無理。
125デフォルトの名無しさん:2007/06/07(木) 09:01:57
日本人向けのソフトしか作らない漏れに
うにコードの重要性をおしえてください。
126デフォルトの名無しさん:2007/06/07(木) 09:14:31
Delphi関係ないが、WindowsはUnicodeをUTF-16じゃなくてUTF-32で扱うようにして欲しかったな。
UTF-16だと、16ビットで1文字の時もあれば、32ビットで1文字の時もあったり、処理が面倒…
127デフォルトの名無しさん:2007/06/07(木) 09:22:14
それはやっぱり文字フォントで32bit空間を埋めてしまうわけにいかなかったのだろう
128デフォルトの名無しさん:2007/06/07(木) 13:58:33
>>125
日本人以外にはShift_JISとかEUC-JPを使うメリットがない。

自分が知らないコードから自分の知っているコードに変換する場合、
ユニコードのような大きな文字セットに一旦変換すると解決できることが多い。

XMLでは文字コードを明示的に指定しない限りUTF-8が使われる。
文字コードの自動判定もUnicodeしか対応しないし>XML
129デフォルトの名無しさん:2007/06/07(木) 15:07:39
ファイル周りのユーティリティ作っててA系のAPI使いまくってると取りこぼしが出るんだよな。
XPManifest貼り忘れて古臭いUIだったりというのも合わせて原点対象ではある。
130デフォルトの名無しさん:2007/06/07(木) 15:35:47
>>124
ttp://itpro.nikkeibp.co.jp/article/COLUMN/20061222/257650/
ttp://itpro.nikkeibp.co.jp/article/OPINION/20061211/256530/?ST=win&P=2
>Unicodeでしか扱えない文字が存在するのは,Windows Vistaに始まったわけではない。Windows 98/Windows NT 4.0 SP4は,JIS X 0212(補助漢字)に対応しているが,
>これらの追加された文字は既にUnicodeでしか扱えなかった。
Unicodeでないと日本の工業規格であるJISで定められた文字すら扱うことができません。
Microsoftは当の昔にMicrosoftのShift-JISの実装であるコードページCP932に文字を追加する
ことをやめています。

131デフォルトの名無しさん:2007/06/07(木) 16:26:45
ListView(vsReport)を使おうと思ってるんですが

指定した場所にstring文字を入れる方法と

指定した場所の内容をLavel.Captionに表示したいんですが

すみませんがどう書けば良いか教えてください。
132デフォルトの名無しさん:2007/06/07(木) 16:27:36
プロパティとイベントの項目全部嫁
133デフォルトの名無しさん:2007/06/07(木) 16:29:51
パソコンのキーボードを叩けばいいと思います
書けますから
134デフォルトの名無しさん:2007/06/07(木) 16:31:42
><みんあ酷いヨ
135デフォルトの名無しさん:2007/06/07(木) 16:35:06
みんあ?ダレソレ

みんあ だれっだ だれっだ だれっだ
あれは デビル!
デビルマーン デビールマーン

この中にデビルマンがおる!
136デフォルトの名無しさん:2007/06/07(木) 16:35:54
listview1.items[hoge].subitems[fuga] := 'piyo' ;
label1.caption := listview1.items[hoge].subitems[fuga];
137デフォルトの名無しさん:2007/06/07(木) 16:36:51
Selected
138デフォルトの名無しさん:2007/06/07(木) 16:37:28
あ、指定した場所って選択した場所って事か
139デフォルトの名無しさん:2007/06/07(木) 16:37:33
OnClick
140デフォルトの名無しさん:2007/06/07(木) 16:39:14
>>136
救世主ありがとおおおおおお
141デフォルトの名無しさん:2007/06/07(木) 16:39:55
選択した場所も引っこ抜けるの?
142デフォルトの名無しさん:2007/06/07(木) 16:41:08
>>137見ろぼけ
143デフォルトの名無しさん:2007/06/07(木) 16:42:37
超初心者のスレタイは釣りですかそうですか・・・
144デフォルトの名無しさん:2007/06/07(木) 16:48:19
別にどこもおかしくない
145デフォルトの名無しさん:2007/06/07(木) 16:48:44
教えてもらっといてそりゃねぇんじゃねーか?
146デフォルトの名無しさん:2007/06/07(木) 16:50:52
教えてくれた人にはめちゃ感謝してます

だけど酷い人も居るんですね><
147デフォルトの名無しさん:2007/06/07(木) 16:59:29
まぁこんなもんだ
148デフォルトの名無しさん:2007/06/07(木) 17:04:14
酷いも何も
>>132>>133を見れば解決出来てたんだよ

答えを丸ごと教えてもらって
それで解決した気になるのは笑止だ
そしてそれが例え超初心者であってもな!

復習としてマニュアルから
その関連部分のページを拾い出してみよ
149デフォルトの名無しさん:2007/06/07(木) 17:06:48
>>148
プログラム初めて1日目の私には無理すぎる件><
150デフォルトの名無しさん:2007/06/07(木) 17:12:27
アホが粘着してるだけだから適当にスルーしとけ。
151デフォルトの名無しさん:2007/06/07(木) 17:16:45
プログラミング初日がDelphiでListViewとは世の中も変わったものよ
だからといってBASICなんて習わされた暁にはと思うが

俺的にはC言語でHello World!がオススメだな
Hello World!が終わったらぶっちゃけ卒業でいいよw
その後にDelphiでもやればいい
152デフォルトの名無しさん:2007/06/07(木) 19:03:57
1日っていうのは嘘だな。
153デフォルトの名無しさん:2007/06/07(木) 19:13:26
初日はなぁ・・TMemo貼り付けただけでメモ帳ができちゃった!ってはしゃぐところから始めないと
154デフォルトの名無しさん:2007/06/07(木) 20:08:52
そういやぁ初日は… 何だっけかな? 最近忘れっぽくなった 今日は遅帰り日…
155デフォルトの名無しさん:2007/06/07(木) 21:53:56
delphi2007 for win32 アップデートきた。

何がかわったんだ。
156デフォルトの名無しさん:2007/06/07(木) 22:02:53
自分はC++もDelphiも使っているので、BDS2006使ってますが、
最近、Delphi2007とかC++Builder2007がでる/でたとか聞きます。
これらをまとめたBDS2006の後継となる製品はでますか?
CodeGearからハガキも来ないのでよく分かりません…
157デフォルトの名無しさん:2007/06/07(木) 22:25:56
>>155
[D2007 Update 1 - List of QC reports]
ttp://dn.codegear.com/article/36589
158デフォルトの名無しさん:2007/06/07(木) 22:38:54
>156
でることになっています。とりあえずCodeGearインフォメーションサービスセンターに電凸するとおねぃさんが
やさしく説明してくれるので、バージョンアップの案内とかを送ってもらえばいいんじゃないかな。
159デフォルトの名無しさん:2007/06/07(木) 22:40:33
>155
なんかすげぇサイズなんですが。ZIPのやつ(中身はさらに7zip)でも700MBって。
さすがにダウンロードしただけでお腹一杯。適用はまた明日にしました。
160デフォルトの名無しさん:2007/06/07(木) 22:59:16
全角英数字使うやつは例外なく頭悪いよな
161デフォルトの名無しさん:2007/06/07(木) 23:00:00
>>156
でないんじゃないかなあ。
あくまで憶測だが
162デフォルトの名無しさん:2007/06/08(金) 10:15:44
Delphi7+IBXでDBクライアント作成中なんですが、
Vista対応の為にDelphi2007を検討しています。
Delphi7のソースをそのまま再利用できますでしょうか。
163デフォルトの名無しさん:2007/06/08(金) 10:21:47
すいません、動的生成したコンポーネントにイベントを追加したいのですが、
イベント発生時に渡される引数はどうやって取り出すのでしょうか?

具体的にはTWebbrowserを動的生成してonNewWindow2イベント
を追加したいんですが、NewWindow2イベント発生時に渡されるppdisp,cancelが
取得できなくて困ってます。
164デフォルトの名無しさん:2007/06/08(金) 10:28:41
>>162
DelphiはVBとかと違ってバージョンが上がって互換が壊れた事は殆どない。
ただ、VCLのバージョンで variantの追加とか、 符号付が符号無しになったとか細かい差は当然あるけど
D7からなら変な事してなければそのまま動くと思うよ。

>>163
すみません。 エスパー修行中なんで、言ってる事が判りません。
イベントを追加するのは 単に onNewWindow2 に メソッド名を代入するだけだけど・・・・

あ、
一度、TWebBrowserを貼り付けて、 onNewWindow2 をダブルクリックして
メソッドを自動作成しておいてから、そのメソッドをコピペしてやればどうでしょ? ・・・どうだろ?
165163:2007/06/08(金) 12:04:55
自己解決しました。
というか164さんが言ってるとおり、
単にメソッド名を代入するだけでした。

onNewWindow2とまったく同じ引数を持つ手続きを作って、
TUIWebbrowser(Sender)と指定すれば、Senderのイベント発生時に渡される引数が使えました。
日本語下手ですいません。↑の説明も微妙です。
166デフォルトの名無しさん:2007/06/08(金) 13:14:35
本当に自己解決か?
見てから解決したのを
自己解決と言い張ってるんじゃないの?
167デフォルトの名無しさん:2007/06/08(金) 15:46:20
DBGridを極めようといろいろ情報収集中で、DBGridの中にチェックボックスをいれたいと思ってるんですが

http://forum.nifty.com/fdelphi/samples/00194.htm

このサイトにソースがあったらしいのですが期限切れでみれません(--;
どなたか、この先にどんなコードがあったのか、あるいはやり方を知ってる方、教えてください。
168デフォルトの名無しさん:2007/06/08(金) 16:02:48
169デフォルトの名無しさん:2007/06/08(金) 16:06:47
>>168
ありがとうございます!!!
帰って速攻試します!!
170デフォルトの名無しさん:2007/06/08(金) 16:07:38
掲示板よりサンプル蔵のログ公開して欲しい・・・
171Delフサギコ ◆A6VzDeLphI :2007/06/08(金) 16:14:52
    ∧,,∧
   ミ,,゚Д゚ミζ
    ミ  つ旦
  〜と,,,~),,~) 

漏れ、マニアだから、近年の
Delphiサイトは、ほぼ全部ダウソしてもってるが....

直接連絡呉りゃあ、なんとかしてもいいけど。

Wikiとか、ダウソツールしにくいところは
そういうの無理だから、嫌いなのだが。。。
172デフォルトの名無しさん:2007/06/08(金) 16:16:52
直接連絡するから住所と電話番号を次にください。
 ↓
173デフォルトの名無しさん:2007/06/08(金) 16:21:18
保存したいけどサイトにJavaScriptか何か使ってて「保存できませんでした」って出るのにはメゲる。

そういうサイトに限って内容が濃かったりするし。
174Delフサギコ ◆A6VzDeLphI :2007/06/08(金) 16:31:54
    ∧,,∧
   ミ,,゚Д゚ミ
    ミ,つ旦(ミ
遠慮無くhotmailにメール汁

>>173さん。そーっすねー。
175デフォルトの名無しさん:2007/06/08(金) 16:35:42
ま、Delギコさんがzipにして漏れにくれるんだろうな。
176デフォルトの名無しさん:2007/06/08(金) 19:10:25
Turbo Delphi Explorer update2を使っているんですが
最近なぜか、戻るとやり直しができなくなってしまいます。
こういう現象きいたことありますでしょうか?
177デフォルトの名無しさん:2007/06/08(金) 20:16:45
>>176
保存後の取り消しのオプションを確認
178デフォルトの名無しさん:2007/06/08(金) 20:32:38
>>177 ありがとうございます。チェックをはずしてみたのですが駄目した。
先ほどもなってましてて、ツールバーを一旦全部非表示にしてみたら戻ったのですが、
またなるようだったら再インストールを考えたいと思います。
ありがとうございました。
179デフォルトの名無しさん:2007/06/08(金) 22:24:21
 Windows XP でスラッシュ"/"を組み合わせたショットカットキーを設定しても機能しま
せん。たとえば
mnFindAll.ShortCut := TextToShortCut('Shift+Ctrl+/');
(※mnFindAll はメニュー項目)
とした場合 Win98 ではOKですが XP ではだめです。
 メニュー項目の ShortCut プロパティには Shift+Ctrl+/が設定されますがこのキーを押
しても XP では機能しないのです。なぜでしょうか?
180デフォルトの名無しさん:2007/06/08(金) 22:56:42
>>174
どのメアドに送ればいいのん?
181デフォルトの名無しさん:2007/06/09(土) 00:32:51
ComboBoxってCtl3DをFalseにしても効かないんですか?
182デフォルトの名無しさん:2007/06/09(土) 00:51:34
>>179
Form1.KeyDownでは拾えるだろうからそっちで拾って
mnFindAll.OnClick呼んだら。激しくインチキくさいが。
183デフォルトの名無しさん:2007/06/09(土) 01:55:12
>>179
経験的に、テンキー付のキーボードの場合、
テンキー側の/に効いてしまうみたいです
自分はキーコードを直接指定する方法で回避しましたが
TextToShortCutてのは使ったことがないので、同様に
適用できるかどうかはわかりません
184デフォルトの名無しさん:2007/06/09(土) 10:22:36
便乗して質問!

>>110の方がかいてくれたTUpdownをセルに表示する方法は、TDBGridで実現するときはどうするんですか?
TDBGridにはSelectCellというメソッドはなかったはず。
185デフォルトの名無しさん:2007/06/09(土) 11:09:19
>>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;
186デフォルトの名無しさん:2007/06/09(土) 11:11:35
なお 185 は UpDownを動的作成してるけど、フォームに貼り付けておいた
方がイベントを書いたりするのに短期的には楽。

長期的には再利用がめんどうになるんだけどね
187デフォルトの名無しさん:2007/06/09(土) 11:17:56
うほっ。
ありがとうございます。

今までDBGridに貼り付けたUpDownのTopとLeftの位置をどう設定するかばかり考えていました。
早速教えていただいたとおり試してみようとおもいます。
188デフォルトの名無しさん:2007/06/09(土) 11:29:54
>FUpDown1 := TUpDown.Create(Self);

こいつのFreeはどうするの?
189デフォルトの名無しさん:2007/06/09(土) 11:34:57
Create(Self)だからSelf=Form1が死ぬときに道連れにしてくれる。
フォームデザイナでコンポはるのと動的に生成するので特に区別されない。
190デフォルトの名無しさん:2007/06/09(土) 11:35:56
なるほどー
191デフォルトの名無しさん:2007/06/09(土) 11:39:26
人の質問を読むだけでも勉強になるね。
192デフォルトの名無しさん:2007/06/09(土) 13:26:37
Ownerを呪文かなにかだと思ってた? 呪文の数を減らすように勉強しろよな。
193184:2007/06/09(土) 13:37:01
>>185さんがくれたコードですが、
ChangeComponentは知らん、とはじかれてしまいました。Del5Proです。
ヘルプにも載ってませんでした。

それと、ftIntegerのセルをクリックすると、UpDownは表示されるんですが、次にUpdownをクリックしたらUpdownは消えてしまいます。
どのメソッドでUpDownの処理をすればいいんでしょうか??
194デフォルトの名無しさん:2007/06/09(土) 14:04:49
>>193
ChangeComponent はココからコピペ
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

UpDownの処理は・・・そういう段階ならフォームにUpDownを貼る場合のコードを書いてみます。
しばらくお待ちを
195デフォルトの名無しさん:2007/06/09(土) 14:19:31
>>189
え?それってTUpDownに限って?TRichEditやTFontやTEditとかも
Create(self)した後、必要なくなったら必ずFreeしてたんだけど
196184:2007/06/09(土) 14:29:46
Freeは「もしインスタンスがあれば…」Destroyしてくれるんで、別段影響ないんじゃないスかね?
素人が口はさんですんません。
197デフォルトの名無しさん:2007/06/09(土) 14:39:06
もちろん、その都度Freeする方がベター。
189は言ってみれば安全装置のようなもの。
長時間稼働し続けるアプリなんかでは深刻な影響を出すこともある。
198デフォルトの名無しさん:2007/06/09(土) 14:58:10
>>195
例えばユーザーがセルをクリックする度に
TUpDownをCreateするならFreeしないとメモリリークと呼ばれるバグになるけど
何千回クリックしてもインスタンスの数が1しか生成されないなら
明示的なFreeは不要だしそういうコードは無駄。
199デフォルトの名無しさん:2007/06/09(土) 15:59:20
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;
200デフォルトの名無しさん:2007/06/09(土) 16:00:07
//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;
201デフォルトの名無しさん:2007/06/09(土) 16:05:03
>>185 の SelectCell は、セルの選択前に呼ばれます。
そこでは どのフィールドを変更してるかは判りません。
仕方ないので、OnDrawColumnCell を使う事にしました。
これは表示の都度呼ばれるので、
ここで表示内容が変更されると無限ループ状態になります。


UpDown1の OnClick というのが、なぜが動かない。
で、UpDown1ChangingEx を使うしかないのだけど、これは UpDown1.Position への代入でも呼ばれるので
何かゲートが必要という事で、汚いコードになっています。


という事で思ったより厄介ですね。
202184:2007/06/09(土) 20:10:29
いやぁ、どうも骨おってくれてありがとうございます。
いいものいただきました。
203デフォルトの名無しさん:2007/06/10(日) 10:33:43
JCLのインストール終わって
JVCL3.31入れようとしたら
Choose IDE Targetで
Delphi6.0Proのチェックがグレーになって先に進めません。
どうやったらいいんでしょうか?
204デフォルトの名無しさん:2007/06/10(日) 13:39:56
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行で代入することはできないでしょうか?

よろしくお願い致します。
208デフォルトの名無しさん:2007/06/10(日) 18:35:28
Rect
209デフォルトの名無しさん:2007/06/10(日) 18:37:11
>>207 >>208のいうTypes.Rect関数がTRectをそのまま返すので代入出来る
210デフォルトの名無しさん:2007/06/10(日) 18:45:32
>>208-209
即レスありがとうございました。

Rect:= Rect(0, 0, Image.Width, Image.Height);
で実現する事ができました。

どこかのHPでは4つの引数も不要な関数を見かけたのですが
所在を失念したため、Rect関数を使おうと思います。
211デフォルトの名無しさん:2007/06/10(日) 18:58:46
Rect := Image1.ClientRect;
212デフォルトの名無しさん:2007/06/10(日) 19:07:02
>>211
これです!胸のもやもやが取れました。
本当にありがとうございました。
213デフォルトの名無しさん:2007/06/10(日) 20:32:15
>>206
Thank you!
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に設定されてないとか。
他のコントロールに邪魔されてるとか。

解らないならもう一度ゼロから作り直してみるのもいいかも。


216デフォルトの名無しさん:2007/06/10(日) 23:34:44
>>215
>他のコントロールに邪魔されてるとか。
PanelやCaptionを貼り付けていたので、Panel.OnClickや
Caption.OnClickイベントで解決いたしました。

Frame内のどこかがクリックされた→処理時に、
Caption等にも邪魔されることが理解できました。

本当に勉強になりました。ありがとうございました。
217216:2007/06/10(日) 23:39:37
一部訂正。

OnClick→OnMouseDown
218デフォルトの名無しさん:2007/06/11(月) 00:15:33
くだらんことですまん。
TurboとDelphi 2007の違いって何?
なんか久々にコートギア見たらシリーズ分かれているのですが?
219デフォルトの名無しさん:2007/06/11(月) 07:55:45
ShellListViewでファイルを右クリしたときに出るコンテキストメニューを
普通のListView, ListBoxでファイルのパスを格納して右クリしても出したいんですが
どうやればいいですか?
220デフォルトの名無しさん:2007/06/11(月) 09:38:19
>>171
niftyに許可頼んでログうpしてくれ
221デフォルトの名無しさん:2007/06/11(月) 21:26:46
>>219
JCLのJclShell.pasにあるDisplayContextMenu関数とかどうだろう?
222ななしへたぐらま ◆XcB18Bks.Y :2007/06/11(月) 22:19:47
>>195
TUpDown,TRichEdit,TEdit → ○
TFont → ×

TUpDown,TRichEdit,TEditはコンポーネント(以下コンポ,TComponentのナカーマ)なのでOK,
TFontは違うので駄目です.

>>198
TUpDown.Create(self)ならそういう場合でもメモリリークにはならないと思います.
ただしTUpDownはWindowsのコントロールですから
Windowsのリソースを大量に浪費することになってしまいますね.
(Win9x系の環境だとアプリはOSの動作がおかしくなるかもしれません)
223デフォルトの名無しさん:2007/06/12(火) 00:39:36
ひとつの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としてみたけど、ならぶ順はバラバラ…

こういうときはどうすればいいんでしょうか?
224デフォルトの名無しさん:2007/06/12(火) 00:45:09
Topプロパティをいじればいい。

最初の例で言えば
Panel3.Top := 0;
225デフォルトの名無しさん:2007/06/12(火) 02:52:30
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以外にすると、一致するようです。
なぜこのような結果になるのでしょうか。
226225:2007/06/12(火) 02:56:55
> 数値を2.8以外にすると、一致するようです。

これは余計でした。2.7等でも同じです。
単に、小数点以下第一位までの小数かチェックするための判定です。
227デフォルトの名無しさん:2007/06/12(火) 03:13:20
>>225
>2.8/0.1=28 となり
実は、浮動小数点型だと、コンピュータの内部では2.8も0.1も正確に表せないため誤差が発生する
だから、2.8/0.1=28 とはならない

>単に、小数点以下第一位までの小数かチェックするための判定です。
有効桁数どのくらいかわからんけど、こんな感じかな?
if Frac( x * 10) > 0.00001 then
228225:2007/06/12(火) 03:31:47
うーん、やはりそういうもんですか。

ただ、

trunc(d/0.1)<>(d/0.1)

の部分を

trunc(d*10)<>(d*10)

にすると、正常に判定されるんですよね。
何が違うのか、よくわからないものですね・・。
229デフォルトの名無しさん:2007/06/12(火) 06:15:42
>>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で計算して丸めたら?
230デフォルトの名無しさん:2007/06/12(火) 06:52:12
つか少数第四位以下の精度でよけりゃCurrency使えば解決じゃん
231デフォルトの名無しさん:2007/06/12(火) 09:03:28
ravereport使用法のチュートリアル的なページってないでしょうか?
最近delphiを使い始めたんですが、ググってもRavereport関連の
情報がほとんど見つけられません。
英文マニュアルを読むか、適当に触りながら習得していくしかない
んでしょうか?
232デフォルトの名無しさん:2007/06/12(火) 09:08:23
>>224
ありがとうございます。
Topの存在を忘れてた…
233225:2007/06/12(火) 10:23:44
>>229
なるほど、勉強になります。
どうもです。
234デフォルトの名無しさん:2007/06/12(火) 11:46:56
>>231
みんなもう印刷は自分でやってるんじゃないかな?
俺もデータベースアプリなら、簡単なマクロ作ってやってるよ。
とういうの使うの便利そうでめんどくさいもの。
235デフォルトの名無しさん:2007/06/12(火) 14:53:53
>>229
> Delphiは計算は常にExtendedでする
Set8087CW手続きとかSetPrecisionMode関数とか使って
FPUの精度を変えればいいんじゃないの。

>>225
下の「ulp と機械イプシロン」の説明もどうぞ。

http://rryu.sakura.ne.jp/compfund/backnumber/compfund059.txt
236デフォルトの名無しさん:2007/06/12(火) 17:37:26
プログラムにアドイン機能を追加したい場合、
LoadPackage でも LoadLibrary でも手間は同じでしょうか。
237デフォルトの名無しさん:2007/06/12(火) 17:39:07
LoadPackage だとDelphiでしかアドインが作れなくなるから
LoadLibrary を使うべきだろうな
238デフォルトの名無しさん:2007/06/12(火) 17:44:37
オープンソフトとかじゃないので delphi オンリーでいいんですが、
手続きの手間とかを考えたとき、パッケージのほうが簡単にできるとか
そんなことないですか。
239デフォルトの名無しさん:2007/06/12(火) 22:35:37
Delphi6の外部ツールでHTML HELP形式のMSDNでWin32APIを検索したいんだけど
良さげなツールないですか?
240デフォルトの名無しさん:2007/06/12(火) 22:55:08
難しい日本語だな・・・
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を指定ディレクトリから読み出すのに対応していない(一応、動的呼び出しはしているようです)
等の不満があります。
242241:2007/06/13(水) 03:43:12
ソースが公開されていて、カスタマイズできるものがあればなあ・・・という感じです。

>>241がオープンソースだったらなあ・・・
243241:2007/06/13(水) 03:49:20
ソース発見ヽ( ´ー`)ノワーイ

このツール、JEDIに寄与されてました。

Project JEDI - Converting APIs
http://www.delphi-jedi.org/api-howto.html

ここの下の「Project JEDI Header Converter utility,」からソースがダウンロードできます。
MPLなのでいじってもよいみたいです。
244デフォルトの名無しさん:2007/06/13(水) 05:01:53
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で取得するにはどうやりますか?
248デフォルトの名無しさん:2007/06/13(水) 10:18:11
>>246
poDisablePrintToFile を指定してユーザがチェックを選ぶと
あとは勝手に保存されるのが 普通は "プリンタ出力のファイルに保存" の機能だと思うが?
つまりプログラム側では何もしなくていいと思うのだが

独自の保存形式なら、そもそもTPrinterを選ぶのが間違いでは?
249246:2007/06/13(水) 10:46:59
>248
プログラム側で自動的にファイル名を生成し保存していく処理を作りたいんです
(具体的にはPostScriptファイルの保存)
TPrinterの中ではDOCINFOのサイズとタイトルしか入れてないんです・・
250デフォルトの名無しさん:2007/06/13(水) 11:50:14
Printer.BeginDoc の代わりに
SetAbortProc
StartDoc
StartPage
を自前でやりたいという事? 
でも、lpszOutput に何か指定しても意味なかったような・・・・
251246:2007/06/13(水) 11:57:12
>>250
その通りです
もっと絞るとStartDocに渡すDocInfoにlpszOutputを指定したいだけです
lpszOutputに指定したファイルパスにプリンタドライバが出力するコードを保存してくれると思っているですがそもそも間違っているんでしょうか?
252デフォルトの名無しさん:2007/06/13(水) 12:05:50
>>247
このサンプルでできるかな?
http://delphi.about.com/cs/adptips2001/a/bltip1001_3.htm
253デフォルトの名無しさん:2007/06/13(水) 13:24:49
>>251
ああ、では Printerを使わないようにしないとダメだね
BeginDocだけを自前でやるのは出来ない。
privateメンバのCheckPrintingでBeginされたかどうか見てるからね

だから Printers.pas をプロジェクトにコピーしてきて、それだけ書き換えるしかないと思うよ。
254246:2007/06/13(水) 13:37:12
>>253
やっぱりダメですか・・・

Printers.pasの該当箇所のみ修正してコピー
プロジェクトに追加し再コンパイルすることで本来のVCLのTPrinterより
優先して使用されると理解していいのでしょうか?
255デフォルトの名無しさん:2007/06/13(水) 16:45:04
RichEditのCHARFORMAT2を使って、TRichEditのFontの操作をしたいと思っているのですがわからない事があるので教えて下さい。
TFontDialogから返ってきた値(FontName、Style、Size)をどうやって渡せばいいのでしょうか?
RichEdit.pasを見ても定義されてる型や変数名がいまいちピンとこなくて途方に暮れています。
環境はDel6perです。
256デフォルトの名無しさん:2007/06/13(水) 16:59:07
RichEdit1.Font.Assign(FontDialog1.Font);
257デフォルトの名無しさん:2007/06/13(水) 18:25:32
>>243
これ、ダメでした。
正しく、内包のサンプルヘッダーすら、まともにコンバートできないわ・・・

今デバッグ中。
258255: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を使っています。

別アプリにフォーカスを当てたいのですが、どうしたら良いのでしょうか?
261デフォルトの名無しさん:2007/06/13(水) 19:50:05
SetForegroundWindow FindWindow
262デフォルトの名無しさん:2007/06/13(水) 20:31:39
263デフォルトの名無しさん:2007/06/13(水) 20:40:47
>>259
Int64で代用しました。

ところで、C言語の可変長引数の関数の定義は、Delphiには変換できないのでしょうか?
264デフォルトの名無しさん:2007/06/13(水) 20:48:48
>>263
varargsでできない?
265デフォルトの名無しさん:2007/06/13(水) 20:51:06
とりあえず、
szFaceNameに、Font.Name
bPitchAndFamilyに、Font.Pitch
bCharSetにFont.Charset
yHeightにFont.Sizeから、twip 単位って奴に変換してだな。
後は、Font.Stylesに下線とか取り消し線が含まれてたら適宜設定。
これくらいでいいんじゃ?
266255:2007/06/13(水) 20:56:20
>>262,265
これで解決できそうです。
どうもありがとうございました。
267デフォルトの名無しさん:2007/06/13(水) 20:57:30
>>264
できそうな感じです。
調べてみます。

ヘルプに全然説明がないのがいやん。
268デフォルトの名無しさん:2007/06/14(木) 01:44:36
>>241 これはどういうものなんでしょうか?
269デフォルトの名無しさん:2007/06/14(木) 03:03:23
>>268
1行目くらい読んでやれよ。
270デフォルトの名無しさん:2007/06/14(木) 06:24:44
>>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することは
できないのでしょうか?
274デフォルトの名無しさん:2007/06/14(木) 22:03:13
せめて何のエラーが出るのかを書く必要があることくらい分かるようになろうよ・・・
275デフォルトの名無しさん:2007/06/14(木) 22:57:32
Delphiには1文字4バイトのUCS4Stringってのがあるようですが、
これはどう使うんですか?Stringと同じ感覚では使えないですか?
276デフォルトの名無しさん:2007/06/15(金) 05:29:10
>>272
DelphiではCの可変長引数相当はアセンブラ関数でも使わないと書けない
これから設計するのなら、
・同じ型ならオープン配列パラメータ
・任意の型なら型可変オープン配列パラメータ 

としてもらう方がいいのでは? どうしても可変長引数としたいなら BCBでこれらに
変換する部分を書いてリンクするのが簡単だと思う。
277デフォルトの名無しさん:2007/06/15(金) 08:55:34
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
>>276
Delphi同士ならオープン配列でよいのですが
既存のC言語のDLLをなるたけ元変更なしで使いたいのです・・・

>>277
Torry's Delphi Pages
http://www.swissdelphicenter.ch/torry/showcode.php?id=2114

こちらにもありましたが、固定引数のアドレスから得る方法はわかりました。

しかし、やっぱり、そういう風に引数の数を明示するしかないですよね。
呼び出し側を変えないと無理ですよね

微妙に、あきらめムード orz
279デフォルトの名無しさん:2007/06/15(金) 11:01:28
TStringListの各行(Index?)にaddObjectで
TListとかを設定したとします。
その後、Assignで別のTStringListを代入した場合
Objectも入れ替わると思うのですが、そのとき、
最初に設定されていたTListは自動的に開放されるのでしょうか?
自分で開放してやる必要がありますか?
280デフォルトの名無しさん:2007/06/15(金) 11:54:11
>>279
自分で開放してやる必要がある。
281デフォルトの名無しさん:2007/06/15(金) 14:31:43
自動で破棄するのはContnrsのOwnsObjectプロパティのあるコンテナクラスだけだな。
282デフォルトの名無しさん:2007/06/15(金) 18:11:35
ソースがSJISの場合
w: widestring;
w := '漢字' + w;
ってやったとき + wは一時的にSJISに変換されちゃうの?
283デフォルトの名無しさん:2007/06/15(金) 18:40:15
>>282
されないよ
284デフォルトの名無しさん:2007/06/15(金) 18:46:41
>>278
どっちにしろ引数の数が判らないとアクセス出来ないさ。
数を渡すとか、最後をNULL で渡すとか、
もしCのprintfスタイルで渡したいのなら
Cでvsprintfのコードをコピペして来て、GCCでコンパイルしてobjをリンクする事になるだろう
ただ浮動小数点ライブラリを含むと、リンクする為にコピペが大変だけどね
285デフォルトの名無しさん:2007/06/15(金) 19:18:03
左クリックをした時と
右クリックをした時で
処理を変えたいのですが、
どのように書けばよいのでしょうか。
(TShiftStateの使い方がヘルプを読んでもわからないので...)
よろしくお願いします。
286278:2007/06/15(金) 20:44:38
元DLLのソースを見たところ、
幸いにして、一か所でしか使われていなく、可変長ではなく固定長として使っているようなので、
固定長になるようにヘッダーの書き換えで対処したいと思います。

たぶん、本当に可変長に使っていたら、呼び出し元を、書き換えないといけないところでした。

つきあってくださって、ありがとさんでした。
287デフォルトの名無しさん:2007/06/15(金) 22:28:58
if n and KUSONAGAI_TEISUU = KUSONAGAI_TEISUU then
をif flagon(n, KUSONAGAI_TEISUU) thenってかける標準関数無い?
288デフォルトの名無しさん:2007/06/15(金) 22:31:22
それ if n then でいいじゃん
289デフォルトの名無しさん:2007/06/15(金) 23:06:57
ビット演算じゃろ
if (n xor KUSONAGAI_TEISUU)=0 とでもしとけ
290デフォルトの名無しさん:2007/06/15(金) 23:07:33
if n and KUSONAGAI_TEISUU <> 0 then
291デフォルトの名無しさん:2007/06/15(金) 23:12:19
標準関数ではないんじゃないか?
>>289でいいと思うが
292デフォルトの名無しさん:2007/06/16(土) 09:02:30
>>285
OnMouaeDownの引数TMouseButtonのことか?
293デフォルトの名無しさん:2007/06/16(土) 11:58:27
いままでデータベースに BDE + Paradox 使ってたのですが、
いよいよVistaで動かなくなってしまったので
DBISAMに乗り換えようと思うのですが、
データベースを作り直すのが大変です。
パラドックスのデータベースから、DBISAMのデータベースを作るソフトってないでしょうか。
294デフォルトの名無しさん:2007/06/16(土) 14:19:24
295デフォルトの名無しさん:2007/06/16(土) 16:01:24
>>294
これはVistaでパラドックスを動かすやり方になるのでしょうか?
解読に時間がかかりそうなのでひとまずお礼まで
296デフォルトの名無しさん:2007/06/16(土) 16:09:22
>Paradox 形式のテーブルを利用する目的で、BDE を使用されているとのこ
>とですが、BDE については開発を終了させていただいました。恐れ入りま
>すが、InterBase や MSDE などへの移行をお勧めいたします。

えー、もうParadoxやBDEダメなんだ…
せっかく覚えたのに…
297デフォルトの名無しさん:2007/06/16(土) 17:40:38
まあ、
298デフォルトの名無しさん:2007/06/16(土) 17:42:48
まあ、BDEは配布は大変だし、
パラドックスはしょっちゅうこわれるし、lckファイルはなんだか怪しい動きをするしで、
あまりよいツールだとはいいがたいから、開発終了したのかも、

しかし、折角覚えるほどパラドックスってなにか深い設定でもあったっけ?
299デフォルトの名無しさん:2007/06/16(土) 18:24:12
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
だと文字が表示されないんです。
無理なのかしら?(´・ω・`)
302デフォルトの名無しさん:2007/06/16(土) 19:12:51
memo1.Lines.Add(Edit1.Text);
じゃだめ?
303デフォルトの名無しさん:2007/06/16(土) 19:14:08
>>301
while Memo1.Lines.Count<5 do Memo1.Lines.Add('');
memo1.Lines.Add( Edit1.Text );

ではダメ?
304デフォルトの名無しさん:2007/06/16(土) 19:31:58
>>302
指定行に挿入したいのです

>>303
近いんですが、Edit1のonchangeイベントでTmemoに書き込むような感じなのです(´・ω・`)
305デフォルトの名無しさん:2007/06/16(土) 19:52:09
行の挿入は
Memo1.Lines.Insert(5, Edit1.Text);

ただし既に5-1行が存在していないとエラーになるから
>while Memo1.Lines.Count<5 do Memo1.Lines.Add('');
のように空行を先に作っておく必要がある。
306デフォルトの名無しさん:2007/06/16(土) 19:53:30
じゃあ
while Memo1.Lines.Count<5 do Memo1.Lines.Add('');
memo1.Lines[5] := Edit1.Text
307デフォルトの名無しさん:2007/06/16(土) 19:57:01
lines.CommaText := 'C:\Document and Settings';
でlines.Count = 3になっちゃうんだけどスペースでばらさないようにするのはどうやるの?
308デフォルトの名無しさん:2007/06/16(土) 19:57:23
6
309306:2007/06/16(土) 19:59:33
だめだ。かぶっていけない。 まかせたぞ
310307:2007/06/16(土) 20:02:09
単純に""で囲むというの以外でお願いします。
311デフォルトの名無しさん:2007/06/16(土) 20:12:15
>>302
>>303
>>305
>>306

>>306で何とかいけそうです(´・ω・`)
挿入と言う表現が間違いでした。
上書きだった…orz
312デフォルトの名無しさん:2007/06/16(土) 20:12:15
lines.Text := 'C:\Document and Settings';
がダメなんだったら

var p: PChar;
begin
p:=PChar('C:\Document and Settings');
Memo1.Lines.Clear;
While p^<>#0 do Memo1.Lines.Add( GetCSVfield(p) );


ここから
http://delwiki.info/?%A5%B3%A1%BC%A5%C9%C1%D2%B8%CB%2F%BF%F4%C3%CD%A4%E4CSV%A4%CE%BC%E8%A4%EA%BD%D0%A4%B7
GetCSVfield 
GetNextStr
をコピペしておいてね
313デフォルトの名無しさん:2007/06/16(土) 20:18:35
lines.Add('C:\Document and Settings');
314デフォルトの名無しさん:2007/06/17(日) 11:13:15
関数の中で関数を抜けるにはどうしたらいいのでしょうか?
breakでも抜けられず、今はifで最後の所まで行ってしまいます。
315デフォルトの名無しさん:2007/06/17(日) 11:28:47
exit
316デフォルトの名無しさん:2007/06/17(日) 23:26:44
引数違いのコンストラクタを複数作ろうと思っているのですが、
あるコンストラクタの中から別のコンストラクタ読んだらまずいでしょうか?
表面的には問題なく動くのですが。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;
317デフォルトの名無しさん:2007/06/17(日) 23:30:13
Create(A: Integer); のなかの
の実行部分を普通のメソッドにして両方から呼べばいいじゃないの
318デフォルトの名無しさん:2007/06/17(日) 23:45:06
>>317
316です。もちろん、そうすれば、問題ないんですけど、コンストラクタ内でコンストラクタ呼んで問題ない
ならそうしちゃいたいと思いまして。

319デフォルトの名無しさん:2007/06/17(日) 23:50:03
問題ない。
320デフォルトの名無しさん:2007/06/18(月) 00:03:56
知ってるとは思うけど、その例なら一行にまとまるな。
  constructor Create(A: Integer=3);
321デフォルトの名無しさん:2007/06/18(月) 02:21:46
>>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)
323322:2007/06/18(月) 06:12:38
DirectX9 では DirectInputのバージョンは8でした。。。

DIRECTINPUT_VERSIONのかわりに$0700を試してみたら、
DirectInputオブジェクトの生成ができました。

DI7でコーディングは進めてみますが、
当方の環境はDX9なので、DI8が使えないのは釈然としません。

DirectInput8をなんとか使いたいです。
324デフォルトの名無しさん:2007/06/18(月) 06:14:01
>>322
DirectInput8Createでは駄目かな?
325322: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 を使えばいいか教えていただけるとありがたいです。よろしくお願いします。
327デフォルトの名無しさん:2007/06/18(月) 11:58:21
>>326
CreatePipe して TStartupInfo  を用意して CreateProcess でコンソール取り込み

kill相当は判らん。 窓を持ってるならWM_QUIT かな
あとはTerminateProcessくらいしか知らない
328デフォルトの名無しさん:2007/06/18(月) 22:04:49
329デフォルトの名無しさん:2007/06/18(月) 22:26:45
netstat -e相当のデータなら、
直接iphelperAPIで取ってもいいんじゃない。
330デフォルトの名無しさん:2007/06/18(月) 22:56:26
>>316-321
constructor は、普通に関数として呼んだ場合は、普通に関数として呼ばれます。
インスタンスは生成されません。

つーか、ヘルプに書いてある
constructor で検索しる

> クラス参照ではなくオブジェクト参照によってコンストラクタが呼び出された場合は,
> オブジェクトは作成されません。この場合に行われることは,指定されたオブジェクトの
> 操作であり,コンストラクタの実装部分で指定された文だけが実行され,
> そのオブジェクトへの参照が返されます。一般に,コンストラクタをオブジェクト参照で
> 呼び出すのは,予約語 inherited を使って親コンストラクタを実行する場合だけです。
331デフォルトの名無しさん:2007/06/18(月) 22:58:20
>>322
SDKのヘルプよめw
332326:2007/06/19(火) 07:43:22
皆様どうもありがとうございます。どうやらAPIを叩かないといけないみたいですね。
手元の古いAPI本には載ってない関数もあるみたいで…。
333デフォルトの名無しさん:2007/06/19(火) 07:53:23
アホなやり方

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)
でできるはず
334ななしへたぐらま ◆XcB18Bks.Y :2007/06/19(火) 16:07:12
Turbo Delphi 2006を導入するに当たって
.net Framework 1.1のランタイムをインストールしようとすると

 『Microsoft .NET Framework セットアップ
  Windows インストーラの初期化中にエラーが発生しました。セットアップを終了します。』

というダイアログが出てうまくいきません.
その他諸々パックで失敗したのでダウンロードに失敗したのかと思いましたが
.net Framework 1.1のランタイムを単独で落としたものでも同じ結果に….
どなたか救いの手を…


#ちなみに自宅の環境に入れようとしたときはうまくいきました.
335ななしへたぐらま ◆XcB18Bks.Y :2007/06/19(火) 16:10:05
すいません,自己解決してしまいました.
.net Framework SDKのインストーラーを立ち上げたままにしていたのを終わらせてからやり直したら進みました.
スレ汚し,失礼しました.
336デフォルトの名無しさん:2007/06/19(火) 19:26:47
>WinExec(bat, SW_HIDE); Sleep(3000);

うーん…
337Delフサギコ ◆A6VzDeLphI :2007/06/19(火) 23:08:56
>>326
http://delfusa.main.jp/ExeControl/20060702181611/index.html

          ____________
         /Kill相当なら、
    \    |  これつかえゴルァ
     \ ,、,、`-l/―――――――
      _ミ゚iコ゚n
    - - `'ミ  ミ ト - - -
       '-^u`~ オ
    /  / ‖:  ォ\
      /  |: :  ォ \
        || :  ォ
         | .:
338デフォルトの名無しさん:2007/06/20(水) 09:21:17
Delphi2006ENTのTSQLConnectionで
ORACLE8に接続しようとしたときに
「oci.dllが起動できません。」と表示されるのですが
何が悪いのでしょうか。
339デフォルトの名無しさん:2007/06/20(水) 11:55:43
OCI.DLLが無い。
340デフォルトの名無しさん:2007/06/20(水) 11:57:28
スマソ。
BDS2006ってOracle8をサポートしていなかったんだな。
dbxora30.dll じゃダメらしい。
341デフォルトの名無しさん:2007/06/20(水) 12:00:51
アプリが常駐している状態でCtrl+Alt+Gとかを検出するのってどうやるんですか。
342デフォルトの名無しさん:2007/06/20(水) 12:04:44
フック
343デフォルトの名無しさん:2007/06/20(水) 12:08:57
RegisterHotKey で グローバルホットキー みたいなのをやりたいの?
344デフォルトの名無しさん:2007/06/20(水) 20:35:33
命令をn秒待たせる(停止させる)命令はdelphiには無いの?
ミリ秒もあるとうれしいんだけど・・・
345デフォルトの名無しさん:2007/06/20(水) 20:41:15
Sleep
346デフォルトの名無しさん:2007/06/20(水) 20:43:05
>>344
一応SleepというWindows APIがあるけど、
これはスレッドごと止めてしまうからねぇ…
347デフォルトの名無しさん:2007/06/20(水) 20:53:05
processmessages回せ
348デフォルトの名無しさん:2007/06/20(水) 21:35:53
待たせてどうすんだ?
349デフォルトの名無しさん:2007/06/20(水) 22:06:30
多分、HSPかなにかやっててDelphiに流れてきたけどWait命令に相当するものが見つからん、ということじゃまいか。
350デフォルトの名無しさん:2007/06/20(水) 22:35:22
HSP…そうですか。では
351デフォルトの名無しさん:2007/06/21(木) 03:40:09
Form1からForm2を呼び出すのってどうしたらいいんですかね・・・
いろいろと探してはみましたけど意外と載ってないもんで
352デフォルトの名無しさん:2007/06/21(木) 03:54:31
Form2.Visible := True;
353デフォルトの名無しさん:2007/06/21(木) 05:14:02
Unit1でuses Unit2;してForm2.Show; or Form2.ShowModal;
354デフォルトの名無しさん:2007/06/21(木) 11:36:13
ほんとくだらねー質問なんだけど
.pas, .dprに続く第三のDelphi/Pascalの拡張子って何かある?.incは除いて。
Explorerからダブルクリックすると勝手にmakeしてスクリプト的に実行できるように
その拡張子に関連付けられたら便利かなと。
355デフォルトの名無しさん:2007/06/21(木) 11:48:50
.dcu
356デフォルトの名無しさん:2007/06/21(木) 11:49:14
文字列中の半角カナの小さい文字"ッャュョ"等を大文字に直す関数ってありますか?
無ければどのように作ればいいでしょうか。
357デフォルトの名無しさん:2007/06/21(木) 12:01:27
ヵッォぉゃっょ
358デフォルトの名無しさん:2007/06/21(木) 12:23:47
>>356
AnsiReplaceStr('おちんこ', 'ち', 'ま');
359ななしへたぐらま ◆XcB18Bks.Y :2007/06/21(木) 12:25:34
>>356
こんなページを見つけました.
http://www.din.or.jp/~egawa-n/delphi/tips/convert_mbcs.html
とりあえずここにあるソースコードをコピペすればよろしいのではないでしょうか.
360デフォルトの名無しさん:2007/06/21(木) 13:36:00
100万行ぐらいのCSVを
LoadFromFileでTStringListに読み込もうとしたら
System.OutOfMemoryException(メモリ不足)
が起こって読み込めませんでした。

一気にまるごと読み込むんじゃなくて
1行ごとに読み込んでいったりする方法はないのでしょうか。
361デフォルトの名無しさん:2007/06/21(木) 13:51:16
var f: test; s: string;
assignfile(f, 'data.csv');
reset(f);
while not eof(f) do readln(f, s);
closefile(f);
362278:2007/06/21(木) 18:33:03
一か所でしか使われていないと思っていたのに、他の場所で使われていました orz >可変長引数の呼び出し
実行してみて気づいた・・・

結局、DLL側を書きかえ必須か・・・

あまりやりたくなかったですが、>>277の方法で、
DLLの呼び出し側のソースを改変して対処したいと思います。
363278:2007/06/21(木) 19:36:07
>>362のようにやる前に、DLL側のソースを見たところ、
結局のところ、printfのような出力関数を、
可変個引数で、外部にまるなげしているだけのようでした orz

じゃあ、あらかじめ、_snwprintf で、1つの文字列に直してから、
固定引数で、渡すようにすればいいんじゃ?と思い、
DLL側を直したところ、なんとか、エラーもなく、無事動いているようです。

最初から、可変個引数する意味ねーーー!!
なんで、こんな実装になっとんのだ
364デフォルトの名無しさん:2007/06/21(木) 23:47:06
正規表現のことなので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等
いろいろ変えてみましたが、全くだめなのでどなたか教えてください。
365デフォルトの名無しさん:2007/06/22(金) 00:09:34
BRegExp.Match('abcdef',tempStringList.text);
366Delフサギコ ◆A6VzDeLphI :2007/06/22(金) 00:23:16
>>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);


367デフォルトの名無しさん:2007/06/22(金) 08:47:19
>279
http://www.skinhat.com/
ここにある?
368デフォルトの名無しさん:2007/06/22(金) 09:36:58
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;
みたいな関数って標準でないの?
369デフォルトの名無しさん:2007/06/22(金) 09:44:39
>>368
あるよ PChar() っていう 型変換関数

s := PChar(s);

で同じ事だよ
370デフォルトの名無しさん:2007/06/22(金) 09:48:57
それだと無駄なコピーが発生するやん
371デフォルトの名無しさん:2007/06/22(金) 10:07:36
ワガママな奴だな。
Setlength( s , StrLen(Pchar(s)) ;
くらいで我慢してくれよ
372デフォルトの名無しさん:2007/06/22(金) 11:58:31
FindWindowExでコンボボックス(ドロップダウンリスト)を見つけようとしてるのですが見つかりません。
FindWindowEx(hWindow, 0, 'TComboBox', nil);
だと見つかるのですが
FindWindowEx(hWindow, 0, 'TComboBox', ドロップダウンリストの選択中の文字);
だとだめです。
何個かドロップダウンリストがあるのでFindWindowExを使って探す方法があれば教えてください
373デフォルトの名無しさん:2007/06/22(金) 12:13:31
FindWindowEx(hWindow, 0, 'TComboBox', nil); でもらったハンドルで
GetWindowText しては

FindWindowEx(hWindow,そのハンドル0, 'TComboBox', nil); と検索していったらどう?
374デフォルトの名無しさん:2007/06/22(金) 13:06:58
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 が書き換えてしまえて、問題ありかな?と思うのですが、
これよりよい方法があれば、知恵をお貸しください。
376デフォルトの名無しさん:2007/06/22(金) 21:05:03
クラスを作って、関数ポインタ形のプロパティにするとか
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より例外を出す関数を定義しておいてそれを初期値にした方がいいよ
377デフォルトの名無しさん:2007/06/23(土) 05:58:31
D6での質問です

TListView を vsIcon で表示しているのですが、
項目をD&Dで移動させるとき、
デスクトップで見るようなインサートマーク(?)を表示する機能、
またはAPIはあるでしょうか?
378デフォルトの名無しさん:2007/06/23(土) 06:03:37
ないです。
379デフォルトの名無しさん:2007/06/23(土) 19:31:20
ActiveXな正規表現クラスってどうやって取り込んだらいいんですか?
Delphi7のActiveXの取り込みでそれらしい物が見つかりません。
以前Delphi6で取り込んだときはあったはずなんですが。
380デフォルトの名無しさん:2007/06/23(土) 19:34:59
[プロジェクト|タイプライブラリの取り込み] Microsoft VBScript Regular Expressions 5.5
でいけました。
381デフォルトの名無しさん:2007/06/24(日) 16:26:11
var start: TDateTime;

start := Now;

...

ShowMessage('かかった時間:%s', [FormatTimeSpan(Now - start)]); // '00:03:12.54' みたいな表示

といった便利関数はないですか。
382デフォルトの名無しさん:2007/06/24(日) 16:45:01
FormatDateTime辺りを使って自分で作れ
383デフォルトの名無しさん:2007/06/24(日) 18:44:59
単語の先頭文字を大文字に変換する方法教えてください

VBならProperCase関数?で出来るらしいのですが
Delphiでやる方法は調べても見つかりませんでした
よろしくお願いします
384デフォルトの名無しさん:2007/06/24(日) 19:18:53
まず全部小文字に変換した後、先頭文字だけを大文字にする。
昔作ったことあるけど、結構簡単に作れたと記憶している
385デフォルトの名無しさん:2007/06/24(日) 19:23:23
gglks "ProperCase Delphi"
386デフォルトの名無しさん:2007/06/24(日) 21:34:18
一単語だけ入ってるString変数がstrWordがあったとしたら
strWord[1] := UpCase(strWord[1]);
387344:2007/06/24(日) 23:09:24
遅レスすまそ

サーバーに連続してアクセスするのに
1秒の間隔もなしにアクセスしたらまずいかなーと思ったんですよ。
サーバーってそういうのはOKなものなんですかねぇ?
388デフォルトの名無しさん:2007/06/24(日) 23:16:53
>387
Sleep(API)とかTTimer(コンポーネント)とか。
本来はあんまり気にする必要がない(シーケンシャルにリクエストを出して構わない)はずだけど、
そこは実装依存(要はタコなサーバもありうる)なので、問題があるようならディレイをいれることで
解決する場合もある。
389デフォルトの名無しさん:2007/06/25(月) 02:06:12
集合型の変数AとBの排他的論理和を求めるにはどうしたらよいですか?
390デフォルトの名無しさん:2007/06/25(月) 02:31:07
>>389
(A+B)-(A*B)
391デフォルトの名無しさん:2007/06/25(月) 22:11:01
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;

って、大丈夫ですか?宣言などはあってると思うのですが。
392デフォルトの名無しさん:2007/06/25(月) 22:24:16
function A:Integer;
引数ないときは括弧省略する
393デフォルトの名無しさん:2007/06/26(火) 00:23:34
>>392
上の関数の書き方でOK?
394デフォルトの名無しさん:2007/06/26(火) 00:29:23
Xが不定
395デフォルトの名無しさん:2007/06/26(火) 00:37:58
>>394
xが不定ですか?

x:ComboBox;

で、ComboBoxから選択性にするのは大丈夫ですか?
396デフォルトの名無しさん:2007/06/26(火) 00:39:37
>>395
x:ComboBox;の意味はさっぱりわからんが、xに代入してもいないのに参照するなってこと
397デフォルトの名無しさん:2007/06/26(火) 00:42:55
function A(x:integer):Integer;

こうしたいのでは…?
398デフォルトの名無しさん:2007/06/26(火) 07:12:09
機能としては、ComboBoxで選択した値から、それが、1か2なら「1か2です」、
それ以外ならば「1か2以外です」と表示されるようなプログラムを組みたいのですが。
説明が不十分ですみません。

関数の呼び出しは、A;でいいですか?
399デフォルトの名無しさん:2007/06/26(火) 07:46:54
>>398
それなら、その通りにコードを書かないとね。
プロジェクトの新規作成したら、COMBOBOXをフォームに貼り付けて、
ダブルクリックしてComboBox1Changeに、
A( ComboBox1.ItemIndex );
というのを書いて
>>391の3行を
>>397 の1行に変更する

400デフォルトの名無しさん:2007/06/26(火) 07:59:13
.NetでいうSystem.Net.Socketsみたいなソケット使いたいんだけど、delphiだとどうするの?
401デフォルトの名無しさん:2007/06/26(火) 09:18:28
Delphiではソケットがクラスになってない。.NET に相当するものはない。
API直たたき。
402デフォルトの名無しさん:2007/06/26(火) 10:55:57
Indy使っとけ。日本語ドキュメント皆無だが。
403デフォルトの名無しさん:2007/06/26(火) 17:57:16
FormCreate内でCloseしても終われないの?
うまい方法おせーて。
404デフォルトの名無しさん:2007/06/26(火) 18:06:53
>>403
どうしたいのかが分からないよ。

FormCreate内でApplication.Terminate;してもいいし、
Formを非表示にした状態でShow内でCloseとかでもいいし。
405デフォルトの名無しさん:2007/06/26(火) 18:17:43
>>403
PostMessageでWM_CLOSEをフォームに投げればいいのでは。FormCreate内での処理
にはならないけど、ほぼ目的は達成できると思う。
406ななしへたぐらま ◆XcB18Bks.Y :2007/06/26(火) 18:51:38
>>403
α)起動して何か処理をしたら即終了というアプリケーションを作りたい
→フォームの代わりにデータモジュールではどうですか?

 フォームを無しにしてデータモジュールを1個用意し,
 これのOnCreateイベントハンドラに必要なコードを書けばOKです.

β)作業が数秒かそれ以上かかるので作業中にそのフォームを表示させておきたい
→ApplicationEventsコンポを置いてこのOnIdleイベントハンドラに必要な処理コードと最後に Application.Terminate を書く.
407デフォルトの名無しさん:2007/06/26(火) 19:18:37
ある条件が満たさなければフォームを表示せずにそのまま終了させたいとかそんな感じかな?
408403:2007/06/26(火) 19:48:38
>>407
そういうことなんですが、Application.Terminate, WM_CLOSEともに一瞬だけフォームが表示されるので
ちょっとよろしくないですね。
パラメータ解析して失敗したらUsage表示して終了したいだけなんで無難に.dprの頭でやることにします。

ありがとう。
409デフォルトの名無しさん:2007/06/26(火) 20:04:38
USageをどこに表示するつもりなのか
410デフォルトの名無しさん:2007/06/26(火) 21:09:36
プロジェクトソース(.dpr)で
 Application.Initialize;
 if パラメータ解析 then
  Application.CreateForm(TForm1, Form1) else
   UseAge('こーすんだよ');
 Application.Run;
411デフォルトの名無しさん:2007/06/26(火) 21:24:12
UseAge
412デフォルトの名無しさん:2007/06/27(水) 03:08:56
Delphi6からBDS2006に乗り換えました。
さっそく使ってみて気になったのが、Ctrl+Spaceが全く効かないような・・・?
もちろんコード支援関係は全てチェックしてあります。
バグかと思ったけど、ぐぐってもそれらしい情報ないし。
同じ事で困っている方いらっしゃいません? できれば解決方法を・・・。
413デフォルトの名無しさん:2007/06/27(水) 04:48:41
TCPヘッダを直に弄るにはどーするんだ?
delphiじゃ無理?
414デフォルトの名無しさん:2007/06/27(水) 07:56:18
ググレカス
415デフォルトの名無しさん:2007/06/27(水) 08:37:01
TCheckBoxの□の中の色を変えるにはどうすればいいんですか?
416デフォルトの名無しさん:2007/06/27(水) 09:23:46
TCheckBoxはwindowsのコモンコントロールのBUTTON クラスのラッパーなので それに出来る事しか出来ない
自前で描くのが一番簡単な解決法だと
417デフォルトの名無しさん:2007/06/27(水) 09:57:53
TTreeViewをFullExpandしたらツリーの下の方が表示される格好になります。

これをTreeの一番上から(Expandした後)表示されるようにするにはどう細工すればいいですか??
418デフォルトの名無しさん:2007/06/27(水) 10:06:18
>>416

dクス
TImageでも継承してつくるYo
419デフォルトの名無しさん:2007/06/27(水) 11:46:19
>>413
無理。
420デフォルトの名無しさん:2007/06/27(水) 12:05:42
>.413
uses WinSock して地道にやりたいって事?WSAStartup あたりから検索したら?
>>419は本人? 答えがほしくてもあおるのはどうかな
421デフォルトの名無しさん:2007/06/27(水) 13:50:07
TTreeNodesとTTreeNodeの違いって何?
うまく書けないので申し訳ないのだが、
Nodes:TTreeNodes;
ってやって、Nodesに適当に追加して
Form1.TreeView1.Items:=Nodes;ってやっても何も表示されない。

Form1.TreeView1.Items.Item[0].Assign(Nodes.Item[0]);
ってやると表示される。
これってTTreeNodeの最初の1個を入れてるって事だと
思えてしまい、混乱してる。

TTreeNodeって個々のItemを扱うものじゃないの?(;´Д`)
422デフォルトの名無しさん:2007/06/27(水) 13:52:43
>>421

×これってTTreeNodeの最初の1個を入れてるって事だと
○ これってTTreeNodesの最初の1個を入れてるって事だと
423デフォルトの名無しさん:2007/06/27(水) 15:35:06
WM_DDE_POKEでデータ送信する方法を教えていただけませんか。
送信したいデータには、複数のnull文字を含みます。

DdeClientConv.PokeData でいろいろ試したのですが、うまくいきません。
どうも、送信したいデータの途中までしか、送信されていない感じです。
PokeDataのソースコードを読んでみると、null文字を無条件に終端と認識してしまい、
途中のnull文字までの長さをAPIにデータ長として渡しているのが原因か?
までは何となくわかりました。

が、だからどうしろと? orz
というわけで、質問させていただいております。
424デフォルトの名無しさん:2007/06/27(水) 17:01:50
すいません・・本当に初歩的な質問なのですが、Delphi2007で新規プロジェクトは
どうやってやるのでしょうか?

メニューから、ファイル→新規作成と進んでも、パッケージ・ユニット・
VCLフォームアプリケーション・フォーム・その他、って感じで
普通のプロジェクトみたいなのが無いのですが・・
425デフォルトの名無しさん:2007/06/27(水) 17:08:54
>>421
Node:1つの項目
Nodes:ツリービュー1つの全項目のリスト

>>424
普通のプロジェクトって何?
VCLフォームアプリとは違うの?
426412:2007/06/27(水) 17:48:03
自己解決しました。
メッセンジャーPlusを使ってると、メッセンジャーのロックのホットキーと重なっていたようです。
427デフォルトの名無しさん:2007/06/27(水) 17:53:27
>>420
だーかーら無理だって。
TCPやらIPヘッダを書き換えるなら.Net使うかプラットフォームを変えるしかない。
TDIやNDISとお話したいなら別だがな。
428424:2007/06/27(水) 18:14:51
>>425
あ・・VCLフォームアプリが普通のやつなんですね。

すいません。ありがとうw
429デフォルトの名無しさん:2007/06/27(水) 18:24:58
>>427
SOCK_RAW でもだめなの?
430421: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]);
でツリーが表示されるので。。。
431デフォルトの名無しさん:2007/06/27(水) 19:00:27
図がよくわからんが、
 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 等でを直接操作する。
432デフォルトの名無しさん:2007/06/27(水) 20:11:48
>>427
なんだこいつwww
433デフォルトの名無しさん:2007/06/28(木) 00:09:04
TCPヘッダってdelphiじゃ弄れないんですね
おとなしく.NETやります
434デフォルトの名無しさん:2007/06/28(木) 00:09:26
ワロタ
435デフォルトの名無しさん:2007/06/28(木) 00:16:11
>>433
TWebBrowser使えば簡単に出来るよ
436デフォルトの名無しさん:2007/06/28(木) 01:21:31
DDoS攻撃ツールでも作るのかw?
そういうときは生ソケットを弄るもんだ
437デフォルトの名無しさん:2007/06/28(木) 02:39:03
TCPヘッダとHTTPヘッダがごちゃまぜになってるな
438デフォルトの名無しさん:2007/06/28(木) 04:35:41
せっかくだからindy使えよ・・・
439デフォルトの名無しさん:2007/06/28(木) 05:35:09
かなりマジレスだけどICS使え
440デフォルトの名無しさん:2007/06/28(木) 05:55:19
ICSってよさそうだね。
http://www.overbyte.be/frame_index.html?redirTo=/products/ics.html

Delphiには、こんな優良コンポが豊富にあるから.NET Frameworkなんか
やってられないネ。
441デフォルトの名無しさん:2007/06/28(木) 05:56:56
マジなのかギャグなのか知らんがどれも生ソケットいじれねぇだろ・・・・・
442デフォルトの名無しさん:2007/06/28(木) 07:31:37
indyでtcpパケット直書きできるの?
443デフォルトの名無しさん:2007/06/28(木) 08:47:35
ICSって安定してるんだよな。
444Delフサギコ ◆A6VzDeLphI :2007/06/28(木) 09:34:31
           _____________
   ∧,,∧∩  /
  ミ,,゚Д゚彡 < しつもーソ
   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
>>412 場合によっては効かないことがあるね。
446デフォルトの名無しさん:2007/06/28(木) 22:10:57
447Delフサギコ ◆A6VzDeLphI :2007/06/28(木) 23:34:28
    ∧,,∧   
   ミ,,゚Д゚彡   
   ミ つ旦)~~
┳┳と,,,~),,~)  旦~~
]]]]]]]]]]]]]]]]]]]]]]]]]]]]

串リストが欲しいのではないですが。
448デフォルトの名無しさん:2007/06/29(金) 00:37:41
TlistViewのOnAdvancedCustomDrawItemイベントで
描画後に処理をしたいので
if Stage = cdPostPaint then
としているのですが、うまくいきません
OnAdvancedCustomDrawだと大丈夫なんですが
OnAdvancedCustomDrawItemイベントで描画後の処理をする事はできないのでしょうか?

環境はD7です。
449デフォルトの名無しさん:2007/06/29(金) 06:27:42
>>415
ひとーつ
wmPaintメッセージを捕まえて、そういう実装をする。
かなり面倒臭い。
TButtonを継承して色を変えられるボタンのコンポーネントがデルフィアンワールドにあったと思う。参考になるかも。

ふたーつ
パネルから継承したカスタムコンポーネントを作る。
パネルの中にスピードボタンとラベルを動的生成してコードで位置合わせしてマップする。
これも面倒ではあるが、1よりはわかりやすいと思う。


450デフォルトの名無しさん:2007/06/29(金) 13:40:31
451デフォルトの名無しさん:2007/06/29(金) 16:02:26
>>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
コンポーネントとゲーム作るのが大好きだったなぁ
455デフォルトの名無しさん:2007/06/29(金) 20:00:12
>>452-454
すれ違いだ。>>1 嫁。
456421:2007/06/30(土) 18:03:02
TreeviewのItemIdを変数に記憶させたい場合って、
変数の型は何にすればいいのでしょうか?
457デフォルトの名無しさん:2007/06/30(土) 18:13:39
ItemIDにカーソル合わせてF1押してみな
458デフォルトの名無しさん:2007/06/30(土) 18:29:50
>>457 
property ItemId: HTreeItemって書いてあるんで

var hogeid:HTreeItem;
としても、コンパイルできないんです。

何を間違えているのか、理解出来ていないのかさっぱりです。 (´Д`lli)ゞ
459デフォルトの名無しさん:2007/06/30(土) 18:34:18
「コンパイルできない」じゃなくて、どうできないのか書け。
どうせ問題点は別のところ。
460デフォルトの名無しさん:2007/06/30(土) 19:20:37
エラー未定義の識別子HTreeItem ってでる。
461デフォルトの名無しさん:2007/06/30(土) 19:59:28
usesにCommCtrlを加えればいけるっぽい。
Del6Perならインストールフォルダの*.intに対して検索かければ定義がある程度わかるはず。
462デフォルトの名無しさん:2007/06/30(土) 21:10:57
VCLのメソッドならほぼ使えるようになったけれど、APIはまだ理解できていない、という程度の者です。
TMemoで、現在表示されている行の先頭行の値を知るほうほうを教えてください!
463デフォルトの名無しさん:2007/06/30(土) 21:49:55
つEM_GETSCROLLPOS
464デフォルトの名無しさん:2007/06/30(土) 21:58:41
バージョンごとにifdefする時用の定番のインクルードファイルってないの?
465デフォルトの名無しさん:2007/06/30(土) 22:24:37
>>461
>>インストールフォルダの*.intに対して検索かければ定義がある程度わかるはず。
ありがとう
ComCtrlって言うのが、Usesにあったのでもう登録してあると思ってたよ。
見間違えてた。
ほんとに感謝
466デフォルトの名無しさん:2007/06/30(土) 23:27:31
TStrings.LineBreakプロパティはDelphi6の頃にもあったのでしょうか?
467デフォルトの名無しさん:2007/07/01(日) 00:26:16
>>466
無かった。D6 で確認。
Turboにはあるがいつ採用されたかは分からん。
468デフォルトの名無しさん:2007/07/01(日) 02:42:58
プロセス起動の監視や割り込みってドライバかかないと駄目?
469デフォルトの名無しさん:2007/07/01(日) 02:44:38
ううん
470デフォルトの名無しさん:2007/07/01(日) 09:17:14
>>463
試行錯誤したけど、わからなくて代わりにEM_GETFIRSTVISIBLELINEで解決しました。
ありがとうございます。
471デフォルトの名無しさん:2007/07/01(日) 11:24:58
>>467
ありがとうございます。
472デフォルトの名無しさん:2007/07/01(日) 16:01:22
Delphi7で例外が発生するとその瞬間、デバッガのインスペクトの表示が吹き飛んで不便なんだけど
Exception.Createが呼ばれてraiseされるまでの間にデバッグブレークかける方法ってないのかな。
473デフォルトの名無しさん:2007/07/01(日) 16:17:44
E := Exception.Create;
// ここでブレイク
raise E;
474デフォルトの名無しさん:2007/07/01(日) 16:28:08
そうじゃなくてあらゆる例外生成に対してってこと。
475デフォルトの名無しさん:2007/07/01(日) 18:12:23
>>469
ほぉ、そうなんだ。
ちなみにプロセス起動を阻止したりってどうするの?
476デフォルトの名無しさん:2007/07/01(日) 18:13:38
>>475
APIフック
477デフォルトの名無しさん:2007/07/02(月) 10:47:28
Delphi7から
TurboDelphi(Turbo Explorer?)
って替えたほうがいいのでしょうか。
.NETみたいに大規模なランタイムとかが必要だと
移行できないんですが、
TurboDelphiのメリット、デメリットをご存知でしたら
教えていただきたいです。

478ななしへたぐらま ◆XcB18Bks.Y :2007/07/02(月) 11:42:52
>>464
バージョンが○○だったらというのは条件シンボルがデフォルトで定義されていますが
○○以降だったらというのはありません(最近のバージョンはよくわかりませんが).
「○○以降だったら〜」というのは自分で作れるのですがネット上には案外転がっていませんね.

ところでスレの皆様に便乗質問ですが
Delphi 2006(BDS2006?)のコンパイラで定義されている条件シンボルは
VER175なのでしょうか,それともVER180なのでしょうか?
以下の2つのページで書いていることが違うので迷っています.

http://homepage1.nifty.com/ht_deko/tech001.html
http://support.codegear.com/jp/article/36128

現在の Turbo Delphi が VER180 なのは確認したのですが.
479デフォルトの名無しさん:2007/07/02(月) 13:39:11
>>477
要.NETなので教える必要が無いようです
480デフォルトの名無しさん:2007/07/02(月) 21:35:03
>>478
2006はVER180で2007はVER185って書いてあるようだが
481デフォルトの名無しさん:2007/07/02(月) 21:58:10
>480
ですね。こちらでもそのように認識しています。
482ミ,,゚Д゚彡 ◆A6VzDeLphI :2007/07/02(月) 22:34:02
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って表示されるんだけど....
483ミ,,゚Д゚彡 ◆A6VzDeLphI :2007/07/02(月) 22:37:21
あ、ごめん。ただしくDelphi2007って表示されますた。
484デフォルトの名無しさん:2007/07/03(火) 00:37:03
Tstringlistで定義した変数の中で
第1回,…
第2回,…
第3回,…
以下続く

というふうに値を入れているのに、IndexOfで第1回などとやっても
反応してくれません。(-1が返ってくる)
何かバグとかありますでしょうか?
485デフォルトの名無しさん:2007/07/03(火) 01:25:32
クリエイトしないとダメなんじゃね?
486デフォルトの名無しさん:2007/07/03(火) 01:32:16
IndexOfは完全一致じゃないと駄目。先頭が一致するかどうかのチェックはこんな感じ。

for i := 0 to sl.Count-1 do
 if AnsiPos('第一回', sl[i]) = 1 then
  ShowMessage('found'+sl[i]);
487デフォルトの名無しさん:2007/07/03(火) 08:06:16
すぐにバグのせいとかにする奴に限ってすぐにやめたりするよな
488ななしへたぐらま ◆XcB18Bks.Y :2007/07/03(火) 09:16:19
>>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も定義されています。
489デフォルトの名無しさん:2007/07/03(火) 10:54:23
超高速AnsiStrIPosクレクレ
490デフォルトの名無しさん:2007/07/03(火) 11:16:52
KMP法やBM法による実装の Pos 関数って事? 
491デフォルトの名無しさん:2007/07/03(火) 12:39:14
ある条件=trueじゃなければ、フォームに貼り付けてあるフォーカスをもったEditにキー入力を送らない、っていうのはどうやって実現するんですか?
492デフォルトの名無しさん:2007/07/03(火) 12:54:20
winapiならそこでeditをサブクラス化して
trueならデフォルトのプロシージャに操作を送るみたいな

trueならenableをfalseに設定するとか
493デフォルトの名無しさん:2007/07/03(火) 13:00:29
送られてから処理しないというのではダメなの?

そのフォームにキー入力がどういうルートを通ってくるかというとアプリの
Application.ProcessMessage で
PeekMessage -> TranslateMessage -> DispatchMessage ->
を通ってくるから、ここで遮断すれば「送らない」 ってのは実現出来ると思うけど
494デフォルトの名無しさん:2007/07/03(火) 13:18:55
普通に条件次第でキー入力を受け付けなくしたいだけじゃないの?
495491:2007/07/03(火) 13:48:14
>>494さんの言うとおりです・・
496デフォルトの名無しさん:2007/07/03(火) 13:52:18
Edit1.Enabled:=(ある条件=true);
497デフォルトの名無しさん:2007/07/03(火) 14:14:57
>>495
良い例かは分からないけど、こんな感じでどうかな。

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if(1 = 1)then
begin
Key := #0;
end;
end;
498デフォルトの名無しさん:2007/07/03(火) 14:23:04
>>494>>491も日本語の解らない奴らだ
くだらん
499デフォルトの名無しさん:2007/07/03(火) 14:55:28
>>498
君は頭が硬そうで気の毒。
500デフォルトの名無しさん:2007/07/03(火) 14:59:07
正規表現ライブラリTRegExprって文字列型しか渡せないんでしょうか?データをTStringsでもっているので、
使う時にTStrings.Textなどで単一の文字列を構築すると、TStringsが巨大な時に、構築に時間がかかってしまうので、
文字を反復できるイテレータみたいなインターフェースもしくは、クラスを渡せるとアプリ側ではデータ構造に関係なく,独自のイテレータを実装して渡せるので
便利だなと思いまして。そんなクールな正規表現ライブラリしりませんでしょうか??

501491:2007/07/03(火) 15:05:50
>>497
あ、それがピッタリきました。

どうもありがとうございます。

>>496
答えてくださって、ありがとう。
502デフォルトの名無しさん:2007/07/03(火) 15:09:06
>>500
行をまたいでマッチできるようにしたいってことじゃないなら
Exec(AInputLines: TStrings):Boolean; overload
なんてメソッドをソースに突っ込めばいいんじゃないの。
503デフォルトの名無しさん:2007/07/03(火) 15:31:04
>>502
行をまたいでマッチさせたかったのですが、もうちょい調べてみます。ありがとうございました。
504デフォルトの名無しさん:2007/07/03(火) 16:02:51
Delphi2007ってMastering書いた人からもみはなされてね?
Delphi2008って来年でるんかな?
505デフォルトの名無しさん:2007/07/03(火) 16:41:31
どういう意味?
506デフォルトの名無しさん:2007/07/03(火) 16:46:30
隔離スレ池
507デフォルトの名無しさん:2007/07/03(火) 23:34:38
>>486
できました。ありがとうございました
508デフォルトの名無しさん:2007/07/04(水) 14:00:41
DBGridの更新の停止ってできないですか?ダブルバッファみたいに。

DBGrid更新停止
 ↓
処理させる。
 ↓
新しいデータでDBGrid反映

ちょっとちらつくのが気になったので。
509デフォルトの名無しさん:2007/07/04(水) 14:36:16
>>502
・TStringsをイテレートしたマッチさせたい
・行をまたいでマッチさせたい

なんて、要求、コンポーネントの改造なしに_だろ
510デフォルトの名無しさん:2007/07/04(水) 14:41:18
>>508
TDataSet.DisableControls
511デフォルトの名無しさん:2007/07/04(水) 15:09:34
>>510
ありがとう♪
512デフォルトの名無しさん:2007/07/04(水) 18:47:14
ギコナビとかで板を追加すると

新板、板URL変更チェックが完了しました
「閉じる」ボタンを押してください

というところまでテキストがスクロールするけど
これってどういう命令?
513デフォルトの名無しさん:2007/07/04(水) 19:42:53
板違い
514デフォルトの名無しさん:2007/07/04(水) 21:13:41
515デフォルトの名無しさん:2007/07/04(水) 23:57:38
EUCコードをSHIFT-JISに
変換する命令はありますか?(Turbo Delphi)
何かコンポーネントが必要でしょうか?
516デフォルトの名無しさん:2007/07/05(木) 00:10:18
自分で作るのは嫌なの?
517デフォルトの名無しさん:2007/07/05(木) 00:17:55
jconvert.pas で出来たかな。
518Delフサギコ ◆A6VzDeLphI :2007/07/05(木) 09:39:28

    ∧,,∧  おはよー
   ミ,,゚Д゚彡
    ミ つ旦)~~
  〜と,,,~),,~)  旦~~
]]]]]]]]]]]]]]]]]]]]]]]]]]]]

ググルと結構、使われてますね。jconvert.pas

http://www.geocities.jp/will2bb/indy.htm
ここでいうところの、dearソースってのは
なんだろう...

ポン太の独り言: jconvert.pasが遅い
http://yutaro.air-nifty.com/hitorigoto/2005/11/jconvertpas_f72c.html
こちらの改良もどうやってやるのだか...

改良Versionが出回って欲しいプロジェクトっすね。
DEKOさんところでもKylix対応してるし。

>自分で作るのは嫌なの?
たぶん、嫌だろう。。。(w

519デフォルトの名無しさん:2007/07/05(木) 12:16:48
頻繁な文字列の連結つまり頻繁なメモリの確保はいかんよな。メモリの転送に比べてメモリの確保はボトルネックになりやすい。
520デフォルトの名無しさん:2007/07/05(木) 12:22:49
TStringsのTextプロパティのゲッターGetTextStrを見てもわかるように、まず、はじめに、必要なサイズを計算し、
その分のメモリを1度に確保。その後、転送。これが賢いやり方。まぁ、扱うデータ量が少ない場合は、気づかないけど、
データ量が増えるにつれ、パフォーマンスの違いが顕在化してくる。
521デフォルトの名無しさん:2007/07/05(木) 12:45:12
メモリ倍々で増やしていくStringBuilderポートすると何かと便利。
522デフォルトの名無しさん:2007/07/05(木) 14:41:26
>>518
dearのやつは1.4bってやつ
523デフォルトの名無しさん:2007/07/05(木) 22:20:15
CPU使用率が何%以下とかアイドル時のみに
動作させる仕組みを教えてください
524デフォルトの名無しさん:2007/07/05(木) 22:31:24
>>516
既存のものがあるなら利用したいです
無ければ自作でもなんでもしますけど・・・

>>517
どうもです
525デフォルトの名無しさん:2007/07/05(木) 22:42:31
>>523
方法じゃなくて仕組み?
526デフォルトの名無しさん:2007/07/05(木) 23:14:38
AquesTalk-規則音声合成ライブラリ
ttp://www.a-quest.com/aquestalk/
これをdelphiで使うにはどうすればよいでしょうか?
527デフォルトの名無しさん:2007/07/05(木) 23:20:59
どうすればってDLL呼ぶだけじゃん
528デフォルトの名無しさん:2007/07/06(金) 00:17:21
プログラムを実行したときにTStringListに読み込む決まった幾つかの文字列が
あった場合、その決まった文字列をテキストファイルにして実行時に
読み込ませる。
しかし、そのテキストファイルはエクスプローラーで見えないように
ソフトの一部とかには出来ないでしょうか?
なんか読みにくくてすみません。
529デフォルトの名無しさん:2007/07/06(金) 00:20:24
>>528
リソースに埋め込むのはどう?
530デフォルトの名無しさん:2007/07/06(金) 00:24:46
>>523

それ、delphiじゃねええww
531デフォルトの名無しさん:2007/07/06(金) 00:26:10
あまりたいした分量じゃないなら
const msg=
'aaa'+slinebreak+
'bbb'+slinebreak+
...
に変換するエディタマクロ・フィルタでも書いて直接定数として埋め込みとか。
532デフォルトの名無しさん:2007/07/06(金) 00:28:27
>>528

適当で簡単でいいのであれば、テキストに落とすとき、xorして落として、読み込み時に
復元したらいいんじゃない?

それか、その辺の暗号アルゴリズムで暗号化して復号化してみては?
533デフォルトの名無しさん:2007/07/06(金) 00:28:34
暗号化して置いておく
534デフォルトの名無しさん:2007/07/06(金) 00:34:05
>>530
delphiじゃできないってことですか?
535Delフサギコ ◆A6VzDeLphI :2007/07/06(金) 00:41:21
   ∧,,∧  リンクだけでスマンソ
  ミ,, ゚Д゚彡 
   〃つl⌒|⌒l
 〜ミ,,[ ̄ ̄ ̄.]
      ̄ ̄ ̄

CPU占有率を調べる
http://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200606/06060020.txt

CPUの使用率を取得するには?
http://homepage1.nifty.com/MADIA/delphi/delphi_bbs/200404/200404_04040040.html

英語:SwissDelphiCenter.ch : ...get the CPU usage in percent on Windows NT/2000/XP?
http://www.swissdelphicenter.ch/en/showcode.php?id=969
536528:2007/07/06(金) 00:43:47
レス、ありがとうございます。
初心者なんで、教えてもらってのを勉強がてら試してみます。
また、よろしくお願いします。
537デフォルトの名無しさん:2007/07/06(金) 00:44:06
TApplicationEventsコンポはっつけてOnIdleイベント書くとか?
538デフォルトの名無しさん:2007/07/06(金) 03:00:55
>>528
NTFS限定だけどな、ファイルシステムの代替ストリームを使え。
普通のユーザーにはこれで十分。
http://www.microsoft.com/japan/msdn/windows/windows2000/ntfs5.aspx
ファイルを保存するときにファイル名の後にコロン+ストリーム名をつけて保存しろ。
539デフォルトの名無しさん:2007/07/06(金) 04:13:43
普通に文字列のリソースにしてexeに取り込むだけでしょ。
540デフォルトの名無しさん:2007/07/06(金) 04:40:46
>>269-270さんありがとうございました。
なんとなくわかりました。
541デフォルトの名無しさん:2007/07/06(金) 08:55:29
542デフォルトの名無しさん:2007/07/06(金) 14:46:47
正と負を反転させるにはどうすればいいですか?
235→-235
-343423→343423
みたいに。
543デフォルトの名無しさん:2007/07/06(金) 14:47:22
a := -a;
a := a * -1;
544デフォルトの名無しさん:2007/07/06(金) 16:06:38
TTableのIndexを一時的に無効にする方法ってありますか?

Indexを[ixPrimary, ixUnique]にしてるんですが、新たに0から振りなおす際、「すでにその値は登録されているのがある」っていうエラーが出るので…
545デフォルトの名無しさん:2007/07/06(金) 17:26:55
新しいテーブルを作成するのが安全じゃね?
546デフォルトの名無しさん:2007/07/06(金) 18:39:28
>>545
そうですか・・
ありがとうございます。
547デフォルトの名無しさん:2007/07/07(土) 00:16:40
Delphiで余ったビデオメモリの領域を使うことって出来る?
というかWindowsで可能なのだろうか・・・。
548デフォルトの名無しさん:2007/07/07(土) 02:00:29
>>547
結局のところ、それで、何をしたいかをかいた方がいい返事をもらえるぞ

一応、DirectX使えば、VRAMは使えるが
549デフォルトの名無しさん:2007/07/07(土) 02:30:44
>>548
VRAMを仮想記憶領域にしようかと思って。
OSのメモリ管理をハックしないと駄目かなぁ?
550デフォルトの名無しさん:2007/07/07(土) 02:37:36
そんなものをハック出来る知識と技術を持ってる人間なら
そんなことをやろうとは考えないよw
551デフォルトの名無しさん:2007/07/07(土) 20:17:02
**charのようなポインタのポインタってdelphiではどういうふうに書くのでしょうか?
*charはPCharだから

PPChar = ^PChar
見たいに宣言するのかな?
552デフォルトの名無しさん:2007/07/07(土) 20:20:44
それでいいよ。
引数に渡して変数自体を操作したいとかなら
foo(p: PPChar);
ではなく
foo(var p: PChar);
のように書くのが多いかも
553デフォルトの名無しさん:2007/07/07(土) 20:23:04
>>552
おぉ、なるほど。
知りたい情報はまさにそれでした。
ありがとう。
554デフォルトの名無しさん:2007/07/08(日) 01:06:15
6からデフォルトで定義されてるけどな<PPChar
555デフォルトの名無しさん:2007/07/08(日) 02:10:02
それは初耳

ま、使うこと無いだろうけど
556デフォルトの名無しさん:2007/07/08(日) 06:07:01
DBGridでレコードの値をそのまま表示するのではなく、ある計算を加えてから表示するにはどうすればよいのですか。
557デフォルトの名無しさん:2007/07/08(日) 07:01:39
コンソールアプリでタイトル変えるのってどうやるの?
'cmd.exe /c title NEWTITLE'
実行すれば出来るんだけど重すぎる。
558デフォルトの名無しさん:2007/07/08(日) 10:16:50
タイトルと同じ名前にしたショートカットを作って、そこから起動すれば?
559デフォルトの名無しさん:2007/07/08(日) 10:33:27
>>557
自分のタイトルを変えるならSetConsoleTitleっていうそのものズバリな名前のAPIがWindows.pasに定義されてる
自分以外のを変えたいならFindWindowあたりでConsoleWindowClassを調べる
560デフォルトの名無しさん:2007/07/08(日) 11:31:08
>>556
項目コンポーネントのOnGetTextイベント使うか、計算項目を追加して、それを表示。
561デフォルトの名無しさん:2007/07/08(日) 16:52:38
>>560
Thanx!!
562デフォルトの名無しさん:2007/07/08(日) 22:20:16
classのPrivate宣言とかに書いた変数はそのclassをCreateした時点で
コンパイラによって初期化されてるのですか?
563デフォルトの名無しさん:2007/07/08(日) 23:06:16
フィールドは0で初期化される。
564デフォルトの名無しさん:2007/07/09(月) 00:53:12
まったくの素人なんだがお勧めのサイトとか本教えれ
565デフォルトの名無しさん:2007/07/09(月) 03:31:48
基本的な質問でごめんなさい。

MDIで子フォームから親フォームへ命令を送るにはどうすればいいですか?
566デフォルトの名無しさん:2007/07/09(月) 04:48:58
Unit2 の uses に Unit1を追加して、 Form1.hogehoge
567デフォルトの名無しさん:2007/07/09(月) 05:08:51
>>566
ありがとうございます。やってみます。
568デフォルトの名無しさん:2007/07/09(月) 22:19:37
569デフォルトの名無しさん:2007/07/09(月) 22:29:51
>>563
ありがとう

フィールドと呼ぶのを初めて知りますた
570デフォルトの名無しさん:2007/07/10(火) 03:45:19
FName とか FHeight とかの最初の F はフィールドの F なのよね。
571デフォルトの名無しさん:2007/07/10(火) 07:56:28
FはファンクションのFだよ
572神戸在住:2007/07/10(火) 08:19:41
Fは阪神の藤田のFやろ。
573デフォルトの名無しさん:2007/07/10(火) 08:33:24
阪神はHだろ。
574デフォルトの名無しさん:2007/07/10(火) 08:42:58
いや〜ん、のび太さんのH!
575デフォルトの名無しさん:2007/07/10(火) 08:45:13
幼稚な暇つぶしはCodeGearスレで
576デフォルトの名無しさん:2007/07/10(火) 10:09:32
そういや2007買ったけどまだインストールしてないな。
577デフォルトの名無しさん:2007/07/10(火) 10:32:22
オレのにインストールしといたよ
578デフォルトの名無しさん:2007/07/10(火) 17:12:22
FormのFかと思ってたわ
579デフォルトの名無しさん:2007/07/10(火) 17:26:16
グローバル変数のプレフィックスもFつけるん?
580デフォルトの名無しさん:2007/07/10(火) 17:34:42
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 です。
582デフォルトの名無しさん:2007/07/10(火) 18:21:10
ふつうにはできない。
自分でつくるなら、たんに新規のフォームをつくるだけでしょ。
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で値を取得するのが目的ならばこれでも使えないことはない。

配置したコントロールのイベントでダイアログの中身を変更するのが目的だとかなり難しくなる。
585デフォルトの名無しさん:2007/07/10(火) 22:16:55
>>582
>>583
>>584
回答ありがとうございます。581です。TPictureSaveDialogのソースや
SetParent関数を調べてみたいと思います。(D7Pro書き忘れました)
サマリが提示できるようでしたら後ほど(後々)書き込みます。
586デフォルトの名無しさん:2007/07/10(火) 23:38:04
構造化型について教えてください。

PData1=^TData1;
TData1=record
何かの定義
end;

PData2=^TData2;
TData2=record
何かの定義
end;

こんなのがあって、これをツリーみたいに管理したいのですが、
イメージ的にこんなの。

OyaData-----PData1
|--PData2

OyaDataとかの定義は
POyaData=^TOyaData;
TOyaData=record
OyaData1:TList;
OyaData2:TList;
end;
こんな感じでいいですかね?
もっといい方法があれば教えてください。
587デフォルトの名無しさん:2007/07/10(火) 23:54:58
Delphi6 PersonalとTurbo Delphi Explorerがあるらしいのですが違いは何でしょうか?
今はインストール番号・インストールキーが配布されてないらしいのですが無料でこれから使う場合はTurbo Delphi Explorerだけですか?
Turboの場合、ランタイムがどうとか…。
588デフォルトの名無しさん:2007/07/11(水) 00:00:27
最初からrecordではなくclassとして扱った方が結局は簡単だったりする。
TTreeNode型のデータ構造を参考にすると幸せになれるかもしれない。

589デフォルトの名無しさん:2007/07/11(水) 01:00:00
すみません。まだこのスレの会話についていけないズブの素人です。

Form1のKeyDownが押されたときに、Shiftを押しながらあるキー(例えばA)が押されたってのを判別するにはどう書けばいいんですか?
590586:2007/07/11(水) 01:44:35
>>588
クラスに挑戦してみます。
591デフォルトの名無しさん:2007/07/11(水) 01:49:45
>>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;
592デフォルトの名無しさん:2007/07/11(水) 01:56:12
Ord('A')
orz('A`)
593デフォルトの名無しさん:2007/07/11(水) 02:34:22
>>591
ありがとごじゃいます。
594デフォルトの名無しさん:2007/07/11(水) 04:35:54
Delphi5を使い始めましたが、TComboBoxのReadOnlyプロパティが見つけられません。
同じ効果を得るためにはどうすればいいですか?
595デフォルトの名無しさん:2007/07/11(水) 04:46:36
>>594
styleをcsDropDownListにする
596594:2007/07/11(水) 04:51:35
ありがと!!
597デフォルトの名無しさん:2007/07/11(水) 08:25:11
>>586
ツリーでデータそのものを持たせて動的配列の方が楽だよ
ただ、構造化形はクラス形と違って先行定義が出来ないから
Data1にData2が入る場合も、 Data2にData1が入る場合もあるならクラス型にしないと面倒だね

どうせポインタ形で処理するなら、クラス型でいいと思う。

TOyaData=record
OyaData1:array of TData1;
OyaData2:array of TData2;
end;
598デフォルトの名無しさん:2007/07/11(水) 09:54:36
TurboDelphiです
Form1の一定距離にマウスが近づいてきたら半透明にしたいのです。
どのようにしたらよいのでしょうか?
599598:2007/07/11(水) 11:27:53
自己解決致しました。
スレ汚しすいませんでした。
600581: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;

のようにしました。一応これでうまく動作してるのですが、変なコードが
ありましたらご指摘くださりますとありがたいです。
601581:2007/07/11(水) 11:59:44
う、、でも、TabOrder が変だ…
602デフォルトの名無しさん:2007/07/11(水) 16:53:29
SendToBackとかごちゃごちゃやって解決しました。
603デフォルトの名無しさん:2007/07/12(木) 21:40:43
内外問わず、どのコンポも○○ListってほぼTListやTStringListまんまな実装だけど、
Licence的に問題無いのだろうか?
といってもList系で全く違うロジックとか考え付かないのだけど
604デフォルトの名無しさん:2007/07/12(木) 21:57:56
機能・インタフェースが同じって程度なら無問題。
コードそのまんまコピペ・改変するなら、グレー〜黒の可能性はあるが
CodeGearがDelphi開発者に対してそれをあえて問題にするとも思えないが
ここで第三者があれこれ言っても何の意味も持たないので
気になるなら直接問い合わせとけ。
605デフォルトの名無しさん:2007/07/12(木) 22:03:30
ラジオボタンのようにどれかが入れ替わりでチェックされて、
なおかつ、チェックされたものがもう一度クリックされると
解除(全部未チェック状態)になるコンポって無いですか?
606デフォルトの名無しさん:2007/07/12(木) 22:33:56
知らないけど、そういう挙動は本人にしか求めてないだろうな
607デフォルトの名無しさん:2007/07/12(木) 22:49:03
>605
自分で書くんだな。

全チェックのOnClickを共有して
Sender(イベントを起こしたコントロール)以外の
チェックをOFFにすると書けば実現できるだろ。
608デフォルトの名無しさん:2007/07/13(金) 02:12:17
その程度の機能なら、わざわざそんなコンポ探してダウンロードしてインスコするより
自分で書いたほうが速いよな
609デフォルトの名無しさん:2007/07/13(金) 07:06:03
>>605 SpeedButton並べるとか
610デフォルトの名無しさん:2007/07/13(金) 08:15:33
ファイルサイズを測るにはどうすればいいですか?
例えばif (ファイルサイズが32kb未満) then 読み込み、とかやりたいのです。
611デフォルトの名無しさん:2007/07/13(金) 08:22:00
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;
612デフォルトの名無しさん:2007/07/13(金) 10:44:43
ありがとうございます。例えば32kbより小さいか?の判定は

if GetFileSize('hoge.txt')<32000 then 〜 でいいんでしょうか?
32X1024?ですか?
613デフォルトの名無しさん:2007/07/13(金) 11:52:31
$7FFFじゃまいか。
614デフォルトの名無しさん:2007/07/13(金) 12:36:38
お願いだからプログラマともなったら、せめて

32X1024

じゃなくて

32*1024

みたいな表記にしてくれないか
615デフォルトの名無しさん:2007/07/13(金) 12:52:12
>お願いだからプログラマともなったら、せめて

ごめんなさい。とうていまだプログラムでメシは食えないです・・

>$7FFF

これでいいんですか?
616デフォルトの名無しさん:2007/07/13(金) 13:15:41
32*1024でも、32*1000でもこれは、君次第。君が1KByte=1000とする仕様のアプリをつくりたいなら
32*1000でもいい。それを使うユーザーはどう思うかはしらんけど。
617デフォルトの名無しさん:2007/07/13(金) 15:49:56
スクリプトなどから、識別子からオブジェクト内のメソッドを呼び出したいのですが、
publishedメソッドにして、MethodAddress使うのが楽と聞きました。

その辺をやっている、2chで開発されたDelphiのギコBasicというのがあるらしいのですが、
どなたかギコBasicのソースお持ちでないでしょうか?
618デフォルトの名無しさん:2007/07/13(金) 15:53:51
619デフォルトの名無しさん:2007/07/13(金) 15:58:32
>>618
おお、サンクス!
たすっかりました
620デフォルトの名無しさん:2007/07/13(金) 15:59:19
DelphiとVB、どちらが優れていますか?
621620:2007/07/13(金) 16:00:03
すいません。誤爆しました。リアルで死んできます。
622デフォルトの名無しさん:2007/07/13(金) 16:00:32
VB.NETやれば年収2千万はかたいよ
623デフォルトの名無しさん:2007/07/13(金) 16:16:14
正確には VB.NET をやる奴隷を5人も飼っていればだろ
624デフォルトの名無しさん:2007/07/13(金) 16:57:13
DelphiはVBみたいにgenericsが使えないんですか?
625デフォルトの名無しさん:2007/07/13(金) 17:02:59
>>624
比べてどうなのか知りたいなら、
VB vs Delphi @夏厨2006
http://pc11.2ch.net/test/read.cgi/tech/1152851763/

こっちのスレで聞いたらどう? このスレで聞くなら、 具体的にどういう事をやりたいので
Delphiでどうすればいいのかという質問の仕方でお願いね。
626デフォルトの名無しさん:2007/07/13(金) 19:22:24
CreateProcess等で実行したプロセスのメモリを一部書き換えたいのですが
どのようにすればよいのでしょうか?
627デフォルトの名無しさん:2007/07/13(金) 20:33:41
>>616
ありがとうございます。
希望をもって取り組みます。
628デフォルトの名無しさん:2007/07/13(金) 20:38:11
endが予約語なのがたまに痛い。Start, Endと名前つけれねぇじゃねぇか。
で今は、Doというメソッド名つけたかったがまた、予約語とバッティング・・・
629デフォルトの名無しさん:2007/07/13(金) 20:55:28
だから何?
630デフォルトの名無しさん:2007/07/13(金) 21:15:29
>626
CreateProcessならPROCESS_INFORMATIONの中でプロセスハンドルが取得できるわな。
それを使ってOpenProcessしてWriteProcessMemoryするんだ。
631デフォルトの名無しさん:2007/07/13(金) 21:15:57
>>630
OK。
やってみる。
632デフォルトの名無しさん:2007/07/14(土) 00:20:27
D6Pで
'エラーの検索' → 'CPUウィンドウ出現' → orz 
の流れから素早く立ち直る方法はありませんでしょうか?
633デフォルトの名無しさん:2007/07/14(土) 00:29:22
正直、いつまでD6とか言ってるんだよとか思う。
634オッチャ6号 ◆BxYrhGGLyA :2007/07/14(土) 01:08:20
正直、D6はいいからな。
>>633 糞ヘルプ楽しい?
635オッチャ6号 ◆BxYrhGGLyA :2007/07/14(土) 01:11:20
いまだにD5,D6,D7使ってるひと多いよ。
なぜだか分かるかな?
636オッチャ6号 ◆BxYrhGGLyA :2007/07/14(土) 01:12:07
あ、すれ間違えた。すまぬ。
637デフォルトの名無しさん:2007/07/14(土) 03:06:35
自演ミスしてらw
638デフォルトの名無しさん:2007/07/14(土) 04:46:27
これはひどい
639デフォルトの名無しさん:2007/07/14(土) 05:05:37
キモ恥ずかしい
640デフォルトの名無しさん:2007/07/14(土) 05:45:53
pgr
641デフォルトの名無しさん:2007/07/14(土) 08:02:58
>このスレを見ている人はこんなスレも見ています。(ver 0.20)
>【〓SoftBank】 ホワイトプラン 42 【月額980円】 [携帯・PHS]
>【8701】SBIイー・トレード証券245【北押値】 [市況1]
>【〓SoftBank】 ホワイトプラン 41 【月額980円】 [携帯・PHS]

いつも出るんだけどSB関係の人なのか、Delphiをどう使ってるんだろ?
642デフォルトの名無しさん:2007/07/14(土) 09:23:27
でもそれIEとかで見てる人だけだしな
643デフォルトの名無しさん:2007/07/14(土) 10:00:00
どーでもいい
644デフォルトの名無しさん:2007/07/14(土) 13:38:50
ウィルスバスターはずっと前から出てたよ。
私の他にピアノ弾く人いるの?
645デフォルトの名無しさん:2007/07/14(土) 16:09:55
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は呼び出す手段ある?
647デフォルトの名無しさん:2007/07/14(土) 16:48:28
inherited; // call A0.TestProc
A0(Self).TestProc
A1(Self).TestProc

三つ目はもちろん未定義
648デフォルトの名無しさん:2007/07/14(土) 17:50:49
>>647
ありがとうございました!
649デフォルトの名無しさん:2007/07/14(土) 22:18:52
Undoバッファ付きの文字列リストクラスはないでしょうか?Undoでアンドゥ、Redoでリドゥ、
最大アンドゥ回数指定できるとベストです。
650デフォルトの名無しさん:2007/07/14(土) 22:37:47
そもそもリストというデータ構造にUndoという概念はないです。
なにかに応用したければ、自分でコーディングすべきでは?
651デフォルトの名無しさん:2007/07/14(土) 23:03:53
Undo、Redo って、バッファとしてスタックなのかな、データ構造としては。
652デフォルトの名無しさん:2007/07/15(日) 00:18:06
ListViewのvsReport形式で
・複数の行を選択出来るようにする
・選択されているものだけをTStringListに追加する
を行いたいのですが具体的にどのようにすれば良いでしょうか
653ミ,,゚Д゚彡 ◆A6VzDeLphI :2007/07/15(日) 00:34:12
こんなんかな。
・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;
654デフォルトの名無しさん:2007/07/15(日) 01:07:37
>>650
文字列リストはTStringsの派生クラスであると都合がいいです。
まぁ、標準ではないの知ってるのでどっかに落ちてないかなぁと思った次第です。
>>651
はい。Undo,REdoできれば、バッファの構造は問いませんが、まあ、UndoStack、RedoStackを
用意するのが定石だと思います。

やっぱ、自分で組むしかなさそうですね。
655デフォルトの名無しさん:2007/07/15(日) 03:12:47
>>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;
656652:2007/07/15(日) 05:19:57
>>653
>>655
無事実現できました
ありがとうございます
657ななしへたぐらま ◆XcB18Bks.Y :2007/07/17(火) 09:58:07
>>628
開始,実行…RunとかExecute
データなどの構築…Build
終了…Terminate
中止…Abort

こんなところで回避.
658デフォルトの名無しさん:2007/07/17(火) 15:19:52
数値型の時はiStart, iEnd、文字列型の時はsStart, sEndみたいにしてるかな、俺は。
659デフォルトの名無しさん:2007/07/17(火) 15:27:47
>>628
関数名のこと言ってるの?
俺は漠然とした関数名が嫌いなので、

function Fint_StartInit

みたいに書いてるよ。
頭文字はプロシージャ/ファンクション、戻り値の型(プリフィックス3文字)、
アンダーバーに続けて関数の機能名(概要)。
660デフォルトの名無しさん:2007/07/17(火) 16:17:36
pascalなお前らならendの対義語はbeginじゃないか。
startならstopかgoalだべ。
661デフォルトの名無しさん:2007/07/17(火) 20:10:37
delphiで書いた単純なBruteForceのソースない?
MD5のものはみつかるけど、テーブル与えて単純に回すだけのソースをみてみたい。
662デフォルトの名無しさん:2007/07/17(火) 21:35:35
力まかせで単純って MD5って事は 文字列検索か何か?

Posのコードみたいなのを探してるの?
663デフォルトの名無しさん:2007/07/17(火) 22:11:19
>>662
単純に言うと指定した文字列を使った指定した文字列の長さまでの文字列を出力するコードを探しています。

指定した文字列が'ABC'
長さの最長が2とした場合
生成されるリストは以下のような感じになります。
AA,AB,AC,BA,BB,BC,CA,CB,CC

効率、アルゴリズムをちょっと見てみたいのです。
664デフォルトの名無しさん:2007/07/17(火) 22:13:45
BruteForceなのにテーブル?
665デフォルトの名無しさん:2007/07/17(火) 22:20:27
>>663
その例だとテーブルは何よ?
666デフォルトの名無しさん:2007/07/17(火) 23:49:50
>>663
アルゴリズムっていたって、それは重複を許す組み合わせ。高校の数学レベル。
力任せも糞もない。
667デフォルトの名無しさん:2007/07/18(水) 00:30:00
>>664
指定した文字列=テーブル。
この文字列のキャラクタを使って総当りすると。

delphiで書いた奴って意外とないみたいなんですよねぇ。
某暗号のソースではインラインアセンブラなんか使って感動したもんだが・・・。
668デフォルトの名無しさん:2007/07/18(水) 00:41:15
そんなんわざわざネットで公開するようなもんでもないだろ。
669デフォルトの名無しさん:2007/07/18(水) 00:41:19
そういやDelphi2005から実装されたinline関数ってまともに使えるようになった?
670デフォルトの名無しさん:2007/07/18(水) 00:43:06
>>667
C/C++で書かれたライブラリならBCCでコンパイルすればDelphiに直接objリンクできるよ。
そういう話でもなさそうだが。
671デフォルトの名無しさん:2007/07/18(水) 00:43:23
アセンブラ使わなくても20行くらいでかけそうだが。
672デフォルトの名無しさん:2007/07/18(水) 00:44:22
Cなら一行でもいけるかもな
673デフォルトの名無しさん:2007/07/18(水) 00:48:36
既存の1万行のプログラムも改行取り払えば、1行で書けるけどな。
674デフォルトの名無しさん:2007/07/18(水) 00:50:27
ふと、ループ使えば3行ですむのを5千行以上書いてるコードを思い出した。
何でも高速化のためらしいが今でもよく意味がわからない。
675デフォルトの名無しさん:2007/07/18(水) 00:58:39
世の中のオナニー好きには困ったもんだな。
676デフォルトの名無しさん:2007/07/18(水) 02:37:02
>>673
一行の制限があるDelphiでは無理。
677デフォルトの名無しさん:2007/07/18(水) 06:53:48
>>676
ほんとに制限あるのか??それは、Delphiの***IDEのエディタ***の制限なんじゃないか??
普通コンパイラは行単位にコンパイルするわけじゃないので。


678デフォルトの名無しさん:2007/07/18(水) 08:11:34
質問です
THoge = record
 ...
end;
THoges = array of THoge
とか自分で定義したレコードの配列に色々とデータを保持してるとして
それをTMemoryStreamとかでそっくりそのままファイルに保存することは出来るんでしょうか?
679デフォルトの名無しさん:2007/07/18(水) 08:20:37
レコードの内容によるよ
Strings とか動的配列を含んでいると簡単ではない

そうでなければ TStreamの wirteメソッドで 簡単に書き出せる。
680デフォルトの名無しさん:2007/07/18(水) 08:25:00
var Hoge:THoges;

begin
 Stream.WriteBuffer( Hoge[0] , length(Hoge)*Sizeof(Hoge[0]) );
681678:2007/07/18(水) 08:46:48
レコードの内容は三次元動的配列みたいなアホなことになってます
>>680さんのようなことはやってみたんですが書き出せませんでした

仮に一次元動的配列とした場合の手順はどんな感じでしょうか?
682デフォルトの名無しさん:2007/07/18(水) 09:16:10
レコードの内容が動的配列なら
1、バイナリーではなくテキストで行う
  1行をカンマ区切りで動的配列するような方式

2、バイナリーのデータ構造を自前で設計する
  RIFFなんかを参考にして、
683デフォルトの名無しさん:2007/07/18(水) 09:19:15
まず、1要素だけ書き込む・読み込むメソッドをつくってみる。うまくいったら、
for で回す。これで完璧。
684デフォルトの名無しさん:2007/07/18(水) 09:21:56
効率は悪いけどソフトの設計が楽なのは、レコードではなくTComponentかTPersistent 継承のクラスにして
メンバーはpulished なプロパティとして実装する事
これを入れ子にすれば、TStreamのメンバーで簡単に保存して再生出来る。
バイナリーでもテキストでも
685デフォルトの名無しさん:2007/07/18(水) 09:32:29
published にできる型には制限があるでしょ。永続化にたよったコーディングは
関心しないな。
686デフォルトの名無しさん:2007/07/18(水) 09:50:19
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]);
687デフォルトの名無しさん:2007/07/18(水) 09:57:21
型が決まってるならソレでいいね。 サイズゼロの時もとりあえず大丈夫っぽい。
Variant配列だと、さらに種類まで必要かもな
688デフォルトの名無しさん:2007/07/18(水) 10:30:05
len := SizeOf(arr);
ってなんだ?動的配列は動的に確保されたメモリブロックへのポインタだから、
SizeOf(arr)は32bit環境だと4返すんじゃまいか。
Length(arr)じゃねぇの?
689デフォルトの名無しさん:2007/07/18(水) 11:55:40
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引数の組み合わせを記憶させておこうかと思っているんですがもっといいのあります?

長文すみませんでした。
690デフォルトの名無しさん:2007/07/18(水) 12:36:13
使ったり使わなかったりできる自由な引数???
Delphiで引数のデフォルト値のことかな??
そもそも、普通曖昧さをなくすために、デフォルト値を与えられる引数は右からなんだけど。
つまり、君の例で言うと、int IntBに+をつけたいならint IntCも+をつけなきゃいけない。

691デフォルトの名無しさん:2007/07/18(水) 12:40:00
いや、君の質問の答えになってなかったけど、
>自分では、ルーチンを入力するダイアログを用意して書き込む時にAddObjで
>Lines.strings引数の組み合わせを記憶させておこうかと思っているんですがもっといいのあります?
これってどういう意味??ダイアログ??ユーザーにどちらの組みかダイアログを使って指定してもらう
ってこと?
692デフォルトの名無しさん:2007/07/18(水) 13:27:57
>>690,691
言葉足らずですみません。
>>使ったり使わなかったりできる自由な引数???
プログラムエディタといってもDelphiとかじゃなくて、
工作機械を扱ってまして、その機械独自の言語なんです。

>>これってどういう意味??ダイアログ??ユーザーにどちらの組みかダイアログを使って指定してもらう
ってこと?
ウィンドウって言ったほうがいいのかな?
ルーチンを入力してもらう時に、そのルーチンのどの引数を使うか指定、もしくは
引数分のTEditを動的に作って、何個目の引数が使われたかを記憶しておこうかなと。。。
入力後の修正で引数を変える時とかに、またウィンドウを出して使われている引数のところに
入力済みの引数の値を入れて表示すれば使い勝手がいいかなと考えています。

なんか分かりづらくて申し訳ない。
693デフォルトの名無しさん:2007/07/18(水) 13:34:36
型が違うわけでは無いからオーバーロード関数というわけにはいかんな。
フラグ引数を追加する?それとも値オブジェクトを導入して多態で解決?
そこまで大袈裟な話でも無いか。

>>690の方法ならA-C-Dの場合はBにダミー値(A-B-Cの時に扱わない値。-1とか)
を渡すだけで良いと思われ。
694678:2007/07/18(水) 13:44:41
>>686さんのをベースにしてやってみます
RIFFとかも参考になりそうです
ありがとうございました
695デフォルトの名無しさん:2007/07/18(水) 13:46:17
なんかね。いきなりLines.stringsとかAddObjとか出てきてね。混乱するね。
AddObjってTStringsのAddObject?LinesってTStrings型の変数かなとかね。
Linesっていうぐらいだから、行単位に何かその行の状態(この場合引数?)を保存しておきたくて、
それをTStringsのObjectsに割り当てたいってことかな。それなら、君のやり方は
分かりやすくいいとは思う。
>引数がint intA , +int IntB , int IntC の組み合わせか、
>int intA , int IntC , +int IntDの組み合わせかを知るには
は普通にこの場合、引数4つ分の記憶領域を用意しておいて、そこにつっこんでおけば
いいんじゃない?で、ある値の時は、その引数は指定されていなかったと決めれば。
696689:2007/07/18(水) 14:28:25
分かりにくい文章に付き合ってもらってありがとうございます。
質問が分かりにくいってことは、自分でもやりたい事がはっきりしていない
証拠なんですが、どういうやり方があるのか悶々としてたので。
自分のやり方でもいいみたいなので、作るだけ作ってみます。
697デフォルトの名無しさん:2007/07/18(水) 16:23:21
ComboBoxのitemにフォルダにあるmstファイルの一覧を表示させる方法がわかりません。
どうかご教授お願いします。
698デフォルトの名無しさん:2007/07/18(水) 16:31:03
ComboBox1.Items.LoadFromFile('mstファイルの一覧');
つう話か?
699697:2007/07/18(水) 16:35:51
>>698
一つのフォルダの中に多数のmstファイルがあるのですが、
それをすべてComboBoxのitemに入れて表示させたいのです。

その方法が見つからず、ご質問させていただきました。
700697:2007/07/18(水) 16:40:53
説明不足でした。
itemに表示させたいのはファイル名です。
701デフォルトの名無しさん:2007/07/18(水) 16:42:53
FindFirst,FindNext,FindClose
702デフォルトの名無しさん:2007/07/18(水) 16:44:27
マルチスレッドのプログラムのサンプルを眺めていたら
スレッドのコンストラクタの中で、

inherited Create(False)

ってやっているやつと、

inherited Create(True)

ってやっているやつがあるんだけど、違いは何のでしょうか?
703デフォルトの名無しさん:2007/07/18(水) 16:45:44
TThread.Createの解説参照
704697:2007/07/18(水) 16:50:51
>>701
ありがとうございます。
ヘルプを見ながら頑張ってみます!
705デフォルトの名無しさん:2007/07/18(水) 17:01:40
>>703
constructor Create(CreateSuspended: Boolean);
でした。ありがとうございました。
706デフォルトの名無しさん:2007/07/18(水) 17:30:38
アイコンみたいなのをいっぱい作って
デスクトップ上でいろいろ動かしてみたいのですが、
こういうのはどうすればいいのでしょうか?
707デフォルトの名無しさん:2007/07/18(水) 17:47:28
うまく説明できませんが・・・

関数の宣言時の引数にconst を付けると、「関数内で値は変更しないから、値のコピー(値渡し)はしなくてもいいよ」
という、最適化のためのヒントをコンパイラに与えるってことですよね。レコード型などを受け取る関数に使うと思います。

もうちょっとコンパイラ寄りに考えれば、「値をコピーしないで、ポインタ(参照)を渡す」ということでしょうか。

では、関数内で、受け取った引数を書き換えることがないのであれば、
レコード型でもクラス型でもStringでもInteger等のプリミティブ型でもなんでも、 const を付ける べき なのでしょうか。

質問した理由はVCLを見ると、Integerを受け取る関数で、constを付けているときと付けていないとき両方あるので…
Integerだったらポインタと同じ大きさなので、値渡しで問題ないような気がするんですが。
最終的に値渡しにするか、参照渡しにするかはコンパイラが決めることなので、常にconst付けてればいいんですか。
708デフォルトの名無しさん:2007/07/18(水) 17:58:32
コード生成に影響はない。
なのでどっちも効率は同じ。
ただし
procedure A(const A: Integer);
のようにconstをつけてしまうと
A := A * 2;
のように手続き・関数内で値をいじれなくなるので不便なことがあるので
自分は一切つけてないな。
709デフォルトの名無しさん:2007/07/18(水) 18:18:44
>>706
勝手にデスクトップのアイコンをいじる事は出来ないけど、「デスクトップマスコット」
でぐぐれば色々参考になると思う。クリッピングリージョンによる切抜きとか。
710デフォルトの名無しさん:2007/07/18(水) 18:21:43
>>707
呼び出し側に「参照でもらうけども値は変えませんよー。」って保証するためのものだと思う。
711デフォルトの名無しさん:2007/07/18(水) 18:31:51
ここって回答者のレベルがひくすぎね?
あまりにも不適格で笑えるんんだが。
712デフォルトの名無しさん:2007/07/18(水) 18:39:30
笑えるんんだが。
713デフォルトの名無しさん:2007/07/18(水) 18:39:53
>>706 ありがとうございます。
いろいろやってみようと思います。
714デフォルトの名無しさん:2007/07/18(水) 18:42:45
>>711
ここには質問うけたら検索して探してあげるような変人しかいいない
つか大半ははコンポーネントの使い方に対する質問ばかりで
答えるるほうもウザがってるのもも事実
715デフォルトの名無しさん:2007/07/18(水) 18:47:01
変人しかいいない
答えるるほうもウザがってるのもも事実
716デフォルトの名無しさん:2007/07/18(水) 19:27:12
>>707
ヘルプの「定数パラメータ」を読めば判ると思うが、integerにconst付けても参照渡しにはならない
717デフォルトの名無しさん:2007/07/18(水) 20:17:08
浮動小数で、2変数の値を一致するか否か、の関数があったと思うのですが、
名前を失念してしましました。
どのたか、知りませんか?

Equalsでもないし、IsEqualでもなし・・・
718デフォルトの名無しさん:2007/07/18(水) 20:26:29
Math.SameValue でした。ありがとうございました。
719デフォルトの名無しさん:2007/07/18(水) 22:13:49
Delphi(デルファイ)について、
他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を
勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが
お礼はDelphiの布教と初心者の救済をお願いします。
720デフォルトの名無しさん:2007/07/18(水) 23:40:50
>>711
> ここって回答者のレベルがひくすぎね?
それなら、試しに君がレベルの高い回答とやらを実践してみてくれ。
721デフォルトの名無しさん:2007/07/19(木) 00:05:11
ここは回答者も何が何だか分からない回答を勇気をもって書き込むスレなんだよ。
722デフォルトの名無しさん:2007/07/19(木) 03:05:14
自演なんてじぇんじぇんしてないよ
723デフォルトの名無しさん:2007/07/19(木) 06:26:54
> ここって回答者のレベルがひくすぎね?

ていうか、Delphiの本ってなさすぎ。
聞くしかねーくらい。
724デフォルトの名無しさん:2007/07/19(木) 14:17:42
ツリービューとかリストビューでアイテムの選択状態を維持したまま、
他のコントロールにフォーカスを移す方法って無いですか?
ヘルプにあったCustomDrawItemのサンプルをやってみましたが
だめでした。
(サンプルがそのまま動かなかったので、少し変更して実行しました。)
よろしくお願いします。
725デフォルトの名無しさん:2007/07/19(木) 14:37:31
>>724
維持できているはず。
プロパティのHideSelectionをFalseにすれば、選択している状態を視覚的に確認できたはず。
726725:2007/07/19(木) 14:41:51
今確認したけど、やっぱり出来ているみたい。
何も小細工する必要ないっぽいです。
727724:2007/07/19(木) 14:55:42
ホントだ。
お恥ずかしい。
ありがとうございます。
728デフォルトの名無しさん:2007/07/19(木) 15:49:55
FindFirst関数のPATHの指定のところで'*.csv'とファイルタイプを指定したのですが、
*の部分を'文字列 + *.csv'のような条件に変える事はできるのでしょうか?

また、出来る場合の方法を教えていただけませんか?
729デフォルトの名無しさん:2007/07/19(木) 16:30:54
>>728
"test*.csv" とかにするのがフツーだと思うが

FindFirst のワイルドカードはあやしいので、
Masks ユニットの MatchesMask関数 でチェックするのが一般的らしい
730デフォルトの名無しさん:2007/07/19(木) 16:34:51
出来る、というかそのまんまだ。
731デフォルトの名無しさん:2007/07/19(木) 16:41:18
Exeと同じ場所ってことなら
IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName))+'*.csv'
とか。
732デフォルトの名無しさん:2007/07/19(木) 17:19:01
>>729,>>730,>>731さん
ありがとうございます。早速試してみます。
733デフォルトの名無しさん:2007/07/19(木) 19:30:44
ShellListViewでファイルをダブルクリックしたときに関連付けで開かれますが
それをプログラム側で別のアプリを使って開くようにするにはどうすればいいでしょうか。
734デフォルトの名無しさん:2007/07/20(金) 00:38:18
DelphiでC言語のmemcompの代わりになる関数ありますか?
大小関係も必要です。
735デフォルトの名無しさん:2007/07/20(金) 10:49:28
>>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;
736デフォルトの名無しさん:2007/07/20(金) 12:19:02
>>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;
737デフォルトの名無しさん:2007/07/20(金) 12:40:01
ShellTreeView/ListView/ComboBoxを気合入れて作り直したようなコンポってあったりする?
Samplesページにあるだけあって微妙に手抜き感が漂ってるんだよな・・・
738デフォルトの名無しさん:2007/07/20(金) 13:11:37
TStringListなんかで、LoadFromFileしてる最中って、
そのファイルを排他にしますか?

排他にするんだったら、排他にしないファイルの読み込みコンポはありまつか?
739デフォルトの名無しさん:2007/07/20(金) 13:25:40
書き込み禁止で読み込みは禁止してないなTStringList.LoadFromfileは。
書き込みも許可したいならTFileStream.CreateでfmOpenReadだけつければいける。
740デフォルトの名無しさん:2007/07/20(金) 13:34:37
あ〜、やっぱ書き込み禁止にしちゃいますか。

じゃ、TFileStreamしてみます。
741デフォルトの名無しさん:2007/07/20(金) 15:36:45
s1という変数に'2ch_テスト用ファイル_ここを切り出したい.txt'という文字列が入っていたとして、
『ここを切り出したい』という部分のみを取り出し、ラベルに表示させるにはどのような方法を用いればいいのでしょうか?

ちなみに『ここを切り出したい』より前の『テスト用ファイル』の部分は文字数が固定ではありません。
2ch _ _ の3つは固定文字です。
742デフォルトの名無しさん:2007/07/20(金) 17:25:23
質問です。クラスでこういう風に定義したいのですが

 property Font: TFont read GetFont write SetFont;

アプリケーション側からFont.Height:=100;とかのアクセスが出来ません。
function GetFont , procedure SetFontで代入したりAssignしたり
色々やっても反映されなかったりエラーが出たりします。
TFontをプロパティとして公開して、クラス内のFBitmap.Canvas.Font.Heightとかを書き換えたいんですが
どうすればいいんでしょうか?
743デフォルトの名無しさん:2007/07/20(金) 17:46:21
>>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 のこれらの処理を真似するといい
744デフォルトの名無しさん:2007/07/20(金) 18:43:01
>>743
FFont.OnChangeを置き換えたら出来たっぽいです
ありがとうございました
745デフォルトの名無しさん:2007/07/21(土) 03:16:44
>>471
テスト用ファイル か ここを切り出したい
に _ が含まれる可能性は?
746デフォルトの名無しさん:2007/07/21(土) 07:15:46
>>734
function memcmp(p1, p2: Pointer; c: integer): integer; cdecl; external 'msvcrt.dll';
747デフォルトの名無しさん:2007/07/21(土) 09:18:10
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
>>734さんではありませんが、
ふつう使うとしたら>>746さんと>>736さんのどっちを使うんでしょうか?
749デフォルトの名無しさん:2007/07/21(土) 13:09:14
とりあえず動けばいいなら>>746

誰かに使ってもらいたいなら、msvcrt.dll が無い場合もあるだろうから 自前で書いた方がいいと思うよ
750デフォルトの名無しさん:2007/07/21(土) 13:33:45
time:longword;

time:=timegettime+random(10000);

としたいのですが、timegettimeは符号無し randomは符号ありのようで
符号付型と符号無し型の演算により、オペランドが拡張されました
と警告が出てしまいます。
そのままコンパイル出来るのですが、これってどう回避したらいいのでしょう?
751デフォルトの名無しさん:2007/07/21(土) 13:42:19
代入する型にあわせて 片方を longword( 元) と型変換したらいいよ
752デフォルトの名無しさん:2007/07/21(土) 13:55:14
>>749 ありがとうございました。今度比較するときに使ってみようと思います。
753デフォルトの名無しさん:2007/07/21(土) 14:22:22
>>751
ありがとうございます。警告が消えました〜。
これってやらないとどうなるのですほ?
754デフォルトの名無しさん:2007/07/21(土) 14:30:46
なんかわらた
755デフォルトの名無しさん:2007/07/21(土) 14:34:00
>>753 やらなくても何の問題もないが、警告が出るので誰かがそのコード見ると、グチグチ言ってくる可能性がある。
756デフォルトの名無しさん:2007/07/21(土) 14:47:11
は?
757デフォルトの名無しさん:2007/07/21(土) 16:54:22
>>753
例えばtimegettimeが100、randomが-200の場合
100+(-200)=-100で符号なしLongWordに突っ込むとおかしなことになるよという
ありがたい警告なのでここでは無視してOK。

大抵左辺の方に合わせてキャストすれば警告は消えるけど機械的にやるのも危険。
効率が問題にならないならより大きなint64で受けておいたほうが無難かもね。
時間周りの処理のオーバーフローバグは再現したりしなかったりで検出が面倒だから。
758デフォルトの名無しさん:2007/07/21(土) 17:08:46
timeGetTimeは1ms単位だから 電源入れっぱなしのパソコンではやがてオーバーフローしてしまう
int64 なんかを使うとそういう時に 逆に問題になってしまう。

単純に、32bitで減算するのが一番いい。

なお time:=timegettime+random(10000);  をして
if Longint(timeGettime-time) <0 then ・・・・ とやるのは OK だけど

if timeGettime < time then ・・・・ とやってはいけない
759デフォルトの名無しさん:2007/07/21(土) 17:27:22
API自体のオーバーフロー対策はまた別の話。
760デフォルトの名無しさん:2007/07/22(日) 20:51:56
処理が終わったら勝手に死んでくれるスレッドってどうかけばいい?
OnTerminateの中でSender.Freeとしても死んでくれない・・・。
761デフォルトの名無しさん:2007/07/22(日) 21:06:45
TThread.FreeOnTerminateプロパティをTrueにするとか。
762デフォルトの名無しさん:2007/07/22(日) 21:07:30
>>761
それだ!!
サンクス
763デフォルトの名無しさん:2007/07/23(月) 04:24:12
indyをスレッド内で実行してコネクション張ってるときにアプリを終了すると
必ずindy周りでメモリーリークするのはどのように対処したらよいのでしょうか?
メモリリークはFastMM4で確認。
indyのGStackCriticalSectionの事ではありません。
スレッドはindyのもの(TIdThreadComponent)ではなく普通のTThread(又はそれを継承したもの)です。

TIdThreadComponentを使うとたまに固まることがあったのでそれを使えっていうのはなしお願いします。

それでは、よろしこんぱいる!!!!!!
764デフォルトの名無しさん:2007/07/23(月) 06:21:53
FindFirst/Next/CloseでファイルリストをTStringListに格納すると
当然Unicodeのファイル名はSJISに変換されてしまうんですが
ShellExecute等で実行したり操作しようとするとまったく存在しない為にエラーになってしまいます。

内部のデータ構造をWideStringに切り替えるのはちょっと無理なので
UI上の表示はSJISの不正確なままでよいとして
何とかファイル操作だけは正常に行えるようには出来ないでしょうか?
例えばUnicodeだったら8.3形式に変換するとかそんな感じで。
765デフォルトの名無しさん:2007/07/23(月) 06:31:44
俺なら1も2もなくStringlistをやめる
766デフォルトの名無しさん:2007/07/23(月) 06:43:27
FindFirstFileExW / FindNextFileW / FindClose
で cFileName と得たファイル名で FileExistしてみてエラーなら
cAlternateFileName を採用するようにしたら?
767デフォルトの名無しさん:2007/07/23(月) 10:58:56
>>764
string型を使う以上、そういう問題は作る前に普通は気づくんだけどな。
768デフォルトの名無しさん:2007/07/23(月) 12:23:02
回答者のレベル低すぎw
769ななしへたぐらま ◆XcB18Bks.Y :2007/07/23(月) 12:32:24
ヘタレですが思いつく解決策…

・WideStringの文字列リストもどきを作る
・TStringListにUTF-8に変換して格納,ShellExecuteなどを呼び出すときにWideStringに再変換
770ななしへたぐらま ◆XcB18Bks.Y :2007/07/23(月) 12:35:52
ところで>>741はどうなりました?
>>745のレスに気づかなかったのでしょうか.
771デフォルトの名無しさん:2007/07/23(月) 13:52:14
FillCharをソースから探すと、System.pasに宣言とコードが見つかりますが
(これってMozilla Public Licenseだったんですね)

procedure _FillChar(var Dest; count: Integer; Value: Char);

という “髭付きの形で” 宣言されてるのが分かります。
しかしながら実際使用する際は、髭無しで使用することになるのですが
(髭を付けるとエラーになる)その仕組みは、どこでどういう指定がなされて
現れてるものなのでしょうか?

自前で髭を付けた関数は、当然の様に髭が必要となります。
また、StringOfCharでは、インラインアセンブラの中で_FillCharと髭付きで
CALLもされています。

その辺の差異も併せてご教授下さい。
772デフォルトの名無しさん:2007/07/23(月) 14:13:13
コンパイラマジックとか言うやつじゃねぇ??
773デフォルトの名無しさん:2007/07/23(月) 14:15:48
UTF8へ変換する時、Delphiに用意されているUTF8Encode関数使う時は要注意だな。
この関数まずいよ。

774デフォルトの名無しさん:2007/07/23(月) 14:35:21
>>773
何がどうまずいの?
775デフォルトの名無しさん:2007/07/23(月) 14:48:23
まぁ、バグではないだろうけど、UTF8というより、今ホットな話題のCESU-8にエンコーディング
するから使う時要注意と書いただけ。ソース見れば一目瞭然。まぁ、そもそも、DelphiのWideルーチンはサロゲート気にしてないんだけどさ。
ttp://www.wdic.org/w/WDIC/CESU-8
776デフォルトの名無しさん:2007/07/23(月) 15:11:11
全然まずくないんですが
単なる知ったか?
777デフォルトの名無しさん:2007/07/23(月) 16:47:15
本当のUTF8期待してUTF8Encode使ったらまずいだろ?だから、使う時要注意って書いたんだよ?
おまえ馬鹿?
778デフォルトの名無しさん:2007/07/23(月) 16:54:11
隔離スレ逝ってね
779デフォルトの名無しさん:2007/07/23(月) 16:59:11
レスはええな。NEETでやること無くて、ここ張り付いてるの?お馬鹿さん。
780デフォルトの名無しさん:2007/07/23(月) 17:34:57
自己紹介乙
781デフォルトの名無しさん:2007/07/23(月) 18:15:27
>>773
マジかよ…
直さないと逝けないわけだが、もうDelphi忘れちゃったよ…

>>776
普通にまずいだろ…常識的に考えて…
782デフォルトの名無しさん:2007/07/23(月) 18:38:05
ヒント:自演
783デフォルトの名無しさん:2007/07/23(月) 19:28:34
isvalidutf8 とかいう関数がよういされていないかな
784デフォルトの名無しさん:2007/07/23(月) 19:37:03
WideStringはUCS2でありUTF16ではない。
つまりサロゲートなんてないのだ。低脳。
785デフォルトの名無しさん:2007/07/23(月) 20:29:39
>>784
あーあ、もう少し遊ぼうと思ってたのにw
786デフォルトの名無しさん:2007/07/23(月) 20:37:48
やっぱり知ったかじゃん
俺の言ったとおり
787デフォルトの名無しさん:2007/07/23(月) 20:50:35
どーでもいいけど>>763も答えてくれませんかね〜?
ここってネットワーク系の質問がよく流されてるみたいだけど何で?
得意な人がいないってこと?
788デフォルトの名無しさん:2007/07/23(月) 20:54:19
>>787
終了時にしか解放しないものでのメモリリークなら気にするな
9x系OSでの使用を前提としてるなら知らん
789デフォルトの名無しさん:2007/07/23(月) 21:05:37
・Delのバージョンくらい書け
・Indyのバージョンくらい書け
・最新バージョン試したかどうか、パッチ全部あてたかくらい書け
・リークしたヒープが何のクラスまたは何のデータかくらい調べろ
790デフォルトの名無しさん:2007/07/23(月) 21:53:51
>>789

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のことじゃないって最初に書いてるじゃん・・・。
792デフォルトの名無しさん:2007/07/23(月) 22:00:38
TIdThreadComponentを使え
以上
793デフォルトの名無しさん:2007/07/23(月) 22:04:00
>>790
お前のコードの書き方が悪い
以上
794デフォルトの名無しさん:2007/07/23(月) 22:28:22
>>787
どーでもいいんならだまってろよ
795デフォルトの名無しさん:2007/07/23(月) 22:30:09
聞く側が凄く横柄なのもゆとりの影響?
796デフォルトの名無しさん:2007/07/23(月) 22:37:58
ヒント:夏休み
797デフォルトの名無しさん:2007/07/23(月) 22:49:46
なるほど
798デフォルトの名無しさん:2007/07/23(月) 23:33:20
すみません。
教えてください。
delphiをまだほとんど理解していないのですが、
サンプルプログラムというのがあります。
これをすべてダウンロードして使用したいのですが、
ダウンロードしても使い方が分かりません。
どうやって使えばいいのでしょうか???
799デフォルトの名無しさん:2007/07/23(月) 23:48:28
開く
コンパイル
実行
800デフォルトの名無しさん:2007/07/24(火) 00:10:51
コンパイルっていうのは・・・・?
メニューバーのプロジェクトの中にある
”project1をコンパイル”というやつですか?
801デフォルトの名無しさん:2007/07/24(火) 00:11:44
プロジェクトを開く → 実行(F9)
802デフォルトの名無しさん:2007/07/24(火) 00:11:54
聞く前に試せよ
803デフォルトの名無しさん:2007/07/24(火) 00:13:05
ctrl+f9
804デフォルトの名無しさん:2007/07/24(火) 00:13:38
>>802
厨房がそんな高度なことできるか
805デフォルトの名無しさん:2007/07/24(火) 00:59:28
>>790
今日は気分がいいから俺がやさしく教えてあげる。
まずスレッドに不可視のウインドウをくっつけなさい。
くっつけたらメインが終了するときにメッセージを投げなさい。
これでスレッドの大半のリークは消える。
生のスレッドのままじゃいい仕事は出来ませんぜ。

まだリークが残ってるならコンポを生成する時に親を指定しなさい。
そう、もちろん親はメインウインドウだ。
これでリークはなくなる。

以上、二周りも年下の娘と先月結婚した天才より。
806デフォルトの名無しさん:2007/07/24(火) 01:06:23
>>805
>以上、二周りも年下の娘と先月結婚した天才より。
kwsk
807デフォルトの名無しさん:2007/07/24(火) 02:49:10
>>805
メモリリークなんてどうでもいいので最後の一文を俺にもできるよう教えてください
808デフォルトの名無しさん:2007/07/24(火) 02:53:55
>>790は単にスレッドの終了の仕方がまずいだけだろ
809デフォルトの名無しさん:2007/07/24(火) 03:09:27
ウィンドウ作ったら、メッセージポンプまわさにゃならんだろ。まんどくさい
810デフォルトの名無しさん:2007/07/24(火) 03:18:48
スレッドって今一正常な終了の仕方がわからんのよねぇ
某、del製通信ソフトもかなり漏れてるしさ
WaitForMultipleObjectsなんかで終了を待ったりするのが正常なんですかね、天才さん?
811デフォルトの名無しさん:2007/07/24(火) 07:54:16
ttp://vipdelphi.run.buttobi.net/cgi-bin/upload.html
のスレッドデモを参考にするとよいよ。キーはturboだったけかな
812デフォルトの名無しさん:2007/07/24(火) 07:57:15
>>811
タイマー使ってるところが笑えるな。
終了に関してはみんないろいろやってんのねぇw
813デフォルトの名無しさん:2007/07/24(火) 08:05:37
TThreadはコンポーネント化しちゃうといろいろ楽だよ。
OnStartで初期化処理
OnTerminateで終了処理
OnExecuteThreadMainにメインの処理書いて
Synchronize;で呼び出されるOnSynchronizeで同期処理。
UseThread := Falseにすると
OnExecuteThreadMainはプライマリスレッドで実行されデバッグも簡単。
814デフォルトの名無しさん:2007/07/24(火) 08:09:43
流れ豚切りで初心者な質問ですいません

階層フォルダ/ファイルのデータを
ツリービューを使ってフォルダ/ファイル名のみ表示させ
特定拡張子のファイルが選択される時のみ
内部データを行ごとに別の場所に表示
とさせたいのですがFindFirstすらうまく使えてません;
どんな感じで書いたら良いのでしょうか。
環境はDelphi6peronal Build6.240up2です
815デフォルトの名無しさん:2007/07/24(火) 08:27:30
>>813
なんかスレッドセーフかどうかがぐじゃぐじゃになりそうだな
816デフォルトの名無しさん:2007/07/24(火) 08:29:17
初期プロジェクトの保存フォルダってレジストリのどこをいじったら変更できたっけ?
817デフォルトの名無しさん:2007/07/24(火) 08:35:28
>>812
笑えるってどこが?
818デフォルトの名無しさん:2007/07/24(火) 09:06:18
ほんと、Delphiという殻に閉じこもってるレベルの低いやつらばっかだな。ここは。
819デフォルトの名無しさん:2007/07/24(火) 09:08:12
だったら何か例をしめしてくれよ
820デフォルトの名無しさん:2007/07/24(火) 09:08:16
Delphi(デルファイ)について、
他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を
勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが
お礼はDelphiの布教と初心者の救済をお願いします。
821デフォルトの名無しさん:2007/07/24(火) 13:02:01
Delphi7でコンポーネントを作っています。
そのコンポーネントにColumnsという公開プロパティを持たせています。
このColumnsプロパティはTListViewのColumnsプロパティの様に
設計時にオブジェクトインスペクタから[・・・]ボタンでダイアログを表示させて
リストを編集できるようにしたいのです。
TListViewのプロパティエディタを流用したいのですが、該当のソースが見つかりません。
流用が可能であればそのプロパティエディタがドコにあるのか教えてください。
また、半分あきらめて自分でプロパティエディタと編集ダイアログを作りかけています。
Columnsプロパティの[・・・]ボタンをクリックさせてフォームを表示させることが出来ましたが
そのフォームのアイテムをクリックしたときにそのアイテムに紐づけたColumnのプロパティを
オブジェクトインスペクタに表示することができません。

どちらの解決策でも構わないので、教えてください。
822デフォルトの名無しさん:2007/07/24(火) 13:24:30
823821:2007/07/24(火) 13:44:07
>822
ありがとう!ためしてみます!!
824デフォルトの名無しさん:2007/07/24(火) 16:06:53
HTMLヘルプにHelpContextで対応させるのって、Del7の頃は自前でいろいろやったんだけど
Del2007になっても同じ?Del側で対応してくれたりしてる?
825デフォルトの名無しさん:2007/07/24(火) 18:54:06
マルチモニタ対応ってどうやるんでつか?
826デフォルトの名無しさん:2007/07/24(火) 19:07:20
>>825
何をどう対応させたいの
827825:2007/07/24(火) 19:14:28
起動する画面のプライマリーモニター/セカンダリーモニターを切り替えたいです。

調べてみたら、Screen.Monitors[i].LeftのプロパティをFormにセットすれば良いのは分かりましたが、
i=1がプライマリー、i=0がセカンダリーでイメージと逆なんですね。

何か厄介ですね。
828デフォルトの名無しさん:2007/07/24(火) 19:51:50
>>827
順番とプライマリ/セカンダリは関係ない
Primaryプロパティ見ろってヘルプにも書いてあるだろ
829デフォルトの名無しさん:2007/07/25(水) 09:10:49
イラクが韓国人質を解放する条件を部隊隊除の他に25日の準決に負ける事を追加してきたんだけど・・・
最悪だなあの国。みてて笑っちまった!
830デフォルトの名無しさん:2007/07/25(水) 10:09:04
「隊除」ってなに?
831デフォルトの名無しさん:2007/07/25(水) 12:15:09
if Rewrite(F) then〜
という文を書いたところ、エラーが発生しました。
Boolean型ではないと言われたので、調べたところ条件をつければ良いとわかりました。

if Rewrite(F) = ○○ then〜と書きたいのですが、Rewriteは戻り値として何を返すのでしょうか?
初歩的(?)な質問かもしれませんが、ご教授お願いします。
832デフォルトの名無しさん:2007/07/25(水) 12:26:39
戻り値はありません
833デフォルトの名無しさん:2007/07/25(水) 12:37:39
>>832
ありがとうございます。
他に何か方法がないか、自分なりにもう一度探してみます。
834デフォルトの名無しさん:2007/07/25(水) 13:34:40
イラク?
835デフォルトの名無しさん:2007/07/25(水) 15:24:40
デュアルCPUやクアッドCPUに対応したソフトを作るにはどうしたらよいのでしょうか?
そもそもDelphiで出来ますか?
836デフォルトの名無しさん:2007/07/25(水) 15:31:09
TTheadで処理をスレッドに分割すればいいんじゃねーの
837デフォルトの名無しさん:2007/07/25(水) 15:33:22
>>835
マルチスレッド
838デフォルトの名無しさん:2007/07/25(水) 15:34:36
あらま。
マルチコア対応のソフトってたんなるマルチスレッド対応ってことなのか。
難しく考えすぎた。
サンクス。
839デフォルトの名無しさん:2007/07/25(水) 15:53:58
というかexeをいっぱい起動すればよろしい。
840デフォルトの名無しさん:2007/07/25(水) 22:00:51
FreeNotificationってなに?
これで通知されるコンポを登録すると、通知された側のコンポはどこで何をするの?
なんかヘルプみてもよくわからん。
841デフォルトの名無しさん:2007/07/25(水) 22:50:50
たとえば、他のコンポーネントを参照するプロパティを持つコンポーネントがあったときなどに、
参照先のコンポーネントが破棄されたときに、そのプロパティをnilに設定しするとか。
842デフォルトの名無しさん:2007/07/25(水) 23:30:42
んーと、TEditのFocusControlでいったらどっちが登録する側で、どっちが登録される側?
TEditが登録される側で、TLabelが登録する側であってる?
あと登録した(された?)側の対応するイベントって何でしょう?
843デフォルトの名無しさん:2007/07/25(水) 23:49:10
TLabelが他のコンポーネントを参照するプロパティFocusControlを持ってるから、
TLabelが登録する側だよ。でも、実際は、FreeNotificationで登録するとお互い登録し合うことになる。
>あと登録した(された?)側の対応するイベント
ん?デストラクタとか?
上の例でいうと、TEditが破棄される時に、TLabelのNotificationメソッドが呼ばれ、
破棄が通知される。
844デフォルトの名無しさん:2007/07/26(木) 00:00:46
>>843
おーなるほど、Notificationでいろいろすればいいのねん。
よくわかりました。
845デフォルトの名無しさん:2007/07/26(木) 00:17:41
>>844
いやいや、普通に使う分にはいらない
846デフォルトの名無しさん:2007/07/26(木) 00:45:49
TComponent.Create(AOwner: TComponent)のAOwnerに
TPanelとかのコンテナクラスを指定すると何でAVが発生するの?
TFormとかなら発生しないのに、とっても不思議。
847デフォルトの名無しさん:2007/07/26(木) 01:53:03
VCLソース内をトレースすればわかる。
848デフォルトの名無しさん:2007/07/26(木) 10:44:10
イベントが実行されてるときはボタンを押せなくしたいのですが、
どのような関数を使えばいいのでしょうか?
849デフォルトの名無しさん:2007/07/26(木) 11:08:24
button1.enabled:=false;
850デフォルトの名無しさん:2007/07/26(木) 11:32:07
self.enabled:=false;
//イベント処理
self.enabled:=true;
851デフォルトの名無しさん:2007/07/26(木) 11:39:13
ありがとうございます!無事解決しました!!
852デフォルトの名無しさん:2007/07/26(木) 23:25:58
ハガキ大の紙に大きくIntegerの中の数字を印刷したいのですがどうすればいいのですか?
853デフォルトの名無しさん:2007/07/26(木) 23:38:30
小さくは印刷できてるの?
854852:2007/07/26(木) 23:51:23
>>853
はい。
しかし左上にとても小さく印刷されます。
855デフォルトの名無しさん:2007/07/27(金) 00:06:21
>>854
それはどうやったんだい?
856デフォルトの名無しさん:2007/07/27(金) 02:47:25
TntUnicodeControlsってどのバージョンまでがフリーなんだっけ?
857852: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;
858デフォルトの名無しさん:2007/07/27(金) 14:33:55
>>857
素直にPrinter関数使えば?
ヘルプにやり方載ってるし
859デフォルトの名無しさん:2007/07/27(金) 23:15:57
1〜100までの数字をランダムに重複なしで10個選び出すアルゴリズムはどんなのが考えられますか?

random(100)+1で重複していればやり直しでは効率が悪すぎますので。
860デフォルトの名無しさん:2007/07/27(金) 23:21:44
Delphiと関係ない。
アルゴリズムが分かってから、またおいで。
861デフォルトの名無しさん:2007/07/27(金) 23:32:09
http://www.geocities.jp/oldbig_ancient/KodaiHP3.htm
にパスカルであったのでこれを使うことにします。
862デフォルトの名無しさん:2007/07/27(金) 23:42:18
>856
2.3.0かな?
863デフォルトの名無しさん:2007/07/28(土) 04:54:20
>>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デフォルトの名無しさん:2007/07/28(土) 04:59:19
そこまでやったら重複やり直しのほうが軽いだろ
865デフォルトの名無しさん:2007/07/28(土) 05:03:31
>>864
そうか?
つか、このソースでいいたいことは種用意してそっから適当に差っぴけってことなんだけどね。

軽くしたいならこの考えでゴニョゴニョやっていくが、あんたはどーすんの?
866デフォルトの名無しさん:2007/07/28(土) 05:10:01
10個選ぶくらいなら重複をやりなおすわw
867デフォルトの名無しさん:2007/07/28(土) 05:12:15
・・・まぁいいか、夏休みだしな。
868デフォルトの名無しさん:2007/07/28(土) 08:22:24
100から10なら重複をみながらやり直しでもいいが、
1000から999個のような場合は明らかに863がいいとおもう
スマートだな
869デフォルトの名無しさん:2007/07/28(土) 08:29:21
雨が降っても選挙行こうな!!

自分の選挙区に道路とか空港とか利益誘導ばっかり
主張するやつには投票するなよ。

世襲議員、2世議員は投票するなよ

選挙前に限って「弱者のための政治」というやつには気をつけろ!自民党のベテラン議員に多い!

委員会で質問しないようなやつには投票するなよ

業界団体の利益ばかり主張するやつに投票するなよ

ホームレスとかネットカフェ難民、介護難民問題を
取り上げる「弱者のため」の議員を探そう!!
870デフォルトの名無しさん:2007/07/28(土) 09:56:48
deleteが重く感じる理由なんだろう。 一番先頭とswapするようにして
idx := Random(tmp.Count-(n-1) );
Memo1.Lines.Add(tmp[idx]+(n-1) );

とすれば、繰り返し使える
871デフォルトの名無しさん:2007/07/28(土) 10:52:37
重複チェックのほうがコストかかるような気がするのは俺がアマグラマだから?
872デフォルトの名無しさん:2007/07/28(土) 11:02:50
>>870
重複してますがな、旦那
873デフォルトの名無しさん:2007/07/28(土) 11:06:48
>>863
TStringList なんか使ったら重いよ

>>871
数値を扱うコストは文字列を扱うコストより圧倒的に小さい
取り出す個数が極端に多くなければ重複チェックのほうが軽いよ
874デフォルトの名無しさん:2007/07/28(土) 11:13:01
そうじゃなくて文字使わずに配列やらポインタとか使って最適化した場合の話。
仮に早かったとしてチェックしてやり直しなんてコード、コスト削減の為に一般的にやんの?
875デフォルトの名無しさん:2007/07/28(土) 11:18:20
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;
これでどうよ
876デフォルトの名無しさん:2007/07/28(土) 11:18:51
>  tmp := TStringList.Create;
すまん、この行はいらんw
877デフォルトの名無しさん:2007/07/28(土) 11:21:55
>>874
最適なアルゴリズムなんて条件によって変わる
ソーティングでもおざなりでいい時はバブルソート使うしな
878デフォルトの名無しさん:2007/07/28(土) 11:49:22
も〜なんでもいいじゃん
>>863>>865を言いたかった
それを実践してみたのが>>875
そしてアルゴリズム次第で重複チェックしてリトライのほうが速い場合もある

というわけで宿題タイムはこれで糸冬 了..._〆(゚▽゚*)

はい、次〜
879デフォルトの名無しさん:2007/07/28(土) 14:15:29
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;
880デフォルトの名無しさん:2007/07/28(土) 14:26:13
>>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.
881デフォルトの名無しさん:2007/07/28(土) 23:18:42
誰も相手にしなかったくせに何で>>863がソース提示すると一斉に我も我もとレスする奴がいるんだろう・・・
882デフォルトの名無しさん:2007/07/28(土) 23:22:32
procedureやfunctionのあるレスを見たらテンションが上がるのが性です
883デフォルトの名無しさん:2007/07/28(土) 23:26:05
アルゴリズムを問われる質問は皆スルーしてるし
アルゴリズムを考えるのが不得意な人が殆どと言ってみるテスト
884デフォルトの名無しさん:2007/07/29(日) 00:27:23
土方プログラマが多いってこった。
885デフォルトの名無しさん:2007/07/29(日) 00:28:49
>>881
なんで終わってる話題を蒸し返してくさす馬鹿>>881が居るんだろう・・・
886名無しさん@そうだ選挙に行こう:2007/07/29(日) 00:47:23
>>884
ここはもう底辺しかのこってないってことか
887名無しさん@そうだ選挙に行こう:2007/07/29(日) 01:58:17
そういうことにしたいのですね:-p
888名無しさん@そうだ選挙に行こう:2007/07/29(日) 05:17:55
unko-
889ななしへたぐらま ◆XcB18Bks.Y :2007/07/29(日) 15:48:24
かつてはランダムに何かするアルゴリズムは適当に作っていましたが
奥村晴彦氏の『アルゴリズム事典』を見て
自分の考えたアルゴリズムが間違っていたのにショックを受けたものです.
890名無しさん@そうだ選挙に行こう:2007/07/29(日) 15:54:33
それはいい経験をしましたね
891名無しさん@そうだ選挙に行こう:2007/07/29(日) 17:32:49
Delphi7なんですけど
久々に起動して以前作ったプログラムを修正してコンパイルしようとしたのですが
凄く動作が遅くなってるのです、例えばコード補完時やコンパイルの速度も明らかに遅いです
同様の現象を解決された方はおられますか?
892名無しさん@そうだ選挙に行こう:2007/07/29(日) 17:56:54
暑いからヘバってんじゃね?
893名無しさん@そうだ選挙に行こう:2007/07/29(日) 18:04:52
変なコンポやパッケージ外せ
894名無しさん@そうだ選挙に行こう:2007/07/29(日) 18:23:32
デフラグ
895名無しさん@そうだ選挙に行こう:2007/07/29(日) 19:23:53
>>891
ウィルスチェック
あと、メモリ増設してみれ
896デフォルトの名無しさん:2007/07/29(日) 20:55:51
オプソのDelphi製コミックビューアくれ
897デフォルトの名無しさん:2007/07/29(日) 20:57:28
てめぇで作れカス
898デフォルトの名無しさん:2007/07/29(日) 22:07:09
>>892-895
停電でつかえなかった orz
わかった、エアコン全快でコンポ外してデフラグかけてウイルスチェックしてみます
899デフォルトの名無しさん:2007/07/30(月) 10:10:34
StringGridのセル内に表示させた文字列を、中央揃えにする方法がわかりません。
よろしくお願いします。
900デフォルトの名無しさん:2007/07/30(月) 10:15:06
>>899 自分で描画すんだよ
901ななしへたぐらま ◆XcB18Bks.Y :2007/07/30(月) 23:01:57
>>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です.
902ミ,,゚Д゚ミノ ◆A6VzDeLphI :2007/07/31(火) 01:43:16
さらなる、勉強のために
こんなのもいかがかしら。

Delphi Tips - 複数行入力できる StringGrid を作成する
http://support.codegear.com/jp/article/35955
903デフォルトの名無しさん:2007/07/31(火) 02:24:50
蛇足の典型例
904デフォルトの名無しさん:2007/07/31(火) 06:17:26
>>903のこと?
905デフォルトの名無しさん:2007/07/31(火) 14:17:08
夏厨も現れず、今年は閑散としてていいね。来年もあるといいね・・・

906デフォルトの名無しさん:2007/07/31(火) 14:51:00
EmptyStringとは一体なんでしょうか?
ヘルプで探してもでてこないし、困っています。
907デフォルトの名無しさん:2007/07/31(火) 15:03:33
空文字列をResultに突っ込むときに内部定数で使われてるだけじゃねーの。
何に困ってるのか知らんけどSource\*.pasをgrepしろ。
908デフォルトの名無しさん:2007/07/31(火) 23:03:18
>>902
こういう濃いサイトに限ってJavaScriptかなんかでダウソできなくしてやがる・・

イジワルやめてくれ!
909デフォルトの名無しさん:2007/07/31(火) 23:35:08
turbo delphiでsqliteを使用するサンプルとかどこかに無いでしょうか?
ぐぐってみたけどぐぐりかたが悪いのか見つからないんですorz
910Delフサギコ ◆A6VzDeLphI :2007/08/01(水) 00:09:22
はーい       _____________
   ∧,,∧∩  /
  ミ,,゚Д゚彡 < 質問っす
   U  ミ   \
 @ミ  ミ       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ∪''∪

InputBox機能を使いたいのですが
諸般の事情で容量節約しなければいけなく
Dialogs.pasは使いたくないので
APIを使用したいです。
そういうAPIはありますか?
Delphiでの使い方を知ってたら教えてください。
911デフォルトの名無しさん:2007/08/01(水) 00:12:07
Win32API直叩き&リソースエディタでダイアログ作る
912Delフサギコ ◆A6VzDeLphI :2007/08/01(水) 00:27:54
       レス
  ∧,,∧  ドーモドモー
 ミ,,゚Д゚彡
 ミつ[|lllll]).
〜ミ   ミ
  ∪''∪ 人力検索してましたら、このあたりが。

第24章 ダイアログボックスの研究 その2 インプットボックス
http://homepage2.nifty.com/Mr_XRAY/Halbow/Chap24.html#Chap24-2

単語がかぶってたら、ググるのも難しくなってきますね。
913デフォルトの名無しさん:2007/08/01(水) 00:47:46
>>909
ttp://www.itwriting.com/sqlitesimple.php
ちゃんとturboでも動く
914デフォルトの名無しさん:2007/08/01(水) 01:47:15
>>913
おぉありがとうございます。無事動きました。
915デフォルトの名無しさん:2007/08/01(水) 08:35:41
>>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 では、デストラクタは定義できないですよね?
920デフォルトの名無しさん:2007/08/01(水) 16:06:12
Delphiの基本構造は、

try
 //処理
finally
 //コンポーネント.free
end

じゃね?
921デフォルトの名無しさん:2007/08/01(水) 17:19:05
>・使い終わったら、明示的にデストラクタを呼ばせる
基本はこれ。

コンポーネントの場合はコンストラクタでオーナーを指定すれば、オーナーが破棄されるときオーナーが勝手に破棄してくれる。
922デフォルトの名無しさん:2007/08/01(水) 17:39:11
サンクス。

やっぱ、明示的に開放、Delphi流かあ。
(単なる構造体で、コンポーネントではないので・・・)

やはり、使う側で、try-finally-endしてもらって解放が定石ですか
923デフォルトの名無しさん:2007/08/01(水) 17:39:50
x やっぱ、明示的に開放、Delphi流かあ。
o やっぱ、明示的に開放が、Delphi流かあ。
924デフォルトの名無しさん:2007/08/01(水) 17:41:47
分からないことに無理に応えて質問者を混乱させるのやめようぜ。
Delphiでもスコープ外れたら自動開放するようにできるよ。
確かShellApiあたりでそんなコード見た希ガス
925デフォルトの名無しさん:2007/08/01(水) 18:21:22
他のアプリをアクティブにするのってどーすればいいの?ソフトキーボード作りたいの。
フォーム上のボタンがクリックされたら直前のアプリにキーを送信したいんだけど、
直前のアプリのハンドルは取得出来るんだけどそのアプリをアクティブにする方法がわからない…
ぐぐってやっとこんなの見つけたんだけどうまく行かん。誰か教えて〜
ちなみに環境は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;
926デフォルトの名無しさん:2007/08/01(水) 18:40:50
>>925
余計なコードを外して単純化することから始めろよ
927デフォルトの名無しさん:2007/08/01(水) 18:52:14
928デフォルトの名無しさん:2007/08/01(水) 18:57:21
class型のクラスではなく、object型のクラスでも作れば?
929925:2007/08/01(水) 18:58:56
>>927
出来ました!大感謝です!
今日ずっと悩んでたのに、こんな簡単に出来ちゃうんだ
ビックリ

>>926
その通りでしたね…
出来ない出来ないといじってるうちに、ソースがどんどん複雑になっちゃってたみたいです。

お二人とも有難うございました。
930デフォルトの名無しさん:2007/08/01(水) 19:11:17
>>924
もし、それができるなら教えてほしいっす!

ShellAPIはざらっと名がみましたが、APIしかなかたです。

>>928
Objectもデストラクタ動きませんよね
931Delフサギコ ◆A6VzDeLphI :2007/08/01(水) 19:23:26
           _________
   ∧,,∧   / ちょうど
  ミ,,゚Д゚彡 <  新型のrecord型
   ミつ旦(ミ~~ \ を調べようかと。
 @ミ   ミ     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ∪''∪

Delphi 7以降の言語およびコンパイラの新機能
http://dn.codegear.com/jp/article/34409

recordにコンストラクタとデストラクタを実装すると
どうなるんだろうか...

var
 MyRecord: TMyRecord;
begin
 MyRecord.Create(Value);
end;
みたいなコードが書けるみたいだ...


932デフォルトの名無しさん:2007/08/01(水) 19:30:26
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節で解放するかも
934デフォルトの名無しさん:2007/08/01(水) 21:10:58
>>933
すぐ上の方で書かれてることをさも今気づいたみたいに語るテクニックが素晴らしいですね
935デフォルトの名無しさん:2007/08/01(水) 22:01:16
>>934
ごめん。書いた人同じなんで・・・
936Delフサギコ ◆A6VzDeLphI :2007/08/01(水) 22:26:13
[Delphi-ML:41732] Re: How to Call _Dispose
http://www2.big.or.jp/~osamu/Delphi/browse.cgi?index=41732

           _________
   ∧,,∧   / こっちより、
  ミ,,゚Д゚彡 <  >>932さんの
   ミ つ旦)~~ \ コードのほうが
 @ミ   ミ     すっきり
   ∪''∪     してそうですね。

勉強になります。
Recordにはデストラクタはつけられず
Record.Createは単なるメソッドの一つですな。
937デフォルトの名無しさん:2007/08/01(水) 23:24:09
>>936
932 さんのは TInterfacedObject を継承している Class 限定でしょ。
それはそれで有りと思うけど、すっきり云々の話では無いだろ。
938デフォルトの名無しさん:2007/08/01(水) 23:38:52
レコード型は普通の変数と同じく、スコープを外れると自動的に開放される。
それが気持ち悪いなら、そのレコード型のポインタを定義して、new dispose
で明示的に生成・開放をするのが正解。

いずれにしろ、生成・開放をペアで実行するコードを書く癖をつけることは
非常によいことだと思う。
939デフォルトの名無しさん:2007/08/01(水) 23:54:08
結局、スマートにはかけない、ということで、いいでしょうか?
実は、数年前にも、できないか悩んでいたので、
この際、はっきり、Delphiではできないということで。

>>936
これも結局、解放したい場合に、interfaceの変数を追加しないといけないですよね

>>938
いや、そうじゃなくて・・・。
デストラクタなどを使って、自動的に開放されるようにしたいんですが。
構造体に含まれるstringとかのことを言ってらっしゃいます?
940デフォルトの名無しさん:2007/08/01(水) 23:55:38
C++とかの構造体を知らない人に説明しても理解してもらえないと思う・・・
941デフォルトの名無しさん:2007/08/02(木) 00:01:48
何したいのか良く分からんけど、
initialization/finalization
ではなくて?
942デフォルトの名無しさん:2007/08/02(木) 00:02:45
悪いけど全然違う。
943デフォルトの名無しさん:2007/08/02(木) 00:04:23
>>940
C++の構造体とDelphiのRecord型では、何が違うの?教えて!

結局は、動的に生成したインスタンスへの参照が無くなったら
自動的にメモリ開放したいってだけじゃないの?
だとしたら [Delphi-ML:41732] みたいになるのだろうから
スマートな書き方はないんじゃまいか。
944Delフサギコ ◆A6VzDeLphI :2007/08/02(木) 00:32:07
    ∧,,∧    次スレの季節。
   ミ,,゚Д゚彡   
    ミ つ旦)~~    お茶どうぞ
  〜と,,,~),,~)  旦~~
]]]]]]]]]]]]]]]]]]]]]]]]]]]]

>>937さん
おっと、
>TInterfacedObject を継承している Class 限定
ってところが、わかってなかったですよ。失礼。

>>919さん
>record では、デストラクタは定義できないですよね?
はい。できません。

>>943さん
漏れも[Delphi-ML:41732]が限界かと思う。

内容が俺にはよくわからないのだが紹介しておきます。

Delphi@WCIMH
ObjectPascal Magic Programming Garbage Collector
http://hp.vector.co.jp/authors/VA028375/delphi/delphipascal_xx_garbage_collector.html
945デフォルトの名無しさん:2007/08/02(木) 02:50:58
つーかその移植したいというソースを貼れば可能か否か速攻で解決するのに
情報小出しにしてそれはダメだとか何とか難癖つけてるのは何故?
あとID出ない板なんだし質問者が分かるようにレス番くらい入れようよ
946デフォルトの名無しさん:2007/08/02(木) 04:53:30
ボタンなどに使用する画像はただでもらえるところ無いでしょうか?
947デフォルトの名無しさん:2007/08/02(木) 05:22:10
WideStringに入っている文字列に1個1個アクセスして、その文字がひらがなだったら取り出したい。
if WStr[i]='あ' or WStr[i]='い' or WStr[i]='う' or …

とやるしか方法が思いつかないのですが、ベテランの方ならどうするのでしょう?
948デフォルトの名無しさん:2007/08/02(木) 05:49:52
>>931
どれもそそる拡張ばかりだな・・・・
Delphi7ベースで移植してくれよ
IDEがもっさりしすぎなんだよ、D7以降のやつはよ。
949デフォルトの名無しさん:2007/08/02(木) 07:12:03
>>947
if (WStr[i]>='ぁ') and (WStr[i]<='ゞ') then
95020代、女です…:2007/08/02(木) 07:20:06
>>949
ありがとうこじゃいまする…
951918=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
952デフォルトの名無しさん:2007/08/02(木) 08:32:44
>>945が一体何がわからなかったのかがわからないが
まとめると
・質問に対する直接の答えは>>932
・ただし、Delphiでは素直にfoo := TFoo.Create; try finally foo.Free; end;するのが一般的。
953デフォルトの名無しさん:2007/08/02(木) 14:19:55
たしかに「何がわからなかったのかがわからない」ね。
ガベージコレクトが本質そうじゃないし。
954デフォルトの名無しさん:2007/08/02(木) 15:17:56
読解力ねぇな・・
955デフォルトの名無しさん:2007/08/02(木) 16:30:52
>>953
この質問からガベコレ抽出するようなレベルじゃ理解できなくて当然
956デフォルトの名無しさん:2007/08/02(木) 17:11:00
http://code.nanigac.com/

こういうのが活性化するとgoogleとか2chとかいらんくなるなぁ。
まぁ今のところdelphiのコードは一件も無いわけだが、今後に期待。
957デフォルトの名無しさん:2007/08/02(木) 17:22:15
http://www.codeproject.com/
で十分じゃね?
958デフォルトの名無しさん:2007/08/02(木) 18:39:31
Del7なんだけど、ダイアグラムってどう使うんですか?
便利な使い方ってある?
959デフォルトの名無しさん:2007/08/02(木) 19:13:48
>>958
ない
自己満足
960A型:2007/08/02(木) 19:38:37
つか、この統計意味わからん。
何でA型が一番なわけ?
科学的解釈0。
それ以前にそんなスイッチ自体、世界に数個だろ。
何が押す可能性が21.3%だよ。

世界が滅ぶかもしれねーつのに、押すわきゃねーつーの!!
961デフォルトの名無しさん:2007/08/02(木) 19:50:10
ボタンを押したくない場合、押されたくない場合は
Enableプロパティをfalseにすればグレーアウトされ
ボタンを押せなくなります。
962デフォルトの名無しさん:2007/08/02(木) 21:44:58
>>948
IDE変わったのはD8以降じゃね
963O型:2007/08/02(木) 23:54:11
むしろ血液型占いを幼少時から散々聞かされて
それに合わせた性格になってたりしてなw

俺20歳すぎるまでず〜とA型と思ってたら実はO型だった。
周りからはほぼ100%で「A型でしょ?」って言われます。
964Delフサギコ ◆A6VzDeLphI :2007/08/03(金) 00:11:00
           _________
   ∧,,∧   / 
  ミ,,゚Д゚彡 <  【ゞ】はひらがななのねん。
   ミつ旦(ミ~~ \ 
 @ミ   ミ     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ∪''∪

>>947さん
http://delfusa.main.jp/delfusafloor/opensource/delfusalibrary/20070708185145/StringUnit/StringUnitLight.pas
CheckWideCharInTable(一文字, zenHiraTbl)
と、指定して一文字づつループして調べる。
戻り値がTrueなら取り出し。

965Delフサギコ ◆A6VzDeLphI :2007/08/03(金) 00:36:29
   |\       ∧,,∧   AB型です
   /\>''",《"《"《ミ,,゚Д゚彡
   ̄ ̄ゝ..,《'_.《_.,(ノ/⌒i)
     ゛;,;:;::::;;:;:;:,;,,;,;;.,,:,,:ノ
            U"U
966デフォルトの名無しさん:2007/08/03(金) 00:46:16
>>955
荒れそうだからやめよかと思ったけど
どうしても知りたいので、お願いだから
正解教えてくれ。
多分、なんだかんだ言ってはぐらかしそう
だけどな。
967デフォルトの名無しさん:2007/08/03(金) 00:55:47
>>964
すごい…1文字判定するためにそんな処理をするというのか。
獅子は兎を狩るのにも全力を尽くすってやつか。
968ミ,,゚Д゚彡 ◆A6VzDeLphI :2007/08/03(金) 01:23:03
>その文字がひらがなだったら取り出したい。

というのが、
・カタカナだったら排除したい
・"あかさたなはまやらわん"だったら取り出したい
という仕様変更にも容易に対応とれる形でコーディングしておくことを
考えると、便利だと思いますよ。
969デフォルトの名無しさん:2007/08/03(金) 03:45:15
>>>947
>if (WStr[i]>='ぁ') and (WStr[i]<='ゞ') then

ん?
これでほんとにできた??
970デフォルトの名無しさん:2007/08/03(金) 03:56:24
>>964
そのライブラリがusesしてるXPtestってなんやねん?自作?
俺のDelにはないぞ。
971デフォルトの名無しさん:2007/08/03(金) 06:11:24
はは
972デフォルトの名無しさん:2007/08/03(金) 06:13:35
というか、テストコードど本体まぜるなよってフサにいいたい。
973デフォルトの名無しさん:2007/08/03(金) 08:37:50
>>969 これでいいみたい。
if (WStr[i]>=WideString('ぁ')) and (WStr[i]<=WideString('ゞ')) then
974デフォルトの名無しさん:2007/08/03(金) 09:23:07
WideChar('あ')でいいんじゃまいか
975デフォルトの名無しさん:2007/08/03(金) 10:02:03
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;
976デフォルトの名無しさん:2007/08/03(金) 10:26:49
  ListView1.SortType := stNone;
  ListView1.Items.BeginUpdate;
これをFindFirstの上にもってく。

あとは、時間掛かる処理を描画するときにやるとか。
977デフォルトの名無しさん:2007/08/03(金) 10:42:26
listview1.owndata := Trueにして仮想リストビューを使う。
データの保持をlistview自身にやらせる通常のやり方は劇遅いよ。
978デフォルトの名無しさん:2007/08/03(金) 10:45:38
>>947です。

>>964さん
>>973さん
>>974さん

どうもありがとう
979デフォルトの名無しさん:2007/08/03(金) 11:54:45
>>976
>>977
ありがとうございます。
実測で1/10時間程度になりました。
ありがとうございました。
980デフォルトの名無しさん:2007/08/03(金) 12:19:49
次スレ

くだすれDelphi(超初心者用)その43
http://pc11.2ch.net/test/read.cgi/tech/1186111080/
981ななしへたぐらま ◆XcB18Bks.Y :2007/08/03(金) 16:01:16
>>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
お疲れさまでした.
982デフォルトの名無しさん:2007/08/03(金) 18:00:15
>>981
if (WStr[i]>=WideString(#$3041))...と書けばいいのでは?
983デフォルトの名無しさん:2007/08/03(金) 23:27:55
質問です。

ネットワークコンピュータにある指定されたファイルが存在するか確認するにはどうしたら良いですか?
今までFileExistsを使っていたのですが、正しく帰ってきませんでした。
D5EntSP2を使っています。
984デフォルトの名無しさん:2007/08/03(金) 23:56:15
WNetOpenEnum
985デフォルトの名無しさん:2007/08/04(土) 09:25:07
Win32APIの日本語ヘルプの最新版はどこかでダウンロードできますか?
986デフォルトの名無しさん:2007/08/04(土) 14:13:11
987デフォルトの名無しさん:2007/08/04(土) 15:38:01
THX!
ちなみになんていうファイル名ですかね。
API32WH.HLPは無かったのですが。
988デフォルトの名無しさん:2007/08/04(土) 18:24:01
.hlp形式はもう時代遅れなんで最新のAPIリファレンスには対応していないから
外部ツールでヘルプ呼び出すツール作るしかない。
989デフォルトの名無しさん:2007/08/04(土) 22:59:05
D6Personalですが、
ビット単位でファイル入出力するにはどうしたらいいでしょうか。
フォーマットの決まっているバイナリファイルを解析または書き出す
プログラムを作ろうとしているのですが、ファイルフォーマット内のフィールドが
バイト単位になっていないためバイト単位の入出力だと多少不都合があります。

1バイトに満たない端数の部分を考慮しつつバイト単位で読み書きすることは
できると思うのですが、これより簡単な方法は無いでしょうか。
990AB型:2007/08/04(土) 23:12:47
ないです。
991デフォルトの名無しさん:2007/08/04(土) 23:54:14
ありがとうございます。
シコシコ作ります。
992デフォルトの名無しさん:2007/08/05(日) 15:15:04
配列をSetLengthで小さくする時は配列の中身はクリアした方がいいんですか?
993デフォルトの名無しさん:2007/08/05(日) 16:45:37
普通の組み込み型の配列であれば不要。当然だけどクラス型の配列(実体はポインタの配列)だったりした
場合は必要に応じて指しているインスタンスを解放する必要がある(かもしれない)。
994デフォルトの名無しさん:2007/08/05(日) 23:15:45
組み込み型の配列ってなんだ?VCLで宣言済みの動的配列ってことか?
995デフォルトの名無しさん:2007/08/05(日) 23:34:04
IntegerやWORD、あるいはStringのような型のこと。
996デフォルトの名無しさん:2007/08/06(月) 00:11:31
そんな脳内用語使われても知らんがな
997デフォルトの名無しさん:2007/08/06(月) 00:18:13
ヘルプくらい嫁よ
998デフォルトの名無しさん:2007/08/06(月) 01:43:56
あ〜プリミティブ型の動的配列ってことか。
ヘルプに書いてあるのか?
999デフォルトの名無しさん:2007/08/06(月) 03:05:36
uPnPを使ってuPnP対応のルータにポートを開閉を要求するにはどうしたらよいのでしょうか?
indyで何かよいサンプルがあればよいのですが、見つける事ができません・・・。
1000デフォルトの名無しさん:2007/08/06(月) 03:28:30
1000ならみんなしあわせ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。