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

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

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

<その他>
ボーランド
http://www.borland.co.jp/
DelWiki
http://onigiri.s3.xrea.com:8080/delphi/
>>1
4デフォルトの名無しさん:04/07/14 15:25
多用する変数などをクリックするだけで
エディタに打つソフトなどってありますか?
よろしくお願いします。
漏れは普通にエディタにはっつけて、
ダブルクリックで範囲してい、ctrl+Cとctrl+Vでコピペ

これ軽くて最強
>>4
CLCL
・・・・・・・。
ctrl+Mじゃだめなの?
8デフォルトの名無しさん:04/07/14 16:49
学校の課題でDelphiのプログラム提出しなきゃいけないんですが、なんかいい例ないですか??
>>8
とりあえず何でもOKということ?

Flash暗算とか。
10デフォルトの名無しさん:04/07/14 16:52
なんでもいいっす!締め切り迫ってるので
11デフォルトの名無しさん:04/07/14 17:03
>>9
そのプログラムの作りかたってわかりますか?まるでちんぷんかんぷんなので…
>>11
作り方ってあんた。。

Timer1つ使えばできるけど。。
ラーメンタイマーがおすすめ
14デフォルトの名無しさん:04/07/14 17:09
12>>
Timerってなんでしょう…??
授業で習ったことをやればいいじゃん
>>4
CTRL+J
関係ないけどコレも使っとけ
http://www.gexperts.org/

>>8
ゲ製作技術板でソース付のプログラムがイパーイあるよ
177:04/07/14 17:51
すいません。
CTRL+SPACEでした。どうしても訂正しておきたくて・・スレ汚しスマソ
>>16
うひょー
Ctrl+J便利だな。知らんかった
19デフォルトの名無しさん:04/07/14 18:07
>993 :デフォルトの名無しさん :04/07/14 11:35
>TIdHTTPでGetメソッドを実行するとき、タイムアウトはどこで設定出来ますか?

>998 :デフォルトの名無しさん :04/07/14 13:13
>普通にReadTimeoutプロパティじゃないのか?

タイムアウトが発生したことは分かるプロパティのようですが、
タイムアウト時間の設定が分かりませんでつ。
>ReadTimeout は,読み出し可能な接続まで待機する,ミリ秒単位の時間を示します。
>
>property ReadTimeout:Integer;
>
>説明
>
>ReadTimeout は Integer プロパティで,その接続が,プロトコルスタックを使用してピア接続が読み出し可能になるのを待機する時間をミリ秒単位で示します。
>
>ReadTimeout はReadFromStackで使用します。

したがってミリ秒を入力してやればいいんじゃない?
2119:04/07/14 18:34
しまった、自分が使ってるのはDel7でなくてBCB6なのでIndy古いかも。
ヘルプには無いし、IDEでも出てこない!
>>16
GJ
ランダム関数で、一度出た数値を出さないようにすることはできますか?

ShowModalで開き、mrOKのボタンで閉じたフォームから
値をstring型を受け取る方法はありませんか?
25前スレ 942:04/07/14 21:06
前スレ 972
buf → @buf に変更したところ
コンパイルは出来ましたが、ERROR_MORE_DATA が帰ってきました。
bufSize の値を確認すると 4 となっていましたので 適当に 255 に変更しました。

そうすると次のエラーメッセージが表示されます。

プロジェクト .........\Project1.exe が例外により実行を停止しました。
'access violation at 0x6c90c28c: read of address 0x6c90c28c'
再開するにはステップ実行または実行を選択してください。

途中でShowMessage(msg);を実行すると期待した結果が表示されますが
戻り値では正しい値を返していないようです。
ぬるぽ みたいなのですがどこがおかしいのでしょうか?
26前スレ 942:04/07/14 21:06

function GetUNCName(PathStr : String) : String;
var
bufSize : DWord;
buf : TUniversalNameInfo;
msg : String;
begin
// bufSize := SizeOf(TUniversalNameInfo);
bufSize := 255; //変更する
if (WNetGetUniversalName(PChar(PathStr), UNIVERSAL_NAME_INFO_LEVEL,
@buf, bufSize) > 0) then
case GetLastError of
ERROR_BAD_DEVICE : msg := 'ERROR_BAD_DEVICE';
//   ・・・ 略 ・・・
end
else
begin
msg := buf.lpUniversalName;
ShowMessage(msg); //期待した結果が表示された
end;
Result := msg;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text := GetUNCName(Edit1.Text); //access violation エラー
end;
GetMem(Pointer(buf), MAX_PATH);
bufSize := MAX_PATH;
if (WNetGetUniversalName(PChar(PathStr), UNIVERSAL_NAME_INFO_LEVEL,
Pointer(buf), bufSize) > 0) then
 :
FreeMem(Pointer(buf));
28デフォルトの名無しさん:04/07/14 21:52
>>24
class function を使って開く
>>26
WNetGetUniversalName を呼ぶ前に文字列を受け取るためのバッファを確保して、
そのポインタを buf.lpUniversalName に入れておくんじゃないですか?

buf は初期化されてないから、そこに入っていた値のアドレスで bufSize 分の
メモリを破壊してるんだと思います。

bufSize := 255;
buf.lpUniversalName := StrAlloc(bufSize);
if WNetGetUniversalName(PChar(PathStr), UNIVERSAL_NAME_INFO_LEVEL,
  Pointer(buf), bufSize) > 0 then
// 略
else
  Result := buf.lpUniversalName;
StrDispose(buf.lpUniversalName);

>>24
Free する前なら Form2.Edit1.Text みたいにしてアクセスできますよ。

それとも ModalResult として文字列が欲しいんですか?
文字列を動的変数にしてそのポインタを TModalResult にキャストすれば
それも可能ですが、どこで解放するのかよく考えてください。
30A:04/07/15 00:25
>>23
一度出た数値を記録しておいて、もし出た数値がそれなら、
もういちど、やり直す。とか。
出る数値の数が、少なくて一定なら、あらかじめ全ての数を用意しておいて
それをランダムに並べ替えておく。とか。
if (Hoge = 'A') or (Hoge = 'B') or (Hoge = 'C') then ...
というようなコードがあるのですが、
if Hoge = 'A' or 'B' or 'C' then ...
のような具合に簡素に記述するにはどうすれば良いのでしょうか?
()
1バイトなら in が使える。
>>31
Char 型なら if Hoge in ['A'..'C'] then とか。
string なら多分それが一番短いから諦めろ。
そうですか…ありがとうございました
>>31
自分で関数作ってみては?
関数の中を美しく記述したかったのです
string対応なら AnsiIndexStr(Hoge, ['A', 'B', 'C']) >= 0 とか
と、なると当然引数も偉いことになってるワケかな。
40A:04/07/15 02:06
>>24
Form2側のpublic部に、Text: string を作成。
閉じる前に、Textに、渡したい値を記憶しておく。

if Form2.ShowModal = mkOK then s := Form2.Text;

とか。
>31
if AnsiMatchStr(Hoge, ['A', 'B', 'C', ...]) then
42名無しさん@5周年:04/07/15 08:41
前スレ982です。

まだ解決はしていませんが、とりあえずのんびりやっていきますね。

いろいろありがとうございましたm(_ _)m
43デフォルトの名無しさん:04/07/15 11:01
こんにちは、はじめまして。

DBEditなどで入力したTableデータをQuickReportにて
郵便振替など書式の決まった用紙に印刷したいのですが
(特に金額や口座番号で、機械読取りの為に枠が決まっている箇所)
QRDBTextでは文字間隔を設定する事ができません。

D6proを使用しておりますが、なにか良い解決方法を
ご指南頂ければ幸いです。
Del対応の、いいデバッグツールってない?
標準デバッガしかねーよ
TDは却下
すいません、教えてください。
Form1からForm2を作って、Form2でShowMessageでダイアログを表示しました。
Form1でイベントが発生してForm2を閉じると、表示したShowMessageやMessageDlgが
そのまま残ってしまうのですが、これもForm2を閉じるタイミングで一緒に閉じる方法って
ありますか?あるようでしたら、方法を教えていただけないですか?
ShowMessageで開いたダイアログを自動的に閉じる方法は最近の過去ログにあるはず。
前スレでtrgbtripleについて質問したのですが
まさかもう消えているとは思わず、見れませんでした。うう・・・
どなたか回答していた人はおられたでしょうか?
49前スレ 942:04/07/15 22:02
>27,29

提示していただいたサンプルを試してみました。
両方ともエラーは無くなりますが、
帰ってくる値は期待しているものとは違い
文字化けしたデータが帰ってきました。

色々私なりに調べてみましたがAPIなどの
高度なレベルは手が出ませんでした。

今回はあきらめてまたレベルが上がったら挑戦してみたいと思います。
おつきあいいただき、ありがとうございました。
>>48
どんな質問だったか忘れたが、「RGBTRIPLE」で検索してみれ。それと同じ物だ。
>>48
windows.pasに、以下の宣言があるよ。

tagRGBTRIPLE = packed record
  rgbtBlue: Byte;
  rgbtGreen: Byte;
  rgbtRed: Byte;
end;

TRGBTriple = tagRGBTRIPLE;

ただのR、G、Bの値を入れるレコード型みたいだよ↓こんな感じで保持かな
var
  RGB : TRGBTriple;
begin
  RGB.rgbtBlue := 255;
  RGB.rgbtGreen := 255;
  RGB.rgbtRed := 255;
end;

52デフォルトの名無しさん:04/07/15 23:43
JEDI の言うコンポーネント集を使用したいのですが
Mozilla Public Licence ライセンスということらしいのですが、よくわかりません
↓ここを見つけたのですが意味が理解できませんでした。

http://jt.mozilla.gr.jp/MPL/MPL-1.1J.html

