トップページ⇒tech
1001コメント380KB

Delphi相談室その3

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
Delphi関連のTips Q&A はこちらです。

気楽な雰囲気がよければこちら
モナーの *やさしい* Delphi質問スレ
http://pc.2ch.net/test/read.cgi/tech/1003113413/

希望や夢はこちらに
★クライアントサイド最強の Delphi に物申す★
http://pc.2ch.net/test/read.cgi/tech/1001442200/

メーリングリストのウオッチすれはこちら
Delphi/Kylix Tech 2nd
http://pc.2ch.net/test/read.cgi/tech/993005709/

つづく >>2-3 あたり


キャラ系雑談はこちらで
ミ,,゚Д゚彡DelフサギコのフサフサDelphi談話室�A
http://pc.2ch.net/test/read.cgi/tech/1006602102/

APIで直接な漢な人はこちら
Delphiで小さな実行ファイルを作ろう
http://pc.2ch.net/test/read.cgi/tech/1009080085/

ギコBASIC拡張計画
http://pc.2ch.net/test/read.cgi/prog/961558082/

前の Delphi相談室2
http://pc.2ch.net/test/read.cgi/tech/995950803/

前の  Delphi相談室
http://piza.2ch.net/tech/kako/971/971261573.html
0153デフォルトの名無しさんNGNG
>>152
ソース見たけど分かんなかったよ。
でも、通常は存在しないアイテムに代入することはないと思うので
いいんじゃないかな。
0154152NGNG
>>153

いや、TListBoxの内容を書き換えるときに使ってたのですが、
これだとItemIndexやSelectedをとばさずに、1部だけListBoxの
内容を書き換えられたのですが

 ListBox.Item[RewriteIndex] := RewriteText;

という感じで、

これと同じことをTCheckListBoxですると、なぜかエラーがでてしまう・・・。

今は、
CheckListBox.Clear;
CheckListBox.Add;
CheckListBox.Checked;
CheckListBox.ItemIndex
を組み合わせてプログラムを書いています・・・。

CheckListBox.Item[Index] := String;さえ使えればこの手間が省けるのに。

ヘルプをみてもエラーになる理由が書いてない、というよりもTListBoxと
一緒なのが。

あと、これとは関係ないけどDel6で今書いているプログラムステップ実行をすると
確実にハングアップする部分があります。
なにも派生してないTListにポインターを放り込むだけなのに・・・。

止まる部分は
List.Items[Index] := Pointer;
と、止まりようがない部分でDelphiが固まってしまいます。
その部分だけステップ実行をしないようにすると平気で動くのに・・・。

どうもDel6のIDEはメモリ操作がらみでバグがありそうな気がする。
0155デフォルトの名無しさんNGNG
絶妙のタイミングでListがnilってるときに呼び出しちゃってるとか。
0156デフォルトの名無しさんNGNG
>>155

うーん、これだとメモリ書き込みがらみのエラーが出るんですけど・・・。

ってゆうか、Step実行でDelphiがとまってしまうのは何でだろう。
プログラム自体は正常に動くのに・・・。

