トップページ⇒tech
988コメント302KB

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

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

前スレ モナーの *やさしい* Delphi質問スレ Ver.6
http://pc.2ch.net/test/read.cgi/tech/1019134412/

前スレが埋まるまでは書き込まないで
(あるいはsage進行にして)ください。

>>2-10あたりに関連情報あり
○過去スレ >>2
○関連スレ >>3-5
○Delphi製品情報 >>6
○関連リンク >>7
○質問者へ・回答者へ >>7
○ソース置き場案内 >>8
0159デフォルトの名無しさんNGNG
すみません。インデント忘れました。

TListBoxEx = class(TListBox)
 private
  FOnChangeItemIndex: TNotifyEvent;
 protected
  procedure SetItemIndex(const Value: Integer); override;
 published
  property OnChangeItemIndex: TNotifyEvent read FOnChangeItemIndex write FOnChangeItemIndex;
end;


procedure TListBoxEx.SetItemIndex(const Value: Integer);
begin
 inherited;
 OnChangeItemIndex(Self);
end;
0160デフォルトの名無しさんNGNG
>>158
チミのプログラムには欠陥が2つある。

一つは、リストボックスの選択項目の変更を補足し切れていないこと。
SetItemIndexをオーバーライドしても、プログラム内部からItemIndexをいじったときにしか拾えない。
最低でもWM_COMMANDとLB_SETCURSELというメッセージを拾わなければならないはず。

もう一つはOnChangeItemIndexイベントに手続きが割り当てられていない時を考慮していない
実行すると100%エラー

しかし、その目的のためだけなら、目的の処理を記述した関数を作って、
OnClickイベント内と、ItemIndexを変更するコードの直後に
その処理関数を呼び出た方が手間食わずに良いと思われるが。


まあ、とりえあえずヘルプ読んで出直しなさいってこった
0161デフォルトの名無しさんNGNG
こった
0162デフォルトの名無しさんNGNG
>>159

type
TListBoxEx = class(TListBox)
private
FOnChangeItemIndex: TNotifyEvent;
public
procedure CNCommand(var Msg:TWMCommand);message CN_COMMAND;
procedure LBSetCaretIndex(var Msg:TMessage);message LB_SETCARETINDEX;
procedure LBSetCurSel(var Msg:TMessage);message LB_SETCURSEL;
published
property OnChangeItemIndex: TNotifyEvent read FOnChangeItemIndex write FOnChangeItemIndex;
end;


{ TListBoxEx }

procedure TListBoxEx.CNCommand(var Msg: TWMCommand);
begin
inherited;
case Msg.NotifyCode of
LBN_SELCHANGE:
if Assigned(FOnChangeItemIndex) then FOnChangeItemIndex(self);
end;
end;

procedure TListBoxEx.LBSetCaretIndex(var Msg: TMessage);
begin
inherited;
if Assigned(FOnChangeItemIndex) then FOnChangeItemIndex(self);
end;

procedure TListBoxEx.LBSetCurSel(var Msg: TMessage);
begin
inherited;
if Assigned(FOnChangeItemIndex) then FOnChangeItemIndex(self);
end;
0163163NGNG
s := 'ABCDEFG';
SetLength(s, Length(s)-1);
とやった場合、自動的にsの末尾の文字はメモリ上から解放されるのでしょうか?
0164デフォルトの名無しさんNGNG
>>163 解放されるより#0で埋められると思います
0165163NGNG
>>164
 ということは、メモリ上の値は
ABCDEF#0#0になるということですか?
0166デフォルトの名無しさんNGNG
>>165
 場合によっては末尾の#0は解放されるかもしれません されないかもしれません
0167デフォルトの名無しさんNGNG
delphiXってdelphi6では使えないのね...ショック

0168delphi6personalNGNG
VCL使いまくりなんでFormの上がごちゃごちゃになってます。
新しいFormを作った方がいいんでしょうか?
ただ、一つ増やすだけで実行ファイルの大きさがほぼ2倍に…。
やはり動作が軽い方がうれしいんですが。
0169デフォルトの名無しさんNGNG
  |-□□-| フムフム
   \ - /