簡単に説明してもらえませんか
商用可なのかとかソースを公開しないといけないのかなど
注意点を教えてください
不正確な翻訳を2chで解説してもらったライセンスなんて怖くて使えないわけだが。
原文読んで法務と相談しとけ。
54デフォルトの名無しさん:04/07/16 02:04
下のような手続きで、TEditに入力できるキーを制限したいのですが
引用符( ' )を「許可する入力キー」に加えると当然エラーが出てしまいます
こういう場合どうすればいいのでしょうか。
低レベルな質問で申し訳ないですがよろしくお願いします。

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
AcceptStr: string;
begin

// 許可する入力キー
AcceptStr := '01234567890.,\;:@';

if (Pos(Key, AcceptStr)=0) and (Ord(Key) <> VK_BACK) then
Key := #00
else
Key := Key;

end;
''
#39を使え。
5754:04/07/16 02:15
できました('A`)
簡単な質問にわざわざ答えて頂き申し訳ない・・
>>53
【GPL】ライセンス問題すれ 2【BSDL】
http://pc5.2ch.net/test/read.cgi/linux/1070819470/
>>52

http://itpro.nikkeibp.co.jp/NIP/license.html
> 米ネットスケープ・コミュニケーションズが作成したライセンス
> 規定。ソースコードを複製・改変したオブジェクトコードを頒布
> するときにはGPLと同様にソースコード公開の義務が発生するが,
> GPLほど公開すべき範囲は広くない。MPLのソースコードと独自開
> 発のソースコードを組み合わせたソフトを作成し,そのソフトの
> オブジェクトコードを頒布する場合は,MPLのソースコードの部
> 分だけを公開すればよい

http://jt.mozilla.gr.jp/MPL/mpl-faq.html
> 私のプロプライエタリ・アプリケーションに MPL 化コードを使用した場合、
> 全てのソースコードを手放さなければならないのでしょうか?

> ファイルが変更または変更を含んでいるために MPL 化されたファイルは
> ライセンス(またはこの FAQ 中)で定められた通りに入手可能にしなけれ
> ばなりません。その他のファイルはプロプライエタリとして保持することが
> できます
60デフォルトの名無しさん:04/07/16 15:20
フォルダ監視しててアプリがロードしたよ!って、
画面を点滅させたいんですが、どうしたら良いですか?

FlashWindowを使ってみましたが、タイトルバーが点滅して、
まるで画面からフォーカス外れただけみたいな地味な感じですた。
>>60
標準の機能はそれくらいしかないよ。
あとはタスクトレイのアイコンを表示したりバルーンヘルプを表示したりとか。
自分で使うだけならマウスに追尾するTipHelpライクなウィンドウでも表示したら。
>>60
背景を白と黒で定期的に塗りつぶせば点滅になるんじゃないの?
6360:04/07/16 15:58
バルーンヘルプが楽で良さそうですね。

TAnimateで良いんだけど、数秒動かすためには、これだけのためにスレッドかタイマーか、、、面倒。
いいじゃん、そのぐらい
タイマーならポトペタだし
48です。どうもありがとうございました。
検索してもほとんど出てこないんですよね。。。
>>63
面倒ならプログラマやめたほうがいいよ。面倒なことだらけだし
TStringGridについて質問です。
固定セル(FixedRows)を1行にしている場合に
その固定セル行(FixedRows)をクリックするとイベントが発生するように
OnClickイベントを記述したのですが、
イベントは発生せずクリックしたセルの左側の縦線が黒くなるだけの状態です。
例えば、以下のコードをOnClickイベントに書いても反応なし(上記の状態)です。

if SG.Row=0 then showmessage('0row');

FixedRowsを無くして普通のセルの1行目をクリックすればコード通りにShowMessageされます。
固定セルでもOnClickイベントが効く様にするにはどっかのプロパティを設定をするのでしょうか?
教えてください。お願いします。


OnMouseDown or OnMouseUpイベントで、
var
ACol, ARow: Integer;
begin
SG.MouseToCell(X, Y, ACol, ARow);
if ARow = 0 then showmessage('0row');
end
と、するよろし
>>69
ありがとうございます。
OnMouseDown 使ってできました。
でも、何故固定セルの時はOnClickは使えないんだろう
そういうものなのでしょうか?
ソースみれば理由が解かるよ。 Pro版へバージョンアップしよう。
XLSファイルを読み込んで
テキストの一致や日付の比較してエラーログ吐き出すのって
Del7パーソナル版でも出来ますか?
データベース関係はヘルプも見れないから使えないのだろう・・・
BaseCLXとやらで作るか、全部プログラムするしかないの?
Excel XLSはデータベースとは関係ないので手間はどれを使っても似たようなもの。
なお BaseCLX はデータベースとは関係ない。
7371:04/07/17 21:12
そうですか・・・。
関数でTStringList型を戻り値にしたのですが
コンパイラにEAccessViolation errorを表示され怒られてしまいました
例えば、ButtonOnClickイベントの中で下記のようなコードを書くとできません。

BT:=TStringList.Create; //OnClickイベントでTStringList型のBT
try //戻り値の型がTStringListの関数TEST()
BT:=TEST(); //@コンパイルはできるけどエラーが出る
BT.Add(TEST());     //Aコンパイルすら通らない
BT.SaveToFile('C:\te.txt');
finally
BT.Free;
end;
上の@,Aはどちらかって事です。
***** TEST() ******
begin
FuncT:=TStringList.Create;
try
for i:=1 to 5 do
begin
FuncT.Add(IntToStr(i));
end;
Result:=FuncT;
finally
FuncT.Free;
end;
end;

長文になりましたが、TStringListを戻り値として扱う時
どうしたらいいのでしょうか? 
>>74
そりゃTEST0内でFreeしたら消えちゃうだろ。
TEST0でTStringList(TStringsの方がいいかも?)の引数を取るようにして
呼び出し側でCreateしたBTを渡すのが基本かな。

BT:=TStringList.Create;
try
TEST()(BT);
BT.SaveToFile('C:\te.txt');
finally
BT.Free;
end;

procedure TEST0(FuncT: TStrings)
begin
FuncT:=TStringList.Create;
for i:=1 to 5 do
begin
FuncT.Add(IntToStr(i));
end;
end;
end;
あ、end;が一個多かった。
なんでFuncTをCreateしてんだ<俺
そんなわけで修正。

BT:=TStringList.Create;
try
TEST()(BT);
BT.SaveToFile('C:\te.txt');
finally
BT.Free;
end;

procedure TEST0(FuncT: TStrings)
begin
for i:=1 to 5 do
begin
FuncT.Add(IntToStr(i));
end;
end;
>>75-77
ありがとうございます。
>そりゃTEST0内でFreeしたら消えちゃうだろ。
ぽっくり気が付きませんでした。
しっかりEAccessViolation言ってくれてるのに…やばい_| ̄|○

class functionってなんなのでしょうか?
調べてみたのですが使い方、用途が全くわかりません。
よろしくお願いします
自分でprocedureを作り、その時procedureに渡す引数の数が違ってくる時の
対処法ってありますか?

procudure ABC(int1:Integer; int2:Integer);
procedure ABC(int1:Integer);

要は、手続きABCを幾つか使用する時に
Integer型の引数2つを渡さなければ出来ない場合と
Integer型に引数1つを渡してその一つだけで何とかなる場合があるのです。
後者の例として、var1だけ渡した時にABCの中でvar1,var1+1という感じに
できるので引数が1つで済むと言う事です。
手続きに渡す前に var2:=var1+1; とし結局引数を2つ渡せば済むのですが
あまり賢くない気がします。
他に方法はあるんでしょうか? 
overloadしたら?
8280:04/07/18 12:24
>>81
overloadって引数として渡す変数の型が違う時のですよね。
overloadについていつも思っていた事があるんですけど
overloadするよりも型変換してから同じ関数に渡す方がよくないですか?
overloadする関数が長い時は、コードが倍になってしまって勿体無い気がするんですけど
この辺はどうなんでしょうか?

別にoverloadは引数の型のためだけにあるわけじゃないよ。
同じような動作だけど実装が異なる場合とか

>overloadするよりも型変換してから同じ関数に渡す方がよくないですか?

いちいち型変換してつかってちゃめんどうじゃん。
それならoverloadした関数の中で型変換して元の関数を呼び出すようにした方が
ソースの見栄えも(多少)よくなる。と思う。
別にoverloadは引数の型のためだけにあるわけじゃないよ。
同じような動作だけど実装が異なる場合とかいろいろ。

>overloadするよりも型変換してから同じ関数に渡す方がよくないですか?

いちいち型変換してつかってちゃめんどうじゃん。
それならoverloadした関数の中で型変換して元の関数を呼び出すようにした方が
ソースの見栄えも(多少)よくなる。と思う。
8580:04/07/18 13:01
>>83

>それならoverloadした関数の中で型変換して元の関数を呼び出すようにした方が
>ソースの見栄えも(多少)よくなる。と思う。
これは確かに私もそう思います。
ありがとうございました。
8680:04/07/18 14:08
度々申し訳ございません。
overloadの事がやっぱり気になります。
overloadで同じようなコードを二つも書くんだったら
最初から関数名を解りやすく二つ書いて引数も各々の型で渡せばいいのに、と思ってしまいます。
正直overloadのメリットが解らないです。
コードが膨大になるとやっぱりoverload使った方がすっきりするのでしょうか?
場合にもよるけど、同じ動作部分だけ別に作っておいて、
オーバーロードする関数で適宜処理をしてからその関数を呼び出せば
コード量はそんなに多くはならないと思うけどな。

処理内容がまったく異なるなら、オーバーロードするよりも別の
関数にしたほうがわかりやすいと思う。
8880:04/07/18 15:02
>>87
度々の回答ありがとうございます。

私とても大きな勘違いしていたかもしれません。
今までオーバーロードの中身って全く一緒だと思っていたんですが
自分の激しい思い込みだということに気づきました…
これは只見やすくするための便宜的なものだったのですね。
極端な話、関数をオーバーロードで宣言すれば
同じ名前の関数で全く違うコードがかけるみたいだし。
今読んでいる参考書の例だと
オーバーロードされた二つの関数の中身5行のコードが全く同じだったもので・・・。

>オーバーロードする関数で適宜処理をしてからその関数を呼び出せば
>コード量はそんなに多くはならないと思うけどな。
この一言で気づかされました。
こんな阿保に付き合ってもらって本当に申し訳ございませんでした。
処理時に大量のワーク変数を使用する場合、
処理→開放→処理→開放と繰り返すより、ある程度保持して再利用したほうが
結果的にメモリの消費を抑えられるでしょうか?
>>89
保持している間は他に使うことが出来ないわけだから、すぐ解放した方がメモり消費を抑えられると思うんだけど。
あと、保持していたりすると解放し忘れたりするかも。

処理時間を短くするのなら保持する手もあると思うけど、純粋にメモり消費量だけなら解放した方がよさそう。
メモリーマネージャあたりが上手につくってあれば、その手の処理はある程度自動的に行われるかもしれないし。
91デフォルトの名無しさん:04/07/18 21:27
Terapadみたいに行番号を表示するRichEditコンポーネントってありますか?
Synedit
93デフォルトの名無しさん:04/07/18 21:53
サンクス
>>79
Create しなくても使えるメソッド。
あまり使わないから、今知る必要はない。

>>89
メモリのフラグメンテーションが気になるなら、自分で管理した方が良い。
95デフォルトの名無しさん:04/07/19 01:17
やべっ、無限ループ書いちゃったかも、
なときに、コードの実行を中断するには、どうすりゃいいんでしょう
一時停止
97>>96:04/07/19 01:36
パニクッてました、ごめんなさい
Windodw Stateを画面いっぱいにしていたためにメニューバーの存在を忘れてました。
わけもわからず Ctrl + Pause とか、ALT + Ctrl + Del とか押して、
けっきょくタスクマネージャからDelphi終了
「デバッグを終了しますか」のメッセージに救われました。

作成の段階では画面いっぱいにはしないほうがいいですね。
CTRL+F2
99デフォルトの名無しさん:04/07/19 15:01
Delphiでのメソッドの呼び出しで、()の付加を強制させるにはどこを設定すればいいのでしょうか?
DelphiとVB.NETでどちらが生産性が高いですか?
>>100
Delphi使えるレベルの人間が使った場合は同程度かそれ以上。
VBしか使えないレベルの人間が使った場合はVB6以下。
残念ながら世の中そんなモンです。
DelphiとC++Builderは、言語が違うだけで
生産性は同等と見ていいの?
なんかDelphiいまいちなんでどうせならBuilderにした方が・・・と思ってきた。
103デフォルトの名無しさん:04/07/19 21:45
csvファイルの読み込み方、またはタブ区切りテキストファイルを読んで
タブで分けて配列に入れる方法を教えて下さい。
その前にTStringListというオブジェクトについて調べてみるのも一興だ。
定数constは型を指定できないのですか?
参考書には指定しないでInteger型、String型(''で囲んでる時)として
扱っている感じでしたの。
ちなみにTColor型の定数を使いたいです。
String型で指定して型キャストしたけどやはりダメでした。
解決策をお願いします。
s: shortstring = 0;
>>106
ありがとうございました
>>107
ごめん。なんかshortstringなのに0とか書いてるし。
まあ察してくれたみたいだけど。

const
 s: shortstring = 'てすと';
>>102
そのレベルで言語を選ぶなって偉い人なら起こるだろうな。
というか「生産性」って何よ?すげー抽象的
>>108
いえいえ、わざわざありがとうございます。
ヘルプ見てみたら、それらしき例文も載っていたので申し訳ないと思ってます。
これからはヘルプでまず調べたいと思います。
それにしても、参考書もネットでの検索でも
delphiの情報少ないな…
当たり前の文法も載ってないような気がする。
HBitmapからTBitmapを取得する方法を教えてください
>>99
脳内設定。
114デフォルトの名無しさん:04/07/20 00:13
TTreeViewに、
TCheckListBox みたいな
Check 部分を付けるプロパティはありますか?
115デフォルトの名無しさん:04/07/20 00:24
>>114
ない。
Imageで自力処理すべし。
116114:04/07/20 00:38
>>115
やはりないですか。
わかりました。無念!
>>114
プロパティは無いが、SetWindowLong で TVS_CHECKBOXES 付けてやれば出来る
チェック状態の取得も SendMessage 使うけど
118114:04/07/20 00:55
>>117
dクス。それは良いこと聞いた。
試してみまス。
昨日始めたばっかりなんですけど、formを動的に作成するのはどうするのでしょうか?
というか、ヘルプの通りやってみたら、新しく出来た1つのフォーム以外操作不能になるんですけど、
これを操作できるようにするにはどうするのでしょうか?
PCゲームのセーブデータ改変ツールを作ってます
セーブデータをバイアンリエディタで開いたとき
アドレス00000058の値を、00から01に変換するツールをつくりたいんですが
どうやったらできますか?

ボタン1を押すと、アドレス00000058の値が0だったら1にする
1だったら変えないというやり方を教えてください。
121デフォルトの名無しさん:04/07/20 04:56
何気にNewtone社のImageKit6がGIFとTIFF-LZWのロックを解除してくれたね
米ユニシスの著作権切れの影響?
ShowModalとShowの違い。
TFileStream
TMemoryStreamの方がいいか。
GIF切れ祝い。バンジャーイ。
>>121
なるほど。対応が素早いな。
>>103
遅レスですまんが
TStringListのcommatext(だっけか?)
>>103
遅レスですまんが
TStringListのcommatext(だっけか?)
>>127
TStringListのDelimiterText。
但しTStringListはDelimiterTextを使っても文字列にスペースがあると
勝手に区切り文字として解釈してしまいます。ダブルクォーテンションで
囲めばよいのですが、Excelなどでcsvファイルを作るとスペースがある
文字列でもダブルクォーテンションを付加してくれません。
データ群を扱うときに
レコードにするかとクラスにするか、って何を基準にすればいいのでしょう?
>>129
レコードで済むならレコード、そうでないならクラス。
>>129
固有(である必要はないと思うけど)の操作が必要かどうかではないのかな。
貴方はクラスがあるのにレコードを使うメリットって何だと思うの?
132129:04/07/20 13:54
>>130-131
わたしもその通りだと思います。
ちょっと今回作ったクラスがあまり使い勝手が悪くて悩んで(迷って)いるのです。

>貴方はクラスがあるのにレコードを使うメリットって何だと思うの?

いちいち作成・破棄を気にしなくてもいいとか、たくさんあります。
逆にレコードだとstring型を含んでいるとき保存がやっかい。
俺はclassを使うかな。
作って、TObjectListに格納させれば管理も楽だし。
ついでに継承させれば、データを加工するメソッドも
簡単に追加できるし。
>>120
まず「ボタン1を押すと…」「読み込んだ値が1だったら変えない」とかだけなら作れますか?
もしそれが作れないようならまずそこから勉強してください.以下,それを理解している前提で.

ファイルの読み書きは以下のような流れで行います.
・ファイルを開く→読み書きしたい場所に移動する→読み書きする→ファイルを閉じる

以下,単純な読み込みのサンプルです
procedure TForm1.Test01;
var
 Stream: TFileStream; // ファイルストリーム(ファイルを読み書きするモノ)
 ByteData: byte; // 読み出した1バイトの値を格納する
begin
 // ファイルを開く
 Stream := TFileStream.Create(OpenDialog1.FileName {←目的のファイル名}, fmOpenReadWrite {←既存のファイルを読み書きするモード});
 try
  // 読みたい場所に移動する
  Stream.Seek($00000058, soFromBeginning {←先頭から} );
  // 読む(読むと読み込んだ分だけ後ろに移動します)
  Stream.Read(ByteData, sizeof(byte));
  finally
   // 閉じる
   Stream.Free;
  end;
 ShowMessageFmt('読み出した値は%d($%x)です', [ByteData, ByteData]);
end;
書き込むときはストリームのWriteメソッドを使います
ByteData := 1;
Stream.Write(ByteData, sizeof(byte));
Case 文って場合によってはifより使いやすいですよね?
変数aが1から5までの場合、
>>132
>>いちいち作成・破棄を気にしなくてもいいとか、たくさんあります。
>>逆にレコードだとstring型を含んでいるとき保存がやっかい。

言ってることが無茶苦茶だな。
Case文で

Case a of

1:Label1.Caption:='まさお'
2:Label1.caption:='かずお'
3:Label1.Caption:='ひろみ'

みたいに、たくさん増えていったら一つ一つに
Label1.Caption:=を打つのが面倒なんですが
これを簡略化する方法ってありますか?
Label1.caption自体を短くしちゃうとか・・・
>>137
with
case文の中で、Label1のCaptionを変える以外の処理もあるなら

var
 s: string;

case a of
 1: s:='まさお';
 2: s:='かずお';
 3: s:='ひろみ';
end;
Label1.Caption := s;
>138様
>139様
おー、なるほど
そういう方法を使えばよかったんですか。
ありがとうございます
case を使わないってのは

const
 AStr : Array[0..2] of String = ('まさお', 'かずお', 'ひろみ');
begin
 Label1.Caption := AStr[a-1];
end;
Label1のCaptionを変えるだけなら

const
 names: array[1..3] of string = ('まさお', 'かずお', 'ひろみ');

Label1.Caption := names[a];
何が違うんですか?
同じだな。多分ほとんど同時にカキコしたんだろう
>>143
aの値に応じてCaptionを変えるだけなら>>141-142の方法でいいけど
例えば同時に、aに応じて色やフォントも変えるとなったらcase使うほうがいい
あれ、>>141>>142のちがいについて(;´Д`)?
>>137
お前はプログラマに向いてない。間違いない!
148141:04/07/20 16:39
ごめん、余計なこと書いたかな
caseでの話だもんな
>>147
いやいや「もっと楽できないかな」と考えるのも必要な資質だと思うぞ。
自分で考えればなおいい
var P : PChar;

P := P + 'hogehoge';

これはコンパイルエラーになりますが、
これをstring等にキャストしないでやるにはどのようにすればいいでしょうか?
copystrかstrcopyかなんかそんな関数があったはず
152151:04/07/20 17:07
ごめんなさい。勘違いだったようです
フォームやボタンの大きさを変更できないようにするにはどうやったらいいですか?
最大化も不可
procedureやfunctionなどの手続きを簡単に作成する方法は
ないでしょうか、、D6Perです。。
>>122-123
サンスコ。ほぼDelphi歴=プログラム歴なのでヘルプの内容すらいまいち理解できませんが、
取り合えずできました。やり方あってるのか知らないけど。
そしてまた疑問だらけになりますた。あぁ入門書買ってこよう・・・
156150:04/07/20 19:21
>>151
StrCopyを調べて見つけたStrCatで出来ました
ありがとうございました
TcpClientを使ってIRCクライアントを作っています
パケットを監視しているとちゃんとメッセージを受信しているのに
OnReceiveイベントが発生しません なぜでしょうか?
>>119
失敗するコードあげろ
>>154
気合
160103:04/07/20 21:31
>>127 >>128 どうもありがとう。やってみます。
それにしてもHELPって初心者には探し難い作りだねぇ。
同じ処理を100回繰り返すにはどうしたらいいの?
var
 i: integer;
begin
 for i := 1 to 100 do
  ShowMessage('1回ぐらいヘルプ見れ');
end;
>>154
ツール → エディタオプション → 支援機能 → コードテンプレート
>>154
定義を書いて Shift + Ctrl + C
>>164
横からでスマンが、それってどうやって使うの?
D6"Per"
167A:04/07/20 23:52
>>165
Pro以上のDelphiにしかない機能なので、stdとかperの人には使えない。
DelphiのIDEを拡張するGExpertsに同等の機能があるらしいが、
入れてないので詳しいことは知らない。
お前らAnsiMatchStr, AnsiIndexStr/Textくらい知っとけ。
それからTStrings.CommaTextが扱う形式はCSVではなくSDFだ。
これらを知らずしてこのスレで質問することは不許可だ分かったかこの低脳ども。
ずいぶんと低い敷居だな
>>158
既に解決しますた。Del6perのヘルプにまんま載って宝そのままやったら119
>>168
口調は悪いがいい奴だな
自衛隊?
比較方法が問題無のですよ。

173デフォルトの名無しさん:04/07/21 06:43
TStringGridの各セルに自分で打ち込むのではなく
決められた幾つかの選択肢から選ぶようにしたいのですが
どうしたらいいでしょうか?
マウス操作だけでできるようにしたいのです。

入力したいセルをクリックしてから、コンボボックスから選択
PopupMenuから選択。
>>173
無理。
ComboBoxを動的に生成したら。
どっかでドロップダウンやってるの見たことあるような気がするんだけど
多分DBGridと記憶がごちゃ混ぜになってるんだろうな俺、うん。
178デフォルトの名無しさん:04/07/21 13:29
TStringGridの編集開始メソッドを派生して、
元の処理を殺してコンボボックスを表示すれば出来るよ。
>>177
市販のActiveXなグリッドコントロールにそういった機能があるよ。
Excelにもね。割りにポピュラーな機能ではあるけどStringGridにはその機能は無いと。
同じようなのに挑戦してる人がいるね

http://forum.nifty.com/fdelphi/samples/00485.html
http://forum.nifty.com/fdelphi/samples/00200.html

TStringGridのObjectsに、そのセルに入力できるデータを
TStringListあたりで保持しておいて、そのセルがクリック
されたときに、セルの上にTComboBoxを動的に生成。

TComboBox.ItemsにTStringListをAssignすればいけそうだね。
これはTCheckBoxだけど、役に立つかな?

http://codecentral.borland.com/codecentral/ccweb.exe/listing?id=15441
> TStringGridのObjectsに、そのセルに入力できるデータを
> TStringListあたりで保持しておいて、

うひゃー、それは無駄すぎ。改行込みのテキスト1つで十分。
183180:04/07/21 14:41
>>182
項目数とデータ量にもよるけど、
まー一つの案ということでw

テキストで持つとすると、どういうフォーマットにすれば、
簡単なんだろうね?考えるの('A`)マンドクセから考えもしないけど。
>テキストで持つとすると、どういうフォーマットにすれば、

一番簡単なのは、stringの二次元の動的配列。Col Row の対応が一意。 
自分だったら、派生したTStringGridにレコード配列持たせて、
DrawCellをオーバーライドして自分で書く。

TStringGridのセルにデータを保持させるとやっかい。
VIEWにデータを保持させるべからず。
>派生したTStringGridにレコード配列持たせて、

>VIEWにデータを保持させるべからず。

矛盾してない?
ポインタを配列みたいに使いたいんで

type
TIntArray = array[0..0] of integer;
PIntArray = ^TIntArray;

とかやるのって問題ある?
グダグダ逝ってないでとっととコード書いてうpれや
もうすこし細かく書くと、

派生したTStringGridにドキュメントクラス・プロパティ(レコード配列)持たせて、
外からドキュメントクラスを渡してやる。

こうすれば、1つのドキュメントクラスを複数のViewが描画しても矛盾起きないし、
VIEW同士のデータの出し入れは要らないし。

また、DBに書き込むメソッドは、VIEWが持つ必要は無く、ドキュメントクラスだけに持たせる。
>>187
TIntArray = array[0..High(Integer) div SizeOf(Integer)-1] of Integer;
にしとけ
試してみた

type
TIntArray = array[0..0] of integer;
PIntArray = ^TIntArray;

procedure TForm1.Button1Click(Sender: TObject);
var
pIA:PIntArray;
i:integer;
begin
GetMem(pIA,SizeOf(integer)*100);
for i := 0 to 99 do pIA^[i]:= 10000-i;
for i := 0 to 99 do Memo1.Lines.Add(IntToStr(pIA^[i]));
FreeMem(pIA);
end;
>>190
意味不明。
PIntArray 使いたいなら TIntArray = array[0..1000000] of integer; でもOK
[0..0]でも[0..1]でもOK
>>189
そんじゃ、行や列が削除されても対応できるように
TStringGrid派生classは、本来表示すべき配列aと、選択肢を持つ配列bを
渡せるように二つのプロパティを持ってて、ただそのデータに従って描画
するだけのclassになるのね。

行の削除とかはドキュメントクラスが行って、aとbの整合性は、その時点で
保証されているものとすると・・・。

なんか大がかりだなw
>>192
意味不明なリテラルばら撒くな。

>>191
0..0だと
$R+でエラー出るだろ。
> $R+でエラー出るだろ。

出る。範囲チェックなのね。

ところで

> High(Integer) div SizeOf(Integer)-1

は、なぜ High(Integer) じゃないの? 
>>194
>本来表示すべき配列aと、選択肢を持つ配列bを
そうなんだけど、ドキュメントクラスというきっちりしたクラスが配列を持ってる方が良い。

単なる配列だと、メソッド足せないし。
Help より

添字型は範囲が 2GB を超えない順序型です。

なるほど。
>>191
で、結果は?
> VIEWにデータを保持させるべからず。

> ドキュメントクラスというきっちりしたクラスが配列を持ってる方が良い。

正論だけど、>>182 のような用途では大げさ杉。
ということは1GBの構造体の場合は[0..1]が限度ということか・・・
>>199

{$R+} しなけりゃ問題なし。でも >>190 に従うよろし。
>>200
なことない。

ドキュメントクラスが配列メンバを持つだけだし、数行。
204デフォルトの名無しさん:04/07/21 15:33
TColorBox に任意の色のみを表示させるにはどうしたら良いのでしょう?

1. Clear して、Items.Add('clBlack') など追加していくと、近い感じではあるの
だが、色がすべて黒になってしまう。

2. Items.Delete で必要なもの以外を削除。

2. で実現できそうではあるのですが、できれば、1 の感じの方法で実現したいのです。
> VIEWにデータを保持させるべからず。

ねぇ、これって厳密に適用すると、TMemo のテキストやら、ListBox の Items
やら、StringGrid の Cells[] やら Edit の Text やら、Doc クラスだらけ
にならんのか?
>>204
Items.AddObject('clBlack'、色)
とかでねーの。未確認だけど
>>145
こんな手もありますよ.
type
 TPersonalInfo = record
  Name: PChar;
  Color: TColor;
  FontName: PChar;
 end;

const
 cPersonalInfos: array [1..3] of TPersonalInfo = (
  (Name: 'まさお'; Color: clRed; FontName: 'MS Pゴシック'),
  (Name: 'かずお'; Color: clBlue; FontName: 'MS P明朝'),
  (Name: 'ひろみ'; Color: clGreen; FontName: 'MS ゴシック')
 );

begin
 Label1.Caption := cPersonalInfos[Index].Name;
 Label1.Font.Color := cPersonalInfos[Index].Color;
 Label1.Font.Name := cPersonalInfos[Index].FontName;
end;
>>207
なぜ Name と FontName は string じゃなくて PChar なの?
>>205
一つのデータを複数箇所に表示する可能性があって、
それぞれデータの整合性が保たれていなければいけ
ないときとかぐらいでいいんじゃね?

俺もちと大げさだと思う。
>>205
Form一個にドキュメントクラス1個で良いよ。
ただ、Gridは再描画とか高機能な編集のために、例外的に持たせるみたいな。
>>209
クラスを記述出来る言語で、非クラス化は損するだけ。
見た目的にも損だし、ちょっと作り出すとすぐに非クラス側の行数が膨らんで行数的にも損する。
Delphi付属デモの解説、どこかにないですか?
コメント嫁
>>213
コメントのないデモも、ちらほらと・・・
libraryやActiveXだと、実行方法も良く分からず・・・とほほ
215デフォルトの名無しさん:04/07/21 21:50
デルファイのエディタに窓をドロップしたときに付く

=======X

↑はどうやってつければいいのですか?
216デフォルトの名無しさん:04/07/21 22:17
Delphiってフリーソフトなんですか?
>>208
・Cの構造体定数と同じノリで作ったから
・stringだとうまく動かないかなと思ったから
です.

でもちょっと実験してみた限りではstringでも動いてくれているようです.

begin
end

これ、なんとかなりません?
{
}
でやりたいんですけど・・・
{ } がコメントで使われてるから永遠にならないと思う。
b+(Ctrl+J)で出るようにコード支援設定しとけ
OpenToolsAPIで、好きなキーで好きな文字列を短縮入力できるようにしとけ
222218:04/07/21 22:53
>>219-221
わっかりました!
そう素直に返事されると気楽に書いたのが恥ずかしくなるな…
OpenToolsAPIによる短縮入力は、↓が大変参考になります

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1007345219&rm=100
PersonalじゃOpenToolsAPI使えないんだけどな
>>167
Pro以上のみの機能だったのですか。
でもこの機能が無くてすべて手書きなんて・・・ 考えられない。
>>207-208
PChar型だと、長い文字列型へコピーが行われる。
リテラルなstring型ならポインタのコピーのみで済む。
(リテラルなので参照回数は-1のまま。 詳しくはマニュアルに載っている。)
よってstring型の方が効率が良い。
228デフォルトの名無しさん:04/07/22 00:31
>>215
これおながい
demos見れ
受け側のウィンドウの UseDockManager を True にすれば、
ドッキングしたときにそういうのが出るけどそれのこと?
231デフォルトの名無しさん:04/07/22 02:13
どうしてWideStringは参照カウンタが無いのですか?
付箋みたいなの作りたいんだけど、Memoじゃなくて、Labelみたいな編集できない領域に
テキストファイルを読み込ますのはどうするの?
このスレ見ると超初心者って俺だけじゃん、って気がプンプン
>>232
似たようなレベルだけど・・・

MEMOコンポーネントで、ReadOnly := True; じゃ駄目なの?
えぇとなんて言うのかな。これ。
それだと編集はできなくても、メモ領域で操作できますよね。
それを不可能にしたいんです。
>>234
TStringList.LoadFromFile して
Lable.Captionにセットかな?

改行が有る場合は、自分で連結(たぶん)
普通にLabel1.Caption:='12'#13#10'34;だとできるけど、
LoadList:=TStringList.Create;
LoadList.LoadFromFile('test.txt');
x:=LoadList.Count;
for i:=1 to x do
Label1.Caption:=(LoadList[i-1])+#13#10;

だと改行しないんだけど、何が間違ってるのかしら?
恥を晒した所で寝ま。ヒャッホー
あぁ改行しないんじゃなくて上に書いてるだけなのか、漏れ。
できますた。解りますた。サンスコ
オレならForm1.Canvas.TextOutでいく。
>>239でもアッサリできました。こんな簡単な事に悩んでたのか・・・
TextOutだとOnPaintとかで毎回書かないと消えちゃうから、その辺を考慮しないと。
>>236
つーか、わざわざ1行づつ読まなくても
Label1.Caption := LoadList.Text;
でいいじゃん
243デフォルトの名無しさん:04/07/22 07:15
98使ってるんですが、マイドキュメントに画像をおいて、
picload ""で画像を指定しても、画像は無いってなります、
どうしてでしょうか?
教えて、エロい人
>>243
98って何よ?
PC-9801だったら、漏れはお前を尊敬する
>>243は夏厨。スルーよろ。
picloadって聞くと、HSPを思い出す
懐かしや
>>244
>>245
わかって煽るお前等が噂に聞く夏厨ですね
6001mkU使ってるんですが、マイドキュメントに画像をおいて、
picload ""で画像を指定しても、画像は無いってなります、
どうしてでしょうか?
教えて、エロい人
持ってるけど今更出して調べる気にもならんよ。
Talk命令で遊んどけ。

’カキクエバ カネガナルナリ ホウリュウジ ’ピッ(エラー音) ←これ知ってるやつナカーマ
>>248
カセットテープデッキのヘッドが汚れている可能性が高い
クリーナを麺棒につけて掃除が吉
あまり猛暑が続くと猛暑脳になるらしいな
>>217
> でもちょっと実験してみた限りではstringでも動いてくれているようです.

Delphi でレコード型のフィールドで文字列を保持するのなら、むしろ
string 型の方が普通です。サイズを固定にするのなら、array[0..100] of Char
とか短い文字列の string[100] とかにします。PChar にすると、今回のような
const で文字列リテラルで初期化するときは問題ありませんが、通常の変数や
クラスのフィールドのときは、代入する前にいちいちメモリを確保してから
コピーする必要があります。また、破棄も個別に行わなくてはなりません。
>>210
> Form一個にドキュメントクラス1個で良いよ。

そうなの? それで実行時にユーザが Memo や Edit で文字列を編集したときは
どうやって同期を取るの? なんだか、原則にに溺れて本質を見失ってる感じが
するね。
>>232
今更だけど、俺ならパネルの上にMemo置いてパネルを無効に。
イロエロな方法があるんですね・・・他の機能付けてからどれが良いか考えてみまつ。
>>230
UseDockManagerをTrueにしても出ませんでした

ドラッグするためのバーと閉じるためのボタンを表示して欲しいのです

======X ←こんなやつ

Memoをドックできるようにするとクリックするだけでドック状態になるので
Memoをクリックしてフォーカスを移動させることが出来ないのです

>>229
Demosのどれを見ればいいのでしょうか?
>>256
C:\Program Files\Borland\Delphi7\DemosのDockingというデモがそれだな。
ウィンドウ表示させて、メインのフォームにドラッグすると、それでてくるよ。
>>256
C:\Program Files\Borland\Delphi7\DemosのDockingというデモがそれだな。
ウィンドウ表示させて、メインのフォームにドラッグすると、それでてくるよ。
あのデモだけじゃとてもコードを流用しようという気にはなれないし
フォームの退避・復旧のコードも抜け落ちてるしで
はっきり言って使い物にならないんだけどな。
261260:04/07/22 18:08
ページの一番下でつ
>>257-261
ありがとうございます
Panelに乗せるだけで実現できるんですね
レコード型の中の変数から、条件付で最小値を割り出す関数なんてあります?
ネストを使わずに処理したいのですが。

わかりにくいですね。詳細を書きますと、

A[0..15]という配列をレコードで定義していまして、
レコードの中にXpos(:Integer)、Ypos(:Integer)、等を定義しています。
それで、例えばA[1]を基準として、
比べるA[n]のXposが同じであることと、
Yposが基準とする変数よりも大きいこと、
その条件をクリアしたA[n]の中から、最小のYposを求めたいんです。

ちなみにver6を使ってます。
ない
ループ使って自分で検索しろ
>>263
そんなに非常に特殊な場合のための関数なんて、どう考えても汎用にはならないから標準では用意されているわけないと思う。

自分で作るならこんなかな

result := 考え得る最大値;
for 最初 to 最後 do
  if Xpos が一緒で、Yposが基準より大きくて、result < Ypos then
    result := Ypos;
>ネストを使わず
これってどういう意味だろう?
>>266
一直線に処理したいんだろ
>>263
オブジェクトにすればクイックソートが付いてくるよ
ソートしたいわけじゃないだろ
検索にソートするのは無駄大杉
270263:04/07/22 22:22
ここのレスめちゃくちゃ早いですね。皆さんありがとうございます。
>>266
すいません、大それた目的は無いのですが、単純に計算量を減らしたかったんです。
Timerを使って何度も計算をさせるため、少しでも短縮化できれば、と。
現状でも動作が鈍くなることが見受けられるので、
これ以上プログラムを複雑化するとマトモに動かないんじゃないかと。

ちなみに作ってるのはシミュレーションのアニメです。
車の挙動をシミュレートして、アニメーションで表示するんですよ。
それでお互いの車両の距離を算出するのに、先に書きましたプログラムが必要となるんです。
Xposが車線、Yposが車両の位置です。
OpenGL使ったほうが早かったりして
272265:04/07/22 22:45
>>270
16台くらいなら何とかなるんじゃない?最近のコンピュータは速いから。

あと、車を動かすのは自分のプログラム?それとも他のプログラム?
自分のプログラムで動かすのなら、動かすところを細工をすれば、もっと高速化できそうだけど。
誰か >>231 をプリーズ



>>273
必ず実体化されるからでは?
>>273
そういう風に実装してあるから・・・じゃダメなんだろうな。
>>231
気にするな
Oleで使うから、わざわざVBの文字列と互換にしてある。
OleVariantとVariantのように、OleWideStringを作ってもよかった気がするが、
>>276が正解なんだろう。
TThreadのスレッドは
Execute関数を実行し終わったらスレッドは開放されるのですか?
いったんExecute関数を通り抜けてしまったらその後でResumeしても
もうExecute関数は起動しませんか?
Delphi6使ってます。
WindowsXPでRC2入れたら、
デバッグ中にやたらntdll.dbgbreakpointとやらが発生して
いちいち止まっちゃうんですが。
ほかに同様の現象にあってる人いません?
もしくは対策ご存知の方いらしたらぜひ情報をお願いします。

おとなしくDelphi7買えってことかな…。
280263:04/07/23 00:30
>>272
あ、16台っていうのは、あくまで例なんです。
ソフトを起動した際に、交通量に関する情報をユーザーが入力して、
その上で計算結果を、画面内で制御する車両の台数と認識させるので、何台になるかわからないんですよ。
紛らわしい書き方失礼しました。

車を動かすプログラムですが、僕が作ったものです。全てゼロから作ってます。
レコードの中にYposへの加算値(画面上では車両速度)も定義してまして、
それを前方との車両の距離で随時変更させるという方法を取っています。
アニメーションの表示は・・かなり原始的と言われそうですが・・
(Xpos,Ypos)に画像を描写⇒背景を描写⇒(Xpos,Ypos+加算値)に画像を描写、の繰り返しです。
全て同じTimer内で制御しています。
>>279
とりあえずWIN2000互換モード
>>281
だめですた。
>>282
ちょっとぐぐってみたら、メモリ開放関係のエラーっぽい。
なんか複雑なことやってない?
>>283
特に複雑なことはやってませんよ。
RC2入れる前はふつーにデバッグできてたものなので。
もしかしてRC2から導入されたメモリ関連のセキュリティにVCLがひっかかってんじゃないかなぁ、と。
RC2アンインスコしようかな…。
開発マシンに変なもん入れるなよ
DLLの読み込みがらみ?
DELPHI-MLの過去ログ72316にも同じ話が・・・

こちらはWIN2000SP2。SP3にしたら直ったらしい。
Delphiの問題じゃなくて、SPの問題(バグ)の予感。

解決策はRC2止めるか、Ctrl+F9でEXE作ってIDE外でEXE実行するか
どちらかしか無い模様
WriteProcessMemoryでDbgBreakPointの先頭にRET(C3h)を書き込むとか、
INT3の位置にNOP(90h)でも書き込めばいい。
>>278
FreeOnTerminate := Trueで自動的に破棄される

SuspendすればResumeで再会できるけど、
Executeを通り過ぎたらdestructorが呼ばれて破棄される
>>278
再利用したいなら、処理が終わった段階でExecuteを抜けずにSuspendさせておき、
外からプロパティ等を設定してResume。
Suspend中に破棄する時はTerminateを呼び出してResume。

という方法使ってます。
>>288-289
Thx
jpeg.pasがないのは仕様ですか?
DelphiのCD
:\Info\Extras\Jpeg\jpeg.pas
>>292
ありがとうございます。そんなところにあるとは思いませんでした
232ですけど、解らない事だらけになったのでマズは付箋ソフトその物を作ろうと思ったんですが、
完全にサイズ境界線?を見えなくして且つサイズ変更可にするのはどうすれば良いのでしょうか?
キャプションなし、フラットなウィンドウでサイズ変更可能にするって事でつ。
変数名や関数名を、変数にセットして参照や実行は出来ますか?
296デフォルトの名無しさん:04/07/23 12:20
>>294
これで、我慢しろ!
SetWindowLong(Panel1.Handle, GWL_STYLE, GetWindowLong(Panel1.Handle, GWL_STYLE) or WS_THICKFRAME);
SetWindowPos(Panel1.Handle, Form1.Handle, 0, 0, 0, 0, SWP_NOZORDER or SWP_NOSIZE or SWP_NOMOVE or SWP_DRAWFRAME);
>>295
ポインタ使えばできるんじゃね?
>>295
クラスのプロパティやメソッド名ならできる。
TObject.MethodAddressとか
>>295
できるはず。ヘルプの「手続き型」のような話だよね?

>手続き型を使用すると,手続きや関数を値として扱い,
>変数に割り当てたりほかの手続きや関数に渡したりすることができます。
>たとえば,2 つの整数パラメータを受け取って整数を返す Calc という関数を定義したとします。
>
>function Calc(X,Y: Integer): Integer;
>
>Calc 関数は変数 F に代入できます。
>
>var F: function(X,Y: Integer): Integer;
>F := Calc;
301A:04/07/23 15:04
>>295
変数”名”や関数”名”をセット、っていうことだから、こういうことがしたいんじゃないの?

var s: string;
s := 'FuncA';
Exec( s );

これで、 procesuer FuncA; が実行される。ての。

>300のと組み合わせて、
名前、と、手続き型をセットにした、リストを作っておいて、
使うときは、名前で検索、手続き型を呼び出し、って感じにすればいいのかな?

もっといい方法があるかもしれないけど。
Execってなに?ヘルプに出てこないし
コンパイルも通らないけど
例だから動くわけがない。
type
TFunc = procedure (fn: string);

//引数にする関数
procedure Exec( fn: string );
begin
Form1.Caption := fn;
end;

//メイン
procedure main
begin
CallFunc( FileName, @Exec );
end;

//関数を渡されて処理する関数
procedure CallFunc( fn: string; func: TFunc );
func( fn );
end;
type
TFunc = procedure (s: string);

//引数にする関数
procedure Exec( s: string );
begin
Form1.Caption := s;
end;

//関数を渡されて処理する関数
procedure CallFunc( s: string; func: TFunc );
begin
func( s );
end;

//メイン
procedure main;
begin
CallFunc( 'test', @Exec );
end;
すみません、質問させてください。
実行時に、Alt+F4を行うと画面が閉じますよね?
そういうファンクションキーの設定を行いたいのです。
実行時にフォーム1が表示されるとして
F3を押下したときにTForm2を表示、F2を押下したときにTForm2をCloseさせたいのですが。
TActionListなどを使うとできるのでしょうか?
簡単なソースであれば是非教えてください。
ActionかMenuItemのShortCutにF3とかF2とか設定するだけ
>>296のは駄目ぽい。>>299だとできそうでつ。さんきゅぅ
Webアプリで、CGIを置く場所はどこですか?

IISを使用する場合、C:\Inetpub\Scriptsに置けと書いてある事が多いのですが
上手く動きません。
>>309
とりあえずセキュリティを気にしなければ
C:\Inetpub\wwwroot\YourSite\YourApp.exe
とかでいいんじゃないの。
>>310
仮想ディレクトリを作成しないと駄目という事でつか?
C:\Inetpub\Scriptsって、何の為に有るんでしょう?
>>311
別に駄目って事は無いよ。
ScriptsにファイルYourApp.exeを置くと
http://localhost/Scripts/YourApp.exeにアクセスできるようなる
開発・テストは仮想ディレクトリとして公開したほうが手っ取り早い。
実際はCGIなんてどこに置いても動くよ。
313デフォルトの名無しさん:04/07/23 22:46
StringGridのような升目ではなくて、不定形な形にデータを表示させたいのですが
Excelのセルの結合みたいな感じです
どうすれば出来るのでしょうか
メモリー上にファイルを作ること出来ますか?
Wavを鳴らすときにいちいちHDDに読みに行くのをやめさせたいのですが
StringGridもしくはDrawGridのDrawCellをオーバーライドして枠消し&自分でデータ書き。

OnDrawCellイベントでも同じことできまつ。
>>299
どうやっても、漏れの頭では斜めにサイズ変更できませんですた(´・ω・`)ショボーン
解決方法キボンヌ
あ、できますた。スマソ
318313:04/07/23 23:43
>315

すみません、もう少し詳しく教えてもらえませんでしょうか
>StringGridもしくはDrawGridのDrawCellをオーバーライドして枠消し&自分でデータ書き。
 こっちはなんのことか、よくわかりません(ごめんなさい)

>OnDrawCellイベントでも同じことできまつ。
 これについて考えてみたのですが

Excel風にA列-C列,1行-3行あるとして
_______A______B______C
1[_____________][______] A1B1結合
2[_____][______][^^^^] C2C3結合
3[_____][______][______]

のようにしたい考えたとき
Acol,ARow = 0 のとき Rectには
A1の範囲がわかると思うのですが、B1の範囲はどのようにしてわかるのでしょうか
A1を描けと言われたらA1に入る部分だけ描いて、
B1を描けと言われたらB1に入る部分だけ描けばよろし
EXCELみたいな事をやりたいならEXCEL埋め込めばいいのに。
データ表示だけでOffice必須ソフトにするのはまずいだろ。
>>299を使ってる時にフォームのダブルクリック判定はどうするのん?
1つ解決したら1つ問題が出るよウワァァァン
>>322
Labelを貼り付けてAlignをalClientに設定して、ダブルクリックを関連付ければよろし。
・・・根本的な解決になってないな。
>>322
GraphicControl のマウスイベントは親に飛んできたメッセージから
呼ばれるから、親で取れないならどっちにしろ無理。

非クライアント領域をクリックしたことになってるので、クライアント
領域をクリックしたことにしてやればいい。

procedure TForm1.WMNCLButtonDblClk(var Message: TWMNCHitMessage);
var
  Point: TPoint;
begin
  if Message.HitTest = HTCAPTION then
    with TWMMouse(Message) do
    begin
      Msg := WM_LBUTTONDBLCLK;
      Keys := MK_LBUTTON; // 面倒なので手抜きです
      Point := SmallPointToPoint(Pos);
      Point := ScreenToClient(Point);
      Pos := PointToSmallPoint(Point);
      WindowProc(TMessage(Message));
    end
  else
    inherited;
end;
うぅむ解んない・・・・
>>322
ナニゲニメッセージ系を沢山処理が必要になるようだったら、
根本というか使うコンポーネントから変えた方が良い。

コンポーネントの何を使うか実験は、数分で出来るっしょ。
>>322
思いつきでこういう手を考えてみたが、どうだろう。

グローバル変数を宣言する。
ver
 FormDblClick: Integer;

Procedure TForm1.WMNCHITTEST(Var Msg: TWMNCHITTEST);
に以下のコードを加えてみる。

if not (Pos.X > (Left + CBorder)) and (Pos.X < (Left + Width - CBorder))
 and (Pos.Y > (Top + CBorder)) and (Pos.Y < (Top + Height - CBorder)) then
  FormDblClick := FormDblClick + 1;
if FormDblClick > 1 then
 begin
  //( ゚Д゚)<ダブルクリック時処理
  //( ゚Д゚)<正確にはダブルクリック以上時処理?みたいな
  //( ゚Д゚)<コードは自分で書くように
  FormDblClick := 0;
 end;

タイマーをフォーム上に置いて、以下のコードを記述する。
procedure TForm1.Timer1Timer(Sender: TObject);
 //( ゚Д゚)<Timer.Intervalは250以上くらい?
 if FormDblClick > 0 then
  FormDblClick := FormDblClick - 1;
end;

なお、まともに動作しなくても当局は関知しない。
//( ゚Д゚)<書いてから気が付いたけど
//( ゚Д゚)<別にグローバル変数宣言しなくてもForm1.Tag使えばいいと思った
>>327
×if not (Pos.X > (Left + CBorder)) and (Pos.X < (Left + Width - CBorder))
  and (Pos.Y > (Top + CBorder)) and (Pos.Y < (Top + Height - CBorder)) then
○if (Pos.X > (Left + CBorder)) and (Pos.X < (Left + Width - CBorder))
  and (Pos.Y > (Top + CBorder)) and (Pos.Y < (Top + Height - CBorder)) then
>>327
これだとクリクしなくてもFormDblClick増えません?
//( ゚Д゚)<・・・
//( ゚Д゚)<あ、本当だ
//( ゚Д゚)<大失敗
メインフォームは通常でサブフォームを常に手前に表示てどうするのでしょうか?
ジケーン用にフォーム2にボタン置いて、ボタンClickとフォームのOnPaintに
SetWindowPos(Form2.Handle, HWND_TOPMOST, 〜
てしたんだけど、効かない時が有るんですけどwhy why why?
あ、↑且つ同時にメインフォームも操作可って事で
FormStyleをfsStayOnTopにするのは?
>>334
勿論駄目ですた

ttp://www.asahi-net.or.jp/~HA3T-NKMR/tips025.htm
こんな感じにメインフォームを非表示でやれば良いのかな?
336デフォルトの名無しさん:04/07/24 19:32
C言語でいう#defineみたいなのないですか。
>>332
ちょと別の方法を使った方がいい気がして来たから、これなしで
やっぱ分かんない。
複数のウィンドウを操作可能な状態で、個別に通常状態と常に手前に表示切替可に
するのはどうすれば良いのでしょうか?根本的に知識が欠けててスマソ
あ、ごめ。代用方法今度こそ思いついた。駄目だったらまた来る
340313:04/07/24 22:18
>319
A1に入る部分を書くときにB1の大きさがわからないと
A1の部分を確定できません。
幅が A1(2)でB1(3)のときに "abc"をセンタリング処理をして表示したいとする
A1には余白と"a"、B1には'bc'と空白をセットするがA1の描画のときには
B1の大きさがわからないと決定できないと思う。

どのようにすればよいのでしょうか?


CellRect
342313:04/07/25 00:23
>>341
こんな感じでとりあえずセル結合みたいに表示できました。
ありがとうございます。

A1,B1で値を編集すると表示が変になるようなのでもう少し検討してみます。

Rect(a1.Left, a1.Top, b1.Right, b1.Bottom);
としたとき、Rect: TRect; と定義しているところと
rect関数が名前の衝突をしてしまいました。
とりあえずRect: TRect → ARect: TRect に変更して回避したのですが
このような場合どのように回避するのが一般的なのでしょうか

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
ARect: TRect; State: TGridDrawState);
var
A1,B1,AB1 : TRect;
begin
if (ACol = 1 ) and (ARow = 0) then
begin
a1 := StringGrid1.CellRect(0,0);
b1 := ARect;
AB1 := Rect(a1.Left, a1.Top, b1.Right, b1.Bottom);
StringGrid1.Canvas.FillRect(AB1) ;
StringGrid1.Canvas.TextRect(ab1,50,5,StringGrid1.Cells[0,0]);
end;
end;
今indyでローカルからCGIにアクセスするアプリを作ってるんですが、
postでデータを送信するさい、文字列に「&」が含まれていると
CGIの引数を連結する「&」と勘違いしているらしく、送信結果がおかしくなってしまいます。
「%26」などの形にURLエンコードしても、そのまま表示されるだけで効果がありません。
どうすれば良いでしょうか?
>>342
Rect 関数の方を Classes.Rect() と書いたらどうですか?

>>343
Indy を使ったことないので見当違いかもしれませんが、送るデータに
Content-Type: application/x-www-form-urlencoded
というヘッダはついてますか?

CGI での扱いによっては %26amp%3B にしないとダメかも。
自作VBアプリをdelphiに移植中なのですが
その中でwinsockを使っています。
この際例外処理をVBではon error gotoで処理していたのですが
delphiではどのように処理すればよいでしょうか?
やりたいのはエラーメッセージは表示させずエラーは
ログとして吐き出すだけで処理をそのまま続けたいです。
try
 Win32Check(WINSOCKAPI);
excepion
 on E:EOSError do
  ShowMessage(E.ClassName + ':' + E.Message);
end;
システムモーダルのメッセージボックスを出す方法
ありますか?
MB_SYSTEMMODAL
349347:04/07/25 09:17
>>348
ありがとうございます。できました。

またひとつ質問があります。
フォームが最小化されたイベントを取得したいのですが
OnResizeイベントでは取得できないようです。
どこで取得すればよいのでしょうか?
>>349
Application.onMinimize?
351347:04/07/25 09:41
>350
できました。さんくす!
352347:04/07/25 10:33
おかしいなぁ
最小化でタスクトレイ格納をしてるのですが
1回目はタスクトレイに入れた後、フォームをhideして
タスクバーから消えるのですが、いったん元に戻して
再度最小化するとタスクバーから消えてくれません。
353347:04/07/25 10:50
事故解決
showwindowにapplication.handleを渡したら直りました。
354347:04/07/25 11:31
昨日はじめたばかりですがDelphi(・∀・)イイ!!
>>227
なるほど!
string型の定数にしておけば
『string型からstring型変数への代入では文字列データのコピーは行われない』
という仕様によって代入時の実行効率が上がるわけですね.

string型の方が変数の初期化時の処理量が多くなるような気がしたので
PCharのほうがよいかなと思ったのですが木を見て森を見ず,だったようです.

>>252
ええ,今回はレコードを丸ごとコピーする場合や
ファイルに対して読み書きする場合は想定していなかったので
上のような意図であえてPCharを使っていた訳です(結局逆効果でしたけど).
Captionなどに変数を表示するのはどうやったらいいのですか?

たとえば
var
i : integer;



i := 320;
Button1.Caption:='iの値は%dです',i;
などとやってもエラーになります
>>356
Button1.Caption:='iの値は' + IntToStr(i) + 'です';
IntToStrってやらなきゃいけなかったのか・・C言語と違うんですね
ありがとうでした
フォームに張られているコントロールの座標を取得する方法はありませんか?
>>359
ぷ( ´,_ゝ`)、、ププ
ろくに調べることもできない夏厨か、
ぱーなのか?頭の中も
てきとうにわからないときは聞くというのか
ぃってよし
left, top, clientorigin
>>359
left と topです
でも一回ぐらいヘルプ読もうよ(´・ω・`)
>360
わらた
>>358
本当にC言語知っているのですか?
>>360
今気づいた
貴方いい人でつね
TListViewで項目を右クリックしてもOnMouseUpが発生しないのは、なしてですか。
367A:04/07/25 18:05
>>356 >>358
C言語でも、いきなり、Button1.Caption:='iの値は%dです',i; なんてコードは通らないよ。
C言語だって、IntToStr相当の方変換は必要。
整数型をいきなり文字型に代入したら期待した結果は得られない。

たぶん、printf()関数を使うことを想定してるのだろうけど、
それだったら、Delphiにも、同等の Format 関数があるよ。

Button1.Caption:=Format( 'iの値は%dです' , [ i ] );

これでできる。Format関数の詳しい仕様はヘルプ参照。
368359:04/07/25 19:13
>>360-362
レスありがとうございます

すいません。質問の仕方が悪かったです。
Form1
 Panel1
  Panel2
 Panel3
  Panel4
   Panel6
  Panel5

こんな風に設計したとして
Panel6のLeft,TopではPanel4からの値です。
Form1からの値を取得するにはどういう風にすればいいのでしょうか?
Panel6.Parentをたどっていって算出
pos := Panel6.ClientToScreen(Point(0, 0));
pos := Form1.ScreenToClient(pos);
371359:04/07/25 20:39
>>369-370
ありがとうございます。無事に取得することができました
QuickReportについて
グループフッターをディティールのように可変にすることは可能ですか?
373372:04/07/25 20:57
たとえば

商品が2種類ある場合
-------------------------------------------------
  担当者   得意先   商品   金額
-------------------------------------------------
  担当者A  得意先A  商品A  ¥100
              商品B  ¥200
-------------------------------------------------
        得意先計  商品A  ¥100
              商品B  ¥200
-------------------------------------------------
  担当者B  得意先B  商品A  ¥300
              商品B  ¥400
-------------------------------------------------
        得意先計  商品A  ¥300
              商品B  ¥400
-------------------------------------------------
374372:04/07/25 20:58
商品が3種類ある場合
-------------------------------------------------
  担当者   得意先   商品   金額
-------------------------------------------------
  担当者A  得意先A  商品A  ¥100
              商品B  ¥100
              商品C  ¥300
-------------------------------------------------
        得意先計  商品A  ¥100
              商品B  ¥200
              商品C  ¥300
-------------------------------------------------

のように、商品数によってグループフッターの行数を変えたいのです。
商品は、商品マスタの数によるので、一定ではありません。
このような帳票は、可能でしょうか?
375347:04/07/25 23:52
delphiにはVBでいうapp.previnstanceはありますか?
376 ◆OUFPNullPo :04/07/26 00:10
ちょぃと質問させてください

タイマーをたくさん同時に使用するソフトを作らなくちゃいけなくて、
でもタイマーたくさんポトペタするのいやだったので、下のような
タイマーコンポを作りました。

1) コンポに実行するprocedureとInterval(procedureを実行する間隔)を複数登録できる
2) そのコンポでは一つだけタイマーが動いていて、ある時間ごとに経過時間を保存していく
3) 2)の経過時間が1)で設定したInterval以上にっていれば1)で設定した
   procedureをTThread内で実行し、2)のカウントをゼロに戻す。

ダイアログ等の表示で処理が帰ってこないことがあるので、procedureの実行は、
わざわざTThreadから行っているわけですが、これだとタイマーをたくさんポトペタ
するのと負荷はそれほどかわらないですかね?

CPU使用率等みても、いまいちわからなかったので、どなたか詳しい方が
おられましたら教えて頂けませんか?
>>375
そろそろ検索くらいしてくれますか?
378デフォルトの名無しさん:04/07/26 02:17
最近 1 のこれ無視されてるよな

このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。

379デフォルトの名無しさん:04/07/26 03:45
虹彩による個人認証システムの簡単なものを作りたいと考えております

ある画像ファイルを入力し その画像の中から新円もしくは楕円に近い軌跡を描く線のみを抽出して別画像ファイルとして
出力するということを考えているのですがその画像ファイル内には他にも多くの直線部分や、塗りつぶし部分などが含まれているため
曲線部分のみの抽出方法をどうしたらいいのか悩んでおります。

http://www.eyescan.tv/images/me001.jpg

たとえばこのような画像を入力した場合ある程度のフィルタ処理をした後データ-ベース上にある登録された個人との
照合をしある程度以上の適合率が出た場合はOKサインを出すといった手法で考えております。
ファイルタ処理は完全に白黒レベルまで虹彩と書いてある目の外側にある放射線状に延びている多くの線は残した状態にまで
フィルタをかけデータベース上にある画像ファイルの一番外側の楕円軌道と入力画像の大外の楕円軌道が一致するよう
拡大縮小処理をした後にその2画像の適合率のようなものを出したいと考えています。

上記のような画像ファイルの中から曲線部分の抽出することを考えた場合どのような手法が考えられるでしょうか?
>>372
2ちゃんにQuickReportに詳しい人はいなさそう。

>>376
一般的にスレッドの方がタイマより負荷は高い。
タイマはシステムリソースなので、沢山貼り付けると9x系でリソース不足を起こしますよ。

>>379
画像処理スレの過去ログ読んで、なければそっちで質問した方が良いでしょう。
> 沢山貼り付けると9x系でリソース不足を起こしますよ。

で、沢山ってどのくらい?10個なら >>376 のコンポよりましだと思うが
試してみたら?
もっとも、みんなで仲良く使うものだから、
自分だけ良くても駄目ですよ。
> 試してみたら?

<沢山>だとリソース不足を起こす、と主張してる香具師が試せば
好きなようにすれば?
383を怒らせちゃったみたいだね。
なんでかな。
「沢山」って抽象的すぎる。TBrush だって TPen だって
共通リソース沢山つかえばリソース不足が起こる。
だから、沢山つかうな、って言ってもなぁー
前に100個ぐらい使っても大丈夫と言ってた人がいたような>タイマー

かくいう自分は今作ってるアプリでポップアップメニューをひい、ふう、みい・・・19個使ってる。
わはー。
ifとかCaseとか増えすぎて、変数も何十個とか合っていみがわからなくなってしまったい!
>>388
オブジェクト指向使えば、ifやcaseでグジャグジャにならないよ〜
って言うじゃない。言うじゃない・・・切腹
ちゃんとコメントをつけましょう
>>388
モジュール分割、クラス設計がヘタレって事
リファクタリングしろ
ClientSocketコンポーネントのOnErrorイベントで
ErrorCodeが取れますが、これをメッセージに変換するには
どうすればよいでしょうか?
ツールバーに配置したボタンにショートカットキーを割り当てるには
どうしたらよいでしょうか?
>>393
ActionListかMenuを使う。
>>394
ありがとうございます。調べてみます。
396デフォルトの名無しさん:04/07/26 13:18
Delphi作成したアプリケーションのアイコンを、エクスプローラーでの表示形式で”アイコン”
を選んだときの32ピクセルのサイズと、”一覧”を選んだときの16ピクセルのサイズの
2つを別々のものにしたいのですけど、どうすればできるでしょうか?
プロジェクトオプションでは一個しか設定できないですし、ちょっとわかりません。
>>396
.icoファイルの中に16ピクセルと32ピクセル
両方持つんだよ。
>>397
そうだったのですか、わかりました。
早速アイコンエディタでも探してきます。
Delphiに付属のイメージエディタだと色数に制限がかかるんだよな・・
あれの下の256色のパレットの使いにくさ最強。
てかイメージエディッタって全く進化なしだな。

何年前のアプリだよ。
イメージエディタにはVC使ってる
Paintgraphics で psd 出力。
@icon変換でコンバート。
で俺は作っている。
イメージエディタならフリーいいのがいくらでもあるだろ
Delphi6で、ランダムな数作るのはどうしたらいいんでしょうか。
どの本にも載ってないし、ヘルプとか探してもそれらしいのは見つからないし。
random
>>405
randomizeも忘れずにな。
408366:04/07/26 19:29
解決しました。MSDNにそういうもんだと書いてました。
>>406
>>407
有難うございます。
後からいろいろなサイト見て回ったんですが、
こんな書き方であってるのでしょうか(;´Д`)
Randomize;
hoge := Random(3);

なんか弾かれたんですがorz
参考にしたサイトが間違っていたのか、自分の書き方が違ったのか。
>>409
hogeはちゃんと宣言したか?
>>409
エラーコードぐらい書け
>>410
ええ、ちゃんとIntereger型で宣言されてます
でも「(が必要な場所に:=があります」
と、コンパイルエラー。
そのあたりを括弧とかいろいろ付けてみたんですが
相変わらずです。
Integer型な
>>413
タイプミス鬱・・・。
宣言はタイプミスはありませんでしたがw
415デフォルトの名無しさん:04/07/26 20:08
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Form2.Image1.Picture.LoadFromFile(OpenDialog1.FileName);
end;

このついでにForm2を画面最前列に表示させるにはどうしたらいいんですか?
416デフォルトの名無しさん:04/07/26 20:11
>>415
TForm.BringToFrontとかなかったか?
417デフォルトの名無しさん:04/07/26 20:13
>>412
「(が必要な場所に:=があります」 場合には、本来(があるべきなのに
ないわけだから、その行のはるか以前に(があるべきなのにないんでしょう。

どこが問題なのか、一つ一つコメントアウトさしてみれ。
418416:04/07/26 20:19
>>415
てか、コードをみていて思ったのだが、Form2上のTImageをいじるんだから、
OpenDialogも含めてForm2上でやったほうがいいと思った。

Form2上のオブジェクトをいじるんじゃなくて、Form2のprocedureなり、
functionとして作成して、そのメソッドをForm1のOnClickイベントで
実行させたほうがいいよ。

じゃないと同じ処理や似た処理をするとき、なんでもForm1に書かないと
いけなくなって、修正があったときとか大変。

まあ好みなんだろうけど。
一通りやってみました。
procedure TForm1.gaClick(Sender: TObject);
begin
nullpo.Caption:='ga';
hoge:=0;
end;
//この処理の前にhogeは宣言済み
一部分をくりぬくとこんな感じなんですが
ここでbigenをコメントアウトすると
hogeのエラーはなくなってこの前の行がエラーになります。
他のをコメントアウトしてもこういうのはならなかったので
書いてみました。
420405:04/07/26 20:34
>>419
このときのは[エラー] janken.pas(47): 不正なコンパイラ指令 : 'nullpo'ですね。
何で一部をくりぬくんだ
全部出せよ
馬鹿にされてるんだろうか?
ランダムと関係ないコード出されて
エラーの原因を教えろだからな
>>419
random使ってるあたりを晒せ
良く釣れるすれでつねwww
厨ってワンパターンだね( ´ー`)y-~~ 
こんなんで釣り気取りでつか?
428デフォルトの名無しさん:04/07/26 21:28
ScrollBarを動かしたときその値をLabelに表示させたいと思っているのですが
SCROLLBARの何を拾ってくればいいのかわかりません 教えてください。
429デフォルトの名無しさん:04/07/26 21:32
>>428
TScrollBar.OnChangeでTLavel.Caption := IntToStr(TScrollBar.Position);
430デフォルトの名無しさん:04/07/26 21:39
>429
ありがとうございました
どうして、データってリトルエンディアンとかいって
123456ABCDっていう数値はメモリやファイル上だと
CDAB563412ってなるの?わかりづい。
Word型とInteger型ってWord型のほうがいいの?
INTって負の数もつかえるけど、32000くらいまでしか出来ないんだよね?
配線の関係です。
>>432
Integer-2147483648..2147483647 符号付き 32 ビット
Cardinal0..4294967295         符号なし 32 ビット


Smallint-32768..32767         符号付き 16 ビット
Word0..65535            符号なし 16 ビット
435デフォルトの名無しさん:04/07/26 21:58
>>431
先に下位のデータを取り出せたほうが、CPUの計算上で
有利だからじゃない?
上位から取り出さないといけないと、1桁目まで読まないと
計算できないから不利になるんじゃないかな?

と適当なことを言ってみる。
リトル・エンディアン方式は、小さい数を小さいアドレスに書くべきだという考えから来ている。
ビッグ・エンディアン方式は、数字は高位の数を左側に書くべきではないか、という考えから来ている。

だとさ
437デフォルトの名無しさん:04/07/26 22:11
>>432
Integerは4バイトで、Wordは2バイト。
倍違うからさ、扱いたい整数の範囲によってどっち使うかを選択汁
>>435
バス幅が32bitなら4バイト一度に読み込まれるが?
>>404
前にベクターとかで探してみたのですが,案外良いものがなくて困りました.
自作しないとだめかなぁ.

>>401
Delphi 2.0の頃から変わってないようなので約8年前.

>>419
変数hogeを宣言する場所を間違っているような気もします.
ちゃんとTForm1のフィールド変数になるように宣言しないとだめですよ.たとえば
type
 TForm1 = class(TForm)
 private
  hoge: integer;
 public
 end;
みたいに.あとはbeginとendの数を間違えているとかかなぁ.

>>432
ほとんどの場合integer型のほうがよいと思います.
Delphiを動かせる環境は32ビット以上のCPUをもつPCであり,
16ビットデータの読み書きや計算の速度は32ビットの場合と変わらないので
16ビット変数を使っても速度上のメリットはないはずです.

Word型を使うとすれば
・取り扱おうとしているデータが16ビット符号なしに収まる範囲である場合
・APIの呼び出しなどで16ビット符号なしでなければならない場合
などでしょうか.
> 16ビットデータの読み書きや計算の速度は32ビットの場合と変わらないので

16ビットデータを扱うと遅くなるよ
441デフォルトの名無しさん:04/07/26 22:57
>>438
そのバス幅が32bitでない頃のCPUと下位互換で、
ここまできたわけで。
TMemo並に軽快で、文字列ごとにフォントの色を変えたりできる
コンポーネントはどこかにありませんか?
>>431
モトローラのMPUだと123456ABCDとそのままメモリやファイルに書いてくれるぞ。
>>443
よかったな
445デフォルトの名無しさん:04/07/26 23:34
>>443
Power PCとか68000の話しか?
Delphiのお粗末な生成コード見たことあるなら
速度を気にするのが馬鹿らしくなるはずなんだが。
6809
448デフォルトの名無しさん:04/07/26 23:47
>>446
どれならいいのん?
PeekNamedPipe関数でパイプ内からメッセージを読み取って
いるのですが、これがすべて終了しないとパイプ内にメッセージが
かえってこない…。パイプを作成しないとサクサクと結果が表示され
るのにどうしてだろう…orz ただのヘタレなのかなぁ
450デフォルトの名無しさん:04/07/27 00:39
>>439
変数のスコープの間違いなら
「定義されてない・・・です」というエラーになるはず。
コンパイラなんたらエラーなら、もしnullpo.captionの
とろでエラーになってるなら、Tnullpoクラスでなんか
まちがってるんでしょう。
ほんとに困ってるならコードを出すよ
放置してるって事はネタか解決したと思われ
TString型とString型の違いがよくわからないです
TString型って配列(?)なの?
抽象クラス
>>452
とりあえず、ソレが分からない内は「String」だけ使ってればよろしいかと。
「TString型が理解出来る頃」が来るまで必要無いかと。
自然に違いが分かる時が来るから焦ることは無いかと。
455デフォルトの名無しさん:04/07/27 01:16
俺もよくわかんないや
TStringsの事?
456454:04/07/27 01:19
あ、失敗。

>>455
イジワルネ♥
457455:04/07/27 01:23
>>456
あ、なんだ
意地悪したワケじゃないよホント。
Delphiでつくったプログラムからバッチファイルを実行するにはどうしたら良いでしょうか?

具体的にはボタンを押すとバッチファイルを起動するようにしたいのです

Delphiのバージョンは6.0です
ShellExecute
>>440
そうでしたか.ふぉろーありがdです.
Delphi6PersonalのClientSocketコンポーネントですけど
OnReadよりOnDisconnectが先に実行されてしまうことが
あるんですけど、これってコンポーネントの問題ではなく
通信上の問題なんでしょうか?
VBでやってたころはこんなことなかったので不思議です。
VBだと何かデータを送ってからじゃないと切断できないのか
大変だな
最後の一文がなかったら絡まれることもなかったろうに・・
もっとわかりやすく書いてやれよ

disconnectは回線が切断された状態
これは通信の内容に関係しない

readで受け取るべきデータがあるなら
受け取ってから切断するようにするべき

sendで送ってからすぐ切断とか言うアホなコード書いてないだろうな
ここはVBに過敏なスレですね
466461:04/07/27 16:55
レスが4つも。びっくり。
HTTPでゲットしてます。
処理の流れ
1. ボタンクリック -> clientsocket.open
2. OnConnectイベント -> SendText('GET ほにゃらら');
3. OnRaadイベント -> buff := ReadText();
4. OnCloseイベント -> clientsocket.close; データ加工

という流れです。
そもそも、この流れが問題ですか?
ほとんどはうまくいってるのですが
たまにデータが取得できないことがあります。
VBではこの方法でもほとんどデータが取得できない状態は
発生しませんでした。
467461:04/07/27 16:59
あっ!OnErrorイベントでsocket.closeをしてなかった。
これかな。
>>466
Readの後にCloseしてるのにデータが取得出来ないとは?
データが取得できなければCloseしないんだよな?
OnDissconnectはいつ起きたんだ?
469デフォルトの名無しさん:04/07/27 17:03
>>468
サーバが送信し終わると自動的に切断する仕様なんじゃないの?

TIdTCPServerとかしか使ったことないのでアレだけど、
バッファがゼロになってから切断するとか、相手から受信完了
メッセージがきてから切断するとかのほうがいいんじゃないかと。
470461:04/07/27 17:06
>>469
はい。そういう仕様だと思っております。
とりあえずOnErrorにcloseを入れて様子を見てみます。
切断するような鯖(ほとんどそうだと思うが)でも最後まで拾えるよ
途中で切れるなら組み方が悪いだけ
まったくこないなら送信したリクエストが悪い
Readは何回も発生するってのはわかってるだろうな
情報小出しにしないでもっと詳細きぼん
472461:04/07/27 17:10
OnErrorにclose入れたけど、さっそく発生。

>>471
readは何回も発生するのはわかっています。
書き間違えましたが
3. OnRaadイベント -> buff := ReadText();

3. OnRaadイベント -> buff := buff + ReadText();
です。

たまになのでリクエストが悪いようには思えないのですが
>>471
なんか、データを全部受信する前にサーバ側が切断しちゃって、
データが全部送られてこないってこと、なんかあったよーな記憶があるよ。

VBかC++だたかもしれんが・・・
474461:04/07/27 17:16
>>473
あっ!そうなんですか?
じゃあ、VBでも発生していたのかも。
ちなみにVBのときはconnectする前にローカルポートを0に
してましたけど、Delphiだとどうやるんでしょう?
clientsocket.Socket.LocalPort := 0
だと読み取り専用プロパティでエラーになってしまいます。
ちょっと待て
VBとDelphiで全く同一の条件で試してDelphiだけで不具合が起きるって
ことじゃないのか?
476461:04/07/27 17:23
>>475
VBでも試してみました。
やはりVBでは発生しません。なんだろう。
VBで問題ないならVBで作ればいいじゃん
478461:04/07/27 17:26
VBは持ってないので。
言ってることが支離滅裂だな
>>476
まずサーバ側で送信し終わったら切断するルーチンを省いて検証してみなよ。
発生しない→全部送信し終わったら切断するという処理を作る
発生する→その他の問題
と一つ一つ切り分けをしていけばいい。
不具合がある鯖って晒せる?
ソケットコンポなんて使うからおかしくなるんだよ。
WinInet使えよ。
483461:04/07/27 17:42
>>480
どうやらOnRead1回、その後OnDisconnectの模様

>>481
それはちょっとできかねます。

>>482
やっぱりそうですね。
VB5.0のWinsockコントロールも不具合があったので
信用できないんですよね
484461:04/07/27 17:43
まあ、通信には失敗を想定するのが普通だと思うので
リトライすることにします。お手数お掛けしました。
後味の悪い解決の仕方だけど、まあいいか
486461:04/07/27 17:56
RTLパッチというのを当ててなかったのでちょっと試してみます。
487461:04/07/27 18:22
RTLは関係ありませんでした。
OnCloseでもReadText()やってみました。
いいかも。
488461:04/07/27 18:27
おぉ!問題ない。
DelphiのこのコンポーネントはデータとFINパケットをくっつけて
取ってくるのかなー。まあ、これが仕様ならそれで問題なし。
489461:04/07/27 18:35
OnDisconnectイベントでReadTextしたら
やっぱり残りのデータが取得できました。
すっきり爽快です。
みなさまもお気をつけ下さい。
こんなログを保存してないスレでどうしろと
当面VBにしときます
ブービー賞だな
(;^ิД^ิ)
>>492
             / ̄ ̄ ̄ ̄ ̄\
         /           \
         /              ヽ 
   / ̄\ l      \,, ,,/      | 
  ,┤    ト |    (●)     (●)   |  0点!
 |  \_/  ヽ     \___/     |  
 |   __( ̄ |    \/     ノ 
 ヽ___) ノ
TListViewのvsReport形式にて、特定の行だけ、左詰に文字を配置したいのですが
可能でしょうか?。また、どのようにやればよいのでしょう?
教えてください
>>495
Columns[0]は左寄せしか出来ないが、他のカラムは右寄せできるよ
ListView1.Columns[0].Alignment := taLeftJustify; // 左寄せ
ListView1.Columns[1].Alignment := taCenter;    // 真ん中
ListView1.Columns[2].Alignment := taRightJustify;// 右寄せ
列じゃなくて行?
無限の配列って作れないの?

procedure TForm1.Button1Click(Sender: TObject);
var I:array of integer;
begin
I[1]:=1;
I[2]:=3;

end;
これ実行したら途中でエラーになります。
配列の要素数が決定できない場合はどうすればいいの?
SetLengthつかっても、それじゃプログラマしか設定できないから不便だし
ごめんなさい列ですね…すみません
>>498
integerだけを含むTObject型派生クラスをつかって
TListってのは冗長かな…
列なら496のだね
502496:04/07/27 20:04
ごめん。良く質問読んでなかった
行単位での話しだったら、
CustomDraw
CustomDrawItem
CustomDrawSubItem
でガリガリ書かないと駄目かな
>>498
追加するルーチンを実行するたびに、配列数を数えて、
配列数+1をsetlengthすればいいんちゃうの?
504デフォルトの名無しさん:04/07/27 20:33
Object Pascalって
C言語と同じように関数作れる?
似たような感じで作れる
507デフォルトの名無しさん:04/07/27 20:44
Image.canvasからある座標の点の色(RGB)を取得するにはどうしたらいいんですか?
>>507
Pixels
プログラムを開始して
OpenDialog1実行して
ファイルが選択されなかったら終了するプログラム作りたいんだけど

procedure TForm1.FormCreate(Sender: TObject);
begin
if OpenDialog1.Execute then
else Form1.Close;
end;


これ実行しても、プログラム開始してOpenDialog1をキャンセルしても
フォーム1がCloseしません。どうしたらいいでしょうか?
終了できたにょ
>>509
Application.Terminateならうまくいったぞ
512デフォルトの名無しさん:04/07/27 21:07
>>509
FormCreate
で書いているから駄目
FormShowで書いてみ
513デフォルトの名無しさん:04/07/27 21:07
150*150くらいの小さい画像情報の色情報を配列に格納したいんだけど
x,y座標の二次元の配列作って

for x := 0 to BMP.Width do
begin
for y := 0 to BMP.Height do
begin

//現画像から値の抽出
pxlRGB[x,y] := ColorToRGB( Form2.Image1.Canvas.Pixels[x,y] );
  end;
 end;

こんな感じにしたらオー-バーフローしてしまいました
pxlRGB[x,y]はどのような方宣言する必要があるんでしょうか?教えてください。
514デフォルトの名無しさん:04/07/27 21:10
>>513
とりあえず、
for x := 0 to BMP.Width - 1 do
               ~~~
じゃね?
Height も同じく
PxlRGB array [0..150,0..150] of TColor
お前等ブレークポイントとか
ステップ実行とかやってるか?
やっても変数の値みれねーもん
518デフォルトの名無しさん:04/07/27 21:21
>>517
何で?俺見れるよ
Withって配列に関しては書き換えたりできないの?

var
Ary:Ary[0..2] of Char;

begin
with Ary do
[0]:='s';

とかやってもエラーになっちゃう
>>519
もしそれがとおるとしても何の意味が
>>519
Ary.[0]とは書かないだろ
だから無理ぽ
522デフォルトの名無しさん:04/07/27 21:39
中心が[a,b] 半径がr の円が描く軌跡の座標をすべて列挙させるにはどうしたらいいですか?
OpenDialogコンポーネントとSaveDialogコンポネントの違いって何?
ボタンの文字が「開く」か「保存」かの違いだけじゃないの?
どっちもファイルを選択してFileNameに入力するだけでしょ。
SaveDialog
・上書きの確認
・存在しないファイル名を入力可能 など
test
文字コードを取り出したりするのはどうやるの?
数値から文字への変換なら
ShowMessage(#49)とかやれば
1って表示されるけど
たとえば漢字の「愛」の文字コードとか取り出すにはどうしたら?
>>526
ShowMessage('1バイト目:'+IntToHex(Cardinal('愛'[1]), 2)+sLineBreak+
'2バイト目:'+IntToHex(Cardinal('愛'[2]), 2));
528A:04/07/27 23:01
>>498
配列の要素数が決まっていない時、に、SetLengthを使うものだと思うけど?
プログラマしか設定できないってのが、よくわからないけど、
SetLengthの引数には、固定値だけじゃなくて、変数が使えるよ。

ユーザーが要素を増減したいと望んだ時に、内部で、SetLength(要素数+増減数); って
やってやればいいかと。
セミコロンとコロンの違いがよくわからん。小さく見分けづらい
>>529
設定でフォント変えてみたら?
Memo1.Lines[0]:='あいうえお'+#10#13+'かきくけこ';
ってやるのと
Lines[0]:='あいうえお';
Lines[1]:='かきくけこ';
ってやるのは全く同じ?
Delphi5を使って、win用アプリを作ってます。
特定のプログラムのメモリ使用量を監視して、
ある一定の値以上になったらそのプログラムを閉じる、
というアプリを作っている途中なのですが、
メモリ使用量を取得できずに困っています。
取得できないと言うか、取得する方法がわからないのです。
どうすれば各プロセスのメモリ使用量を取得できるのでしょうか。
インターネットやヘルプで関数名をずいぶん探したのですが、
それでもそれらしきものは見つからず、わかりませんでした。
どなたか方法を教えていただけませんでしょうか。
533A:04/07/28 02:10
>>522
泥臭い方法でよければ。

円が納まるサイズのTBitmapを作成。
Canvasに円を描く。
TBitmap全体をスキャンして指定した色のドットの座標を拾っていく。
中心に合わせて座標を調整。

巨大な円だとメモリも処理も無駄が多すぎるから、まじめに数学で計算する。
534A:04/07/28 02:15
>>531
違う。

Memo1.Lines[0]:='あいうえお'+#13#10+'かきくけこ';
なら、同じw
(厳密には、内部の処理は違うかもしれないけど)
>>531
違う。
前者は行数が増える(2行目以降がずれる)が
後者は2行目を上書きする。
536デフォルトの名無しさん:04/07/28 04:43
>533
方程式でといた場合、数字の丸め方がわからんと同じx座標に対して
微妙な数値のyが出てきた場合の処理に若干困るんですよね。
同じxに対してyが複数(4個とか)塗りつぶされている場合ってどういう風に適応しているんですかね


Canvas.Ellipseのばあい方程式上では
xの値がaでyの解が2.5とかだった場合(a,2)と(a,3)って両方塗りつぶしされているっぽいような気がするのですが。
方程式解く方法でやった場合底ラ変の処理が若干不安なんですよね。
537A:04/07/28 05:53
>>536
たぶん、見た目で丸く繋がった円を描くために、Canvas.Ellipseは結構面倒な
処理をしてると思われ。
むかーし、そういう処理のやり方を雑誌の記事でみたのだけど、なにぶん、もう
10年以上前だと思うので、ちょっと探せない。

あー。xの精度を16倍とかで計算して、あとから丸めてみるってのは?(思いつき)
<1つのxに対して複数のyが存在する問題。
538デフォルトの名無しさん:04/07/28 07:05
四次元の 0-255 integer 配列を使いたいのですが宣言方法がわかりません教えてください。
256^4*SizeOf(Integer)=16GBの配列なんて作れるか
540デフォルトの名無しさん:04/07/28 07:14
3次元で20*20*60程度だと宣言方法はどうなる出よう?
var arr: array[0..19,0..19,0..59] of Integer;
arr[1,2,3] := 4;
四次元配列を使おうとしている時点で設計を間違ってると思う
SHFileOperationの例外はexceptで捉まえられないのですか?

var
 SHF : TSHFileOpStruct;
begin
 try
  SHF.wFunc := FO_RENAME; // とりあえずリネーム
  SHF.pTo := PChar('Hoge' + #0); // わざと例外発生
  (その他要素は適切に設定したとして省略します)

  SHFileOperation(SHF);
 except
  ShowMessage('Hoge');
 end;
end;

このコードだとShowMessage('Hoge');が実行されません。
例外を捉まえるにはどうすれば良いのでしょうか?
それWin32APIだろ。
Win32Checkしとけ。
ファイルの入出力で質問です。
vbの

open "hoge.log" for append as #1
print #1, log_buff
close #1

をdelphiで書きたいのですが
検索してもなかなか見つかりません。
よろしくお願いします。
>>545
var
F:TextFile;
begin
AssignFile(F,'hoge.log');
Append(F);
Writeln(F,log_buff);
CloseFile(F);
end;
>>546
ありがとうございます。
ぜんぜん予想だにしていなかったコードです。
Delphiでoo4o使えますか?
549デフォルトの名無しさん:04/07/28 13:47
550デフォルトの名無しさん:04/07/28 14:11
引数無しのプロシージャをName(String型)と対応させて呼び出したいのですが
現在は下記のようなクラスを作成して管理しています。
TStringListを使えばもっと効率よく管理できると思うのですが、
うまくいきません・・・
他に何かよい方法はありましたらよろしくお願いします

const
MAX_PROC_COUNT = 10;
type
TProc = procedure of object;
 TManager = class
 private
  FCount: Integer;
  FNames: array of String;
FProcs: array of TProc;
public
constructor Create;
destructor Destroy; override;
procedure AddProc(Name: String; Proc:TProc);
end;
551550:04/07/28 14:11
constructor TManager.Create;
begin
 FCount := 0;
 SetLength(FNames, MAX_PROC_COUNT);
 SetLength(FProcs, MAX_PROC_COUNT);
end;
destructor TManager.Destroy;
begin
 Initialize(FNames);
 Initialize(FProcs);
inherited;
end;
procedure TManager.AddProc(Name: String; Proc: TProc);
begin
 Inc(FCount);
 FNames[FCount-1] := Name;
 FProcs[FCount-1] := Proc;
end;
フォームを開いて、閉じたあと、また開くと
前の状態が残っています。
閉じたらちゃんとアンロードしたいのですが
どのようにすればよいでしょうか?
Release/Create
frmSub.Create(frmMain);
frmSub.ShowModal;
frmSub.Release;

だと例外エラーになってしまいます。
どのように使えばよいのでしょうか?
frmSub := TfrmSub.Create(nil);
>frmSub.Create(frmMain);

frmSub := TfrmSub.Create(frmMain);
グッジョブ!
サンクス
>TStringListを使えばもっと効率よく管理できると思うのですが、

メソッドポインタは、普通の関数や手続きとは違って8バイトなんです。
なので簡単には TStringList.AddObject() は使えない。
メソッドポインタのポインタだといいとは思うんですが今のところうまくいってない。

TProcData = record
Proc:TProc;
Name:string;
end;

みたいなレコード型にして、New で TList に Add() 。使用後 Dispose。

でも本当はそれ専用のリストクラスを作る方がよい。名前で検索するメソッド
なんかも入れて。
559デフォルトの名無しさん:04/07/28 16:00
Jpegユニットと同じような使い方のできるspiコンポって無い?
spiコンポっって、スージープラグインだっけ。
これは、画像フォーマットが一意ではないので、Jpegユニットみたい自動登録
できないのでは。
561554:04/07/28 17:09
モードレスダイアログの場合はどこでReleaseすればよいのでしょう?
OnClose イベントで Action := caFree;
>>532

GlobalMemoryStatusで取りましょう。
>>563

>特定のプログラムのメモリ使用量を監視して、

だから GlobalMemoryStatus ではプロセスごとの使用量は分からないのでは?
スレ違い棚
566デフォルトの名無しさん:04/07/28 17:26
TJPEGImageで、JPEGImage.Assign(Bitmap)/SaveToFileして、
Jpegファイルを作っていますが、
何か下に空白が大きいHeightとかが少し大きめの画像が出来てしまいます。
それか、Assignで縦が圧縮されているのかな。
何か気を付ける点があったら教えて下さい。
567554:04/07/28 17:27
>>562
ありがとうございました。
試してみたところshowだと、同じフォームがどんどん開けてしまいます。
すでに開いている場合は、もう開かないようにするには
どうすればよいでしょうか?
NT 系では PSAPI の GetProcessMemoryInfo

Win9X、WinNT系両方だと ToolHelpAPI のヒープウォークでゴニョゴニュ
>>567
>試してみたところshowだと、同じフォームがどんどん開けてしまいます。

クラスとインスタンスの関係はそんなものです。

>すでに開いている場合は、もう開かないようにするにはどうすればよいでしょうか?

Screen.FormCount と Screen.Forms[] をつかって、is で TForm2 がすでにあるかどうか
確認できる
VB.NETとDelphiでどっちが安全なコードが書けますか?
>>566
>何か下に空白が大きいHeightとかが少し大きめの画像が出来てしまいます。

日本語が変。こんな経験はないな。Bitmap の PixelFormat は pf24bit になってる?
>>570
Delphiです。
> VB.NETとDelphiでどっちが安全なコードが書けますか?

何をもって「安全」というかによる
>>564

ああ、そういうことね。失礼
>>573
釣られてマジレスしてる割に意味不明だな
Delphiの方が安全なものってなんだ?
576554:04/07/28 17:41
>>569
スペシャルさんくす。
できました。
>>570
.NETは簡単に逆コンパイルされちゃいますよ。
.NET なくても安全に実行できる。
待て、定期的に荒らしてくる'VB.NET使い'とかいうのに相手すんなよ。
何をどう間違ってもBASICなんて使わないんだから。
>>532はメモリリークしまくりでデバッグ不可能な
Delphi製アプリを強制再起動するツールを作ってるんだな。
荒らし?比較することが荒らしなんだ。ふーん。

Delphiが勝つ比較なら、荒らしにはならないんだろうけどね。w
>>580
お前の決めつけは根拠がないし書き込みのタイミングも悪い。
583564:04/07/28 17:48
>>532

もう一回。

GetProcessMemoryInfoあたりで取れると思います。GetProcessMemoryInfoに渡す
ハンドルはProcessIDを取得してOpenProcessでハンドルを取れると思うよ。あっ
ProcessIDはEnumProcessesあたりで取れるかな?
>>581
おとなしくVB使ってろ
>>580

それはそうかもね! Delphi製かどうかは氏欄が。マルチポストだしな
>>577
Dotfuscator知らんの?
って知るわけ無いか。
588564改め563:04/07/28 17:50
>>583

564じゃなく563でした。失敬。
>>586
そんものとっくに知ってるw
つーかそんなのに頼らなきゃならない時点で終わってるなw
590550:04/07/28 17:53
>>558
なるほど。。。

>でも本当はそれ専用のリストクラスを作る方がよい。名前で検索するメソッド
>なんかも入れて。

この方向でコーディングしていこうと思います

ご回答ありがとうございました
591566:04/07/28 17:54
すみません、別のバグでした。TImageを画面に貼り付けてAnchors設定していたためにサイズ勝手に変わってますた。

>>571
サンクス。Bitmap の PixelFormat を pf24bit に設定するようにしましたが、何か良いことあるんですか?
592デフォルトの名無しさん:04/07/28 17:57
>>577
は、大嘘であることが判明したわけだが
Delphiの方が安全なものってなんだ?
>何か良いことあるんですか?

いや、もしかしたら、と思ったもので。Jpeg が24ビットなので。
>>592

「安全」ってどういう意味だよ。Safe とか Unsafe とかはネイティブにはない。
ハックされにくい、という意味なら VB.NET の方だ。
>>594
俺に聞くな
>>573に聞け
.NET あってもなくても安全に実行できるのはDelphiのほう。
あのー 594=573 なんだが。

>>573 は疑問文というか注釈な。>>570 に「安全」の意味を問うている。
VB厨には「安全」の意味も分からず、Safe コードの直訳だから、相手にするな
Delphiのほうが安全なケースは存在しないってことで
次の話題行きましょう↓
>>599
.NET あってもなくても安全に実行できるのはDelphiのほう。
601デフォルトの名無しさん:04/07/28 18:15
Del厨って馬鹿なんですか?
もうゴキブビ虫はムシ。
絶対無視できないのがDel厨
>>601
VB厨には適いませんが。
夏休みだな(しみじみ
606デフォルトの名無しさん:04/07/28 20:15
.NETは簡単に解析されるよ
607570:04/07/28 20:20
荒らすつもりはなかったのですが・・・。
まあ、逆に答えがよく分かりました。VB.NETの方が安全で優れているのですね。
夏だねえ。
610デフォルトの名無しさん:04/07/28 21:08
でもねえ、DelphiよりVB.NETの方が安全で生産性が高いのは否定できないと思うわけですよ。
Delphi使いも視野を広げないとやばいと思うよ。
Delphi8も売れてないそうだし。
612デフォルトの名無しさん:04/07/28 21:30
巨大OSメーカーといち開発ツールメーカーを比べたら答えは明らかでツマラン。
613デフォルトの名無しさん:04/07/28 22:10
Delphiでプログラムを作りたいのですが、参考になるソースとか置いてあるサイトってないでつか?
614613:04/07/28 22:12
ちなみにVB.NETの経験はあります
616613:04/07/28 22:30
>>615
ありがとう。
614は偽者なんでスルーしてくだされ。
スタックや平衡木の様なコンテナは標準で用意されていますか?
>>617
ない。自分で実装する。
619617:04/07/29 00:08
>>618
ありがとうございます.
難しい物でもないのでがりがり書く事にします.
メモリのデータを書き換えるのってどうやるの?
ゲームの改造がしたい。
hpとか65535にしたいです
メモリのデータの書き換えのやり方キボン。

フリーの改造ツールだと出来ることに限度があってやりたいこともできない
ReadProcessMemory と WriteProcessMemory
実行ファイルと同じフォルダの名前をSTRING型で返す関数は何ですか?

実行ファイルがC:\HOGE\PIYO\ABC.exeだとすると
C:\HOGE\PIYOを返す関数
ExtractFileDir()
624デフォルトの名無しさん:04/07/29 03:01
DelphiとVB.NETだと最近はVB.NETの方が優秀なん?
Delphi6 vs VB6 → Delphi余裕の勝利

Delphi7 vs VB.NET(2002, 2003) → 実績の差でDelphi辛勝、ポテンシャルではVB.NET大勝

Delphi8 vs VB2005 → Delphi完敗で先の希望もないまま
ぶっちゃけ今はVB.NETの方がいいと思う。
>>622
ExtractFileDir(Application.ExeName);
a
b
c
という3行が書かれているtxtがあるとき

ボタンを押すとEditに入力されていた文字列が
このtxtのb(2行目)に上書きされるコードは

AssignFile();
            ←の間にどのようなコードを記述すれば良いのでしょうか?
CloseFile();
sl := TStringList.Create;
sl.LoadFromFile('data.txt');
sl[1] := Edit1.Text;
sl.SaveToFile('data.txt');
sl.Free;
630デフォルトの名無しさん:04/07/29 06:08
>>628
seek
IEのお気に入りのようにメニューを動的の追加したいのですが
どのようにやればよいでしょうか?
MainMenu.Items.Add()
リストビューの行をマウスのドラッグアンドドロップで順番を
変えることはできますか?
Timerを、ボタンクリック時に開始する、なんてことできますか?
特にボタンに限定する必要は無いのですが、
何かアプリ上で操作したら、Timerが作動するようにしたいんです。
>>634
普段はTimer1.EnabledをFalseにしておいて
ボタンを押したときにTrueにする。
636デフォルトの名無しさん:04/07/29 14:21
DelphiでDebug/Releaseビルドを切り替える方法を教えてください。
VB.NETだと設定できるのですが・・・
>>636
デバッグとリリースとで何を切り替えたいのですか?
VB厨はVBでできるんだから問題なしでは?
ここ読んで煽る気になったの?
http://pc5.2ch.net/test/read.cgi/tech/1009080085/l50
VB.NETなら要らない
>>635
あ!なるほど。ありがとうございました。
641636:04/07/29 14:34
できないんですか。Delphiって存外しょぼいんですね。
失望しました・・・
VBではShift+TABでインデントを下げることができますが
Delphiでできないようです。代替の方法はありますか?
^KI
まあ、VBには応答しないことにしようよ。
>>642
たぶんCtrl+Shift+I
ヘルプみて
DelphiでGC(ry
VBネタは専用スレで

VB vs Delphi @夏厨2004
http://pc5.2ch.net/test/read.cgi/tech/1088578261/l50
>>645
ありがとうございます。
逆方向はどうすればよいでしょうか?
649デフォルトの名無しさん:04/07/29 14:46
DelphiはVB.NETより高速だと聞いてましたが、Delphi8では最適化が効かずにVB.NETの方が高速です。
私の勘違いでしょうか?
Ctrl+Shift+U
>>650
おお!できました。ありがとうございます。
>>651
エディタ・オプションを、Visual Studioエミュレーションにすれば
VSと同じキーマップになる
体感速度という意味ではVB.NETで作ったアプリは使い物にならないので、ご安心下さい。
負けは負けと素直に認めようよ
VB.NETは負け組みコンパイラと認めます。
VB厨は文字が読めんのか? 専用スレ行けよ
あっちで好きなだけやってよし
>>652
それ俺が使うショートカットは、ことごとく変わってないんだよな…
コードの編集に使うキーは何一つ変わってないんだよな
659デフォルトの名無しさん:04/07/29 15:25
お前らいい加減に気付け。
VB厨のフリしてるのはDelphiからC#に移った奴らだ。
>>659
それなんか根拠あんの?
>DelphiからC#に移った奴らがVB厨のフリ

分裂症か。
>>660
ageで書き込んでるだからネタだろ。
オレもC#やってるけど、Delユーザでもあるんで、完全移行してるやつなんて
いないだろうな。
お題を提供。
そのアプリ使っているすべての TComponent の派生クラスを列挙して、その Name
を Memo1 に表示せよ。
訂正

>そのアプリ使っているすべての TComponent の派生クラスを列挙して

そのアプリで使っている TComponent の派生クラスのインスタンスをすべて列挙して
質問じゃないならよそでやれや
そのアプリ使っているすべての TComponent の派生クラスのインスタンスを列挙して、
その Nameを Memo1 に表示するにはどうしたらいいですか?
できません
VB.NETに負けたのが晒されて、このスレ殺伐としてきたな
669デフォルトの名無しさん:04/07/29 17:03
すべて某が悪い。
Delphi8がまともだったらこんなVB.NETに負けることはなかった。
今はVB.NETに完敗だ。
自作クラスから、そのクラス自身のポインターを取得するにはどうすればいいのでしょうか?
TTreeNodeのParentプロパティを見れば親がわかるのと同じようにしたいのですが
Self
で良いんじゃない?
>>671
ありがとうございます
おかげで完成できそうです
673最搦VB厨:04/07/29 17:31
あのさあ、.わざわざ.NET覚えて使うなら、C#逝けば?
.NETの修得にかかる時間を考えれば、C#の文法覚えるのなんて一瞬じゃん。
.NETなんて不安定なもの、なんで純正環境以外で使おうと思うかな?
>>673
> あのさあ、.わざわざ.NET覚えて使うなら、C#逝けば?

アドバイスされるまでもなく、ほとんどのDelユーザはC#やってますけど。
>>674
それ根拠あるの?
おれの周りのDelユーザでは全員。Del8購入者ゼロ。
MLの回答者のほとんどがC#ユーザだね
勝手に「ほとんどのDelユーザ」にすんなよw
679VB.NET使い(勝ち組):04/07/29 17:40
まあ、いずれにしてもDelphiが落ち目なのは誰も否定できないわけで。
>>677
そういえば、Delphi と C# の比較をやってたね、以前。
あれは Delphi8 発売後にやり直そうぜ、という感じで終わっていたんだと思うけど、
発売後は誰もやらないのはどうして?
つーかDelphiスレで言語討論すんなヴぉけ
>>679
わざわざ言うまでもない
でも俺はDel使い続けるよヽ(´ー`)ノ
Delphi作った人がC#作ったならC#に移行するのは当たり前のことだよね
> 発売後は誰もやらないのはどうして?

Del8スレ見れば理由は嫌でも分かる。
>>678
> 勝手に「ほとんどのDelユーザ」にすんなよw

いや、ほとんどのDelユーザはC#もやってるよ。やってないのはDel厨だけ。
>>685
それ根(ry
以下ループ
>>684
Del8スレ、軽く見てきた。なぜかユーザがいないらしい。だからできないのか
Delユーザで、Delphi8を使わないとすると.NET対策としてC#を始めるだろうな、普通。
VC++.NETやVB.NETには行かない罠。
.NET対策イラネ
>NET対策イラネ

厨房には無用かもね
超初心者スレでする話ではないな
超初心者にこそ現実を知って欲しい
いやいや、Del超初心者≒ブビ/ブビドトネト ヘビーユーザ
>>693
あっ、そうなの? ほかのDel関係の掲示板でもVBユーザらしくEditBoxとかいったり
VBのコードのDELへの移植とか、VBのXXXの相当するDelの関数について質問したり、
このごろ目立つね。そうか、VB.NET はまだデスクトップアプリの作成には向いてないし、
VB6は発売中止だし、Delに流れ込んでいるのか。
目立つって言うかおんなじ奴が連続で質問してるだけだろ
なんだ、Del超初心者スレは暖かくブビを受け入れるべきなんか?
そろそろスレ立てて移れば(´д`)
RaveReportsについて詳しい方がいたら教えてください。
表形式のレポートを作成しています。中に入る文字列の長さによって、
セル内の行数を増やしたり、フォントの大きさを調整してくれるような
機能を実現させるためにはどうしたらよいでしょうか。

今DataMemoコンポーネントを使用していますが、一行の時にはフォントが
小さすぎるし、セルの真ん中より上に文字が出力されるので不格好なのです。

よろしくお願いします。


客によって言語とか環境を指定されることもあるし
DelとC#は使い分けでしょ。普通。

.netつかわにゃいかん時のためにC#ももちろん
勉強するにこしたことはないわけで。

むかしASPとVBSとかも触ってたから、今更VBを
勉強する気にもならんし。

700デフォルトの名無しさん:04/07/29 20:15
超初心者だと思ってDelphi勧めるなんて悪質だ。
VB.NETの方がまだまともな選択肢だ。
ええと・・。非常に簡単な質問をしたいのですが、
そんな雰囲気じゃないような。
いちいち断るなようっとうしい。
暑いし。ガァー!
   ,_  _, パーン
 ( ‘д‘) あーもうっ
  ⊂彡☆))Д´)
[ ] でくくってあるパラメータってどういう意味なんですか?
非常に簡単な質問をしたいのですが、
DelphiとVB.NET、どっちが優れてますか?
>>704 集合型です(゚д゚)
例えばドラゴンボール型としてBall1〜7を宣言
持ってるボールを  [Ball1,Ball3,Ball5] となるとどれがあってどれが無いのかすぐ解る(゚д゚)
非常に簡単な質問をしたいのですが、
DelphiとVB.NET、どっちが安全なコードが書けますか?
>>706
orで繋ぐやつとは違うんですか?
>>705
C#
>>707
Delphi
キーボードのキーを押す、っていう条件のイベントハンドラって何て名前なんですか?
ボタンクリックとかはすぐ分かったんすけど
キーだとヘルプの項目多すぎてよくわからんす
711デフォルトの名無しさん:04/07/29 21:10
CopyRectとか使ったらTImageとTBitmapが互換性ない、と叱られた。
処理はbitmapの方が速いけど、フォルダとかディレクトリとか面倒なんで
LoadFromFile使って読み込みたくないから、一旦Formに全部Imageで貼り付けたのを
TBitmapとして使いたい。
どうすれば簡単でしょうか?
or はタダの演算子ですよ。

if( a=1 or a=2) then hogehoge ;

というように aが1か2なら ほげほげするんです。


>>710
OnKeyDown
OnKeyUp
OnKeyPress
713デフォルトの名無しさん:04/07/29 21:13
無理矢理自作自演で質問して、スレの流れ変えようとするの止めようね。


で、VB.NETとDelphi、どっちが優れてるの?
>>713
自作かどうか連投してみたら?
>>713
うざい。消えろ。氏ね
>>713
みえみえの煽りウザイ
>>713
VB.NETの完勝だ。
満足したら巣に帰れ。
>>713 氏ね Σ(´Д`lll)
719デフォルトの名無しさん:04/07/29 21:17
超初心者の皆さん、このスレの回答者がどうしてVB.NETと比較されると嫌がるのか、よく考えてみましょう。
勝てるならば余裕の構えなはずですが・・・。
>>712
ありがとうございます
「var key」って出てるから、これでどのキーを押すのかを指定するんですよね?
・・・・すいません。記述のしかたがわかんないです・・。
超初心者様に満足な回答もできねえのか。
これじゃあ、VB.NETより優れてる理由も答えられるわけがねえ。
>>719 (・x・)コロヌ
これが噂のSpoke厨か
× どうしてVB.NETと比較されると
○ 他言語のスレである特定言語マンセーの投稿をすると
よそでやれよ
726デフォルトの名無しさん:04/07/29 21:23
そういや、Delphi Personalの値段でVS.NETが2つ買えちゃうんだな。
超初心者様にお勧め。
あんまりかまうなよ(w
喜んで夢中になるぞ(w
>>720 helpの例を見れ
>>726
DelphiにPersonal版なんてないよ。Pro版から。
>>728
どれを調べたらいいか分からなくて書き込んだんですが
適当に調べてみたら見つかりました。努力不足だったようです。失礼しました。
だまされてPersonal版から始めた人、一生バージョンアップできない。高いお金を払わないと。


カワイソウ
釣ってるつもりのMS信者が、からかわれて遊ばれてたって落ち(w
ええっ、タダでバージョンアップってできるの?
と、いうことにしたいんですね
よそでやれば
736デフォルトの名無しさん:04/07/29 21:32
>>731
大変だ。早く他の言語に移行しないと。
>>734
>>732 はたぶんメール欄のことだろうね
738デフォルトの名無しさん:04/07/29 21:45
Delphi使っていると、IDEのツールバーの辺りでやたらとマウスカーソルが別の所に瞬間移動
するのですが、これは普通なのでしょうか?
>>738
オプションでマジックカーソールのチェックをはずせ。
740738:04/07/29 21:57
>>739
なおりました アリガト!(´▽`)
741720:04/07/29 22:20
>>728
できたと思ったんですが、できませんでした。例の通りにしたつもりだったんですけど・・。
「↑」キーを押すと、変数Aに2をプラスする、という処理をしたいんですが、
演算はできないんですかね。先述の通りボタンでは動いたんですが。
742720:04/07/29 22:26
たびたびすいません。先に定義していたボタンのイベントハンドラを消去したところ、
正常に処理されました。死。
split、もしくは同等の機能を持つ関数はないのですか?
標準ではない。TStringList.DelimiteredTextでしのげるならそれ使っとけ。
それでも駄目なら正規表現ライブラリ入れとけ。
>>536
傾きが大きいところはyからxを,小さいところはxからyを求めればよいと思います.
たとえば第一象限の場合,0〜45度まではyからxを求め,45〜90度ではxからyを求めます.

どうも昔のパソコンがこんなふうに描画していたようです.
基礎からわかるDelphi6って言う本を買ってみました

初めてやる人にとってはちと難しいかなー。
わからないことがあったらこのスレにきます。でわでわ。。。
>>698
遅レスだが・・・
イベントで文字数判断して、フォントの大きさを変えれば良い。

コード例は、このあたりかな?
http://onigiri.s3.xrea.com:8080/delphi/index.php?%5B%5BRaveReports%2FRaveTips2%5D%5D
http://onigiri.s3.xrea.com:8080/delphi/index.php?%5B%5BRaveReports%2FRaveTips3%5D%5D
vbのapp.previnstanceのようにコピーしたexeでは
2重起動できて、同じexeでは2重起動できないように
するにはどうすればよいでしょうか?
mutexだとまったく2重起動できなくなってしまいます。
よろしくお願いします。
749698:04/07/30 09:08
>>747

待ってました!TXT!
Application.Minimize;していると
FindWindowでウィンドウハンドルを取得したときに
そうでないときと取得できるウィンドウハンドル異なってしまいます。
なぜでしょうか?
>>748
mutexで引っかかったら、プロセス列挙して、メインモジュールのフルパスを
取得して、自分と同じかどうか調べる。
メンドクサー。

>コピーしたexeでは2重起動できて、

これ糞仕様だと思う。

と、ここまで書いて、いいこと思いついた。CreateMutex の第三パラメータには
自分のフルパスを設定するとよい。MAX_PATH バイトまで設定できるから。

>>750
あり得ない。メモ帳を一つだけ起動しておいて、タイマーつかって

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Memo1.Lines.Add(IntToHex(FindWindow('Notepad',nil),4));
end;

でやってみたら、最小化してもしなくても同じ値が得られた。

もしかして、対象ウィンドウを複数起動してない?
IDEから起動するとTApplicationクラスが最低二つある。自分のアプリとIDEのと。
まさか、これ?
>>753
それでした。
アプリケーションで共通に使う定数はどこに
記述すればよいでしょうか?
>>755
新規作成から「ユニット」を選んで、その interface 部に書いて、
たとえば MyConst.pas とかで保存する。
それをつかいたいユニットからは use MyConst; するとどのユニット
からでも見られる。
>>756
ありがとうございます。さっそくやってみます。
>>756
できました。ここは初心者に優しいスレですね。
今日はVB.NET使いはいないの?
Delphiを始める上でお勧めの本ありますか?
一冊買ったのですが、コンポーネントの機能の説明ばかりでした。
標準関数の仕様とか、ライブラリとかの情報が欲しいのですが・・・
>>760
『くだすれDelphi(超初心者用)』が一冊あれば事足りる。
>>762
完全にテンプレ見るの忘れてました。
どうも失礼しました。
謝らんでいいよ. 見落としは誰にでも。 >>762

DelWiki, また復活してきたかな?夏休みだからか?

>>764
> DelWiki, また復活してきたかな
ネタ提供よろ〜
serversocketコンポーネントのonClientReadイベントが
発生したとき、どのクライアントからデータを読み込むか
わかるのでしょうか?
socket.sockethandleでいいでしょうか?
>>766
いまいち意味不明だが、
RemoteHostでもRemoteAddressでも参照してちょ。
>>767
複数同時接続されている場合、どのソケットから読み込んだか
わからないと、困るかなと。
ボタンを一度クリックすると選択状態になってしまいますが、
これを自動で解除するにはどうしたらいいでしょうか?
>>769
TForm1.FocusControl(フォーカスを移したいコントロール);

もしくは、ボタンに文字を表示しなくてもいいのならSpeedButtonに変える
DecodeDateで獲得した西暦を
Editに表示するときに2004から04に変えたいのですが
どうすれば良いでしょうか?
FormatDateTime('yy年mm月dd日hh時nn分ss秒',Now);
リストビューのレポート表示の1行の高さを取得するには
どうすればよいですか?
774771:04/07/30 18:51
>>772
あ、すいません
説明不足でした

DecodeDateで獲得した西暦、月、日の各データを
Edit1.Text := 西暦
Edit2.Text := 月
Edit3.Text := 日
としたいのですが
この場合西暦が2004となってしまいます
この2004を04という形でEditに表示することはできないのでしょうか?

お手数ですがお教え願えないでしょうか?
>>774
FormatDateTime('yy年mm月dd日hh時nn分ss秒',Now);
yyなら下二桁表示
yyyyなら4桁表示
えーとじゃあ、西暦とか関係なく

4桁の数値を2桁の文字列で表示するにはどうしたらいいですか?
Edit1.Text := Copy(IntToStr(year), 3, 2);
4桁決め打ちで。
>>776
だから
DecodeDate(TDateTime, Year, Month, Day);
で、4桁を2桁に縮めてもいいんだけど、それだと桁数によっては
エラーになる可能性があるので、
Edit1.Text := FormatDateTime('yy',TDateTIme);にしなさいっていってるの。
779771:04/07/30 19:22
>>772
>>775
>>777

ありがとうございました
TrackBarコンポーネントにはMouseDownやMouseUpなどのイベントがないのですが
マウスイベントに対応させる方法はありませんか?
>>780
TTrackBar 派生コンポーネントを作成して、
TControl からそれ系イベントを継承すれば良いと思った。
>>781
ありがとうございます
Del6Pesnalでコンポーネントのソースなしでも可能なのでしょうか?
>>782
可能です。わたくしも Personal 寄生虫ユーザーですが、
ガシガシとカスタムコンポーネントを作成しています。
>>770
書いてみたんですが、「ソースファイルへのパスが見つかりません」って出てしまいました。
何をどう宣言すればよいのでしょう・・。
785A:04/07/30 23:51
>>784
何をどう書いて、そのエラーが出たのか、を書くのが先ではないかと思われ。
>>783
publishedで公開したら使えるようになりました
ありがとうございます
>>784
どんな風に書いたのか教えれ
今日はVB.NET使いがいなくて盛り上がらないな
>>785
ああ、すいません。今組んでるのは簡単なゲームのアプリなんですが、
矢印キーを押すことで表示キャラクタの座標に変数を加減するよう組んでます。
で、一定条件下でプログラムが一時停止・・要するに「ゲームオーバー」になるんですが、
このとき「リトライ」ボタンを押すことで、リセットするようにしたいんです。
で、そのボタンを置いたはいいものの、それを押すとボタンが選択状態になってしまい、
キー操作を受け付けなくなってしまいます。
以上が症状で、
私が書いたのは、>>770さんの書いてくれた助言にまんまForm1とぶっこんだものです・・。
Form1.FocusControl(Form1);とか書いてます・・。
ボタンクリックのプロシージャ内に。
KeyPreviewをいじってみて。
>>790
TRUEにしてみましたが、だめでした・・。
あ、矢印だとダメって書いてありますね。まずは別のキーで試してみます。
793A:04/07/31 02:29
>>789
Form1.FocusControl(Form1);
この行に対して、ソースファイルへのパスが見つかりません、ってエラーが出るの?
その状況が想像つかないのだけど……。

ヘルプによると、そのエラーが出るときには、どのファイルが見つからないのか、
表示されるはずなのだけど、何か出てない?

あと、どうやら、プロパティ等に不正な値をセットしたときに、その影響でVCL内部での
エラーが発生すると、そういうことが起こるらしい。
ぐぐったら、こんなのが出てきた。
ttp://homepage1.nifty.com/MADIA/delphi/delphi_bbs/200303_03030034.html
>>792
ゴメンゴメン。
WantChildKeyを使ってみて。

delphi勉強中の者です

DirectXを使ってポリゴンを扱えるアプリを制作しようとしているのですが、
DelphiからDirectXの関数を呼び出したい際、

DirectX = Win32API として考えて良いのでしょうか?
DirectXは技術的には単なるWin32APIと同等な構造体+関数呼び出しではあるが。
797デフォルトの名無しさん:04/07/31 09:49
Del房ってVB房を自作自演してまでDelphiの名を広めようとするんだな
Delphi6Personalみたく、ただで使えるC++Builderないですか?
ない
delphiを昨日今日始めたような初心者で申し訳ないんですが
perlで言うところの
split(/\t/,$Date[$i]);
みたいな処理をしてくれる関数はないでしょうか?
ないです
var sl: TStringList; i: Integer;

sl := TStringList.Create;
sl.Delimiter := #9; sl.DelmitedText := 文字列;
for i := 0 to sl.Count-1 do Writeln(sl[i]);
同じ処理じゃないです。しかも1行じゃないし。
>>803
おいおい
せっかく教えてくれた人に文句言うのは失礼だぞ
それに1行で書かなければならない理由はなぜ?
あまりに無礼すぎてワロタ
806789:04/07/31 12:16
>>793
「Form1」とダイアログボックスには表示されてます。なお、そのエラーは、
実行時(コンパイルはできます)に、ボタンを押したときに表示されるので、例の文が問題だと考えてます。
以前も似たような事がありまして、その時「見つかりません」と指摘されたファイルは「Graphics」でした。
その原因は「:=TBitmap.Create」の文が抜けてたからだったので、
今回も似たようなもんではないかと思ってるのですが。
答えが変であれば教えて貰ってないのと一緒です!
>>789
> Form1.FocusControl(Form1);
              ^^^^^^
コントロールじゃないジャン
810789:04/07/31 14:26
>>809
ああ・・、やっぱそうですよね・・。そうなんじゃないか、くらいにしか思えなくて・・。
原因の一つとして考えはしたんですが、解決策がわからないどころか確信も持てなかったんです。
要するに、ほんと素人なんすよ。すんません。
コントロールって、フォームの中にあるコンポーネント、って認識でいいんですか?

ヘルプを参照しても使い方が分からない文も多々あるんです。どう勉強すればいいんでしょう・・。
せっかく教えてくれてるのに申し訳ないです。>>794さんの助言も使い方がわからなくて試せず・・。
誰かこのページの関数をdelphiに移植してくれませんか?
http://hp.vector.co.jp/authors/VA009712/take/delphi/kabereg.htm
812811:04/07/31 14:55
間違えました。こっちです。
http://www.geocities.co.jp/SilkRoad/4511/vb/ieright.htm
いやです
814811:04/07/31 15:29
TRegistry使ったら簡単にできました。
ありがとう。
>>810
ゲーム作りに関しては
こちらの方が適切なアドバイスをくれると思うので貼っておきます

Delphiゲームプログラミング相談室
http://pc5.2ch.net/test/read.cgi/gamedev/1006249204/
>>810
一応解決策も書いておきます

Form1.FocusControl(nil);
これでどのコンポーネントも選択していない状態になります
817789:04/07/31 17:08
>>815>>816
おお!解決しました!括弧内の記述が正しければ使えたんですね。
てっきり何かしらの型宣言がいるものだとばかり。
親切にありがとうございました。
Delphi6PersonalでActiveXDLLは作成できますか?
多分できると思う。
多分できないと思う。
オブジェクトとコンポーネントわからねぇー。
なんて見難いHELPなんだ・・・
逆引き無いの?
質問です

メモコンポーネントの入力欄が

aa
改行
bb
cc
dd
ff
改行
改行

となってるいるとして
これをファイルに

aa
bb
cc
dd
ff

と文中、文後の改行を削除し
入力されてる文字列を
行ごとにつめて出力したい場合
どうすれば良いでしょうか?
for i := Lines.Count-1 downto 0 do if Lines[i] = '' then Lines.Delete(i);
>>821
個人的には「VCLリファレンス」「ルーチン一覧(カテゴリ別)」が
一番探しやすいと思う。
>>824
ルーチン(カテゴリ別)はわかるけど
VCLリファレンス?  それすら探せない・・・O几
826822:04/08/01 11:58
>>825
スタート→すべてのプログラム→Borland Delphi →ヘルプ→VCLリファレンスヘルプ
だと思われ
起動中のヘルプからでもいけるよ

>>823
ありがとうございます

続けて質問心苦しいのですが
>>823の文を実行すると
ほかの改行を消すことはできたのですが

aa
bb
cc
dd
改行

と1つだけ改行が残ってしまいます
いろいろやってみたんですが
どうもLines.Countにこの最後の改行が認識されてないようです
これを解消して
最後の改行を消す方法はあるのでしょうか?
aa改行
bb改行
cc改行
dd改行

つーかじゃないの
なんだ、つーかじゃないのって >俺
orz
コンパイル時には意図した通りに回ってるのに、実行ファイルを動かすと、別の動き(意図してない動き)をする、
なんて状況になってるんですが・・。
具体的に書きますと、ボタンクリックのプロシージャ内で、ラジオグループのアイテムインデックス値によって
タイマー1〜3のインターバル値を変更するようにケース文を組んでいます。
コンパイル時にはちゃんと変更されてるんですけど、
後に実行ファイルを回してみると、一部のインターバルが変更されないんです。
わけわからん・・。
訂正します。
Delphiの起動時のみ、意図通りに動くようです。
すいません。更に訂正なんですが、
別のPCで回してみたところ、通常通りに処理されました・・・。
そのTButton.OnClick内のコードさらしてみそ
まんまコピペです。
begin
//初期値再設定
  case Form1.RadioGroup1.ItemIndex of
   0:begin
Form1.Timer1.Interval := 50;
Form1.Timer2.Interval := 3000;
Form1.Timer3.Interval := 50;
DDKASAN := 0;
end;
   1:begin
Form1.Timer1.Interval := 30;
Form1.Timer2.Interval := 300;
Form1.Timer3.Interval := 30;
DDKASAN := 4;
end;
   2:begin
Form1.Timer1.Interval := 50;
Form1.Timer2.Interval := 3000;
Form1.Timer3.Interval := 50;
DDKASAN := 1;
end;
end;
Form1.Timer1.Enabled := True;
Form1.Timer2.Enabled := True;
Form1.Timer3.Enabled := True;
Form1.FocusControl(nil);
end;
Form1.Timer1.Enabled := False; Form1.Timer1.Enabled := True;
Form1.Timer2.Enabled := False; Form1.Timer2.Enabled := True;
Form1.Timer3.Enabled := False; Form1.Timer3.Enabled := True;
Enabledを一度FalseにしてからTrueに
>>835
できました!ありがとうございます。
他のプロシージャで一度Falseになってるんですけど、こうすると解決するんすね。
理由がわかりませんが・・、ヘルプ検索しまくってみます。
837デフォルトの名無しさん:04/08/01 21:41
スロットを作りたいんですけど、どういう風に作ればいいですか?
>>837
スレ違い

こらなければ、3つのTLabel.Captionに0〜9の数字を順番に表示させて、
その下にそれぞれボタンつけて、ボタンクリックでそれぞれの数字を止める。
3つの数字が揃っていたら当たり。

コイン賭けたいなら何枚かけるとか、今何枚あるとか、各数字によって配当
決めたりとか。
>>837
メールスロット?それならAPIで一発だよ。
StringGrid で、OnSelectCell でダイアログ表示させ、そこで入力して値をセット、としています。
なんですが、セルを選択した時点では、セルのフォーカス(?)というか、縁どりが、
現在選択中のセルでなく、一つ前のセルに縁どりされていて、ダイアログを閉じると
縁どりが値を設定したセルに移動します。

ダイアログ表示時に、選択したセルに縁どりを付けるにはどうしたら良いでしょう?

わかりにくい説明ですまんです。
841デフォルトの名無しさん:04/08/01 22:53
>>838>>839
全然凝らない単なるスロットでいいんですけど、イマイチやり方分かんなくて・・・。
各スロットの状態遷移図描けば分かる
>>841
スロットって、パチスロのスロットかとおもたよww
>>843
パチスロのスロットでは?
>>840
OnSelectCell はセルを選択する前に発生するイベントなので、そのイベント
手続きが終了するまでは選択されないという動作で正しい。
(無理にその中で選択すると再帰呼び出しになってしまう。)

PostMessage で WM_APP よりも上の適当なメッセージを親フォームに投げて、
そのメッセージハンドラで入力用のフォームを開くようにすればいい。
割り込みが入った場合のことを考えてフラグを立てるなどの処理が必要かも。
846デフォルトの名無しさん:04/08/02 00:25
パチスロのスロットかな・・・。
とりあえず数字が回ればいいのですけど・・・。
やはりOpenGLでしょう。 プレイステーションでも正式採用だしね。
とりあえず827はどっちかハッキリしろ
違う、837だ orz
837=833だろ
タイマ三つまわして他に何をするって言うんだよ
851デフォルトの名無しさん:04/08/02 01:06
どうして PByte(nil)^ := 0; は
アドレス 0 ではなくて、FFFFFFFF への読み込みになるのですか?
ならないだろ
Delphi6Personalでデータベース連携できるフリーコンポありませんか?
>>853
ありません。Professional 買いましょう。
Delphiの動的配列ってポインタなの?
>>853
コンポーネントではないけど
>ttp://homepage1.nifty.com/MADIA/delphi/delphi_bbs/200302_03020035.html
に似たような議論が。
長々とやってるけどよーするにできないと
858A:04/08/02 19:51
>>856,857
結論は「出来ない」ではなくて、
DelphiのRADを使って、簡単にやりたいなら、Proを買うのが一番の近道。
ってことじゃ?

Personalでデータベース連携、に関しては、これが結論では?

--------
データベースサーバを別に用意すれば、BDE経由でなくてもできます。
# たとえばOracle。フリーでならPostgreSQLなど。

MS-Accessも、DAOのOCXさえあれば接続できますが、配布条件によってはDAOを添付して配布する事ができないかもしれません。
これはMicrosoftに確認してください。

いろいろなデータベースに接続するには、ODBC接続にすると便利です。
ODBCは、BDE経由でなくても利用できると思います。ただし、DLLを直接叩かないといけません。

遠回しですが、JDBC-ODBCドライバを用いて、Java経由で接続、という手もあります。
# あまりメリットはありません。
---------

よーするに、面倒な道だけどやってできないこともない、と。
>>858
禿同。

> 面倒な道だけどやってできないこともない
Qアメリカまで、運賃払わずに行く方法はありますか?
Aやってできないこともないです。ゴムボートで行った人も居ますから。

というレベルの話だが・・・
WindowsMeで2GBを超えるファイルを開く方法を教えてください。
先頭の64Kbyteの読み込みができれば結構です。
CreateFileじゃ駄目なのか?
XMLで済むんならMSXML使うとか
>>859
そこまで遠いかね
500メートル先のコンビニ
歩いていくか自転車で行くかくらいしか違わないね
500なら徒歩だろ
チャリキの方がかえってメンドクサイ
>>855
はい,動的配列変数は内部的にはポインタです.
詳しくはヘルプの『動的配列』のところをご覧ください.
(『トピックの検索』『キーワード』タブで『動的配列』と打ち込んで検索)

>>858
知り合いがVisual C++でDAOだったかADOだったかに接続するソフトを書いていましたが,
DelphiのPersonal版でも同じようにコードを書けばできそうな気もします.

ただDelphiのPro版以上ならず〜〜〜〜〜〜っと簡単にできてしまうので
あえてやろうとする人がいないのでしょうね.
867デフォルトの名無しさん:04/08/02 23:33
みんなは、>>851 で FFFFFFFF にはならないの?
868A
>>859
そこまで遠くないかとw
せめて、東京から北海道ぐらいじゃないかな?w

>866にもあるみたいに、要するに特別なサポートの無い他言語と同じだけの労力が必要になる。
でも、逆にいうと、他言語と同じレベルの努力をすればできる、ということでもある。

お金を出しさえすれば、すごく楽な道がすぐそばにあるのをわかっていて、
手を出す人は少ないだろうけど。

あと、昔のDelphiってたしか、一番下のバージョンでもデータベース系コンポがついてたはず。
Delphi4 std. とか。そゆのを安く手に入れるっていうほうほうもあるかも。

…ふとおもったけど、Delphi4 Stdの正規ユーザーが、Delphi6で、D4のコンポを使うことは
ライセンス的にどうなるんだろう?
それ以前に、コンポーネントが移植できるのかどうかも知らないけど。