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

モナーの *やさしい* Delphi質問スレ Ver.10

■ このスレッドは過去ログ倉庫に格納されています
0001DelモナーNGNG
  ∧_∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ( ´∀`)<. Delモナーがどんな厨房疑問でもやさしく答えます。
 (    ) .| Delモナーは時に私であり、時には別の人。
 | | |  | 他のスレに書き込んで罵倒される前に、まずここで質問しよう。
 (__)_)  \_________________________

前スレ モナーの *やさしい* Delphi質問スレ Ver.9
http://pc3.2ch.net/test/read.cgi/tech/1033668645/
0153デフォルトの名無しさんNGNG
>>152
やっぱり遅くなるぞ。
0154デフォルトの名無しさんNGNG
質問デシ。
チューチューマウスみたく親に関係なくMessageBoxが表示された際に動作
するアプリを作りたいのですが、あれは一体どんなメッセージを取得?or
フックすればいいのでしょうか?
0155デフォルトの名無しさんNGNG
OS の DefDialogProc の横取りじゃなかったカナ?
0156デフォルトの名無しさんNGNG
配列でHigh関数Low関数を使うみたいな感じで
TListではどのようにするのですか?

var
List:TList

〜

List[high(list.count)]

とやると21億くらいになっちゃうし・・・・。
0157デフォルトの名無しさんNGNG
count
0158デフォルトの名無しさんNGNG
あぁ、Count は分かっているのか。
TList は 0 .. Count - 1 まで。Low は固定。
High( list.count ) だと、Count の型である Integer 型の上限値が取れてしまうよ。
0159デフォルトの名無しさんNGNG
Delphi5のscktsrvr.exeよりかしこいソケットアプリって無いですか?

またDelphi6ではこのプログラムはVerupしているのでしょうか
0160デフォルトの名無しさんNGNG
>>159
http://pc3.2ch.net/test/read.cgi/tech/1035676809/n585
0161156NGNG
>>158

早速ありがとうございます。
そんなに簡単だったとは・・・・。ずいぶん悩みましたが解決しました。
ありがとうございました。
0162デフォルトの名無しさんNGNG
>>159
サンプルに何を求めてるんだと。
0163デフォルトの名無しさんNGNG
DelWikiにライセンス周りのFAQが必要棚。
0164デフォルトの名無しさんNGNG
>>162
Demos & Examples の下に有るわけではないので、サンプルアプリではないすよ。
0165デフォルトの名無しさんNGNG
>>159 は sato さん?須磨さん?

Dual CPU ってことない?
0166デフォルトの名無しさんNGNG
Editをクリックするとビープ音が鳴っちゃいますけど
鳴らないようにするにはどうすればいいですか?
0167デフォルトの名無しさんNGNG
クリックじゃなかった。Enter押したらでした。すいません。
0168デフォルトの名無しさんNGNG
ttp://www.borland.co.jp/qanda/delphi/d0003345.html
0169デフォルトの名無しさんNGNG
フォームの最小化と最大化のボタンを非表示にする方法がわかりません。

(最大化と最小化時のフォームサイズを固定にする方法はわかったのですが・・・)
0170169NGNG
どなたか知っている方がおりましたら、よろしくお願いします。
0171デフォルトの名無しさんNGNG
TForm.BorderIcons
0172デフォルトの名無しさんNGNG
>>169
ボダアイコン
0173169NGNG
ありがとうございました!
さっそく調べて試してみたいと思います。
0174デフォルトの名無しさんNGNG
普通にメモ帳もどき作ったんですけど、サイズは500kbを超えるんですけど何でなんでしょう?
メモ帳実際50kbしかないのに。delphiでつくるとこれが普通なんですか?
それとも作り方が悪いの?
0175デフォルトの名無しさんNGNG
ListBoxで各アイテムごとに、フォントの色を変えたいのですが
カラープロパティを変えると全てのアイテムの色が変わってしまったりで
うまくいきません。どなたか教えてください。
0176デフォルトの名無しさんNGNG
>>174
普通。そういうものだと割り切ることが大切。
サイズ問題は、Delphi1の頃から言われ続けてきたことだ。
気にしないのがよっすぃ〜。
0177デフォルトの名無しさんNGNG
>>174

VCL使うとそんなもん。

小さくしたけりゃAPIたたけ。
0178デフォルトの名無しさんNGNG
>>175
オーナードローを使って自前で項目を描画する。
OnDrawItemあたり参照。
0179174NGNG
>>176,>>177
そうなんですか。納得しました。
ありがとう
0180165NGNG
須磨です。ばれました。
dualcpuです。dualだとまずいのですか?scktsrvr.exeって。
DELPHI5に付属のやつですが。
0181デフォルトの名無しさんNGNG
DELPHI6 PERSONALでMemoコンポーネントの文字列を
URLエンコードしたいのですが

plaza11.mbn.or.jp/~pz/delphi/vcl.html
↑ ここにあるTPzConvを使ってURLエンコードすると
改行や「&」などが正しく変換されません・・

どうしたらちゃんと「改行」が「%OD%OA」に、「&」が「%26」
変換されるように出来るでしょうか。 もし解る方がいらっ
しゃいましたらご教授宜しくお願い致します。m(__;)m
0182159NGNG
須磨です。間違えました。159です。
0183デフォルトの名無しさんNGNG
https://211.10.75.189/k-sfa/index.jsp
このページ、i-mode N503iで表示されません。
P504i では表示されるのですが、
表示させる方法をお分かりの人がいたら、教えてください。
サーバー構成は、Apache+SSL(Apache1.3.27 OpenSSL0.9.6g) です。
0184デフォルトの名無しさんNGNG
>>181
これとかどうかな?
InternetCanonicalizeURL
0185181NGNG
>>184

Memoコンポーネントの改行を変換してくれないと
いけないのでこれではダメなのではないでしょうか..(汗
でもレスありがとうございました〜
0186デフォルトの名無しさんNGNG
と思ったけど、
InternetCanonicalizeURL じゃだめだった。ごめんね。
0187デフォルトの名無しさんNGNG
コンソールアプリケーション練習したいんですけど
結果が早すぎて見えないんです。すぐに終了してウインドウが
閉じてしまうんですけどキー入力するまでウインドウ閉じない
ようにするにはどうしたらいいですかね?
Delphiと直接関係ない質問の気がしますがよろしくおねがいします。
0188デフォルトの名無しさんNGNG
>>187
最後に、Readln(s); を入れておく。
0189デフォルトの名無しさんNGNG
>>188
そういうことしない限り無理なんですかね?やっぱり
とりあえずありがとう。
0190デフォルトの名無しさんNGNG
void addone(void){
static int x=0;
x=x+1;
return ;
}
みたいなことをdelphiでしたいんですけどできないですか?
staticって無いですよね?
0191>>190NGNG
・クラスにする
Txx = class
fX: Integer;
procedure addone;
end;
procedure Txx.addone;
begin
fX:=fX+1;
end;
・ユニット内変数
var addone_x: Integer;
procedure addone;
begin
addone_x:=addone_x+1;
end;
・トリック
procedure addone;
{$J+}const x: Integer = 0;{$J-}
begin
x:=x+1;
end;
0192デフォルトの名無しさんNGNG
implementation節の変数が、まあ代わりみたいなもんです。
スコープを超える寿命の変数が存在しないのは明快と言えなくもない。

どうしてもスコープを同じにしたいなら、constで宣言して、
型付き定数への代入を許可するオプションを付けてコンパイル。
0193デフォルトの名無しさんNGNG
>>159 あたり
D6 初期版だと、スレッド周りにバグが有って Dual CPU だと確実に吹き飛ぶ。
けど D5 なんだっけ?別の話しかなぁ?

私のところでは、社内データ管理システムとして Midas/ソケットサーバーの組み合わせで
半年以上ノンストップで動かしていた経験があります。同時 50 人くらいで、一つのデータパケットの
大きさは 10K から 1M 程度までさまざま。

ソケットサーバーが止まってしまう。という環境でデバッグしてみるのが早いと思いますが。
まずは、ScktSrvr.exe に対してタスクマネージャで CPU の割り当てを一つにして
具合を見てみては?

あと、あたりまえですが、ソケットサーバーを使わずに動かした場合に、止まらずに動きますか?
クライアントとサーバーソフトを同一マシンにおき、ソケット接続ではなく COM 接続にして
試してみたら?(DCOM では無く)
0194デフォルトの名無しさんNGNG
>>159 あたり
D6 初期版だと、スレッド周りにバグが有って Dual CPU だと確実に吹き飛ぶ。
けど D5 なんだっけ?別の話しかなぁ?

私のところでは、社内データ管理システムとして Midas/ソケットサーバーの組み合わせで
半年以上ノンストップで動かしていた経験があります。同時 50 人くらいで、一つのデータパケットの
大きさは 10K から 1M 程度までさまざま。

ソケットサーバーが止まってしまう。という環境でデバッグしてみるのが早いと思いますが。
まずは、ScktSrvr.exe に対してタスクマネージャで CPU の割り当てを一つにして
具合を見てみては?

あと、あたりまえですが、ソケットサーバーを使わずに動かした場合に、止まらずに動きますか?
クライアントとサーバーソフトを同一マシンにおき、ソケット接続ではなく COM 接続にして
試してみたら?(DCOM では無く)
0195デフォルトの名無しさんNGNG
... なんか、2ch の調子が悪いというか、反応が遅い ..
0196デフォルトの名無しさんNGNG
Abone使い?
0197デフォルトの名無しさんNGNG
>190
 コンパイラオプション {$J+} で、型付き定数使えばいいんじゃないか?

procedure addone;
var
 const x:Integer = 0;
begin
x := x + 1;
end;

で。
0198デフォルトの名無しさんNGNG
パーソナルでグラフ使う場合は
ペイントボックスあたりに描画するとかシェープを利用したりするしか無いのでしょうか?
フリーでコンポーネントがあれば良いのですが無いですよねぇ。
0199デフォルトの名無しさんNGNG
>>198
探す前からそう言っているのならお前はアホだ。
0200デフォルトの名無しさんNGNG
いや探しても見つからないから聞いてるの(^_^;
0201デフォルトの名無しさんNGNG
>>200
http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&oe=UTF-8&q=delphi+%E3%82%B0%E3%83%A9%E3%83%95+%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88

4番目とか。
0202デフォルトの名無しさんNGNG
中古のPro6を買うというのもありかも・
0203デフォルトの名無しさんNGNG
 真剣にDelphiを勉強したいと思います。
今、いろいろなHPを参考にしてサンプルプログラムを組んで理解を深めています。
もうそろそろ本がほしいと思っていますがいい本を3冊ほど推薦していただけないでしょうか。
0204デフォルトの名無しさんNGNG
>>203
ない。
0205デフォルトの名無しさんNGNG
>>203
ない。
フサスレも覗いてみればわかるが、バイブルまでまともな本は一冊も無いのがdelの現状
0206デフォルトの名無しさんNGNG
>>203
正直、ヘルプとAPIガイドが最大のごちそう。がんばれ。
0207デフォルトの名無しさんNGNG
質問があります。
WinInetを使ってインターネットアプリケーションを書いているのですが、
WinInetで取得したHTMLをTWebBrowserに表示するのに、
TWebBrowser.OleObject.document.writeを考えていたのですが、
これはJavaScriptなので、JavaScriptが無効になっている環境では動作しません。
JavaScriptを使わずに、取得したHTMLをTWebBrowserに表示する方法ってありますか?
0208デフォルトの名無しさんNGNG
>>207
テンポラリファイルにしてそれ読むとか。
0209デフォルトの名無しさんNGNG
delphiで、
            ....
for(int i = 0; i < 10; i+=2) {
 // loop
}
みたいに、 ループ変数を任意回インクリメントしたいんだけど、

var
 i: Integer;
begin
 for i := 0 to 10 do
 begin
  // loop
 end;
end;

では、1しかインクリメントされませんし、loopのブロック内で
Inc(i);とか書くと、コンパイルエラーになります。
for文ではできないのでしょうか?
0210デフォルトの名無しさんNGNG
>>209
まぁ、こんな感じじゃないの?

for i := 0 to EndValue div 2 do
begin

a := i * 2;


end;
0211デフォルトの名無しさんNGNG
>>207
こういう方法もあるよ。
http://members.jcom.home.ne.jp/monazilla/document/directwrite.html

>>209
forでは無理
俺はこうしてる。
i := 0;
while i < 10 do
begin
//処理
Inc(i, 2);
end;
0212デフォルトの名無しさんNGNG
D7アカデミックパック買っちゃいますた。

0213デフォルトの名無しさんNGNG
D7ってPersonalでも銭取るんだ・・・。
0214207NGNG
>>211
ありがとうございました。
おかげで解決しました。
0215デフォルトの名無しさんNGNG
D6だけ取らなかったが正解。
マニュアル付有償版もあったと思うが。
0216203NGNG
 うーん、定番がないんですかー。
えと、APIガイドというのはなにを指しているのでしょうか?
ぐぐったんですが、これというのがわかりませぬ。
0217デフォルトの名無しさんNGNG
>>216
ディスクに入ってるwin32.hlp
0218203NGNG
>>217
ありがとん、見つかったよ。
・・・あ゛、これ英語のままなんだね・・・。
みなさんこれ読んで頑張ってるんですか???
ううう、これは手厳しいですなぁ。
なんとか読みまする。
0219デフォルトの名無しさんNGNG
>>218
C++Builderには日本語版があったり。
でも、両者読み比べても同じこと書いてあるなと高校生の俺は思った。
0220203NGNG
 情報さんくすこ。
ただ、少しでも理解しやすいほうがありがたいので日本語版がいいと
十年前高校生だった漏れは思った。
0221デフォルトの名無しさんNGNG
ttp://www.microsoft.com/japan/developer/library/
APIに関する日本語情報はここがいいよ。
何がどこにあるか探すのに最初は苦労するけど。
0222デフォルトの名無しさんNGNG
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/default.htm?p=/msdownload/platformsdk/sdkupdate/psdk-full.htm
からPlatform SDKをダウンロードしておくと結構便利だけど、
今はファイル入れ替え時期で落とせないみたい。
0223デフォルトの名無しさんNGNG
下記のような書き方がコンパイル通るんですが、これって正しいのですか?
長年使ってて初めて気づいたんですが、引数の省略可能って仕様だったのですか?
Delphi6 UpdatePack2です。

0224デフォルトの名無しさんNGNG
program test;

{$APPTYPE CONSOLE}

uses
 SysUtils,
 Unit1 in 'Unit1.pas';
var
 ATest: TTest;
begin
 ATest := TTest.Create(10);
 try
  ATest.Test(23);
 finally
  ATest.Free;
 end;

 Writeln(Eoln);
end.
0225デフォルトの名無しさんNGNG
unit Unit1;

interface

type
 TTest = class
 public
  constructor Create(AValue: Integer);
  procedure Test(AValue: Integer);
 end;

implementation

constructor TTest.Create;
begin
 Writeln('Create');
end;

procedure TTest.Test;
begin
 Writeln('Test');
end;

end.

0226デフォルトの名無しさんNGNG
ヘルプに書いてありますた。
> 定義宣言のヘッダーには,クラス宣言で指定したパラメータリストを
> 再度指定してもかまいませんが,その場合は,パラメータの順序,
> 型,および名前をクラス宣言での指定と完全に同じにしなければなりません。
引数は指定しなくてもかまわないのかー。しらなかったー。

constructor TTest.Create;
begin
 Writeln(AValue);
end;

なんて出来るし…。気持ち悪(´д`;)
0227デフォルトの名無しさんNGNG
これがコンパイル通って、
unit Unit1;
interface
type
TBaseTest = class
public
constructor Create(AValue: Integer); virtual;
end;
TTest = class(TBaseTest)
public
constructor Create(AValue: Integer); override;
end;
implementation