0170デフォルトの名無しさんNGNG
>>168
男ならコンソール。
0171デフォルトの名無しさんNGNG
UPXで、あっしく
0172デフォルトの名無しさんNGNG
あんまり沢山 WinContrl載せると Win98とかリソース不足で困った事になるよ
0173デフォルトの名無しさんNGNG
>>168
>一つ増やすだけで実行ファイルの大きさがほぼ2倍に…。

こういうことはありえません。

0174デフォルトの名無しさんNGNG
音量コントロールのダイアログをプログラムから開くにはどうしたらいいですか?
0175デフォルトの名無しさんNGNG
>>168
>VCL使いまくりなんでFormの上がごちゃごちゃになってます。

VCL は Delphi ひとつにひとつしかありません。
0176デフォルトの名無しさんNGNG
>171
>UPXで、あっしく

これをすると何が楽しいのでしょう?
0177デフォルトの名無しさんNGNG
>>163
>s := 'ABCDEFG';
>SetLength(s, Length(s)-1);
>とやった場合、自動的にsの末尾の文字はメモリ上から解放されるのでしょうか?

おもしろい質問だね。「そうじゃない」という答えがあったらどうするつもり
なんだろうね。
0178デフォルトの名無しさんNGNG
質問です。お願いします。

本についてるサンプルコードの「書込み禁止」を解除したいのですが、できません。
右クリックで出るヤツのチェックをはずしてもダメでした。
どのようにすればいいですか?
0179デフォルトの名無しさんNGNG
>>178
それ以上の方法はない。
CD-ROMのファイルとか言ったら殴る。
0180デフォルトの名無しさんNGNG
 AssignFile(f, 'C:\test.tmp');
Reset(f);
for i := 0 to c do
BlockWrite(f, Data[i]);
という感じにしたとき、Closeするまでファイルに書き込まれる全データは
メモリ上に確保されているのですか?
0181この話題は散々既出だがNGNG
>>176
圧縮率とかによって違うかも知れないが、1MB程に膨らんだアプリが
やはりモノ次第ではあるが約300K程度に縮んで、
アプリの起動が速くなることがある。

あとネットワークでプログラムを配布したいとき、
FD等の低速少容量メディアで常用したいときも、
結構(゚д゚)ウマーになれる。

要は目的次第で使うか使わないか決めればいいだけ。
馬鹿の一つ覚えのように全部のプログラムにやる必要はない。
0182デフォルトの名無しさんNGNG
>>179
、、、なんというか、、申し訳ありません、、。できました。

>右クリックで出るヤツのチェックをはずしても
エディタ上でこれをやってました。(コンパイルもセーブも不可)

Delの外からフォルダ内の全部のヤツの「読み取り専用」のチェックをはずしたらできました。

約1日のどツボでした、、。ありがとうございました。
0183デフォルトの名無しさんNGNG
>>174
直接APIを叩くか sndvol32.exe を実行。
/R オプションとか付けて実行すると録音ボリュームが出せるよん。
0184168NGNG
で、Formは1つがいいのですか?2つがいいのですか?
0185デフォルトの名無しさんNGNG
>184
ひとりより、ふたりがいい♪
 ふたりより、さんにんがいい〜♪
0186174NGNG
>183
サンクス!助かりました。

0187デフォルトの名無しさんNGNG
>>185
サンバルカンかよ!!
0188デフォルトの名無しさんNGNG
>>185
Hですか?
0189デフォルトの名無しさんNGNG
>>187 正解
>>188 ひとしくん人形没収
0190デフォルトの名無しさんNGNG
1変数のマイナス演算子と2変数の減法演算子との異なる点を挙げよ。
っていう問題を教えてください
0191デフォルトの名無しさんNGNG
>>190
いい加減にしな。
0192168NGNG
いや、ネタではなく
>>184
0193デフォルトの名無しさんNGNG
>>192
一重積んでは母のため・・・
 二重積んでは父のため・・・