Delphiのコンポーネントライブラリは便利だけど、意味不明な
エラーが出てくると対処に困る・・・。
0157デフォルトの名無しさんNGNG
>>156
そのコードだけ新規プロジェクトに移してステップ実行してもまだ起こる?
0158そすぃんさNGNG
「ActiveXの取り込み」でコンポーネントに登録したヤツを
使用して作成したアプリには「どの程度」まで含まれてコンパイルされるのでしょうか?
例えばrealmediaのプレーヤとか…。
0159そすぃんさNGNG
補足説明:
ちょっと意味不明ぽかったので…。
ようするに、「配布先は、そのアプリ以外に入手するべきものがある」のか無いのか
が知りたいのですが…。まだよく分からん気もするな…(^^;。
realプレーヤを作ったとして、配布した場合、必要なdllとかは先方が用意する
必要があるんですよね?
※ウザかったら失せますので…※
0160デフォルトの名無しさんNGNG
COMコンポーネントの実体はたいていDLLなので、配布先にも同じバージョン以上のDLLがインストール
されている必要があると思われ。
0161そすぃんさNGNG
>>160
あ、やっぱり…。ということは、「ActiveXの取り込み」でコンポーネントに登録したヤツを
使用して作成したアプリ(長い…)は自由に配布出来るワケですよね?
dllは先方がインストールするなりして用意する必要があるということは。
レス、ありがとうございました!
0162デフォルトの名無しさんNGNG
>>152
なんのエラーがでるのか教えて。
0163デフォルトの名無しさんNGNG
IDEから実行した場合、nilの時、止まるってのはうちでもなる。
が、プログラム自体が正常に動くってのがわからんな。

DirectXのアプリでLockからUnlockまでの個所内はデバッガが止まっちゃう
ってことはあったけど。
0164デフォルトの名無しさんNGNG
>>163
DirectX の Lock/Unlock は win16mutex を使っているから
そこへステップインするとハングするのは OS の仕様。
0165112NGNG
激遅レスですが、112です。
>>131 >>135の情報を元にレジストリの変更を行って、
どうにか <!--#exec cmd="cmd.exe /c dir"--> ←こいつは動くようになってくれました。
でも相変わらずexeファイルは動いてくれない・・・
「スクリプト './xxx/test.exe' を実行できませんでした: Win32 エラー コード = 2」←エラーメッセージ
#EXEC の呼び出しに対して使用可能になってないよーのエラーよりは若干進歩したようですが・・・

こんな厨房の質問にお付き合いできる方、引き続きご教授お願いたします。
0166112NGNG
自己レスです。
SSIを呼び出しているアドレスを「http://〜」から「D:/〜」に変更したら動いてくれました!!
あ゛〜長かった、色々付き合ってくれた皆様に感謝いたします。
0167ななしんNGNG
NetUserEnum などの関数が使いたいのですが、
netapi32.lib の宣言した pas は標準ではついてないようです。
(Delphi Ver5 を使用しています)

自分で起こすしかないんでしょうか。
どっかにころがってないですかねえ?
0168デフォルトの名無しさんNGNG
やっぱ、ローカルルールの場所にgoogleの検索フォームがいると思った

http://www.google.co.jp/search?hl=ja&lr=lang_ja&q=netapi32%2Epas
0169ななしんNGNG
>>168
いやいや、
google で「NetUserEnum delphi」とか
「netapi32.lib delphi」で検索したら
関係ないのしかヒットしなかったんで
ここでの質問したというわけのです。

ずばり「netapi32.pas」で検索すればよかったんですね。
というわけでスペシャルサンクス!!>>168
0170ななしんNGNG
> ここでの質問したというわけのです
ここで質問したというわけなのです

もうだめだ俺・・・逝ってきます
0171デフォルトの名無しさんNGNG
>>167

Torry's

http://www.torry.net/index.htm

に行って、NetAPI で検索すると4つのコンポーネントが
ヒットする。フリーでソース付きのがあるから参考になると
思う。
0172152NGNG
>>162

いろいろやってみて、TListBoxとTCheckListBoxの微妙な違いがわかってきました。

基本的には153さんが指摘したように、存在しないItemにStringを代入したときに
どのような処理を行ってるかなのですが、

TListBox(TCustomListBox)では、Index-1までItemが書き込まれている場合、
なにも書き込まれていないItem[Index]に文字を代入できるが、
TCheckListBoxでは文字の代入はできるが、ステータス保存用に拡張された
部分がこの状況に対応していないため、Listのインデックスの範囲が越えて
しまうようです。

TCheckListBoxで項目を書き換えるときのプログラムは

if TCheckListBox.Count = RewriteIndex //プログラム処理上Count<=RewriteIndex
then TCheckListBox.Add(RewriteText) //にしかならないようにしています。
else TCheckListBox.Items[RewriteIndex] := RewriteText;

に書き直しました。
0173152NGNG
>>172

すみません、TCheckListBoxでの処理を上のように書き換えると
メモリリークが生じるようになりました。

詳しく調べてみると、

TCheckListBox.Items[Index] := String;

の処理だけで、メモリリークが生じます・・・。

TCheckListBox.Add('12345678');
for i:=0 to 63353 do TCheckListBox.Items[0] ;= '12345678';

で、1MBほどメモリがリークします。

どうも、TCheckListBoxはステータス保存リスト処理がらみでバグが
有りそうです。

でわでわ。
0174デフォルトの名無しさんNGNG
うちも、特定のソースで、ステップ実行のときとコンパイル時に、
訳の分からない動作をします。
やっぱりDel6はバグっているのだろうか?
0175デフォルトの名無しさんNGNG
>>訳の分からない動作をします。
それを説明してくれないと誰もコメントをつけることはできない。

たいていのバグは自分自身から。
0176ななしんNGNG
>>171
> Torry's
> に行って、NetAPI で検索すると4つのコンポーネントが

うわお!ヒットしました、さっそく落としてみます。
感激です!! >>171
0177デフォルトの名無しさんNGNG
Delphiでは整数→列挙型の型変換をすることはできないのだろうか?
調べた限りでは列挙型→整数はOrd()関数で出来ることが判ったのですが。
0178デフォルトの名無しさんNGNG
TMyEnum(IntValue)
0179デフォルトの名無しさんNGNG
型変換だけでよいのなら


type
 TFoo = (a, b, c);
var
 Bar : Byte;
 Foo : TFoo;
begin
 Bar := 1;
 Foo := TFoo(Bar);
 Assert( Foo = b );
end;
0180デフォルトの名無しさんNGNG
>>175

まあ、それはそうなんだけど、TListの派生コンポで
ステップ実行していて

inherited Items[Index] := P;

でDelphiごととまられてしまうと、どこが悪いかまったくわからないよ。

普通に実行すると、何事もないのに。

あと、173の件ですが、もうちっと詳しく調べてみると
TcheckListBox.Items[Index] := String;1回につき16Byteメモリリークしてました。

やっぱり、ちゃんとVCLがついているバージョンを買って自分でバグ取りを
しないといかんのかなー?
0181デフォルトの名無しさんNGNG
>>180
TCheckListBox.Itemsは駄目だろう。
0182デフォルトの名無しさんNGNG
>>181

なんで?実際に使うときは

SelectViewCheckListBox: TCheckListBox;

とかにしてから(Formに貼り付けてから)
使ってるけど?
0183ねこまNGNG
TListView を使えばいいのに…….
0184デフォルトの名無しさんNGNG
>>182
なら、実際に使っているコードを載せてくれ。

確認してくれる奇特な人に打ち直しさせるきですか?
0185ねこまNGNG
と思ったけど,そういえば OwnerData だと CheckBoxes が有効にならないんだったっけ
0186ねこまNGNG
OwnerData := True にして
OnAdvancedCustomDraw で描画
GetHitTestInfoAt で判定

以上,独り言.
0187152NGNG
>>184
0188152NGNG
>>184

一応ソースです。
フォームにButtonとCheckListBoxを張り付けてから、

----------------------------------------------------------
procedure TForm1.FormCreate(Sender: TObject);
begin
CheckListBox1.Items.Add('Test');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
CheckListBox1.Items.BeginUpdate;
for i := 0 to 65535 do CheckListBox1.Items[0] := 'Test';
CheckListBox1.Items.EndUpdate;
end;
----------------------------------------------------------

これ、Delphi6(Update1)だとボタン一押しで16*65536=1MBずつメモリ使用量が増えるのに、
Delphi4だと問題ないんだよなー。Del4と6でTCheckListBoxのVCLどこが変わってるの
だろう?professional以上持っているひと教えて!!
0189デフォルトの名無しさんNGNG
英数字の2バイト文字を1バイト文字に変換するには?
0190ねこまNGNG
Del4 の TCheckListBox ではチェック情報を Objects に保持していたと記憶しています
ソースがあっても参考にならないでしょうね
0191デフォルトの名無しさんNGNG
>>189
function ZenToHan(const Source: string) : string;
begin
Result := MapString(Source, LCMAP_HALFWIDTH);
end;
0192デフォルトの名無しさんNGNG
出典くらい明記しろ。

http://www.wwlnk.com/boheme/delphi/vbtodel/vbfaq/vbd0050.htm

それに以下を定義しないと...

function MapString(const Source: string; Flag: integer): string;
var
Chr : array [0..255] of char;
begin
Windows.LCMapString(
GetUserDefaultLCID(),
Flag,
PChar(Source),
Length(Source) + 1,
chr,
Sizeof(chr)
);
Result := chr;
end;
0193デフォルトの名無しさんNGNG
http://www.google.com/search?q=TCheckListBox+%83%81%83%82%83%8A%83%8A%81%5B%83N&hl=ja&lr=&num=50
http://www.google.com/search?q=TCheckListBox+memory+leak+bug&hl=ja&lr=&num=50
0194デフォルトの名無しさんNGNG
>>193
がんばったようだが、全部的をはずしている。
0195デフォルトの名無しさんNGNG
Delphi6のADOでoracleに接続してデータを表示すると、マイナス数字の”−”の部分が表示されません。
何が問題なのでしょうか?
0196デフォルトの名無しさんNGNG
>>195
君がアホなのが問題
0197デフォルトの名無しさんNGNG
アイコンが入ったDLLは、
16色アイコンしかつくれないのでしょうか?
0198デフォルトの名無しさんNGNG
>>197
白黒や256色のアイコンもリソースに入れられますよ。
ただし、Delphi付属のImageEditorでは256色アイコンが作成出来ないので、
別途アイコン作成ソフトなどを利用してアイコンを作成する必要があります。
0199デフォルトの名無しさんNGNG
例えば何らかの「画像ファイル」を表示するアプリを適当に
作ったとして、そのファイルは出来たアプリにどのような形で
入ってるんですかね?
結果的にバイナリでくっついちゃってるんですかね?
変な質問ですか?(^^;
0200デフォルトの名無しさんNGNG
作り方によるよ。
bitmapファイルとして読み込むように作れば当然別ファイルになっているし、
リソースとして結合することもできるし。
独自形式でexeの後ろにくっつけておくこともできる。

関係ないけど200げっとズザー
0201デフォルトの名無しさんNGNG
言葉だけズザーって言ってもAAないと何の感慨も湧かん。
0202199NGNG
>>200
ははぁ。そうなんですか。ありがとうございます。
後から読み込むのではなくて、「決まった画像をImageコントロールに
表示させるだけ」ってヤツはどーなってるのかな?と思った次第でして。
その場合は、バイナリでくっついちゃってるんですよね?

「ズザー」ってあのAAのズザーか(^^;
0203デフォルトの名無しさんNGNG
>>198

何か「16bitリソースは扱えない」とか怒られてしまいました。。
もっと根本的なところから勉強してみます。
0204デフォルトの名無しさんNGNG
>>202 とりあえずリソースハッカーというのを探してごらん
0205DelフサギコNGNG
\\\     \ \\
   \\ヾ__ ∧_∧_ヾ\ 
\   \ \ (*´∀`)_\ \
\\     | ̄ ̄∧∧  |  ヾ
\\\ ヾ   |\ ミ;゚Д゚  ∧_∧
  \\\      | ̄ ̄ ( *・∀・) 今だ!205番ゲットォォォォ!!!
   \\\ ヾ  |\ ̄/っ y っ\
     \\       |  ̄ ̄ ̄ ̄ ̄ |
0206197@サ骨NGNG
>>198
brcc32でつくることができました。ありがとうございます。

とりあえず自分用の「icoファイルをまとめてDLLにする」ソフトをつくってみようと重います。
0207デフォルトの名無しさんNGNG
Delphiでアクセス解析を作ろうとここ数週間がんばってる厨房が質問スレに戻ってきてしまいました・・
環境変数からアクセス者のドメイン(「*.*.プロバイダ名.ne.jp」形式のもの)を取得したいんですけど、
なぜかIP(「数字.数字.数字.数字」形式)ばっかり返ってきてしまいます。

環境変数名はキチンとREMOTE_HOSTで取得してるのですが・・・
(本来、IPを返すのはREMOTE_ADDRの方ですよね??)
0208デフォルトの名無しさんNGNG
だったらそのIPを
ドメインにかえちゃえば?
0209デフォルトの名無しさんNGNG
GetHostByAddrつかって
0210207NGNG
>>208-209
GetHostByAddrですか?
初めて聞く単語なんで(←ぉぃ)それを少し調べてからもう一回戻ってきます。
すごい良さげなヒントありがとうございます。
0211デフォルトの名無しさんNGNG
もう少しいうと
inet_addrもつかう
0212デフォルトの名無しさんNGNG
逆引きできないところからのアクセスばっかしとか
0213207NGNG
Delphi MLの過去ログで「GetHostByAddr」を検索したら
IP(xxx.xxx.xxx.xxx)をそのままドメイン名(*.プロバ名.ne.jp)で返してくれる
関数が見つかりました、おかげで問題も解決です。ありがとうございました。
(GetHostByAddrを使うのにwinsockを組み込むのが気づかなくて少々てこずりましたが)

ちなみにこいつです。
ttp://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/article/033/033662.html
0214サ骨NGNG
(´-`)oO(バッチファイルとwshになってしまった)
0215 NGNG
結構wshは使えるよね
0216デフォルトの名無しさんNGNG
DelphiをつかってNTPの扱い方を書いてあるページとか、文献無いですかね?
0217デフォルトの名無しさんNGNG
>>216
Indy のサンプル
0218デフォルトの名無しさんNGNG
#bye
#end
0219デフォルトの名無しさんNGNG
>>218
かなり藁
つーか、最近多すぎ
0220デフォルトの名無しさんNGNG
既出かも知れないけど?
Formを持ったアプリケーションで、
タスクバーにアプリケーションアイコンを出さない簡単な方法あります?
0221デフォルトの名無しさんNGNG
>>220
TIPSで見たぞ。検索すれ!
0222デフォルトの名無しさんNGNG
あのー、恥ずかしい事ですが、Indyとかにサンプルがあるじゃないですか。
たとえば↓コレとか。
ftp://delphi-jedi.org/api/Winsock2.zip
で、コレをどうやったら使えるようになるのかサッパリなんです。
凄い基本的な事らしく何処行ってもやり方乗ってないし、、、
どなたかヘルプ
0223デフォルトの名無しさんNGNG
>>222
>ftp://delphi-jedi.org/api/Winsock2.zip
↑これってIndyとは無関係のような、、、

何がやりたいのかわからんけど、ソケットを使ったプログラムなら VCL で
普通に書いたほうがいいんじゃないかな。
0224222NGNG
>>223
いやあのそのですねハイ。
それ展開したら「WinSock2.pas」と「svcguid.pas」ってのができたんです。
んで、コレ何だろう、コンポーネントなんかな?とか思って別プロジェクト
立ち上げて「コンポーネントのインストール」をやってみたのです。
でも何にもできないし。
たぶん壮大な勘違いな予感なんですけど、何処でどう勘違いしたのかもわからない。
とりあえずコイツを動かしてみたいんです。
0225デフォルトの名無しさんNGNG
>>224
なんだ、中身は単なる宣言だけじゃん。
これ、コンポーネントじゃなくてヘッダみたいなもんだよ。
これをusesしておけばWinsock2の関数が呼べる。
後はWinsockの知識があるかどうか。
0226222NGNG
>>225
ありがとうございます。コンポネントじゃなかったのですね。
って事で「Sock2.dpr」とやらにTFormを追加。usesに

WinSock2,svcguid,

を加え、WinSock2と打ってみた所、候補がズラリ。
・・・でもなんか嫌な予感。内部定数まで見えてんの?コレって感じで。
そのまま↓キーをずっと押してたら、スタックオーバフローで逝ってしまいました。

どの辺で道を間違えたのでしょう?
0227デフォルトの名無しさんNGNG
>>222 >>223 delphi = コンポーネントと思っている厨房
Winsock2は非同期オブジェクトを使うためのものなので
なんだかわからないならば使いようがないのだけど

どの辺で道を間違えたかっていうか
根本的にDelphiがわかってないだけ
コンポーネントしかわかんないのならWinsock2使ったコンポーネントを使えば良し
0228デフォルトの名無しさんNGNG
>Winsock2使ったコンポーネントを使えば良し
俺も今これを探してるところなんだけど、何かお勧めってある?
0229デフォルトの名無しさんNGNG
訳あってdelphiで何かを作らなくてはいけなくなってしまって
何を作っていいかわからずこまっています
みなさんどうかお知恵を貸して頂けませんでしょうか?
他の言語の経験もありませんしdelphiの経験すらありません
よろしくお願いします
0230デフォルトの名無しさんNGNG
>>226 まずこれを読んで基礎知識を仕入れてくれ
http://www.microsoft.com/japan/developer/library/vccore/_core_windows_sockets.3a_.background.htm
0231デフォルトの名無しさんNGNG
あとここも追加 >>226
http://www.asahi-net.or.jp/~nk2w-ishr/winsock0.htm
0232デフォルトの名無しさんNGNG
>>229 とりあえずどんな分野に興味がある?

1)ネットワーク関係
2)ゲーム
3)データベースとか会計ソフトみたいなの
0233デフォルトの名無しさんNGNG
>229
どんな訳じゃ
0234デフォルトの名無しさんNGNG
>>229
手始めに乱数を使った単純なゲームを作ってみるといいよ