constructor TBaseTest.Create(AValue: Integer);
begin
Writeln('TBaseTest.Create(AValue) ', AValue);
end;

constructor TTest.Create;
begin
 inherited;
 Writeln('TTest.Create(AValue) ', AValue);
end;

--実行結果
TBaseTest.Create(AValue) 10
TTest.Create(AValue) 10
0228デフォルトの名無しさんNGNG
これはコンパイル通らないんですね(´д`;)
unit Unit1;
interface
type
 TBaseTest = class
 public
  constructor Create(AValue: Integer); overload; virtual;
  constructor Create; overload; virtual;
 end;

 TTest = class(TBaseTest)
 public
  constructor Create(AValue: Integer); override;
 end;
implementation
constructor TBaseTest.Create(AValue: Integer);
begin
 Writeln('TBaseTest.Create(AValue) ', AValue);
end;

constructor TBaseTest.Create;
begin
 Writeln('TBaseTest.Create');
end;

constructor TTest.Create;
begin
 inherited;
 Writeln('TTest.Create(AValue) ', AValue);
end;
0229620NGNG
キャストについて質問なのですが、
var
 Buffer:array[0..2] of Char;
 s:String;
begin
 Buffer[0]='A';
 Buffer[1]='B';
 Buffer[2]='C';

 s:=Buffer;       �@
 または
 s:=String(Buffer);   �A

end;

この場合、�@や�Aのようにsへ代入するのは正しいのでしょうか?
それとも、ちゃんとBufferの最後にヌル文字を追加してから代入しなければいけないのでしょうか?


0230デフォルトの名無しさんNGNG
>>229
もちろんNULLいります。
0231デフォルトの名無しさんNGNG
>218
APIヘルプの日本語版なら、CDの中に入ってるよ。
Info->Extras->JPHELP->API32WH.HLP
古いので不便なところもあるけど。
0232229NGNG
>>230
そうですか。
疑問に思った理由は「Delphi4プログラミングバイブル」のp979に

strRead:=strRead + string(Buffer);

(strRead はString型、Bufferは添え字0から始まるChar型の配列)

というコードがあるのですが、このBufferも最後のヌルをつけていません。
厳密に正しいのかどうか、気になったので。
0233デフォルトの名無しさんNGNG
>>232
調べてないけどObjectPascalがメモリ確保時に配列を0で初期化しているなら動いてしまう。
でも、それに頼りすぎるのはあまりよくないと思われるので$0はつけるべきかと。
0234229NGNG
ちゃんと書かなかったから悪いのですが、Buffer(Char型の配列)は最初の添え字から最後の添え字まで全部文字データで埋まっています。
つまり、配列のために確保したメモリの中にはヌルの部分がないんです。
なのに string(Buffer)とキャストするのは正しいかどうかちょっと気になりました。
0235デフォルトの名無しさんNGNG
>>234
配列の長さが取得できない以上、各種文字列変換関数で死にます。
0236デフォルトの名無しさんNGNG
High(Buffer)
Length(Buffer)
0237デフォルトの名無しさんNGNG
>>236
じゃあ。安心だね♪

まぁ、激しく非推奨。
0238デフォルトの名無しさんNGNG
>>232
正しい筈です。配列のサイズが上限として、途中に#0があるまでのサイズになります。
system . _LStrFromArray を読むとよいでしょう

0239デフォルトの名無しさんNGNG
「デバッグ版DCUを使う」でじっくり納得いくまで確認しる!!
0240デフォルトの名無しさんNGNG
>>230 × ヌル文字=#0 は配列の場合不要です。
>>233 × メモリ確保時は不定です。しかし配列の場合 #0は不要です
>>235 × Cと違ってDelphiは配列のサイズ情報は関数でも渡されます
0241デフォルトの名無しさんNGNG
>>240
思い出した。確か余計な空白まで取り込んじゃう困ったちゃんな仕様だ。
0242デフォルトの名無しさんNGNG
>>241 ? >>238が書いてる通り 代入されると途中にヌルを見つける迄のサイズになる筈
0243デフォルトの名無しさんNGNG
まとめ
1、String := PChar ; //ヌル迄の文字に自動調整
2、String :=array of Char ; //配列サイズかヌル迄の文字に自動調整
3、PChar := string ; //stringには終端にヌル文字が隠れている。
4、array of Char:=String ;×代入互換性無し


0244デフォルトの名無しさんNGNG
>>242
>>>233 × メモリ確保時は不定です。しかし配列の場合 #0は不要です
0245デフォルトの名無しさんNGNG
×メモリ確保時は不定です。しかし配列の場合 #0は不要です
○関数のローカル変数は基本的にメモリ確保時は不定,自動的に値0で埋められる事はない。
 それとは別に、CHAR配列の要素全てに文字が入っているなら最後に#0でターミネートしなくとも良い
 CHAR配列の途中で文字列を終りたいなら #0でターミネートすれば良い。
0246デフォルトの名無しさんNGNG
フォーカスを移さずして他のアプリケーションにテキストを
送りたいのですがいい方法ありませんか?
0247デフォルトの名無しさんNGNG
>>246
パイプ WIndowsメッセージ Socket OLE etcetc
0248デフォルトの名無しさんNGNG
検索ダイアログにいれた文字列をMemo1の中から検索して選択するプログラム
としてdelphiのヘルプに載っていたんですけど、下の関数の
SkipChars:=SkipChars+(I*2)が何をしているのか全然わからないんですが
誰かおしえてくれませんか?
procedure TForm1.FindDialog1Find(Sender: TObject);

var
I, J, PosReturn, SkipChars: Integer;
begin
for I := 0 to Memo1.Lines.Count do
begin
PosReturn := Pos(FindDialog1.FindText,Memo1.Lines[I]);
if PosReturn <> 0 then {検索文字列が一致}
begin
SkipChars := 0;
for J := 0 to I - 1 do
SkipChars := SkipChars + Length(Memo1.Lines[J]);
SkipChars := SkipChars + (I*2);

SkipChars := SkipChars + PosReturn - 1;
Memo1.SetFocus;
Memo1.SelStart := SkipChars;
Memo1.SelLength := Length(FindDialog1.FindText);
Break;
end;
end;

end;
0249デフォルトの名無しさんNGNG
>>248
検索し終わったんでは?
0250デフォルトの名無しさんNGNG
>>249
すいません。意味がわからないです。
どういうことですか?
0251デフォルトの名無しさんNGNG
for文中の、SkipChars:=SKipChars+Length(Memo1.Lines[J]
で検索したい単語を含む文字列までの全文字数を数えて、
SkipChars+PosReturn-1でその単語の先頭までの文字数を
加えていますよね。これだけで検索できてしまう気がするのですが
0252デフォルトの名無しさんNGNG
>>222
これ中身は英語版ですか?日本語版はありますか?
■ このスレッドは過去ログ倉庫に格納されています