0194デフォルトの名無しさんNGNG
>>168
場合によりけり。これだけの情報ではなんともいえん。
ただ2つにするなら、2つ目は自動作成の対象から外しとけよ。
0195168NGNG
>194
thx!
0196デフォルトの名無しさんNGNG
存在するファイルのサイズを調べるにはどうしたらよいでしょうか?
FileSizeを使用すると、開かなければならないし、テキストファイルはできないみたいだし。
0197デフォルトの名無しさんNGNG
>>196
APIにないか?
0198196NGNG
>>197
自己レス
解決しました。
TSearchFile.Sizeで取得できました。
0199デフォルトの名無しさんNGNG
for文の繰り返しの中でtry ...except でエラー処理を行ってるのですが、
繰り返し中にエラーが出た場合、エラー処理後次の繰り返しの処理を
行ってほしいのですがどうすればいいでしょうか?
try
for i:=0 to count-1 do
listview.Items.Item[i].SubItems.Add(strName[i]);
except
on EOLeException do begin
lstFile.Items.Item[i].SubItems.Add('エラー');
statusbar.Panels[0].Text:='エラーです');
//ここで次の繰り返しに処理が戻ってほしいです
end
end;
0200デフォルトの名無しさんNGNG
tryの位置が間違ってない?
0201デフォルトの名無しさんNGNG
>>199
for i:=0 to count-1 do
 try
  listview.Items.Item[i].SubItems.Add(strName[i]);
 except
  on EOLeException do begin
   lstFile.Items.Item[i].SubItems.Add('エラー');
   statusbar.Panels[0].Text:='エラーです');
  end
 end
0202デフォルトの名無しさんNGNG
>>199
forの中にtry入れれば動きそうな・・・。
0203デフォルトの名無しさんNGNG
>>199
何故そのような複雑怪奇なブロック構造…はどうでもいいが、

単にforループの中にtry〜exceptを記述したらだめなの?
0204デフォルトの名無しさんNGNG
二分の間に4つもレスが付くとは…
0205デフォルトの名無しさんNGNG
逆四面楚歌です。
0206真人間NGNG
あの、でるふぁいは結構覚えやすくて
いいと聞いたんでこれからフリー版で
始めてみようかなとおもっとるんですが。

ちょっとした簡単なソフトを作成するぐらい
だとして、開発環境にはデルファイ本体含めてどれくらいの
容量を必要としますか?

HDDが残り6Gなので心配ですです。
あと、でるふぁいをインストールしたことで
なにかしら問題がおこったり、アンインストールが
大変だったりしませんか?
よろしくお願いします。


0207デフォルトの名無しさんNGNG
>>206
ネタですよね。
0208デフォルトの名無しさんNGNG
>>206
ダウンロードページにも行かないで真人間とか言われても困る。
それくらいの実験も出来ないで〃
0209デフォルトの名無しさんNGNG
VBと比べて起動がかなり重いとだけ言っておいてやろう
0210デフォルトの名無しさんNGNG
>>209
そう言えば女神様の顔結構長時間見てた記憶が・・・。
BCBよりは有機質的で好きだけど。

起動後はさくさくだけどね。
0211デフォルトの名無しさんNGNG
VBと比べてもコンパイルがかなり速いとだけ言っておいてやろう
0212デフォルトの名無しさんNGNG
>>211
そう言えばVB、コンパイル中のプログレス結構長時間見てた記憶が・・・。
VCよりは早くて好きだけど。

コンパイル後はバグバグだけどね。
0213デフォルトの名無しさんNGNG
Win2K RC2 にサービスパックあててる場合、
インストールできないという罠。
0214デフォルトの名無しさんNGNG
しかし、そんな奴はめったにいない罠
0215デフォルトの名無しさんNGNG
>>213
つぅか未だにRC使ってるってタイーホ。
0216デフォルトの名無しさんNGNG
RCが分からなくってとりあえず笑ってる >>206
0217デフォルトの名無しさんNGNG
ListBoxのOnMeasureItemでHeightに256以上を入れると
表示がおかしくなるのですが(256を越えると0に戻るっぽい)
1つのセル(?)の高さを256ピクセル以上にする方法は
無いもんでしょうか?
0218真人間NGNG
みなさんどうも。
コンパイルが早いとかはもう調べてありますし、
ボーランドのサイトにもいって落としそうにもなりました。
聞きたいのは、でるふぁいの本体のサイズとかじゃなくて
なにかしら小規模なアプリを作成出来るような環境にするには
どれくらいのスペースが必要ですかということなんでし。

