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

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

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

<過去スレ>
DelWiki避難所
http://delwiki.info/?Delphi+%B4%D8%CF%A2%A4%CE%B2%E1%B5%EE%A5%B9%A5%EC%A5%C3%A5%C9

29:http://pc8.2ch.net/test/read.cgi/tech/1135866929/
30:http://pc8.2ch.net/test/read.cgi/tech/1138370150/
31:http://pc8.2ch.net/test/read.cgi/tech/1142594051/
32:http://pc8.2ch.net/test/read.cgi/tech/1145267913/
33:http://pc8.2ch.net/test/read.cgi/tech/1148378877/
34:http://pc8.2ch.net/test/read.cgi/tech/1151143010/
35:http://pc8.2ch.net/test/read.cgi/tech/1155263138/
36:http://pc8.2ch.net/test/read.cgi/tech/1159485364/
37:http://pc8.2ch.net/test/read.cgi/tech/1162458229/
39:http://pc10.2ch.net/test/read.cgi/tech/1169386914/
2デフォルトの名無しさん:2007/03/02(金) 23:07:50
<関連スレ>
※Delphiに関係してる雑談および関係してない雑談については以下でどうぞ
バカボンのDelphi不買・販促・その他談話室その29
http://pc8.2ch.net/test/read.cgi/tech/1153227982/

Delphi初心者のための寺子屋
http://pc8.2ch.net/test/read.cgi/tech/1132756268/
【Delphi】 Indyコンポーネント 【C++Builder】
http://pc8.2ch.net/test/read.cgi/tech/1093654251/
【Delphi】 ゲームつくるぞ(゚Д゚)ゴルァ 2【Delphi】 (※ゲーム制作技術板)
http://pc8.2ch.net/test/read.cgi/gamedev/1097836469/

※ほかにもスレッドあります。

<その他>
BorlandHomePage
http://www.borland.com/jp/
DelWiki避難所
http://delwiki.info/
BDN(BorlandDeveloperNetwork)
http://dn.codegear.com/jp/delphi
3デフォルトの名無しさん:2007/03/03(土) 00:02:32
YouTubeのHTMLをidHTTPで取得しましたが、日本語のタイトルの取得がうまくいきません。
化けてしまっているようで、正しい日本語にならないのです。

サイトのエンコードはUTF8で、このソースをSJISにしたいのですが、どういう処理をすると変換できるのでしょうか。
4デフォルトの名無しさん:2007/03/03(土) 19:53:02
だれかdelphiの仕事くれ。
5デフォルトの名無しさん:2007/03/04(日) 12:42:08
あるよ、たくさん。やる?
6デフォルトの名無しさん:2007/03/04(日) 21:33:03
>>4
たくさんある。手伝ってくれ。
7デフォルトの名無しさん:2007/03/04(日) 21:51:01
ちょいブランクあるので何か適正試験みたなことしてくれないか?
〜を作ってソースうpしろみたいな。
DBはFirebirdを指定してくれるとありがたい。
8デフォルトの名無しさん:2007/03/04(日) 23:04:41
くだスレって超低レベルな仕事の斡旋もしてるのか?
9デフォルトの名無しさん:2007/03/05(月) 00:04:39
Delphiめんどい
10デフォルトの名無しさん:2007/03/05(月) 01:21:26
うちはDBはSQLServerが多いけど、TADOConnectionとかなら使えるだろ?
11デフォルトの名無しさん:2007/03/05(月) 07:57:20
116 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/04(土) 17:25:13
ttp://beeography.wordpress.com/2006/09/12/just-wanna-let-you-know/
ここに書いてある方法でTurbo Exprorerでも合法にコンポ入れれるよ

117 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/04(土) 18:02:21
あとこれ。
dclusr経由のコンポーネントインストールが、ライセンス違反かどうかの話。
ttp://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200609/06090014.txt

12デフォルトの名無しさん:2007/03/05(月) 13:36:45
>>11の削除依頼出してきました。
せっかく好意で無償公開してくれているのに
会社の利益を損なうような非常識なレスは慎んでください。
13デフォルトの名無しさん:2007/03/05(月) 18:52:57
ライセンスに触れないって言ってるのに、一私企業の利益のために削除依頼とか
言ってるのは、どうかしてる。ユーザの反感を煽るためのアンチ活動としか思えんな。

14デフォルトの名無しさん:2007/03/05(月) 19:49:14
>>12
>>11のリンク先に書かれている内容を最低でも256回読んでこい。
どこに「会社の利益を損なう」ことがある?
少なくともリンク先ではライセンスに関して真摯に討論されているし、
>>11を書いた人だって会社の利益を損なうことを意図してレスしたわけではないだろう。
一つめのリンクは呼び水で、二つめのリンクは事の是非を問うためのやりとりでしょう。

リンク先を読まずにレスの表面だけなぞればそのようにとる人が現れても仕方がないかもしれないが。
15デフォルトの名無しさん:2007/03/05(月) 21:58:17
アンチのテクニック。相手するだけ損。
16デフォルトの名無しさん:2007/03/05(月) 23:16:49
Delphi2007の案内来たけど、Vistaにすんなりインストールできる事と、
VistaっぽいVCLが追加になった以外、BDS2006と大した違いがなさそうね。



まあ、GUIだけ変えて毎年3万取る弥生会計よりは遙かに良心的だけど。
17デフォルトの名無しさん:2007/03/06(火) 01:27:01
まぁ、人殺しより強盗の方がましだけど、って聞こえるな。
18sage:2007/03/06(火) 03:19:42
誰か助けてくれ。
delphiはじめてまだ数週間の漏れは今壁にぶつかってる。

TListBoxでアイテムが選択されたときに起きるイベントハンドラを書くには
どーしたらいいんだ。いや、いいんでしょうか・・。

説明難しいから例をだすと、

TListBOXのアイテムが選択された→Button1をEnableに。