電卓とコンピュータの違いがよく分かる(・∀・)
0235デフォルトの名無しさんNGNG
>>232
1)ネットワーク関係
2)ゲーム
には興味があります
>>233
私は
http://pc.2ch.net/test/read.cgi/tech/1011649179/
の90です
0236デフォルトの名無しさんNGNG
>>235
マルチポストうざい。氏ね。
0237デフォルトの名無しさんNGNG
>>235 とりあえず 名前欄に

"モナーの90#覚えとける文字" とでも入れてね

じゃ、
先輩がアニメ絵モエな系統なら
こんなのはどう?
http://www2s.biglobe.ne.jp/~wind_f/projectd/project1.htm

0238222NGNG
>>230
ありがとう。
つか勉強なるわコレ。
Delphi使った事なかったから知らんかったんだけど、
なんやコレVCとJAVAとVBのいいとこ取りみたいな言語なんね。
0239デフォルトの名無しさんNGNG
>>235
こんなことで騙されるような頭の弱い奴に一週間でできるというのは
人を小馬鹿にしてるとしか言いようがないな

http://www.text2music.com/mine/delphi/2.html
↑これやってみてできなかったら、先輩に金を返してもらえ
0240デフォルトの名無しさんNGNG
正規表現の質問です。
文字列型の変数同士を比較する時に、双方の文字列が完全に一致するのではなく
変数の中の一部だけを一致した場合にtrueを返すような書き方ってどうやるのでしょうか?