本体展開すればそれであとは必要ないんでしょか?

ねたじゃないでう。
0219デフォルトの名無しさんNGNG
Windowsの制限じゃないの?
DrawGridかなんか使うしかないんかな。
0220デフォルトの名無しさんNGNG
>>218
6GBありゃ十分、
開発するシステムの規模によるが、小規模アプリなら
ひとつで bin / src あわせても 10MB ぐらいじゃないの。
0221デフォルトの名無しさんNGNG
6G空いていて何が心配なんだろう…
CD3枚入れたとしても半分も埋まらないのに…
0222デフォルトの名無しさんNGNG
>>220
Delphiで10MBは中規模かと。
日曜プログラマとしては。
0223デフォルトの名無しさんNGNG
10MBは、なかなか行かんなー
0224デフォルトの名無しさんNGNG
営業にはふっかけるタイプなんで。
0225真人間NGNG
そうですか。つまり、デルファイ本体以外には特に必要ないということですね。
いやー、mpgは容量食うんで、いま6Gでもそのうちなくなっちまうんじゃ
ないかと。
そろそろCDRに焼きたいんですが、自分家にはないもんでなかなか・・・。
どうもでした。
まずはHSPから始めてみようと思います。
0226デフォルトの名無しさんNGNG
素晴らしいオチだ。
0227デフォルトの名無しさんNGNG
>>225
HNからしてネタ
0228デフォルトの名無しさんNGNG
>>225
どうでもいいけどあなたは誤った道を選択したと言っておく。
あくまで俺の価値観だから気にしなくても良いよ。
0229デフォルトの名無しさんNGNG
あの、真人間は結構覚えが早くて
いいヤツと聞いたんでこれからメルトモとして
付き合い始めてみようかなとおもっとるんですが。
0230真人間NGNG
ネタでオブラートしたマジな質問でした。
本当にアリガトウございました。独女板にかえります。
0231デフォルトの名無しさんNGNG
お花畑住人によろしくつたえといて。
0232デフォルトの名無しさんNGNG
いっぱい釣れた
0233デフォルトの名無しさんNGNG
キャッチ&リリースでお願いします
0234デフォルトの名無しさんNGNG
あの子のハートをキャッチ&リリース
0235デフォルトの名無しさんNGNG
あの子のハートをアロック&デリート
0236デフォルトNGNG
あの子のハートをトライ&キャッチ
0237デフォルトの名無しさんNGNG
つまんない人間だね。
0238199NGNG
200さん201さん202さん203さん 遅くなりましたがレス有難うございます
エラーが出たらtryから抜けるのでfor文の中に入れればいいのですね
ひとつ賢くなりました。

0239デフォルトの名無しさんNGNG
あの子のハートをK&R
0240デフォルトの名無しさんNGNG
オマエモナー
0241デフォルトの名無しさんNGNG
人間じゃなかったよ
0242デフォルトの名無しさんNGNG
あーあ
0243デフォルトの名無しさんNGNG
imagingのimgEditのscrollpositionについて教えてください
画像を表示させて画像をマウスで選択したら、選択したところを拡大
するようにしたいので、まずmousedownイベント時にX座標とY座標を
記憶させ、mouseupイベントでマウスボタンを離した場所のX,Y座標から
選択範囲を計算させintX:=abs(startX-X);intY:=abs(startY-Y);
perX:=imgEdit.Width / intX;perY:=imgEdit.Height / intY;
imgEdit.zoom:=(min(perX,perY))*100;
というふうに拡大率を出し、(startX,startY:選択開始位置)
imgEdit.ScrollPositionX:=startX;imgEdit.ScrollPositionY:=startY;
と画像を表示する場所を指定してあげても指定した位置に表示されません
どうかお願いします
0244デフォルトの名無しさんNGNG
=== [ ▼PR ] =========================================================
獲得ページにて毎日ポイント獲得!広告すると毎日のポイント増えるかも!?
http://www.fkfk.net/PrPointMail/PointMail.ASP?WCI=Home&WCE=125176
======================================================== [ ▲PR ] ====