こんな感じでやりたいんだ。
19デフォルトの名無しさん:2007/03/06(火) 04:13:06
onChangeじゃだめなのか?
20デフォルトの名無しさん:2007/03/06(火) 08:16:58
OnClickとかOnMouseUpとかで、SelCountとかItemIndex見る
21デフォルトの名無しさん:2007/03/06(火) 15:05:48
ShellExecute(Handle,'open',PChar('C:\nantoka.exe'),
'',Pchar('C:\'),SW_SHOWDEFAULT);

上記のように書いてnantoka.exeを実行させています。
ただ、実行させるexeによっては、
「ファイル○○がありません」「○○が見つかりません」とか出ます。
(ただ、エクスプローラからダブルクリックで起動させる際には
エラーは出ず、正常に動作します)
多分、引数を与えればいいと考えてるんですけど
教えていただきたいです。
22デフォルトの名無しさん:2007/03/06(火) 18:43:36
ShellExecute(Handle, nil, PChar('C:\nantoka.exe'), nil, nil, SW_SHOW);
23デフォルトの名無しさん:2007/03/07(水) 05:04:27
さっきまでちゃんと動いてた俺のソフトが突然エラー吐くようになった件。
助けてください。。

起動時にアドレスの読み込み違反がどーのこーのってでるんだが…。

FormCreateの部分が問題なのかね?
自動作成フォームの順番とか、なにを参考に変えたらいいんだろうか…。

まじで泥沼なんです。どなたかご教授を。。
24デフォルトの名無しさん:2007/03/07(水) 05:04:57
>>23
たいてい配列。
以上。
25デフォルトの名無しさん:2007/03/07(水) 07:47:34
>>23
たいてい作成されていないフォームのオブジェクトを参照したときの問題。
以上
26デフォルトの名無しさん:2007/03/07(水) 07:50:57
.netを普及させる方法を思いついた!
win32に、WCaption: WideString みたいなメンバを追加して
さらにくそでかく遅いバイナリしか生成できなくする。
これなら.netでいいや、ってなりwin32死滅。
27デフォルトの名無しさん:2007/03/07(水) 09:48:42
delphi のユーザなんて1%位なんだから、どうなっても大勢に無関係
28 ◆XcB18Bks.Y :2007/03/07(水) 11:18:01
何でもう40スレが立ってるのよw

くだすれDelphi(超初心者用)その39
http://pc11.2ch.net/test/read.cgi/tech/1169386914/l50

>>23
デバッグ機能を使って1行ずつ実行しましょう.

・FormCreateが怪しいかもとのことなのでここの最初の行(ただし青丸がつくところ)にブレークポイントを置く(F5)
・普通に実行(F9)
・ブレークポイントでプログラムが停止したら1行ずつ実行(F8)してエラーの出る行を見つけます.

ブレークポイントやステップ実行を使うこと自体は非常に簡単ですので使ってみてください.
291:2007/03/07(水) 13:39:44
なんでって、39はもう落ちてね?
30デフォルトの名無しさん:2007/03/07(水) 14:09:15
落ちてません。
31デフォルトの名無しさん:2007/03/07(水) 14:35:35
この前の鯖落ちでログ消えた人が多いから混乱してるのよね
32デフォルトの名無しさん:2007/03/07(水) 14:47:54
Delphi初心者が質問するのはいいけど、2ch初心者がスレ立てするのは勘弁してほしい。
331:2007/03/09(金) 01:52:14
勘弁ならん。
34デフォルトの名無しさん:2007/03/10(土) 03:18:56
>>23
最近はまった例。
TEditのonchangeで別のコンポーネントのプロパティを書き換えるコードを書いたら
起動時に書き換え対象コンポーネントが生成される前にonchangeイベントが発生した。

値を変更していないのに起動時にTEditのonchangeが発生するのはなぜだろう。
35デフォルトの名無しさん:2007/03/10(土) 04:49:53
裸のコントロールが生成される

設計時のテキスト(デフォルトかもしれないが)が設定される

OnChange イベントが起こる

なんの不思議もないと思うが
36デフォルトの名無しさん:2007/03/10(土) 16:48:04
>>34
最初ははまるよな

生成時に onchange イベントが発生する
生成時だけイベントをスルーさせる事
37デフォルトの名無しさん:2007/03/10(土) 22:15:50
はまると言えば、TListViewのOwnerDataをtrueにして、
OnDataイベントで、 Item.SubStr.Text:='AAA'#13#10'BBB';

一体何が気に入らなくてこういう現象に。
38デフォルトの名無しさん:2007/03/12(月) 21:49:04
Vista入れた。初めての上書きインストール。
BDEを使ってる自作ソフトが一つも起動できない。
データベース自体よくわからずにサンプルと上手作ったやつ。
どすればいいですか?
39デフォルトの名無しさん:2007/03/12(月) 21:51:30
もとに戻す
40デフォルトの名無しさん:2007/03/12(月) 21:53:43
ぺけぴーに?
41デフォルトの名無しさん:2007/03/12(月) 21:56:14
>>38
> データベース自体よくわからずにサンプルと上手作ったやつ。

ってなにを書いてる?>おいら

サンプルとか見てつくったやつ
42デフォルトの名無しさん:2007/03/12(月) 22:17:43
VistaじゃBDEはつかえんのか
43デフォルトの名無しさん:2007/03/12(月) 22:22:52
BDEなんか捨ててdbExpress使えよ
44デフォルトの名無しさん:2007/03/12(月) 22:26:09
dbExpress って無料?おいらDelphi5なんだけど。
BDE+パラドックスなんだけどソースとかそのままでいけるの?
45デフォルトの名無しさん:2007/03/12(月) 22:27:40
Vistaじゃダメみたい
46デフォルトの名無しさん:2007/03/12(月) 22:30:21
タスクトレイにアイコン入れたいんだが、
APIって必須?ややこ杉
47デフォルトの名無しさん:2007/03/12(月) 22:30:50
もしやと思って、いま、UAC無効にしたら起動はした。(前はそれ以前だった)が、
Access violation at address 004E2773 in module 'xx.exe'. Read of address 00000000.
やっぱだめ
48デフォルトの名無しさん:2007/03/12(月) 22:32:06
>>46
フリーのコンポがいっぱいある。
ターボでインストールできないなら、コンポのソースコピペするといい。
コピペも勉強。
49デフォルトの名無しさん:2007/03/12(月) 22:39:32
>46
TrayIconとかそんな名前で探してみれば?
50デフォルトの名無しさん:2007/03/12(月) 23:07:38
ぼめん、動いた。UAC無効で。
あくせすばいおれーしょんはタダのバグだった。
これで寝れます。
お騒がせしますた。
51デフォルトの名無しさん:2007/03/12(月) 23:54:59
こんなんばっか・・・
52デフォルトの名無しさん:2007/03/13(火) 00:20:04
>>51
くだスレで何を・・・
53デフォルトの名無しさん:2007/03/13(火) 00:48:24
TrayIconのコンポーネントって、BDS2006あたりから標準で付いてるけどな・・。
54デフォルトの名無しさん:2007/03/13(火) 02:00:35
そんなドマイナーバージョンではなんの情報にもならん
55デフォルトの名無しさん:2007/03/13(火) 07:13:27
過去スレでこんなのを見つけた

// ----- ここから ------

487 :デフォルトの名無しさん :2006/07/22(土) 23:46:26
Tlistのデータをファイルに出力したり、
そのファイルを読み込んでTlistを構築したりって
ことがしたいんですけど、どうやったらいいですか?
いろいろ調べたけど、わからなかった。
スレタイとおりの超初心者なんです。
教えてください。(あま〜いとか言わないでw)

MyList : TList;

New(ARecord);
ARecord^.name := FileRec.Name ;
ARecord^.Time := FileRec.Time;
MyList.Add(ARecord);
みたいににして作ったMyListをファイル出力。
また、そのファイルから後日再度MyListを構築したいんです。


 ---- つづく -----
56デフォルトの名無しさん:2007/03/13(火) 07:14:39
 ---- つづき ----

516 :ななしへたぐらま ◆XcB18Bks.Y :2006/07/24(月) 23:27:37
>>487
たとえばこんな感じで書き出せます.
procedure TForm1.SaveList;
var
 fs: TFileStream;
 i: integer;
begin
 fs := TFileStream.Create(ListFileName, fmCreate);
 try
  for i := 0 to pred(FList.Count) do
   fs.Write(PFileRec(FList[i])^, sizeof(TFileRec));
 finally
  fs.Free;
 end;
end;

ただし,文字列は短い文字列かヌルで終わる文字列に格納しなければなりません.
TNantoka = packed record // ファイルに保存する場合は必ずpacked recoed
 Name: shortstring; // 短い文字列.この場合256バイト使う.最大255バイト格納可能.
 Time: TDateTime;
end;

// ----- ここまで ------

これって、書き出しはこれでいいとして、ファイルから読み込んでリストに展開するにはどうやればいいです?
57デフォルトの名無しさん:2007/03/13(火) 07:20:57
書き込む時に最初に個数を書いておいて、その個数分処理するか
大きなリスト作っておいて、読みながらサイズが足りなければサイズを増やしてゆくか
58デフォルトの名無しさん:2007/03/13(火) 07:24:59
読み出しは書き込みのように簡単にはいかないんだ?
59デフォルトの名無しさん:2007/03/13(火) 07:25:58
この487はどう解決したのか
60前スレより持ち越し:2007/03/13(火) 07:36:42
みなさん、もはよう。

(Rangeに値を入れても無視される件について)

986 :デフォルトの名無しさん :2007/03/12(月) 19:17:42
アセンブラ版
function MyRand(Range:DWORD):DWORD;
asm
IMUL EDX,Seed,08088405H
Add EDX,1
MOV Seed,EDX
MUL EDX
MOV EAX,EDX
end;


61デフォルトの名無しさん:2007/03/13(火) 07:37:38
>>58 最初にサイズを書いておけば比較的簡単だよ
書き込み
var
 fs: TFileStream;
 i,siz: integer;
begin
 fs := TFileStream.Create(ListFileName, fmCreate);
siz := FList.Count;
fs.Write(siz,sizeof(siz));
//あと同じ

これを逆に読めばいいけど、実体を入れる場所が必要だから、動的配列
var databuf:array of TNantoka;  を関数の外に用意して

fs.Read(siz,sizeof(siz)); して
SetLength(databuf,siz);とサイズを指定
fs.Read(databuf[0],sizeof(databuf[0])*siz); で全部読んでおいて
後はひとつづつTListにポインタを割り当ててゆけばいいから
FList.Count:=siz;
  for i := 0 to siz-1 do FList[i]=@databuf[i];

62デフォルトの名無しさん:2007/03/13(火) 07:43:22
>>60
フォーム新規作成後、メモとボタンを貼り付けて
ボタンをダブルクリック、 で、出た3行を以下と置き換えたら、普通に動いたよ

procedure TForm1.Button1Click(Sender: TObject);
var Seed:DWORD;
function MyRand(Range:DWORD):DWORD;
asm
IMUL EDX,Seed,08088405H
Add EDX,1
MOV Seed,EDX
MUL EDX
MOV EAX,EDX
end;
var
I: Integer;
begin
Seed:=Round(Now);
for I := 0 to 100 - 1 do
Memo1.Lines.Add(Format('%5d',[MyRand(100)] ));
end;
63デフォルトの名無しさん:2007/03/13(火) 07:44:32
>実体を入れる場所が必要だから、

あー、そうか。
どうもありがとう!
64デフォルトの名無しさん:2007/03/13(火) 07:53:35

function MyRand(Range:DWORD):DWORD;  Rangeは レジスタEAXで渡される
asm
IMUL EDX,Seed,08088405H  EDXにSeed*Seed,08088405H の下位32bitが入る
Add EDX,1            EDX:=EDX+1
MOV Seed,EDX         Seed:=EDX
MUL EDX             EAXに EDX*EAXの下位32bitの結果が EDXにEAX*EDXの上位32bitが
MOV EAX,EDX          EAX:=EDX; 同時に Result:=EAX
end;

もしかして、アセンブラ関数じゃなく、インラインアセンブラにしてない?
つまり begin 〜 end 中に書いてない?
そうすると、変な事になっちゃうよ
65デフォルトの名無しさん:2007/03/13(火) 07:58:18
>>60
漏れも普通に動いたけど?

くだすれDelphi(超初心者用)その39
http://pc11.2ch.net/test/read.cgi/tech/1169386914/983

みたいにしたら、Random関数と同じ値だった。
66デフォルトの名無しさん:2007/03/13(火) 08:11:03
>>62のとおりにコピペしたら動いた。
なにかが抜けてたらしい。

あんがと♥
67デフォルトの名無しさん:2007/03/13(火) 09:27:49
つか今時そんな粗悪なルーチンつかうなと
68デフォルトの名無しさん:2007/03/13(火) 09:43:35
というか、ソレ、random関数そのままじゃないか
69デフォルトの名無しさん:2007/03/13(火) 12:32:56
質問です。以下長くなりますがご容赦ください

TCanvasの上に今回・前回・前々回分のデータを
レーダーチャート(星型のようなもの)で出力する物を作っているのですが
1つのチャートの上に出力した時に今回前回で値が同じになってしまっているような場合
線が重なってしまって最後に描写した線しか表示できません。
これでは他の値が出力されているのかどうかが判別できないため
何か判別ができるようになる良い方法はないものでしょうか。

私が考えたのが前回・前々回分の枠の内側に
それぞれ右斜線・左斜線の模様のようなものを描写し
重なっている部分は交差して表示するようにすれば
判別できるのではないかと思ったのですが、
どう実装すれば良いかが思いつきません

拙い質問ではありますが、諸兄の知恵を拝借できればと思います
以上、宜しくお願いします。
70デフォルトの名無しさん:2007/03/13(火) 13:14:15
線の太さを奥程太くして、後から描画するほど細くするとか
座標が重なっていたら別の色で表示するとか
71デフォルトの名無しさん:2007/03/14(水) 00:07:37
アプリケーションの起動時にテキストファイルを読み込んで
その内容をTButtonやTMemoに反映するには、どうすればいいですか?

内容をすべて読み込むまでは自力でできました。
そこからオブジェクトに反映するには、どうすればいいのやら・・・
未定義うんぬん出てきてよくわからない。
implementで定義するのでしょうか?
72デフォルトの名無しさん:2007/03/14(水) 00:29:14
TMemo.Lines.LoadFromFile で読み込み。
TButton.Caption に代入。
73デフォルトの名無しさん:2007/03/14(水) 10:20:53
言い方が悪かったかな・・・
起動時に以下のTextloadを実行させてるんですけど
ここからButton1(TButton)やMemo1(Tmemo)に
値を渡す方法がわかりません。
ボタンとかは押さずに(何もアクションなしに)値を反映させたいんです。

implementation
var
Text: String;

procedure Textload;
var
FileName,s: String;
LoadLine: TStringlist;
ltf: TextFile;
begin
FileName := 'text1.txt';
AssignFile( ltf, FileName );
Reset( ltf );
while not Eof( ltf ) do
begin
Readln( ltf, LoadLine );
Text := Text + LoadLine + #13#10;
end;
CloseFile( ltf );
end;

end;
74デフォルトの名無しさん:2007/03/14(水) 10:29:59
それは関数で、メソッドじゃないから
フォームをダブルクリックして そこに
Memo1.Lines.Text:=Text;
と書けばいいと思うよ
75デフォルトの名無しさん:2007/03/14(水) 10:31:50
アプリケーションの起動時にならFormCreateに処理を書き込んじゃえばいいんじゃない
Memoに追加したいならMemo1.Lines.Add(文字列)
ボタンに表示したいならButton1.Caption:=文字列
とか
76デフォルトの名無しさん:2007/03/14(水) 10:41:47
というか

procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Lines.LoadFromFile('text1.txt');
  Button1.Caption:='文字列';
end;

でいいような気もするが
77デフォルトの名無しさん:2007/03/14(水) 10:50:38
FormCreateがメンバに含まれていない、
Memo1Button1が未定義と出ます。

超初心者なものでスミマセン。
78デフォルトの名無しさん:2007/03/14(水) 10:52:32
だから、フォームの何もない所をダブルクリックしてみてよ
79デフォルトの名無しさん:2007/03/14(水) 10:55:14
できました。ありがとうございます。
80デフォルトの名無しさん:2007/03/14(水) 10:56:56
フォームにFormCreateが定義されてないんじゃない?
>>78のいう通りフォームの何もない所をダブルクリックしてFormCreateを作りな
8169:2007/03/14(水) 12:36:14
>>70
レスいただいていたのに、返事が遅れてしまい申し訳ないです。
線の太さを変えたり色を変えたりすることは検討してみたのですが
モノクロで出力(ペーパーアウト)したときに、判別出来なくなってしまうので
できれば他の方法を検討してみたいと思います。ありがとうございました。
82デフォルトの名無しさん:2007/03/14(水) 12:39:29
モノクロプリンタに出力する場合は
一番下を 特太黒で描画
2番目を 太い白で曲線描画 少しだけ細くした黒で描画

と白と黒で太さを換えるか、少しだけズラして重ね描画すれば それらしくなるよ
83デフォルトの名無しさん:2007/03/14(水) 12:53:58
あと、元々の質問通りに答えると
輪郭データをarray of TPoint で作って
それを Polygon で描画
その時のBrushのStyleで模様を付ける

サンプルコード
Canvas .Brush.Color:=clBlack;
Canvas.Brush.Style:=bsBDiagonal ;
Canvas.Pen.Width:=6;
Canvas.Pen.Color:=clBlack;
Canvas.Polygon([Point(10,10),Point(50,150),Point(10,100)]);

Canvas.Brush.Style:=bsFDiagonal ;
Canvas.Pen.Color:=clWhite;
Canvas.Pen.Width:=4;
Canvas.Polygon([Point(10,10),Point(150,150),Point(10,150)]);
Canvas.Pen.Width:=2;
Canvas.Pen.Color:=clBlack;
Canvas.Polygon([Point(10,10),Point(150,150),Point(10,150)]);
84ななしへたぐらま ◆XcB18Bks.Y :2007/03/14(水) 13:50:56
今更Vista対策という恥ずかしい次第なのですが

CD-ROM版ソフトの自動起動メニューからインストーラーを実行するというソフトがあります.
Vistaだと実行ファイルに対する警告ダイアログが自動起動メニューのウィンドウの背後に出てきてしまいます.
これを回避するうまい方法はないものでしょうか.

やはり子プロセスを呼び出したら自分は隠れてしまうのが一番でしょうか.
85ななしへたぐらま ◆XcB18Bks.Y :2007/03/14(水) 17:56:00
>>84
素直に隠れて待機にしました.これで困る理由もないみたいですので.
86デフォルトの名無しさん:2007/03/14(水) 19:14:34
IEコンポのブラウザ画面から画像をD&DでTTreeViewに受け入れたいのだけれど、どうすればいいでしょうか。

画像をツリーにD&Dして保存させるプログラムを書いている途中です。
87デフォルトの名無しさん:2007/03/14(水) 19:29:41
OLEDragDropで健作
88デフォルトの名無しさん:2007/03/14(水) 20:46:47
前スレ >>955
DirectXなら、海外に新しいヘッダーがあるぞ。

Delphi resources
http://www.clootie.ru/delphi/index.html
89デフォルトの名無しさん:2007/03/14(水) 20:49:06
ちょっと聞きたいのですが、
record型で、クラスメソッドを定義したいのですが、どうしたらいいでしょうか?
Delphi 2006です。

static 使うのか?と思ったのですが、駄目な感じでした。

外部に関数を出すしかないですかね・・・
90デフォルトの名無しさん:2007/03/14(水) 20:54:29
あ、class メソッドに、後ろにstaticつけたらコンパイル 通りました。
おさわがせしますた。
91デフォルトの名無しさん:2007/03/14(水) 22:25:18
exeのアイコンが書き換えられない。
92デフォルトの名無しさん:2007/03/14(水) 22:28:50
うまくいった。
sまn
93デフォルトの名無しさん:2007/03/14(水) 22:37:16
ホンダ超身軽wwwwwwwwwwwwwwww
94デフォルトの名無しさん:2007/03/14(水) 22:38:10
>>93
誤爆
95デフォルトの名無しさん:2007/03/14(水) 22:39:26
インストールキーが取得できないんだけど、なにこれ
96デフォルトの名無しさん:2007/03/14(水) 23:24:02
レコード型でデフォルトの初期値を設定することはできるのでしょうか?
例えば、
TMyPoint = record
 X, Y :integer;
end;
で、それぞれ初期値を-1にするようにしたいのです
97デフォルトの名無しさん:2007/03/14(水) 23:45:33
コンストラクタ
98デフォルトの名無しさん:2007/03/15(木) 00:56:50
「型」に初期値を設定しようというのがおかしい気がする。
初期値はコードや宣言で設定するものだ。
99デフォルトの名無しさん:2007/03/15(木) 00:58:59
コンストラクタ
100デフォルトの名無しさん:2007/03/15(木) 01:22:54
TEditorで、指定の行番号にキャレットを移動させるにはどうすれば
良いでしょうか?

なお、こちら(ttp://www2.biglobe.ne.jp/~sakai/gensfaq2.htm#a012)に
Memoコンポーネントでのやり方が書いてありましたが、このままでは駄目でした。

Editor1.SelStart := SendMessage(Editor1.Handle,EM_LineIndex,intresult,0);

intresultは移動させたい行の番号が入っています。
わかる方お願いします。
101デフォルトの名無しさん:2007/03/15(木) 01:25:39
TEditor は Windows の標準コンポーネントじゃないから作者に訊くしか
ないんじゃないかな
102100:2007/03/15(木) 01:28:47
>>101
ありがとう。でも有名なので知ってる方いると思いまして・・・
もうちょっと探してみます。
103デフォルトの名無しさん:2007/03/15(木) 20:44:05
Cでいう
"これは\"あれ\"です"
みたいな書き方はDelphiでどう書くのでしょうか
''内に'を含む書き方です
104デフォルトの名無しさん:2007/03/15(木) 21:24:35
>>103
質問とは違うのかもしれんが…

ShowMessage('hoge"hoge"hoge')

DelphiはStringを「’」〜「’」で表わし
その中で文字列として’を表示したければ「”」を使う
105100:2007/03/15(木) 23:11:06
やっぱり分かりません・・
単に
Editor1.SelStart := intresult;
とすると指定の列にキャレットが移動しました・・・
Editor1.Row := intresult;
としてもキャレットが動いてくれませんし・・・
誰かおながいします
106デフォルトの名無しさん:2007/03/15(木) 23:16:12
107デフォルトの名無しさん:2007/03/15(木) 23:28:42
>>100
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
NewString:string;
begin
with Editor1 do
begin

if not InputQuery('指定行へ移動','数値で',NewString) then exit;
Row:=StrToIntDef(NewString,1)-1;
end;
end;
108デフォルトの名無しさん:2007/03/15(木) 23:32:18
109デフォルトの名無しさん:2007/03/15(木) 23:34:03
>>107
100 だが、Row:= でキャレットは移動した。
TEditor にフォーカスが無くてそう見えないだけでは……なさそうだな?
110デフォルトの名無しさん:2007/03/15(木) 23:34:35
↑107 だが、
111デフォルトの名無しさん:2007/03/15(木) 23:37:39
>>96
できないので、

・constで定義して代入する

const DefaultMyPoint: TMyPoint = (X: -1; Y: -1);

var p: TMyPoint;
begin
 p := DefaultMyPoint;
 :

・TMyPointに初期化メソッドを定義して、呼び出す
TMyPoint = record
 X, Y: Integer;
 procedure Initialize;
end;

procedure TMyPoint.Initialize;
begin
 X := -1;
 Y := -1;
end;

var p: TMyPoint;
begin
 p.Initialize;
 :

112100=105:2007/03/15(木) 23:50:50
>>106,>>107,>>109
ありがとうございます

>>109
フォーカス当たってないだけでした・・・

Editor1.Row := intresult;
Editor1.TopRow :=intresult;

でそれっぽい感じになりました。
ありがとうございました。
11396:2007/03/16(金) 00:56:05
>>98
いわれてみるとそうですね

ただ、クラスだとコンストラクターで初期値を設定できるので、
レコードでも同様にできそうな気がしてしまったもので…

>>111
一回ごとにそれぞれ代入するのが面倒だったので、
どちらかの方法を試してみます


ありがとうございました
11496:2007/03/16(金) 01:29:04
>>111
追記:
後者の方法は
endが必要なところにprocedureがあるというエラーがでました
115デフォルトの名無しさん:2007/03/16(金) 03:58:51
>>114
Delphi2005辺りからの機能なので、バージョンによってはできない。
どうしてもメソッドでやりたければ、recordをobjectにする。
116デフォルトの名無しさん:2007/03/16(金) 11:07:42
i : string;
N: Dword;

begin
ReadProcessMemory(hProc,Ptr($004B9DB58),@i,2,N);
button2.Caption:=i;
end;

として文字列を読み込めないのです。
どうしたらよかですか
117116:2007/03/16(金) 11:22:38
ちなみにそのメモリーにあるのはSJISコードです
118デフォルトの名無しさん:2007/03/16(金) 11:28:05
まずはStringではなく、0で始まるchar型配列を使ったらどうですかね?

Stringでなければならない理由があるの?そうなら少しString型のデータ構造を理解した方がよい。
119デフォルトの名無しさん:2007/03/16(金) 14:20:19
3万超えてる…

ゴメン、食うもんだけは。
ヤセの大食いって言われる。
120デフォルトの名無しさん:2007/03/16(金) 14:34:50
iを文字列に使うのは止めた方がいい

var s:string ;として

setlength(s,2); //文字列に2バイト分メモリを確保して( s:='xx';でもいいよ)
N :=0 ;//次のAPIがエラーでも0になるように
ReadProcessMemory(hProc,Ptr($004B9DB58),PChar(s),2,N);
121デフォルトの名無しさん:2007/03/16(金) 16:39:59
一般的に、慣例に従ってワーク変数に i や s を使うことが多いけど、
個人的に、そういうのは使わない方がいいと思う。
別の人がソースみて修正とか置換する時に大変なことになるから。

面倒でも
intLoop とか
strWork とか
プリフィックス+用途 で命名するクセを付けた方がいいと思う。
122デフォルトの名無しさん:2007/03/16(金) 16:53:14
短いスコープ(10行程度、長くても1画面)なら i, s でいいと思うけどな。
だから今回のようなケースなら俺は i, s を支持。
123デフォルトの名無しさん:2007/03/16(金) 17:59:15
Fortran/C/pascalでは
ループ変数は i,j,k をまず使うのが一般的なので
ループ変数には i,j,kを使いましょう
また個数を表現する変数にはM,Nを使いましょう

外に見えない、作業的に使うような短命な 変数に 1英字を使うのは悪い事ではありません。
そうする事で、それほど重要でなく短命である事を表現出来るからです。

124デフォルトの名無しさん:2007/03/16(金) 18:07:54
テスト用のコード書いてて、変数にうっかりa,b,c,d,eとか使っちゃって
エラーを出した漏れがきますたよ(´・ω・`)
125デフォルトの名無しさん:2007/03/16(金) 18:16:46
Q 3重以上のループでは 変数名はどうしたらいいですか?
A 3重以上のループにならないようにしましょう

Q コーデング規則で短い変数名は使ってはいけないと書いてあるのですが?
A あなたが指定された規則に従って下さい。

Q 短命な変数かどうかの目安は?
A もっとも内側の関数のローカル変数は短命です。
  でもあなたが1関数を1画面からはみだすくらい長く書く習慣を持っているならその限りではありません
126デフォルトの名無しさん:2007/03/16(金) 19:15:11
iとかs使ってたのは
昔の処理系では変数の文字数が長い=処理が重い
という時期があっただけ

これがいまでも習慣化してる

今は処理速度的にはそれほど気にする必要はないので
後でメンテするときのことも考えてなんのループかわかるような変数名にした方がbetter
特にループ内で配列のデータを変化させる場合などは
hoge[i]とかってすると他人が読む時にわかりにくい場合もある

何が言いたいかというと
ぶっちゃけどっちでも良い
あなたの環境で推奨されてる方法に従うのが吉
127デフォルトの名無しさん:2007/03/16(金) 20:00:08
リストボックスについて質問があります。
リストボックスの要素を選択したとき、その要素(表示名)に
関連付けられた要素のID(string型)を取得したいと思って
います。
どんな方法がいいのでしょうか?
128デフォルトの名無しさん:2007/03/16(金) 20:18:05
>>127
自分は いっとき、実行時型情報を使って 列挙型を定義して
列挙型のpulishedプロパティを定義(そうすれば実行時型情報が登録されるから)
で、例えばMenuに追加するなら
procedure SetMenuEnumPropInit(TypeInfo: PTypeInfo;MenuItem:TMenuItem;Click:TNotifyEvent;ordNo:Cardinal);
var i:integer;
var T: PTypeData;
var s:string;
var nw:TMenuItem;
begin
T := GetTypeData(GetTypeData(TypeInfo)^.BaseType^);
for i:=T^.MinValue to T^.MaxValue do
begin
s:= GetEnumName(TypeInfo , i);
if i>=MenuItem.Count then begin
nw:=TMenuItem.Create(MenuItem);
MenuItem.Add(nw);
end else nw:=MenuItem.Items[i];
nw.Caption := s ;
nw.Visible := True;
nw.RadioItem:= True;
nw.OnClick := Click;
nw.Tag:=i;
nw.Checked:= ordNo=i;
end;
end;
みたいな手続き作って、コレでやってた。
129デフォルトの名無しさん:2007/03/16(金) 20:21:42
リストボックスとかなら TStrings型だから汎用的に
procedure GetEnumNameList(TypeInfo: PTypeInfo;str:TStrings);
var i:integer;
var T: PTypeData;
var s:string;
begin
T := GetTypeData(GetTypeData(TypeInfo)^.BaseType^);
for i:=T^.MinValue to T^.MaxValue do
begin
s:= GetEnumName(TypeInfo , i);
if s<>'' then str.Add(s) else break;
end;
end;
とやって、逆は文字列から GetEnumValue を使えばいい
THoge(GetEnumValue( TypeInfo(THoge) ,text))

なお、uses TypInfo;が必要
130デフォルトの名無しさん:2007/03/16(金) 20:27:04
インストールキーのメールが来ないのだけど、なんででしょうか? 今は発行停止中?
マルチカラムコンボボックス使え
132デフォルトの名無しさん:2007/03/16(金) 20:37:12
>>130
今日 [email protected] にインストール番号をくれってメール送ったら、
昼飯食いに行ってるあいだ(2時間ぐらい)に返信が来たよ。
133デフォルトの名無しさん:2007/03/16(金) 20:48:46
d メールしてみる
134デフォルトの名無しさん:2007/03/16(金) 20:56:55
Delphi 6/Personal
Turbo Delphi/Explorer

今からいじるならどっちがおすすめ?
135デフォルトの名無しさん:2007/03/16(金) 21:27:56
undeliverable to [email protected]とかなって送信されない・・・
136デフォルトの名無しさん:2007/03/16(金) 21:32:13
>>135
何でか知らないけど、Beckyで送信しようとしたらダメで、
Thunderbirdだったら問題なく送れたよ。
137デフォルトの名無しさん:2007/03/17(土) 00:53:28
postmesseageでマウスクリックを送信するのに
postMessage(TargetWnd,BM_CLICK,WM_LBUTTONDOWN ,0);
だとダメでしょうか?
第二引数がちがうようなきがします。
138デフォルトの名無しさん:2007/03/17(土) 01:17:59
for-in-do って、C#由来ですか?
139デフォルトの名無しさん:2007/03/17(土) 04:12:19
>>137
それメチャクチャ。
140デフォルトの名無しさん:2007/03/17(土) 04:18:50
Set8087CW(0x133f);がどう使うのか知りたいですかね?
141デフォルトの名無しさん:2007/03/17(土) 04:23:14
は?
142デフォルトの名無しさん:2007/03/17(土) 04:59:11
早く教えなさいったら。
143デフォルトの名無しさん:2007/03/17(土) 08:26:25
>>139
すみません、引数を見つけることが出来ず、CのページのでできるのかなとかんがえてできませんですたTT
144デフォルトの名無しさん:2007/03/17(土) 08:40:10
BM_CLICKはコモンコントロールのボタンを外から押す時に使う。
1回送れば後はやってくれる
postMessage(TargetWnd,BM_CLICK,0 ,0);
とwParam lParam は0にする

WM_LBUTTONDOWN はWM_LBUTTONUP とセットにしないといけないし
マウスの座標も用意してやらないといけない
また2番目の引数に書かないといけない


145デフォルトの名無しさん:2007/03/17(土) 08:52:44
helpより
>OpenGL を使って 3D グラフィックスを描画するときは,すべての浮動小数点例外を無効にすることをお勧めします。
>これを行うには,メインフォームの OnCreate イベントで Set8087CW(0x133f) を呼び出してから OpenGL 関数を呼び出します。
146デフォルトの名無しさん:2007/03/17(土) 09:26:23
>>144
さんくすできたああ
こういうのってどうやって調べてるんですか??
147デフォルトの名無しさん:2007/03/17(土) 15:01:39
Delphi6に最初から入っているOpenGLを使いたいのですが
解説してるサイトはないでしょうか?
148デフォルトの名無しさん:2007/03/17(土) 15:30:06
>>147
「OpenGL Delphi」でググるといくらでも出てくるんだけど
149デフォルトの名無しさん:2007/03/17(土) 15:36:14
SHGetStockIconInfo
http://www.usefullcode.net/2006/12/windows_vista_5.html

Delphi での書き方を教えて
150デフォルトの名無しさん:2007/03/17(土) 16:03:14
vista持ってないのでサンプルコード出せないけど一般的に、
まず関数ポインタ型を定義

HRESULT SHGetStockIconInfo( SHSTOCKICONID siid, UINT uFlags, SHSTOCKICONINFO *psii );
だから、
type TSHGetStockIconInfoProc = function (siid :TSHSTOCKICONID siid; uFlags:DWORD; var psii:TSHSTOCKICONINFO );


で、TSHSTOCKICONID とTSHSTOCKICONINFO をその前に定義しないといけない
type TSHSTOCKICONID=integer; でもとりあえずいいと思う

構造体の方は
typedef struct {
DWORD cbSize;
HICON hIcon;
int iSysImageIndex;
int iIcon;
WCHAR szPath[MAX_PATH];
} SHSTOCKICONINFO;

type TSHSTOCKICONINFO=packed record
cbSize:DWORD ;
hIcon:THandle;
iSysImageIndex:Integer;
iIcon:Integer;
szPath:array [0..MAX_PATH-1]: WideChar;
end;

みたいな感じ
151デフォルトの名無しさん:2007/03/17(土) 16:08:28
×szPath:array [0..MAX_PATH-1]: WideChar;
szPath:array [0..MAX_PATH-1] of WideChar;  ね

で、後はそのコード通り、
hDLL := LoadLibrary( 'shell32.dll'); して
var SHGetStockIconInfo:TSHGetStockIconInfoProc;
SHGetStockIconInfo:=TSHGetStockIconInfoProc(GetProcAddress(hDLL,'SHGetStockIconInfo') );
と関数ポインタに割り当ててやれば

SHGetStockIconInfoが使える筈
152デフォルトの名無しさん:2007/03/17(土) 16:11:34
ありがとう
やってみまする
153デフォルトの名無しさん:2007/03/17(土) 16:22:57
>>148
gamdev.orgぐらいしか出てこないけど……
154デフォルトの名無しさん:2007/03/17(土) 16:58:26
いつもお世話になっています。
コマンドプロンプトで、↓のプログラムを実行したいです。

Command = 'COMMAND.COM /c perl C:\hogehoge C:\index.html';

C:\hogehogeはperlのプログラムがおいてある場所です。
C:\index.htmlはファイルのパスです。

上記のように、ファイルのパスにスペースがない場合はうまくいくのですが、

Command = 'COMMAND.COM /c perl C:\hogehoge C:\Documents and Settings\hoge\デスクトップ\index.html';

のようにスペースがあるファイルを指定するとエラーで落ちてしまいます。
どうすればいいでしょうか。

また、ファイルパスを変数にしたい場合はどうすればいいでしょうか。
おねがいします。
155デフォルトの名無しさん:2007/03/17(土) 17:25:02
こうかな?
'COMMAND.COM /c perl "C:\hogehoge C:\Documents and Settings\hoge\デスクトップ\index.html"'

質問2は、どういうふうなコード書いてるのかその手前5〜10行くらいをコピペしてみて
156デフォルトの名無しさん:2007/03/17(土) 17:32:21
WinExec を使ってるかどうか知らんが、PChar でキャストするということか。
var
FilePath:string;
const
BaseCommand='COMMAND.COM /c perl C:\hogehoge '
begin
if not InputQuery('Input','FilePath',FilePath) then exit;
WinExec(PChar(BaseCommand+FilePath),CmdShow);
end;
157デフォルトの名無しさん:2007/03/17(土) 18:46:06
相対URLを絶対URLに変換したいんですが、ググっても「JAVA」とか「正規表現」「.NET」
ばかりでDelphiのサンプルがありません。
正規表現とかは頭が沸騰しそうで、出来ればゴリゴリと書いたものが知りたいんですが。
158154:2007/03/17(土) 19:11:23
>>155,>>156
ありがとう。

>>155
単純に
Command = 'COMMAND.COM /c perl C:\hogehoge "C:\Documents and Settings\hoge\デスクトップ\index.html"';
で出来ました(汗)

コードは長いので分割して投下します。

>>156
WinExecなのか良く分かりません・・・
159154:2007/03/17(土) 19:12:09
その1

procedure check(Command, Dest: String);
var
SI :TStartupInfo;
PI :TProcessInformation;
begin
FillChar(SI,SizeOf(SI),0);
SI.cb := SizeOf(SI);
SI.dwFlags:= STARTF_USESHOWWINDOW; // DOS プロンプトが表示
SI.wShowWindow := SW_HIDE; // されるのを抑止する
If Not CreateProcess(nil,
PChar(Format('%s > %s',[Command,Dest])),
nil,nil,False, 0, nil, nil, SI, PI) Then
Raise Exception.Create('Error!');
While WaitForSingleObject(PI.hProcess, 0) = WAIT_TIMEOUT Do
Application.ProcessMessages; // プロセス終了まで待機する
CloseHandle(PI.hProcess);
end;
160154:2007/03/17(土) 19:14:17
その2

procedure TForm1.ToolButton12Click(Sender: TObject);
const
Command = 'COMMAND.COM /c perl C:\hogehoge "C:\Documents and Settings\hoge\デスクトップ\index.html"'; // 実行するDOSプログラム
var
TempFileBuff: array[0..MAX_PATH] of Char;
TempFileString: String;
begin
GetTempFileName('.','tmp',0,TempFileBuff); // テンポラリファイル
TempFileString := String(TempFileBuff); // の作成
try
check(Command,TempFileString); // 実行
finally
DeleteFile(TempFileString); // テンポラリファイル削除
end;
end;
161154:2007/03/17(土) 19:16:09
以上です。
よく分からず使っていますが・・・
おねがいします。
162デフォルトの名無しさん:2007/03/17(土) 20:19:07
procedure TForm1.ToolButton12Click(Sender: TObject);
//プログラム部分を「実行ファイル名」+「半角スペース」に削る
const
Command = 'COMMAND.COM /c perl C:\hogehoge '; // 実行するDOSプログラム
var
TempFileBuff: array[0..MAX_PATH] of Char;
TempFileString: String;
FilePath:string;
begin
//ファイルパス部分を入力
if not InputQuery('Input','FilePath',FilePath) then exit;
//とにかくダブルクォートで挟んでしまう
if FilePath[1]<>'"' then FilePath:='"'+FilePath;
if LastDelimiter('"',FilePath)<>Length(FilePath) then
FilePath:=FilePath+'"';

GetTempFileName('.','tmp',0,TempFileBuff); // テンポラリファイル

くコ:彡同じ
163154:2007/03/17(土) 20:39:29
>>162
おおお〜。できました。ありがとう。
それはそうと、InputQueryというのを今知りました。
便利ですね。
ありがとうございました。
164デフォルトの名無しさん:2007/03/17(土) 20:42:51
InputQuery はこんなテストには簡便でよく使うが、
この場合は普通オープンファイルダイアログを使う
TPageControlでタブを右クリックしてポップアップメニューを出したいのですが
右クリックをどうやって拾うのかよくわかりません。誰か教えて下さい。
166デフォルトの名無しさん:2007/03/18(日) 11:00:18
難しいことはとりあえず考えなくて良い。
PageControlとPopupメニューを用意、
PageControlのPopupMenuプロパティに先ほどのメニューを割り当てればOK
167165:2007/03/18(日) 11:23:52
>>166
ありがとうございます。
今やってみたら、タブシート上で右クリックしてもポップアップメニューが出てしまったのですが、これはこういう物なんでしょうか?
私は、タブのいわゆる耳(ページを切り替える際にクリックする場所)を右クリックした時に出るイメージだったのですが。
168デフォルトの名無しさん:2007/03/18(日) 11:58:30
キー取れない。
メール英語で送ってみたが
うろ覚えの英語で通じるだろうか
169デフォルトの名無しさん:2007/03/18(日) 12:20:07
製品版買えよ。
もうこのスレ金払ってないユーザーは質問禁止な。
170デフォルトの名無しさん:2007/03/18(日) 12:34:26
こういうのは完全にNGだね。
171デフォルトの名無しさん:2007/03/18(日) 12:59:24
delphi6に金払うのかよ
172デフォルトの名無しさん:2007/03/18(日) 14:05:51
>>168
どのメールアドレスに送った?
英語って[email protected]じゃだめなの?
173デフォルトの名無しさん:2007/03/18(日) 14:41:42
あんまりにもキー取れないって質問おおいよね。
本当に始めるなら買ったほうがいいよ。
174デフォルトの名無しさん:2007/03/18(日) 14:42:27
delphi6なんてまだ売ってるの?
175デフォルトの名無しさん:2007/03/18(日) 14:46:14
>あんまりにもキー取れないって質問おおいよね。

某のユーザ対応の良さがしのばれるよね。
176デフォルトの名無しさん:2007/03/18(日) 14:48:38
しっかしdelの仕事へったな。
おまえらは何作ってんだ?
177デフォルトの名無しさん:2007/03/18(日) 14:51:07
電卓とストップウォッチだよな、当然。
178デフォルトの名無しさん:2007/03/18(日) 14:53:16
フリー版のキー取れないから、金出して買えって、変だよなー、押し売りのセリフみたい
179デフォルトの名無しさん:2007/03/18(日) 14:55:06
気軽に買える金額じゃないしな
180デフォルトの名無しさん:2007/03/18(日) 15:02:49
>>176
Oracle(1000クライアント程度)クライアントの顧客、売上管理システムとデータウェアハウスの仕組み、
リアルタイム(とは言えない)株価チャート、社内電子承認システムのワークフローのパッケージなど。
181デフォルトの名無しさん:2007/03/18(日) 15:04:19
もっとでかいのはないの?
>>180
そのへんのこなれたもんは一人でくんでるよね?
チームならもっと効率いいのあるわけだし。
182デフォルトの名無しさん:2007/03/18(日) 15:07:43
>>181
一人で組めるからdelphiなのさ。
単価も半年で1000万〜とかだしね。
チームでなんてやってられんよ。
183デフォルトの名無しさん:2007/03/18(日) 15:08:08
一つで10億20億稼ぎたいならdelphiやめろ
184デフォルトの名無しさん:2007/03/18(日) 15:12:38
>>182
販売やら給与やら株価やらは一人でも1ヶ月もかかんなくね?
UI変えて昔作った共通ライブラリ又はその客専用のライブラリを呼び出して終わりかと。
185デフォルトの名無しさん:2007/03/18(日) 15:16:58
1ヶ月かからない仕事を1ヶ月かけることに意味があるんだよ。
186デフォルトの名無しさん:2007/03/18(日) 15:17:11
くだスレらしい書き込みだなwww
187デフォルトの名無しさん:2007/03/18(日) 15:17:15
>165
じゃあこの方法で。

procedure TForm1.PageControl1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
   I:Integer;
   iInTab:Integer;
   Pt:TPoint;
begin
   iInTab := -1;
   Pt := Point(X,Y);

   with (Sender as TPageControl) do
   begin
      for I:=0 to PageCount-1 do
      begin
         if PtInRect(TabRect(I),Pt)then
         begin
            iInTab := I;
            break;
         end;
      end;

      if iInTab>-1 then
      begin
         Pt := ClientToScreen(Pt);
         PopupMenu1.Popup(Pt.X,Pt.Y);
      end;
   end;

end;
188デフォルトの名無しさん:2007/03/18(日) 15:30:38
右クリックはどこで判断?
189デフォルトの名無しさん:2007/03/18(日) 15:36:50
if Button = mbRight then
190165:2007/03/18(日) 16:25:01
>>187,189
できました。
勉強になりました。ありがとうございました。
191デフォルトの名無しさん:2007/03/18(日) 20:12:36
functionで戻り値を二つ指定したい場合どうしたらいい??
192デフォルトの名無しさん:2007/03/18(日) 20:21:46
>>191
戻り値にrecord型を使う
引数にvarを指定する

もっとスマートな方法がありそうな気がする
193デフォルトの名無しさん:2007/03/18(日) 20:32:49
>>192
おーありがとう〜
レコード型というのもありますね〜
varを指定するというのはグローバル変数にして外からも使えるようにする、と言うことですか??
194デフォルトの名無しさん:2007/03/18(日) 21:21:00
>193
何も付けない場合は値がコピーされて渡される。関数内部で変更できるけど呼び出し元に影響なし。
constを付けた場合は定数渡し。関数内部で変更しようとするとコンパイルエラーになる。
varを付けた場合は参照渡し。関数内部で変更すると呼び出し元に影響。
レコード型をやりとりするならvar渡しが一番スマート。Cのようにポインタを渡しても同じですが。
オブジェクト型はそれ自体がポインタ型の一種なので注意。
195デフォルトの名無しさん:2007/03/18(日) 21:22:06
関数を
function testSQR(var ret:Integer;x:integer):boolean;
begin
result:=x<=46340; //sqr(2^31-1) 以上だと平方すると桁溢れする
ret:=x*x;//平方をret 変数で返す
end;

として 呼び出す方は
var sqr:integer;

testSQR(sqr, 100); のように呼び出す
196デフォルトの名無しさん:2007/03/19(月) 00:46:43
>>195の関数がなぜ戻り値にBoolean型を指定してるのかわからない…
そしてresultに渡されてるのは…

まあ良いや
次いってみよう
197デフォルトの名無しさん:2007/03/19(月) 00:52:44
>>196
戻り値は桁あふれしたかどうか。
resultに渡されているのは論理値(Boolean)だが?
198デフォルトの名無しさん:2007/03/19(月) 01:08:43
>>196
これは恥ずかしいw
199デフォルトの名無しさん:2007/03/19(月) 01:17:58
うーむ、なんと言うか・・・レベル低下もここまで来たか・・・
200デフォルトの名無しさん:2007/03/19(月) 01:20:53
参照パラメータとか値パラメータとか、普通の言語なら常識だよな
なんでヘルプ読まんかな・・・
201デフォルトの名無しさん:2007/03/19(月) 01:41:56
>>197-200
くだスレで何を(ry
202デフォルトの名無しさん:2007/03/19(月) 04:21:09
>>196 くだスレでもひどすぎる
203デフォルトの名無しさん:2007/03/19(月) 04:22:14
クラスの質問なんですが、
どうしてprivateにある変数をpublicに置いて直接取得変更しないで
わざわざpublicにpropertyというのを用意してその値を取得したりするんですか?
204デフォルトの名無しさん:2007/03/19(月) 08:10:41
turbo delphiから使いはじめ、バージョンアップは初めての体験になるのですが
各種設定を簡単に引き継げますか?
できるならやり方をお教えくださいませ。
by 22才 ♀ 保育士
205デフォルトの名無しさん:2007/03/19(月) 08:14:06
何の設定?
206デフォルトの名無しさん:2007/03/19(月) 08:30:05
>>203
1、後でインターフェースを変更しても良いようにする為
  たとえば propertyだと var 引数に渡せませんから

2、そのクラスを継承してそのプロパティを publishedにすればRTTIを使って
実行中に型情報にアクセス出来るメリットが生まれます。
207デフォルトの名無しさん:2007/03/19(月) 08:51:42
>>204
どうか、
顔が誰に似ているか
体格の特徴
できれば、スリーさいずをお願いいたします。
208デフォルトの名無しさん:2007/03/19(月) 08:53:07
Form1.Left := 100;
とかやると座標を代入するだけじゃなくその後の描画までやってくれるだろ。
そういう副作用を設定できる。
209デフォルトの名無しさん:2007/03/19(月) 09:41:47
ありがとうございます。
>>206 なんか知らない単語が出てきて難しいですが、
拡張されることを考えるんだったら、そうしとけってことなんですね。
>>208 Form1が裏でやってた訳ですか〜。
目からうろこです。

今回は本当にありがとうございました。
210デフォルトの名無しさん:2007/03/19(月) 11:13:21
>>204
このネカマめ!!
俺はこういうのを見分ける嗅覚がすごいんだぜ。
211デフォルトの名無しさん:2007/03/19(月) 11:18:42
>>209

207もおねがい!
212デフォルトの名無しさん:2007/03/19(月) 12:21:48
TQueryでキャッシュアップデートを使用してDBGridで入力して更新する処理を書いています。
連続して入力中にプライマリーキーが同じ場合に入力できないようにしたいのですが、どうしたらいいでしょうか。
213デフォルトの名無しさん:2007/03/19(月) 18:44:10
もしかしたらおかしいのかもしれませんが、
ボタンを押したらループで100回くらい回すのをしてるんですが、その時にリストボックスにADDしてるんですが
ループ中はフリーズのようになって100回終わったときに一気に描写されます。
これはこういう物なのでしょうか?
214デフォルトの名無しさん:2007/03/19(月) 19:02:39
>>212
カラム移動のイベントで一度ポストすりゃいいじゃん。
あとはプライマリつーことで同値は入力不可。
215デフォルトの名無しさん:2007/03/19(月) 19:05:24
>>213
Repaint すれば
216デフォルトの名無しさん:2007/03/19(月) 19:07:44
>>212 やった事はないのだけど、DataSource.OnUpdateDataで対処出来ない?

>>213そういうものです。
 描画メッセージが発行されて、そのイベントが終わってから実行されますから、

途中描画させたいなら、
1、リストボックス.Updateとかで【さっさと描画しろ】と催促する
2、Application.ProcessMessages をループ中で呼び出して、溜まってるメッセージを処理させる
  (ただしボタン操作なんかも受け付けるんで、再帰的に処理される事に耐えられるコードが要求される)
のどっちか
217デフォルトの名無しさん:2007/03/19(月) 21:10:37
>>215
>>216
ありがとうございます。
listbox1.Updateで出来ました〜。
このループに色々な判定を入れて、ずっと回そうと思うのですが、メイン関数からの場合もこうやるのですか?
218ななしへたぐらま ◆XcB18Bks.Y :2007/03/19(月) 21:34:48
>>200
Delphi における
参照パラメータと値パラメータは実際には値渡しだったり参照渡しだったりするので
必ずヘルプに目を通す必要がありますね.

>>203
・不用意に値を参照されたり書き換えられないようにするため

というのもあります.

たとえば時間のかかる計算処理をしていて結果を変数に書き込むとします.

これがただの変数だといつでも読み出せるので
計算前や計算途中に変数が変な値になっていても読み出せてしまうのです.
読み出す側はそれが正しい値なのかどうかはわかないのでそれが正しい値だと思いこんで処理をしてしまうかもしれません.
(処理中は読み出してはいけないという仕様を仕様書としてちゃんと用意すれば良いのですがそれでも使う側はかなり面倒です)

また自由に書き込めるということは計算中の値や計算結果を外部からいくらでも書き換えできてしまうのです.

このように公開された(だれでも読み書きできる)変数を用意するのはバグの元なので基本的にはやってはいけません.

219デフォルトの名無しさん:2007/03/19(月) 22:40:15
>Delphi における
>参照パラメータと値パラメータは実際には値渡しだったり参照渡しだったりするので

????
220デフォルトの名無しさん:2007/03/20(火) 00:28:38
あるWebページのIWebBrowser2のポインタがわかっている状況でそのページのテキストの選択部分を取得したいのですがどうすればよいでしょうか。
221デフォルトの名無しさん:2007/03/20(火) 07:45:50
DBEditでinterbaseのDate型のフィールドの時刻をhh:mm形式で編集するのってどうすればいいんでしょう。
Displayformatにhh:mm Editmaskに!99:99;1を設定したのですが日付または時刻ではありません
というエラーになってしまいます。
環境はD3+interbase4.2です。
222デフォルトの名無しさん:2007/03/20(火) 07:53:25
>>217
無限ループで回すの?
それなら、タイマーコンポを貼り付けて、そのイベントで1件づつ処理するか
Application.OnIdleのイベントで1件づつ処理するか
223デフォルトの名無しさん:2007/03/20(火) 08:09:22
>>220
ActiveElement か、getSelectionかじゃないのかな
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.htmldocument_properties(VS.80).aspx
JavaScriptの解説が役立つと思うよ
http://www.tohoho-web.com/js/document.htm
224デフォルトの名無しさん:2007/03/20(火) 08:36:29
>>221
!99:99;1 の最後の1が何をしてるのか判らんから言うのだが
EditMaskを空白にして 同じかどうか試してみたら?
225デフォルトの名無しさん:2007/03/20(火) 13:06:56
受験勉強の間に何もかも忘れてしまった。
どっかいいサイトないか?
226ななしへたぐらま ◆XcB18Bks.Y :2007/03/20(火) 13:35:15
>>219
書き方が不正確でした,すいません.
ヘルプの『パラメータと受け渡し』の項より.

> 変数パラメータ(var)は常に参照渡しです。つまり,実際の格納位置をポイントする 32 ビットポインタによって渡されます。
> 値パラメータと定数パラメータ(const)は,そのパラメータの型とサイズに応じて値渡しまたは参照渡しになります。
227デフォルトの名無しさん:2007/03/20(火) 14:18:58
DBGridで特定の列を飛ばして移動するようにするにはどうしたらいいですか?
A   B  Cと列があってAを入力したら次はBはコードで変更して表示だけ行い
Cに移動するようにしたいです。
228デフォルトの名無しさん:2007/03/20(火) 15:11:25
DataSet のOnValidate イベントかな。
229デフォルトの名無しさん:2007/03/20(火) 21:47:23
>>226

const はともかく、値パラメータがサイズや型によってころころと参照渡しに
変わる場合ってどんな場合? そんないい加減なことでいいのか?
230デフォルトの名無しさん:2007/03/20(火) 21:59:16
いいんです。
231デフォルトの名無しさん:2007/03/20(火) 22:22:37
そういう設計なんだから問題ない。
232デフォルトの名無しさん:2007/03/20(火) 23:08:34
質問させてください。
Panel1の上に、Image1とImage2があるときに、
Image1とImage2が重なったときにはImage2が常に前面に
表示されるようにするにはどうすればいいんでしょうか?
ヘルプ眺め回したんですがどうしても分かりません…orz

どうか御教授おねがいします><
233デフォルトの名無しさん:2007/03/20(火) 23:30:02
前面に出すみたいなのなかったっけ?
動的に作った場合はBringToFrontだっけ?
234ななしへたぐらま ◆XcB18Bks.Y :2007/03/20(火) 23:41:11
>>229
データサイズの大きな値を渡すときはコピーを取ってそのアドレスを渡すのだと思います.
constで値渡しされる場合もコンパイラが関数内での値の変更を許さなければ問題ないのでしょう.

>>232
設計時ならImage2を右クリック→[前面に移動(F)]
実行時なら>>233の通り, Image2.BringToFront でいけると思います.
235232:2007/03/21(水) 00:00:30
>>233-234
出来ました!
どうもありがとうございました。
初歩的な質問ですみません。
236デフォルトの名無しさん:2007/03/21(水) 01:04:26
>>329
>データサイズの大きな値を渡すときはコピーを取ってそのアドレスを渡すのだと思います.

それでは、参照渡しであることをユーザは知る必要はないだろう。なんで、場合によっては
参照渡しであることを明記する必要があるの?

237デフォルトの名無しさん:2007/03/21(水) 02:20:33
整数配列の要素に特定の値があるかどうかを判定して
存在すればその要素が最初に見つかった位置を返す関数(Posの整数配列版)って何なのでしょう?
探しても探しても見つかりません。。
238デフォルトの名無しさん:2007/03/21(水) 04:01:48
if (A=x) and (B=y) then C:=z;

と言う処理があって。
1 x1 y1 z1
2 x2 y2 z2
3 x3 y3 z3
4 ・・・
と、xyzの値の組み合わせが200ぐらいあるのですが、こういう場合はどういう風に処理したらいいのでしょうか?
全部を処理するのではなく、2以外を全部処理とか操作できるようにしたいです。
そうした場合はこれらの値を別ファイルにして、csv?とかいうのにするのですか?
239デフォルトの名無しさん:2007/03/21(水) 04:29:18
>>237
そんな関数は自分でつくっても1分もかからないだろ。

>>238
csv は数値を文字列に置き換えてファイルにする一形式。
数値そのものをファイルにするほうが何倍も読み書きが効率的。
240デフォルトの名無しさん:2007/03/21(水) 11:52:37
>>239
どういう風にやったらいいのでしょう??
ファイル操作とか難しくてよくわからないんです。。
241デフォルトの名無しさん:2007/03/21(水) 12:00:21
>>240
ADOつかって操作するかコンバートして他のDBに落としたら?
何件あるかわからんけど、1万超えてるなら他のDBに落としたほうがいいよ。
242デフォルトの名無しさん:2007/03/21(水) 13:30:49
あのねー、
GofのデザインパターンってJAVAやC++での説明ばっかりでそ?
Pascalで説明してくれているサイトとかないんでしょうか?(ないだろうなぁ)

最近興味がわいてきたんだけど、JAVAでは読みこなせないのです…
243デフォルトの名無しさん:2007/03/21(水) 13:32:16
>>242
あのねー、
ありますけどねー
なんかねー
他の人に聞いてくださいって感じです。
244デフォルトの名無しさん:2007/03/21(水) 13:35:02
>>241
200件です
番号 住所で
番号入力されたら、住所とかを出力したいです。
245デフォルトの名無しさん:2007/03/21(水) 13:38:23
>>244
削除しないならADOで十分かと。
SQL使えるしかなり楽。
StringList使ってやってもいい件数だけどね。
246デフォルトの名無しさん:2007/03/21(水) 13:40:02
TSaveadialogを表示させたとき、デフォルトのファイル名を指定しておきたいのだけれど、どのプロパティを変えればいいのだろうか
247デフォルトの名無しさん:2007/03/21(水) 13:42:04
>>243
お前じゃない他の人に聞いたんだろう
248242:2007/03/21(水) 13:43:48
みつけました♪
自己解決です(^^
249デフォルトの名無しさん:2007/03/21(水) 13:44:46
SaveDialog1.FileName := 'hoge.txt';
250デフォルトの名無しさん:2007/03/21(水) 14:02:23
>>249
できた。ありがと。
251デフォルトの名無しさん:2007/03/21(水) 14:05:27
最近Delphi7からBDS2006に移行したのですが、
Win32用のプログラムでヘルプファイルが起動できなくなってしまいました。

Application.HelpFile := 'help.hlp';
Application.HelpCommand(HELP_FINDER, 0);

という風に書いてもヘルプが起動しません。
Del7でコンパイルしたものは正常に動作します。
BDS2006でコンパイルしたEXEを他のPCで起動しても駄目でした。
(ソースファイルは同一のものです)

ヘルプファイルの扱い方に変更でもあったのでしょうか。
ご存じのかたは教えてください。よろしくお願いします。
252251:2007/03/21(水) 14:20:58
自己解決しました。
WinHelpViewerユニットのUSESが必要になったのですね。
253デフォルトの名無しさん:2007/03/21(水) 16:06:10
>>238
そういう時は、まず構造体を定義する
type TMyRecode=record
x:Integer;
y:Integer;
z:string; //<---型は適切なものに
end;

この構造体の初期化付配列変数を定義する
var MyDatas : array[0..N-1] of TMyRecode=
((x: 0 ; y: 123; z:'abc')
,(x: 1 ; y: 456; z:'def')
......
);

このデータをfor 文でループして処理する
for i:=Low(MyDatas) to High(MyDatas) do
with MyDatas[i] do begin
 if (A=x) and (B=y) then C:=z;
end;
254デフォルトの名無しさん:2007/03/21(水) 16:13:03
>>253
それやるならTListを隠蔽したクラスをつくったほうがよくね?
255デフォルトの名無しさん:2007/03/21(水) 16:20:29
>>254
じゃあ、ソレで説明してみてあげてヨ
コード書いてあげるの、案外大変だよ
256デフォルトの名無しさん:2007/03/21(水) 16:37:22
type
 PRecHoge = ^TRecHoge;
 TRecHoge = record
  Index: Integer;
  PostNo: string;
  Addr: string;
 end;

 THogeList = class(TObject)
 private
  FList: TList;
 public
  constructor Create;
  destructor Destroy; override;
  function Add(const Hoge: TRecHoge): Integer;
  procedure Assign(const Source: THogeList);
  procedure Clear;
  procedure Delete(const Index: Integer);
  function IndexOf(const PostNo: string): Integer;

  procedure LoadFromFile(const FileName: string);
  procedure SaveToFile(const FileName: string);

  property Count: Integer read GetCount;
  property Indexes[Index: Integer]: Integer read GetIndexes write SetIndexes;
  property PostNos[Index: Integer]: string read GetPostNos write SetPostNos;
  property Addrs[Index: Integer]: string read GetAddrs write SetAddrs;
 end;
クラスはこんな感じで全部に何かの更新をしたい時はそのメソッドを追加したりする。
実装部は自分で補完しておくれ。
TStringListのソースみたりすればわかると思うから。
257デフォルトの名無しさん:2007/03/21(水) 16:49:34
そのやり方なら TListを内蔵するより array of TRecHoge を入れ物にした方が楽かもね
258デフォルトの名無しさん:2007/03/21(水) 16:53:32
259デフォルトの名無しさん:2007/03/21(水) 17:01:15
>>257
ふと思ったんだけど動的配列を入れ物にするときって、サイズはどうすんの?
0..9999とかにするとか?
260デフォルトの名無しさん:2007/03/21(水) 17:17:48
では勝手に添削すると、TObject ではなく TComponent継承にした方がいい
そうすれば、コンポーネントとして初期化が楽に出来る。そうでないなら、わざわざ作るメリットは殆どない。専用のメンバーを色々作るより

 THogeList = class(TComponent)
 private
  MyItems:array of TRecHoge;
  FItems:TStrings;
 public
  function Add(const Hoge: TRecHoge): Integer;
  property items:TStrings;
 end;
と、定義はシンプルにしておいて、

実装部で
type TRecHogeStrings=class(TStrings)
 parent:THogeList ;
  function Get(Index: Integer): string; override;
  function GetCount: Integer; override;
  procedure Clear; override;
  procedure Delete(Index: Integer); override;
  procedure Insert(Index: Integer; const S: string); override;
end;
とローカルに定義して、例えば
function TRecHogeStrings.Get(Index: Integer): string;
begin
 with parent.MyItems[Index] do begin
result:= IntToStr(Index)+':'+PostNo+':'+Addr;
 end;
end;
のように、TRecHogeを変換するようにすれば、あとはTStringsと同じように扱える
261デフォルトの名無しさん:2007/03/21(水) 17:20:51
>>259
動的配列は、SetLengthでサイズを可変出来る。
また、インスタンス解放時に自動的にメモリ解放コードを書いてくれるので
TListのように自前でメモリの確保・解放のコードが不要になるので楽
262デフォルトの名無しさん:2007/03/21(水) 17:21:55
>>260
いや、あれはコンポーネントにする予定なんてないから・・・。
あぁいう簡単なリストでもコンポにするのがここでは普通なの?

あとさ、何でTListを隠蔽したのかわかっていないような・・・。
補完で不必要なものをかくすためだよ。

その辺の作法はオープンソースをみて、当たり前のものと思ってたけど
>>260みたいな手法がここではいいの?
263デフォルトの名無しさん:2007/03/21(水) 17:23:08
>>261
可変すると中身きえるから意味なくね?
その度にセーブ、リロードするの?
264デフォルトの名無しさん:2007/03/21(水) 17:26:09
>>263
可変すると全部が消えるわけじゃないから>>260
  procedure Delete(Index: Integer);
を実装する時は、データを削除点以後、1個上にコピーしてから、サイズを1減らす

  procedure Insert(Index: Integer; const S: string);
は逆にサイズを1増やしてから、データを挿入

のように出来るから問題ないよ
265デフォルトの名無しさん:2007/03/21(水) 17:27:15
>>263
消えませんが・・・
266デフォルトの名無しさん:2007/03/21(水) 17:31:59
>>264
あ、勘違い。
今やってみたら消えないのね。
267デフォルトの名無しさん:2007/03/21(水) 17:36:53
>>262
そのあたりは難しい問題だね。
でも、実装の手間は >>256>>260も同じ程度でしょ?
そして手間が同じなら、コンポーネントにし易い方がいいじゃない
TStringsなプロパティをpublished にするだけで初期化が簡単に出来るんだからさ
268デフォルトの名無しさん:2007/03/21(水) 17:37:28
>>262
コンポーネント化は個人の自由として、リスト使用時に不必要なメソッドを隠すのは同意
269デフォルトの名無しさん:2007/03/21(水) 17:43:02
>>267
実装の手間は同じだね。
んー俺は簡単なものをコンポ化するのはなるべく避けるようにしてるからなぁ。
まぁその辺はケースバイケースでってことで。

>>268
それもそうだね。
270デフォルトの名無しさん:2007/03/21(水) 17:46:44
>>245
済みません、最近始めたのでADOとかSQLとかちんぷんかんぷんです

>>253
プログラム内に書いた方がいいのでしょうか?

>>254
>>255
>>256
>>257
クラスとかよく聞くのですが、まだそこまで行けてません。
クラスというのを導入した方がこれから技が広がりますか
271デフォルトの名無しさん:2007/03/21(水) 17:47:23
あと >>260のようにするメリットとしては itemsが TStrngsだから、
LoadFromFileとかDeleteとかの有る無しが特に明記しなくていい事かもな
272デフォルトの名無しさん:2007/03/21(水) 17:49:03
動的配列は途中の要素を削除したりすると自分で並べなおすコードを書かなくちゃ
ならん。リストと配列は異なるデータ構造だよ。
273デフォルトの名無しさん:2007/03/21(水) 17:50:32
>>270
その段階なら、まだ>>253のような書き方(pascalレベル)で書いた方がいいとおもうよ

クラスとかのObjectPascalなレベルは、
コードをどんどん書いていけばいつの間にか必要に応じて身に付く人は身に付く。
そうでないひとは、しょうがない。
274デフォルトの名無しさん:2007/03/21(水) 17:51:19
>>272
リストと配列は異なるデータ構造だけど TListは名前と違ってVectorだよ
275デフォルトの名無しさん:2007/03/21(水) 17:53:51
だから?
276デフォルトの名無しさん:2007/03/21(水) 17:55:26
ごめん最近クラスを覚えてきたんだけどちょっと質問させて
これ>>260ってAddrの部分にセパレータが入ってたりする場合はどうすればいいの?
あと取り出して分割する処理は使用者側で書くの?
277デフォルトの名無しさん:2007/03/21(水) 17:58:29
そりゃそうだ。
278デフォルトの名無しさん:2007/03/21(水) 18:01:45
>>276
そういう時はエンコード・デコードで Addrからセパレータを取り除かなければいけない
たとえば保存時
function EncodeSafe(const s:string):string;
var i:integer;
begin
Result:='';
i:=1;
 while i<=length(s) do
  begin
  case s[i]of
  #0..#31,'"','''',',',':','%':
      Result:=Result+'%'+IntToHex(ord(s[i]),2);
  else begin
    Result:=Result+s[i];
    end;
  end;
   inc(i);
  end;
end;
279デフォルトの名無しさん:2007/03/21(水) 18:08:42
復元時
function DecodeSafe(const s:string):string;
var i:integer;
begin
Result:='';
i:=1;
 while i<=length(s) do
  begin
  if s[i]='%' then
   begin
    try 
     Result:=Result+ char(StrToInt('$'+s[i+1]+s[i+2])) ;
    except end;
     inc(i,3);
   end else begin
   if not(s[i] in[#$0d,#$0a]) then
    Result:=Result+s[i];
   inc(i);
   end;
  end;
end;

あと取り出して分割する処理はTRecHogeStringsで
procedure Add(const Value: string);
  function AddObject(const S: string; AObject: TObject): Integer;
procedure SetTextStr(const Value: string);
を継承して実装しないといけないね
280デフォルトの名無しさん:2007/03/21(水) 18:22:18
>>275
独立の文言なら>>272は何も間違っていないけど
このタイミングで >>272を書くと
まるでTListがリストのように初心者が勘違いするだろうから、書いたまで。

TListはリストではなく、動的配列と同じ種類のデータ構造で管理している。つまり
array of pointer をクラス化したものという感じ
281デフォルトの名無しさん:2007/03/21(水) 18:40:20
>>279の後半修正
実際のコードを見ると、それらは全部、Insertを呼び出してるみたい。
だから、取り出して分割する処理は Insert で実装すればいいみたい。

そういうのに慣れてないならpos関数で分割すればいいと思う
282デフォルトの名無しさん:2007/03/21(水) 19:09:54
>>281
コード付きのレスありがとう
これまたふと思ったんだけど、こういうデータ構造を隠蔽してこそのクラスじゃないのかななんて思ったりして…
それともこのデコード部分もクラスに書くの?

指定Indexの要素を一つ取り出すのはこんなかんじでやるのかな?
TRecHogeStrings.DocodeSafe(TRecHogeStrings.Items[Index]);

なんか勘違いしてる予感
283デフォルトの名無しさん:2007/03/21(水) 19:29:24
>>282
違う。 要素はあくまでも MyItems[] に保存されているから、これを読み書きするインターフェースは
>>256のように
  property Indexes[Index: Integer]: Integer read GetIndexes write SetIndexes;
  property PostNos[Index: Integer]: string read GetPostNos write SetPostNos;
  property Addrs[Index: Integer]: string read GetAddrs write SetAddrs;
と用意してやる。

Itemsはあくまでも、文字列用のインターフェースで
SaveToFileとか、コンポを貼り付けた時の初期値データの保持用

で、文字列から読み書きするItemsのメソッドでEncode/Decodeを

function TRecHogeStrings.Get(Index: Integer): string;
begin
 with parent.MyItems[Index] do result:= IntToStr(Index)+':'+EncodeSafe(PostNo)+':'+EncodeSafe(Addr);
end;


procedure TRecHogeStrings.Insert(Index: Integer; const S: string);
begin
if Index= length(parent.MyItems) then InsertLast
else if Index< length(parent.MyItems) then InsertMove(Index)
else Error('%d行は行き過ぎでしょ',Index)

 with parent.MyItems[Index] do begin
  Index:= StrToInt( sprit(s,':') );
  PostNo:=DecodeSafe( sprit(s,':') );
  Addr:=DecodeSafe( s );
end;
end;
284デフォルトの名無しさん:2007/03/21(水) 19:31:28
>>283
おーなるほど
やっと理解出来ました
ほんとありがと
285デフォルトの名無しさん:2007/03/21(水) 19:32:42
ついて行けない・・
これって超初心者スレ??
でもがんばるお(^w^)
286デフォルトの名無しさん:2007/03/21(水) 19:39:29
InsertLast/InsertMove は >>264のように SetLengthでサイズ1増やすのと その位置からデータを下に移動する処理

splitはsepまでの文字列を返して、渡した文字列をそこまで消す、こんな感じの処理

function TRecHogeStrings.split(var s:string ; sep:char);
var i:Integer;
begin
result:='';
for i:=1 to length(s) do
 if s[i]=sep then begin
  Result:=copy(s,1,i-1);
  delete(s,1,i);
  exit;   
 end;
//全部読んだがセパレータが無かった・・・Errorを呼ぶ方がいいかも
Result:=s;
s:='';
end;
287デフォルトの名無しさん:2007/03/21(水) 21:08:45
無料環境でやってる皆さん
Delphi 6/Personal と Turbo Delphi/Explorer
どっち使ってますか?
288デフォルトの名無しさん:2007/03/21(水) 21:13:15
if 1 then
 begin <
  〜
 end <
else
 begin <
  〜
 end;

<の箇所が納得できない
289デフォルトの名無しさん:2007/03/21(水) 21:13:54
Del6Perにきまってるだろ。.NET と J# が好きならTurboもいいかも。
コンポインストールできないけど。
290デフォルトの名無しさん:2007/03/21(水) 21:14:08
インデントがおかしい
291デフォルトの名無しさん:2007/03/21(水) 21:15:17
>>288
きみはプログラミングのセンスがないねぇ。
ほかになにかみつけたほうがいいよ。
292デフォルトの名無しさん:2007/03/21(水) 21:18:06
>TListはリストではなく、動的配列と同じ種類のデータ構造で管理している。

それは実装がそうなってるだけで、ユーザが TList をリスト構造だと
思っても間違いじゃないさ。むしろその方が正しい。
293デフォルトの名無しさん:2007/03/21(水) 21:21:49
>>288
僕は if 1 に納得できない。
294デフォルトの名無しさん:2007/03/21(水) 21:27:46
 for i:=1 to 10 do
  begin <
  ・・・
  end;

<この部分がしつこい
295デフォルトの名無しさん:2007/03/21(水) 21:30:40
>>287
Del6
OSがあれなもので…

>>288
if( is〜 ) then
proc_hoge;
else
func_hoge;
みたいなのでエラーが出るのに納得がいかない
仕方がないので常に
if( is〜 ) then
begin
proc_hoge;
end else
begin
func_hoge;
end;
みたいな感じにしてます
296デフォルトの名無しさん:2007/03/21(水) 21:32:00
お前の方がよほどしつこいよw
297デフォルトの名無しさん:2007/03/21(水) 21:32:26
Explorer
298デフォルトの名無しさん:2007/03/21(水) 21:38:32
if〜else文は全部で一塊なんだ

if 〜 then
 …
else if 〜 then
 …
else
 …;

で、…の部分が複数行になるときbegin,endで囲む
begin,endで囲まれた中は各命令に;をつける
299デフォルトの名無しさん:2007/03/21(水) 21:46:07
センスがない上にヘルプも読めないのか
300デフォルトの名無しさん:2007/03/21(水) 21:48:33
こういうことは入門サイトとかヘルプとかに書いてあるから
そういったものを読んだ方がいいよ
自己流で変な解釈のまま納得いかずに続けるのはやめたほうがいい
301デフォルトの名無しさん:2007/03/21(水) 21:54:26
なにか勘違いさせたみたいで悪かった。

言い直す、「気持ち悪い。」だ

正しく>>295のいってる内容まんま
他言語の仕様に慣れてるから、beginがしつこくて気持ち悪いだけ
302デフォルトの名無しさん:2007/03/21(水) 22:11:33
>>295は文法間違えてるんだぞ
>>295の場合beginを書く必要はない
>>295に同意するってことは文法を理解してないってこと
まぁ、Delphiと相性悪いってことで
慣れてるほかの言語を使ったほうがいいんじゃない?
303295:2007/03/21(水) 22:22:09
前半部分は最初の印象
文法は>>298さんのように言ってるようなものと理解してますが、
それでも;があったりなかったりするのが「気持ち悪い」ので、
たとえ一文でもbegin end;で囲っちゃってると言うだけですよ

そりゃエラー吐かれたら間違ってることに気付きますよ
常識的に考えて...orz
304デフォルトの名無しさん:2007/03/21(水) 22:29:02
そうでもないよ
305デフォルトの名無しさん:2007/03/21(水) 22:29:06
ちょっと前に出たデザインパターンとやらの話を教えてほしい。
306デフォルトの名無しさん:2007/03/21(水) 22:30:11
スレ (´∀`( ´∀`) チガイ
307デフォルトの名無しさん:2007/03/21(水) 23:19:51
Delphiでクエリーやテーブルをもとにしたクエリーを作ることはできるのでしょうか?

具体的にはServerのMySQLのテーブルAにTADOTable1が接続、ローカル上のAccessの
テーブルBにTADOTable2が接続
TADOQuery1でTADOTable1とTADOTable2からフィールドを選択して表示ということを考えています。
何冊か本をみましたが、異なる種類のデータベースに同時に接続する方法については見つけることができませんでした。。。

Accessでいうとリンクテーブルとクエリを使うのと同じようなことができないかと考えています。

AccessのリンクテーブルでMySQLのテーブルに接続したのですが、MySQLのバージョンが古いのか
文字化けしてしまい、Delphiでなんとかならないかと思った次第です。

もっているのはDelphi6ProとDelphi2005Proです。
よろしくお願いします。
308デフォルトの名無しさん:2007/03/22(木) 00:48:29
>>295
気持ちはわからんでもないけど
delphiでは[;]は文の終端を表わすコード

例えば1行で書ける
Z:=X+Y;


Z
        :=
 X +

                Y;
とか書いてもコンパイラーは上記のように認識してくれる(もちろんこんな書き方は論外だが…

同様に
if 式 then Z:=X+Y;
else Z:=X/Y;
とかってやると

if 式 then Z:=X+Y; と else Z:=X/Y;は2つの別々の文になってしまう

まあ別に短文の場合でも
begin
endで囲っても問題ないといえば無いけどね
(delphiの基本的な規則には反するけど)
309 ◆XcB18Bks.Y :2007/03/22(木) 01:19:32
>>285
歴史的理由で「くだすれDelphi」が事実上Delphi総合スレになっているのです.

>>292
プログラミングの世界ではよく使われる「リスト」というモノと一般的な言葉としての「リスト」との違いですね.

>>294,295
元々Pascalがプログラミング教育のために作られた言語なのでわかりやすさを重視しているのです.
一方Cはキーをタイプする数を減らすことを重視しています(その代わりカッコ地獄ですけど).
Cを作った人たちは「begin〜endウゼー」って感じだったみたいです.

>>308
> delphiでは[;]は文の終端を表わすコード
厳密に言うと違います.
『文と文を区切るコード』というのが正解.
(だからたとえばメソッドの最後の文の後ろにセミコロンをつけなくてもエラーになりません)
一方CやC++,Javaでは文の終端を表すコードです.
310デフォルトの名無しさん:2007/03/22(木) 01:34:55
そこでDelphi2007を注文してみました。
311 ◆XcB18Bks.Y :2007/03/22(木) 01:52:38
>>236
ちょっと質問の意図が理解できませんでしたスイマセン.
とりあえずヘルプを読んで頂けると助かります.
ヘルプがダメダメなDelphiですがこの項目については明快に書かれていますので.

個人的にはこのパラメータ渡しの仕様で困ったことは一度もありません.

>>237
ありません.
同じ形のデータがいくつも並んでいてその中から目的のものを探す場合はfor文かwhile文を使います.
ここではサンプルとして適当に作ったのをおいておきます(テストしていませんが).

{ 整数配列から指定された整数を検索してそのインデックスを返します.
 見つからない場合は-1を返します.
 ※配列のインデックスが0以外から始まる場合,返す値はインデックスから最初のインデックスを引いた値になります.
  たとえばインデックスが1から始まる場合,インデックス5の値が一致すると4を返します.}
function IndexOf(Number: integer; const Numbers: array of integer): integer;
begin
 for Result := 0 to High(Numbers) do
  if Numbers[Result] = Number then
   exit;
 Result := -1;
end;

for文やwhile文などを使った繰り返し処理のことを『ループ』と言います.

312デフォルトの名無しさん:2007/03/22(木) 07:08:36
>>292
TListをリスト構造と呼ぶのは混乱の元

C++STLまでは リストと言えば ポインタでリンクしてゆく構造の事。
DelphiのコンポーネントでOwner/Parentでやってる事をリスト構造と呼ぶ


ただ、言葉は時代と共に変わるのも確か。
JAVAでは 重複を許すデータのインターフェースをListと呼ぶ
その中に ArrayList LinkedList とあって、 LinkedListが リスト構造 

で、TListは ArrayList/Vectorなデータ構造 つまり可変長配列なのさ
313デフォルトの名無しさん:2007/03/22(木) 09:22:48
TDateTime型の変数Tを時間単位で浮動小数点数で表したいとき、
たとえば08:30だったら8.5時間というように変換するには単純に24を掛けてやればいいのでしょうか。

var
T:TDatetime;
H:Real;

としておいて

H := T * 24;

でOKですか?
314デフォルトの名無しさん:2007/03/22(木) 10:22:42
日付が入っていなければそれでOK。

入っているなら、24で割ったあまりを出さないとだめかな。
315デフォルトの名無しさん:2007/03/22(木) 10:50:03
Frac でいいじゃない
316デフォルトの名無しさん:2007/03/22(木) 10:57:50
begin〜end; は {〜} みたいなもん
317デフォルトの名無しさん:2007/03/22(木) 17:01:23
くだらない質問ですみません。
文字列を表示するときに、TABでスペースをあけて整えたいのですけど、そう言う特殊文字みたいなのはありますか?
318デフォルトの名無しさん:2007/03/22(木) 17:03:12
#09
319デフォルトの名無しさん:2007/03/22(木) 18:29:46
>>318
できないっす;;
ListBox1.Items.Add(OB+#09+inttostr(x)+#09+inttostr(w)+#09+inttostr(height));
じゃ間違ってますか??
あと、この個々の変数をIEとかエクセルみたいにテーブル代入する事って出来るのでしょうか?
320デフォルトの名無しさん:2007/03/22(木) 18:30:35
>>314
>>315

ありがとうございます。
うまくいきました。

321デフォルトの名無しさん:2007/03/22(木) 20:21:43
delphi6パーソナルで不便(?)な部分てどんなとこですか?
322デフォルトの名無しさん:2007/03/22(木) 20:39:56
>>319
間違ってないけど、相手がListBoxだと 希望した表示にならないだろう
OnDrawItem イベントで自前で描画するか
いっそGridを利用したら?
323デフォルトの名無しさん:2007/03/22(木) 21:17:36
>>321
仕様許諾コードがとり難いところ

あとは
Web系のコンポが最初の時点では貧弱(用ダウソ)
データベース系のソフトの開発は無理

こんなところかな
324デフォルトの名無しさん:2007/03/22(木) 23:00:08
>>323
d Web系のコンポのダウソは何でぐぐればいいですか?
わかりやすいとこ教えてもらえるとうれしいです
325デフォルトの名無しさん:2007/03/22(木) 23:03:11
三次元配列で、一つめ二つめに数字、三つ目に文字列と数字の構造体を

と言う事は出来ますか?
326デフォルトの名無しさん:2007/03/22(木) 23:13:37
まあちょっと落ち着け。
一つめ二つめって何を指しているんだ?
添字か?内容か?
327デフォルトの名無しさん:2007/03/22(木) 23:30:23
>>326
そめ字です。
xyの座標にして、その配列に文字列と数字の構造体を入れたいと思ってます。
もしくは構造体じゃなくて2か3の三次元配列で文字列を入れたいです
328デフォルトの名無しさん:2007/03/22(木) 23:37:42
いまいち意味がわからんが、配列ってのは *同じ型* の変数列だぞ?
329デフォルトの名無しさん:2007/03/22(木) 23:47:11
なんか配列とレコード方がごっちゃになってるな・・・
330デフォルトの名無しさん:2007/03/22(木) 23:48:12
だったら「文字列と数値のフィールドを持つレコード」の二次元配列ではダメなのか?
331デフォルトの名無しさん:2007/03/22(木) 23:49:24
>xyの座標にして、その配列に文字列と数字の構造体を入れたいと思ってます。
ここから読み取るに
文字列と数字の構造体の2次元配列を作ればいいんじゃないかな?
332331:2007/03/22(木) 23:50:16
かぶった
>>330と同じことを言いたかった
333デフォルトの名無しさん:2007/03/23(金) 02:01:32
>>325
配列は>>328が言ってるように同じ型の変数列

var
 hairetu1: array[0..1,0..1] of Integer;

これは
 hairetu1[0][0]:=0;
 hairetu1[0][1]:=1;
とかって数字しか格納できない
もし
 hairetu1[0][0]:=名前; ←文字列
 hairetu1[0][1]:=1000; ←売上(数値)
みたいに違う型のものを格納したいなら

type
 MyRec = record
  namae: string;
  uriage: Integer;
end
とレコード型を宣言しておいて

var
 hairetu1: array[0..1] of MyRec; ←レコード型を格納する配列を宣言

 hairetu1[0].namae := 'hoge';
 hairetu1[0].uriage := 1000;
とやると幸せになれる
334デフォルトの名無しさん:2007/03/23(金) 02:20:36
>xyの座標にして、その配列に文字列と数字の構造体を入れたいと思ってます。
多次元配列は
a[0][0]
   [1]
a[1][0]
   [1]
とかってデータ構造になってる

座標全てにデータがあるなら
a[X][Y]でもかまわないと思うけど
特定の座標にしかデータがない場合
メモリの無駄使い&参照の時困る可能性があるんジャマイカ?
335デフォルトの名無しさん:2007/03/23(金) 03:25:56
調べてもわからなかったので、教えてください。
treeviewでノード間の間隔を変えるにはどうすればよいのでしょうか?
336デフォルトの名無しさん:2007/03/23(金) 05:57:02
無理
337デフォルトの名無しさん:2007/03/23(金) 06:09:56
他アプリのウインドウを存在する方法でIsWindow(hwnd)というのがありますが
同じようにプロセスIDかスレッドを確認する方法はありますでしょうか?
338デフォルトの名無しさん:2007/03/23(金) 09:13:21
IsWindow は Windows APIだから
Win32API質問箱 Build51
http://pc11.2ch.net/test/read.cgi/tech/1174416295/
の方がいいだろう
いちおうヘルプの プロセスとスレッドの概要 を見ておくといいよ
339デフォルトの名無しさん:2007/03/23(金) 10:29:11
>>338 ありがとうございます。
お手上げなのでそちらで質問させていただこうと思います。
340デフォルトの名無しさん:2007/03/23(金) 14:26:12
メッセージをDOS窓みたいにコンソール?のように出したいのですけどどのコンポーネントなのでしょうか?
341デフォルトの名無しさん:2007/03/23(金) 14:30:08
TListBoxの背景色を黒に、文字を白にして
メッセージをAddしていきゃそれらしく見えないかな
342デフォルトの名無しさん:2007/03/23(金) 14:31:52
Delphi for win32の場合は、
AllocConsole; してから wirte 文で出力すればコンソールに出せるよ

あと
1、TMemoを貼り付けただけのフォームを用意しておいて、そこにデバッグ用のメッセージを出す人は多いね
2、OutputDebugString( msg ) で出力して、 Ctrl+Alt+V で出す人もいる(重いけどね)
343デフォルトの名無しさん:2007/03/23(金) 14:36:13
↓これだけでDOS窓開いてメッセージ表示されるんだな
>>340じゃないけど為になった

procedure TForm1.Button1Click(Sender: TObject);
begin
 AllocConsole;
 Writeln('Hello Delphi!');
end;
344デフォルトの名無しさん:2007/03/23(金) 15:24:55
>(重いけどね)
これまだ改善されてないのかよ・・・
某はデバッグに使ってないのか
345デフォルトの名無しさん:2007/03/23(金) 18:47:40
コンソールに吐いた方が早くねえ?
346デフォルトの名無しさん:2007/03/23(金) 19:26:57
ちょと気になったんだけど

>>343でコンソールにメッセージ吐いた後
コンソールを終了して
メインに復帰するにはどうしたらよいの?

アフォですまんが教えてくらさいorz
347デフォルトの名無しさん:2007/03/23(金) 19:37:00
FreeConsole; でコンソールは終了するよ

コンソールが開いてる時にコンソール右上の×で閉じるとアプリが終わるので注意ね
348デフォルトの名無しさん:2007/03/23(金) 20:04:19
function CtrlHandler(fdwCtrlType:DWORD):boolean;
begin
Result:=True;
if CTRL_CLOSE_EVENT =fdwCtrlType then begin
fConsoleCloseReq:=true;
end;
end;

procedure TForm1.DebugConsole1Click(Sender: TObject);
begin
DebugConsole1.Checked:=not DebugConsole1.Checked;
if DebugConsole1.Checked then
begin
AllocConsole;
SetConsoleCtrlHandler( @CtrlHandler ,True);
end else
begin
FreeConsole;
end;
end;

とやれば、問い合わせてくれるようにはなるけど、問い合わせも出ないようにするのは無理なのかな
例外を投げてみたけど、なんかバグった
349デフォルトの名無しさん:2007/03/23(金) 20:08:42
仮にもプログラマーならバグという言葉は正しく使おうぜ
350デフォルトの名無しさん:2007/03/23(金) 20:22:05
試してみれば判るけど、
CtrlHandler の中から例外を投げると、
なんかバグったというしかないよ。 IDEもその後落ちたので追跡も難しい
351350:2007/03/23(金) 20:27:24
ああ、どうやらCtrlHandlerが実行されるスレッドがメインスレッドじゃない為のようだ
ブレークポイントを仕掛けて止めた時のスレッドIDが違う。
これじゃ例外投げたらバグって当然だな
352デフォルトの名無しさん:2007/03/23(金) 22:19:44
D3でDBGridにフォーカスが移ったときにselectedindexで最初に編集する列を指定してやると
フォーカスはそこに移るのですが、セルが選択状態にならず一見どこにフォーカスが有るのかわからなくなります。
selectedindexを指定しないと最初の列のセルが選択状態になります。
どうにかしたいのですが何か良い方法はないでしょうか。

353デフォルトの名無しさん:2007/03/23(金) 23:22:43
>>341
やってみたけど、スクロールが手動Orz
どこに設定あるんだろう
354デフォルトの名無しさん:2007/03/24(土) 02:28:07
355デフォルトの名無しさん:2007/03/24(土) 02:54:48
yes
356デフォルトの名無しさん:2007/03/24(土) 07:48:40
no
357デフォルトの名無しさん:2007/03/24(土) 09:39:39
Delphi .NETはGC有り。
Dephi Win32は無し。
358デフォルトの名無しさん:2007/03/24(土) 13:23:21
Win32でもStringとかインターフェースとかはGC有りじゃないの?
359デフォルトの名無しさん:2007/03/24(土) 13:43:01
言葉は使ってる人のものだから、そういう定義で使うならソレでいいと思うよ
昔のbasicでコンパクションの事をガーベージコレクションと呼んでたようにも思うしさ、気にしない
360デフォルトの名無しさん:2007/03/24(土) 14:46:59
そこのWikipediaの記述はそういう定義みたいだけどね。
361デフォルトの名無しさん:2007/03/24(土) 14:59:38
とりあえずWikipediaで議論すんなと。
HDDVDの項に無理やりBDの宣伝ねじ込んであったりもうめちゃくちゃ。
362デフォルトの名無しさん:2007/03/24(土) 17:09:53
ボタンコンポーネントが押されたときに、他のprocedureにある値を変えるにはどうしたらいいのでしょうか?
今はボタンが押されたらspineditの値を変えて、他のprocedure内でその値を判定して変えています。
363デフォルトの名無しさん:2007/03/24(土) 17:24:38
publicに定義しとけ
364デフォルトの名無しさん:2007/03/24(土) 18:57:36
>>363
どういう事???
やっぱり変数を介さないとだめ??
365デフォルトの名無しさん:2007/03/24(土) 19:03:03
>>364
他のprocedure内の値ってのはなんだよだぜ?
366デフォルトの名無しさん:2007/03/24(土) 19:20:12
>>362
pascalは構造化がしっかりした言語だから
手続きの中で定義した変数は手続きの中だけで有効
ユニットのimplementationで定義した変数はユニットの中だけで有効
classのメンバは公開しなければクラスだけで有効

というのをふまえて聞いて欲しい。

procedure は手続きなので、別スレッドでループしてるのでなければ
ボタンイベントとは同時に実行はされない。 
そして別スレッドからコンポーネントには基本的にアクセスしてはいけない。
という事で、
【peocedure にある値】 というのが皆んな判らないんだよ。
367デフォルトの名無しさん:2007/03/24(土) 19:29:21
エスパーはいないんか?
368デフォルトの名無しさん:2007/03/24(土) 20:22:18
俺が受信した電波は
「他のprocedure内で定義した変数の値」
369デフォルトの名無しさん:2007/03/24(土) 20:29:49
だとするとやはり>>363の通りだな
370デフォルトの名無しさん:2007/03/24(土) 20:47:31
鍵となるのは2行目の
>今はボタンが押されたらspineditの値を変えて、他のprocedure内でその値を判定して変えています。
これだな
この意味を解読すれば真相に近づく
371デフォルトの名無しさん:2007/03/24(土) 23:18:09
>>370
そこは今現在やっている処理で、本当はspineditを使わず直接他のprocedureの何かを変えたいんじゃないのかな。
372デフォルトの名無しさん:2007/03/24(土) 23:42:50
VCL.NETアプリケーションで、Midas.dllを静的リンクすることは可能でつか?

Win32の場合は、uses句にMidasLibを書けばOKでした。
373デフォルトの名無しさん:2007/03/25(日) 01:03:03
エスパーより本人だろ
374デフォルトの名無しさん:2007/03/25(日) 09:08:46
TDateTimeから日付値のみを取り出すときは Trunc() を使っているのですが
時刻値のみを取り出したいときはどうすればいいのでしょう?
いちいち DecodeTime と EncodeTime のコンボをかまさないと駄目なんでしょうか?

とか、書いてるうちに dt - Trunc(dt) でいけることに気がつきました。
チラシの裏でスマソ。
375デフォルトの名無しさん:2007/03/25(日) 09:13:56
315 名前:デフォルトの名無しさん 投稿日:2007/03/22(木) 10:50:03
Frac でいいじゃない
376374:2007/03/25(日) 09:20:23
>>375
それだ!
俺はこんなつまらないことでDateUtilsとか日付関数とかインターネットとか散々探し回ったのか・・。
377374:2007/03/25(日) 09:27:44
あまりに悔しいので愚痴を言わせてください。

Trunc は四捨五入の処理を書いたときに見かけたので知っていました。
実数のみ取り出す関数があるのだから
小数部のみ取り出す関数もあるだろうと予想はしていたし探しもしてみたんですよ。
今思うと探し方がぜんぜん甘かったわけですが。

ヘルプの Trunc ルーチン の関連情報とか参照とかの項目に Frac が載ってればこんな無駄な労力は・・
378デフォルトの名無しさん:2007/03/25(日) 09:38:41
Frac は 浮動小数点演算命令に相当する機能がなくて、
>>374の  dt - Trunc(dt)  を中でやってるだけなので、特に無くても困らないからでしょ。
379デフォルトの名無しさん:2007/03/25(日) 14:56:08
Odd() とか「特に無くても困らない」関数がいっぱいあるわけだが
380デフォルトの名無しさん:2007/03/25(日) 17:22:20
いま、新しいマシンに Delphi2005(すまん)を移行したんだが、起動するたびにユーザー登録の
確認がでて確認に行くんだけど、「サーバと繋がらないから今回はやめとくわ」で終わる。
https://community.borland.com/
にはちゃんとログインできるからパスとかは間違ってないと思うんだが
381デフォルトの名無しさん:2007/03/25(日) 17:53:06
古いマシンのレジストリから登録情報を
レジストリエディタでHKEY_CURRENT_USER\Software\Borland以下から
見つけて、エクスポートで保存して持ってくるのが一案楽だよ
382デフォルトの名無しさん:2007/03/25(日) 18:12:53
レジストリ情報はBorland以下臀部読み込んだんだけど、ダメなんだ。
あれってマシン固有のものも入ってなかったっけ?
383デフォルトの名無しさん:2007/03/25(日) 18:17:17
2005 あたりから
ユーザーのフォルダに認証ファイルをダウンロードしていたような気も。
384デフォルトの名無しさん:2007/03/25(日) 18:18:41
え、どこどこ。ユーザーのフォルダってどこですか?
385デフォルトの名無しさん:2007/03/25(日) 18:20:05
C:\Documents and Settings\Administrator\.borland\borland.lic
これですか?
386デフォルトの名無しさん:2007/03/25(日) 18:25:34
registry.dat ってのもあったけど、確かに個人情報書いたiniファイルなんだけど
インストーラには違うって言われた。
フィルタが「*.slip;*.txt;*.eml」になってるね
387デフォルトの名無しさん:2007/03/25(日) 18:47:53
BDS\3.0\License\delphi2005.slip
があったが、「読み込めん」だった(x.x)
388デフォルトの名無しさん:2007/03/25(日) 19:14:30
添付ファイル (reg92.txt) で Borland 製品が起動できます。
っていうメールを見つけたので、それを指定してみたら(添付ファイルでもやってみた)
「この製品のものではありません」
と言われた。
俺ってDQN?泣けてくる。
389デフォルトの名無しさん:2007/03/25(日) 19:29:11
2007を購入すれば解決するよ。
390デフォルトの名無しさん:2007/03/25(日) 19:43:43
買ってくれ
391デフォルトの名無しさん:2007/03/25(日) 19:47:58
金と住所プリーズ
392デフォルトの名無しさん:2007/03/25(日) 19:52:32
まずは嫁はんに相談だ
393デフォルトの名無しさん:2007/03/25(日) 20:35:25
変数の大文字小文字は区別されますか?

あと、TStringList型の変数はポインタとして扱えますか?
394デフォルトの名無しさん:2007/03/25(日) 20:47:29
Q1変数の大文字小文字は区別されますか?
Ans いいえ

Q2 TStringList型の変数はポインタとして扱えますか
Ans レコード型と違って クラス型の変数は常に実体を参照しています。
   ですから、変数への代入は 参照=アドレスの複製が行われます。
   この意味で、ポインタと概念は似ています。
   しかし、ポインタという呼び方はしません
395デフォルトの名無しさん:2007/03/25(日) 20:58:52
じゃあアドレスの複製じゃなくて実体の複製はできるの?

396デフォルトの名無しさん:2007/03/25(日) 21:06:13
例えば、変数の定義を以下のようにして
var
  str1,str2,str3:TStrings;
ptr1:Pointer absolute str1;
ptr2:Pointer;

以下のように複製した時
  str1:=TStringList.Create;
  str2:=TStrings(ptr1);
  ptr2:=str1;
  str3:=TStrings(ptr2);
str1,str2,str3の3つは同じ実体(インスタンス)を示します。

Q3 アドレスの複製じゃなくて実体の複製はできるの?
Ans 出来るのではなく、出来るようにするかどうかはプログラマが決めます。
   出来るようにプログラマが決めた場合、多くは、別のインスタンスを作ってからAssignで複製出来ます。
397デフォルトの名無しさん:2007/03/25(日) 21:09:12
C++だと特別何もしなくてもできるよ。実体コピー。
398デフォルトの名無しさん:2007/03/25(日) 21:19:05
で?
399デフォルトの名無しさん:2007/03/25(日) 21:23:44
C++も代入演算子を弄って出来ないようにする事も出来ます
考え方として、
1、  コントロールしなければ出来るようにして、出来ないようにする事も出来る
2、  コントロールしなければ出来ないようにして、出来るようにする事も出来る
という違いです。

メモリ内容を単純コピーして実体が2つになっては困る場合も多いので
(たとえばファイルアクセスハンドルを含んでるような場合)
2が最近の主流です。
400デフォルトの名無しさん:2007/03/26(月) 16:19:33
D3+interbase4.2でBDEを使用しています。
TQueryで検索した結果からClientDataSetのワークテーブルに書き込み帳票印刷をしようと
としたのですが、ワークテーブル作成中に「ロックファイルが大きくなりすぎています」というエラーが発生しました。
データが少ないときはエラーは出ません。
ClientDataSetには何かデータサイズの上限があるのでしょうか。
401400:2007/03/26(月) 16:57:21
どうやらTClientDatqaSetではなくループの中でTQueryのオープン/クローズを繰り返しているとロックファイルが肥大するようです。
クローズした後何か完全に開放するような処理が必要なのでしょうか。
402ななしへたぐらま ◆XcB18Bks.Y :2007/03/26(月) 18:33:01
eaccessの全面規制がやっと解除された〜

>>362
『他のプロシージャにある値』を別なところに置くことを検討してみてください.
恐らくその『他のプロシージャ』の中で宣言し,保管しなければならない理由はないはずです.

具体的な例としてはそのボタンを載せているフォームのフィールド変数にすることです.
フォームの外部からアクセスする必要はないはずなので変数はprivate節に宣言します.

例のプロシージャがもし単独の手続きだとこの変数にアクセスできませんが,
このプロシージャはフォームに関連した処理をやっているようですので
フォームのメソッドにすればOKです.
(もし特定のフォームに依存しない処理をやっているなら変数をpublic節に宣言してください)

>>397
Delphiがなぜこういう仕様なのかはわかりませんが,
恐らくウィンドウの部品を扱う場合に便利なようにあえてこういう仕様にしたように思います.
領域もハンドルも同じボタンを複製することはありませんからね.
403デフォルトの名無しさん:2007/03/26(月) 19:22:37
TStringListの場合、文字列そのものはさらにヒープに確保されてるから
インスタンスのメモリがそのままコピーされても、文字列の保存場所はコピーされず
そのポインタだけがコピーされる。
両方で同じ領域にアクセスするから、たぶんマズイ事になるだろう。


404デフォルトの名無しさん:2007/03/26(月) 19:50:43
ついでだからTPersistentのAssignとAssignToの使い分けを教えて欲しい
ヘルプ見ても使い道の差がよくわからない。
405デフォルトの名無しさん:2007/03/26(月) 20:03:58
中身はこうなってる
procedure TPersistent.Assign(Source: TPersistent);
begin
  if Source <> nil then Source.AssignTo(Self) else AssignError(nil);
end;

A.AssignTo(B) は B.Assign(A) と等価が期待されてるみたい

でもAssignToは実装されてないものもあったりするみたい


406デフォルトの名無しさん:2007/03/26(月) 20:14:25
それ実装するほうの問題。ユーザは Assign() だけ知ってればよい。
407デフォルトの名無しさん:2007/03/27(火) 12:21:41
プロジェクトファイルの変数をユニットから参照することはできないんでしょうか?
408デフォルトの名無しさん:2007/03/27(火) 12:33:54
.dpr は program から始まっていて、インターフェース部を持たないので出来ませんね
変数だけのユニットを定義したらどうでしょ?
409デフォルトの名無しさん:2007/03/27(火) 13:13:43
>>408 なるほど、そういう方法でやれるのですか。
ありがとうございました。
410デフォルトの名無しさん:2007/03/27(火) 14:47:38
Timerイベント内で時間が掛かる処理を行う場合かつ
Intervalが短い場合はイベントの最初でEnableを
Falseにするべきなのでしょうか?
411デフォルトの名無しさん:2007/03/27(火) 14:48:58
そうしなくてもタイマーはメッセージでやってくるから単に重くなるだけ
412デフォルトの名無しさん:2007/03/27(火) 14:53:20
そうなんですか
今まではイベントが二重に呼ばれると思ってたので
タイマーイベント内で下のようなことをやっていました
try
 Timer1.Enable := False;
 //何らかの時間が掛かりそうな処理
finally
 Timer1.Enable := True;
end;

こんなことはしなくていいってことですね
ありがとうございました
413デフォルトの名無しさん:2007/03/27(火) 15:20:57
インターバルが10秒で
時間のかかりそうな処理が5秒だとしたら
そのコードだと約15秒間隔でイベントが発生するようになる。
> Timer1.Enable := True;
でインターバルがリセットされるから。
逆にそのコード取っ払うと10秒間隔でイベントが発生して空き(余裕というべきか)時間は5秒になるという違いがあるよ。
なので処理が詰まってきそうならコード残したほうがいい場合もあるね。
414デフォルトの名無しさん:2007/03/27(火) 15:48:01
以前に何かのコードで、グローバルなBusyってboolean型の変数用意して
Timerイベントの最初にif Busy then Exitと書き、
直後にBusy := TrueとしてTimerイベントの終わりにBusy := Falseという感じなのを見た記憶がある。
が、これって意味ないのかな?
415デフォルトの名無しさん:2007/03/27(火) 15:52:32
タイマーの中で、他のコントロールを変更してたりすると
そのコントロールのイベントが呼ばれてしまうんで、それを禁止する目的でやる場合はあるね

あるいは、もっと単純に、
AとBがあって、Aを変更したらB、Bを操作したらAを変更するような場合に常にを
それを使うから、ついクセでやってしまったのかもしれない。
416デフォルトの名無しさん:2007/03/27(火) 15:54:09
412と同じ疑問を抱いてなんとなく実装してしまったとかw
417412:2007/03/27(火) 15:57:00
>>413
>インターバルが10秒で
>時間のかかりそうな処理が5秒だとしたら
>そのコードだと約15秒間隔でイベントが発生するようになる。
>> Timer1.Enable := True;
>でインターバルがリセットされるから。

この概念は気付きませんでした
道理でイベント周期が一定しなかったわけだ・・・

>>414
最初はそれを試してみたのですが制御がまちまちで意味無かったです
それでEnable変更にしたわけで・・・
418デフォルトの名無しさん:2007/03/27(火) 16:12:20
while (X<Z) or (X>Z+20) do
begin
IF X<Z THEN
 INC(Z)
IF X>Z+20 THEN
  DEC(Z)
end;

z < x < Z+20
にするために、zの方を動かすというプログラムを書こうと思うのですが、
↑だと同じ判定を二回しています。
これをもっとスマートにする事って出来ないでしょうか?
なんか、無駄な処理なきがしています。
419デフォルトの名無しさん:2007/03/27(火) 16:14:44
無駄なのはループの方で
IF X<Z THEN  Z=X;
IF X>Z+20 THEN Z:=X+20;

とすりゃいいんじゃないの?
420デフォルトの名無しさん:2007/03/27(火) 16:17:15
あ、間違った。
× IF X>Z+20 THEN Z:=X+20;
○ IF X>Z+20 THEN Z:=X-20;

こういうのは min/max関数を使って

Z:=min(Z,X);
Z:=max(Z,X-20);
421デフォルトの名無しさん:2007/03/27(火) 16:35:04
z := ensurerange(z, x-20, x);
422デフォルトの名無しさん:2007/03/27(火) 16:40:04
BDS2006にはDatabase Desktopは付属してないのか?
Paradoxのデータをデバッグするのに毎回ACCESS起動するのも・・・

なんかいいツール知りませんか?
423デフォルトの名無しさん:2007/03/27(火) 17:01:07
424デフォルトの名無しさん:2007/03/27(火) 17:55:19
付いてたはずだが・・。
425デフォルトの名無しさん:2007/03/27(火) 18:23:02
>>419
すみません、

IF X<Z THEN
begin 
INC(Z)
・・・・
end;
と、複数命令が入るのです
幅がずれてる分だけ処理を入れたかったです。
426デフォルトの名無しさん:2007/03/27(火) 18:49:24
>>418
では、最初の比較でどちらか判っているのだから
while (X<Z) or (X>Z+20) do
begin
IF X<Z THEN
 INC(Z)
ELSE  DEC(Z) ;
 //その他の処理
end;
としたら?
その他の処理が共通でないなら

その2つの条件は同時には成立しないのだから
while X<Z do begin INC(Z) ; end;
while X>Z+20 do begin DEC(Z) ; end;
427デフォルトの名無しさん:2007/03/27(火) 19:07:09
EditのTextを右寄せにするにはどうすればいいですか?
428デフォルトの名無しさん:2007/03/27(火) 19:09:17
>>427
そういうコンポーネント探した方が早いです。
429デフォルトの名無しさん:2007/03/27(火) 19:13:33
>>427
TEditから独自のコンポーネントを派生させて
そのコンストラクタ内でParams.Style := Params.Style or ES_RIGHT;

意味不明ならそういうコンポ探してきて
430デフォルトの名無しさん:2007/03/27(火) 19:13:35
431デフォルトの名無しさん:2007/03/27(火) 19:14:11
>>426
うお!
下のがまさに願ったりかなったりです。
上のもelseで一つ減らせますね〜。ありがとうっす。
432デフォルトの名無しさん:2007/03/27(火) 20:09:05
>>429
コンストラクタじゃなくてCreateParamsをオーバライドしてでしょ。
433デフォルトの名無しさん:2007/03/27(火) 20:18:45
オーバーライドまでしなくても Get/SetWindowLong でおk。
434デフォルトの名無しさん:2007/03/27(火) 20:39:49
SetWindowLongできるのはXP以降だけ。
435デフォルトの名無しさん:2007/03/27(火) 20:52:48
Delphi 6とTurbo Delphi
どっちがいいと思う?
436デフォルトの名無しさん:2007/03/27(火) 20:52:48
function itemsearch(var itemname:TStringList;sea:dword):boolean;

と言うのを作って、itemnameというのを他の関数でも使えるようにしたいのでVARで宣言してるのですが、
createはどこでやればいいのでしょうか?
437デフォルトの名無しさん:2007/03/27(火) 20:58:34
呼び出し側でやる
こんな感じ

var
 sList: TStringList;
begin
 sList := TStringList.Create;
 try
  //sListにAddしたりLoadFromFileしたりでデータセット
  if itemsearch(sList, 1) then
   ShowMessage('あるよ!')
  else
   ShowMessage('ないよ・・');
 finally
  sList.Free;
 end;
end;
438デフォルトの名無しさん:2007/03/27(火) 21:02:24
呼び出し側でインスタンス生成するならvar付ける必要ないよ。
439デフォルトの名無しさん:2007/03/27(火) 21:07:01
クラスのインスタンスは参照で渡されるからな
440デフォルトの名無しさん:2007/03/27(火) 21:18:19
itemnameをグローバルでvar宣言したいが、
アプリケーションのどこでCreateしたらいいかわからないって質問じゃないのか?
441デフォルトの名無しさん:2007/03/27(火) 21:39:44
先ほど質問させていただいた者ですが、
空のテキストファイルの作成は仕様上不可、との理解でよろしいでしょうか?
442デフォルトの名無しさん:2007/03/27(火) 21:47:02
>>441
え?誰?
可能だけど。
443デフォルトの名無しさん:2007/03/27(火) 22:09:23
>>440
そうです。
すべてのところで使いたいので、procedureとかで宣言しないで、一番最初にしたいと思ったのですけど、
何処が一番最初なのかなぁっておもいますて
444デフォルトの名無しさん:2007/03/27(火) 22:10:37
initialization節かOnCreateイベントハンドラでいいんじゃね
445デフォルトの名無しさん:2007/03/27(火) 22:16:51
FormCreateでCreateして、FormDestoryでFreeかな
446デフォルトの名無しさん:2007/03/27(火) 22:17:30
Delphi6のListViewでCheckboxes :=Trueにして
CheckBoxを表示させているのですが、
OwnerData:=Trueにした場合、CheckBoxが表示されません。

OwnerData:=Trueの状態でCheckBoxを表示するにはどうしたらいいのでしょうか。
447デフォルトの名無しさん:2007/03/27(火) 23:09:24
>>446
Microsoftのコモンコントロールの制限で出来ない。

どうしてもやりたいならOwnerDrawにしてチェックボックスを描画したり、
マウスクリックでチェック状態を変えたりする処理を自前で実装する
しかないだろうね。
448ななしへたぐらま ◆XcB18Bks.Y :2007/03/27(火) 23:14:52
>>404-405
http://pc.2ch.net/tech/kako/1021/10212/1021201697.html
の471〜474あたりが参考になるかも.

>>446
私も前につまずいたことがありますが,Delphiに限らず,
仮想リストビュー(オーナーデータ)とチェックボックスの組み合わせはうまくいかないみたいですね.
449デフォルトの名無しさん:2007/03/27(火) 23:34:28
>> 446
外部コンポーネントを使用してもいいのならVirtualTreeViewでそれ相当が出来ると思う。
450デフォルトの名無しさん:2007/03/27(火) 23:37:51
>>444
>>445
ありがとうございやす!
たすかりまっす
451デフォルトの名無しさん:2007/03/27(火) 23:57:37
>>447
>>448
>>449
制限で出来ないのですか…

DrawFrameControlを使い自前で描画する事にします。
(VirtualTreeViewも後で使ってみようと思います)
回答ありがとうございました。
452デフォルトの名無しさん:2007/03/28(水) 00:24:59
>>423
どーもです。
InternetCanonicalizeUrl ですか。
msdn ではコンテンツが見つからないといわれたんですが、
AtlCombineUrl
も同じでしょうか。
いずれにしても未定義っぽいです
453デフォルトの名無しさん:2007/03/28(水) 00:44:02
最初の質問者(157)ですが、実はあの後べたべたのぐちょぐちょ的にで書いてみたのでした。

function ExpandURL(const BaseURL,SrcURL: string): string;
//一つ↑のディレクトリ
 function ExtractURLDir(URL: string): string;
 var
  i:integer;
 begin
//WSrash の最後の位置
  i:=LastDelimiter('/',URL);
  if (i>1) and (i=Length(URL)) then
  begin
   URL:=Copy(URL,1,i-1);
   i:=LastDelimiter('/',URL);
  end;
  if (i>1) and (URL[i]='/') then Dec(i);
  Result:=Copy(URL,1,i);
 end;
454デフォルトの名無しさん:2007/03/28(水) 00:44:45
var
 WDotsCount,
 Idx,
 i:integer;
 CurrentPath:string;
const
 WDots='..';
 Dot='.';
 WSlash='//';
 Slash='/';
begin
 Result:=SrcURL;
//BaseURL が絶対アドレスではない
 Idx:=Pos(WSlash,BaseURL);
 if Idx<1 then exit;

//最後が / で終わるまで(カレントディレクトリ)
 CurrentPath:=BaseURL;
 while LastDelimiter(Slash,CurrentPath)<>Length(CurrentPath) do
  Delete(CurrentPath,Length(CurrentPath),1);
455デフォルトの名無しさん:2007/03/28(水) 00:45:17
// ./ で始まるとき
 if (Pos(Dot,SrcURL)=1)and(Pos(WDots,SrcURL)<1) then
 begin
  Result:=SrcURL;
  Delete(Result,1,1);
  Result:=CurrentPath+Result;
  exit;
 end;
 Result:=SrcURL;
 WDotsCount:=0;
 while Pos(WDots,Result)>0 do
 begin
  Inc(WDotsCount);
  Result[Pos(WDots,Result)]:='*';
 end;
 Result:=SrcURL;
 if WDotsCount<1 then exit;
 for i:=0 to WDotsCount-1 do
 begin
  CurrentPath:=ExtractURLDir(CurrentPath);
 end;
 Result:=Copy(SrcURL,Length(WDots+Slash)*WDotsCount,Length(SrcURL));
 Result:=CurrentPath+Result;
end;
456デフォルトの名無しさん:2007/03/28(水) 03:47:27
正規表現クラスがあれば3行で済んじゃうのにね
457デフォルトの名無しさん:2007/03/28(水) 06:18:55
Timerの様に一定間隔で呼び出される物を
コンソールアプリケーションで使うにはどうすればいいでしょうか?
458デフォルトの名無しさん:2007/03/28(水) 06:36:47
どういう状況かもう少し詳しく。 
コンソールアプリではメッセージポンプを回してない事の方が多いと思うから状況が判らない。

一定時間休憩したいならSleepを使う。
一定時間毎に処理したいならSleepを繰り返してGetTickCountとか時計を見たりとか
459457:2007/03/28(水) 07:07:54
失礼しました。コンソールアプリというか
DLL等、フォームを使わないプログラムという事でした
460デフォルトの名無しさん:2007/03/28(水) 07:13:49
だから、まずメッセージポンプが回っているかどうか教えてって

メッセージポンプが回っているなら、TTimerは使える。
隠れフォームを作るのが嫌なら、SetTimerで関数を呼び出して貰えばいい

そうじゃなく、メインスレッド負荷が100%なら、スレッド作るしかない
461デフォルトの名無しさん:2007/03/28(水) 07:24:22
質問に一番近い答えはマルチメディアタイマーかサブスレッドだろうけど少し癖がある。
もう少し簡単にできるかもしれないから
具体的にどういう処理を書きたいのかを説明したほうがいいかも。
462デフォルトの名無しさん:2007/03/28(水) 08:43:45
マウスメッセージを送ってマウスをクリックといった動作をループで回してるときに、
自分でもマウスを操作したいのですが、その時に同時に出来るのでしょうか?
例えば
マウスボタン押す→動かす→マウスボタン放す
と言ったD&D作業の時の「動かす」部分で、一時中断して自分の操作を優先させ、終わったらその途中からと言った具合です。
今は、そう言った対策をしていないのでD&D先が予期しない場所になったり、勝手にD&Dになったりと自分の操作と混ざってしまいます。
やはりこの一連の「押す放す」が終わるまで、自分のマウスメッセージを送らないようにする関数を作った方がいいのでしょうか?
463デフォルトの名無しさん:2007/03/28(水) 09:41:41
>やはりこの一連の「押す放す」が終わるまで、自分のマウスメッセージを送らないようにする関数を作った方がいいのでしょうか?

そりゃそうだ。受け取るほうは、ほんもののマウスメッセージかどうか分かるはずもないからな
464デフォルトの名無しさん:2007/03/28(水) 09:45:26
何をやってるのか俺には想像つかん。
自分のアプリなら、なんでマウスカーソル動かすのか? 何かイライラ系のゲーム?
他人のアプリなの?
465デフォルトの名無しさん:2007/03/28(水) 10:24:25
すみません、教えてください。
EXEのソースを複数のパッケージに分割したいのですが、
そのパッケージを利用するときに「実行時パッケージを使って構築」という
チェックを入れるとおもうのですが、分割数が結構多いので
プロジェクトソースに記述しておきたいのですが
どのように書けばいいのでしょうか。
466デフォルトの名無しさん:2007/03/28(水) 10:34:26
パッケージという用語を正しく使ってるかどうか ヘルプで確認して下さい

たぶんユニットと混交していませんか?
467デフォルトの名無しさん:2007/03/28(水) 10:36:29
ユニットファイル
Object Pascal 言語では,「ユニット」と呼ばれる個別にコンパイルされた
コードモジュールをサポートしています。

ユニットを使うことによって,構造化された,プロジェクト間で再利用可能なコードを利用できます。
Delphi プロジェクトで最も一般的なユニットは,Delphi プロジェクトで使用される
フォームのイベントハンドラやその他のコードを含むフォームユニットです。
しかしユニットは,それに関連付けられたフォームを持つ必要はありません。
すべてのプロジェクトが使用できる単独のファイルを作成して,
それをユニットとして保存することができます。

たとえば,自分で手続き,関数,DLL,およびコンポーネントを書き,
そのソースコードをフォームに関連付けられていない別のユニットファイルに入れることができます。

468デフォルトの名無しさん:2007/03/28(水) 10:36:49
動的にパッケージを読み込みたいならLoadPackage関数を使う
469465:2007/03/28(水) 10:46:24
「実行時パッケージを使って構築」のパッケージリストに
分割したパッケージを追加しておく、という手順は正しいでしょうか。
このパッケージリストに追記する数が結構多いので
コンパイルオプションのような記述方法があったら知りたいのですが。
470465:2007/03/28(水) 10:47:47
ちなみに今のEXEは100以上のユニットで構成されています。
471デフォルトの名無しさん:2007/03/28(水) 11:03:43
 .DOFファイルを直接編集したら?
472デフォルトの名無しさん:2007/03/28(水) 11:08:00
Delphiで構築されたアプリをLinuxで動作させる、
もしくはLinuxでのDelphiプログラミングをしたいのですが何かありませんか。
Kylix以外で。
473デフォルトの名無しさん:2007/03/28(水) 11:08:54
>>472
ない
474デフォルトの名無しさん:2007/03/28(水) 11:17:36
似たようなものなら Free Pascal Lazurus ってのがあるよ
http://wiki.lazarus.freepascal.org/Main_Page/ja
475デフォルトの名無しさん:2007/03/28(水) 11:37:45
Fuck order son (クソ寝ぼけたことをぬかしやがって!!)

ファックオーダー、サン

ファッコォーダァーサン

ファッコウダ、サン

八甲田山

外人から恐れられている山だということが、これで、証明された。
476デフォルトの名無しさん:2007/03/28(水) 12:19:57
>>475
それを言うなら Fuck Orderson だろ。
ネイティブに発音したら、八甲田山(はっこうださん)には聞こえない。
477デフォルトの名無しさん:2007/03/28(水) 12:22:47
>>475
Fuck Orderson!
478465:2007/03/28(水) 12:24:03
requires節みたいなのを期待していたんですが
無いようですね。失礼しました。
479デフォルトの名無しさん:2007/03/28(水) 12:44:43
でもスーフリの「和ッ田ッさん」は
What the sonに聞こえるって隣のジョージが言ってた
480デフォルトの名無しさん:2007/03/28(水) 12:46:37
発酵乳にしても「へ Fuck on you デースカー?嫌な言葉デースネー オーイヤーカモッ・・・」
だと
481デフォルトの名無しさん:2007/03/28(水) 15:04:45
シロツメクサの花が咲いたら
さあ行こうPascal

Pascalをどこに連れて行こうとしているのか。
482デフォルトの名無しさん:2007/03/28(水) 15:20:48
>>481
ナツカシスwww
去年、リニューアルした「ぽかぽか森のPascal」というものもあった。
つーかPascalじゃねーよw
483デフォルトの名無しさん:2007/03/28(水) 15:53:51
隔離スレに戻りなさい
484デフォルトの名無しさん:2007/03/28(水) 19:03:27
マウスポインタがボタン上にある時とボタンから出た時に処理を行いたいのですがどうすればいいんですか?
485デフォルトの名無しさん:2007/03/28(水) 20:38:01
継承を使うと簡単

type
  TMyButton = class(TButton)
  procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
  procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  end;

実装例:
procedure TMyButton.CMMouseEnter(var Message: TMessage);
begin
 Caption := 'in';
end;

procedure TMyButton.CMMouseLeave(var Message: TMessage);
begin
 Caption := 'out';
end;
486デフォルトの名無しさん:2007/03/28(水) 20:39:34
コンポーネントをインストールするのが嫌なら
起動時に入替えてしまう。

function ChangeComponent( dst:TControl;NewClass:TControlClass):TControl;
var src:TControl;
 Stream: TStream;
begin
 Stream := TMemoryStream.Create;
 try
  Stream.WriteComponent(dst);
  src:=NewClass.Create(dst.Owner);
  src.Parent:=dst.Parent;
  Stream.Position:=0;
  dst.Free;
  Stream.ReadComponent(src);
  Result:=src;
 finally Stream.free end;
end;

という関数を作って、
procedure TForm1.FormCreate(Sender: TObject);
begin
 Button1:=ChangeComponent(Button1,TMyButton) as TButton;
end;
487デフォルトの名無しさん:2007/03/28(水) 20:52:17
ええと、てっきり質問を投稿したつもりで大ポカをやってしまいました。
>>442様、混乱させてしまい申し訳ありません。

当初、質問させていただこうと思った趣旨は以下のとおりです。

1 プログラムの目的
 cドライブのルートに"New"フォルダを作成し、かつ、そのフォルダに空のテキストファイルを作成すること。

2 経過
 NewDirectory := SetCurrentDir('C:\New');
if NewDirectory = False Then MkDir('C:\New');
まで記述し、正常動作しました。

3 質問のポイント
(1)"MkDir"のように、空のテキストファイルを作成するコマンドは無いものでしょうか?
(2)無いとしたら、どのような方法がありますでしょうか?

以上、お手数をおかけいたしますが、ご教示のほどよろしくお願い申し上げます。
488デフォルトの名無しさん:2007/03/28(水) 21:08:58
空のテキストファイルを作るだけなら

with TStringList.Create do
try
SaveToFile('空のファイル.txt');
finally free end;

で作れる筈だけど、シェル関係(新規作成)を使ってって事?
489デフォルトの名無しさん:2007/03/28(水) 21:17:33
>>485,486
面倒でやった事のなかったコンポーネントの作り方を勉強しながらぼちぼちとやってみます。
メッセージの捕まえ方がさっぱりだったので大変参考になりました。
ありがとうございました。
490487:2007/03/28(水) 21:42:04
>488様
ありがとうございます。
さっそく試してみます。

>シェル関係(新規作成)を使ってって事?

いえいえ、Tips集や入門書、オフィシャルコースウェアをめくってみたのですが、
フォルダの作り方やファイルの検索方法は書かれていても、新規ファイルの作り方は
何故か記載されていなかったものでお伺いした次第です。
491デフォルトの名無しさん:2007/03/28(水) 22:47:15
>>489 >>486のコードはイベントがコピーされなかったので

http://delwiki.info/?%A5%B3%A1%BC%A5%C9%C1%D2%B8%CB%2F%A5%B3%A5%F3%A5%DD%A4%CE%C9%D5%A4%B1%C2%D8%A4%A8
にイベントもコピーされる版を書きました
492デフォルトの名無しさん:2007/03/29(木) 01:47:16
function hoge:boolean;
という関数がある場合、@hogeで関数ポインタが得られますが、

function hoge(hoge: Integer):boolean;overload;
function hoge(hoge: String):boolean;overload;
といったようにオーバロード時に、それぞれの関数ポインタを得る方法はあるのでしょうか?
493デフォルトの名無しさん:2007/03/29(木) 02:06:46
どうしても必要なら、その関数をパックする関数を作って、その関数ポインタを使う
494デフォルトの名無しさん:2007/03/29(木) 07:15:56
質問です
Turbo Delphiを使ってます

ListBoxで選択されたアイテムは色が反転されますが
その反転した色を変更する事は出来ないでしょうか?
495デフォルトの名無しさん:2007/03/29(木) 07:17:25
OwnerDraw
496デフォルトの名無しさん:2007/03/29(木) 07:29:01
上の質問見ての質問なんですが、
関数ポインタって主にどういうときに使うのでしょうか?
497デフォルトの名無しさん:2007/03/29(木) 07:34:19
・コールバック/イベント
・言語レベルでのOOCに頼らないOOCプログラミングでの多態性実現
498デフォルトの名無しさん:2007/03/29(木) 07:36:32
OwnerDraw の例、
Style を lbOwnerDrawVariable

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;Rect: TRect; State: TOwnerDrawState);
begin
 with Control as TListBox do begin
  if odSelected in State then
  begin
   Canvas.Brush.Color := clGreen;
   Canvas.Font.Color := clYellow
  end;
  Canvas.FillRect(Rect);
  Canvas.TextOut(Rect.Left + 2, Rect.Top, Items[Index]);
 end;
end;
499デフォルトの名無しさん:2007/03/29(木) 07:42:01
>>496
メソッドポインタと違って関数ポインタは API回りやDLL類のインタフェースで良く利用される
>>497さんの言うコールバックはAPI呼び出しでは必須だし
DLLを動的に呼び出すとかでも必須
500デフォルトの名無しさん:2007/03/29(木) 07:56:56
>>497>>497 ありがとうございます。
コピペで使ってたEnumなんとかってのも関数ポインタだったんですか。
メッソッドポインタというまた違うのがあるんですか??
早速ぐぐってみようと思います。
501デフォルトの名無しさん:2007/03/29(木) 08:10:15
メソッドポインタはイベントで普通に使ってる筈だぞ
メソッドポインタを言語仕様で実装したのを見たのはDelphiだったな
502デフォルトの名無しさん:2007/03/29(木) 08:26:20
>>501そうなんですか? わけわかりません><
503492:2007/03/29(木) 08:26:54
>>493
うーん、やっぱり無理ですか。
VCLの既存関数なのでラッピングも名前変更もできないんですよね。。。
504デフォルトの名無しさん:2007/03/29(木) 08:36:13
>>503 それは@を付けるからじゃないのか?
function func(const S: string): string; overload;
begin
result:=s+s;
end;
function func(const S: WideString): WideString; overload;
begin
result:=s+s;
end;

type TPfuncA=function(const S: string): string;
type TPfuncW=function(const S: WideString): WideString;
var pfuncA:TPfuncA;
var pfuncW:TPfuncW;
begin
pfuncA:=func;
pfuncW:=func;
caption:=pfuncA('ABC');
caption:=pfuncW('ABC');
区別できるぞ
505デフォルトの名無しさん:2007/03/29(木) 08:45:20
上のコードで
pfuncA:=@func;
pfuncW:=@func;
とやると pfuncWにもansiの方が呼ばれる
@を付けないとちゃんと区別出来る
506494:2007/03/29(木) 08:59:35
>>495 >>498
ありがとうございます、できました。
498様コードまで書いていただいて非常に助かりました。
もっと精進します。
507デフォルトの名無しさん:2007/03/29(木) 17:50:44
過疎ってるな。
気圧で言うと3ヒークトパスコー(英語は発音大事)ってところか。

元になった言語がパスコー(英語は発音大事)なだけに。
508デフォルトの名無しさん:2007/03/29(木) 17:56:26
>>507
【審議中】
    ∧,,∧  ∧,,∧
 ∧ (´・ω・) (・ω・`) ∧∧
( ´・ω) U) ( つと ノ(ω・` )
| U (  ´・) (・`  ) と ノ
 u-u (l    ) (   ノu-u
     `u-u'. `u-u'
509デフォルトの名無しさん:2007/03/29(木) 18:36:56
TDBCtrlGridの使い方

どうやって貼り付けるの?どう使うの?
分かりません。だれか教えて下さい。
510492:2007/03/29(木) 18:44:41
>>505
関数ポインタ変数を定義するところまではよかったのですが、
おっしゃる通り@を付けてシグネチャを捨てていました。

どうもありがとうございました。
511デフォルトの名無しさん:2007/03/29(木) 18:44:47
http://delphi.sakura.vg/index2.htmlを見て、タブブラウザを作っているのですが、
「リンクをホイールクリックすると、新しいウィンドウで開く」機能はどのようにすればよいでしょうか?
512デフォルトの名無しさん:2007/03/29(木) 18:47:45
>>464
そうです。IEとかで自動でクリックさせながら、自分もその画面で操作したいなぁと

>>463
マウスのメッセージを送るときに

押し

実際のマウス押される→「押し」をスタックして一時停止
実際のマウス処理終わったら続き

放す

とかできかとおもっちゃったのですよ。。でも、D&Dだと「押し」からやり直ししないと意味ないしと。

それで、逆に実際のマウス押されたらその処理をキューに入れていって、
「放す」が終わったら順次処理できるかな〜と思ったり。。
でもそれも、時間とか長かったらアウトアウトかなぁって。

なので、押し〜放すまでは実際のマウス操作があっても処理しない。のがいいのかなと。
513デフォルトの名無しさん:2007/03/29(木) 18:56:48
>>512
そういう場合は、マウスメッセージではなく、
ボタンならボタンを押せとか
相当する制御方法がある筈で、ソッチを選ぶんじゃないのかな?

514デフォルトの名無しさん:2007/03/29(木) 18:59:58
>>511
「リンクをホイールクリックすると、新しいウィンドウで開く」
を分解しよう
1、ホイールクリックを検出
2、リンクの上である事を知る
3、リンクを新しいウィンドウで開く

どれが判らない?

515デフォルトの名無しさん:2007/03/29(木) 19:04:19
>>509
もういっそ、
VNC をインストールして、VNCサーバ起動してから
自分のIPアドレスをこのスレに書いたら?
親切な人が、操作してくれるかもしれないよ
516デフォルトの名無しさん:2007/03/29(木) 19:40:30
>>514
2番でつまずいてます。
「リンク上であることを知り、そのリンク先のURLを取得」まで教えていただきたいです。
517デフォルトの名無しさん:2007/03/29(木) 19:48:16
>>516
TWebBrowserの情報が少なくて困ってるのでしょ?
その場合、JavaScriptのwindow/Navigator/documentを調べるといいです

たとえば、
http://www.tohoho-web.com/js/document.htm
elementFromPoint とか
518デフォルトの名無しさん:2007/03/29(木) 23:57:10
>>517
JavaScriptを使うことで着想を得、無事にホイールクリック対応しました!
ありがとうございました。
519デフォルトの名無しさん:2007/03/30(金) 00:30:13
メーラーの開き方は
ShellExecute(0, nil, 'mailto:アドレス?subject=件名', nil, nil, SW_NORMAL);

ってわかったんですが、これで件名までいれることができますけど、本文にテンプレ文をいれたりはできないんですか?
520492:2007/03/30(金) 00:38:14
&body=本文を後ろに付ける。
521デフォルトの名無しさん:2007/03/30(金) 00:42:04
>>520
ありがとう♥
522デフォルトの名無しさん:2007/03/30(金) 02:32:55
>>519
mailtoに件名/CC/BCC/本文を指定する方法 - HTML
ttp://www5e.biglobe.ne.jp/~access_r/hp/html/html_016.html
523デフォルトの名無しさん:2007/03/30(金) 02:36:01
>>496
>>関数ポインタって主にどういうときに使うのでしょうか?

異なる関数の結果の違いを比べたいときとか。特に微積分なんかで。
Cだけど。
http://www.gulf.or.jp/~damayan/saru/pointer5.html



524デフォルトの名無しさん:2007/03/30(金) 03:03:21
>>496
for文の中でifによる分岐をすると速度が如実に下がる場合、
for文の前で関数ポインタに関数を状況によって適したものを入れることで、
分岐の回数を減らすことで速度を上げたり出来るってのが中級者以上の使い方。

あとは、DLLを使うときに関数ポインタの知識は必須かも。

イベントはメソッドポインタで、関数ポインタの親戚。
525デフォルトの名無しさん:2007/03/30(金) 06:48:43
>>512もdocument.elementFromPoint(x, y) .click() とかでマウスを動かさずにクリックさせたら
526デフォルトの名無しさん:2007/03/30(金) 14:20:20
TrichEditのBevelKindをbkflatにして、スクロールバーが出てる状態でそのリッチエディット上でパネルを出したり消したりすると
スクロールバーが消えるんですがこれはバグですか?
どうすれば直るんでしょうか
527デフォルトの名無しさん:2007/03/30(金) 15:18:42
delphi6personalをwin98seで動かしています
コンソールアプリとのやりとりをGUI上で行いたいと思っています
(具体的にはGNUGoなんですが…)
例えばこんな感じのアプリです

program stdio;
{$APPTYPE CONSOLE}
uses SysUtils;
var str :string;
begin
repeat
Write('Enter a line of text: ');
Readln(str);
Writeln('You typed: ',str);
until( str = 'quit' );
end.

いろいろ調べると、どうやらGUIからコンソールアプリを起動する場合には
パイプ作ってコピーしてCreateProcessで起動して云々ということらしいとのことで、
ttp://www.autch.net/tips/delphi_anonymous_pipe.php
ttp://forum.nifty.com/fdelphi/samples/01507.html
あたりを参考にしました
command.com /c dir とかだと動くので、
単純に標準入力(stdin)にガンガン流せばいいだろうと考えてやってみたのですが
出力自体も取れていないようです
コンソールアプリが入力待ちの場合にはどうすればいいのでしょうか?
528デフォルトの名無しさん:2007/03/30(金) 15:21:47
そこらへんは茨の道だったような・・・
Del側がGUIならたしかコンポーネントがあったはず。名前失念
529デフォルトの名無しさん:2007/03/30(金) 15:28:25
>>527
コンソールからの入力待ちなら
↓のコンポーネントが使えるかも
http://www.kobira.co.jp/FTP_win/crt32.zip
530デフォルトの名無しさん:2007/03/30(金) 16:57:51
質問です。
マインスイーパのような物を作っていまして

■ボタンを配置するときの処理
var
  i : Integer;
  btn : TButton;
begin
 list := TComponentlist.Create; //上部で宣言済み
 For i := 0 to 399 do begin
  btn := TButton.Create(nil);
  list.Add(btn);
  //ボタンの配置設定
   〜
  btn.Parent := Self;
 end;
end;

■ボタンを消すときの処理
var
  i : integer;
begin
  for i :=  0 to list.Count - 1 do begin
    list.delete(0);
  end;
end;

としているのですがボタンを消すときに
左上のボタンからじわじわじわー・・・と消えていきます。
ボタン数を設定で変更したりするので、フォームごと破棄はできません。
ボタンだけを一気に消す方法はないものでしょうか?
531デフォルトの名無しさん:2007/03/30(金) 17:00:56
パネルの上にボタンを配置して
ボタンを消すときはパネルを見えなくしてから消すとか?
532デフォルトの名無しさん:2007/03/30(金) 17:15:24
ありがとうございます。

初めからパネルの上にボタンを設置し、
ボタン数を変更するときにパネルごと破棄した後
コンポーネントリストをクリアしたら高速に全て消せました。
533デフォルトの名無しさん:2007/03/30(金) 17:43:04
400個もボタン置くのかよ・・・・Win9X系なら迷惑アプリの分類だぞ
ボタンの絵を400個描いておいて、
マウスイベントで処理するとかさ
534デフォルトの名無しさん:2007/03/30(金) 18:29:02
マインスイーパのような物作るのにTButtonって・・・アフォすぎだろ。
535デフォルトの名無しさん:2007/03/30(金) 18:38:24
Bevelをnoneにしたパネルを上から被せてvisible:=true;してその裏で消す
536465:2007/03/30(金) 18:41:16
SpeedButtonでいいじゃないか。
537デフォルトの名無しさん:2007/03/30(金) 18:42:34
あ、解決してたか
読み飛ばしてた
538デフォルトの名無しさん:2007/03/30(金) 18:58:49
CanvasにButtonとか任意のWinControlのイメージだけを描画するAPIってあったりする?
539デフォルトの名無しさん:2007/03/30(金) 19:04:45
Tbuttonじゃ視覚的にマインスイーパーにし難いだろ

そこは
TBitBtnを使え! うわなにくぁwせdrftgyふじこ
540デフォルトの名無しさん:2007/03/30(金) 20:50:21
>>538
DrawFrameControl
541デフォルトの名無しさん:2007/03/30(金) 21:45:10
SpeedとBitってどう使い分けるもんなの?
フォーカスを置くかどうかの違い?
542デフォルトの名無しさん:2007/03/30(金) 23:14:27
indyで、HTTPポストするサンプルプログラムはありますか?
543デフォルトの名無しさん:2007/03/31(土) 00:51:09
SpeedButton は、ボタンもどき、たんなる絵、BitBtn はれっきとしたハンドルを
もつウィンドウのコントロールで TButton と似たようなもん。だから、リソース
を消費する。マインスイーパのようなアプリでは、ボタンはたんなる絵にして軽く
するんだな。何百個もウィンドウコントロールを使うと厨房であることがばれるし、
Win9X系では、ハンドルをめちゃくちゃ消費してほとんど犯罪アプリになる。
544492:2007/03/31(土) 01:02:40
関数ポインタについて質問させていただいた者ですが、こんなんを作ってました。
一般的な関数ポインタの使い道とかけ離れてますね・・・

http://delwiki.info/?%A5%B3%A1%BC%A5%C9%C1%D2%B8%CB%2F%C8%F3%B8%F8%BC%B0%A5%D1%A5%C3%A5%C1
545デフォルトの名無しさん:2007/03/31(土) 09:10:30
4行くらいの簡単な処理なんですけど、頻繁に使います。
こういうのは関数にして外に出した方がいいのでしょうか?
546デフォルトの名無しさん:2007/03/31(土) 10:04:40
命名出来るものは名前を付けて構造化しようよ
547デフォルトの名無しさん:2007/03/31(土) 10:36:12
Delphiは識別子に日本語(等)が使えるようですが、日本語で書いてる人はいるんですか?
548デフォルトの名無しさん:2007/03/31(土) 10:59:29
for win の場合、変数名等で日本語は使えないから
549デフォルトの名無しさん:2007/03/31(土) 11:46:48
550545:2007/03/31(土) 11:55:44
>>546
サンクス!
551デフォルトの名無しさん:2007/03/31(土) 19:29:09
サンプルについてる TShellListView にフォルダ間のファイルのドラッグ&ドロップやコピペ
などをしようと思うと大変なんでしょうか?Wクリックして開いたりとか。
LsFilelistView28 が希望に近いのですが、ポップアップメニューがバタくさいのと
情報が少なそうなので、OSのエクスプローラに最も近い方法はどうすればいいのでしょうか?

よろしくお願いいたします
552デフォルトの名無しさん:2007/03/31(土) 20:01:08
ttp://delphi.sakura.vg/index2.htmlを見ながらdelphiでブラウザを作ってるのですが
スタートページを設定するにはどうすればいいのでしょうか?
553デフォルトの名無しさん:2007/03/31(土) 20:16:02
誤解を招かないために>>552はブラウザを起動したと同時に表示されるページです
これを設定したいのです
554デフォルトの名無しさん:2007/03/31(土) 20:37:25
起動時 FormCreate に
WebBrowser1.Navigate('スタートページ');
すればどうなる?
555デフォルトの名無しさん:2007/03/31(土) 21:09:52
>>554
本当にすみません、よくわかません
具体的にどこを変えればいいでしょうか

type
TForm1 = class(TForm)
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ImageList1: TImageList;
WebBrowser1: TWebBrowser;
procedure ToolButton1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ToolButton1Click(Sender: TObject);
begin
WebBrowser1.Navigate('http://localhost:8080/');
end;

end.
556デフォルトの名無しさん:2007/03/31(土) 21:15:27
procedure ToolButton1Click(Sender: TObject); の下に
procedure FormCreate(Sender: TObject);


end.の下に
procedure TForm1.FormCreate(Sender: TObject);
begin〜〜〜〜〜
でいける
557デフォルトの名無しさん:2007/03/31(土) 21:17:27
フォームをWクリックして、localhost:8080/ に行きたいのなら
procedure TForm1.FormCreate(Sender: TObject);
begin
WebBrowser1.Navigate('http://localhost:8080/');
end;
558デフォルトの名無しさん:2007/03/31(土) 21:26:06
>>556
試したのですがスタートページ(ブラウザ起動と同時に表示されるページ)にはなりませんでした
559デフォルトの名無しさん:2007/03/31(土) 21:37:06
まずウインドの何もないところでダブルクリックしたら
FormCreateがでるからそこにWebBrowser1.Navigate('http://localhost:8080/');
と書き込むといい
560デフォルトの名無しさん:2007/03/31(土) 21:39:12
うまく行きました!!
回答をしてくださったみなさん本当にありがとうございました
561デフォルトの名無しさん:2007/03/31(土) 21:44:33
これからも精進しなよ
562デフォルトの名無しさん:2007/03/31(土) 22:28:43
デバッグの仕方がわからないので、
エラーありそうな所に
memo1.text.add(inttostr(abc));
見たいにしてるのだけど、皆さんもこうしてますか?
563デフォルトの名無しさん:2007/03/31(土) 22:31:14
>>562
?????????????????????????????????????????????????????????????????????????????????????
564デフォルトの名無しさん:2007/03/31(土) 22:36:57
>>562
普通はデバッガ使うでしょ。
565デフォルトの名無しさん:2007/03/31(土) 22:40:17
>>562
俺はshowmessage
ちょっと複雑なときはデバッグ専用のファイル出力関数つくってる
566デフォルトの名無しさん:2007/03/31(土) 23:42:26
>>562
showmessageのが便利
×かOK押すまで処理も止まるし

プログラム全体が大きくなったり
複数のユニットを統合する場合は
ステップ実行を活用すると便利

エラー個所を特定したいなら
怪しいところを{}や//を使うと楽

こんなところかな
未だにCPU窓の見方がわからない初心者より
567デフォルトの名無しさん:2007/03/31(土) 23:45:55
そだね、
F4
F5
F8
F7
の使い分けだね
568デフォルトの名無しさん:2007/04/01(日) 00:26:05
俺はMemoにログ吐くようにするな
ShowMessageでいちいち止まるのは鬱陶しいし
ファイルに出力するよりリアルタイムに見やすい
デバッガで止めるのもリアルタイムな処理だとデバッグしにくい
まあ、状況によってやりかた使い分ければいいべ
569デフォルトの名無しさん:2007/04/01(日) 00:39:03
漏れファイルに出力してしまう
tail -fで
570デフォルトの名無しさん:2007/04/01(日) 01:07:18
ドマイナーだがこんなんあるな
log4delphi.log
571デフォルトの名無しさん:2007/04/01(日) 01:20:05
OutputDebugStringならIDEに出力されるべ。
572デフォルトの名無しさん:2007/04/01(日) 04:01:46
DateTimePicker.DateをAccessのテーブルの日付型のフィールドに追加すると、「2007/04/01」とならずに
「2007/04/01 2:27:17」というように勝手に「2:27:17」が追加されるのですが、何故なのでしょうか?
また対処法等あれば教えていただけますでしょうか。
573デフォルトの名無しさん:2007/04/01(日) 08:36:27
TImageのMouseMove関数にTMouseButton引数がついたものをオーバーロードしたいんですが、宣言の仕方くらいしかわかりません。
誰かやり方教えてください…
574デフォルトの名無しさん:2007/04/01(日) 12:17:38
>573
できません。他の方法を考えてください。
575デフォルトの名無しさん:2007/04/01(日) 13:31:37
できないんだ。
残念・・
576デフォルトの名無しさん:2007/04/01(日) 13:42:48
はいはい、残念、残念、残念至極。
577デフォルトの名無しさん:2007/04/01(日) 13:56:39
>>573
type
 TButtonOnIamge = record
  biButton: TMouseButton;
  biDown:Boolean;
 end;
 private
  { Private 宣言 }
  ButtonOnIamge:TButtonOnIamge;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 with ButtonOnIamge do
 begin
  biButton:=Button;
  biDown:=True;
 end;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 ButtonOnIamge.biDown:=False;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
 if not ButtonOnIamge.biDown then exit;
end;
578デフォルトの名無しさん:2007/04/01(日) 14:05:31
複数のボタンの同時押下が全く考慮されていなくてワロス
579562:2007/04/01(日) 14:06:51
沢山レスありがとうございます。
サンデープログラマーなので(家で趣味程度に)
専門知識無く質問してしまいますた。

showmesseage便利ですね〜
特にリアルタイム制が必要なく、memo出力だと早すぎて終えてないことがあったので良かったです。
ただ、ステップ実行とかはよくわからなかったです。
一行ずつなのかなと思ったら、ボタン押したあとはそのまま実行されたりします。
ときたま、ソースファイルが見つかりませんとエラー出てCPU画面というのがでてさらにわけわかめに・・・
580デフォルトの名無しさん:2007/04/01(日) 14:09:32
>>579
トレース実行とステップ実行の違いについて考察してみましょう
わからなかったら、またここで聞いてみw
581562:2007/04/01(日) 14:35:42
>>580
ありがとうございます。
2日くらい考えてダメだったらよろしくお願いします。
582デフォルトの名無しさん:2007/04/01(日) 14:43:30
>>581
実行のタブの中身ちょこちょこ触ってみればいいと思うおw
583デフォルトの名無しさん:2007/04/01(日) 17:52:03
カンマで区切られた文字列をファイルから読み込んでリストビュ〜に追加するにはどうしたらいいですか
584デフォルトの名無しさん:2007/04/01(日) 17:59:07
sl := tstringlist.create;
sl2 := tstringlist.create;
sl.loadfromfile('data.csv');

for i := 0 to sl.count-1 do
begin
sl2.commatext := sl[i];
with listview1.add(sl2[0]) do
for j := 1 to sl2.count-1 do
subitems.add(sl2[j]);
end;
585デフォルトの名無しさん:2007/04/01(日) 18:03:22
star:array[0..30]of array[0..30] of char=
(p,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,c,c,c,c,c,c,c,c,c,c,c,c,d,
o,p,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,c,c,c,c,c,c,c,c,c,c,c,d,e,
o,o,p,a,a,a,a,a,a,a,a,a,a,a,a,a,b,c,c,c,c,c,c,c,c,c,c,d,e,e,
o,o,o,p,a,a,a,a,a,a,a,a,a,a,a,a,b,c,c,c,c,c,c,c,c,c,d,e,e,e,
o,o,o,o,p,a,a,a,a,a,a,a,a,a,a,a,b,c,c,c,c,c,c,c,c,d,e,e,e,e,
o,o,o,o,o,p,a,a,a,a,a,a,a,a,a,a,b,c,c,c,c,c,c,c,d,e,e,e,e,e,
o,o,o,o,o,o,p,a,a,a,a,a,a,a,a,a,b,c,c,c,c,c,c,d,d,e,e,e,e,e,
o,o,o,o,o,o,o,p,a,a,a,a,a,a,a,a,b,c,c,c,c,c,c,d,d,e,e,e,e,e,
o,o,o,o,o,o,o,o,p,a,a,a,a,a,a,a,b,c,c,c,c,c,d,d,d,e,e,e,e,e,
o,o,o,o,o,o,o,o,o,p,a,a,a,a,a,a,b,c,c,c,c,c,c,d,e,e,e,e,e,e,
o,o,o,o,o,o,o,o,o,o,p,a,a,a,a,a,b,c,c,c,c,c,d,e,e,e,e,e,e,e,
o,o,o,o,o,o,o,o,o,o,o,p,a,a,a,a,b,c,c,c,c,d,e,e,e,e,e,e,e,e,
o,o,o,o,o,o,o,o,o,o,o,o,p,a,a,a,b,c,c,c,d,e,e,e,e,e,e,e,e,e,
o,o,o,o,o,o,o,o,o,o,o,o,o,p,a,a,b,c,c,d,e,e,e,e,e,e,e,e,e,e,
o,o,o,o,o,o,o,o,o,o,o,o,o,o,p,a,b,c,d,e,e,e,e,e,e,e,e,e,e,e,
o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,p,b,d,e,e,e,e,e,e,e,e,e,e,e,e,
n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,z,f,f,f,f,f,f,f,f,f,f,f,f,f,
m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,l,j,h,g,g,g,g,g,g,g,g,g,g,g,g,
m,m,m,m,m,m,m,m,m,m,m,m,m,m,l,k,j,i,h,g,g,g,g,g,g,g,g,g,g,g,
m,m,m,m,m,m,m,m,m,m,m,m,m,l,k,k,j,i,i,h,g,g,g,g,g,g,g,g,g,g,
m,m,m,m,m,m,m,m,m,m,m,m,l,k,k,k,j,i,i,i,h,g,g,g,g,g,g,g,g,g,
m,m,m,m,m,m,m,m,m,m,m,l,k,k,k,k,j,i,i,i,i,h,g,g,g,g,g,g,g,g,
m,m,m,m,m,m,m,m,m,m,l,k,k,k,k,k,j,i,i,i,i,i,h,g,g,g,g,g,g,g,
m,m,m,m,m,m,m,m,m,l,k,k,k,k,k,k,j,i,i,i,i,i,i,h,g,g,g,g,g,g,
m,m,m,m,m,m,m,m,l,k,k,k,k,k,k,k,j,i,i,i,i,i,i,i,h,g,g,g,g,g,
m,m,m,m,m,m,m,l,k,k,k,k,k,k,k,k,j,i,i,i,i,i,i,i,i,h,g,g,g,g,
m,m,m,m,m,m,l,k,k,k,k,k,k,k,k,k,j,i,i,i,i,i,i,i,i,i,h,g,g,g,
m,m,m,m,m,l,k,k,k,k,k,k,k,k,k,k,j,i,i,i,i,i,i,i,i,i,i,h,g,g,
m,m,m,m,l,k,k,k,k,k,k,k,k,k,k,k,j,i,i,i,i,i,i,i,i,i,i,i,h,g,
m,m,m,l,k,k,k,k,k,k,k,k,k,k,k,k,j,i,i,i,i,i,i,i,i,i,i,i,i,h) ;
586デフォルトの名無しさん:2007/04/01(日) 18:04:33
↑が[エラー] Unit1.pas(47): 未定義の識別子 : 'b'
としてエラーが出てしまいます。なぜでしょう??
587デフォルトの名無しさん:2007/04/01(日) 18:05:01
tstringlist.loadfromfile
tstringlist.commatext
tlistitem
588デフォルトの名無しさん:2007/04/01(日) 18:08:46
うぜーよてめぇで考えろボケ
589デフォルトの名無しさん:2007/04/01(日) 18:17:54
おっぱいおっぱい
590デフォルトの名無しさん:2007/04/01(日) 18:58:43
>>585
それは p,a,b,c等が定義されてないからでは?

const a='a'; のように定義しておくことと、
あと、2次元配列の場合 ( ) で区切らないといけないよ
591デフォルトの名無しさん:2007/04/01(日) 21:33:53
TStringlistの内容を' 'で区切った文字列にして得たいのですがこれでOKでしょうか?

function GetMojimoji(T:Tstringlist) : string;
var P,Q: Pchar; i:integer;
begin
Result := '';
if T.Count < 1 then exit;

GetMem(P, Length(T.Text) + T.Count +1 );
Q := P;
try
 for i:=0 to t.count -1 do begin
  Strcopy(Q, Pchar(T[i]));
  Inc(Q, Length(T[i]));
  Q^ := #$20;
  Inc(Q);
 end;
 Dec(Q);
 Q^:=#0;
 Result := P;

finally
 Freemem(P);
end;
end;
592デフォルトの名無しさん:2007/04/01(日) 21:38:15
なんでそんな面倒なこと・・・
593デフォルトの名無しさん:2007/04/01(日) 21:52:59
StringReplace(t.Text, sLineBreak, ' ', [rfReplaceAll]);でいけるんじゃね
594デフォルトの名無しさん:2007/04/01(日) 22:01:37
t.Delimiter := ' ';
ShowMessage(t.DelimitedText);
595デフォルトの名無しさん:2007/04/01(日) 22:14:24
>>592-594のみなさん ありがとうございます。
>StringReplace(t.Text, sLineBreak, ' ', [rfReplaceAll]);
なるほど、改行をスペースで置換するんですね。
これは、気がつきませんでした。
>>594 t.DelimitedTextでやると" "で囲まれて出てきて駄目ですた。
ありがとうございました。また明日お願いします。
596583:2007/04/01(日) 22:20:49
>>584
ありがとう。でも
[エラー] Unit1.pas(278): 未定義の識別子 : 'add'
[エラー] Unit1.pas(280): 未定義の識別子 : 'subitems'
と出ます。もうちょっと教えてください。
597デフォルトの名無しさん:2007/04/01(日) 22:25:13
with listview1.add(sl2[0]) do

with listview1.items.add(sl2[0]) do
のような
598デフォルトの名無しさん:2007/04/01(日) 22:50:38
質問です。
実行時型の変数はいつ初期化されているのでしょうか?
DBGridにデータソースを通じてTQueryを紐付けて
いるんですが、どのタイミングでデータソースが
DBGridに突っ込まれているかがわかりません。

Application.CreateFormが一番怪しいと思っているのですが。
599デフォルトの名無しさん:2007/04/02(月) 00:56:08
>>577
ありがとうございます。参考にがんばります。

>>576
コンニャロメガ!
600583:2007/04/02(月) 02:22:38
>>597
それだとパラメータが多すぎますと言われます
601デフォルトの名無しさん:2007/04/02(月) 02:44:34
with listview1.items.add(sl2[0]) do

with listview1.items.add do
 caption := sl2[0];
のような
602デフォルトの名無しさん:2007/04/02(月) 02:52:19
>>600
いくらくだスレだからってコピペで済ませようって言うのは感心できませんなぁ
603デフォルトの名無しさん:2007/04/02(月) 05:36:55
質問です
皆さんは実数型⇔整数型の変換はどうやってますか?

初心者の私には
StrToInt(FloatToStr(ExtendedHoge));
これぐらいしか思いつかないのですが

数値を文字列に置き換えるのは何か気持ち悪いので
なんか良い方法があったら教えて下さい

具体的には
divやInt()で求めた実数の整数部分(Extended型)と
Memo.Lines.Countなどの関数のInteger型の戻り値を
ifなどで比べる場合のスマートなやり方が知りたいのです orz
604デフォルトの名無しさん:2007/04/02(月) 06:57:08
>>603
RoundとかTruncとか。
605デフォルトの名無しさん:2007/04/02(月) 07:03:49
>>598

フォームに貼り付けたコンポーネントのインスタンスの事だよね?
Application.CreateForm で正解。
デバッグ版 DCUを使うにチェックを入れて、ブレークポイントしかけてトレース実行すれば判る
詳しい事は
 Delphiコンポーネント設計&開発 完全解説
 著: 中村拓男 発行: インプレス
を買って読むといいよ。
606デフォルトの名無しさん:2007/04/02(月) 07:26:16
>>585
Star: array[0..29, 0..29] of Char = (
('p','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','b','c','c','c','c','c','c','c','c','c','c','c','c','d'),
('o','p','a','a','a','a','a','a','a','a','a','a','a','a','a','a','b','c','c','c','c','c','c','c','c','c','c','c','d','e'),
('o','o','p','a','a','a','a','a','a','a','a','a','a','a','a','a','b','c','c','c','c','c','c','c','c','c','c','d','e','e'),
('o','o','o','p','a','a','a','a','a','a','a','a','a','a','a','a','b','c','c','c','c','c','c','c','c','c','d','e','e','e'),
('o','o','o','o','p','a','a','a','a','a','a','a','a','a','a','a','b','c','c','c','c','c','c','c','c','d','e','e','e','e'),
('o','o','o','o','o','p','a','a','a','a','a','a','a','a','a','a','b','c','c','c','c','c','c','c','d','e','e','e','e','e'),
('o','o','o','o','o','o','p','a','a','a','a','a','a','a','a','a','b','c','c','c','c','c','c','d','d','e','e','e','e','e'),
('o','o','o','o','o','o','o','p','a','a','a','a','a','a','a','a','b','c','c','c','c','c','c','d','d','e','e','e','e','e'),
('o','o','o','o','o','o','o','o','p','a','a','a','a','a','a','a','b','c','c','c','c','c','d','d','d','e','e','e','e','e'),
('o','o','o','o','o','o','o','o','o','p','a','a','a','a','a','a','b','c','c','c','c','c','c','d','e','e','e','e','e','e'),
('o','o','o','o','o','o','o','o','o','o','p','a','a','a','a','a','b','c','c','c','c','c','d','e','e','e','e','e','e','e'),
('o','o','o','o','o','o','o','o','o','o','o','p','a','a','a','a','b','c','c','c','c','d','e','e','e','e','e','e','e','e'),
('o','o','o','o','o','o','o','o','o','o','o','o','p','a','a','a','b','c','c','c','d','e','e','e','e','e','e','e','e','e'),
('o','o','o','o','o','o','o','o','o','o','o','o','o','p','a','a','b','c','c','d','e','e','e','e','e','e','e','e','e','e'),
('o','o','o','o','o','o','o','o','o','o','o','o','o','o','p','a','b','c','d','e','e','e','e','e','e','e','e','e','e','e'),
607デフォルトの名無しさん:2007/04/02(月) 07:27:13
>>606の続き:
('o','o','o','o','o','o','o','o','o','o','o','o','o','o','o','p','b','d','e','e','e','e','e','e','e','e','e','e','e','e'),
('n','n','n','n','n','n','n','n','n','n','n','n','n','n','n','n','z','f','f','f','f','f','f','f','f','f','f','f','f','f'),
('m','m','m','m','m','m','m','m','m','m','m','m','m','m','m','l','j','h','g','g','g','g','g','g','g','g','g','g','g','g'),
('m','m','m','m','m','m','m','m','m','m','m','m','m','m','l','k','j','i','h','g','g','g','g','g','g','g','g','g','g','g'),
('m','m','m','m','m','m','m','m','m','m','m','m','m','l','k','k','j','i','i','h','g','g','g','g','g','g','g','g','g','g'),
('m','m','m','m','m','m','m','m','m','m','m','m','l','k','k','k','j','i','i','i','h','g','g','g','g','g','g','g','g','g'),
('m','m','m','m','m','m','m','m','m','m','m','l','k','k','k','k','j','i','i','i','i','h','g','g','g','g','g','g','g','g'),
('m','m','m','m','m','m','m','m','m','m','l','k','k','k','k','k','j','i','i','i','i','i','h','g','g','g','g','g','g','g'),
('m','m','m','m','m','m','m','m','m','l','k','k','k','k','k','k','j','i','i','i','i','i','i','h','g','g','g','g','g','g'),
('m','m','m','m','m','m','m','m','l','k','k','k','k','k','k','k','j','i','i','i','i','i','i','i','h','g','g','g','g','g'),
('m','m','m','m','m','m','m','l','k','k','k','k','k','k','k','k','j','i','i','i','i','i','i','i','i','h','g','g','g','g'),
('m','m','m','m','m','m','l','k','k','k','k','k','k','k','k','k','j','i','i','i','i','i','i','i','i','i','h','g','g','g'),
('m','m','m','m','m','l','k','k','k','k','k','k','k','k','k','k','j','i','i','i','i','i','i','i','i','i','i','h','g','g'),
('m','m','m','m','l','k','k','k','k','k','k','k','k','k','k','k','j','i','i','i','i','i','i','i','i','i','i','i','h','g'),
('m','m','m','l','k','k','k','k','k','k','k','k','k','k','k','k','j','i','i','i','i','i','i','i','i','i','i','i','i','h'));
608606:2007/04/02(月) 07:37:12
コードだけ書くと荒らしみたいなのでコメントも。
基本的には>>590の言っているとおり。

・a,b,c…が定義されていない('a','b','c',…と間違えてる?)
・2次元配列で定義されているのに>>585は1次元配列
・要素数が違う(>>585の定義だと、31x31 のChar型配列)

ので、コンパイルが通らないと思われ。
609デフォルトの名無しさん:2007/04/02(月) 07:57:20
Delphi-DBWebプログラミングという本でDBの勉強をしています。

TTableの接続、追加、削除くらいの軽いものを作ってみたのですが、IDEの終了時に
「モジュールntdll.dllのアドレス77FCB8FF6でアドレス0000000000004に対する書き込み違反がおきました」
と、ダイアログが出るようになってしまいました。
コンパイルしたものはそのまま動きます。
このようなエラーが出るときは、なにが原因なのでしょうか?

OS:Win2000 SP3
Pentium 1.6
516MEM
Delphi 5.0 + update

よろしくお願いします。
610デフォルトの名無しさん:2007/04/02(月) 08:28:53
>>608
十分荒らしだよ
親切とバカは違う
611デフォルトの名無しさん:2007/04/02(月) 09:16:15
>>609
そういうのは良く起きる事なので 
自分はプロジェクトファイルから、不要ファイルを削除する癖が付いた。
こうすると、なぜかその手のエラーが出難くなる。
具体的には DelDel.bat というファイルを作って 中身を
del /S *.dsk
del /S *.dsm
del /S *.dcu
del /S *.~*
del /S *.tds
みたいにして、IDEのツールに登録しておくと
612デフォルトの名無しさん:2007/04/02(月) 10:07:22
>そういうのは良く起きる事なので 
>自分はプロジェクトファイルから、不要ファイルを削除する癖が付いた。

あ、そうなんですか。
そういえばムダなファイルがあるな…

先輩の方があまり問題にしてないようなので、安心することとします。どうもです。
613デフォルトの名無しさん:2007/04/02(月) 11:40:26
まあ終了時にうるさいだけで、大した問題ではないね。
Delphi7くらいから、Delphi2006に至るまで、ずっと発生している問題かな。

Del2007注文してみたけど、多分改善されてないかな。
614デフォルトの名無しさん:2007/04/02(月) 12:24:34
すいません、質問です。
昨日コードギアのページでユーザー登録をして、
本当はver6の無償版のpersonalを押さなければいけないところをver7のほうを押してしまって、
次からver6のアンケートに答えてもアクティベーションキー付のメールが来ないのですが、(迷惑メールにもありませんでした)
どうすればいいでしょうか。
615デフォルトの名無しさん:2007/04/02(月) 12:28:33
>>614
> ver7のほうを押してしまって、
これは関係ない。

> メールが来ないのですが
現在申請ページがトラブル中で、メールは来ない。
CodeGear に電話して聞いてみるしかない。
616デフォルトの名無しさん:2007/04/02(月) 12:30:09
>>615
即レスありがとうございます。
ver7のメールはすぐに来たんで関係あるのかと思いました・・・。
まあ、トラブルが収まってからもう一度やります。ありがとうございます。
617デフォルトの名無しさん:2007/04/02(月) 13:12:05
もうDel2007使ってる人いるのか?
618デフォルトの名無しさん:2007/04/02(月) 15:33:29
>>594 すいません。commatextと間違っていたのか、
t.Delimiter := ' '; t.DelimitedTextで見事にうまくいきました。
ありがとうございました。
619デフォルトの名無しさん:2007/04/02(月) 15:36:10
pieって二つ点をしていするだけじゃ
中心の角が大きいほうか小さいほうかどっちできるかわからん
対処法内ですか。
620デフォルトの名無しさん:2007/04/02(月) 16:03:36
x1,y1から時計回りにx2,y2に線を引くんじゃないっけ?
621デフォルトの名無しさん:2007/04/02(月) 17:51:31
VistaにTurbo Delphiのインストールって出来る?
622デフォルトの名無しさん:2007/04/02(月) 18:28:32
出来る。インストール時はUACオフ推奨。
623デフォルトの名無しさん:2007/04/02(月) 23:23:13
コードでウィンドウを最大化するにはどうすればいいのか誰か教えて下さい
624デフォルトの名無しさん:2007/04/02(月) 23:27:34
>>623
Form1.WindowState := wsMaximized;

こういうの自分で調べるのも楽しいと思うんだけどな
625623:2007/04/02(月) 23:27:37
form1.windowstate:=wsmaximized;
でできました。お騒がせしました。
626デフォルトの名無しさん:2007/04/02(月) 23:32:14
Delphi2006→2007でどの程度変わっているか楽しみではある。

ただ、違いに気付かない可能性も高い。
627デフォルトの名無しさん:2007/04/02(月) 23:53:47
>>619
MSDNでPie()引くと、最初の径から2番目の方へ反時計回りに
描かれるとある(要するに角度の増える方向)。
TCanvas.Pieもたぶん同じだべ。
628デフォルトの名無しさん:2007/04/03(火) 14:14:38
アカデミックで3万かよ
629デフォルトの名無しさん:2007/04/03(火) 17:45:41
D7でDBのBLOBフィールドに保存してある画像をMS WORDに貼り付けたいんですがどうやったらいいでしょうか。
630デフォルトの名無しさん:2007/04/03(火) 17:49:20
>>629
少なくとも多少は自分で試したんだろ?
添削用のソースを出すように。
631デフォルトの名無しさん:2007/04/03(火) 20:05:30
ListBoxの水平方向にスクロールバーをつけたいのですが
どうしたらいいでしょうか?
632デフォルトの名無しさん:2007/04/03(火) 20:06:58
D6です
簡単な円グラフみたいのを書きたいんですが、CLXのpieみたいな
角度で扇形を書く方法はないでしょうか?

将来的に手書き風円グラフを作ってみたいので、
チャートとか使わずに書いてみたいのです。
633デフォルトの名無しさん:2007/04/03(火) 20:17:13
>>631
LB_SETHORIZONTALEXTENTでぐぐる。
634598:2007/04/03(火) 21:55:34
>>605
ありがとうございます。

メモリリークの心配を減らすために通常の作り方をやめて、
インスタンスをきっちり管理するフレームワークを作ってまして。
実行時型変数の実体化のタイミングだけよくわからないように
なってました。解決できてよかったです。
635デフォルトの名無しさん:2007/04/04(水) 00:33:06
Turbo Delphi 無料版でTntを使いたいのですが
プロジェクトにunitを追加し、ボタンとかを動的に作成すれば使えるのでしょうか?
636デフォルトの名無しさん:2007/04/04(水) 01:06:42
>>365
Yes
637デフォルトの名無しさん:2007/04/04(水) 01:16:16
>>636
みすってるよ
638デフォルトの名無しさん:2007/04/04(水) 03:11:34
TEditの右寄せ自作コンポはよく例を見かけるのですが、TComboBoxの右寄せ版がちょっとみつかりません、、
優しい方、教えてください。
639デフォルトの名無しさん:2007/04/04(水) 08:08:04
public
{ Public 宣言 }
procedure MyProc(var a:integer;const b:integer);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var a,b:integer;
begin
a:=1;
MyProc(a,b);
Label1.Caption:=IntToStr(b);

end;

Procedure MyProc(var a:integer;const b:integer);
b:=a+1;
end;
end.

MyProcっていう手続きで、bにa+1を代入したいのですが
MyProc(a,2)だとa:=a+2と同じようなことをしたい

これだとコンパイルできません
Myproc関数のどこを直せばいいんですかね?
640デフォルトの名無しさん:2007/04/04(水) 08:11:13
Procedure TForm1.MyProc(var a:integer;const b:integer);
641デフォルトの名無しさん:2007/04/04(水) 08:21:36
できますた。
Tform1.をつけなきゃだめなんですか。。。
なれないと難しいですね^^;
642デフォルトの名無しさん:2007/04/04(水) 09:34:31
ここでも構造化の尻尾の弊害が・・・。

メソッドとたんなる手続きの違いがよくわかってないんだな。
643デフォルトの名無しさん:2007/04/04(水) 10:28:16
>>639
type
TForm1 = class(TForm)
private
{ Private 宣言 }
public
{ Public 宣言 }
  procedure MyProc(var a:integer;const b:integer);
end;
ここで宣言したってことはTFormクラスのメンバー手続きとしてMyProcを宣言したことになる
ということは実装部は
procedure TForm1(クラス名).MyProc(var a:integer;const b:integer);
としないとダメなのは他のクラス作成の手順と同じ

Tform1.をつけたくないなら
{$R *.dfm}の下だけに
Procedure MyProc(var a:integer;const b:integer);
begin
b:=a+1;
end;
と先ず手続きを定義して
procedure TForm1.Button1Click(Sender: TObject);
var a,b:integer;
begin
a:=1;
MyProc(a,b);
Label1.Caption:=IntToStr(b);
end;
とすればOKだよ
644デフォルトの名無しさん:2007/04/04(水) 10:34:25
なんでコンパイルが通るんだろ。定数パラメータに代入してるのに・・
645デフォルトの名無しさん:2007/04/04(水) 10:35:16
自分で作った関数の中から、クラスのプロパティが使えないんですが何故なんでしょうか?
例えば function MySplit(const target: Integer) から Edit1.Textなどが見れないんです。
implementationより下に直接関数を書いてるだけなんですが、これがいけないんでしょうか?
646デフォルトの名無しさん:2007/04/04(水) 10:36:57
>MyProcっていう手続きで、bにa+1を代入したいのですが
Procedure MyProc(var a:integer;const b:integer);
>>b:=a+1;


a:=b+1にしないと
constを書き換えようとしてるというエラーを吐くかと
647デフォルトの名無しさん:2007/04/04(水) 10:42:26
>>645
Edit1はForm1の所有物だから。
TForm1.MyfuncのようなForm1のfunctionからなら自由にアクセスできるが
TForm1とかつかない関数からアクセスする場合には、Form1.Edit1といったようにしてアクセスする必要がある。
648デフォルトの名無しさん:2007/04/04(水) 10:51:11
>自分で作った関数の中から、クラスのプロパティが使えないんですが何故なんでしょうか?
コンパイラーが吐いてるエラー通り未定儀だからです^^;

Edit.TextなどはTFromクラスのプロパティだから
関数内で使う場合は
クラス名.プロパティでつかわないといけないのは当たり前

自作関数内でEdit1.Textなどを参照したいなら
function MySplit(const target: Integer)
begin
 Form1.Edit1.Text <<どのクラスのプロパティか明示する
end
とするか
function MySplit(const target: Integer; Edit: TEdit) 引数にクラス型を指定すれば
begin
 edit.txt などと中で使えます
end

使う時に
MySplit(target.Edit1,)などとすればOK

649デフォルトの名無しさん:2007/04/04(水) 13:13:49
Pascalで、8進表示をするにはどうすればいいですかね
16進表示なら$数値で$FF=255ってやればいいんだけど
650デフォルトの名無しさん:2007/04/04(水) 13:36:31
>>649
簡単にやる方法はない筈
651デフォルトの名無しさん:2007/04/04(水) 13:42:26
数値を指定した8進数に変換する関数
function IntToOct(Value: Integer; Digits: Integer):string;
 var i:Integer;
begin
 Result:='';
  for i:=0 to Digits -1 do begin
  Result:=Char(Ord('0')+(Value and 7))+Result;
  Value:= Value shr 3;
  end;
end;
652デフォルトの名無しさん:2007/04/04(水) 13:46:10
発声時の唇の動きを再現するコンポーネントを大分昔に見た気がするのですが、
どなたか心当たりはありませんか?
653デフォルトの名無しさん:2007/04/04(水) 14:20:58
>>651
そりゃ無理矢理やればそうできるけどさあw
stringだし
654645:2007/04/04(水) 15:03:45
>>647-648
よく分かりました。
ありがとうございました。
655デフォルトの名無しさん:2007/04/04(水) 17:36:27
656デフォルトの名無しさん:2007/04/04(水) 19:27:33
>>655
有難う御座います。
657デフォルトの名無しさん:2007/04/04(水) 21:13:08
C言語だと
printf("%d\n",65+'A')
みたいに
int型数値+char型みたいなことができるけど
デルファイじゃできないの?
658デフォルトの名無しさん:2007/04/04(水) 21:17:14
Ord('A')?
659ななしへたぐらま ◆XcB18Bks.Y :2007/04/04(水) 21:37:26
>>610
リテラル定数と識別子の違いを理解するのはプログラミングの初歩ですから
きちんと教えたほうが良いでしょう.

昔のBASICなどだとPRINT Aと PRINT "A"の違いをいつの間にか認識することになりますが
VB世代の人たちには意識的に説明しないと駄目なんだと思います.

>>627
VCLのソース(例によってDelphi 5)を見たらそのままAPIのPieを呼び出していました.

>>631
垂直スクロールバーを表示させずに水平スクロールバーだけを表示させるということでしたら
Columnsに1以上を代入してください.
リストボックスコンポではColumnsの値が0だと縦スクロール,1以上だと横スクロールで
1だと横1段,2だと横2段,…という風になります.

>>654
別のやり方としてMySplitをTForm1のメソッドにする方法があります.
というか関数や手続きではなくメソッドもするのが基本です.
ほかのプログラムでも使い回せそうなものだけ関数や手続きにするとよいでしょう.
660629:2007/04/04(水) 22:03:50
>>630
procedure TForm1.Button2Click(Sender: TObject);
var
FileName : String;
wapp,wdoc: Variant;
w,h:real;
begin

FileName := 'C:\template.doc';
Wapp := CreateOleObject('Word.Application');
try
wapp.Documents.Open(FileName);
wdoc := Wapp.ActiveDocument;
wdoc.saveas('C:\test.doc');
dbImage1.Picture.SaveToFile('c:\test.bmp');
w := DBImage1.Picture.Width;
h := DBImage1.Picture.Height;
Wdoc.shapes.AddPicture('C:\test.bmp',top:=200,Left:=200,Width:=50,height :=h/w*50);
Wapp.Visible := true;
except
wapp.quit;
end;
end;


いろいろ試行錯誤していったんファイルに落としてからこんな感じで画像の挿入まではできたんですが、
top,leftに何を指定しても表の最初のセルに入ってしまいます。

表の指定セルか表の上から任意の位置に挿入する方法がありましたら教えてください。
あと、ファイルに落とさず直接画像を挿入する方法があればそれも教えてください。
661ななしへたぐらま ◆XcB18Bks.Y :2007/04/04(水) 22:12:02
>>657
明示的に型変換する必要があります.
文字から数値への変換はord関数,数値から文字への変換はchr関数を使います.

Delphiの先祖であるPascalではケアレスミスを防ぐという考えから数値型と文字型は厳格に区別されます.
なお関数といってもDelphiコンパイラはサブルーチンを呼び出すのではなく型キャストするだけなので速度上の問題はありません.
662487:2007/04/04(水) 23:29:34
任意の名前の変数を生成する方法で悩んでおります。

例えば文字列型の変数を生成する場合、
任意でない名前の変数であれば Var S:String;
で済みますが、任意の名前の変数の場合は一体どうすればよいのやら
見当がつきません。

なにとぞご教授のほどをm(_ _)m

663デフォルトの名無しさん:2007/04/04(水) 23:31:42
664662です:2007/04/04(水) 23:32:30
すみません
名前欄を間違えました。
本スレの487氏ではありません。
665デフォルトの名無しさん:2007/04/04(水) 23:38:16
>>662
VCLってお手本があるんだからユニット名、クラス名、メソッド名、プロパティ名を参考にすればよし。
何のための機能なのかが明確ならあとは英語の辞書引くだけだし。
666ななしへたぐらま ◆XcB18Bks.Y :2007/04/05(木) 00:08:16
>>662
『任意の名前の変数を生成する』って実行中にということですか?

実行時に生成できるのはコンポーネントであって変数ではありません.
設計時にコンポのNameプロパティを書き換えると対応する変数の名前も同じように変わりますが,
これは統合環境が自動的に対応する変数の名前を書き換えているだけです.

的はずれなエスパーレスだったらごめんなさい.
667662:2007/04/05(木) 00:20:22
>666
そうでしたか、ありがとうございました。
お察しのとおり(と解釈したのですが)、プログラムの実行中に、
(例えばEdit)コンポーネントに'ABC'が入力されたされたならば、
var ABC : String;
という効果を顕す方法は?
という意味での質問でした。

拙い日本語で申し訳ございません。

668610:2007/04/05(木) 00:23:04
>>659
>リテラル定数と識別子の違いを理解するのはプログラミングの初歩ですから
>きちんと教えたほうが良いでしょう.
おまえさんにとって「きちんと教える」って事は
>>590に答えがあるのにベタベタ貼り付ける事なのか?
流し読みするならレスするな
669デフォルトの名無しさん:2007/04/05(木) 00:50:15
668よ
とりあえず死んでくれ
670デフォルトの名無しさん:2007/04/05(木) 00:51:23
まぁ賛否両論だろうな
俺は個人的には>>668に賛成
口調は悪いけどな
671583:2007/04/05(木) 01:21:32
>>601
遅レスだけどありがとう。
>>602
すみません。精進します。

↓で出来ました。

宣言
Listitem:TListitem;
 (略)

中身(?
Listitem:= Listview1.Items.Add;

with ListItem do
 (略)
672デフォルトの名無しさん:2007/04/05(木) 01:42:55
>>667
具体的には何をしたいのでしょう?
Delphiの変数を動的に生成したいというのなら無理ですが
自分でインタプリタを作りたいのであれば努力しだいです。
673デフォルトの名無しさん:2007/04/05(木) 03:23:41
クラスのインスタンスの Name プロパティーとインスタンス変数を混同してるだけだよ。
よくある間違いだが説明が難しい。
674デフォルトの名無しさん:2007/04/05(木) 03:24:39
おれも>>668に同感
675デフォルトの名無しさん:2007/04/05(木) 05:17:55
virtualとdynamicの違いが分かりません。C++で例えて、説明できますか?
676デフォルトの名無しさん:2007/04/05(木) 05:39:08
>>667
動的に変数を生成して何をするつもりなの?

変数はそもそも1つの名前で様々な「値」を格納するためのもの
「値」ごとに変数を作成するなら「値」そのものを使えば良くね?
677デフォルトの名無しさん:2007/04/05(木) 08:25:09
>>667
よしっ、わかった。俺エスパー。

連想配列を使うんだ。
Memo1.Lines.Values[Edit1.Text] := '文字';
s := Memo1.Lines.Values[Edit1.Text];
のように使える。
678デフォルトの名無しさん:2007/04/05(木) 11:26:39
>>662
回答とは違いますが、
「任意でない名前の変数」→「静的に定義した変数」
「任意の名前の変数」→「動的に変数名を変更する」
という表現をしたほうが、回答者が意図を理解しやすいです。

また、Delphiに限らず、動的に変数名を変更するのは
あまり一般的な方法ではありません。
何のために動的に変数名を変更したいのでしょうか?
そこを言っていただいたほうが、恐らく別の楽な方法を提示できると思います。
679ななしへたぐらま ◆XcB18Bks.Y :2007/04/05(木) 14:34:39
>>668
質問者は恐らくリテラル定数と識別子の違いをまだ理解していない状態だと思われたので
>>590では解決せず,具体例を見せてこの違いを理解してもらうのが良いと思ったのですが
「きちんと」という表現はまずかったと思います,すいません.

>>606-607は途中を(中略)とか書いて端折ればレスを大幅に短くすることはできたとは思いますけど,
荒らし呼ばわりはしなくてもよいのではないかと思います.

>>675
virtualとdynamicでは内部処理が違うだけでC++の仮想関数のように働きます.

http://support.borland.com/entry!default.jspa?categoryID=148&externalID=4350&printable=true
dynamic(動的メソッド)だとコードを小さくなるかわりに速度が犠牲になるようですが
普段はvirtual(仮想メソッド)だけ使えばよいのではないかと思います.

680デフォルトの名無しさん:2007/04/05(木) 14:58:37
dynamicは仮想関数とは少し違う

dynamic相当構文はC++には無い
windowsのメッセージの仕掛けを巧く処理出来るように考えられたものだろう

virtualによる継承やinterfaceの実装は、そのメソッド名がキーになるが
dynamicではメッセージIDがキーになる
だからdynamicの場合別名にする事が可能だ

逆にdynamicの場合、そのメソッドを直接呼び出した場合、virtualとは動作が異なる
dynamicを仮想関数と呼ぶのはその点で誤解を招く

dynamic(動的メソッド)はPerform(Dispatch)による間接呼び出しに対して多態性を提供するもの
virtual (仮想メソッド)は、その名前を使ったメソッドの呼出しに対して多態性を提供するもの

こんなところでどうだろうか?
681デフォルトの名無しさん:2007/04/05(木) 18:47:05
まあ、よっぽどのことが無い限りVirtualを使え、ってどの本にも書いてあるな
682680:2007/04/05(木) 19:33:57
ゴメン、勘違いでした。 なぜ誰も突っ込んでないんだ?
683デフォルトの名無しさん:2007/04/05(木) 21:07:00
5時間
684デフォルトの名無しさん:2007/04/05(木) 21:51:54
>>680
それは単に特性に合わせて使い分けた結果だろ(^^;

virtual はメソッドのポインタのエントリを継承するたびにコピーする.
その結果メモリ消費量が多いけどテーブルを一つだけ見ればいいので速い.
virtual のメソッドテーブルは VMT(Virtual Method Table)と呼ばれる.

dynamic は親クラスのメソッドテーブルへのポインタを保持する.
その結果メモリ消費量は少ないけど、自分のクラスで定義されていないメソッドは親のテーブルにさかのぼって参照しないといけないので遅い.
dynamic のメソッドテーブルは DMT(Dynamic Method Table)と呼ばれる.
685デフォルトの名無しさん:2007/04/05(木) 22:04:04
もっとわかりやすく書くと

dynamic = 遅い代わりに消費メモリが少ない virtual

まあ、空きメモリが1桁だった頃の遺物だ
686662&668:2007/04/05(木) 23:26:10
いろいろレスをいただいてありがとうございます。
そもそもの目的というものは実はありませんでして、
大昔のふべ(CZ-8FB02)では(マシン語でルーチンを書かなければ)できなかったことが、
今時のプログラミング言語ならば出来るのかも、
と思い質問してしまいました。

「任意でない名前の変数の生成」というのは、かなり特殊なものである、
ということは理解できました。
レスを下さった皆さまに御礼申し上げます。

※668さんの指摘された事柄ではありますが、変数名の「変更」ではなく、
飽くまでも「生成」についての質問でしたので、
ここでは敢えて「任意でない名前の変数」との表記を
継続いたしました。
687訂正です:2007/04/05(木) 23:28:47
前レスの
「668さん」 → 「678さん」
です。
688デフォルトの名無しさん:2007/04/06(金) 01:14:33
>>686
変数に対して何か誤解がありません?
コンパイル後のオブジェクトコードに変数は残りませんよ.
大半はスタックポインタからの相対アドレス、一部はレジスタでメモリには割り付けられません.
変数名が存在するのはソースコードまでですよ.
インタプリタ言語とかは変数テーブルを持っていますけどね.
689672:2007/04/06(金) 01:45:26
>>686
ひょっとしたら動的なメモリ割り当てのことかなとか?思ってたんですが、、、
>大昔のふべ(CZ-8FB02)では(マシン語でルーチンを書かなければ)できなかったことが、
ますます意味がわかりませんね
かつてHuBASICでもZ80でもばりばりプログラム書いてた身としては、
なんのことなのかものすごく気になりますw
690デフォルトの名無しさん:2007/04/06(金) 12:29:58
調べ方がわからないのでお願いします
例えばフォームにボタンとラベルがあって、
vbのようにそのまま
procedre aaa(); //←自分で作った
begin
label.Caption := 'aaa';
end;

procedure TForm1.buttonClick(ry);
begin
aaa();
end;
とやろうとしたらaaaのほうでラベルを読み込んでくれませんでしたorz
なにか付け足すものがあるのでしょうか?
691デフォルトの名無しさん:2007/04/06(金) 12:49:21
procedure TForm1.aaa;
692デフォルトの名無しさん:2007/04/06(金) 12:53:38
TForm1のなかにaaaを定義して
procedre tform1.aaa();
begin
label.Caption := 'aaa';
end;
693デフォルトの名無しさん:2007/04/06(金) 12:54:50
>>686
目的ではなく手段だけ尋ねられているから、分かりにくいんですね。
処理中の変数の生成であれば、やはり「任意・・・」よりも「動的な変数の生成」
という表現のほうが、一般的には意図を把握しやすいと思います。

元も子もないのですが、仮に動的に変数名が生成されても、それを処理する部分で
結局つまづくのではないかと思いますが・・・("If" などでその変数名を指定出来ない)。
そもそも一般的な方法ではないので、あまりいい方法とは言えないと思います。

動的に変数名を指定し生成することは不可能ですが、ご存知のとおりSetLengthで
配列変数を動的に増やすことは可能です。
または、2次元配列で管理すれば、任意の値と動的な文字列を並列に保てます。
694デフォルトの名無しさん:2007/04/06(金) 13:04:02
>>691
できた!
SUGEEEEEEまじでありがd!!
695デフォルトの名無しさん:2007/04/06(金) 13:32:39
>>692も感謝!
リロードしてなかったよorz
696デフォルトの名無しさん:2007/04/06(金) 14:48:45
DelphiやっててC言語やってみようとおもったら、型に関することがちょっといい加減で曖昧でやりづらい><
697ななしへたぐらま ◆XcB18Bks.Y :2007/04/06(金) 16:23:58
>>686
昔のBASICはインタープリタで実行時にランタイムルーチンがソースコードを解釈しながら実行していましたので
実行時に変数名を参照したり変更したりできたわけですね.

しかしDelphiを含め,近年の開発ツールはコンパイラです.
つまりソースコードを完全なマシン語ルーチンに変換してから実行します.
(JavaとC#やVB.netの.net Frameworkのように架空のCPUのマシン語に変換しているものもあります)

そのためソースコードにある「変数」はメモリ領域になるかCPUのレジスタに化けます.
ソースコードにあった変数名は消滅して$0000D038みたいなメモリの番地か
EDXとかR7みたいなレジスタの名前が残っているだけで変更することもできません.

ある情報に名前を付けて管理する場合は
取り扱いたい情報に合わせてレコード型やクラス型を定義して使うか,
Delphiにはありませんが言語によっては配列の各要素に名前を付けたもの(連想配列)を使うこともできます.
(Delphiでも似たような処理はできると思います)
698デフォルトの名無しさん:2007/04/06(金) 16:30:56
Rubyつかっておけと
699デフォルトの名無しさん:2007/04/06(金) 16:46:27
>>697
インタプリタとコンパイラの違いで動的変数定義が出来ないのではない。
コンパイラがそういう仕様だからだよ。
700デフォルトの名無しさん:2007/04/06(金) 17:21:50
なんかCodeGearってとこからメールが来たんだが。
英語で書いてあるので意味不明。
701デフォルトの名無しさん:2007/04/06(金) 17:27:04
>>700
それスパムメールだぞ
無視すんのが一番
702デフォルトの名無しさん:2007/04/06(金) 20:08:37
変数名の変更なんか昔はじゃんじゃんやってたよ
PL/I のプリプロだけど   こういう意味じゃないとは思うが
703デフォルトの名無しさん:2007/04/06(金) 23:51:09
IBMの被害者乙
704527:2007/04/07(土) 00:31:04
>>528>>529>>549
大変亀レスで恐縮ですが、レスありがとうございました。
ソースを見てもコンポーネントの使い方がいまいち分からなかったので、
結局自作コンポーネントを作ってしまいました。
想定外の操作をすると何が起こるかわからないという危険な状態ですが、
一応自分で意図していた程度のことはできるようになりました。
本当にありがとうございました。

なんだか四角い車輪が出来たような気もしますが、
せっかく作ったのにもったいないので晒しておきます。
http://babelii.s19.xrea.com/soft/CommProcessCompo/CommProcessCompo001.zip
705デフォルトの名無しさん:2007/04/07(土) 00:48:09
ほげ
706デフォルトの名無しさん:2007/04/07(土) 02:46:58
Turbo Delphiを使っているのですが
PCharをプシャーと読んでいるのは俺だけですか?
707デフォルトの名無しさん:2007/04/07(土) 02:48:36
ぷっちゃー
708デフォルトの名無しさん:2007/04/07(土) 03:29:18
ぴーちゃー
709デフォルトの名無しさん:2007/04/07(土) 07:12:23
>想定外の操作をすると何が起こるかわからないという危険な状態ですが、
>一応自分で意図していた程度のことはできるようになりました。
そういうあぶない物を平気でうpするとは…
これがゆとry
710527:2007/04/07(土) 08:33:29
>>709
ヒント:免責
つーか、基本的に分かってる人しか使わない(はずな)ので、
大丈夫でしょ?
711デフォルトの名無しさん:2007/04/07(土) 08:51:57
ヒント:春厨に混じれ巣禁止
712527:2007/04/07(土) 10:49:01
「ヒント:」とか書いてる人は頭悪そう。
自分の言いたいことを説明するだけの文章力がないから誤魔化しているんだろうけど。
713デフォルトの名無しさん:2007/04/07(土) 11:19:03
ヒント : 「「ヒント:」とか書いてる人は頭悪そう」 とか書いてる人は頭悪い
714デフォルトの名無しさん:2007/04/07(土) 11:23:13
これが再帰です。
715610:2007/04/07(土) 12:13:27
春ですか、そうですか


そ う だ さ く ら を 見 に 行 こ う
716デフォルトの名無しさん:2007/04/07(土) 12:44:40
スマン名前が残ってた
717デフォルトの名無しさん:2007/04/07(土) 13:11:05
>>715
お前そうやって年中ここの住人やコテを煽ってるんだな
718デフォルトの名無しさん:2007/04/07(土) 15:53:31
>>710
>>712
ここは釣堀ですか?
719527 ◆0ns.hcXrLI :2007/04/07(土) 17:04:41
712は自分じゃないです。
念のためにトリつけておきますね。
720デフォルトの名無しさん:2007/04/08(日) 00:12:55
postMessage(TargetWnd,WM_KEYDOWN,VK_ESCAPE,0);
postMessage(TargetWnd,WM_KEYUP,VK_ESCAPE,0);

これが、sendmessageでもESCが何ででしょう?
721デフォルトの名無しさん:2007/04/08(日) 00:22:35
すみません↑意味不明になってました。
上のだとESCが押されたことにならないのです。
他のF12とかならなるのですけれども。
722デフォルトの名無しさん:2007/04/08(日) 00:54:38
TreeViewの「ノードが選択された」というイベントってありますか?
723デフォルトの名無しさん:2007/04/08(日) 01:24:20
ある
724デフォルトの名無しさん:2007/04/08(日) 01:52:02
すみません、何というイベントか教えて下さい。
725デフォルトの名無しさん:2007/04/08(日) 01:52:54
OnChange
726デフォルトの名無しさん:2007/04/08(日) 02:05:31
ありがとうございます。
727デフォルトの名無しさん:2007/04/08(日) 02:38:05
オリジナルのプログラムをお持ちの方いらっしゃいませんか?
この度クレジット決済でスムーズにダウンロード売買が
できるサイトを立ち上げました。
つhttp//web-cart.jp/
※会員登録&商品のうp全て無料です!
クオリティの高い商品のうpをお待ちしてますw
728527 ◆0ns.hcXrLI :2007/04/08(日) 12:23:03
>>727
これはいいですね、ぜひうpしたいとおもいます。
729デフォルトの名無しさん:2007/04/08(日) 15:03:58
>>661
>文字から数値への変換はord関数,数値から文字への変換はchr関数を使います.

>Delphiの先祖であるPascalではケアレスミスを防ぐという考えから数値型と文字型は
>厳格に区別されます.なお関数といってもDelphiコンパイラはサブルーチンを呼び出す
>のではなく『型キャスト』するだけなので速度上の問題はありません.

型キャストだったんですね。知らなかった…

それで、VCLのどの辺で実装されてるのか知りたく思ったのですけれども
C:\Program Files\Borland\Delphi6\Source\Rtl\Win
C:\Program Files\Borland\Delphi6\Source\Vcl
の辺りを探せば良いでしょうか? Delphi6のperspnalだと無理ですか?
kylixの実装でも構いません。windows上で読めるsourceを探しています。
どうぞよろしくお願いします m(_ _)m
730デフォルトの名無しさん:2007/04/08(日) 15:05:33
delphi買え
731デフォルトの名無しさん:2007/04/08(日) 15:16:33
Delphi6 PersonalにはVCLソースはついていない。
Turbo Delphi ExplorerにはVCLソースついてるから
入れるだけ入れとけ。
732デフォルトの名無しさん:2007/04/08(日) 15:18:14
Delphiの関数は

1、ソースがpascalで書かれていて普通に読めるもの

2、ソースがasmで書かれている普通の関数 例 SysUtils.pasの多くの関数

3、System.pasに特殊な形で記載されてる関数
 3-1 先頭 _が付いているが型情報などを付けてないだけの特殊な関数
 3-2 _WriteXXXX のように補助関数があり、コンパイラが自動的に引数に応じて分解する関数

4、ソースは無く、コンパイラがその場で変換する
例 Ord Abs


のように別けられますが、4の場合はコンパイラそのものが処理しているので
どこにもそのソースはありません。 コンパイル結果として出て来るだけです
733デフォルトの名無しさん:2007/04/08(日) 16:29:52
質問です。
TSplitterでサイズの変更をしているのですが、サイズ変更の設定を保持しないようにするにはどうしたらよいでしょうか?
常にデフォルト状態で起動したいんです。
よろしくお願いいたします。
734デフォルトの名無しさん:2007/04/08(日) 16:35:05
ええと、サイズ変更の設定を保持するのを自前でやってるのでしょ?
それは自分じゃないの?
735デフォルトの名無しさん:2007/04/08(日) 16:42:06
SplitterではなくターゲットコントロールのWidthまたはHeightを保存する
736デフォルトの名無しさん:2007/04/08(日) 18:22:39
Editに文字を入力した後エンターを押すことでButtom1をクリックしたときのイベントを起こしたいのですが、
EditのOnEnteにButton1Clickを設定しても上手く動きません。実際に動かすと、フォーカスを得たときにイベントが発生しているようです。
どこが間違っているのでしょうか?Turbo Delphi 2006です。
737デフォルトの名無しさん:2007/04/08(日) 18:31:04
onEnterをヘルプで調べろ

procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(edit1.Text);
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if key=chr(vk_return) then button1.OnClick(self);
end;
738729:2007/04/08(日) 18:41:09
>>732
>4、ソースは無く、コンパイラがその場で変換する
よく考えたら、型キャストなのだから、関数を呼んでる訳がないですよね orz

>>731
インストールのほう大変そうなので5月の連休辺りに挑戦してみようと思います。
http://www.turboexplorer.com/jp/downloads BDNのアカウントを取得->インストールキーの入手
http://itpro.nikkeibp.co.jp/article/COLUMN/20061127/254990/?ST=develop&P=2 ファイルを三つ落す
http://itpro.nikkeibp.co.jp/article/COLUMN/20061127/254990/?ST=develop&P=3 モジュールを五つインストールする

ありがとうございました!助かりました!
739デフォルトの名無しさん:2007/04/08(日) 20:32:10
>>736
OnEnter ってエンターキーのことではないぞ。
こんな時普通は、Default プロパティを True にする。
740デフォルトの名無しさん:2007/04/08(日) 20:56:21
型付きファイルってどんなとき役に立つの?
pythonのpickleに似てるような気がするけど。
741デフォルトの名無しさん:2007/04/08(日) 22:56:07
型つきのファイルってのは初耳です。
742デフォルトの名無しさん:2007/04/08(日) 22:58:23
>>741
いちいちそんなレスしなくて結構です
743デフォルトの名無しさん:2007/04/08(日) 23:12:33
>>740
つまりさ、CなんかだとINIファイルを作るのが大変だったりするわけで、
そういう場合、設定をファイル化するのに簡単な方法が型付きファイル

設定用のレコード型を作ってさ、それを読み書きするのよ。
INIファイルにくらべると、設定ファイルはバイナリエディタでしか見れないというのがやっかいだな
744デフォルトの名無しさん:2007/04/08(日) 23:23:00
それだけ?
745デフォルトの名無しさん:2007/04/08(日) 23:28:49
型付きファイルは互換性の為に残ってるようなもので
ストリームに対して構造体をそのサイズだけ writeするのと等価だから
そっちで書いた方がいいよ
746デフォルトの名無しさん:2007/04/08(日) 23:47:07
>>740
バイナリデータを読み書きする時たまに使うぐらい
レコード型の配列なんかを扱う場合にはまあ使える

TFileStreamとかTMemoryStreamを使ったほうが楽だけど
それらはファイル全体をメモリに読み込むのでメモリを多く使っちゃう
もっとも湯水のごとくメモリが使える今となっては大した問題じゃない
もはや過去の産物
747デフォルトの名無しさん:2007/04/09(月) 00:30:10
>TFileStream(略)
>それらはファイル全体をメモリに読み込むので

そんな事有りません。
748デフォルトの名無しさん:2007/04/09(月) 01:00:31
ガイシュツだったらすみません。
デル6パーソナルで、EXCEL関連を操作しようとしたらどういう方法がよいでしょうか?
749デフォルトの名無しさん:2007/04/09(月) 01:46:13
CreateOleObjectでExcel.Applicationを呼び出すのが一番お気楽。
750デフォルトの名無しさん:2007/04/09(月) 01:50:59
>>749
どうもです。
その線であたってみます!
751お願いします:2007/04/09(月) 07:42:54
はじめまして、おまえら。
最近Delphiを始めた初心者です。
RichEditに入力された文字列に検索をかけたくて、FindTextメソッドを試しているのですが、どうもうまくいきません。

RichEdit1に"This is a test."という文字列が入力されているとお考えください。
procedure TForm1.Button2Click(Sender: TObject);
var i: Integer;
begin
i := RichEdit1.FindText('test',0,Length(RichEdit1.Lines.Text),[]);
RichEdit1.SelStart := i;
RichEdit1.SelLength := 4;
end;
こんな具合にテストしているのですが、必ず文末の空白部分が選択されてしまいます。

This is a test.■
こんな具合です。

デバッグしてみると、FindTextを使っている行で、-1の値しか戻ってきていません。
つまり、検索された文字は存在しないものと認識されてしまいます。なぜ?
どなたかご教示ください。
もうちょっとで泣きそうでびびてばびでぶ。
752デフォルトの名無しさん:2007/04/09(月) 07:44:16
コンポーネントにある、TTable+Paradoxでは理論値でいくつのデータを追加できるんでしょうか?
また、実際運用するとなると、何件くらいにとどめておくのが現実的なんでしょうか?
753デフォルトの名無しさん:2007/04/09(月) 07:51:10
>いくつのデータを
すげー抽象的
754デフォルトの名無しさん:2007/04/09(月) 07:55:28
コレで動いたけどなあ?

procedure TForm1.Btn1Click(Sender: TObject);
var i,len: Integer;
begin
RichEdit1.Lines.Text:='"This is a test."';
len:=Length(RichEdit1.Lines.Text);
i := RichEdit1.FindText('test',0,len,[]);
RichEdit1.SetFocus;
RichEdit1.SelStart := i;
RichEdit1.SelLength := 4;
end;
755デフォルトの名無しさん:2007/04/09(月) 08:04:57
>すげー抽象的

フィールド数によって変わるんですか?
756デフォルトの名無しさん:2007/04/09(月) 08:14:19
>>755
EXCEL思い浮かべてみればいいと思うよ
757デフォルトの名無しさん:2007/04/09(月) 08:36:17
PARADOXは昔のデータベースエンジンだから32bitの制限 =2Gの壁があった筈
ファイルサイズ2Gが制限になるという事。
レコードサイズで除算すれば求まるだろう。
その他の細かい制限は
DBIMAXで始まる変数にあったように思う
758デフォルトの名無しさん:2007/04/09(月) 10:01:48
>ファイルサイズ2Gが制限になるという事。

なるほど…
やっぱオラクルとかの勉強に切り替えたほうがいいみたいですね。
お勧めのDBを教えてもらっていいですか?

>>757
ありがとうございます。
759デフォルトの名無しさん:2007/04/09(月) 10:13:10
FireBird
760デフォルトの名無しさん:2007/04/09(月) 11:19:33
↑にもう一票
761デフォルトの名無しさん:2007/04/09(月) 14:47:01
つまずいた、本もないし調べてもでてこないのでお願いしますorz
j:Integer;
Line : String;
j=0;
Line := 'a,b,c,d,e,f';
だとして、
gridstring1[0,j]に,で区切られた語を入れる
    0  1
j |a ̄ ̄ ̄| ̄ ̄ ̄|
j+1|b ̄ ̄ ̄| ̄ ̄ ̄|
j+2|c ̄ ̄ ̄| ̄ ̄ ̄|
  |  ̄ ̄ ̄| ̄ ̄ ̄|

という風に表示させたいのですがどうすればいいのでしょうか、
聞きすぎるのもよくないとは思いますが説明してあるサイトだけでもいいのでご存知でしたらよろしくお願いします。
762デフォルトの名無しさん:2007/04/09(月) 15:16:42
gridstring1.Cols[0].CommaText := 'a,b,c,d,e,f';
763デフォルトの名無しさん:2007/04/09(月) 15:20:10
gridstring1.Cells[0,j] := 'a';
764デフォルトの名無しさん:2007/04/09(月) 16:29:21
>>762
できました、ありがとう!
これで山を一つ越えた気がした・・・
>>763
それはまんまですねw
765デフォルトの名無しさん:2007/04/09(月) 16:31:53
初心者はTStrings/TStringListのリファレンス熟読して全メソッド・プロパティを丸暗記しろ。
あらゆるところに使われまくってるから理解していないと効率が悪すぎる。
766お願いします:2007/04/09(月) 17:29:44
>>754
レスありがとうございます。
>>754のprodedureの中身をそのままコピーしても同じ結果です。
文字コードか何かの関係でしょうか。
767デフォルトの名無しさん:2007/04/09(月) 17:50:08
>>751
FindText('text',・・・
だったりしてw
768デフォルトの名無しさん:2007/04/09(月) 18:25:11
>>766
同じ結果っていうのは
>必ず文末の空白部分が選択されてしまいます。
この症状のままってこと?

>>754
procedure TForm1.Btn1Click(Sender: TObject);
になってるから
そのままコピペだけだとエラーなっちゃうはずだけど
まさかそこからじゃないよな?

>prodedure
を見て少し不安になったw
769デフォルトの名無しさん:2007/04/09(月) 18:38:04
すみません
どなたか>>720 721をおながいします
770お願いします:2007/04/09(月) 19:18:23
>>768
>この症状のままってこと?
はい。そうです。

>procedure TForm1.Btn1Click(Sender: TObject);
>になってるから
>そのままコピペだけだとエラーなっちゃうはずだけど
>まさかそこからじゃないよな?

中身をコピペしただけです。
コンパイルエラーはありません。
testとtextの間違いでもありません。
あと、半角と全角の間違いとかでもありません。
コーディングミスではなさそうなのですが。。。

ただ、英語バージョンなので、RichEditのフォントをPゴシックにしたり、
プロパティを多少いじりました。
そこら辺が問題なのでしょうか。
771デフォルトの名無しさん:2007/04/09(月) 19:23:09
>>770
> ただ、英語バージョンなので、RichEditのフォントをPゴシックにしたり、
> プロパティを多少いじりました。
> そこら辺が問題なのでしょうか。

デフォルトに戻して試してみればいいんじゃない?
772デフォルトの名無しさん:2007/04/09(月) 22:59:35
ここ http://blog.so-net.ne.jp/bousyo/2005-11-10-1 でいうところの
Delphi2005ユーザーの間では事実上のUpdate4「2005/09/13 非公式パッチ」
って今はもう手に入らないのでしょうか?

ググっても見つかりませんでした。
773デフォルトの名無しさん:2007/04/09(月) 23:07:52
>>772
普通にダウンロードできますが?
774デフォルトの名無しさん:2007/04/09(月) 23:40:12
すみまそん。Sleipnir で開いたらいけました。
Opera □\(.. )
775お願いします:2007/04/10(火) 05:02:48
>>771
ありがとうございます。
デフォルトに戻しても同じ結果でした。

そこで、Delphi for .Net から Delphi for Windows に切り替えて試したみたところ、何とうまくいきました。
これは.Netコンポーネントのバグなのでしょうか。
この点について情報をお持ちの方がいらっしゃいましたら、ご提供お願いします。

抜本的な解決には至りませんでしたが、アドバイスしてくれた皆さん、ありがとうございました。
また何かありましたら、よろしくお願いします。
776デフォルトの名無しさん:2007/04/10(火) 07:04:44
>>769
こんなコードで試してみたけど、ちゃんとESCも送れるようだよ。
相手が反応しないのだとしたら、相手の問題じゃないの?

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
memo1.Lines.Add(format(' %2.2X ',[ord(Key)]));
end;

procedure TForm1.Button1Click(Sender: TObject);
var TargetWnd:hwnd;
begin
TargetWnd:=Memo1.Handle;
postMessage(TargetWnd,WM_KEYDOWN,VK_ESCAPE,0);
postMessage(TargetWnd,WM_KEYUP,VK_ESCAPE,0);
end;
777デフォルトの名無しさん:2007/04/10(火) 16:11:32
たぶん送るコントロール間違えてるな
778デフォルトの名無しさん:2007/04/10(火) 20:43:44
>>776
ありがとうございます。もうちょっと色々試してみます。
779デフォルトの名無しさん:2007/04/11(水) 00:46:29
TurboDelphiでPageControlの上にGroupBox置いて
その上にラベル置いても下に隠れちゃうんだけどバグ?
ボタンとかは正常に手前に表示されるのに。
GBを背面に移動しても表示は変わらず。
780デフォルトの名無しさん:2007/04/11(水) 03:56:36
ボタンはウィンドウだからね。ラベルはたんあんる絵だから下になることもある。
貼りなおしてみては? 貼る順番はだいじだよ。
781デフォルトの名無しさん:2007/04/11(水) 07:50:35
ラベルのように TGraphicControl 継承のコントロールは貼り付けた窓の付属物
だから、Zオーダーは貼り付けた先と同じ
その上に別の窓を貼り付けたら当然隠れちゃうよ。

ラベルではなく StaticText ならTWinControl 継承だから 上に来る事も出来るよ
782154:2007/04/11(水) 15:33:44
いつもお世話になっております。
>>162のプログラムで、コマンドプロンプトに渡したファイルが
クローズできていない?のか、プログラムからファイルを上書きしようとしたときに
EFCreateErrorが出ます。
回避するにはどうすればいいでしょうか?
>>159の部分は変わっていません。
783デフォルトの名無しさん:2007/04/11(水) 17:53:02
ようするに perlのソースを作成してるのだけど、実行させると後で書き換えられないという事?
784デフォルトの名無しさん:2007/04/11(水) 19:38:58
>>782
ディレクトリはあるよね?
785デフォルトの名無しさん:2007/04/11(水) 19:42:43
Delphi2007Proを買ってしまいました。
むか〜し(Delphi7だったか?)作ったデータベースプログラムの
プロジェクトファイルを開こうとしたら、
ネットワークの初期化に失敗しました。
「ファイルまたはディレクトリが存在しません。
 ファイル:C:\PDOXUSR.NET
 アクセスは拒否されました。」
などというメッセージが出てきました。
これって、Paradoxのファイル共有時に使う設定ファイルか何かだったような
記憶があるのですが、たしかにCドライブにそんなファイルはありません。
Delphi7のときは、インストールすると勝手にできていたような…。
いまどきParadoxファイルなんか使うなよ!ということなんでしょうか?
そういえば、SQLエクスプローラも付いてないみたいだし…。
参ってます。よろしくお願いします。
786デフォルトの名無しさん:2007/04/11(水) 19:45:12
>>785
そういう仕様上のことはBorlandに直接聞いた方が…
787デフォルトの名無しさん:2007/04/11(水) 21:40:46
>785
プロジェクト内にActive=TrueなTTableコンポーネントがあったりして、それをローディングすると
ParadoxのDBを開こうとして、んでエラーになる、という流れなのでは?無視してプロジェクトを
開いてTTableコンポーネントを含むフォーム/データモジュールを保存して閉じる、というのは駄目?
788デフォルトの名無しさん:2007/04/12(木) 08:00:09
TCanvasに位置指定してpdfを描画するにはどうすればよいですか?
789デフォルトの名無しさん:2007/04/12(木) 08:31:21
pdf って PDFファイルの事?
だとすると、まずPDFファイルを描画モジュールに分解するかビットマップ又はwmfに変換しないといけないけど、
その目処はついてるの?
790デフォルトの名無しさん:2007/04/12(木) 12:20:13
デスクトップをクリックしてその場所の色を抽出するフリーウェアで
Delphiのソース公開されてるものってないですかね。
拡大鏡つきだとなおいいです。
791デフォルトの名無しさん:2007/04/12(木) 13:18:15
いいですね。
792デフォルトの名無しさん:2007/04/12(木) 14:22:31
拡大鏡無しバージョン
procedure TForm1.Timer1Timer(Sender: TObject);
var
 pt: TPoint;
 h: HDC;
 c: TColor;
begin
 GetCursorPos(pt);
 h := GetDC(0);
 with TCanvas.Create do
 try
  Handle := h;
  c := Pixels[pt.x, pt.y];
 finally free; ReleaseDC(0, h) end;
 Color := c;
 Edit1.Text := format('%6.6X', [c]);
end;
793デフォルトの名無しさん:2007/04/12(木) 14:30:03
拡大鏡のみ
procedure TForm1.Timer1Timer(Sender: TObject);
var
 pt: TPoint;
 h: HDC;
 c: TColor;
 x, y: Integer;
begin
 GetCursorPos(pt);
 h := GetDC(0);
 with TCanvas.Create do
 try
  Handle := h;
  for x := -16 to 16 do
  for y := -16 to 16 do
  begin
   c := Pixels[pt.x+x, pt.y+y];
   PaintBox1.Canvas.Brush.Color := c;
   PaintBox1.Canvas.Rectangle(x * 5, y * 5, x * 5 + 5, y * 5 + 5);
  end;
 finally free;
  ReleaseDC(0, h)
 end;
end;
794qwerty:2007/04/12(木) 17:21:25
√n=a√bの形に変換するプログラムをつくりたいのですが、
分かりません。 教えてください。
795デフォルトの名無しさん:2007/04/12(木) 17:27:46
宿題は自分でやれよ。
796qwerty:2007/04/12(木) 17:48:26
宿題じゃありません...
2次方程式の解を求めるプログラムで使いたいんですよ........
797デフォルトの名無しさん:2007/04/12(木) 17:53:13
>>796
なんで2次方程式の解を求めたいんだ?
それも数値で求めるんじゃなく数式処理系の解を
宿題じゃなけりゃ仕事か?
798デフォルトの名無しさん:2007/04/12(木) 17:54:42
sqrt
799デフォルトの名無しさん:2007/04/12(木) 17:56:22
2次方程式の解を求めるプログラムが宿題なわけだろ?
800デフォルトの名無しさん:2007/04/12(木) 17:56:54
ウゼェ
801デフォルトの名無しさん:2007/04/12(木) 18:50:49
総当りでも知れてるでしょ
procedure TForm1.Button1Click(Sender: TObject);
var
 n, a, b, k, i: Integer;
var
 s: string;
label
 loop;
begin
 n := StrToInt(Trim(Edit1.Text));
 a := 1;
 b := n;
 s := '';
 loop:
 for i := 2 to Trunc(sqrt(b)) do
 begin
  k := b div (i * i);
  if k * i * i = b then
  begin
   a := a * i;
   b := k;
   s := s + IntToStr(i) + ' * ';
   goto loop;
  end;
 end;
 s := s + '√' + IntToStr(b);
 Edit2.text := s;
end;
802801:2007/04/12(木) 19:09:25
まてよ。 2次方程式の解って事は nが整数限定じゃなくてnは複素数って事か?
803qwerty:2007/04/12(木) 19:51:05
他に誰かいませんか?
804デフォルトの名無しさん:2007/04/12(木) 19:54:39
>>803
>>801で不満なの? どう不満?
805デフォルトの名無しさん:2007/04/12(木) 20:10:26
var n:Integer=2;
 fStop, fGate: boolean;
procedure TForm1.Button1Click(Sender: TObject);
var a, b, k, i: Integer;
 s: string;
label loop;
begin
 if fGate then begin fStop := True; fGate := false; exit; end;
 fGate := True;
 while n>0 do begin
  s := '√' + IntToStr(n) + ' = ';
  a := 1; b := n;
 loop:
  for i := 2 to Trunc(sqrt(b)) do begin
   k := b div (i * i);
   if k * i * i = b then begin
    a := a * i;
    b := k;
    s := s + IntToStr(i) + ' * ';
    goto loop;
   end;
  end;
  if a <> 1 then
   if b = 1 then  Memo1.Lines.Add(copy(s, 1, length(s) - 3))
   else    Memo1.Lines.Add(s + '√' + IntToStr(b));
  inc(n);
  if (n and $FF) = 0 then Application.ProcessMessages;
  if fStop then  break;
 end;
 fGate := false; fStop := false;
end;
806デフォルトの名無しさん:2007/04/12(木) 20:22:22
高速化するとしたら素数列で割ることだろうけど、32bitの最大値くらいなら、そんな必要もないしな
807デフォルトの名無しさん:2007/04/12(木) 21:04:04
ここはとても親切なインターネッツですね
808デフォルトの名無しさん:2007/04/12(木) 21:09:47
まあ、もう少ししたら課題も増えるだろうから
宿題かんけいは、

Pascalの宿題は俺にやらせろ!!Part2
http://pc11.2ch.net/test/read.cgi/tech/1136994325/

こっちにお願いね
809デフォルトの名無しさん:2007/04/12(木) 21:12:29
あと, for i:=2 と なってるのを、2度目(goto loop後)からは 前回の値から始めた方がいい
だって例えば5までいってたら5以下では割れないから
810デフォルトの名無しさん:2007/04/12(木) 21:16:25
素数を数えていくプログラムとか来そうな予感がするw
811デフォルトの名無しさん:2007/04/12(木) 21:16:36
>>804
goto文を使っているところとか。
812デフォルトの名無しさん:2007/04/12(木) 21:33:41
 loop:
  for i := 2 to Trunc(sqrt(b)) do begin
   k := b div (i * i);
   if k * i * i = b then begin
    a := a * i;
    b := k;
    s := s + IntToStr(i) + ' * ';
    goto loop;
   end;
この部分
repeat
  Flag:=True;
  for i := 2 to Trunc(sqrt(b)) do begin
   k := b div (i * i);
   if k * i * i = b then begin
    a := a * i;
    b := k;
    s := s + IntToStr(i) + ' * ';
    Flag:=False;
   end; 
until Flag = True;
じゃダメなん?
813デフォルトの名無しさん:2007/04/12(木) 21:50:33
>>812 break が抜けているね
goto だと for ループをブレークして、なおかつリピート出来るからね
814デフォルトの名無しさん:2007/04/12(木) 21:57:29
>>812のがbetterだね(Break抜けてるけど
Goto文は最後の手段
できるだけ使わない方が良い
815デフォルトの名無しさん:2007/04/12(木) 22:10:57
> Goto文は最後の手段

何で嫌われてるのかね?
おいらは使いまくってるよ
816デフォルトの名無しさん:2007/04/12(木) 22:26:15
2重ループにするなら goto の方がマシだろう
goto が嫌いなら while にすれば >>809も簡単だ

procedure TForm1.Button1Click(Sender: TObject);
var
 n, a, b, sqrt_b, k, i: Integer;
 s: string;
begin
 n := StrToInt(Trim(Edit1.Text));
 a := 1;
 b := n;
 s := '';
 sqrt_b := Trunc(sqrt(b));
 i := 2;
 while i <= sqrt_b do
 begin
  k := b div (i * i);
  if k * i * i = b then
  begin
   a := a * i;
   b := k;
   s := s + IntToStr(i) + ' * ';
   sqrt_b := Trunc(sqrt(b));
  end
  else
   inc(i);
 end;
 s := s + '√' + IntToStr(b);
 Edit2.text := s;
end;
817デフォルトの名無しさん:2007/04/12(木) 22:51:51
素数表を使いやすいコードになってるから
var
TBL: array[WORD] of WORD;

とテーブルを作って
>>816 の inc(i) を i := TBL[i];

素数飛ばしのテーブルは
procedure makeTBL;
var
 i, j, Last: Integer;
label
 skp;
begin
 Last := 0;
 for i := High(WORD) downto 1 do
 begin
  for j := 2 to Trunc(Sqrt(i)) do
   if (i mod j) = 0 then
    goto skp;
  TBL[i] := Last;
  Last := i;
 skp:
 end;
end;
818デフォルトの名無しさん:2007/04/12(木) 23:17:49
質問じゃないですが、delphiの「使用許諾コード」について。

「使用許諾コードお問い合わせ窓口」へのE-Mail/FAXでのご質問書式
ttp://dn.codegear.com/article/33554

↑のテンプレ通りに書いてメールでコードをもらうことが出来ました。
以上、お知らせとして。

※パソナル6は↑しなくても起動出来るのは知ってるけど、やっぱり
ちゃんとすることはしないとね。
昨日メールして、今届いてました。ちゃんとコードも入力出来ました。

※私の場合はパソナル6なので、「ユーザーID」は書いてません。
819デフォルトの名無しさん:2007/04/13(金) 01:06:27
>>796
DelphiからExcelさんにお願いすればいいじゃないか
820デフォルトの名無しさん:2007/04/13(金) 08:05:51
>>789
>pdf って PDFファイルの事?
はい

>だとすると、まずPDFファイルを描画モジュールに分解するかビットマップ又はwmfに変換しないといけないけど、
>その目処はついてるの?
いいえ。
ただこれができれば帳票ツールほぼ不要だなと思いまして。
821ミ,,゚Д゚彡 ◆A6VzDeLphI :2007/04/13(金) 09:12:31
WebBrowserはりつけて、それにPDF表示すればいいのかな?
822デフォルトの名無しさん:2007/04/13(金) 11:41:13
質問です。WinHTTPをタイプライブラリとして取り込んで使用してみたのですが、
以下のコードだとSendでエラーが出ます。
procedure TForm1.FormCreate(Sender: TObject);
var
http: TWinHttpRequest;
begin
http := TWinHttpRequest.Create(self);
http.Open('GET','http://www.2ch.net',False);
http.Send('');
Memo1.Text := http.ResponseText;
end;

ですが以下のコードですと正常に動作します。
procedure TForm1.FormCreate(Sender: TObject);
var
http: IWinHttpRequest;
begin
http := CoWinHttpRequest.Create;
http.Open('GET','http://www.2ch.net',False);
http.Send('');
Memo1.Text := http.ResponseText;
end;
どちらのコードもCoInitializeは呼んでいます。
なぜ上記のコードだとエラーがでるのでしょうか?
823デフォルトの名無しさん:2007/04/13(金) 13:32:13
>>783>>784 ありがとう

>>782
htmlファイルを編集しています。
perlプログラムでそれを解析し、解析結果を得ています。
しかしそのファイルをプログラム(htmlエディタです)から上書きしようとすると、エラーになります。

>>784
ディレクトリではなくファイルがあります。

824823:2007/04/13(金) 13:34:58
レス番間違えたorz
825823:2007/04/13(金) 13:50:06
事故解決しました。
ファイルパスを""でくくっていて、それを作ろうとしたためできなかったようです。
ありがとうございました。
826デフォルトの名無しさん:2007/04/13(金) 13:50:34
魚[TAB]いわし|さんま|とびうお
植物[TAB]ナメコ|シメジ|エリンギ
色の名前[TAB]ff0000(赤)|00ff00(緑)|0000ff(青)

上記のような形式の辞書ファイル dict.dat を
listbox1に、魚、植物、色の名前
listbox2に、"|"で分けられた登録データを展開

listbox1 - listbox2
魚 - いわし
   さんま
   とびうお

こんな感じで読み込ませたいのですがどうすれば
良いでしょうか?よろしくお願いします。。。
827デフォルトの名無しさん:2007/04/13(金) 13:59:26
つDelimitedText
828デフォルトの名無しさん:2007/04/13(金) 14:04:16
正規表現クラスを使うか自前でやるならこんな感じ
Stripはマイお気に入り関数

// 文字列sに含まれるdelimiterより左側の文字列をsから削除して戻り値にする
function Strip(var s: String; delimiter: String): String;
var
   i: Integer;
begin
   i := AnsiPos(delimiter, s);
   if i = 0 then
   begin
       Result := s;
       s := '';
   end
   else
   begin
       Result := Copy(s, 1, i-1);
       s := Copy(s, i+Length(Delimiter), High(Integer));
   end;
end;

var s, t: String;
s := '魚'+#9+'いわし|さんま|とびうお';
t := Strip(s, #9); // t = '魚'
t := Strip(s, '|'); // t = 'いわし'
t := Strip(s, '|'); // t = 'さんま'
t := Strip(s, '|'); // t = 'とびうお'

829デフォルトの名無しさん:2007/04/13(金) 14:08:47
TStringList.AddObject
830826:2007/04/13(金) 14:47:22
>>828
procedure TForm1.Button1Click(Sender: TObject);
begin
s := '魚'+#9+'いわし|さんま|とびうお';
t := Strip(s, #9); // t = '魚'
listbox1.Items.Add(t);

listbox2.Items.Add(Strip(s, '|')); // 'いわし'
listbox2.Items.Add(Strip(s, '|')); // 'さんま'
listbox2.Items.Add(Strip(s, '|')); // 'とびうお'
end;

取り敢えずうまくlistboxの方に読み込むことができました
ありがとうございます!

それでもうひとつだけ質問をしたいのですけれども

for e in Strip(s, '|'): # pythonとかジェネレータで
 listbox2.Items.Add(e);

while(Strip(s, '|') <> '' ) // delphiだと
 …orz

要素が無くなるまで読み込むにはどう書いたら
いいでしょうか?基本的なことを何度も聞いて
しまってすみません。よろしくお願いします。
831デフォルトの名無しさん:2007/04/13(金) 15:28:25
while true do
begin
t := strip(s, '|');
if t = '' then break
...

832デフォルトの名無しさん:2007/04/13(金) 15:33:16
>>831
while trueは嫌なり
833デフォルトの名無しさん:2007/04/13(金) 16:25:06
データベースに接続する時に
「接続中」を表示させる事はできますか?
接続を試みる間に表示させたいのですが、
例えば

purocedure 接続ボタンclick(〜〜〜);
var (ry

begin
lbl1.Caption := '接続中';

   接続処理

if 接続できていたら then

ShowMessage('接続できました');

end;

と書くと「接続できました」のメッセージと同時に表示されてしまいます。
いい方法がありましたらよろしくお願いします
834デフォルトの名無しさん:2007/04/13(金) 16:39:00
>>833
そんなに時間かかってたら誰もDB使わないとは考えられませんか?
835デフォルトの名無しさん:2007/04/13(金) 17:44:17
>>834
例としては接続成功のほうを書きましたが、実際に使いたいのは
ボタンを押してある程度時間がたって結局「接続失敗」が表示される場合です。
何も表示されないで画面が固まったままだと不安になりますからね。
836デフォルトの名無しさん:2007/04/13(金) 17:49:26
>>835
なんで逆の例を書くかな・・・

Formかbuttonのどっちだか忘れたけどリフレッシュしてみれ
837デフォルトの名無しさん:2007/04/13(金) 19:21:10
接続中のフォームを表示させてからDB接続に行って接続したらフォームを閉じ
失敗したらフォームのメッセージ書き換えでいいんじゃ?
838826:2007/04/13(金) 19:25:13
>>831
ありがとうございます。上手くゆきました。
というかwhile 1: は基本中の基本 orz

>>832
そんなことないですよ?(何故か疑問形)
839デフォルトの名無しさん:2007/04/13(金) 19:36:50
D7を使ってます。
OSを再インストールしようと思ってるのですが
現在登録してあるコンポーネントを新しい環境に一括で登録するようなツールって無いですか?
840デフォルトの名無しさん:2007/04/13(金) 19:49:43
>>839
おちついてその処理のアルゴリズムを考えてみるべし
841デフォルトの名無しさん:2007/04/13(金) 20:06:24
ない
842デフォルトの名無しさん:2007/04/13(金) 21:44:01
THoge = class
private
function A
function B
function C
end;

function THoge.C
var
 func: function();//こういうの
begin
 if flag then
  func:=A
 else
  func:=B;
 while〜
end;

Class内のfunctionでこういう事する方法あるですか?
843デフォルトの名無しさん:2007/04/13(金) 22:21:02
検索キーワード= メソッドポインタ 関数ポインタ
844デフォルトの名無しさん:2007/04/14(土) 00:25:34
あまりに初心者な質問ですみません。
画面遷移を行いたいのですが、どうすればよろしいでしょうか?
例えば、1の画面で、「登録」「編集」というボタンがあり、
「登録」を選ぶと、登録画面になるという感じです。
登録画面の「戻る」ボタンで、元の1の画面に戻るというようなものなのですが、
これは、どのように作ればいいのでしょうか?
TNoteBook? TPageControl(←これはタブですよね)
こんな基本中の基本がわかりません。
どうかよろしくお願いします。
845デフォルトの名無しさん:2007/04/14(土) 00:33:12
TPageControlでactivePageを置き換えればいいんじゃね?
846デフォルトの名無しさん:2007/04/14(土) 00:43:26
そのままだとタブが見えてしまうから
FormCreateで

TabSheet1.Parent := Self;
TabSheet2.Parent := Self;
TabSheet3.Parent := Self;
PageControl1.Free; // もう用済み
TabSheet1.Visible := False;
TabSheet2.Visible := False;
TabSheet3.Visible := False;

とやって
1ページ目を表示する場合
TabSheet1.Visible := True;

2ページ目を表示する場合NextButton1Clickで
TabSheet1.Visible := False;
TabSheet2.Visible := True;

3ページ目を表示する場合NextButton2Clickで
TabSheet2.Visible := False;
TabSheet3.Visible := True;

とやるとそれっぽく見えるはず。

847デフォルトの名無しさん:2007/04/14(土) 00:46:21
タブ消せるでしょ・・・
848デフォルトの名無しさん:2007/04/14(土) 03:12:42
>>845さん, >>846さん, >>847さん、
ありがとうございました。
方向性すら見えなかったので、TPageControlを使ってのアドバイス、
とても有難かったです。がんばってやってみます。
ありがとうございました。
849デフォルトの名無しさん:2007/04/14(土) 03:25:40
>>836
遅くなってすみません、ありがとうございます!
明後日までプログラムいじれないのでその時に試してみますね
850デフォルトの名無しさん:2007/04/14(土) 03:27:20
ごめんあげちゃったorz
851デフォルトの名無しさん:2007/04/14(土) 06:06:49
たんに複数フォームのことだったりして・・・
852デフォルトの名無しさん:2007/04/14(土) 07:36:44
俺もそう思う。

Form1.Visible := False; //最初のフォームを見えなくする。
Form2.Visible := True; //次のフォームを表示する。

853デフォルトの名無しさん:2007/04/14(土) 07:52:35
ウィザード形式のフォームの話以外をしているようには見えんが
854デフォルトの名無しさん:2007/04/14(土) 09:14:43
銀行のATMの画面みたいに次々に画面遷移していって、1画面戻ったり進んだり
途中の画面に戻ったりってことをやるとき、TFormを複数作って対処していたけど、
ちょっと変更があったりすると修正がやたら面倒なことになったりしてた。
こんなとき普通はTPageControlを使うのかなあ。
元質問者じゃないけどふと思った
855デフォルトの名無しさん:2007/04/14(土) 09:31:32
プログラムの構成にもよるんジャマイカ。
入力されたデータとかが画面毎に独立してるなら
複数フォーム作ればいいし、
画面は別々でもデータは1つにまとめておきたいなら
ページコントロール使えばいいし。
856デフォルトの名無しさん:2007/04/14(土) 12:54:20
>>854
俺は複数FormよりTPageControl派
857デフォルトの名無しさん:2007/04/14(土) 13:37:35
で、>>847ってどうやるの?
858デフォルトの名無しさん:2007/04/14(土) 13:39:25
>>857
プロパティあるじゃん
859デフォルトの名無しさん:2007/04/14(土) 13:41:28
どれ?
860デフォルトの名無しさん:2007/04/14(土) 13:46:12
861デフォルトの名無しさん:2007/04/14(土) 14:13:43
TabVisible プロパティか・・
Visible プロパティで消せなくてしばらく悩んだ
862デフォルトの名無しさん:2007/04/14(土) 14:15:52
TPageControlって輪郭の出っ張りみたいなのは消せないのかね
フォームにalClientで使いたいとき不恰好になる
863デフォルトの名無しさん:2007/04/14(土) 14:16:08
>>862
notebook
864デフォルトの名無しさん:2007/04/14(土) 14:49:43
TabVisibleってTabSheet全体が消えるやん
意味ねー
865デフォルトの名無しさん:2007/04/14(土) 15:12:38
VCL にはウィザードに相当するラッパコントロールってなかったよね。残念でした
866デフォルトの名無しさん:2007/04/14(土) 15:17:46
しかしプロパティページをコンポーネント化した猛者はいる。
867デフォルトの名無しさん:2007/04/14(土) 15:23:16
プロパティページって何?
868デフォルトの名無しさん:2007/04/14(土) 16:14:05
実際には表示しない別のフォームにページを作っておいて
裏でタブを切り替えながら、順に表示したらいいじゃない。 
簡単なコードで切り替えられるよ。
var
SaveCtrls: array of TControl;
SaveTab: TTabSheet;

procedure TForm2.ShowToForm1(no: Integer);
var i: Integer;
begin
  for i := 0 to High(SaveCtrls) do SaveCtrls[i].Parent := SaveTab;
  SaveTab := PageControl1.Pages[no];
  SetLength(SaveCtrls, SaveTab.ControlCount);
  with SaveTab do
  for i := 0 to ControlCount - 1 do SaveCtrls[i] := Controls[i];
  for i := 0 to High(SaveCtrls) do SaveCtrls[i].Parent := Form1;
end;

これでForm1に、Form2の指定したページが移動する。
869デフォルトの名無しさん:2007/04/14(土) 17:51:37
>>862
1.TPageControlのStyleをFlat
2.TabPageのTabVisibleをfalse

コレでも駄目?
870デフォルトの名無しさん:2007/04/14(土) 18:00:42
PageControlのTopの位置をマイナスにして画面外に隠すとか・・
alClientでは使えないが、ウィザードって大抵サイズ変更不可だし。
871デフォルトの名無しさん:2007/04/14(土) 18:27:45
>>868で Form1 に PageControlのVisibleをFalseにして置いて
for i := 0 to High(SaveCtrls) do SaveCtrls[i].Parent := Form1;
                                     ↓
 for i := 0 to High(SaveCtrls) do SaveCtrls[i].Parent := Self;
として、 タブが消える分、サイズを合わせるために
procedure TForm1.FormCreate(Sender: TObject);
begin
ShowToForm1(0);
Height:= Height-PageControl1.TabHeight;
end;

とやったらソレっぽくなった
872デフォルトの名無しさん:2007/04/14(土) 20:08:29
2chブラウザで印つけわすれてて、今読んだので亀レス失礼

>>147
標準のOpenGLは古くて足りないので、OpenGL12.pas探して使おう
GLSceneにでも入ってたか。

>>153
海外サイトを探そう
あと、OpenGLは、ネットでのDelphiのサンプルが少なく、
C++などの他の言語での使い方がそのまま参考になるので、Delphiをつけずに検索した方がよい。
もちろん、海外サイトな。
とっかかりなら、NeHeとかが参考になる。

>>176
商用ゲーム

>>358
参照カウンタ式をGCと呼ぶならそうだろう

>>464
想像するに、MMORPGのボット(不正な自動制御ロボット)

>>746
むしろ、TFileStreamはメモリにバッファしないために、メチャクチャ遅い
873デフォルトの名無しさん:2007/04/14(土) 20:24:38
>1.TPageControlのStyleをFlat
ごめん、これでいけるっぽい
何で気付かなかったんだろう昔の俺
874デフォルトの名無しさん:2007/04/14(土) 20:27:01
独自形式のpackerというか、アーカイバのコンポーネントを探しております。
ゲームでよくある、複数のファイルをひとまとめにするライブラリをイメージしています。

・汎用的にT Stream 形式でアクセス可能
・デバッグ用に、ファイルがある場合は、ファイルの方を優先的に読んでくれる
・zlibサポートなんかがあるとgood
・コマンドラインでバッチ的にアーカイブできる。
(できなくても、圧縮メソッドがあれば、簡単に自分で作れるので可)

検索しようにも、いい単語が思い浮かばない。
Delphi アーカイバだと違うのがで過ぎて困ってます。
875デフォルトの名無しさん:2007/04/14(土) 20:57:31
>>874
そういうのは、
ttp://www.dellapasqua.com/delphizlib/
とかから自分でDelphi用のzlibのライブラリをとってきて、
自分で実装するもんだよ
876デフォルトの名無しさん:2007/04/14(土) 21:04:33
zlibって標準で付いてなかったっけ? まぁそっちの方が高速なんだろうけど。
877874:2007/04/14(土) 21:54:06
定番処理っぽい?から、コンポーネントでもあると思いました。

いろいろ、検索してたんですけど、QuadrupleDのQDArcってのが、それっぽいです。

Project Quadruple D
http://karen.saiin.net/~hayase/dddd/

878デフォルトの名無しさん:2007/04/14(土) 21:56:32
>>843
検索はしたけど分からなかったので質問したのですが。。。
Class内では>>842のやりかたが出来ないし

Class functionやClass外のfunctionにするとTHogeの
ローカル変数もClass外に置くとかしないといけないし。。。
879デフォルトの名無しさん:2007/04/14(土) 22:03:36
リソースだけのDLLがEXEを作ればいいと思うのだが?
TResourceStream でアクセス出来るし
DCC32.exeでアーカイブ出来るし UPXで圧縮も出来るし

"ファイル名.rc" のファイルを作って
名称 RCDATA "入れたいファイル名"
の行をズラズラと書くだけ
リソースだと他人に読まれてしまうのが嫌という場合は
http://pc.2ch.net/tech/kako/1009/10090/1009080085.html
Bin2Byte のように
バイナリを一度Delphiソースに変換してしまう。
880デフォルトの名無しさん:2007/04/14(土) 22:09:10
>>842 のコードは、どうも メソッドポインタだと思える

メソッドポインタ形を定義してやる
funciton だと帰り値が必要なので >>842の帰り値が integerだとすると
メソッドポインタ型は
type TMyFunction = function :Integer; of object;

引数があるなら
type TMyFunction = function (x:Integer) :Integer; of object;
のように

var func:TMyFUnction;
としてやれば func:=A; のように出来る
つまり、イベントと同だ。
881デフォルトの名無しさん:2007/04/14(土) 22:17:53
>>880
試したつもりだったけど、of object;付けたらエラー出なくなりました
ありがとう
882デフォルトの名無しさん:2007/04/14(土) 22:39:29
折角Delphiはリソースコンパイラでもあるわけだし、
C++なんかよりずっと簡単にリソースを入れられるのに、
そこらへん、もっとアピールしたらいいのに、ヘルプに何も説明が無いのが悔しいね

>>879の "ファイル名.rc" はプロジェクトに入れるか
{$R 'ファイル名.res' 'ファイル名.rc'}
と、いう行を .DPRでも pasでもいいから入れてしまえばいい。
読み出しは、

var strm:TStream;
begin
strm:=TResourceStream.Create(0,'名称',RT_RCDATA);
try
Memo1.Lines.LoadFromStream(strm);
finally strm.Free; end;

と出来る。  名称は もちろん英字ね。
883デフォルトの名無しさん:2007/04/14(土) 23:14:03
はじめまして、Java→Delphi組の素人です。
TBitmapを継承してTBitmapExなるクラスをつくりました(白黒とかできるようにした)。
するとコンパイルは通るんですが、なにやら警告が出て

[警告]BitmapEx.pas(120)'Create'メソッドが基本型'TBitmap'の仮想メソッドを隠しました

無視しちゃっていいんですかね?(汗
出ないようにするにはどうすればいいんでしょうか?
884デフォルトの名無しさん:2007/04/14(土) 23:15:57
>>883
overrideしたのか?
ソース見せないのに答えられるかよ
885デフォルトの名無しさん:2007/04/14(土) 23:47:14
>白黒とかできるようにした

むしろこっちが意味不明。関係ないけど。
886デフォルトの名無しさん:2007/04/14(土) 23:57:27
>>884
DelphiってCreateをoverrideしましたっけ?

>>885
procedure Monocro;ってのを実行すると保持してる画像が白黒になるっつーものです。
887デフォルトの名無しさん:2007/04/14(土) 23:58:59
>>883
出ないようにするだけなら
自前のクラスのコンストラクタの宣言部にinheritedを付ける
constructor Create(AOwner: TComponent); inherited;
888デフォルトの名無しさん:2007/04/14(土) 23:59:43
>>883 たぶん今の所、実用上は隠しちゃっても問題ない
警告を出さない方法は、
1、CreateEx とかの別名にする
  普通はコレで問題ない

2、 定義で constructor Create; override;  とする
  どういう効果があるかは、
  ヘルプで "メタクラス" や "コンストラクタとクラス参照"の事
889デフォルトの名無しさん:2007/04/15(日) 00:02:44
>>886その程度の機能追加ならコンストラクタを上書きする必要なかったのでは?
890デフォルトの名無しさん:2007/04/15(日) 00:02:55
>>887
ENDが必要なところにINHERITEDがあります

というエラーが出てコンパイルできないです。
891デフォルトの名無しさん:2007/04/15(日) 00:04:27
>>886
>DelphiってCreateをoverrideしましたっけ?
その Tbitmap.Create が既に TGraphic.Create; virtual ; のoverrideなんだが
892デフォルトの名無しさん:2007/04/15(日) 00:05:31
>>888,889

あ、レス遅れました。
問題ない、とのことなので、まいっかー、と思ってます。

>>889
ま、後学のために・・
893デフォルトの名無しさん:2007/04/15(日) 00:06:08
>>887 inherited は override の間違いだろ

inherited は親クラスの呼び出し
894887:2007/04/15(日) 00:08:19
ごめん間違った
inheritedじゃなくてreintroduceだった
constructor Create(AOwner: TComponent); reintroduce;

overrideとreintroduceの違いについては識者解説
895デフォルトの名無しさん:2007/04/15(日) 00:08:47
>constructor Create; override;

これでいけました。

[解決] ってことで、ありがとうございます・・
896デフォルトの名無しさん:2007/04/15(日) 00:20:50
reintroduce 警告を出さないようにして、実際に隠してしまう = Inherited が出来ない
        古いバージョンではサポートされない

override    クラス参照型による多態を使いたい場合
897デフォルトの名無しさん:2007/04/15(日) 00:22:36
>>886
> procedure Monocro;ってのを実行すると保持してる画像が白黒になるっつーものです
TBitmap.Monochromeプロパティというのがあるんだけど、それではダメなのかな?
898デフォルトの名無しさん:2007/04/15(日) 02:14:30
>>897

いや!、勉強のためにとりあえず継承して作ってみただけで、とくに使う予定のないクラスですよ。
もちろん、Monochromeプロパティってものの存在も知りませんでした。

斜陽の言語とかいわれてるようですが、Pascalのファンって意外と多いようですね。
899844:2007/04/15(日) 02:37:37
亀レスです。
>>851さん、>>852さん、>>853さん、>>854さん、>>855さん、>>856さん、
ご教授、ありがとうございました。
TPageControlとFormを、仕様によって使い分けるんですね。
とてもよく理解できました。ありがとうございました。
900デフォルトの名無しさん:2007/04/15(日) 08:28:06
競馬関係のソフトを作ってみたくて勉強中なんですが、ビット計算?がまったく分からなくて困ってます(;´Д`)
以下のビットマップが提供されていますが、この場合、馬番の15を以下のビットマップで変換して表すには、
どのようにしたら良いのでしょうか? よろしくお願いしますm(_ _)m

5byte=20bit
ビット 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01
馬番 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 - -
マスク = 0x80000
901デフォルトの名無しさん:2007/04/15(日) 08:33:44
すいません。↑のビットマップですが、位置がどうしてもずれてしまうんですが、
馬番1→ビット20、馬番2→ビット19、馬番3→ビット18、以下同様・・・
という感じです。
902デフォルトの名無しさん:2007/04/15(日) 09:03:12
>>901
calc.exe で1ビットの計算ができますよ。
903デフォルトの名無しさん:2007/04/15(日) 09:23:15
言わんとするところもそのやり方も見当が付くが、
なぜそういうデータの持ち方をしないといけないのかが想像付かなくて
的外れな回答をしそうで答えに詰まる。
904デフォルトの名無しさん:2007/04/15(日) 09:48:03
>>902
>>903
さっそくありがとうございます。
なんかpatにデータを送信するときに、馬番をこれを使って変換しなければ
ならないらしく、まったく分かっていないので、何でも書いていただけると助かります。
905903:2007/04/15(日) 10:10:10
type
 TOrder = 1..20;
 TOrders = set of TOrder;

procedure TForm1.Button1Click(Sender: TObject);
var
 x: TOrders;
 s: string;
 o: TOrder;
begin
 X := [];
 Include(X, 15);

 s := '';
 for o := Low(TOrder) to High(TOrder) do
 begin
  if (o in X) then
   s := s + Format('%d', [Integer(o)])+#13#10;
 end;
 ShowMessage(s);

 ShowMessage( Format('0x%x', [Integer(X)]) );
end;

こんなこと考えてたけど、やっぱり的外れな気がする・・。
906デフォルトの名無しさん:2007/04/15(日) 10:49:41
>>900 5byteで20bit という事は 16進数表示だとするよ
そうすると 普通のビット表示とはズレてる 
普通は 2^n つまり2のn乗のビット位置の事を ビットn という
だから ビット20は 21ビット目にあるので、5byte に収まらない
そしてマスク= 0x80000 =2^19 の事だから、これがマスクだとすれば
これはMSBを1として番号を振ったものだろうと予想する
つまり、上の ビット20から始まる値は 2^(20-m) のmの事だと予想
次の 馬番との表は 1->20 2->19 で Xの時 m = 20+1-X だろう?

だから馬番の15は
X:=15;
m := 20+1-X ;
bit:= 1 shl (20-m); // 2^n は 1 shl n と等価

そして、送信する5バイトの文字列とは IntToHex(bit,5)

さあ、どうだ?
907874:2007/04/15(日) 12:24:39
>>879>>882
ありがとう。リソースも考慮に入れてみる。

908デフォルトの名無しさん:2007/04/15(日) 12:25:22
>>900は、やねうらおの弟子だ。詐欺競馬ソフトを作っているぞ!気をつけろ!w
909デフォルトの名無しさん:2007/04/15(日) 13:03:46
もはやなつかしいなそのネタ
やねう一派はDelphiを使わなそうだけど
910デフォルトの名無しさん:2007/04/15(日) 13:09:44
Delphi6Personalで
JCLのコンテナを使ってみたいと思い、
とりあえずサンプルをコンパイルしてみたのですが、
jcl\examples\common\containers\performance\ContainerPerformance.dpr
のTJclVectorの所でコンパイルエラーになってしまいます。
TJclVectorはDelphi6では未対応なのでしょうか?
JCLのバージョンはV1.99です。
911デフォルトの名無しさん:2007/04/15(日) 13:19:51
DelphiでC++同様のテンプレートが使えるようになるのは、いつ頃の予定ですか?
912デフォルトの名無しさん:2007/04/15(日) 13:39:23
Delphi2006 から Delphi2007で変わったことってどこかに書いてありますか?
販促の封筒着たけど、何が変わったのかさっぱり・・・
913デフォルトの名無しさん:2007/04/15(日) 13:41:20
>>911
多分、永久にないと思います。
C#やJavaのtemplateなら、そのうちにつくはず
914デフォルトの名無しさん:2007/04/15(日) 14:32:27
てくにっく。 - Windows Vista対応アプリを作る
http://homepage1.nifty.com/ht_deko/tech005.html#27
915デフォルトの名無しさん:2007/04/15(日) 14:33:20
>912
ttp://dn.codegear.com/jp/article/34409
でどうでしょう?
916デフォルトの名無しさん:2007/04/15(日) 14:35:01
ちょっwww

・致命的な問題
 Delphi で作成したアプリケーションをVista上で動作させるにあたり、
致命的な問題があります。Delphi で作成したアプリケーションをお持ちなら、
それを起動し[Alt]キーを押してみましょう。単に[Alt]キーを押すだけです。
この動作を行うだけで標準的なコントロールが消えてしまうのではないかと思います。
917デフォルトの名無しさん:2007/04/15(日) 14:39:27
>>915
その記事はクラスのオペレータオーバロードができることになってたり、
Delphi7にSnapBufferがないことになってたりといい加減だし、
2006じゃなくて7からの変更点だからなぁ・・・
918デフォルトの名無しさん:2007/04/15(日) 15:36:36
HDDのパーティションがC、Dと有った場合、
CドライブとDドライブが同一HDD上のパーティションなのか
別のHDD上のパーティションなのかを区別するにはどうしたらよいでしょうか?
919デフォルトの名無しさん:2007/04/15(日) 16:20:37
>>905
ありがとうございます。
ちょっと意図した結果と違うみたいですね…
>>906
ありがとうございます。
なんか非常に近い感じなんですが、、、
とりあえず変換された結果は
馬番1→18の順に
80000 40000 20000 10000 08000 04000 02000 01000 00800 00400
00200 00100 00080 00040 00020 00010 00008 00004
になるみたいなんですが…
920デフォルトの名無しさん:2007/04/15(日) 16:34:48
>>918
HKEY_LOCAL_MACHINE\System\MountedDevices\
でバイナリデータを比較したら、何とかなるのかもしれないね
921デフォルトの名無しさん:2007/04/15(日) 16:38:53
>>919
それなら、そのまま文字列を配列で持っていたらんじゃないの?

計算式は
馬番Xから
bit:= 1 shl (20-X);
IntToHex(bit,5)
922デフォルトの名無しさん:2007/04/15(日) 17:04:02
>>921
その計算式で単勝・複勝できました!ありがとうございます!
単勝・複勝で馬番が1つの場合は、これでOKだったんですが、馬連のように馬番が2つあるものは
以下のようなビットマップになっています。例えば馬連1-2の場合は、結果が800010000、
1-3の場合は800008000、ちょっととんで15-16のときは000200004となるみたいなんですが、
この場合は、どんな計算式になりますか? マスクについて調べてみたんですがちんぷんかんぷんで…(;´Д`)

9byte=36bit
ビット 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19
馬番1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
マスク = 0x80000

ビット 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01
馬番2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
マスク = 0x20000
923デフォルトの名無しさん:2007/04/15(日) 17:16:58
>>922
その結果が出ればいいのなら

var x,y:Integer;
var bit:int64;
var s:string;
begin
for x:=1 to 18 do
for y:=1 to 18 do begin
bit:=(int64(1) shl (36-x)) or (int64(1) shl (18-y));
s:=format('x=%2d y=%2d ',[x,y]);
s:=s+IntToHex(bit,9);
Memo1.Lines.Add(s);
end;
924デフォルトの名無しさん:2007/04/15(日) 17:20:41
>>920
なるほど最初の4バイトが一致する場合は同一デバイスのようですね。

もうちょっと調べてみます。ありがとうございました。
925デフォルトの名無しさん:2007/04/15(日) 18:02:41
>>923
ばっちり解決しました!大感謝!ここ3日ずっと悩んでたので
すっきりです。みなさんありがとうございました。
926デフォルトの名無しさん:2007/04/16(月) 10:13:41
>>925 次からこういう質問をする時は情報小出しにしないでね
例を何個か出せばすぐに判るのだから
927デフォルトの名無しさん:2007/04/16(月) 15:58:57
Delphi for PHP(体験版)をはじめて触ってみたDel厨です。
Pagecontrolをクリックしてtab変えると、下のLabelに表示っていうような事を
やってみようと思ったのですが、この場合どこに記述するのがいいのですか?(´;ω;`)ウッ
OnClickとかでやってみたが変わらず・・・。

Delphi for PHPのスレがなかったので、こちらでスマソ・・・。
928高島彩:2007/04/16(月) 16:25:21
たすけて
929デフォルトの名無しさん:2007/04/16(月) 17:10:57
>>927
Pagecontrolの OnChange みたいだよ
ただし、これはJavaScriptだから Textは簡単だけどLabelに表示はやりかた判らん
930デフォルトの名無しさん:2007/04/16(月) 17:20:07
いちおうスレあるっぽいけど、誰も書いてないね。
http://pc11.2ch.net/test/read.cgi/prog/1172118683/
931デフォルトの名無しさん:2007/04/16(月) 18:41:35
Edit1に書いた文字列が整数型に変換可能であるか
(例:123ならOK , abcならNG , 4.2ならNG)
を調べるのって可能ですか?
932デフォルトの名無しさん:2007/04/16(月) 18:51:01
try strtoint(edit1.text);
except
end;
933デフォルトの名無しさん:2007/04/16(月) 19:17:23
例外処理を使いたくないなら
var
 S: string;
 i, Code: integer;
begin
 s := Edit1.Text;
 Val(S, i, Code);
 if Code <> 0 then
 begin
  // エラー
 end;
みたいな手もあるが、余計な変数が必要だし
内部的にやってることは同じなので

 i := StrToIntDef(Edit1.Text, -1);
 if i < 0 then
 begin
  //エラー
 end;
で、済ますかな
934デフォルトの名無しさん:2007/04/16(月) 19:57:18
>931
Val手続きで(VCLリファレンスからまんまパクリ)
var
I: Integer;
Code: Integer;
begin
Val(Edit1.Text,I,Code);
if Code <> 0 then
begin
// Error
end
else
begin
// Success
end;
935デフォルトの名無しさん:2007/04/16(月) 20:54:28
Delphiにデフォルトで正規表現クラスってありますか?
あったような気がするのだけどヘルプで探しても出てこない・・
936デフォルトの名無しさん:2007/04/16(月) 21:04:50
タイプライブラリからWSHを取り込んで使うのが簡単
937デフォルトの名無しさん:2007/04/16(月) 21:21:57
>935
ない
938935:2007/04/16(月) 21:28:40
自分でも調べてみましたがないみたいですね・・。
調べ物中にTReg???ってクラスを見かけて今度利用しよう、って思った記憶があるんだけなぁ・・

>>936
>>937
ありがとうございました。
939デフォルトの名無しさん:2007/04/16(月) 21:33:15
Cの組み込みマクロ
__DATE__
__TIME__
に相当するものってDelphiにありますか?
940デフォルトの名無しさん:2007/04/16(月) 21:44:14
>>939 もしあったとしてもマクロをソース中で生かす方法がないので
ビルド時の日付を入れたいというような目的なら
バージョン情報を利用してはどうだろうか?

941939:2007/04/16(月) 22:03:05
>>940
その方向で検討してみます。
ありがとうございました。
942デフォルトの名無しさん:2007/04/16(月) 23:22:35
>>932
>>933
ありがとうございました。
943デフォルトの名無しさん:2007/04/17(火) 04:16:39
>>938
VBScript_RegExp_55_TLB
だよ。

もうちょっとよく探そう。
944デフォルトの名無しさん:2007/04/17(火) 05:41:41
>>943
Delphiのタイプライブラリインポータが貧弱なせいか
vbscript.dllから取り込むことができん。
dll内にTYPELIBは存在してるので
今度暇なときに自分でpasに落としてみるわ
945デフォルトの名無しさん:2007/04/17(火) 06:45:32
TRegExpr?
946デフォルトの名無しさん:2007/04/17(火) 07:47:51
正規表現ライブラリは確かBCBに入ってたんじゃないかな
Delphi用は

TRegExpr Unicodeなら日本語
 http://delwiki.info/?%A5%B3%A5%F3%A5%DD%A1%BC%A5%CD%A5%F3%A5%C8%2FTRegExpr

bmonkey's Delphi page
 http://homepage1.nifty.com/bmonkey/delphi/delphi.html

dyaregexp
 http://hp.vector.co.jp/authors/VA028375/junkbox/dyaregexp.html

BREGEXP.DLL Perl互換の正規表現エンジンDLLを呼び出す
http://www2.big.or.jp/~osamu/Delphi/MyLibrary.htm
947927:2007/04/17(火) 11:28:44
>>929
レスTHX。
JavaScriptでしか出来ないのか・・・。
「Tabを切り替えるごとに下に表示される文字が変わる」みたいなものを試そう
と思ったのだが・・・ (´・ω・`)ショボーン
OnChangeの後、document.writeとやってみたら、Pagecontrolも消えた・・・。
948デフォルトの名無しさん:2007/04/17(火) 16:00:49
確かに、 pascalと違ってさっぱり判らんな。 フレーム貼っただけで真っ白になるし
949デフォルトの名無しさん:2007/04/17(火) 17:07:37
>>934
THANKS!!
950デフォルトの名無しさん:2007/04/17(火) 21:32:54
Delphi7 ProでTNMHTTPコンポーネントを利用する方法を教えてください!
951デフォルトの名無しさん:2007/04/17(火) 21:52:09
あるファイルからURLを取得してそのURLのファイルをDLしたいんですが
ファイルをDLする方法がわかりません。
952デフォルトの名無しさん:2007/04/17(火) 22:11:01
>>951
URLDownLoadToFile

Creation College -WebApplication Labo-
http://gumina.sakura.ne.jp/CREATION/OLD/TECHNIC/WEBAP-2.htm
953デフォルトの名無しさん:2007/04/17(火) 22:16:29
>>952
どうもありがとうございました!
954デフォルトの名無しさん:2007/04/17(火) 22:39:40
質問させてください。
これからDelphiを勉強しようと思っているのですが、
DelphiとC++Builderの違いについてよく分かりませんでした。
上記2つの違いは書き方が違うだけであって
実行速度等は同じなのでしょうか?
それとも根本的に異なる言語なのでしょうか?

私はC++も未修得のため
DelphiとC++Builderのどちらを勉強しようか迷っています。

どなたかご教授をお願い致します。
955デフォルトの名無しさん:2007/04/17(火) 23:28:39
言語としてのDelphiとC++は異なるものです。しかしC++Builderは実際には(Delphi)+(C++)のような
形で実装されているため、最初のうちは文法以上の違いはないように見えるかもしれません。
趣味でお勉強するならとりあえず途方にくれることの少ないDelphiのほうがよいような気もしますが、
書籍で勉強しないと気がすまない質ならC++のほうがいいかもしれません。ってかこのスレで聞くなら
Delphiでおk。
956デフォルトの名無しさん:2007/04/17(火) 23:42:11
今からやるならMSにぶらさがってたほうが楽だからそうしとけ
957デフォルトの名無しさん:2007/04/18(水) 00:00:29
そういえば、前に変数の動的な生成にこだわっていた香具師って
どんな用途を想定していたんだろう
目的は無いなんて言っていたが、何となく気になる
958デフォルトの名無しさん:2007/04/18(水) 01:50:05
>>954
DelphiはObject Pascal言語、C++BuilderはC++言語で記述します
言語は違っていても根幹で使用しているライブラリは同じです
C++ならではの使い方(組み込み系、デバイスドライバ開発)などをしない限りは
どちらを使っても差はさほどありません
実行速度で言えばプラットフォームがC++な分だけC++Builderが勝ります

遊びなら.NET Framework系の言語が良いと思います
仕事ならDelphi、学術的に扱うのならC++Builderが良いかと思います
959デフォルトの名無しさん:2007/04/18(水) 01:58:48
>>958
>実行速度で言えばプラットフォームがC++な分だけC++Builderが勝ります

そうか?
Borlandの場合、PascalもC++もそう変わらんと思うが。
無論、VC++の方が明らかに速い。
960デフォルトの名無しさん:2007/04/18(水) 02:14:28
VCL上だと両者の速度は殆ど変わらないからね

しかしこのご時世なんだから実行速度なんてもう誤差の範囲かと
そんなにシビアに速度を求めるならまずはソースの見直し
次にWindows以外の環境に移行するw
961デフォルトの名無しさん:2007/04/18(水) 04:18:17
これからやるならドキュメントが豊富なC#にしとけ
962デフォルトの名無しさん:2007/04/18(水) 08:06:02
C#はやめとけ。linux普及で終了する
963デフォルトの名無しさん:2007/04/18(水) 08:14:05
linuxはコンシューマ機では普及しないから大丈夫
964デフォルトの名無しさん:2007/04/18(水) 08:17:36
仕事以外でUnixとは付き合いたくない
965デフォルトの名無しさん:2007/04/18(水) 08:58:40
[00028074] DrawText : iniファイルから読み込んだ文字列で改行できない
ttp://forums.belution.com/ja/vc/000/280/74.shtml
同じ問題で躓いてます orz

cs.Replace("\\n","\n"); の部分を
delphiだとどう書いたら良いでしょうか?
966954:2007/04/18(水) 09:21:29
皆様レスありがとう御座います。
とりあえずDelphiをやってみたいと思います。
たまに自作ツールを作るときはC#で開発をしていたのですが
ネットで開発言語について色々調べていたら
Delphiの評価が高かったので興味を持ちました。

それにしても本屋にいったらDelphiの書籍の
少なさに泣けた・・・。

よく参考にしているサイト等はありますか?
967デフォルトの名無しさん:2007/04/18(水) 09:26:55
>>965
// \デコードをする
function DecodeStr(const s:string):string;
var i:integer;
begin
Result:=''; i:=1;
 while i<=length(s) do
  begin
  if s[i]='\' then
   begin
   inc(i);
   case s[i] of
   'x': try
     Result:=Result+ char(StrToInt('$'+s[i+1]+s[i+2])) ;
     inc(i,2);
     except end;
   'b': Result:=Result+#$08;
   'a': Result:=Result+#$07;
   'f': Result:=Result+#$0C;
   'r': Result:=Result+#$0D;
   't': Result:=Result+#$09;
   'v': Result:=Result+#$0B;
   'n': Result:=Result+#13+#10;
   else Result:=Result+s[i];
   end;
   inc(i);
   end else begin
   Result:=Result+s[i];
   inc(i);
   end;
  end;
end;
968デフォルトの名無しさん:2007/04/18(水) 09:30:08
>>966 C#と大きな違いは、
C#はライブラリ検索型プログラミング
   巨大な便利ライブラリを調べて組み合わせてコードを作る

Delphiは構築形プログラミング
  基本的に不足する部分を自分で作って一人前
  教科書はVCLソース
969デフォルトの名無しさん:2007/04/18(水) 09:38:51
>>967
'十n' とか混ざってるとおかしくならんか?

>>965
s := StringReplace(s, '\n', #13#10, rfReplaceAll);
970デフォルトの名無しさん:2007/04/18(水) 09:52:11
>>969 確かに >>867に追加
  if s[i] in LeadBytes then
  begin
     Result := Result + copy(s, i, 2);
     inc(i, 2);
  end else
971デフォルトの名無しさん:2007/04/18(水) 10:20:07
>>965
俺も>>969の StringReplace に賛成。
加えて、何らかの事情で「\n」という表示をしたいときの回避を
別途考えておくとベストかと。「\_n」→「\n」とか。

s := StringReplace(s, '\n', #13#10, rfReplaceAll);
s := StringReplace(s, '\_n', '\n', rfReplaceAll);
972デフォルトの名無しさん:2007/04/18(水) 10:31:30
それじゃ\_nという表示をしたいときにはどうするんだ。
973デフォルトの名無しさん:2007/04/18(水) 10:44:29
>>971
これは基本的にC言語スタイルのエスケープだから
\が入ってる場合は \\ となってる筈。
function EncodeStr(const s: string): string;
var i: integer;
begin
 Result := '';
 i := 1;
 while i <= length(s) do
  if s[i] in LeadBytes then
  begin Result := Result + copy(s, i, 2); inc(i, 2);
  end else begin
   case s[i] of
    #0..#8, #10..#12, #14..#31:
     Result := Result + '\x' + IntToHex(ord(s[i]), 2);
    #9: Result := Result + '\t';
    #13: begin
      if (i + 1 <= length(s)) and (s[i + 1] = #10) then
      begin
       inc(i);
       Result := Result + '\n';
      end else Result := Result + '\x' + IntToHex(ord(s[i]), 2);
     end;
    '\': Result := Result + '\\';
   else Result := Result + s[i];
   end;
   inc(i);
  end;
end;
974高島彩:2007/04/18(水) 11:24:14
知能程度が厨程度のアタシにもTListのSubItemをStringで取り出すことはできますか?
975デフォルトの名無しさん:2007/04/18(水) 11:28:23
TList の SubItem って何?
976971:2007/04/18(水) 11:44:30
>>972
「表示できない仕様です」で逃げるw
977高島彩:2007/04/18(水) 12:00:29
>>975
わかりません
978デフォルトの名無しさん:2007/04/18(水) 12:06:15
>>977 じゃあ、ドコで見たの? あるいは何をしようとしてるの?
SubItemsなら 持ってるのは TListItem.SubItems だが
979デフォルトの名無しさん:2007/04/18(水) 12:21:34
新スレ建てるの失敗したのでよろしく

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

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

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


<過去スレ>
DelWiki避難所
http://delwiki.info/?Delphi+%B4%D8%CF%A2%A4%CE%B2%E1%B5%EE%A5%B9%A5%EC%A5%C3%A5%C9
980デフォルトの名無しさん:2007/04/18(水) 12:24:16
2007ってどう?
delphi7よりも軽い?
981高島彩:2007/04/18(水) 12:43:09
たてました

くだすれDelphi(超初心者用)その41
http://pc11.2ch.net/test/read.cgi/tech/1176867736/
982デフォルトの名無しさん:2007/04/18(水) 12:55:08
>>981
お疲れ様。 
さて、残りのスレは、例によってM系列乱数の話でもするか
983高島彩:2007/04/18(水) 12:57:35
聞き方かえてみる
vsReportの仮想ListViewで左から2列目で下から2行目に入ってる値取り出す方法教えて
984デフォルトの名無しさん:2007/04/18(水) 12:59:16
>仮想ListViewで
無理
どうやってSubItemsに値をセットしているのかと
その基となる値を使っとけ
985高島彩:2007/04/18(水) 13:02:05
無理なんですか!?
986高島彩:2007/04/18(水) 13:11:30
TList.Items[]とかやって持ってこれないの?
987デフォルトの名無しさん:2007/04/18(水) 13:42:54
vsReport で何もしてなければ、
一番左は ListView1.Items[no].Caption;
左から2番目
ListView1.Items[no].SubItems[0];

下から2行目だから
with ListView1 do
Caption:= Items[Items.Count- 2].SubItems[0];
988高島彩:2007/04/18(水) 13:59:15
ありがとございます
ためしてみる
989デフォルトの名無しさん:2007/04/18(水) 14:06:16
Indy10でgetとかpostしたときのレスポンスコードが302だと
delphi上で動かしてたら例外がどーのこーので止まってしまいますが
これを出ないようにすることは可能ですか?
一応Monazillaのとおりに
try
  IdAntiFreeze1.Active := True;
  IdHTTP1.Post(URL,contents);
  IdAntiFreeze1.Active := False;
except
  on E:EIdHTTPProtocolException do begin
    if (E.ErrorCode = 302) then  begin
      //正常終了
    end;
  end
end;
こんな感じでやってるんですけど…
990高島彩:2007/04/18(水) 14:22:50
Items[Items.Count- 2]がエラーになります
991高島彩:2007/04/18(水) 14:24:48
すませんできました
992デフォルトの名無しさん:2007/04/18(水) 14:27:33
リストビューは通常、専用に用意された値を保持する領域を持ってる
それがItemsとかTListItem.SubItems。
で、仮想リストビューってのは自分で値を保持する変数なりリストなりを用意して、
描画時に「この値を表示して」とリストビューに指示する方式。

だから仮想リストビューの値のありかは、自分しか知らないはず。
だから984なんかは「無理。どうやってSubItemsに値をセットしているのかと。その基となる値を使っとけ」といってる。
俺も同感。
993高島彩:2007/04/18(水) 14:36:19
続けてすみません
やっぱりTListから持ってくること出来ないですか
やりたいことは最終行のSubItems[0]にある値を数字に直して
次の行に入れるListItemのSubItem[0]と引き算して答えをSubItem[1]に入れたいの
高速じゃないとイヤです
994デフォルトの名無しさん:2007/04/18(水) 14:38:10
アンドリューフォーク乙
995高島彩:2007/04/18(水) 14:39:25
わかんね
996高島彩:2007/04/18(水) 14:41:21
> TList.Itemsプロパティ
> Items プロパティを Count プロパティと一緒に使用すると,リスト内のすべてのオブジェクトを処理できます。
どうやるのよちっきしょう
997高島彩:2007/04/18(水) 14:41:59
Get?
998デフォルトの名無しさん:2007/04/18(水) 14:53:13
用語をデタラメに使ってるからさっぱり問題が判らんが、

数字に直して ー> StrToFloat( SubItems[0] )
高速じゃないとイヤです  ⇒ TListBoxはwindowsコントロールだから遅い。 TStringGridにしたら?
999デフォルトの名無しさん:2007/04/18(水) 14:54:08
無からデータを取り出したい。
と、このアフォはごねているわけですよ。
1000高島彩:2007/04/18(水) 14:55:13
[Pascal エラー] Unit2.pas(77): E2010 'string' と 'procedure, untyped pointer or untyped parameter' には互換性がありません
とかいわれた
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。