例えば変数aに文字列'abcde'が入っていて
変数bに文字列'cde'が入っていて、それを比較した場合にtrueを返すような感じなのですが・・・

if(a = '*'+b+'*') then begin
TorF := true;
end else begin
TorF := false;
end;
↑試しにこんなん書いてもダメだったんで(汗
0241デフォルトの名無しさんNGNG
>>240
TofF := Pos(a,b) > 0;
0242デフォルトの名無しさんNGNG
ゴメン
× TofF := Pos(a,b) > 0;
○ TofF := Pos(b,a) > 0;
0243デフォルトの名無しさんNGNG
>>241
おぉ!できました!どうもありがとうございます!!
(>>242は手元で試したらすぐ気づきました、どうもです)
0244デフォルトの名無しさんNGNG
>>243
マルチバイト文字(ファイル名などはその可能性がある)を扱う時は
PosをAnsiPosに替えましょう 「DELPHI クイックリファレンス」より
0245デフォルトの名無しさんNGNG
タブをなんらかの文字に変える拡張モジュールとかないですかねぇ?
スペースとタブの区別がつかなくて
0246デフォルトの名無しさんNGNG
StringReplace
0247デフォルトの名無しさんNGNG
>>245
IDE上の話?
俺はタブは使わないけど。
0248デフォルトの名無しさんNGNG
>>247
そ。
秀丸みたいにいかんかね。
0249247NGNG
>>248
そのようにはいかなさそうなのでスペースのみに変えたよ。
結局常用のテキストエディタもスペースのみになってしまった。
0250デフォルトの名無しさんNGNG
getoptみたいなParamCount/Strのラッパークラスってない?
0251デフォルトの名無しさんNGNG
>>250
そのクラスで何をラップするの?
ParamCount/Str って、もう充分ラッピングされている
と思うが? グローバル変数だし。
0252デフォルトの名無しさんNGNG
これも
FindCmdLineSwitch
■ このスレッドは過去ログ倉庫に格納されています