銭欲しいか?
0245デフォルトの名無しさんNGNG
( ゚д゚)ホスィです
0246デフォルトの名無しさんNGNG
>>167
過去ログぐらいみやがれよ、散々がいしゅつだが使えます。
ちっとはweb検索しやがっていただきたく思う所存にございます。
0247246NGNG
これだけだとアレなんで
http://turbo.gamedev.net/delphixd6.asp
ホレ。
0248217NGNG
>>219
レスありがとうございます。
Gridとは盲点でした。
ちょっとやってみたらGridなら高さ1000にしても問題無いみたいです。
0249デフォルトの名無しさんNGNG
「俺が作ったコンポーネントを2ちゃん住人が試し斬りするスレ」
を作っていい?

いや、別スレ立ててまでやる必要はないとは思うが、
こういう事やっていいスレはどこかにないか?と。
0250デフォルトの名無しさんNGNG
Delスレ立てすぎると風当たりが強くなるぜ。
とりあえず、相談室あたりでネタが続くかどうかやってみてからでも遅くないのでは?
0251デフォルトの名無しさんNGNG
D6にて、動的にフレームを生成してフォームに貼り付けたいのですが、
フォームが閉じられた時にparentで指定したオブジェクトが開放されると
動的に生成したオブジェクトも開放されるのでしょうか?

それとも FormのDestroyあたりで、明示的に開放しないと駄目でしょうか?

こんな感じでやってます、

procedure TForm1.FormCreate(Sender: TObject);
var
i:Integer;
begin
  for i:=1 to 99 do
  begin
    Frame[i]:=TFrameDenBody.Create(Self);
    Frame[i].Parent:=Self.ScrollBox1; //<---フォーム上のScrollBoxの上に作成
    Frame[i].Visible:=True;
    Frame[i].Name:='iFrame'+IntToStr(i);
    Frame[i].AutoSize:=True;
    Frame[i].Top:=(Frame[i].Height*(i-1));
 end;

あと、実際開放されているか否かを確認する方法ってパフォーマンス
モニタで確認するのでしょうか?それとも何か良いツールがありますか?
あれば教えて下さい。
0252デフォルトの名無しさんNGNG
procedure TForm1.FormCreate(Sender: TObject);
var
i:Integer;
begin
  for i:=1 to 99 do
  begin
    Frame[i]:=TFrameDenBody.Create(Self);
なんでこんなのをうつと
プログラムになって
pcがうごくのかよくわからん
0253251NGNG
>>252
すみません、よく理解できないのですが、
Create(Application)じゃないとって意味でしょうか?
0254デフォルトの名無しさんNGNG
1、Parentを指定すれば、もちろんその親が解放される時に一緒に解放される

2、解放されたかどうかを見たいなら、

type TFrameDenBodyExt=class(TFrameDenBody)
public
destructor Destroy; override;
end;

として destructor TFrameDenBodyExt.Destroy; でログに吐いてみたら?

例えば
destructor TFrameDenBodyExt.Destroy;
begin
AllocConsole; writeln(Name);
inherited;
endl;
とか

もちろん 作成は
 Frame[i]:=TFrameDenBodyEx.Create(Self);
0255Delフサギコ ◆zE1iiRdQ NGNG
>    Frame[i]:=TFrameDenBody.Create(Self);
>    Frame[i].Parent:=Self.ScrollBox1; //<---フォーム上のScrollBoxの上に作成

FrameのOwnerはSelf=Form1
FrameのParentはScrollBox1

Ownerが破棄されるときには一緒に破棄されるけど
Parentが破棄されても一緒には破棄されんかったと思う。
Parentが破棄されると消えちゃうけど。

 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
   ∧,,∧    
  ミ,, ゚Д゚彡 
   〃つ旦O
 〜ミ,,[ ̄ ̄ ̄.]
      ̄ ̄ ̄
0256251NGNG
>>254
解放の確認方法まで教えていただき、ありがとうございました。
0257251NGNG
>>255
つまり、Create(Self.ScrollBox1)の方がいいって事でしょうか?
0258デフォルトの名無しさんNGNG
>>257
折れは Frame[i]:=TFrameDenBody.Create(Self);でいいと思うよ。
但し、初期化をサボってOwnerを破棄して再作成する事で初期化するってなら、scrollbox1を指定した方が楽かな。
■ このスレッドは過去ログ倉庫に格納されています