くだすれDelphi(超初心者向け)

このエントリーをはてなブックマークに追加
1毛の生えたフサギコ
このスレッドは、

他のスレッドでは書き込めない超低レベル、もしくは質問者自身何が何だが
分からない質問を勇気を持って書き込むスレッドです。

Delhi使いが優しくコメントを返しますが、お礼はDelhiの布教と初心者の
救済をお願いします。
abo^n
3超初心者:03/05/02 22:48
イベントはWindowsがアプリケーションに通知するということですが、
それを受け取るためにDephiではアプリケーションオブジェクトではなく
フォームオブジェクトにメソッドを定義し、フォームがメッセージを受け取る
と理解していいでしょうか?

フォーム上のどのコンポーネントをクリックしたかを識別するために
Sender変数を宣言し、これはWindowsが注目しているオブジェクトのアドレスが
格納されると思っているのですが、間違っていませんか?
Delphiとは、どんな意味ですか?
Senderは処理を委譲したい方=メッセージの送り手が 誰が送ってるかを教える為にあります。
この方式はボーランドが持っている特許の一つです。

6デフォルトの名無しさん:03/05/02 22:52
>>1のスレタイと本文のデルファイが違うのはなんで?
【誘導】

このスレは重複スレです。
移動をお願いします。
(次スレ凍結中のDelモナースレについてはこの限りではありません)

ミ,,゚Д゚彡フサギコのフサフサDelphi相談室H
http://pc2.2ch.net/test/read.cgi/tech/1045813143/
ミ,,゚Д゚彡フサギコのフサフサDelphi談話室I
http://pc2.2ch.net/test/read.cgi/tech/1047603258/
8超初心者のその2:03/05/02 22:58
Senderではなくキャッチャーとかアクセプターだったら意味が分かりやすいのですが
結局これは、「メッセージを送った者」ではなく「メッセージの対象となるもの」
なんだよね。
9デフォルトの名無しさん:03/05/02 23:00
>8

5を読んだら、SenderとはWindowsそのものを意味するように
感じたぞ。
105:03/05/02 23:03
だったらゴメン
 TControlコンポーネント=Windows系のコンポーネントは

Windowsからメッセージを貰うと、それをディスパッチしたメソッドでイベントがあればそのイベントを呼び出します。
11デフォルトの名無しさん:03/05/02 23:19
>>2->>1000
その答えは簡単です。Delphiなんてやめて今すぐVB.NETに乗り換えてください。
いらねー。
13デフォルトの名無しさん:03/05/02 23:52
>>4
Delphi n. デルフォイ
古代ギリシアの都市;Apolloの神託が下される神殿の所在地
http://onigiri.s3.xrea.com:8080/delphi/index.php?%5B%5BDelphi%A4%CE%CE%F2%BB%CB%5D%5D
昨日からDelphiいじりはじめたんですが、
簡単なサウンドノベルを作れるくらいになるまで、
どれくらいの時間がかかるものなんでしょうか。
>>14
全くの初心者として
3日〜1ヶ月
>>15
ありがとうございました。
17デフォルトの名無しさん:03/05/03 06:46
ほんとに初心者なんで、どなたかデフォルトで作られるUnit1.pasのコードの
意味をわかりやすく連載で説明してください。特に(誰が)イベントを送信し
(誰が)それを受け止めて、(誰が)メソッドを呼び出すのか?
Senderの意味ももっと初心者向けに説明してください。お願いします。

ほんとにDelphi使いになりたいのです。おねがいします。
18デフォルトの名無しさん:03/05/03 06:53
>>17
キーワードの上でF1を押せばヘルプが出ます。調べ癖をつけておけばいいでしょう。
Senderは、イベントを送信(もしくはWindowsからイベントを受け取ってそれを中継)したオブジェクトです。

というかほんとの初心者がSender使うかな?
呼びだし元を区別する必要さえ無ければ無用な引数ですよ。
unit Unit1; //<------- 自分のユニット名(ファイル名から拡張子を除いたものと同じ)

interface //<---これから他から見える部分の定義をする
uses //<-このユニットで使う他のユニットを定義する
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls; <-- ; マデが uses

type //<-- これから型を定義します。
TForm1 = class(TForm) //TForm1クラスの定義
Button1: TButton; //Button1変数の定義
procedure Button1Click(Sender: TObject); //メソッドの定義、ここまではパブリッシュ(型情報が実行モジュールに記録される)
private //他のユニットで参照出来ない部分の定義開始
public//他のユニットから参照出来る部分の定義開始
end;

var //変数の定義をします
Form1: TForm1;

implementation//ここから下は他のユニットから直接参照出来ない部分です

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);//メソッドの実体を定義します
begin
Button1.Tag:=Button1.Tag+1;
Button1.Caption:=IntToStr(Button1.Tag)+'回目';
end;

end. //ユニットの終了です

上のメソッドでは Sender を使っていません。 
Sender を使わないと Button1Click というメソッドは
Button1専用となってしまいますが、それで問題ない場合も多いでしょう。

Seder を使って同じコードを書くと
procedure TForm1.Button1Click(Sender: TObject);//メソッドの実体を定義します
begin
 with Sender As TButton do begin
  Tag:=.Tag+1;
  Caption:=IntToStr(Tag)+'回目';
 end;
end;

となります
{$R *.dfm}  

は、リソースを読み込むというコンパイラへの指示です。
具体的にはIDEで設計したフォーム情報が .dfm にあるのでこれを読み込みます。
これは pascalソースと一緒にコンパイルされ、実行ファイルに同封されます。

そして、実行されると、 Application.CreateForm でこのリソースを読み込んで
各種プロパティが設定される仕掛けです。

全体の構成は ヘルプの
[ユニットの構造と構文]
を見ると良いでしょう。
unit Unit1;
interface
uses { ここにユニットを指定する }
 { インターフェース部を記述する }
implementation
 uses { ここにユニットを指定する }
 { 実現部を記述する }
initialization
 { 初期化部を記述する }
finalization
 { 終了処理部を記述する }
 {ユニットは end とピリオドで終わらなければなりません。}
end.

という構造になっています。 
Delphiでは一つのunitごとに、まるでオブジェクトのように初期化・終了処理が書けるのです。
外部に単語を羅列したテキストファイルを用意しておいて、
そのテキストファイルからランダムで単語を選び出して表示させるということは可能でしょうか?
できれば外部のテキストファイルは誰でもいじれるような形にしたいのですが。
>>24
テキストファイルをメモリに読むには TStringListを使うとよいでしょう
 フォームの定義部に
private
FDicText:TStringList;
と追加します。

フォームの イベント OnCreate に
FDicText:=TStringList.Create;
としてインスタンスを作成しましょう。
テキストの読み込みは
FDicText.LoadFromFile( 'ファイル名'); です。
 忘れずに OnDestroyで
 FDicText.Free; と解放させるようにしましょう。

あとはランダムにテキストを表示する方法ですが、
 ボタンを貼り付け、ボタンのイベントで
Caption:=FDicText.Strings[Random(FDicText.Count)];

のようにします。
264:03/05/03 12:20
>>13
おお、半分冗談でしたが(w、サンクスです。
27デフォルトの名無しさん:03/05/03 12:54
Indyの使い方が解かる資料って無いですか?

>>20-23
いい仕事してますね。
30デフォルトの名無しさん:03/05/03 14:32
>>28
情報ありがとう
>>28
そういうのってどうやって見つけるの?
>>28
ボーランドのサイト逝け
3332:03/05/03 14:44
間違えた

>>31
ボーランドのサイト逝け
インプライズじゃないの?
35デフォルトの名無しさん:03/05/03 15:06
Del厨が荒らして糞スレ化しようとしてるな。(ゲラ
36デフォルトの名無しさん:03/05/03 15:08
ttp://members.jcom.home.ne.jp/monazilla/document/indytips.html
Indy-TIPSサイト上記以外にありませんか?

VB厨の多くはDelに移行した。
もうC#はだめだな(ゲラ
>>25
ありがとうございました、参考にさせていただきます。
39ウルトラ超初心者:03/05/03 20:08
C言語においてはmain関数がプログラム実行のエントリポイントである。
Delphiにおいてはprogramヘッダ以降、つまり、プロジェクトファイル(dprファイル)
がエントリポイントである。・・・・・でいいですよね。

そのdprファイルに書いてあるアプリケーションオブジェクトに対して、
初期化と実行のメソッド呼び出しが書いてありますが、具体的にどんなことが
メモリ上で起こっているのか教えてください。
ソース嫁、はありですか?
41デフォルトの名無しさん:03/05/03 20:19
>>37
ありがとうございました、参考にさせていただきます。
42ウルトラ超初心者:03/05/03 20:22
アプリケーションの初期化って、例えば変数領域をメモリに確保したら
\0を書き込むといったことでしょうか?
ここはモナースレの続編と考えてOK?
44デフォルトの名無しさん:03/05/03 20:31
「くだすれ」って、こんなことを書いたら噛みつかれるような低レベルな
疑問とか、たまに鼻水が流れるような寒いギャグとかを書くところだよ。
ウルトラ初心者向けのスレッドです。

中程度以上のスキルのある人は、「相談室」「モナー」に書くべきだよ。
そうすると相談スレが3つになるのだが…
4スレ常時見ろってか?
>>39 >>42
ウルトラ超初心者はそんなこと考えません。さようなら。
47デフォルトの名無しさん:03/05/03 20:35
delphiはバージョン2以降は、そんなに文法体系に変更がないので
旧バージョン向けの書籍でも入門本として活用できるかもしれないと
勝手に思っているのですが、

初心者がまず挫折しないで読める最初の1冊としておすすめはどれですか
(絶版は無しにしてください)
48デフォルトの名無しさん:03/05/03 20:39
>>46

ウルトラ超初心者だから考え込むんじゃない?
だって、いきなり Apprication.Run なんて書いてあったら
どんなことが起こっているのか謎だらけでしょ?
まあ俺なら2CHで質問しよう
とは思わないけどな。
本屋で立ち読みか、解説サイトみる。
>>48
ウルトラ超初心者はプロジェクトファイルを見ません。
>>39
いっぺんメッセージループを書いてみないと
Delphiが何を肩代わりしているかが見えてこないだろうね。

http://halbow.cool.ne.jp/ShousaiIndex.html

このへん参照のこと。
program Project1; //これからアプリ-ションを記述します。 プログラム名は Project1です
uses Forms,
Unit1 in 'Unit1.pas' {Form1}; //uses でどこにファイルがあるかを指定しています

{$R *.res}

begin //unit と違って、program はいきなり beginです。

{使用してるユニットによっては、他のユニット全部の初期化が終ってから別の
初期化をしたい場合があります。 
それが必要なユニットでInitProcという手続ポインタをフックリンクするような仕組みになっています。
}
Application.Initialize; //InitProcを呼び出します。 InitProcに何も登録されてなければ何もしません。


{ フォーム.Create を呼び出してもいいのですが、アプリをコントロールさせる
  メインフォームを登録する作業をさせる為に
}
Application.CreateForm(TForm1, Form1); //Form1:= TForm1.Create(Application); FMainForm := Form1; とほぼ等価


Application.Run; // HandleMessage; でメッセージ駆動を実現させながら 終了を待ちます
end.
詳しい内容は、ヘルプで プロジェクトの操作 という項目から見てゆくと良いでしょう。

{$R *.res}

unit にあったのは {$R *.dpr} でしたが、ここでは .res です。
このリソースにはバージョン情報や、アイコンなどが入っています。
他のリソースを入れたい場合は別の名前にして *.res ではなくリソース名を入れるといいでしょう
{$R filename.res filename.rc}   のようにコンパイル前のテキスト形式も使用可能です
54デフォルトの名無しさん:03/05/03 21:13
>>52

間違いのない説明だけど、初心者にはきびしいかも、

関数を「呼び出す」。この一言でも初心者には? 関数を「使う」なら
分かるみたいだけど、では「誰が」関数を呼び出すのか?? このあたりから
説明がいるのかもしれないね。

「初期化」にしても初心者なら  int a=0; //変数の初期化
程度のことしかしらないだろうから、オブジェクトの初期化はまったく
分かりづらいだろうね。
55デフォルトの名無しさん:03/05/03 21:16
メソッドとメンバ関数は同じ意味だと思うけど、
イベントハンドラとメソッドの違いは何ですか。
具体的に リソース スクリプトを書いて リソースを追加する方法は
ttp://halbow.cool.ne.jp/Notes/N008.html

リソーススクリプトといっても、たぶんRCDATAしか使わないでしょう。
アイコンは .dfm に、 文字列は resourcestring でもっと手軽に扱えるからです
Program ・・・ で記述する場合は、必ず Applicaton.XX が必要な訳ではありません。

コンソールアプリの場合は必要無い場合も多いでしょう。
ただ、COM や データベースを使う場合 Application.Initialize; が無いと必要な初期化がされない場合があります。
しかし Application 変数を使う為に uses Forms とやるといきなりexeサイズが肥大します。

そんな時は
if InitProc <> nil then TProcedure(InitProc);
と 自分で InitProcを呼び出すのも方法です。 InitProc は system ユニットなので uses を何もしなくても使えます。
>>55
ちゃう。
メソッドというのはC言語で関数と呼ばれるもの。Delphiでも関数と言ったりするが。
Javaではメソッドというな。ただの用語の違い。

メンバ関数はあるクラスオブジェクトに所属する関数(メソッド)。

イベントハンドラはあるイベントを処理するためのメソッド。
メソッドとイベントハンドラ は 定義されてる個所を見れば違いが判ります。

後に message WM_なんとか; と付いてるのがイベントハンドラです。
60Hyper初心者:03/05/03 21:31
話を蒸し返すようでもうしわけありませんが、イベントの発生について
教えてください。

人間があるアプリケーションのボタンをクリックすると。

1)Windowsがボタンを押したぞ!というメッセージをアプリケーションに送る。
2)Windowsがボタンを押したぞ!というメッセージをボタンに送る。
3)ボタンが押されちゃったぞ!というメッセージをWindowsに送る。
4)ボタンが押されちゃったぞ!というメッセージをアプリケーションに送る。

以上、どれが正しいのですか。
halbowたんってもう50のオジサンだったのね・・・。
あの量書くのすげーな。
>>60
Windows は 窓ハンドルが何をするにも必要と考えるといいでしょう。

ボタンを押すと、
Windowsが ボタンが押されたというメッセージを windowハンドルに登録された手続きに送ります。
63Hyper初心者:03/05/03 21:40
windowハンドルというものには沢山の手続きが登録されているそうですが、
そのwindowハンドルというものはオブジェクトでありプロシージャの集合体でありそうですが、
そもそもそれはどこに記述されているのですか?
64Hyper初心者:03/05/03 21:42
また、沢山のプロシージャの集合体の中から一つを選び出すメカニズムは
例のSender変数?が関係しているのですか?
Delphiはそういう細かいことを気にするヒマの無い人向けの言語。
それ以上細かいことを知りたければC++をやるべき。
ボタンを押せば、button1.clickが呼び出される。だからここで適当な
プロシージャを書けば良いだけ。
てかそのために解説サイトがあるんだから
51をよく読め。
67デフォルトの名無しさん:03/05/03 21:54
今日の日付 から X日前 や Y日後を指定すると
西暦何年の何月何日何曜日になるかを表示させるプログラムを
作りたいのですがどうしたらいいでしょうか?

>>67
ヘルプに載ってるっす。
69デフォルトの名無しさん:03/05/03 21:57
調べるのめんどいです。
>>69
死んでください。
7167:03/05/03 22:02
あう。69は偽者です。

>>68
どのヘルプを見ればいいのでしょうか?
>>71
Delphi
7367:03/05/03 22:05
>>72
69は偽者ですってば。
>>63-64

>そのwindowハンドルというものはオブジェクトでありプロシージャの集合体でありそうですが、
>そもそもそれはどこに記述されているのですか?
Windowsの中、もしくはVCLの中

>また、沢山のプロシージャの集合体の中から一つを選び出すメカニズムは
>例のSender変数?が関係しているのですか?
してない。Senderは単なるイベント発生源を区別する為の引数。

自分でTWinControlから派生して何か作ってみればわかると思う。
細かくは開発者ガイド読んでください。
>windowハンドルというものには沢山の手続きが登録されているそうですが、
 勘違いがありますよ。
 窓ハンドルには手続きは登録されていません。
 窓クラスにWndProc手続きを登録します。

>そもそもそれはどこに記述されているのですか?
 興味があるあなら、procedure TWinControl.CreateWnd; を丹念に読むと良いでしょう。



>また、沢山のプロシージャの集合体の中から一つを選び出すメカニズムは
 Windowsから最初に呼ばれるのは、 MakeObjectInstance が作った小さなコード片です。
 これはメソッドを呼ぶにはオブジェクトとメソッド入り口の2つのポインタ情報が必要な為
 Win16の頃にサンクと呼ばれていた仕掛け = MakeInstance を真似たものです。
このコード片でメソッドポインタを作って呼ばれるのは MainWndProcです。
MainWndProcからWindowProcイベント(デフォルトではWndProc)が呼ばれ、
WndProcから Dispatch(Message); によって それぞれのイベントハンドラが呼ばれます
76デフォルトの名無しさん:03/05/03 22:29
うごけばいいじゃん
超初心者スレとか行っても結局こういう質問しか来ないし。
だから質問スレは1つでいいんだよ。
Windowsのそのへんの仕掛けを精密に知りたいなら、
DelphiCDROMの中に日本語の Win32 API ヘルプがあるので、それをハードディスクにコピーして見ましょう。
キーワードは

ウィンドウ クラスの概要
RegisterClass
WNDCLASS

ウィンドウの概要
CreateWindow

ウィンドウ プロシージャの概要
WindowProc

これらを順に読むと良いでしょう
>>78
読みましたが何か?
>>79
では次に

コントロールの概要

をどうぞ
ボタンは コントロールの一つです。
Delphiがコントロールをラップする時の大きな問題は、
コントロールは既に WindowProcが定義されているという所にあります。
そこで、メッセージの流れをコントロールから自分に貰うようにしなければいけません。
その為に昔から使われているテクニックをサブクラスといいます。(OOのサブクラスと同じ用語です)

このあたりの細かい内容は

ttp://www.asahi-net.or.jp/~HA3T-NKMR/vcl3-1.htm

ここが詳しいです

初心者にこそ、こういう細かいレベルの話を丹念に追いかけて欲しい。
それが出来るのがDelphiなんだから
83デフォルトの名無しさん:03/05/03 23:47
Memo1のメモ欄でShift+Enterキーを押したらダイアログが開くようにするにはどうすればいいのでしょうか。
84デフォルトの名無しさん:03/05/03 23:52
それから、Button1.Caption を複数行に渡って記述するにはどうすればいいのでしょうか
>>83
Memo1のオブジェクトインスペクタ、イベントタブ OnKeyDown/OnKeyPress をダブルクリックしてコードを書く

>>84
TPanel を貼り付けて、それにラベルを貼り付ける
86デフォルトの名無しさん:03/05/04 00:11
すみません、例えばShift+Enterの時はどんなコードを書けばいいのでしょうか。
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key=VK_RETURN)
and (Shift= [ssShift]) then
with Sender as TMemo do ShowMessage(Text);
end;
88デフォルトの名無しさん:03/05/04 00:52
できました。ありがとうございます
そこでwith文使うと無駄に見にくくない?
俺なら
TMemo(Sender).ShowMessage(Text);か(Sender as TMemo).ShowMessage(Text);にするな。
残念だけど 87と同じにするなら

 ShowMessage(( Sender as TMemo).Text);

だな
91デフォルトの名無しさん:03/05/04 10:51
Indyなんだけど、htmlソースの取得は↓これで逝くんだけど
バイナリファイルの取得はどうするんですか?
Memo1.Lines.Text := IdHttp1.Get('http://www.2ch.net');
バイナリでも string 型は保持出来るから、string型に入れればいいと思うが、
それじゃ何か嫌だというなら、

var fout:TStream;
begin
fout:=TFileStream.Create('logo.gif',fmCreate);
try
IdHttp1.Get('http://www.ff.iij4u.or.jp/~ch2/2ch-logo.gif',fout);
finally fout.free;end;
ちなみに
http://pc2.2ch.net/test/read.cgi/tech/1009080085/22
を使って

writeFileStr( 'logo.gif' , IdHttp1.Get('http://www.ff.iij4u.or.jp/~ch2/2ch-logo.gif') );

と書く事も可能。 ただこの方法だと string型で一旦メモリ上に受信するので、効率は悪くなる
 
>>91-93
92,93 さんは分かっていると思うけど、URL が 1Gbyte のファイルを示していたら
メモリ不足でシステムが落ちるので、いったんファイルに落としておいたほうが吉。
または WinInet を使えば MSIE と同程度の品質が手に入る。キャッシュに記録が
残っちゃうけどね。
もし、RAD ツールとして Delphi を使いたいのなら Halbow の資料は読むな。
あれで間違った癖を実につけると、一生使い物にならなくなるぞ。

古文/漢文は日本文化の基礎(だった)からといって、日常も旧仮名遣いで会話したら大変だろ?
猫と同じで(というか狙っているのだろうけど)そんな世界もあるんだね。に押さえておくように。
>>96
あれは最初は読まないでいいかも知れないけどいつかは読んでおいた方がいいよ。
いつまでも二重のブラックボックスだけ使って満足するのもねえ…
彼らが日本の Delphi ユーザーの質を落としている。という点には同意。
日本発の強力なコンポーネントが出ないで終わった原因の一つだな。

Halbow 自身は良くやっていると思うよ。けどそれが集団全体のスキルアップには
つながらなかったという例だな。
以前、高岡氏が Halbow を説得できずにさじ投げたのをみて、こりゃ駄目だ。と思いましたとも。

99ナインティーナイン:03/05/04 18:56
Memo1に改行が入力されたときに
改行マークを入力して改行したいのですが
どのように書けばいいか教えて下さい。
#13#10が入力されたらみたいに書いてもできませんでした。
改行マークも?になってしまいます…
>>99
コード出せボケ。
101>>88:03/05/04 20:58
すみません、>>87の方法でダイアログは表示させるようになったのですが、
Shift+Enterキーを押したときにメモ欄に改行が入ってしまって困っています。
この改行が入らないようにするためにはどうすればよいでしょうか。
>>101
abort を入れたらいい。

if (Key=VK_RETURN)
and (Shift= [ssShift]) then begin
 with Sender as TMemo do ShowMessage(Text);
 abort; //これで デフォルトハンドラをスキップされてしまうからキー入力もスキップされる
end;


103>>88:03/05/04 21:28
abort;をいれてみたのでsが、やはり改行が入ってしまいます。
Delで使えるシリアル通信用コンポーネントでおすすめキボンヌ
TCom
>>103
 そうかゴメン。 KeyPress の方が先に処理されてるんだね。
じゃあ KeyDown イベントじゃなく KeyPress イベントで処理してみたら?

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
if (Key=#13)
and( (GetKeyState(VK_SHIFT)and $8000)<>0) then begin
with Sender as TMemo do ShowMessage(Text);
abort;
end;
end;
>>104
シリアル通信は API でボーレート設定して TStream 使うのが楽だと思うけどなあ
>>104
cport
109>>88:03/05/04 22:10
>>106
できました!どうもありがとうございます。
プロトコルもクソもないならね.
>>110
根本的に解ってない予感。
11299:03/05/05 00:29
>>100
すみません。
Memo1のOnChangeイベントなのですが
どうやって書いたらいいのかサッパリです。
どうかアドバイスお願いします。
113A:03/05/05 02:00
>>112
>#13#10が入力されたらみたいに書いてもできませんでした。
の、書いても、で書いた内容を、出してみろ、ってことでは?

それ以前に、出したい改行マークってのは、いったいどんなものを指してるの?
>>106
Abort は止めなさい。WM_KEYDOWN を「喰う」には
 key := 0;
が VCL の設計。
それと、イベント処理中に ShowMessage 入れるとイベント処理の順番が狂います。
ShowMessage を抜くと正しく動く。

>>106
>KeyDown より KeyPress の方が先に処理
WM_CHAR より先に WM_KEYDOWN が来ると?ShowMessage を入れたことでメッセージの順番が狂っているだけです。
動けばいいや。だといつまでたってもバグは減りませんよ。
>>114
VCLの設計はkey:=0; / key:=$0; と abort どちらでも動くようになってるよ。

後半の話は、ようするにダイアログを出した事で、ダイアログ内のメッセージループで
WM_CHAR が処理されてしまう為なんで、 これを解決するには
OnKeyDown でフラグ立てて OnKeyPressでフラグ見てと処理する方法もあるけど、
そうすると、そのフラグをどこに用意するかとか、ちょっと初心者には面倒かなと。
abort で動いているのは「たまたま」
EAbort で MainWndProc まで一気に落っこちてしまうでしょ?
 key := 0;
で指定のキーを無視するように指定した後に、何か別の処理していたらどうするの?
「現在の TMemo の実装で動くから」ってのは理由にならんでしょ。

後半も、初心者相手なら「イベント処理中にダイアログを出してはいけません」
と指導すべきではないかな?手数の問題ではない。
面倒でもフラグ、ないしは自分自身へのカスタムメッセージの PostMessage と
もっていくべきだろう。
117116:03/05/05 11:02
>>115
スレタイが「超初心者向け」と有るので細かいところをつついています。
すまん。悪気は無い。
>>99 あたりの人へ

TMemo はコントロールレベルでは改行コードを表示する機能を持っていません。
適当な文字を決めてそれを改行位置に挿入することで擬似的に表現できますが
TMemo にとってはそれは改行コードではなく単なる文字なのでうまくいきません。
(文字として削除されたり、コピー/ペーストされてしまう)

TRichEdit あたりから継承するか、改行コード表示能力を持ったコンポーネントを
TMemo の変わりに使うことを勧めます。

目標が、TMemo 互換の改行コード表示可能コンポーネントの製作。ならば話は別ですが。
119デフォルトの名無しさん:03/05/05 11:15
OnShowっていうのは、Windowが表示される直前に実行されるんですか?
それともWindowが表示された直後ですか?
>>116
  keyを0にするという処理と abort は理論的には等価ではないでしょ
 今回のkey処理をこの後無視させるのが key:=0;
 何か別の処理をしていたら、それも無視させるのが abort

abortに限らず例外は、基本的にどこで投げられても正常に動くように作らなければいけない。
だからabortを投げて、それで解放とか必須処理までが迂回されるようなら、それはバグだ。

イベント処理中にダイアログを出してはいけない訳ではない。
でも、この場合は確かに、PostMessage させた方がスマートだね。
  ∧_∧   
 ( ・∀・)/< こんなのみつけたっち♪
>>119
たしかに、ヘルプでは判り難いね。
 フォームが表示されたとき とあるし、
 Visible プロパティが true に設定されている場合とあるし、

実際には Show メソッドかVisible:=Trueになった直後に呼ばれる。
つまり描画される前に呼ばれる。
古い D1 のヘルプにはちゃんと

>OnShow イベントはフォームが可視になるときに発生します。
>OnShow イベントを使うと,フォームが表示される前に実行したい特殊処理を指定できます。

とあるんだけどね
>keyを0にするという処理と abort は理論的には等価ではないでしょ
そのとおり。だから 115 の書き込みは間違い。OK?
ようするに、
 abortを投げて エディタへのキー入力処理がスキップされるかどうかは実装による
 個人的には abortを投げてなおキー入力をする実装は変だと思うが、そんな保証はない。

 って事だな。

 しかし key:=0 でキー入力処理がスキップされるかどうかは誰が保証してるんだ?
 ヘルプにもそれは書かれていないような・・・・
ただ、代入した文字に変更されて入力される事は var が付いてるから予測可能だけど
127デフォルトの名無しさん:03/05/05 12:26
Delphiっての始めたいんですけど、なんか買わなきゃいけないんですか?
>>127
昔はタダだったけど今は1万円払わされた挙句に商用開発ができない
129127:03/05/05 12:33
>>128
http://www.borland.co.jp/sales/delphi.html
これのことだよね。どうしようかな?
>>127
目的は何?

・フリーソフトでも作って社会に貢献したい
http://www.borland.co.jp/delphi/personal/

・技術習得を通して自分を高めたい
 D7 pro を買う方がいいでしょう

・プログラマにしかなれそうもないから
 Delphiより他に適当なのがあるでしょう
7は異端扱いで、Delスレで質問してもスレ違いだと言われるから6を使った方がいいよ。
132デフォルトの名無しさん:03/05/05 13:00
>>128
D6は今も無償配布されてるだろ。

>>127
ソースコードが付いてるので、深く突っ込んでやるならD7 proがいいよ。
133デフォルトの名無しさん:03/05/05 13:01
VC++でもライブラリのソースコードくらいはついていますね。
>>133
define 使いまくりで読めたもんじゃないけどな
135127:03/05/05 13:14
>>130
さんくす。
>・技術習得を通して自分を高めたい
でつ。いままでVC++、VBしかしたこと無いんで、なんとなくやってみようかと

とりあえず6Personalいじってみようと思います。
入門に最適なページは? ってどうせ聞いてくるだろうから

http://www.google.co.jp/search?q=delphi+%E5%85%A5%E9%96%80


・・・と自分でも見たら、なんかpascalシュミレータまで作ってる人いるな
138デフォルトの名無しさん:03/05/05 16:10
OpenPictureDialogでデスクトップへのショートカット(?)や
最近使ったファイルへのショートカットを消して、
フォルダの移動(↑ボタン)などを消す(もしくは使用不可)にするには
どのようにすれば良いのでしょうか?
(ofNoChangeDirをTrueにしてもフォルダの移動が出来てしまうし)

ofOldStyleをTrueにすればデスクトップへのリンクは消えるのですが、
イメージが出ないので、できればOldStyleは使わずに済ませたいのですが。
>>138
やった事ないから巧くゆくかどうか知らないけど、
ダイアログの外見を変えるには Template プロパティで ダイアログテンプレートリソースを指定します。
 OpenPictureDialog は ExtDlgs.rc を 使っています。

こいつを自分で作成してみてはどうでしょう?
140138:03/05/05 17:33
>>139
レスありがとうございます。

つまりTCommonDialogから継承してコンポーネントを自作するしかないという事ですね?(^^;

もう少し簡単な方法はないものでしょうか・・・。
>>140
いや継承っていっても TOpenPictureDialog で Executeだけ継承すればいい筈
Executeだけ継承すればいい筈
143138:03/05/05 17:48
>>141
わかりました。前向きに善処してみます。
ありがとうございました。
お勧めのサイトや書籍はありますか?
フォームを新しく開くにはどうすればいいでしょうか?
IDEで?コードで?どっち?
>>126 ソースコード。
>>149
ソースが保証ならabortだって同じじゃないか。
だいたい#0 ってキーコードが必要なったらどうする?
151148:03/05/05 19:35
>>148
コードで新しく開きたいです
152147:03/05/05 19:35
>>148
すいません間違えました
なら ボタンイベントで

with TForm1.Create(Self) do
Left:=Self.Left+10;
show;
end;

とかやってみたら?
154147:03/05/05 20:07
>>153
何も起こらないのですが。
あゴメン begin 忘れてた。
with TForm1.Create(Self) do
begin
 Left:=Self.Left+10;
 show;
end;


156147:03/05/05 20:24
>>155
できました。フォームを作るには*.Create(作りたいフォームの名前)ですね。
ありがとうございました。
>>156
なんか違うぞ
 フォームのクラス名.Create( 親の名前 );

親の名前はメインフォームか Applicationが適当だろう

procedure TForm1.Button1Click(Sender: TObject);
var Form:TForm;
begin
Form:=TForm.Create(Application);
with (Sender as TWinControl).Parent do begin
Form.Left:=Left+5;
Form.Top :=Top+5;
end;
with TButton.Create(Form) do begin
Parent :=Form;
Caption:=Button1.Caption;
OnClick:=Button1Click;
end;
Form.Show;
end;
158デフォルトの名無しさん:03/05/05 20:53
コンポーネントのコントロールの違いを教えてください。
それと、Form1はVar節で宣言されているので変数の一種だと思いますが、
Form1はクラスではないのですか。
159デフォルトの名無しさん:03/05/05 21:08
>>158
両方とも状況によって意味が変わる言葉だけど、Delphiでの意味を知りたければ
ヘルプの「オブジェクト,コンポーネント,コントロール」を読め。

Form1は、TForm1型の変数だ。
160デフォルトの名無しさん:03/05/05 21:09
実行しているアプリがあるフォルダのパスはどうやったら得られますか?
>>160
自分自身?他のアプリ?
質問は、解答者が把握できるだけの情報を書きましょうね。

ちなみに自身だと、ExtractFilePath(ParamStr(0))
162動画直リン:03/05/05 21:13
Delphiを二つ起動させた時に、
タスクバーには2つとも「Delphi 6」と出るわけですが、
なぜ「Delphi 6 - Project1」「Delphi 6 - Project2」ではないのでしょうか?
全く気のきかない開発環境に激萎えしてしまいました
>>163
それがそんなに重要なことなんですか?
>>164
重要かどうかが気になりますか?

ここはくだすれですよ?
というか質問じゃなくてけなしてるんだから
荒らしでしょ
↑Del厨信者が現れた
不便なところを指摘されると荒らし呼ばわりで済ます
ボーランドに落ち度は無いと思い込んでいる
168デフォルトの名無しさん:03/05/06 02:10
つーか、SDIがそもそも多重起動しないことが前提になってるし。
Delphiを二つ三つ起動するとどれがどれやら。
くだ質です
右クリックを割り当てたPanel上にComboBoxを配置してあるんですが
そのComboBoxでは右クリックが効かないようにするにはどうしたらいいでしょうか?
右クリックを割り当てた → ポップアップメニューを割り当てた
なら、

割り当てをやめて(もしくはAutoPopupをFalseにして)、PanelのMouseUpイベントで
PopupMenuのPopupメソッドを呼んで、メニューを表示する。
フリーで開発できる環境を整えようとしたとき、
Delphi Personal と Eclipse どっちが良いでしょうか?
小さなアプリケーションが作れる程度でいいのですが。
>161
Application.Exename
すみませんが質問です。
継承で、プライベートメソッドの中身をごっそり入れ替えたいのですが、
こういう場合はどうすればいいのでしょうか?
やっぱムリですかね?
>>170
ありがとうございます
PopupMenuです
175デフォルトの名無しさん:03/05/06 05:08
質問があります。
delphiで作ったアプリケーションAから任意のファイルFを別のアプリケーションBで実行させることは出来ますか?
ちなみにファイルFはアプリケーションBとは関連付けられていない場合です。

例をあげるとこんな感じです。
(例)
ボタンを押すとsample.txtファイルがNotepadで開く
(sample.txtはNotepadとは関連付けられていない)

関連付けられている場合のやり方は検索で見つかったのですが、
この場合のやり方が分かりません。
176動画直リン:03/05/06 05:13
177Dale L. Fuller:03/05/06 05:18
>>163
ありがとう。年末の D8 までには直します。
178デフォルトの名無しさん:03/05/06 06:04
Delphi Acid Floor
http://www.wwlnk.com/boheme/
のDelphi Tipsに他のアプリを起動する
という項目があります
>>173
それができたら Private/Protect/Public の存在意義が無くなる。
こっそり VMT を書き換えるという手もあるが、非仮想関数には手出しできない。

素直にクラスのソースをコピーして書き換えるべきではないかな?
180デフォルトの名無しさん:03/05/06 07:43
i:Integer;と
Button1:TButto;では
メモリ上の配置が異なるそうですが(スタックとかヒープとか)

なぜそうなっているのですか?スタックとかヒープとかよく分からないので
メモリの使い方を教えてください。そもそもヒープって何?
181A:03/05/06 08:03
>>175
>>178 のサイトにあるやり方だと、ただ単にメモ帳は起動できても、テキストを読ませた状態での
起動は出来ない。とかレスが付きそうなので、ヒントを。

lpParameters に 開きたいテキストファイルを指定してやれば良い。

>>178のサイトを見た上で、そのサンプルを参考にDelphiのヘルプを見れば
簡単に上の意味がわかるはず。
がんがれ。
182デフォルトの名無しさん:03/05/06 08:22
Del6とDel1は共存できますか?
OS/2で動くソフトを開発するために、無理やりWin-OS/2で動くソフトを
開発したいのですが・・・。
>>180
 クラスの場合は、ヒープにインスタンス=実体が取られて、変数にはその参照=ポインタが取られます

 ヒープというのは、スタックでもなく定数域でもない場所の事で、メモリ確保の手続きで確保される領域です。
ヒープもスタックも説明できないくせにレスすんなよ。
>>182
Delphi1は16bit環境で、16bit環境ならWin-OS/2で動きます。(実際動かしていました)

Delphiは全て共存出来ます。
ただし、BDEは最新バージョンとなります(比較的下位互換は守られているのでまあ大丈夫ですが)
またファイルの関連付は共通になるので
自分で関連付を増やして右ボタンメニューで選択出来るようにすると使い易くなるでしょう。
>>184
ごめん、あの説明じゃ判らなかった?

スタックというのは 一つのポインタ(アドレスを覚えている変数 実際にはCPUのレジスタ)を使って
push 操作 ポインタを小さくしてから書込
pop 操作 読んでからポインタを大きくする
という基本操作で読み書きする領域の事。
 変数をスタックに取る場合は、ベースポインタというもう一つの変数を使って、
 スタックポインタをベースポインタにコピーしてから、スタックポインタを変数領域分小さくする

こういうpushや確保操作を関数・手続の先頭で行って 出口で元に戻すようにすれば
関数がネストしても大丈夫になるわけ

・・・・つづくかもしれない
stack領域を配列として説明すると

push(data)  は dec(sp); stack[sp] := data;
例えば3ワード分の領域確保は
push(bp);bp:=sp; sp:=sp-3;
 こうすれば、プログラム中ではstack[ bp-1] [ bp-2] [ bp-3] の3つを変数として使える。
 もっともDelphiのコンパイラはbpを使わずに済ます場合も多い。
 sp:=sp-3 だけしておいて stack[sp+2] [sp+0] [sp+0] を変数として使うわけだ


終了操作は、確保前の sp は bp にあるので sp:=bp ;pop(bp) とする
pop(data)  は data:=stack[sp];inc(sp);

で、クラスの場合、どうしてスタックにインスタンス領域を取らないかというと、
スタックだと、こういう構造をしているので関数の寿命と変数の寿命が一致してしまう。
C++では、関数の寿命と一致させられる事も出来るし、その場合コンストラクタや
デストラクタが自動的に働いて便利な面もあるけど、それは便利なだけであって本質じゃない。
その代わり . と -> の2つの参照方法が出て煩雑という欠点も出た。
クラスのように独立性のある構造をローカルスタックに作る必然性がないという事だろう。

そこで、Delphiではクラスの変数は 自動的に参照になる事にした。
C++でいう -> を無くして、全て . だけに出来るわけだ。

そして、別の変数に代入した場合、実体ではなく参照がコピーされる
これは少し注意しなければいけない。 コピーされて実体が2つなったと元の変数を解放しちゃいけない。
189180:03/05/06 09:29
>>180

昔、Macでプログラミングを勉強していたとき、ポインタのポインタ
と言うものが出てきた、さっぱり分からなかったけど、つまり、

オブジェクトはヒープという領域に動的に確保され(アプリケーション実行後ってこと?)
そのヒープ領域は「圧縮」されるので、オブジェクトはアドレスが移動する、だから
オブジェクトを参照するポインタ、これ自身もヒープに存在するので、スタック領域に
固定的にポインタのポインタが確保される・・・・みたいなことを本で読んだことがあります。

つまり、オブジェクトって、簡単にアプリケーション実行後はアドレスがころころ変更する
ものなのでしょうか?・・まとめていうと、ヒープ領域に取られた変数なりオブジェクトは
アドレスが消滅まで固定されるものではないのでしょうか?
なぜ、そんな仕様になっているかというと、「アプリケーション実行後、動的に確保されるから」
なのでしょうか?
>>189
Delphiのオブジェクトは勝手に再配置されません。
もし、再配置されてしまうと、それを参照している全てのポインタ変数を書き換える必要があるからです。
理屈の上では、ポインタ変数を2ワード変数としてリンクリストにして管理とか考えられるのですが、
現実には、整数型に型キャストして使ってたり行儀の悪いプログラムも多いですからね
191180:03/05/06 09:42
ヒープに確保したオブジェクトは明示的に開放しないといけませんが、
スタックみたいに用が済んだら何故開放するとかならなかったのですか?

あ、なんかホントにくだらない質問かもしれない
Delphiのクラスインスタンス(オブジェクト)が作成されるタイミングは、
 コンストラクタがクラスメソッドの形式で呼ばれた時です。
この時にヒープからメモリも確保され、その後コンストラクタによる初期化がされます。

実は、メモリを自前で確保してから、コンストラクタをメソッドの格好で呼ぶ方法もありますが・・・今は無視

解放されるタイミングは デストラクタが呼ばれた時です。
明示的に解放しなくても、
用が済んだらデストラクタが呼ばれる仕掛けをプログラマが作る事で自動的解放されます。

例えば、コンポーネントはコンストラクタで親オブジェクトを指定しますが、親が解放されれば自動的に子が解放されます。
また、インターフェース型を使えば、参照してる変数が無くなった時点で自動的に解放されます。
たとえばインターフェース型ローカル変数なら、その関数から抜ける時に自動的に解放されます。

なお、関数内でローカルにオブジェクトを作って廃棄する場合は普通に try finally 構文を使うと良いでしょう。
with 構文と組み合わせると

with TStringList.Create do try
 ・・・・ 処理 ・・・
finally Free; end;

のように変数名の定義無しに安全に作って解放させる事も出来ます。
>>191
プログラム終了以外に"簡単に"「用が済んだ」ことを調べる方法がないから。
GC厨は放っておけ。
194デフォルトの名無しさん:03/05/06 10:45
度々すみません。
Indyでバイナリファイルを取得する際に、
ダウンロードしたサイズ(進捗情報)を取得することは可能でしょうか?
よろしければご教授願います。


195スケベ大王:03/05/06 10:46
                 ┌─┐
                 |や.|
                 |っ |
                 │ぱ│
                 │モ│
                 │ロ .|
                 │よ .|
      バカ    ゴルァ  │ !!.│
                 └─┤    プンプン
    ヽ(`Д´)ノ ヽ(`Д´)ノ  (`Д´)ノ    ( `Д)
    | ̄ ̄ ̄|─| ̄ ̄ ̄|─| ̄ ̄ ̄|─□( ヽ┐U
〜 〜  ̄◎ ̄  . ̄◎ ̄   ̄◎ ̄   ◎−>┘◎


http://www.dvd01.hamstar.jp
>>194
TStream のどれかを使ってる筈だから、それを継承して
自分でイベントをつけておいたら?
197デフォルトの名無しさん:03/05/06 11:59
>>181
バカ、載ってるよ
198デフォルトの名無しさん:03/05/06 12:19
フォントの種類によって微妙に文字のサイズが違いますよね?

さらに、MS P ゴシック など「P」が付いている文字は
幅も文字によって変わってきます。

では、どんなフォントでも文字でもきちんとピッタリの高さと幅を得るには
どのようにしたら良いのでしょうか?

(「プロポーショナルフォントを使わない」は無しでお願いします)

ダサい方法として、一旦AutoSizeのあるコンポーネント(ラベルとか)に入れて、
サイズを取得する方法があると思いますが、もっとちゃんとした方法は
あるのでしょうか?
>>198
 単に 高さ幅が知りたいなら Canvas.TextExtent で求まるじゃない。

サイズをピタリとあわせたいなら TextExtent でサイズ見ながら調整するしかない。
縦横ともにピタリとあわせたいなら、
http://www.google.co.jp/search?q=LOGFONT+Delphi&lr=lang_ja
200198:03/05/06 12:51
>>199
TextExtentもLogFontも知りませんでした。
おかげさまで解決できました。

ありがとうございます。
201A:03/05/06 14:57
>>197
すまん。どこに載ってるのか、見つからなかったが…。

「EXEを指定して起動する方法」と、
「ファイル名を指定して関連付けられたアプリを起動する方法」 ならあるけど、
>>175 が聞いてるのは、
「関連付けられていないアプリを、ファイルを開いた状態で起動する方法」 だし…。
202デフォルトの名無しさん:03/05/06 17:05
すみません、TPageControlのタブを非表示にするにはどうすればいいでしょうか
非表示にしたいTabControlsのTabVisibleをFalse

204デフォルトの名無しさん:03/05/06 18:54
DelphiはDelphi自身で作られている、というフレーズをよく聞くのですが
実際どの程度がDelphiで作られているのでしょうか?
IDEだけですか?それともコンパイラもDelphiでつくられているのでしょうか
もしそうだとするとそのDelphiのコンパイラを作ったDelphiはどうやってコンパイルしたのかと
疑問に思いました
>>204
VCLとかIDEとかRaveとかDatabase Explorerとか。コンパイラは違う。
Delphiの場合はアセンブリな本体にBorland C++のスタブが付いているっぽい(実際は知らん)
普通は、他の言語で最初のコンパイラを書き、それに自己記述したソースを食わせて作るのかな。
最初の最初のアセンブラだけはバイナリ直打ちかも…
>>205-206
数日悩んでいたのがすっきりしました
ありがとうございます
208202:03/05/06 20:23
>>203
すみません、タブの内容を表示したままタブを非表示にしたいのですが、どうすればいいでしょうか
非表示にしたいTabControlsの"TabVisible"をFalse
直後にPageControlsのActivePage:=非表示にしたTabControls
>>168
> つーか、SDIがそもそも多重起動しないことが前提になってるし。

ハァ ? MDI と SDI の区別ついてるのか ?

> Delphiを二つ三つ起動するとどれがどれやら。

だから不便だと言ってるんだろ ?
そういう状況がどれほどあるかは知らんけど。
ちなみに、VC++6 は プロジェクト名 - Microsoft VC++ - ファイル名 と表示される。
ファイル名はいらないから、プロジェクト名ぐらい表示してもバチはあたらんと思う。
211202:03/05/06 21:55
>>209
どうもありがとうございます。できました。
>>204
最初のdcc.exeはTurbo Pascal製と思われ。
最初のTurbo Pascalは、
Pascalソースをハンドアセンブルで作ったらしい。
213デフォルトの名無しさん:03/05/06 22:15
前に方にもカキコされていたけど、やっぱり書籍で最初の一歩を踏み出したので、

   最初に読んでつまずかない初心者向けの本

を一冊ご推薦ください。アスキーのオフィシャルコースウエア基礎編なんて
どうですか?やっぱむずかしいですか? 学習時間は毎日夜1時間程度を
想定してください。

インターネットでの学習はもうちょっと後で考えます。
ものすごく初心な質問ですみません。
Label.Captionの'リンク'という文字に
ハイパーリンクでhttp://〜〜〜〜〜/というホームページを
リンクしたいのですがどのようにすればいいか教えて頂けませんか?
>>214
もう一歩掘り下げろ。
216214:03/05/06 23:22
>>215
LabelのCaptionプロパティーに
http://pc2.2ch.net/test/read.cgi/tech/1051882835/』と
書いても、Stringと認識されてリンクになりません。
青い字で下線のついたリンクにするには
どのようにかけばよろしいですか?
>>216
with Label.Canvas.Font do
begin
 Color := clBlue;
 Style := (fsUnderline);
end;
218214:03/05/06 23:34
>>217
メチャメチャりんくらしくなりましたが
リンクができていません。
お願いします。
どうすればホームページにリンクすることができますか?
まず、uses上でShellAPIを宣言する。

次に、Labelのオブジェクトインスペクタ上で
1. Fontプロパティでフォントの色を青にする。
2. FontプロパティのStyleプロパティにfsUnderlineを指定する。
3. Cursorプロパティを crHandPointに設定する。

次に、Labelの OnClickイベント上で、以下のコードを記述する。
procedure TForm1.LabelClick(Sender: TObject);
begin
 ShellExecute(Handle, 'open', 'http://www.2ch.net/2ch.html', nil, nil, SW_SHOW);
end;

一番目の引数:親ウィンドウのハンドル
二番目の引数:ファイルを開く指示('print'と書くと、印刷になる)
三番目の引数:開くファイル名(この場合はURL)
四番目の引数:実行ファイルへのパラメータ
五番目の引数:作業フォルダ
六番目の引数:実行方法。SW_SHOWはウィンドウを標準で実行。
SW_MAXIMIZEなら最大化)。
詳しくはWin32APIヘルプを見れ。

220214:03/05/06 23:54
>>219
ご親切にほんとうにありがとうございました。
勉強になります。
ShellAPIをこの期に勉強します。
ありがとうございました。
221デフォルトの名無しさん:03/05/07 03:28
Windowsの[スタート]メニューから[ファイル名を指定して実行]を選んで

 notepad.exe C:\WINDOWS\デスクトップ\新規テキストファイル.txt

とかやればデスクトップ上にある新規テキストファイル.txtを開くことが出来る。
別にこれは関連付けられたファイルであろうとなかろうと関係ない。

これと同じことをやっているのがShellExecuteです。
>>217
ついでにマウスカーソルも変えとけ
223デフォルトの名無しさん:03/05/07 03:50
初めてカキコさせていただきます。さっそく質問なんですが、実はバイト先の
HPで荒らしが発生しました。荒らしとは言っても掲示板での悪口なのですが。
そこでそれを書き込んだ人のリモートホストやアクセス先やなんかを抜きたい
のですが、どうすればいいのでしょうか?本当に困ってます。
よろしくお願いします
ShellExecuteで
コマンドライン引数にファイルアドレスを渡せないアプリケーションのばあいはどうやれば…
paramstr(1)にファイルアドレスを代入とかはできないんですよね。。
225デフォルトの名無しさん:03/05/07 04:08
>>223
ここで聞くな、アホ
226デフォルトの名無しさん:03/05/07 04:11
>>223
1.掲示板のシステムにリモートホストやアクセス先を記録するようにする。
2.記録されたデータを見る。

それだけのことだ。
227223:03/05/07 04:22
225>ごめんなさい。。。
226>1、それについてはアクセス解析なのどHPをいろいろ見てきましたので
なんとかできそうです。
    2、ここなんですが記録できるようにする前のデータはみれないのでしょうか?
それが不安です。掲示板で誰が書き込んだのか知りたいのですが。
板が違うようですがよければお願いします。 
228__:03/05/07 04:25
229デフォルトの名無しさん:03/05/07 04:31
>>227
>    2、ここなんですが記録できるようにする前のデータはみれないのでしょうか?
無理。
httpサーバーのログがみれるなら、そこから探せ。
>>210
プロジェクトグループは使えない状況?

>>224
1)あきらめる
2)SendMessage連発で開くダイアログを強制操作
3)作者に連絡して引数を処理してもらう
231たまご:03/05/07 05:04
229>httpサーバーのログってどうやってみるんですか?
無知ですみません。
232動画直リン:03/05/07 05:13
233デフォルトの名無しさん:03/05/07 05:47
>>231
httpサーバーの管理者に連絡してください。
234__:03/05/07 05:58
235デフォルトの名無しさん:03/05/07 06:40
C/C++/Java/C#みたいに

 i += 1;

のような演算子をつかいたいのですが、Delphiにはありませんか?
>>235
プロパティには使えないけど Inc(i, n) というのはある。
詳細はヘルプを見てください。
237235:03/05/07 07:42
>236
タイプ量が増えるのが・・・。ありがとうございました。
ああ C系に比べるとタイプ量は多くなるね。
同じ感覚で書こうとすると1行に収まらなくなる事も増えてくる。

でも、その方がいいと最近思えてきたよ。 
コンパイラだから短く書こうが、改行を入れようが 吐かれるコードは同じだしね。

で、この方が後で読み廉いんだよ。
239235:03/05/07 08:10
>238

でも i := i + 1;
は、感覚的にまだ慣れませんね。 昔のBASICみたいで、太古に逆戻り
したみたいです。

最近やっと、「else句の前にセミコロンを何故つけてはいけないのか」
やっとわかりました。市販されているPascalの書籍をざーっと読んでみて一冊だけ
わかりやすい説明がありました。

Pascalにおいては、セミコロンは 文と文の区切りの記号である。だから

  (文);(文)  を想定しないといけない。


if (式)then (文1)else(文2);

文1は単文じゃないといけないので、(文1)の末尾にセミコロンをつけると

then  a:=0 ;(空文あり)else

になるのですね。 ずっと悩んでいました。
Windows2000なら\WinNT、98なら\Windowsというファイルが
ウィンドウズファイルですよね。
Windowsファイル下にファイルをコピーしたいのですが
OSによってそのファイルのPATHが違って
どのようにウィンドウズファイル下にコピーすればいいか
分からなくて困っています。
//コピー元ファイル名
CopyFrom := 'コピーしたいファイル.*';
//テンポラリフォルダのパス取得
GetTempPath(SizeOf(TempPath), TempPath);
//コピー先ファイル名
CopyTo := TempPath + ExtractFileName(CopyFrom);
//コピー処理
CopyFile(PChar(CopyFrom),
PChar(CopyTo),
True);
とするとTempファイルにコピーされます。
これをTemp→Windows or WINNTにしたいです。
どうかよろしくお願いします<(__)>
>>240
Windowsディレクトリ:GetWindowsDirectory
Systemディレクトリ:GetSystemDirectory
Delから、起動中のAccess製アプリに、
とあるデータ(文字列など)を送りたいのですが、
ファイルやDBを経由しないで送るにはどんな方法がありますか?
243A:03/05/07 11:13
>>239
Cから来ると、タイプ量がだいぶ増えるからね。そもそも、begin endからしてそうだし。
Cは、どっちかというと、実戦重視で少しでも少ないタイプでコーディングできるように作られてる。
その代わり、書いた時はいいけど、後で読もうと思ったときに、汚い書きかたしてると苦労する。
書き方の自由度が広いから、他の人が書いたソースを読むのは大変。

pascalは、もともと教育用に作られただけあって、生真面目というかチェックが厳しい。
でも、そのおかげで、誰が書いても大体同じような書き方になって、他人のソースも読みやすい。
実は、生徒の書いたコードを先生が楽に読んで採点できるようにそうしたって噂も(w

設計思想の違いだから、どっちがいいとは言えない。
+=ぐらい使いたいと思うことは、漏れも良くあるけどね(w
244デフォルトの名無しさん:03/05/07 11:25
くだ質で恐縮ですが...

webページのフォームに文字を書き込んでpostする部分を
delphiで書きたいんですが、どうすればいいのでしょうか?

具体的には、ある掲示板の内容を読み込んで、ある条件の
カキコがあったら、自動的にレスを書き込むようなプログラム
です。

インターネット関連のプログラミングは初めてなので、はっきり
言って右も左もわかりません。よろしくおながいします。
>>243
> Cは、どっちかというと、実戦重視で少しでも少ないタイプでコーディングできるように作られてる。

標準ライブラリとか標準ライブラリとか標準ライブラリとかな。
247A:03/05/07 11:56
>>244
とりあえず、Delphiでどうこうというより、まずは、CGIについて調べるといいよ。
ブラウザが、フォームに入力された内容を、どうやってサーバーにpostしているか分かれば、
Delphiに代わりにそれを送らせるのは、難しくない。
いちおう、Delphiで、postするには、Indy っていうコンポーネント郡を使うと楽。
CGIが分かってからの話だけど。
248A:03/05/07 11:58
>>242
そのアプリのつくり次第だと思うけど。
クリップボードから送るとか、キーボードから入力された風に装うとか。
249デフォルトの名無しさん:03/05/07 12:13
TFontDialogでダイアログを開いた時に
フォントの種類を選択できますが、
この種類を限定する事は可能ですか?
(例えば日本語が使えるフォントのみ指定するとか)
(できればフォントを削除するとか手荒なことをせずに実現したいのですが・・)
250244:03/05/07 12:26
さっそくありがとうございます。

>>246
たくさんの検索結果をありがと (泣
見てみます。

>>247
そうですね。フォームからのデータを受ける側の処理は
perlで書いたことはあるんですが...確か文字列の
変換とか面倒くさいことをしてたような。

IndvClientsのTIdhttpなんかを使うんでしょうね。
webで検索すると、以前のDelphiに付属してた
コンポーネントを使った例ばかりで...
ちょっと勉強してみます。
251A:03/05/07 13:19
>>250
Indyを使ったpostの例は、モナジラプロジェクトのところにあったと思う。
>>240-241
NT系だと管理者権限ユーザーとしてログオンしていないと
これらのフォルダに書き込めないとか,ありませんか?
>>249
可能です。楽しみたいなら TFontDialog を継承して WndProc を好きに書き換える。
楽したいなら適当なコンポーネントを拾ってくる。
>>253
それを普通「不可能」というわけだが。
255249:03/05/07 13:37
>>253
レスありがとうございます。
つまり、TFontDialon単体では実現できないんですね。

もうひとつ質問させて下さい。
D7なのですが、フォントを日本語不可の文字にすると当然TMemoで
「あああ」と入れたら文字化けしますよね。
これをフォントをMSゴシックなどに戻しても文字化けしたままなのですが、
これはどう解決すれば良いでしょうか?
(フォントはTFontDialogで変更します)
256249:03/05/07 13:38
書き忘れました。
フォントの文字化けが戻らない不具合は
WindowsXPのみで確認できています。
Windows98では問題ありませんでした。
257249:03/05/07 15:31
やってしまった・・・
自己解決です。

TFontDialogを開くと「文字セット」という項目があり、
日本語がないフォントを選択するとそこが「欧文」等になっていて、
MSゴシックに戻してもそこが欧文のままになっていたので
化けていました。

ああ、情けない・・・。
258244:03/05/07 16:32
>>251
ああ、助かりました。

janeプロジェクトがdelphiを使ってるんですね。
掲示板に書き込むところのソースは、なかなか
興味深いものがありました。多謝です。
259デフォルトの名無しさん:03/05/07 18:38
TListBoxで複数のカラムと文字列の表示をするにはどんな設定してどのような
代入をすればいいですか?お願いします
なぜTListViewを使わないのですか?
>>254, 255
そりゃそうなんだけどさぁ...
開発ツールは新しいコードを書くためのツールなんだし。
「超初心者」向け、ってことでもなぁ...

ま、突っ込みありがとう >>254
262240:03/05/07 19:02
>>241
ありがとうございます。
無事できました。
263デフォルトの名無しさん:03/05/07 19:20
>>260
簡単な使い方教えてください。分かりやすい解説がなくて。よろしくです
264デフォルトの名無しさん:03/05/07 19:37
TreeViewの話なのですが、子ノードに文字列を挿入して
その子ノードに格納してある文字列を表示させるには
どういった書き方をすればいいのでしょうか?
具体的には


 子←「一番目」というデータを格納
 子←「二番目」というデータを格納

して、クリックしたら挿入した文字列をShowMessageさせたいんです。
どなたか教えて下さい。
レジストリのデータを最新の状態に更新する方法はありますか?
Reg := TRegistry.Create;
with Reg do
begin
try
Rootkey := HKEY_CURRENT_USER;
OpenKey('\EUDC\932', True);
WriteString('SystemDefaultEUDCFont',S);  (SはStringです)
CloseKey;
finally
free;
end;
で外字リンクを変更してレジストリを更新したいです。
外字リンクを変更する事はこれでできました。
最新の状態に更新する事ができません。
どうかお助け下さい。
>>264
ヘルプ読もうな。

VCL リファレンス
TTreeNode.Index

TTreeNode参照

Index プロパティは,親ノードが保守する子ノードリストでのノードの位置を指定します。

property Index: Longint;

説明

Index を使うと兄弟ノードに相対するノードの位置を特定できます。親ノードの最初の子の Index は 0 で,以後これに続いて添字付けされます。


>>265
?
267265:03/05/07 21:48
>>266
レジストリ内容を変更しただけでは
再起動しない限り変更は反映されません。
それを再起動しないで反映させたいです。
下手な日本語で申し訳ありません。
>>267
そりゃそのレジストリを参照してやつをどうにかするしかないんじゃないか ?
269265:03/05/07 22:16
>>268
こんなことは不可能ですか?
DOCOMOが作ったソフトならその場で
外字データが反映されるのですが
自分で作るとどうしてもできません(;。;)
indy9のdemoで
送信は出来るが受信がうまくできない
ヘッダは受信できてもダブルクリックした後
メッセージを受信するはずだが、受信できません

他のメールクライアント(becky2等)では出来るのですが・・・
271 :03/05/07 23:47
>>263
何がやりたいのか書いてないから、返答のしようが無いと思う。
TListview張っつけてなんなりとやってみてからだと…。
張っつけたら、特にすることも無いと…。
>>269
> 自分で作るとどうしてもできません(;。;)

全然状況がわからんのだが、その自分で作ったプログラムと言うやつはいつレジストリを読み込んでるんだ ?
273265:03/05/08 00:06
>>272
ボタンが押された時です。
procedure TMain.RegisterClick(Sender: TObject);
var
WindowsPath : array [0..256] of char;
S: String;
Reg: TRegistry;
begin
GetWindowsDirectory(WindowsPath, sizeof(WindowsPath));
CopyFile('emoji.tte',WindowsPath,True);
S := WindowsPath + '\emoji.tte';
if FileExists(S) then
begin
Reg := TRegistry.Create;
with Reg do
begin
try
Rootkey := HKEY_CURRENT_USER;
OpenKey('\EUDC\932', True);
WriteString('SystemDefaultEUDCFont',S);
CloseKey;
finally
free;
end;
end;
ShowMessage('絵文字の外字登録が'+#13#10+'完了しました。');
end;
end;
と書いています。
どうぞアドバイス下さい<(__)>
>>273
http://www.users.gr.jp/ml/archive/delphi/71387.asp
と似てる。EnableEUDCが足りないのでは。
>>267
より厳密には、レジストリへの更新は即時に反映されるが、レジストリを参照している
プログラムが自ら読みにいかないと新しい値は使われない。

この場合は EnableEUDC の呼び出しを契機にして GDI が新しい外字グリフを読みに
いくわけだ。

がんがれ
276265:03/05/08 08:19
>>274
>>275
多謝です<(__)>
できました。ほんとうにありがとうございます。
ありがとございました☆
277デフォルトの名無しさん:03/05/08 11:59
StringGridってデフォルトでは最初のセルが選択された状態になっていますよね?

これをどこも選択されていない状態にするにはどうすれば良いでしょうか?

(現在は色が変わらなければ良いと割り切って、スクロールバーを非表示にして
一行増やして、そこを選択していますが、もっとスマートな方法はないでしょうか?)
>>277
VCL ソースは持ってる?
279277:03/05/08 13:10
>>278
持っています。
280デフォルトの名無しさん:03/05/08 14:28
すみません。くだらない質問かもしれませんが、

Delphiの超初心者向けHPを作ろうとおもうのですが、いいですか?

また、内容的にどんなものを盛り込んだらいいでしょうか?
インテュキ臭いけど、col、rowに0とか。
もうちょい調べてみます。とりあえず1行増やすのはやめた方がいいです。
小手先の回避のために仕様を変えちゃうより見た目を捨てる方が健全です。
>>280
>くだらない質問かもしれませんが、
全然くだらなくないです。思い立ったが吉日、頑張ってください。

内容は・・・・・自分が昔ハマッタ所を思い出してみてはどうでしょう。
超初心者だと、フォームにコンポーネントをぺたぺた貼りつつイベントドリブンの概念や型の一致
から始めるのが順当でしょうか。

初心者と中級者という線引きは中々引けないですが、基本的なコンポーネントが使いこなせて、
オブジェクト指向が少しわかるところくらいが初心者卒業の条件かと。
>>280
スーパーリアル超初心者からの要望です
ゲーム系お願いします
意外なほど少ないんですよ、Delphiでゲームプログラムの解説してるサイト
それにグラフィック関連を扱っているサイトも少ないです
http://pas2dox.sourceforge.net/
ここにpas2doxというDoxygenでDelphiのソースが扱えるようになるツールが
あるようなのですが、使い方が書いていないためどうやったら
Delphiソースを元にHTMLを出力させるのかが分かりません。
どうやって使ったらいいのでしょうか?
Doxygenはインストール済みです。
相談室スレから誘導されてきました。
pas2dox -h
でヘルプが見れますよ。
ここから先のことはDoxygen自身に関することなのでDoxスレでどうぞ。
286デフォルトの名無しさん:03/05/08 15:36
VS.NETでは標準に搭載されているXMLファイル出力を、
次期Delphiでも搭載してほしいですね。

ところで、ここは(超初心者向け)ですので、たらい回しするようで
申し訳有りませんが、「談話室」で戦ってください。負けてはいけません。
>>285
-hのヘルプではよく分かりませんでした。
input filterである事だけは分かったのですが。
doxスレってどこにありますか?DAT落ちしているようなのですが。
288デフォルトの名無しさん:03/05/08 15:43
289デフォルトの名無しさん:03/05/08 15:44
>>288

すな! ここはまじめなスレッドだ
>>288
ああ、なんとなく分かりました。
大量にエラーを吐いて結局出力出来ませんでしたが。
アクセス違反とWarning: Found ';' while parsing initializer list!のような
ワーニングがたくさん出て出力出来ませんでした。
これはpas2doxが未完成なのでしょうか?
それとも使い方に問題があるのですか?

INPUT_FILTERにpas2doxを設定して
FILTER_SOURCE_FILESにチェックを入れ
FILE_PATTERNSに*.pas,INPUTにソースディレクトリを設定し、
Dotを使うように設定したのですが…

>>289
真面目に質問しています。どの辺が不真面目なのでしょうか?
問題があればその部分を改めます。
>>289
すいません。>>288が透明あぼーんされていたので
私にレスされていたのと勘違いしてしまいました。
>>259
オーナー描画機能を使う.ちょっと作ってみました.データはカンマ区切りテキスト形式です.
まず宣言.
type
// ・ヘッダーコントロール(AlignをalTop,Sectionsに3つのセクションを作る.それぞれTextを件名,送り主,日付とする)
// ・リストボックス(AlignをalClient,StyleをlbOwnerDrawFixed にする)
TForm1 = class(TForm)
ListBox1: TListBox;
HeaderControl1: THeaderControl;
procedure FormCreate(Sender: TObject);
procedure HeaderControl1SectionResize(HeaderControl: THeaderControl;
Section: THeaderSection);
procedure ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
private
procedure InitListBox;
public
end;

(宣言部終わり.つづく)
>>292 (続き.以下実装部)

uses
Math; // ←Min関数を使うため

const
// 改行文字
cLineBreak = #$0d#$0a;
// サンプルデータ(カンマ区切りテキスト形式)
cSample = '"いやーん","れもな","2003/05/03"' + cLineBreak +
'"さいたまさいたましてもいいですか?","たいよう","2003/03/31"' + cLineBreak +
'"異議あり!","謎の弁護士","2003/04/01"' + cLineBreak +
'"ハゲいうな!","C. Alexander","2002/12/26"';

procedure TForm1.FormCreate(Sender: TObject);
begin
InitListBox;
end;

// HeaderControl1のOnSectionResizeイベントのイベントハンドラ:
// ヘッダーコントロールのセクションの幅が変わったときの処理→リストボックスを描く
procedure TForm1.HeaderControl1SectionResize(HeaderControl: THeaderControl;
Section: THeaderSection);
begin
ListBox1.Invalidate;
end;
(つづく)
>>293 (続き)
// リストボックスの中身をサンプルデータで埋める
procedure TForm1.InitListBox;
begin
ListBox1.Items.Text := cSample;
end;
// ListBox1のOnDrawItemイベントのイベントハンドラ:ListBox1の項目を描く
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
Values: TStringList;
iSec: integer;
SectionRect: TRect;
begin
Values := TStringList.Create;
try
ListBox1.Canvas.FillRect(Rect); // 項目の表示領域を塗りつぶすにょ.
// カンマで区切られたテキストをそれぞれの文字列に分離するにょ.
Values.CommaText := ListBox1.Items[Index];
// それぞれの文字列をヘッダーコントロールのセクションの幅に合わせて描くにょ.
SectionRect := Rect;
for iSec := 0 to Min(Values.Count, HeaderControl1.Sections.Count) - 1 do
begin
SectionRect.Right := SectionRect.Left + HeaderControl1.Sections[iSec].Width;
ListBox1.Canvas.TextRect(SectionRect, SectionRect.Left + 1, SectionRect.Top + 1, Values[iSec]);
SectionRect.Left := SectionRect.Right;
end;
finally
Values.Free;
end;
end;
(終わり)
トレース実行でVCL内部まで進入する簡単な方法って無いでしょうか。
今は必要になるたびにソースをコピってやっています。
296281:03/05/08 16:53
>>277
色々やってみましたが便法は無いようです。
TCustomGrid.Paintを継承するかDefaultDrawingを切って、へたぐらまさんがやったように
自前描画しかないようです。役立たずですみません。
>>295
プロジェクトオプションのデバッグ用dcu
>>297
ありがとうございます。今までデバッガオプションの中を探してました。
repeat〜untilだけbegin〜endで囲まなくていいのはなぜですか?
これだけ異質なものに感じます
try 〜 finally 〜 end は気持ちの中で折り合いはつきますか?
>>299
ModulaかAdaを見てみると幸せになれるかも。
要するにPascalの文法はその程度でしかなく不統一。
repeat〜until節もtry〜finally〜end節も、確実に呼応するキーワードが来るからっしょ。
一方while〜doだとdoの後に呼応するキーワードが無いからbegin〜endが必須。

repeat (文) until (boolean)みたいに、間に単文の場合は;が不要なので、

repeat begin
(複文);
end until (boolean);

みたいに統一した文法で書ける。面度くさいからやらないが。
>while〜doだと

何これ?
http://www.borland.co.jp/qanda/delphi/d0002829.html
ここを参考にImageをDragで動かそうとしたのですが反応してくれません。
ほかのコンポーネントも試してみると、Labelも動きませんでした。
これらのコンポーネントは他のコンポーネントとは扱いが違うのでしょうか?
ウィンドウじゃないから
>>277 >>281 >>296
グリッドコンポではデフォルトの描画を切らなくてもオーナー描画できるので
一部のセルだけオーナー描画にしてみました.
グリッドコンポのDefaultDrawingをTrueのままOnDrawCellイベントを使います.

// StringGrid1のOnDrawCellイベント:イベントハンドラ
// ※TextRectの+2は目で見て調整しただけです.
procedure TForm2.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
theGrid: TStringGrid;
begin
theGrid := Sender as TStringGrid;
//// セルに『選ばれてる』属性がついているときだけ自分で描き直す.
if gdSelected in State then
begin
// 背景をグリッドの背景色で塗りつぶす
theGrid.Canvas.Brush.Color := theGrid.Color;
theGrid.Canvas.FillRect(Rect);
// テキストをグリッドの文字色で描く
theGrid.Canvas.Font.Color := theGrid.Font.Color;
theGrid.Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, theGrid.Cells[ACol, ARow]);
end;
end;
>>304
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 FPreMousePoint :=
  Point( (ScreenToClient(Mouse.CursorPos).X - TImage(Sender).Left),
      (ScreenToClient(Mouse.CursorPos).Y - TImage(Sender).Top) );
 if Button = mbLeft then
  SetCaptureControl(TImage(Sender));
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
 if GetCaptureControl = TImage(Sender) then
  if ssLeft in Shift then
  begin
   with TImage(Sender) do
    BoundsRect :=
     Bounds( Self.ScreenToClient(Mouse.CursorPos).X - FPreMousePoint.X,
        Self.ScreenToClient(Mouse.CursorPos).Y - FPreMousePoint.Y,
        Width, Height );
 end;
end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 if Button = mbLeft then
  if GetCaptureControl = TImage(Sender) then
   SetCaptureControl(nil);
end;
キャプチャって便利そうですね。とても勉強になりました。
309304:03/05/09 03:01
>>305 >>307
レスありがとうごさいます。
>>305
いままで ウィンドウ = アプリ窓 = Form1?みたいな概念だったので
勉強になりました。
タスクにはでてないけど、ButtonやMemoもウインドウズで管理されてると思って大丈夫ですか?
>>307
まだSenderやselfを理解していないのでやってることが大まかにしかわからないですが、
画面全体からみたマウスの動きをキャプチャ、その値をImage1のLeft Topに代入して
無理矢理動かすみたいな感じですかね。

http://forum.nifty.com/fdelphi/faq/00044.htm
ここを参考にやったことがあったんだけど、動かすImageがコンパイル後に動的に生成
されたやつで、後から生成されたImageが被さったとき前面にきてしまう、ドラッグ中の
非表示(枠付き)、が難しかったので他の方法を探してたんです。
とりあえず>>304の方法でもPanelにImageを貼り付けたら動かせたのでそれでいきたいと思います。
ありがとうごさいました。

関係ないけど最近プログラミング初めてどんどん睡眠時間が減っていく(;´Д`)
310296:03/05/09 07:35
>>306
勉強になります。ありがとうございました。
>>309
>プログラミング初めてどんどん睡眠時間が減っていく
s/初めて/始めて/
意味は十分伝わるけど、国語の勉強もしような!
無理がきくのは若いうち。何歳くらいなんだろう。
312毛の生えたふんどし:03/05/09 08:09
TFormからTForm1を派生して

Var Form1:TForm1;

で Form1という インスタンス変数なるものを宣言しました。

このインスタンス変数というものはメモリに存在するインスタンス(オブジェクト)の
「何」を格納しているのですか?

我々はコーディングしませんが、裏でインストラクタが呼ばれてインスタンスが生成され、
その「何か」がこのインスタンス変数に格納されるようですけど。

アドレスだけじゃないですよね????
インストラクタはいいね
インスタンスへのポインタなのでしょうけど、その先の構造はよく分からないです。
InsideDelphiだったか謎全さんのコンポーネント本だったか塚越さんの解説書だったかに
載っていたと思います。うろ覚えで悪いですが、

インスタンス変数そのものはインスタンスへのポインタ
インスタンスの最初4バイトはそのVMT(仮想メソッドテーブル)へのポインタ
インスタンスの後半はメンバ変数などの保存域

だったかと。VMTは1プロセス全体で共有されます。VMTには上位クラスのVMTへの
ポインタもあって場合によって遡って実行できるようになっています。

間違っていたらごめんなさい。
315毛の生えたふんどし:03/05/09 10:00
>314

ありがとうございました。とりあえず「インスタンスを指し示すもの(ポインタ)」
ということで納得します。InsideDelphiの日本語板はDel2を対象にしたものですが、
Delのメカニズムを理解するのにやっぱり購入しておいた方がいいですか?
近所の本屋に1冊だけボロボロになってあります。
316314:03/05/09 10:06
探してみました。
塚越一雄氏のDelphiオブジェクト指向プログラミング@技術評論社(平成9年刊)

Delphiに限らずオブジェクト指向そのものについて学べる良本です。
この本を理解すればDelphiの文法側は完璧です。
317314:03/05/09 10:18
InsideDelphiはマニアックすぎる内容ですが、激しく良著です。
古くなってしまった部分もありますが値段分の価値は十分あると思います。
今ちょっと読み返してますがVMTの構造も載ってますよ。
Insideデルファイなら同じ作者のオライリーのDelphiクイックリファレンスをお奨めします。
結構Insideの情報も入ってるし。
>>312
そんなところで悩んでいると先に進めないぞ。

VMT の構造なんてバージョン間で互換性は保証されていないし。COM 対応の
V3.x の前後で大きく変更されていると思った。

ほんとに気になるのなら、VCL/RTL ソースを丹念に読むことを進めます。
ほんとは、経験者に一つずつ説明してもらうのが良いんだけどね。
ネットで自習するよりは基礎力付くし。
316が言ってた塚越氏の本は名著。今は絶版なのかな。

なんか出版社のマワシモノみたいな流れになってしもたね。
Delphiオブジェクト指向プログラミングはもう絶版で今は復刊ドットコムが交渉中
>>320
出版社の回し者だろうが、良い情報はよいものだ。

いつごろから「〜の回し者ではないですが」って言い回しがあるんだろう。
悪いこと考えている回し者が自分から「〜の回し者です」って言うと思っているんだろうか。
323277:03/05/09 13:39
>>281>>296
色々調べて下さってありがとうございます。
「とりあえず動けば良いや」的にやるのは慎みたいですね。
(その為にはもっともっと精進せねば・・・)
ところでRow、Colを0にするというのは、どういう方法ですか?
RowCountとColCountは0には出来ないですよね?

>>306
ご回答ありがとうございます。
一見しただけでは良く理解できませんが、
(AsとかInとか使った事なくてもメインプログラマーやってます(TT) )
貼り付けただけで解決できました。
(今から何をやっているのか分析してみます)

本当にありがとうございました。
324デフォルトの名無しさん:03/05/09 13:54
Delphiで
USBの装置が付いているかどうか、
電源が入っているかどうかを調べる方法を教えて下さい。

よろしくお願いします。
>>324
WindowsAPIスレへ逝け
DelphiでWindowsAPIを使うのはとっても簡単
シリアル接続なら、通信して返事が帰ってくるか調べるとか。
327324:03/05/09 16:49
>>326
パラレル接続なのです(TT)
328デフォルトの名無しさん:03/05/09 17:40
dcuファイルしかない(*.pasファイルがない)コンポーネントを
インストール出来ません。
下記のように説明が書いてあるのですが、8のコンパイルを
クリックすると「致命的エラー**.pasがありません」と言われます。

それと「既存のパッケージ」はどれを指定したら良いのかも分かりません。

作者に聞こうと思ったのですが、すでにHPは閉鎖していました。
よろしくお願いします。
--------------------------------------------
3.インストール方法
1"***.dcu"をライブラリパスの通ったフォルダにコピーする。
2[コンポーネント]->[コンポーネントのインストール]を選択する。
3[既存のパッケージへ追加]で、ユニットファイル名の[参照]ボタンを押
す。
4[ファイルの種類]を[Delphiコンパイル済みユニット(*.dcu)]に切り替
え、"***.dcu"を選択する。
5[長すぎた行・・]というエラーが出ますが、そのままOKを押す。
6"***.dcu"がエディタで開いているのでそれを閉じる。その際に表
示される、[保存しますか?]のダイアログには必ず[いいえ]と答えること。
7パッケージウィンドウの[コンパイル]を押す。
dcuってバージョン毎に互換性あったかしら?
330328:03/05/09 18:17
>>329
げっ。バージョン違えば無理っすか?
トホホ・・・
とりあえず何をインストールしたいのかゲロしたまへ。
332328:03/05/09 18:44
>>331
ttp://home1.infonia.ne.jp/~delphian/delphi/compo/other.html
ここにある
「スケジュール表示コンポーネント」
です。

よろしくお願いします。
D5とD6用のdcuは入ってるようだけど、必要なのはD7?
作者氏のHPはバッチリ生きてるようだけど??
http://hp.vector.co.jp/authors/VA031252/
今日もまた一つ素敵コンポーネントの存在を知ったよ、フフフ >>328
Delphi 6 Perssonal と Professional の違いには何があるのでしょうか。
機能的に大幅な制限が加えられているのでしょうか?
ここ読んでみて。
http://www.borland.co.jp/delphi/del6/features.html

個人的に一番大きいのはVCLソースが付いて来るか来ないかだと思う。
Personalが無料で手に入るとしても、VCLソースにはProの値段を補って余りある価値があると思うよ。
きちんと身につく勉強がしたいならPro一択。
>>336
ありがとうございます、早速読んできます。
>>327
> パラレル接続なのです(TT)

USB ≡ ユニバーサル シ・リ・ア・ル バス なんだけど...。
DLLを使ってプログラムにオブジェクトを設置する方法を教えてください
340デフォルトの名無しさん:03/05/09 21:54
ゲームプログラムにおいて、「できるだけ高いフレームレートを維持して描画する」
のにはどのようなロジックが適しているんでしょうか。

無い頭で考えた結果・・・
1. 1/n秒のタイマー内で描画して、描画に1/n秒以上かかってきたらシラネーヨ
2. 別にスレッドを作って、描画にかかる時間をチェックしながら適当にウェイトを入れつつ回す

これくらいしか思いつきません。・゚・(ノД`)・゚・。
341あぼーん:あぼーん
あぼーん
60FPS以上だと人間の目が追いつかないから意味がないと言ってみるTEST。
>>342
ですね。
最高30fpsくらいにして、(33ms - 描画時間)のwaitを入れながらブン回すのが得策かな・・・。

TThread使うことになるのか (((( ;゚Д゚)))
タイマーじゃなくって、
QueryPerformanceCounterとQueryPerformanceFrequencyを使いなされ。
QueryPerformanceCounterと
QueryPerformanceFrequencyは使わない方がいいよ。
RDTSC呼ぶから偶に数百ミリ秒止まったりする。

timeGetTimeで我慢するか
RDTSCでウェイトかかるCPUとRDTSCが元々使えないCPUをきちんと排除してから
QueryPerformanceCounterを使いなさい。
>>344 >>345
非常にクダラン質問ですが、通常1プロセスで一行ずつ順に処理していくところに
自前のタイマー(もどき)を設置して中で延々とグリグリする場合って・・・
どういう置き方をすればいいのでしょう?(´・ω・`
>>345
mame32みたいに設定で
QueryPerformanceCounterとTimeGetTimeを切り替えられるようにするのもありだね。
348あぼーん:あぼーん
あぼーん
>>340
Falcomや海外ゲームがやってるみたいに
全力で回してfpsから移動量(dx, dy, (dz))を計算しましょう。
基本的にスレ違いなので
リフレッシュレートに関する論争
という過去スレを探してそれ読んで下さい。
ひょっとしてOnIdleを知らないだけじゃないでしょうか
ソフトが完成したのですが、シェア化するには
どのようにすればいいかサッパリ分かりません。
vectorでシェアの登録をしても、
ライセンス認証システムをアプリケーションに組み込まなければ
なりませんよね?
一般的なライセンスを認証するシステムはどのようにして
作るものなのでしょうか?
そのようなコンポーネントはありますか?
ソフト起動時にライセンス認証を求めるといったように
したいです。
353あぼーん:あぼーん
あぼーん
354デフォルトの名無しさん:03/05/10 01:02
>>339
Delphiプログラミングバイブルを読め
355 :03/05/10 01:11
>>352
誰も買わないから安心してフリーにしとけ。
356あぼーん:あぼーん
あぼーん
>>352
ライセンス認証って具体的に何をやりたいんだ
パスワード聞くだけじゃだめなのか?
>>357
「解析されてタダで使われたくな〜い」とかじゃないの?
359あぼーん:あぼーん
あぼーん
360あぼーん:あぼーん
あぼーん
>>352
そんなことも考えられない人がシェアウェアで大丈夫?
メールサポート・バージョンアップ頑張ってね。
最近Delphiのヘルプをよく利用するようになりましたよ!結構便利ですね!
バラバラのIDEを全部くっつけて使おうとしたら、ツールバーがたくさんある窓だけくっついてくれない。
なんでそんなこともできないの?Delphiの限界が垣間見えました。
あっそ。よかったね☆ミ
365あぼーん:あぼーん
あぼーん
366デフォルトの名無しさん:03/05/10 07:40
ある特定のファイルが在るか無いかを調べるためにはどうすればいいのでしょうか?
FileExists。ヘルプ探すのも勉強。
368あぼーん:あぼーん
あぼーん
369あぼーん:あぼーん
あぼーん
370328:03/05/10 10:29
>>333
あ、ほんとだ生きてる。
Readme.txtに乗ってたHPに行けなかったのでてっきり
死んでるのかと思ってました。
必要なのはD7です。
バージョン違えば無理なんですよね。
自作するか・・・
371あぼーん:あぼーん
あぼーん
372デフォルトの名無しさん:03/05/10 11:10
MessageBeep(MB_ICONQUESTION);
だけ音が出ないのはDelphiのバグですか?
373デフォルトの名無しさん:03/05/10 11:10
IndyのAntiFreezeコンポ組み込んでいるんだけど
プログラム終了してもタイムラグがあってなかなか終了しない。
解決策あれば教えて下さい。




374あぼーん:あぼーん
あぼーん
ここ、他のすれと違っていい感じ♪
376あぼーん:あぼーん
あぼーん
377デフォルトの名無しさん:03/05/10 11:42
>>372
コントロールパネルの設定見た?
378339:03/05/10 11:43
>>354
新世界訳聖書(バイブル)しか持ってません

創世記         7
出エジプト記     97
レビ記         168
民数記         221
申命記         292
ヨシュア記       256
裁きの人の書     397
ルツ記         442
エルサレム記第一  448
エルサレム記第二  507
379デフォルトの名無しさん:03/05/10 12:05
>>377
OnlyWhenIdleのみ変更しました。
おかしいところ教えて頂けませんか?

Active:True
AppicationHasPriority:True
IdleTimeOut:250
Name:IdAntiFreeze1
OnlyWhenIdle:False
Tag:0
380あぼーん:あぼーん
あぼーん
>>372
貴方の脳みそと、パソコンのバグです。
コントロールパネル>サウンドとオーディオデバイスで、「メッセージ (問い合わせ)」に音を割り当てなさい。
382デフォルトの名無しさん:03/05/10 14:44
TPanelに直接絵を描きたいのですが、
下記のようにしたらEAccessViolationが出てしまいます。
BitBlt(panel1.Brush.Bitmap.Canvas.Handle,0,0, bmp.Width,bmp.Height,bmp.Canvas.Handle,0,0,SRCCOPY);

Panelに直接Bitmapを貼り付ける事はできないのですか?
383デフォルトの名無しさん:03/05/10 14:45
TPanelに直接ビットマップを貼り付けたいのですが
下記のようにするとEAccessViolationが出てしまいます。
BitBlt(panel1.Brush.Bitmap.Canvas.Handle,0,0, bmp.Width,bmp.Height,bmp.Canvas.Handle,0,0,SRCCOPY);

TPanelに直接描く事は出来ないのですか?
なんか、作ったソフトに引数入れてみてもファイル読みこまないのですが。。。
下のソースを参考にしろと言われてプログラムに入れても何も起こりません。
実行→実行時引数とやってファイル名を"C:\WINDOWS\MOUSE.TXT"
385384:03/05/10 15:51
続き。ソースは以下の通り
var
i:integer;
CaretPos:TPoint;
begin
CaretPos.x := 0;
CaretPos.y := 0;
try
if ParamCount > 0 then
begin
for i := 1 to ParamCount do
if ((ParamStr(i)[1] = '/') or (ParamStr(i)[1] = '-')) and (Uppercase(ParamStr(i)[2]) = 'J') then
CaretPos.y := StrToInt(Copy(ParamStr(i), 3, Length(ParamStr(i))))
else
FileName := ParamStr(i);
if FileExists(FileName) then
begin
Screen.Cursor := crHourGlass;
RichEdit1.LoadFromFile(FileName);
Screen.Cursor := crDefault;
Caption := '2ch [ ' + FileName + ' ]';
if CaretPos.Y >= 0 then
RichEdit1.CaretPos := CaretPos;
end;
end
else
CreateNewFile(Self)
except
end;
end;
なぜ最小限のコードにしないのだろうか
>>383
//Image1はビットマップロード済みTImageオブジェクト
procedure TForm1.Button1Click(Sender: TObject);
var
DC:HDC;
begin
DC := GetDC(Panel1.Handle);
try
BitBlt(DC,0,0,Panel1.ClientWidth,Panel1.ClientHeight,
Image1.Canvas.Handle,0,0,SRCCOPY);
finally
ReleaseDC(Panel1.Handle,DC);
end;
end;
便乗質問です
TForm.CanvasとTBitmap.Canvasの挙動って違うものなのでしょうか。
それと、TPanelにCanvasが無いのは何故でしょうか。重箱の隅をつつくようですみません。
>>388
そーぞーでしかないけど
Panelはあくまで何かを載せて使うものだからじゃないのかな。
だれか>>384に答えてやれよ(w
>>390
ていうか、なんでステップ実行ぐらいしないのかと。
TToolBarのMenuプロパティにTMainMenuを指定してメニューのように表示させています。
んで、普通のメニューの場合「ファイル(F)」なら、ALT+F で選択されると思います。
でも、TToolBarにMenuを指定した場合、「ファイル(F)」のとき、単に”F”キーだけで選択されてしまいます。
これを回避(ALT+Fでのみ選択されたい)するにはどうすればよろしいでしょうか?
393383:03/05/10 21:11
>>387
おおお!!ありがとうございます。
でも、もうCanvas付きパネルを作ってしまった・・・。
無駄な労力を使ってしまった・・・。
自分で書いた処理を別のユニットファイルにして呼び出したいと思っているのですが
別ユニットファイルからForm1のコンポーネントの操作ってできないのでしょうか?
未定義の識別子エラーが出てコンパイルできないのです。
どなたか解決策を教えて頂きたいのですが。
>>394
uses
396394:03/05/11 00:26
>>395さん
usesにコンポーネントが載っているフォームのusesをコピペしてみたんですが
同じです。すいませんが、他になにか方法はありませんでしょうか?
397 :03/05/11 00:30
>>396
その説明はよく分からんが、パス通ってる?
パス通ってれば問題無いと思うが。

「パス通ってる」って何?って聞かれないことを望む。
398394:03/05/11 00:32
出直してきます。
ありがとうございました。
399397:03/05/11 00:46
>>394
あー。何か言いたいことが分かってきた…。
「プロジェクトに追加」→「ユニットを使う(で、目的のフォーム選択)」
でいいんじゃないかな?
400397,399:03/05/11 00:51
あれ?なんか違うかな?すまん。適当こいたかな(藁
メールチェッカーを作っています。
コンポーネントにIdPOP3を使用して
メールをチェックしているのですが、
try
 IdPOP31.Connect;
 〜
 〜
finally
 IdPOP31.Disconnect;
と〜の部分にイベントを書いているのですが、
サーバーに接続出来た時はうまくいっているのですが
接続出来なかった時のイベントは
どこにあるのでしょうか?
接続が出来なかった時に
接続に失敗しましたというメッセージを出すように
サンプルを書いて頂けませんか?
どうぞよろしくお願いします<(__)>
>>401
TIdPOP3は使ったこと無いからアレだけど、例外出ませんか?
だとしたら、例外をキャッチすればいいと思います。
403381:03/05/11 08:59
>>382
例外をキャッチですか?
すみませんそれはどういうことですか?
>>403
お勉強し直し。と言っていきたい。
405381:03/05/11 09:13
あ、
try
except
ですね!できました。
ありがとうございました<(__)>
>>405
がんばれ。
ちょっとちょっと!!
http://www.shuwasystem.co.jp/cgi-bin/detail.cgi?isbn=4-7980-0531-2
Delphi7Personalが入ってるってほんと!?
それで2600円!?
すごいねぇ
408デフォルトの名無しさん:03/05/11 15:29
平和だなぁ〜
409デフォルトの名無しさん:03/05/11 15:46
>>407
この本が欲しい。
410デフォルトの名無しさん:03/05/11 16:02
>>407
いいね〜
Del6perとDel7perって何が違うんだっけ
>>410
値段。
>>410
XP Visual Styleへの対応。
6のソース読ませれば勝手にVisual Style対応のコンポーネントに入れ替えてくれるの?
>>413
入れ替えるっていうか、通常のWindowsコントロールは、
変なことしてなければmanifestつけるだけでXPStyle対応になる。
Del6は変なことしてるわけだ。
それと、SpeedButtonとかWindowsのコントロールじゃない独自の
コンポーネントがXPStyleで表示されるようになる。
あとは、自分のカスタムコンポーネントをXPスタイルで表示するときに
便利なクラスが付いてくる。
ただし、XPStyle対応は中途半端な感じ。たぶんやる気ないんだろ。
Del6でもフリーのやつを使えばDel7と同じくXPStyle対応になる。
てゆうか、Del7のXPStyle対応は、そのフリーのやつを使ってる。
フリーのやつって何ですか?xptoolみたいなやつ?
>>407
誤植じゃねーのか??
418デフォルトの名無しさん:03/05/12 02:29
はっきり見えるわけじゃないが6に見えますね
右上に記載されているCD-ROMの文字の下の部分
http://images-jp.amazon.com/images/P/4798005312.09.LZZZZZZZ.jpg
419デフォルトの名無しさん:03/05/12 11:04
OnCloseでMessageDlg('終了しても良いですか?', mtInformation, [mbOK, mbCancel], 0);を表示させて
キャンセルボタンがクリックされたときは終了を中止したいんですけど、どうすればいいんでしょうか
help-OnClose,例
You is GOD
2ch的には大賛辞だ・・・・
>>416
これサンプル見ても使い方がわからないのですが
どうやって使うのでしょう?

最低限のサンプルソースを書いてもらえませんでしょうか?
>>407
それちょっと前に書店で見たけど
入ってるのはD6perだよ
6と7、しかも両方Personaだし、違いなんて無いだろ。
ペルソナキターーーーー
                   / ̄ ̄ ̄ ̄ ̄ ̄ ̄
                  | ペルソナにレッツゴー ニャ!!
                   \_  _____
                      ∨
                             『 ゴォォォォォ…
              ¶ ∧ ∧      / ̄ ̄ ̄ヽ
        ∧ ∧   ‖(* ゚Д゚)⊃  / ̄∈≡∋ ̄ヽ
       (* ゚ー゚)  / ̄U ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
 ( ̄ヽ/ ̄ ̄ ̄ ̄ ̄ ̄           ┏┓┏┓       ¢  \
 ∈≡∋              〓   ┃┃┏┛   〓    ¢  )
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
>>411
                  。
                /┃  Λ_Λ
               | ┃ ( ・∀・)
You ○ GOD    ←be動詞⊂| ⊂ )
               | ┃ | | |
                \┃ (_(_ )
                  ゜
>>419
OnCloseQueryでやれば?
IndyのFTPコンポーネントに関する解説サイト、ありませんか?
HTTPコンポーネントはmonazillaで少し解説されていますが、FTPコンポというと、どうも見当たらなくて。
どなたか教えて下さい。
procedure TForm1.Button1Click(Sender: TObject);

begin
hogehoge
TForm1.Button1Click(Sender);
end;

のように手続きを再帰的定義したいのですが、どうしたらよいのでしょうか?

Sender: TObjectって何なんなのか、さっぱりわかってないです。
パスカルについては知識があるんですが、
Delphi初心者で、オブジェクト指向がなんなのかさっぱりわかりません。
フサギコとモナーのスレの方から引っ越してきました。

IRCクライアントを作ろうと考えていて、IndyにIRCコンポがあるのまでは
わかったのですが、どうやって使ったらいいのか見当も付きません。

日本語HELPの場所も教えてもらい、落としたのですが、
説明らしい説明がのっていません。

書籍の紹介もふくめて教えてもらえないでしょうか?
433400:03/05/12 22:44
>>399
procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage('hogehoge');
 Button1Click(Sender);
end;

これで、無限ループになるよ。

Senderは複数のコンポーネントで1つのイベントを共用するとき、
どのコンポーネントから呼び出されたのか調べるのに使ったりする。

たとえば、この場合、TButton(Sender).Nameで名前が取り出せる。
434デフォルトの名無しさん:03/05/12 22:49
>>431
ButtonClick1(Sender)とすれば良し。(クラス名はいらない)
hogehogeのなかでSenderを参照しないならButtonClick1(nil)でもいい。
Senderの説明はこのスレの最初の方にあったような。


かぶった。スマソ。
>>433
>>434
ふむふむ、ありがとう。
437 :03/05/13 00:19
(´-`)。o ○ (そこかしこでindyの質問を見るなぁ…。
なんでこんなに質問者が多い状態なんだろう?
つーか、オレなんか入れないけど(藁)
438400:03/05/13 00:49
>>405
ぐぐっても日本語解説ページが出てこない(涙)
ML過去ログ検索にも無かったし。

漏れとしてはIRCクライアントが自作できれば、
Indyじゃなくてもいいんだけど…。

ほかに方法があるなら教えてください。
439400:03/05/13 00:55
>>406
自己スレ。
CHOCOAにOLEがあった!
でもこれ、Delphiで使えるんだろか?w
(漏れのスキルで)
>>384-385
恐らくあなたが実行しているコンピュータには"C:\WINDOWS\MOUSE.TXT"というファイルが存在しません.
普通は存在しないファイルを読み込もうとすると例外が発生するのですぐにわかるのですが
このソースコードでは指定されてファイルが存在しない場合には何もしないようになっているので悩まされる羽目(はめ)になったのです.

> try

> if FileExists(FileName) then

> Screen.Cursor := crHourGlass;

> Screen.Cursor := crDefault;

> except
> end;

これらの行を削除して実行してみてください.
このソースコードは他にも色々と問題を抱えているのですが長くなるので省略します.
ユーザーがパラメータの指定を間違ってしまった場合にも
何が間違っているかを親切に教えてあげるようなプログラムを目指してください.

441デフォルトの名無しさん:03/05/13 04:48
 こんにちは。この使い方は、間違っているのでしょうか?

var
  s : String;  P : PChar;
begin
  s := 'Yatterman Coffe Lighter'; //23文字
  P := PChar(s);
  Inc(P, 10);
  s := P;
  Showmessage(s); // 'Coffee Ligther'
end;

  結果、 sは、期待した通りになったのですが... 不安です。
>>441
間違ってはないけれどちょっと危なっかしいなとも。
>>441
s := Copy(s,10,length(s));とかじゃダメ?
444441:03/05/13 08:45
どもどもありがとうございます。
みなさんが普通に使ってないところを見ると、やはり問題があるのかもしれませんです。
普通にCopyを使うことにします。ありがとうございますた。
>Inc(P, 10);
Pの長さを越えてIncしないことを保証できれば問題ないと思う。

>Copy(s,10,length(s));
こっちはsの長さを越えた場合に末尾までしかコピーしないことを保証してる
(多分内部では上と同じことをしてると思う。長さの確認付きで。)のでこっちが
安全でいいと思うよ。簡便だし。
446デフォルトの名無しさん:03/05/13 11:06
配列の使い方がよく判りません。

クライアント⇔サーバの通信プログラムで、

顧客コード(固定長8文字)
顧客名(固定長32文字)
電話番号(固定長16文字)
集計コード(固定長24文字)

というデータ(全部ASCII)をやり取りしたいのですが、Cでいう構造体の
使い方が判らず80文字のChar配列をバッファとしてとって
Move (Rcvbuf[8], CustomerName[0], 32)
とか、我ながらバカみたいな事やってます。

Delphiではどう書くのがいいのでしょう?
TCustomerBuff = record
 code:array [0..8-1] of Char;
 name:array [0..32-1] of Char;
 tel:array [0..16-1] of Char;
 sum:array [0..24-1] of Char;
end;

だけど、80文字のバッファを取っておいて

Type CustomerCode = 0..8-1;
Type CustomerName = 8.8+328-1;
って感じで範囲型を定義して作る事もあるし、サイズを定義ファイルにしておいて 実行時に変更出来るようにする事も多いし
448bloom:03/05/13 11:13
Position := poScreenCenterだと、指定しても起動時に自分で好きな位置に配置できない
Delphiの限界が垣間見えました
449がDelphiを使いこなすことができません

Delphiの限界が垣間見えました
>>449
プ
むかし、ゲーム機でおやじに将棋をやらせようとしたんだよ。
そしたら、桂馬がまともに動かないというんだ。
コントローラを横押して縦に2つって言ったら、
「それは桂馬の動きじゃない」んだってさ。
>>450
超初心者向けのスレに来ておいて詰まらないこというね君
>>416
たのみますー
おねがいしますー
ThemeManagerの使い方がわかりませぬー

先生方どうぞよろしくお願いします
フォームに貼り付けるだけじゃ駄目でした・・・
で、どうする?マジレスする?

>>449
Position := poScreenCenter とした上で、どのプロパティの値が指定した
値どおりに動かなかったのですか?

VB では poScreenCenter 相当の動きが異なるのかなぁ。
456446:03/05/13 11:56
>447 さん
ありがとうございます。
しかし、recordを作ると TIdTCPClientでwriteの引数に使おうとすると
Stringと互換性がないといってコンパイルできないのです・・・
recordをstringにキャストできないのでしょうか?
>>456
WriteBuffer を使えないの?
writebuffer ってメソッドが無いかな?
459デフォルトの名無しさん:03/05/13 12:05
>457
うぉぉぉぉ出来た!
多謝。
C⇔Delphiの解説って、
Cだといいかげんに出来る=Delphiだとはまりまくる型変換に
詳しく触れてないからすげー困っていたんですよ。
系統立てて勉強しないでいきなり作り始めた私が一番悪いんですけど・・・
460ねこま:03/05/13 12:06
>recordをstringにキャストできないのでしょうか?
TStringStream を使うか,
SetLength した string へ Move する事ができます.
Delphiの限界が垣間見えるような超初心者はいないと思われ
462466:03/05/13 12:29
>458さん、>460さんもありがとうございます。

ところでarray of char に値を代入する時の正しい作法ってどのような
やりかたなのでしょうか?
Stringをぶち込む事もできるし(なぜか24byteまでのようですが)
Moveでコピーする事も出来るし・・・

あれれ?
OpenJaneでみると、レス番号がずれてる。
464デフォルトの名無しさん:03/05/13 13:02
DELPHI5.0で作成したイベントですが、WindowsMeでは正しくヒントが表示されるのに
WindowsXPではヒントが表示されません。原因は何でしょうか?

procedure TForm1.StringGrid3MouseMove(Sender: TObject; Shift: TShiftState;X, Y: Integer);
var
MousePos:TPoint;
m,d:Integer;
ACol,ARow:LongInt;
begin
Application.HintPause:=0;
StringGrid3.MouseToCell(X,Y,ACol,ARow);
if (ACol in [1..33]) and (ARow in [3..34]) then
begin
m:=cal[ACol+4,0];
d:=cal[ACol+4,1];
StringGrid3.Hint:=IntToStr(m)+'月'+IntToStr(d)+'日'
+'('+StringGrid3.Cells[ACol,2]+')'+' '+StringGrid3.Cells[0,ARow];
Application.ActivateHint(ClientToScreen(MousePos));
end
else StringGrid3.Hint:='';
Application.HintPause:=500;
end;
465わか:03/05/13 13:03
【2003年】とっておきのニュースであります。
インターネットで営業をしませんか?
営業が得意な方は、年商1000万円稼げます。
私と仲良くビジネスをしませんか?
http://www.c-gmf.com/index1.htm
http://www.c-gmf.com/index2.htm
http://www.c-gmf.com/index3.htm
http://www.c-gmf.com/mail.htm
クーポン屋でございます。貴方のHPにバナーを貼るだけで
稼げます。本当にお金が欲しい方は、相談にのります。キャッシュバック制度!
レス番ずれたら、一度スレリストでこのスレを右クリ・ログ削除すれば直る
DLLの作り方や説明などが詳しく書いてあるページはありますか?
>>467
Borland公式ページ・Delphi で DLL を作成する
http://www.borland.co.jp/qanda/delphi/d0000004.html
>>468
サンクソ
作成したプログラムのウィンドウの
サイズを変更(リサイズ)出来ないようにするにはどうすればいいのでしょうか?
GetMinMaxInfoで検索
BorderStyle変えるだけでええやん
473天災プログラマ:03/05/14 00:20
半角←→全角の相互変換をする関数はなんですか?
474好きなのもってけ:03/05/14 00:32
           _________
   ∧,,∧   / 半角⇔全角
  ミ,,゚Д゚彡 <  カタカナ⇔ひらがな
   ミ つ旦)~~ \ 変換する関数です
 @ミ   ミ     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ∪''∪  うpしますた。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1052839862
LCMapStringW
477470:03/05/14 00:38
出来ました。ありがとう。
478デフォルトの名無しさん:03/05/14 02:32
音声認識で操作できるようにするには?
>>478
ViaVoiceでもかってください。
480デフォルトの名無しさん:03/05/14 12:38
(゚Д゚) 誰もカキコしてないぞゴルァ!!
Delphiって死滅しちゃうの????よ Part2

これからの某ランドの主力言語はC# Builder
発売日もDelphiの方があと。
ユーザーからも見捨てられて、もう虫の息。
今まで夢をみさせてくれてありがとう。


過去スレ
http://pc2.2ch.net/test/read.cgi/tech/1035539926/
自分に自信が無い奴ほどよく吠える
482に同意
484デフォルトの名無しさん:03/05/14 14:42
他のアプリを操作するツールバーみたいなソフト作りたいんですが、
直前にアクティブだったウィンドウを取得する方法教えてください。
485デフォルトの名無しさん:03/05/14 14:46
後出しの方が本命に決まってるだろアホカ
>>485
C++Builderの方が本命。
.NETの方が本命ということならなっとく。
C++BuilderはDelphiの姉妹品だから。
>>484
w32スレに行ってみるといいよ。
http://pc2.2ch.net/test/read.cgi/tech/1052651750/
>>488
わかりました。いってきます。
490天災プログラマ:03/05/14 16:50
>475

できました、できました。

生まれて40年、悩み続けたのが嘘みたいです。

ありがとう
キモ。
>>462
StrPLCopy関数.
逆の場合は単に代入するだけでOK.

ポインタAにあるデータをポインタBにコピーするには何を使えばいいの?
>>493
型が完全に合っていて class じゃないなら

A^:=B^;
495デフォルトの名無しさん:03/05/15 01:25
最近プログラムを始めた初心者です。
簡単な計算プログラムを作ってるのですが
小数点を使う場合で悩んでます。

procedure TForm1.Button1Click(Sender: TObject);
var
i:Integer;
j:Integer;

begin
i:=SpinEdit1.Value;
j:=10;

SpinEdit2.Value:=i+j;

end;

整数型だとこんな感じかと思うのですが
0.1や1.5等小数点の場合どのようにすればよいのでしょうか?
よろしくお願いします。
procedure TForm1.Button1Click(Sender: TObject);
var
i:Float;
j:Float;

begin
i:=SpinEdit1.Value;
j:=1.5;

SpinEdit2.Value:=i+j;

end;
497デフォルトの名無しさん:03/05/15 01:44
速攻でありがとうございます。
Floatで試したのですが未定義の識別子:'Float'の
エラーになってしまいます・・・・・
498デフォルトの名無しさん:03/05/15 02:34
delphiのパーソナル版の無料配布されてた物を使っているのですが、
これを有料で購入した場合、マニュアルがついてくるそうですね。
これには何が書かれているのですか?理解を深めるためには購入したほうがいいのですか?
>>497
FloatじゃなくてExtendedかDouble

>>498
\Borland Delphi Personal Installer\documentation\
のPDFがそれ。
>>495
SpinEditのValueって整数型でなかったかな
つーかSpinEditって最近使った記憶がない

ふつーWin32タブにあるUpDownを使うことが多いと思うけど
これも整数型用なので
漏れならOnClickのイベントハンドラで増減して
その値をFormatしてEditに書き込むとかするだろうね
501498:03/05/15 03:01
すばやい対応、ありがとうございました。
購入しませんw
スピンエディットは整数だけだよ
503デフォルトの名無しさん:03/05/15 14:09
YPT HandleXのようにクラス名の取得とかをするフリーソフトありませんか?
このソフトはXPでは起動するたびにエラーが出るんです
504RS-232:03/05/15 15:53
RS-232の制御はDelphiでおこなえるのですか?
Delphiでも VBでもC#でも BCBでも VC++でも可能です。
506RS-232:03/05/15 15:59
Delphiで制御する方法教えてもらえますか?
まず自分がどこまで知っているのか
どこについて知りたいのかを書いたほうがいいよ
>>504
Delphiは何を使っていますか? pro なら CDROM に 日本語のAPIヘルプがあります。
[通信の概要]を見ましょう。

持ってなければ、 以下を MSDNサイトで検索するといいでしょう

BuildCommDCB
EscapeCommFunction
SetCommState
SetCommTimeouts
SetReadTimeOut

CreateFile
WriteFile
ReadFile
CloseHandle

例:http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_buildcommdcb.htm
509RS-232:03/05/15 16:12
計測機器についているRS-232の端子
からでるシグナルをキャッチしたいのですが
外部装置の制御の経験がなく全く何が必要か
わからないです。
まず概要教えてもらえますか
ロジアナでつかめ
511デフォルトの名無しさん:03/05/15 17:50
今からDelphi6のパーソナル版でプログラミングにチャレンジします。
目標は、「IEやエクスプローラのツールバーに表示させて使うMP3プレイヤー」です。

しかしながら何から手を付けていいやら全く分からず、途方に暮れています。
どなたか哀れな私めに手ほどきをしてやって下さい・・・。
512495:03/05/15 17:53
なんとかここまでになりましたが
それでもエラーが出ます・・・・

procedure TForm1.Button1Click(Sender: TObject);
var
i, j, Ans: Double;

begin
i := StrToFloat(Edit1.Text);
j :=0.1;

StrToFloat(Edit2.Text):=i+j;

end;
× StrToFloat(Edit2.Text):=i+j;
○ Ans:=i+j;Edit2.Tex := Format('%10.3f', [Ans ]);

514495:03/05/15 18:07
>>513
早速ありがとうございます。
無事できました。
次はボタン1とキーボードのEnterキーの
リンクに挑戦してみます。
ありがとうございました。
>>515
ありがとうございます。
勉強してきます!
>>509
Delphi4 用だから Delphi5 で動くかどうかはわからんけど、ソースがついてるから頑張れば何とかなるかと。
あと簡単なテストプログラムがついてるから、サンプル代わりになるよ。

ttp://www.vector.jp/soft/dl/win95/prog/se077144.html
Windowsを破壊するコンポーネントある場所おしえてください
>>518
君はそれが面白いと思ったわけだ
>>519
やめとけ、睡眠した方が有意義だ。
521デフォルトの名無しさん:03/05/16 01:23
Delphi6からDelphi7へのアップグレード料金っていくらでしたか?
borlandのサイト探したけど、情報が見つかりませんでした。
>>521
Professionalなら、\25,200
Windowsを破壊といっても抽象的すぎてわかりません。
>>521
封書が届くはず。
物理的に爆発するやつです
526デフォルトの名無しさん:03/05/16 07:19
>>522
サンクスです。ちなみに赤版からでもアップグレードできますか?
最近、デルファイをはじめました。
効果音ファイルなどを再生するときに、
ボタンを押した瞬間から読み込んでいるらしく、
実際に音がなるまでに時間がかかってズレてしまうのですが、
これは仕方ないんですか?
>>527
あなたの作り方が悪いのです。
529毛の生えたフサギコ:03/05/16 07:52
>>527
コードをアップすればアドバイスがいただけるかものはし。
530527:03/05/16 07:53
>>528あっそ、くだらない回答してる暇あったら、さっさとやり方教えろやボケ氏ね!
放置。
激しく豹変
>>527
2度目の再生は早いの? 2度目が速いのなら、先にファイルをファイルとして前半少しだけ読み込んでおいたら?
そうしたらWindowsにキャッシュされるから早くなるよ。
>>531-532
もしかして530本人? 最近騙りで煽ってるの多いけど面白いのかな?
>>526
たぶんできまつ。うちにも封筒来た。捨てたけどw。
536毛の生えたフサギコ:03/05/16 08:23
みなさんへ

Delの情報交換スレで他のものはほとんどプログラミングテクニックと
関係ない話しで進行しているので、ここだけでも、初心者向けに
まともなレスの応酬で機能させたいので、どうかご協力をおねがいします。
どんなことにも面白みを感じない人がいるらしいけど、つまらなくないのかな?
viewItem にテキストを読み込ませ、
それをボタンなどを押す事で、オートスクロールさせたいのですが、
どのようにしたらよいですか?
539538:03/05/16 10:29
あ、書き忘れすいません。
テキストを読み込ませるまでは出来てます。
オートスクロールの部分だけ良く判らないのです。
そのviewItem は?
ある文字列をTStringList内の文字列の一列目に挿入する、
という動作をさせたいのですが。

000
111

というTStringListの一列目に333という行を挿入したいのです

333
000
111

こういうふうに。どのようにすればいいでしょうか?
TStringList.Insert を使えばいいと思うが?

ただし、これを使ったプログラムはパフォーマンスが悪い事がおおいよ。
543デフォルトの名無しさん:03/05/16 19:34
自作クラスのデストラクタの宣言で
Destructor Destroy;
とするのと
Destructor Free;
とするのでは、何か違いはありますか?

Freeという名前のデストラクタを作っていなくてもFreeが使えるのですが、
もしかして、クラスで用意したデストラクタを使いたくない時は宣言と違う
開放メソッドを呼び出すなどという使い方をしますか?
>>543
Freeはデストラクタではありません。
FreeがDestroyを呼び出します。

ですからデストラクタとして再宣言してはいけません。
基本的にFreeを継承して変更も、しない方がいいです。
545543:03/05/16 19:59
>>544
レスクス。
なるほど。今までクラス作る時はデストラクタのメソッド名にFreeとかしてましたが、
それはダメなんですね。

では自作クラスの場合のデストラクタの名前は
Destroyにするのが一番良いのでしょうか?

それと、継承したクラスを作った場合、
コンストラクタでCreateを作り、それが上位クラスのCreateと
引数が違う場合は隠してしまいますよね?

その状態でデストラクタのみ継承するのは止めた方が良いのでしょうか?
freeをデストラクタにしてはダメです。
xx.free; は もし xxがnilならデストラクタを呼ばないようになっています。
if xx<>nil then xx.Destroy; と書く代わりに使う訳です。
そういう作法になっているので、既に解放したクラスでも 他人はfreeを呼び出します。
といっても、実際にはライブラリがが操作する場合は、 xx は上位クラスにダウンキャストして
操作されるでしょうから自分が使う分には実際に問題にはならないでしょうが・・・

基本的にデストラクタは
destructor Destroy; override;
とオーバライドして使わなければいけません。

デストラクタのみ継承するのは全く問題ありません。
>Freeという名前のデストラクタを作っていなくてもFreeが使えるのですが、
 そりゃ最上位のTObjectで宣言されているメソッドですから

>クラスで用意したデストラクタを使いたくない時は
>宣言と違う開放メソッドを呼び出すなどという使い方をしますか
 そういう状況が、具体的にあるの?
 Destroy以外にクラスを解放する方法ない。
 (あることすればできるが、面倒なだけで意味ない)
548543:03/05/16 20:19
重ね重ねレスありがとうございます。
>>546
>デストラクタのみ継承するのは全く問題ありません。
そうなんですね。これで安心して上位のCreateを隠せます。
(隠しちゃっても良いのだろうか・・(^^;)

>>547
>そういう状況が、具体的にあるの?
ごめんなさい。Freeが単なるメソッドじゃなくデストラクタだと思っていたので
何か分ける意味があるのかなぁと、無意味な事を想像してしまいました。
549 :03/05/16 21:03
http://www.borland.co.jp/delphi/personal/にいってDelphi6の
インストールのためのファイルを落としてきました。

で、それをインストールしようとしてファイルを実行したのですが、
実行するとすぐ、「不正な処理を行ったので・・・強制終了しました」の
エラーが2回でます。
そのあと、普通にインストールのためのダイアログがでるのでインストールは続行でき
るのですが、その変なエラーが気になってその先には進んでいません。
試しにSAFEモードで立ち上げて、同様にインストールを試みましたが同じエラーがでます。
ファイルも何度も落としなおして試しましたが変わりません。
なぜこんなエラーがでるのでしょうか?
このまま気にせずインストールしていいのでしょうか?
教えてやってください。

OSはWIN98です。
550コピペ推奨:03/05/16 21:05
VB.NET 2003の価格が発表されました。
http://www.microsoft.com/japan/presspass/releases03/051503_VS03_t1.asp

なんと7,800円と、Delphi Personalよりも安いではありませんか!
しかも商用開発できないなどとのクソマヌケな制限もありません!
7,800円がすぐに払えない人には無料のSDKもあります!

どうしてDelphiなんか続ける理由があるのでしょうか?
今すぐVB.NETで最先端の開発環境を体験しましょう!
LonghornのGUIは.NETでこそ最良のエクスペリエンスを受けることができます!
>>549
 それだけじゃ判らんよ。とりあえず気にせずにインストールしてみたら?
 Delphiは特にWindowsを弄ったりはしない筈だから、他のアプリが変になったりの可能性は少ないし。
552549:03/05/16 21:11
>>551
即レスありがとうございます。
「それだけじゃわからん」・・・とは、では他にどういう情報が必要でしょうか?

とりあえず、インストールするのはなにか少し怖いのですが・・。
アカデミックで商用開発は無理だろ。
>>552

こんなダイアログ? 
http://www.borland.co.jp/delphi/devsupport/d6issues.html

とりあえず自分のHDDScanDiskをかけてみて、それで問題なくて、
,InstalShealed Wizard がファイルの保存場所 ってのから始まっているならインストールしてみたら?

それから、インストールが終ったら
http://www.borland.co.jp/delphi/devsupport/
ここからアップデートファイル落としてアップデートした方がいいよ。
556549:03/05/16 21:27
>>554

そのHPにあるようなのをでてません。
ただ・・・ファイルの保存場所ってのはでるので、ではこわいですが、
試しにインストールしてみます。
Delphi6PersonalならIDE付きでタダだよ。
>>556
当然、 ウイルスチェックはしてるよね? ScanDiskのかけてるよね?

細かい手順はここにあるから比べて確認してみたら?
http://www.ss.u-tokai.ac.jp/~oomori/news/del6install.html
559549:03/05/16 21:36
>>558
ありがとです。
ウイルスチェックと、スキャンディスクはしました。
他に何か試してみることはありますか?

そのHP見てみます。
560デフォルトの名無しさん:03/05/16 21:48
Del厨必死だな。(藁
商用開発もできないインチキIDEを広めるなよ。(ワラ
どうせ将来は.NET化するんだから今のうちに.NETやっておいた方がいいだろ。(ゲラ
561毛の生えたフサギコ(実はブリーフ):03/05/16 21:48
言語ガイドObjectPascalの本を読んでいて、たった今、気づいたのだけど、

2−6から2−7にかけてのサンプルプログラム、例外が発生します。
どこがいけないのでしょう?
>>560
何か仕事で嫌なことでもあったのかい?
放置しましょう。
リンク集


ゼロから始めるDelphi講座
http://www.text2music.com/text/delphi/zero/index.htm

Delphi-ML過去ログ
http://www2.big.or.jp/~osamu/Delphi/

Delphi広場
http://www.sakaki.keiaikai.or.jp/
Stringの一文字目を削除するには
どう書けばいいですか?
例えば
String := 'abcdefghijk';
だったとすると、
『a』を削除して'bcdefghijk'にしたいです。
どうかお教え下さい<(__)>
Delete(String, 1, 1);
ありがとうございました<(__)>
素早いレスを感謝です<(__)>
>>527
ファイルからの読み込みによる再生の遅れは
あらかじめメモリの読み込むことで解決できると思いますが

sndPlaySound APIで再生する場合,
どうもファイルの読み込み時間とは別に
実行時の1回目の呼び出しのみ遅れが発生する場合があるみたいです.
(職場でメインマシン(Win XP)で発生,別マシン(Win 95/PC-9821系))
うちの環境では↓こんな風に実行して回避しましたが
sndPlaySound(nil, SND_ASYNC or SND_MEMORY);
他はどうなのかなぁ.

>>542
大量・高速な処理が求められるのでなければ
特に気にしなくてもよいと思いますが,どうでしょう?
>>550
19800円の版は商用開発できるのかな?
だったら昔のDelphiみたいでいいなぁ.

メモリに読み込む例

// メモリストリームのリストクラス
TMemoryStreamList = class(TObjectList)
private
function GetItems(index: integer): TMemoryStream;
public
function Add(NewStream: TMemoryStream): integer;
property Items[index: integer]: TMemoryStream read GetItems; default;
end;

// フォーム:FileListBox をはりつけています
TForm4 = class(TForm)
FileListBox1: TFileListBox;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FileListBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
FWaveStreamList: TMemoryStreamList;
procedure LoadWaves;
procedure PlayWave(Number: integer);
public
end;

(つづく)
(続き.以下実装)
// Windowsのフォルダを\付きで返す
function WindowsPath: string;
var
p: array [0..MAX_PATH] of char;
begin
Windows.GetWindowsDirectory(p, MAX_PATH);
Result := IncludeTrailingBackslash(p);
end;

{ TMemoryStreamList }

function TMemoryStreamList.Add(NewStream: TMemoryStream): integer;
begin
Result := inherited Add(NewStream);
end;

function TMemoryStreamList.GetItems(index: integer): TMemoryStream;
begin
Result := inherited Items[index] as TMemoryStream;
end;

(つづく)
(つづき)
procedure TForm4.FormCreate(Sender: TObject);
begin
FileListBox1.Directory := WindowsPath + 'media'; // WAVEファイルのある場所
if FileListBox1.Items.Count >= 1 then
FileListBox1.ItemIndex := 0;
FWaveStreamList := TMemoryStreamList.Create;
LoadWaves;
end;

procedure TForm4.FormDestroy(Sender: TObject);
begin
FWaveStreamList.Free;
end;

// WAVEファイルを片っ端から読み込む
procedure TForm4.LoadWaves;
var
i: integer;
iNew: integer;
begin
FWaveStreamList.Clear;
for i := 0 to FileListBox1.Items.Count - 1 do
begin
iNew := FWaveStreamList.Add(TMemoryStream.Create);
FWaveStreamList[iNew].LoadFromFile(FileListBox1.Items[i]); // メモリストリームにWAVEファイルのイメージを読み込む
end;
sndPlaySound(nil, SND_ASYNC or SND_MEMORY); // 無音再生.これを実行しないと1回目の再生が遅れることがあるようです
end;
(まだつづく,すいません)
(つづき)
procedure TForm4.PlayWave(Number: integer);
begin
sndPlaySound(nil, SND_MEMORY); // 再生してたら止める
sndPlaySound(FWaveStreamList[Number].Memory, SND_ASYNC or SND_MEMORY); // 再生(再生が終わるのを待たない)
end;
(おわり)
ながい
>>573
安い燃料だ。
575 :03/05/17 00:39
つーか、サイズがデカイんじゃない?<サウンド
レート下げてやってみたら?
TFormのBorderStyleをbsDialogにすると、そのフォームのMainMenu
が実行時に見えなくなるのは仕様ですか?
577デフォルトの名無しさん:03/05/17 10:50
Del5インストールした後、BDEを5.2にUpDateしたのですが
BDEの設定画面でバージョンを見ると5.0.1のままなのですがUpDate出来てるのでしょうか?
何処を確認すればいいのでしょうか?
>>576
仕様です。ていうか普通ダイアログボックスにメニューは付かない?
どうしても似たような事がやりたければToolBar+PopupMenuで似たようなことが出来る。
579 :03/05/17 12:17
Delphi完全な初心者です。
一から勉強したいのですが、お勧めのいい本はないでしょうか?
教えてください。
>>579
HSPの方が良いよ。自分で情報を探すって言うプログラミングを学ぶための最低条件満たせない人。
>>597
Delphi付属のマニュアル熟読。
プログラミング中にどうしてもコンポの動作がわからないときは、
VCL内をデバッガで追っかけ。
>>580

ここで人に聞くというのもある意味自分で情報を探してるわけだがw
>>579
Googleで検索すれば大体のことは分かる
ありがちなDelphi入門
チュートリアルをみてテキストエディタを作る→作れない→検索→Σ(゚д゚lll)ガーン→WEBで同じような入門ページをハッケソ→(゚д゚)ウマー
585579:03/05/17 13:05
レスサンクスです。
ググって自分で探してみますです。
586579:03/05/17 13:12
今とりあえず、チュートリアル見ながらテキストエディタ作ってるんですが

>コンポーネントパレットの[Additional]ページにある
>ActionManager コンポーネントをダブルクリックして,

のところがわかりません。
[Additional]ページにActionManager コンポーネントなんてないのですが・・。
キタキタ
588541:03/05/17 13:33
>>542
思い通りの動作にする事が出来ました。
ありがとうございました。
>>577をおしえてくんろ
 ∫,,,,,,,,,∧,,∧    休日
⊂,,,,,,,,,つ,,゚Д゚ミつ   マタリ自作ツール開発です

質問っす。

このあたりの
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1001489683&res=7&fi=no
CUIプログラムを作っているですが、
このプログラムをAとして
コマンドラインで表示するのではなく

違うプログラムBからAを起動して
Aがコマンドラインで出力する値を
プログラムBで受け取るにはどうしたらいいですか?

すまそ、検索ワードが思いつかないので聞いてみるです。
591デフォルトの名無しさん:03/05/17 14:32
過去のDelphiアカデミック版からDelphi7までのアップグレード
料金をご存知の方教えていただけませんか。
これからDelphiを買おうと思っているのですが、アップグレード
料金によって、製品版を買うかアカデミック版を買うか迷っているので。
>>591
某のホームページからメルすると見積もり金額FAXしてくる。
で、ユーザは振り込み前に製品郵送して貰えるぞ。
自分とこは、安売り案内に書かれてない別製品買うのでだったので諦めてたが、
2マソ安くなった。
標準出力の事?
>>590
検索キーワード
CreatePipe
名前なしパイプ
 ∫,,,,,,,,,∧,,∧    
⊂,,,,,,,,,つ,,゚Д゚ミつ旦~~

調べてみます。アリガトです
PopupMenuを開くCUI形式でプログラム作ってて
あるプログラムから起動かけて
Popupで選んで、何を選んだかを
呼び出したプログラムに返すっつのを
つくってるです。
Popupが消えてくれなくて、難しいっすね。
>>595
Windowsの作法だと、そういうのは普通DLLにするもんじゃないの?
>>586
ActionManagerを検索
598586:03/05/17 16:19
>>597

ありがとう。
↓ということですね・・・
-------------------
チュートリアルで使っているコンポーネント、ActionManagerが無いんです・・。
これはProfessional版以上に付属しています。 ActionManagerが無くても何とかなるのですが、チュートリアルとしては難しそう(^^;;
まぁ、このチュートリアルは放っておいて、他の事から挑戦する方がいいかも。
-------------------

しかし、まいったな・・・「他のことから挑戦」と言われてもどうしたらいいんだか。
599デフォルトの名無しさん:03/05/17 16:22
(/o\)カワイイ!
http://homepage3.nifty.com/coco-nut/
 ∫,,,,,,,,,∧,,∧   >>596
⊂,,,,,,,,,つ,,゚Д゚ミつ EmEditorPluginのPopupメニューつき
           機能のDLLサイズがでかいので
          それだけ別Exeにしようとしてまして。
 ∫,,,,,,,,,∧,,∧   普通のアプリはどうやって
⊂,,,,,,,,,つ,,゚Д゚ミつ  Popupを消してるんでしょか・・・

program Project2;
uses
 SysUtils, Dialogs, Controls, Forms,
 Unit1 in 'Unit1.pas' ;
begin
 DataModule1 := TDataModule1.Create(Application);
 try
  DataModule1.PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
  Application.ProcessMessages;
 finally DataModule1.Free; end;
end.

このようにして、PopupMenuを
表示させているのですが、
普通の動作のように
他のアプリにフォーカスが移動しても
menuを選択するまで表示が消えません。

どうやったら普通の挙動のように
動かすことができるでしょうか?
>>600
別exeにするくらいなら VCL使わずにプログラムした方がいいように思うのだが?
 ∫,,,,,,,,,∧,,∧   と、いうても、APIのみで
⊂,,,,,,,,,つ,,゚Д゚ミつ  PopupMenuを表示させる方法を
            知らないので。
            あと楽なRADも使いたかったと。
>>603
VCLのPopupMenuのソースの中を出刃蛾でおいかけろ
>>598
何の為にDelphiやるの?
何を作りたいの?
プログラミング自体が初心者ならジャンケンゲームとか作ってみれば?
606598:03/05/17 19:05
>>605

↓みたいなことをやりたいのです。道のりは長そう・・・
あるアプリケーションの画面情報(おもに数字)を読みとって、ある特定の
変化が起きたら(例えば「5」という数字が表示されたら)音を鳴らす。

そういうプログラムを組みたいのです。

欲を言えば、「音をならす」だけでなく、さらに
プログラムが自動的にネットにアクセスしてある操作を行う
607598:03/05/17 19:09
ヘルプのチュートリアルはアクションマネジャーがないと先に進めないことが
わかり、あきらめました。
代わりに解説書で頑張ってみようと思い、さっき本屋に行って来ました。
しかし・・・デルフォイの解説書が全くありませんでした。

大きな本屋じゃないとおいてないのかな。
というより、ちょっと不安になったのは、本が全くないってことは、
デルフォイってすごくマイナーなのですね。
C#とかVBとか言うやつの本は一杯あった。うーん、そっちの方が情報が手に入れやすくて
初心者には向いているのでしょうか?
>>607
初心者に留まらせるに向いている。
一生初心者で良いならどーぞ。
609608:03/05/17 19:20
言葉が抜けてたか。

C#やVBをやって、初心者に留まるなら〜

ドトネトはクラスライブラリのコードが無いから、外からプロパティやメソッドを使うしかない。
悪いコーディングが身に付く。
>>608
ムキになるな。 初心者向けから上級者まで幅広くあるのと、
いい本かどうかさえ分からない本が少数しかないのでは全然違うぞ。
>>609
> ドトネトはクラスライブラリのコードが無いから、外からプロパティやメソッドを使うしかない。
> 悪いコーディングが身に付く。
言っていることが論理的ではないな。
Delphi 6 Personalでは悪い癖がつくといっているみたいだ。
612608:03/05/17 19:23
>>611
あたりー。

ま、クラス派生したコンポーネントのプログラムはここから取って来い。
http://home1.infonia.ne.jp/~delphian/delphi/
>>612
なんだ? 別に標準のクラスライブラリである必要はないのか?
ならC#でもVB.NETでもソース公開のライブラリあるだろ。
>>612
ブリンクうぜー(T_T)
>>613
そんなコンポどころかアプリが出てない言語だしてどうするよ。
>>603
 ポップアップを表示させるだけなら

hPopup:=CreatePopupMenu;
AppendMenu(hPopup,MF_STRING,101,'Menu1');
AppendMenu(hPopup,MF_STRING,102,'Menu2');
TrackPopupMenu(hPopup, 0 , X, Y, 0 , Handle , nil);

こんな感じで、そんなに不便じゃないでしょ。
ただし、問題は、Handleに親窓のハンドルが必要で、しかもそちらにメッセージWM_COMMANDが送られる事。
617598:03/05/17 19:31
知識がないモノで、みなさんの言ってることが正直ほとんど理解できないのですが・・・
>>610さんの言うように、やっぱり解説書が豊富な言語使ってる方が無難なのでしょうか。
独学で学ぶので、解説書だけが頼りですから。
>>617
旧VBの解説書は膨大にあったし、ユーザも多かったが、
M$がVBの出荷を停止する。
で、Delphiに置き換える案件が増えてるらしい。
コンパイラにとって本の数やユーザ数は関係無い。
すでに.NETの本はDelphiの量を超えてるな。

> で、Delphiに置き換える案件が増えてるらしい。
これ捏造。ソース提供できないはずだから。

> コンパイラにとって本の数やユーザ数は関係無い。
そりゃそうだ。”コンパイラ”は関係ない。
本の数やユーザ数が関係あるのは人間。
621デフォルトの名無しさん:03/05/17 19:40
DMonkeyScriptの質問はアリですか?
VCLについて聞きたいんですが・・
VBの代わりとしてDelphiを提案する人がいるのかね。
>>617
 まず

ゼロから始めるDelphi講座
http://www.text2music.com/text/delphi/zero/index.htm

ででも試しながら、 画面上判らない個所でF1を押してゆくという方式で勉強しては?
それで判らない事があれば、このスレで聞いて下さい。
ひまわりのサイトじゃん・・・
本の数を信用するとこんなことになるぞ。

http://japan.cnet.com/news/special/story/0,2000047679,20051963-5,00.htm
>ガートナーによると、古いアプリケーションを.Netに移行する場合、
>「驚く程多くの変更」を加える必要があるかも知れないという。
>例えば、Visual Basicの場合、VB.Netに統合することができるのは、
>既存のVisual Basic 6プログラミングツールのせいぜい40%程度だという。
>マイクロソフト側の説明によると「重要なデザインやコーディングの変更はない」という。
Delphiなら、今年Delphi.NETが発売されるし、
LinuxコンパイルするならKylixがDelphi7にバンドルされてる。

>>606 って スレたてるまでもない質問スレの人ですよね?

>>606のような事をやりたいなら、大抵のツールで出来るけど、
 パソコン がWin98でメモリ128M
という条件で、今手に入る中では Delphiが一番簡単ですよ。
だからガンバッってこれでやるしかないと思います。

まず、最初にツール(IDE)の使い方を覚えてから、
言語の方は必要なときにヘルプを見ながらゆっくり覚えるといいでしょう。
>>625
CもJavaも本の数は多いぞ。
その話と本の数は無関係だろ。
Delphiの本の少なさは致命的だって
Delphiが最もコンポーネント多いし、
ポトペタはりやすいし、これでねをあげたら終り。
>>628
本が多いことを信用するなということ。
だから、
>その話と本の数は無関係だろ。
は無意味。
628は他人を騙そうと必死になってる。
>>630
必死になるなよ。要するにおんなじことを言っていることだろ?
Delphiの本の少なさは致命的だって。
>>629
馬鹿用言語ということですね
気になるVisual Basic/VBAの今後
http://itpro.nikkeibp.co.jp/free/ITPro/OPINION/20030331/1/
VBユーザーが徐々に減っている?
(3)Visual Basicを“卒業”して,Visual C++やDelphiなどに移行した──などが考えられる。

オープンソースってのは大概CかC++だからねぇ。
635633:03/05/17 20:05
>例えば,Visual C#を使っている読者は,1年たった今でも10%を大きく超えることがない。
>そうした現状に危機感を感じたのか,マイクロソフトはキャンペーンを開始した。
>>634
オプソしらない香具師はっけそ。
COBOLみたいなゴミ言語のものもある。
>>634
pascalものなら無限にあるが。

が、ドトネトサイアク。C/C++もmanagedにしなきゃならんので、
オプソのソースをコンパイルできん。
C++にしとけ。Delphiはマイナーすぎる。
>>638
>>633で今までの会話に勝負ついたからって、
いきなりC++を出すなんて。
精神障害でしか?
ま、あなたはブビ厨でしょ。
>>636
CとC++以外無いとは言って無いだろ。少ないだけ。
日本語わかるか?
>>637
> C/C++もmanagedにしなきゃならんので、
> オプソのソースをコンパイルできん。
managedにしなきゃいいじゃん。
知らないかもしれないけど、一部分だけunmanagedってのもできるんだよ。
642598=617:03/05/17 20:18
皆様レスありがとです。
色々意見を聞いてるとよけい分からなくなりますね・・・。
いい解説書があればデルフォイでもいいのですが。

>>623
>ゼロから始めるDelphi講座

そのHPいったのです。でも、第2章で挫折しました。
書いてあるとおりにやってるのにうまくいかないのです。
どうも説明がかなりハショられてるっぽいので。それとも私のやり方がまずいのか・・。
F1押すとヘルプでるのですか?試してみます。

>>627
>パソコン がWin98でメモリ128Mという条件で、

前のスレでも書いたのですが、パソコンをグレードアップする気はあるのです。確かにグレードアップは金も手間もかかって大変ですけど、もしデルフォイより他の方がいいのなら、グレードアップする価値はあるのかなぁと。
>>640
うわ。恥の上塗り。
オプソは無限の文献のようなもの。必要なものを取り出して棄てるのが大変なもの。
Delphiのプロ版で、200のコンポがあって派生されたコンポが無限に公開されてる
>>639
はぁ? お前誰と勘違いしてるんだよ?
お前VBにそうとうコンプレックス持ってるだろ。
>>643
お前、知能傷害起こしてるだろ。
もう言っていることが支離滅裂。

>>642
Delphiより敷居の低いものは無いんだが。
教育用pascal言語で、細部から大局まで普通に記述出来て、
コンポーネントが膨大にあって、Exe1個で動作して。
ブビ厨死ね消えろウザ イスレ違い荒らすな
でもDelphiマイナーだしなー。
本全然ないし。
pascalの教育用ってのは昔の話だし。
マイナーよりVBみたいに販売停止になって死滅する方が怖いな。

米の大学でM$の売り込みで、教育にC#を導入しようとしたところ、
学生が反対キャンペーンで中止になったし。

やっぱ、Delphiか。
でもボーランドも今度からDelphiよりもC#を先に出すみたいだし。
もうすぐ死滅するんじゃない?
言語資産が重要なんであって、古くから有名アプリがあるDelphiは全然マイナーじゃない。
Linuxコミュニティ側がWindowsから移植して欲しい言語としてDelphiが選ばれて、Kylixになったわけだし。
Windows上ではメジャー。
652598=617:03/05/17 20:34
とにかく本がなくて、ヘルプは役に立たなくて、で、唯一頼りの
http://www.text2music.com/text/delphi/zero/3.htm
なんですが、ここも表記がアバウトでけっこう読み進みにくいのです。
例えば・・・

>Delphi5以降 をお使いの方は、[ファイル|アプリケーションの新規作成]からコンソール・アプリケーションを選んでもらえれば良いのですが

ということを書いてあるのですが、そんな選択肢がないのです。
で、30分くらい思案の末、ファイル→新規作成→その他 の中にやっと発見。
バージョンが違うのか、とにかく記述が違うところが多いのです。
もちろん、善意でやってるHPにけちつける気はないのですが、やっぱりきちんとした
本の方が情報量も多いし、画面写真も多いからわかりやすいのかなぁと。
>>652
まぁ、開発環境というのはGUIに限らず大きな障害が沢山ある。
Delphiはプログラミング言語、OOPやWindowsのツマヅク部分を綺麗に回避している。
Delphiは身に付けたほうが将来のため。
>>642
ではこれは?
http://www.butaman.ne.jp/~yuhta/COMPUTER/CHAP01/JCOM01_05.html

とりあえず、まず、

1、ファイル -> 新規作成->アプリケーション の後 F9を押してみて下さい。

これでどうなりましたか?
これ見るとやっぱりDelphiは使われてないみたいだね。
http://sourceforge.net/softwaremap/trove_list.php?form_cat=160
>>651
でもKylix使われてないよ。
>>655
>Delphi/Kylix (1087 projects)
こう見えるんだが...
アンチDelphiな香具師のいうことを反するソースばかり。

ま、VBは死滅したし、C#やVB.NETはLinuxどころかWindowsアプリも作れないし。
> C (10872 projects)
> C++ (10564 projects)
> PHP (6577 projects)
> Perl (4590 projects)
やっぱりDelphiはマイナーだよ。
>>659 ネタはいらん
>>660
恥の上塗りの2回目。
オマエは10000プロジェクトダウソしてコード読むつもりか?
> C#やVB.NETはLinuxどころかWindowsアプリも作れないし。
実際に作れて動いてるしなぁ。WindowsでもLinuxでも。ポリポリ
>>662
お前頭悪すぎ。ネタにしても面白くない。
無限にあるコンポーネントダウソしてコード読むつもりか?
>>663
それはドトネトアプリであってWindowsアプリといわない。

ポリポリって貧乏が匂ってきそうでキショ居。
>>598
http://onigiri.s3.xrea.com:8080/delphi/index.php?%5B%5B%A5%EA%A5%F3%A5%AF%5D%5D
の初心者向けのところをざっと読むべし。
>>665
なんか屁理屈言っているけど、WindowsでもLinuxでも動くことには違いないじゃん。
660でプロジェクト数が出て、
662で、どのプロジェクトも多くて見切れない、と書いているのに、

664で
>お前頭悪すぎ。ネタにしても面白くない。
>無限にあるコンポーネントダウソしてコード読むつもりか?

664は頭を論理破壊されたようです。ガクガクブルブル

>>668
頼むからちゃんと意味のあること言えよ。
そのうち荒らしと言われるぞ。
>>667
で、
http://itpro.nikkeibp.co.jp/free/ITPro/OPINION/20030331/1/
>VBユーザーが徐々に減っている?
>(3)Visual Basicを“卒業”して,Visual C++やDelphiなどに移行した──などが考えられる。
>例えば,Visual C#を使っている読者は,1年たった今でも10%を大きく超えることがない。
に戻る。
>>669
ここはDelphiスレだから反Delphiが荒らしなんだが。
大体>>662が言っていることおかしいよね。
>>660でDelphiはプロジェクト数が少ない、と書いてるのに、

>>662
> オマエは10000プロジェクトダウソしてコード読むつもりか?

662は頭を論理破壊されたようです。ガクガクブルブル
673642:03/05/17 21:04
>>654

言われたとおりやってみました。空白ページがでるだけです。なぜだろう?
とりあえず、自分でもう少し考えて、なにが問題点かきちんとまとめてから
もう一度質問してみますです・・・。
しかし、先が思いやられるw

>>666
それいいリンク集ですね。ちょっと色々あさってみます。
>>670 想像記事なんか要らない。
>>671
馬鹿なことを言っている奴はどちらにしろ荒らし。
Del使いに扮したアンチDelの可能性が高い。
674=負け犬の遠吠え
>>676
はぁ?
> などが考えられる
これは想像のときに用いられる言葉だろ。日本語(略
677=負け犬の駄目押し、恥の上塗り
そろそろ出番ですか?
>>678
いいからもう寝ろよ。お前がいるからこのスレが荒れる。
恥の上塗りをしているのはお前。
>>673
空白ページが出るだけで OK です。 
インストールが巧くいかなかったというので心配してたのです。

数字に変化があったらという事ですが、それには

1、監視のアプリの窓ハンドルを取得する
   マウスで指示した位置からWindowFromPoint で取得する
   この方法で文字を事前調査しておいて、FindWindowで取得する方が後は楽

2、画面の監視は
  コントロールであれば窓ハンドルに対して WM_GETTEXT で取れる場合もある
  ダメならBitBltを使うかして、ビットイメージで取得する
  変化があったら程度の事ならこれも簡単でしょう

という部分を乗り越えないといけません。
Del厨必死だな。(藁
俺は6Perから始めて、インターネットだけでなんとかなってる。
最初の頃(1、2週間)は苦労したけど、どれ選んでも似たような苦労はすると思う。
684デフォルトの名無しさん:03/05/17 21:40
Javaスレに続いてDelスレでもVB使いに論破されて負けたのか。
685673:03/05/17 21:41
>>681

核心の部分の解説たすかります。
ただ・・、申し訳ないですが、現時点ではその説明は全く理解できんです・・・・。
もうすこし、デルファイの理解が進んでから、もう一回読み直すのでその時
分からなかったらまた教えてください。
Delphi初心者に勧めるって、罪悪感はないのかね?
次のバージョンはない言語なのにね
>>682
Delphi スレで必死にならずにどこで必死になれと?
689デフォルトの名無しさん:03/05/17 21:52
Delphiなんかに手を出しちゃダメだよ。

VB開発者が次に選ぶ言語の行方は?
http://www.atmarkit.co.jp/fdotnet/questionnaire/2002-11/2002_11.html

現在使用している言語 (Delphi : 0)
http://www.atmarkit.co.jp/fdotnet/questionnaire/2002-11/dotnet1.gif
今後利用したい言語 (Delphi : 2)
http://www.atmarkit.co.jp/fdotnet/questionnaire/2002-11/dotnet4.gif
>>686-687
こいつらって、一つの言語しか覚えられない厨房ってことでいい ? > ALL
>>689
おいおい。Delphi全然人気ないじゃん。
このスレ嘘つきが多いな。
初心者で何も知らないことをいいことに嘘教えるのは良くないよ。
初心者ならVB.NETとかC#の方がいいよ。
>>689
VB 開発者って何だよ。MS の人間か ?
VB の単なる利用者だろ ?
そんなオチこぼれ厨の意見を参考にする方がダメダメだろ。
>>693
>>579に失礼ですよ。これだから閉鎖的なDel厨は嫌ですね。
>>685
そうですね。
といっても、ちょうどこのスレにいるかどうか判らないので
サンプルコードを置いておきます。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1032435179_4/TestProg.lzh

実行させて
実行したら、マウス左ボタンでフォームの部分を押したまま
見たいアプリの上に持ってきてボタンを放します。
 
押したままマウスを動かして目的の位置で放すすのを ドラッグ&ドロップというのですが、
仕様上、ドラッグ動作でないと、マウス座標を簡単に取れない為です。
696コピペ推奨:03/05/17 22:01
VB.NET 2003の価格が発表されました。
http://www.microsoft.com/japan/presspass/releases03/051503_VS03_t1.asp

なんと7,800円と、Delphi Personalよりも安いではありませんか!
しかも商用開発できないなどとのクソマヌケな制限もありません!
7,800円がすぐに払えない人には無料のSDKもあります!

どうしてDelphiなんか続ける理由があるのでしょうか?
今すぐVB.NETで最先端の開発環境を体験しましょう!
LonghornのGUIは.NETでこそ最良のエクスペリエンスを受けることができます!
>>696
だからC#とVB.NETなら将来性のあるC#買うよ。
マジレスすると初心者はperlから始めるのがいいと思う。
出来るだけ汎用性があってお手軽と言う部分で一つ抜けているから。
perlでstrict出来るようになったらCを勉強。
そうすればJavaだろうがDelphiだろうがすぐに覚えられる。
基本的に言語は同じものだから。
>>698
>基本的に言語は同じものだから。

彼にLISPとPrologをプレゼントしたい。
700デフォルトの名無しさん:03/05/17 22:12
>>698
そうだね。時代はWeb開発だし。
それにGUIがないと開発できないなんてプログラマじゃないもんな。(ギャハ
やっぱり基礎が一番重要だな。
DELとかVBとか言う前に基礎を勉強しろと小一時間問い詰めたい。
木を見るのではなく森を見ろ。
>>701
アホアンチに言ってやりたい一言ですね。
アホアンチは木も森も見てないから。(プ
見てるのはMSかどうかだけ。(ゲラ
ゲラ厨キター
アホアンチはどのスレ行っても馬鹿にされ・・・プププ
 ∫,,,,,,,,,∧,,∧    をぉ!!>>616
⊂,,,,,,,,,つ*゚Д゚ミつ  サンクス子。

めちゃめちゃ小さいサイズでPopupMenuが実現できるです!!
幸いにも、親窓はEmEditorがハンドルを提供してくれているので
使えます。

TrackPopupMenuでループしてくれるのですね!

あとは、Menu1を選んだのかMenu2を選んだのかを
判断できればばっちりです。
検索してみるです。(気が向いたら教えてください。)
707デフォルトの名無しさん:03/05/17 22:41
Delphi、いいですね!
こんなすばらしいツールを作ったのは一体どこの人なんだろうと思ってしまいます。
>>642
>そのHPいったのです。でも、第2章で挫折しました。
>書いてあるとおりにやってるのにうまくいかないのです。
なぜそこを質問しない?
「うまくいかないから挫折しました」じゃDelphiに限らず習得するのは不可能。
 ∫,,,,,,,,,∧,,∧    >>616
⊂,,,,,,,,,つ;゚Д゚ミつ  

選択結果については親ハンドルに投げられるのか…
困ったな。受け取る方法がないや…
>>694
わけわからん。
どこが失礼なんだ ?

>>696
推定小売価格と、希望販売価格の違いってわかってる ?

>>698
最初に perl はやめとけ。
表現方法が多様な (=読みにくい) 言語は勉強に向かない。
perl で「○○やりたいんですけど」とか質問したら、回答が山ほど来て混乱するのは目に見えてるよ。
ドトネトvsDelの話題はオナニースレでやれよ
いい加減ウザイ
 ∫,,,,,,,,,∧,,∧    とりあえず次のような
⊂,,,,,,,,,つ,,゚Д゚ミつ   コードでPopupMenuだけ表示して
終了するExeができますた。
すげーいい加減だけど....
Form2はCaptionBarなしのにしてます。
これで、Pipeで呼び出せばDLL処理部分とExeでPopup処理部分がわけられるかな・・・
(もう初心者向けじゃなくて、スマンコ)

program Project2;
uses
SysUtils, Dialogs, Controls, Forms, Windows,
Unit1 in 'Unit1.pas' ,
Unit2 in 'Unit2.pas' ;
function ApiMsgBox(Text, Caption: String; Flags: Longint): Integer;
begin Result := Windows.MessageBox(0, PChar(Text), PChar(Caption), Flags); end;
begin
Form2 := TForm2.Create(nil); try
Form2.Height := 0;
Form2.Show;
DataModule1 := TDataModule1.Create(Form2); try
ApiMsgBox(BoolToStr(DataModule1.Result, True), 'テストプログラム', MB_OK);
DataModule1.PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
ApiMsgBox(BoolToStr(DataModule1.Result, True), 'テストプログラム', MB_OK);
finally DataModule1.Free; end;
finally Form2.Release; end;
end.
procedure TForm2.FormShow(Sender: TObject);
begin
ShowWindow(Application.Handle, SW_HIDE);
end;
WebBrowserのVisibleが切り替わらないのですが…
Falseを代入しても普通に表示されています。
一時的にフォームから消したいのですが、どうすればいいのでしょうか?
714 :03/05/18 00:38
>>713
「monazilla.org (w」ってとこに、TIPSがあったと思う。
715713:03/05/18 00:48
>>714
WebBrowserと名の付くリンクを見てみたのですが
特に見当たりませんでした、すいません
716714 ◆YQwpJeMWgo :03/05/18 00:55
>>715
いや、あやまらなくてもええがなぞなもし(^^;。

TOleControl(WebBrowser1).visible := false;

探してみたら、↑があった。
MLから昔、DLしたヤツの中にあった。
これでは?
717713:03/05/18 01:06
>>716
あっ、いまくいきました!ありがとうございました。
こんなやり方があったんですね。
718A:03/05/18 01:09
>>652
なんだか、いろいろごちゃごちゃと、議論が起きてるけど、気にしないほうがいいよ。

バージョンが違うと、メニューの配置がかわったりするのは、別にDelphiだけじゃなく、
どんなアプリでもあることだから、しかたない。
あんまり几帳面に、まったく同じことだけ、って思わずに、
見つからない時は、片っ端からそれっぽいのを探してみる、ぐらいにしたほうがいい(笑)

Delphiはマイナーで、販売本数では、MS製のほかの言語ソフトに比べて少ないし、
本の種類も圧倒的に少ないのは、確かに事実。
でも、プログラムを覚えるのに、そのことはそんなに大きな問題じゃないよ。
本は、最初は、いい本が1冊か2冊あれば十分。

本屋に数百冊あったって、全部読むわけでもないんだから(笑)
Delphi6を使ってるんだよね? Delphi6は無料で配られただけあって、
Delphi6を本に付属して、それを対象にした、入門用の本がたくさん発売されているよ。
マイナーだけあって、そこら中の本屋に置いてあるとは行かないけど、
今は、ネット通販を使えば、簡単にどこでも買える。
どれを買うかの推薦は、他の人にませるけど、1冊買えばしばらくはそれだけで
勉強には十分なはず。
入門書を卒業する頃には、ネットにある他のDelphi情報をなんとなく理解できる程度にはなってるよ。

マイナーな言語は、勉強しても…って思うかもしれないけど、Delphiをある程度使えるまで勉強したら
それからC++とかの難しい言語に移ることも、比較的楽だから。
Delphiは、始めは非常に簡単で、そこからゆっくりと少しずつ、深い世界に進んでいける。
しかも、高度なIDE付きで、無料で使える。勉強には最適な言語だと思う(笑)
(基礎勉強に使うのに、商用開発できないことなんて、全然問題にならないと思うし(笑))
719 :03/05/18 01:26
長ッ!(^^;。

つーか、ちょっと高度(オレにとって)な本を探すと、けっこう無いんだよなぁ。
初心者用はそこそこあるけど。
Cのヤツ読んでも、いまいちピンと来ない(藁
長文荒らしキター
>>652
当方地方都市在住だが・・・

Delphiの本、本屋に普通に置いてあるぞ?
どこに住んでるの?
地方でも「都市」といえる規模ならあるだろ。
単なる市町村レベルだとプログラミングコーナー自体めちゃくちゃ小さいのよー。
Del本はネットで情報得てからクロネコヤマトのブックサービスで買え。
カードもって無くても買えておすすめだ。
>>706
Delフサギコ さん 
TrackPopupMenuのヘルプは読みましたか?
> hwnd ポップアップ メニューを所有するウィンドウを識別します。
> このウィンドウは、 メニューから送られるすべてのメッセージを受け取りますが、
>  関数が制御を戻すまではWM_COMMANDメッセージを受け取りません。

つまり WM_COMMANDはPostされるという事です。

ですので、
var Msg: TMsg;
begin
hPopup:=CreatePopupMenu;
AppendMenu(hPopup,MF_STRING,101,'Menu1');
AppendMenu(hPopup,MF_STRING,102,'Menu2');
TrackPopupMenu(hPopup, 0 , X, Y, 0 , Handle , nil);
  if PeekMessage(Msg , Handle , 0, 0, PM_REMOVE) then
  case Msg.message of
  WM_COMMAND:
  Result:=Msg.wParam; //選択された ら 101 とか 102 とか AppendMenuで指定したIDが返る
  end;

とやれば大丈夫です。

あ! PeekMessageの 0,0 は WM_COMMAND,WM_COMMANDでもいいです。
>>617
どっちにしても、
他のツール用の解説書の範囲じゃ >>681 >>695 が出来るようにはならない。
このレベルまで含めて考えれば Delphiが一番楽。 よそ見しないでDelphi一本に絞るべし
HighColorの画像を

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
BitBlt(image2.Canvas.Handle,0,0,448,480,image1.Canvas.Handle,0,0,SRCCOPY);
Image2.Repaint;
end;

な感じで、Image2に表示させているのですが、転送された画像が
色褪せて表示されてしまいます… 何ででしょうか? 上記
プログラム以外は全く弄ってません。
>>724

> TrackPopupMenu(hPopup, 0 , X, Y, 0 , Handle , nil);
>   if PeekMessage(Msg , Handle , 0, 0, PM_REMOVE) then
>   case Msg.message of
>   WM_COMMAND:
>   Result:=Msg.wParam; //選択された ら 101 とか 102 とか AppendMenuで指定したIDが返る
>   end;
> とやれば大丈夫です。

無理…

> 関数が制御を戻すまではWM_COMMANDメッセージを受け取りません。
て書いてあるじゃない

もし同じ事がしたいなら

Result:=Integer(TrackPopupMenu(hPopup, TPM_RETURNCMD , X, Y, 0 , Handle , nil));

じゃないの?
俺はこれよく使ってたけどなぁ
728デフォルトの名無しさん:03/05/18 13:57
Delphiって本が売ってないどころか、肝心のDelphi本体を見かけないんだけど。
これじゃあ初心者も始めようがないよね。
いきなり初心者にパッケージ買わせるか?
>>728
うむ、どっちかというと中級者以上向けの製品だしな。
MXなら品揃え豊富だよ
ぉおお。ありがとです。>>724>>727
どっちも試してみます。

ちまたの、SDK的ホームページを探っていても
TrackPopupMenuは
元Windowでメッセージ受けてるだけだから
無理かと思ってました。

昨日はPopupだけ分離したExeと
その呼び出し側Exeで通信をどうやろうかと試行錯誤してました。
当初はPipeでやろうとしたんですが、なにやらややこしくて…
中村タンのShearedMemoryを使って通信してうまくやれたです。

IEやメモ帖などのテキストの上にマウスカーソルを合わせてクリックすると単語が選ばれますよね。
それをクリックせずにマウスカーソルを合わせただけで単語として取得するにはどうしたらいいでしょうか。
前から気になってたんだけどフサギコって英語大丈夫なの?
735726:03/05/18 18:47
ttp://cgi.2chan.net/up2/src/f3970.jpg

比較画像上げてみますた。双葉なので消えるの早いかもです…
誰か分かる方いませんか(ノД`) 726のとはソースは若干違うんで再掲
画像加工失敗してますが、そこら辺は気にしないでくだしぃ…

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
BitBlt(image2.Canvas.Handle,0,0,448,480,image3.Canvas.Handle,0,0,SRCAND);
BitBlt(image2.Canvas.Handle,0,0,448,480,image1.Canvas.Handle,0,0,SRCPAINT);
Image2.Repaint;
end;

// Image1が黒背景のキャラ画像、Image3が白背景のキャラ黒抜きで
// 背景画像のあるImage2に表示させてます。
moumirenakattayo
HighColorって具体的に何を指してる?
738726:03/05/18 22:50
ttp://cgi.2chan.net/up2/src/f4052.jpg
再掲しますた。こんな感じになってしまうのですが…
739726:03/05/18 23:57
他の方が見てそうな時に再うpったんですが、誰も見てくれてないようで(´・ω・`)
一週間ほど家を空けるので今日中にレスが欲しかったのでした…
書き込み多くてスマソ 帰ってくる頃に解決レスが付いてればいいな…
問題が起きる最小限のコードを提示してくれないと面倒で試せない。
断片じゃなくて。
741726:03/05/19 01:24
まだいたり… 今日の朝には出ます。

>>740
それこそ>>726>>735ぐらいのコードしか書いてません…
Delphi起動→FormにボタンとTImageを2個配置→726のコード書く
→コンパイル しかしてないのですが…(ノД`)
(初BitBlt使用のお試しプログラムなので)

あ、書くの忘れてたことが一つ。726ではImage1に背景画像、
Image2は背景の上に載せるグラフィックを、オブジェクト
インスペクタのプロパティからコンパイル前に設定してます。
>>735のその辺の情報は書き込んであるので、とりあえず
自分が弄くった範囲はこれが全てです。
742ねこま:03/05/19 02:11
やってみたけど変な結果にはならなかった
procedure TForm1.Button1Click(Sender: TObject);
var
 jpg: TJPEGImage;
begin
 Image1.Picture.LoadFromFile('G:\test_.bmp'); // 画像
 Image2.Picture.LoadFromFile('G:\test_A.bmp'); // マスク

 jpg := TJPEGImage.Create;
 jpg.LoadFromFile('G:\bg.jpg');
 PaintBox1.Canvas.Draw(0,0,jpg); // 背景
 jpg.Free;
 BitBlt(Paintbox1.Canvas.Handle,0,0,360,480,image2.Canvas.Handle,0,0,SRCAND);
 BitBlt(Paintbox1.Canvas.Handle,0,0,360,480,image1.Canvas.Handle,0,0,SRCPAINT);
end;
わたしはこれ以上時間かけてあげられない
ごめんね.おやすみ
            _____________
 ∩∧,,∧∩   /
  ゙ミ*゚Д゚*ミノ < できまった!
  ミ  ミ    \____________
  ミ ,, ミ
 ノ∪ ∪ バザーイ

>>724
hPopup := CreatePopupMenu;
AppendMenu(hPopup, MF_STRING, 101, 'Menu1');
AppendMenu(hPopup, MF_STRING, 102, 'Menu2');
Windows.GetCursorPos(MousePoint);
TrackPopupMenu(hPopup, 0, MousePoint.X, MousePoint.Y, 0, hwnd, nil);
if PeekMessage(Msg , hwnd , WM_COMMAND, WM_COMMAND, PM_REMOVE) then
case Msg.message of
WM_COMMAND:
MenuSelect:=Msg.wParam;
end;

>>727
hPopup := CreatePopupMenu;
AppendMenu(hPopup, MF_STRING, 101, 'Menu1');
AppendMenu(hPopup, MF_STRING, 102, 'Menu2');
Windows.GetCursorPos(MousePoint);
MenuSelect := TrackPopupMenu(hPopup, TPM_RETURNCMD, MousePoint.X, MousePoint.Y, 0, hwnd, nil);

どちらも動きましたよ。ありがとうです。

>>734 英語は無理Po
744726:03/05/19 08:23
>>742
うぉ、TPaintBox使うと色が変になりませんですた!( ゚д゚) ありがとうございます。
ただこれだと、画面外に出たときや何かのウィンドウが重なると、
Canvasに描画した画が消えちゃうのが難ですね… 常に自分で
書き直さないとダメっぽいですが(;´Д`)  そこら辺帰ってきたら
もうちょと弄ってみます…
Delphiで作ったソフトはやたらと
メモリを食うのですが
メモリの浪費を最小限にする方法はありませんか?
Delphiで作っているとこれは仕方のないことですか?
メールチェッカーを作っているのですが
タスクマネージャーで監視したところ
普段で8,4KBもメモリを使用してしまいます。
どうかアドバイスよろしくお願いします<(__)>
>>745
VCL禁止にしてWin32APIだけで作れ。
747デフォルトの名無しさん:03/05/19 09:55
ちょっとみなさんのご意見をばいたたきたいんです。

自分は大学生だからDelphi6pro版をアカデミック版で購入しております。
でも、それは先月のはなしで、現在Delphi7が販売されていることは知っておりました
が、BBS等で7のいいはなしを聞かなかったのでわざと旧バージョンを買ったのです。
年末に8がでるそうですが、今のうちに7を買っておいたほうが後々良いことがあるで
しょうか? 自分は6しかもってないからわかりませんが、BBSによると6と5を併用
している人がいるので、旧バージョンには旧バージョンの良さがあるのかなと思っております。

別にコレクションで高価なものを買う気はありませんが、7を買っていたら8が出てもこんな
点で便利だよというものがありましたら教えてください。
748747:03/05/19 09:56
一太郎7を買って屁たったことがあるので、バージョン7は怖いです。
749747:03/05/19 10:10
VB.NET 2003の価格が発表されました。
http://www.microsoft.com/japan/presspass/releases03/051503_VS03_t1.asp

なんと7,800円と、Delphi Personalよりも安いではありませんか!
しかも商用開発できないなどとのクソマヌケな制限もありません!
7,800円がすぐに払えない人には無料のSDKもあります!

どうしてDelphiなんか続ける理由があるのでしょうか?
今すぐVB.NETで最先端の開発環境を体験しましょう!
LonghornのGUIは.NETでこそ最良のエクスペリエンスを受けることができます!

>>747さんもこの際ですから、
滅びる運命にあるDelなんてやめてVB.NETに乗り換えましょう!
750デフォルトの名無しさん:03/05/19 10:13
ハァ?
ちゃんと FUD 対策もしないとなぁ。
7800円は、今回無料アップデートにならなかったアカデミック版の値段。
正規版は、通常パッケージ 19,800円 。
7800 円でどこまでのものが手にはいるのかは、自分で調べてみなさい
事実誤認に基づくFUDしてるとタイーホされますよ
>>747
漏れは逆で、7はパスで8待ち。
6→7はXP正式対応くらいで目玉機能がなかったけど
7→8は激変するからね。
8が気に入らなかった部分は6で作ればいいし。
754747:03/05/19 12:25
>753

XP対応だけですか・・・。では、パスですね。

どこかでDelphi2からDelphi7に至るまでのDelphi言語の変化を
解説したページありませんかね。Delphi6から列挙型で自由に整数値が
当てはめられるようになったそうで、5では使えないテクなのですね。
Del2:32Bit対応 長いString型 Variant型 その他多数
Del3:インターフェース型
Del4:Int64,overload
Del5:(わからない)
Del6:拡張命令対応ASM
Del7:(しらない)
756デフォルトの名無しさん:03/05/19 13:11
WebBrowserコンポーネントでフルスクリーン表示にするにはどうすればいいんでしょうか?
48: IEコンポーネントを使い倒すスレ (794)
http://pc2.2ch.net/test/read.cgi/tech/982930049/l50
758A:03/05/19 14:17
>>755
4にはたしか、動的配列なんてのもあった。
Del5:フレーム, IBX
言語の変化ではないな
スマソ
Del7 は Delphi.NETに向けて ワーニングを出すだけ
Del7>>>>>>>>>>>>>>>>>>>>>>>>>>>Del6
Del7って買っても意味無いのか
764デフォルトの名無しさん:03/05/19 18:18
複数のチェックボックスの中から特定個数までしかチェックできないようにするにはどうしたらいいのでしょうか?
たとえば、チェックボックスが10個あって、その中から3個しかチェックできないようにしたい。
>>764
チェックがつく度に未チェックの個数を調べ、チェック可能個数に満たなくなれば
未チェックのチェックボックスを使用不可にする。

あらかじめ参照を配列に代入しとけばやり易い。
766745:03/05/19 19:13
>>746
ありがとうございました。
やってみます!!
8.4KBってこれよりメモリ使用量少ないメーラあるの?Win9x?
D7pro以上ならライブラリが多少増えてるけどね
あとIntraWebとか
フォーム1個でコンパイルしたときのEXEサイズが減ってるとか。
どのくらい小さくなるのかを、具体的に書いてもらえば、なお良かった。
>>770
図々しいんだよ禿!
禿って言う奴が禿
禿丸
>>771-773
盛り上がっているところすまないが >>733 もお願いします
775デフォルトの名無しさん:03/05/19 23:12
こんばんは。宜しくお願いします。

ファイル名だけを取得するにはどうすればいいんでしょうか?
オープンダイアログボックスでfilenameから取得しようとすると、
フォルダも含んだフルパスになってしまいます。

どうかご教授お願い致します。
Extract系関数。
var
AoB:array of byte;
FN:string;
i,ln:integer;
begin
if opendialog1.Execute then
begin
FN := opendialog1.FileName;
LN := Length(FN);
SetLength(AoB,LN);
for i := LN -1 downto 0 do
AoB[i] := ord(FN[LN - i]);
while AoB[i] <> 92 do
inc(i);
edit1.Text := RIGHTSTR(FN,i);
end;
>775
単にExtractFileName(fullpath)でいいのでは
779775:03/05/20 00:01
解決致しました。
>778さんの仰るとおり、単にそれだけでできました。
helpにも載っていたのに、見落としていたようです。
どうもありがとうございました。
780777:03/05/20 00:07
OpenDialog を開きまくっていたら、
システムリソースがおかしくなりハングりました。
>>744
Windowsなどのマルチウィンドウシステム自体が
『隠されたウィンドウが表に出てきたときは自分で描き直す』
という仕組みなのです.
(昔はメモリが非常に少なかったのでこうでもするしかなかった)

必要なときに1から全部書き直す手段を用意するか
画面に直接描くのをやめて
別に用意したビットマップに描いてからそれを画面に転送するようにして,
描き直しの必要があるときはこのビットマップを転送します.
(イメージコンポもおおざっぱにいえば後者の方法で描画しています)

>>767
うちは鶴亀メールを使っていますが
メモリ食いのWindows XPにもかかわらず8k切っています.
メモリくらい買い足せよ貧乏人が!
delphiでdirectXって漏れみたいなど素人でも使えるようにならないのかなあ
784A:03/05/20 05:03
特定のアプリが出している音だけを録音する、ってのは、できるのだろうか…?
785seven:03/05/20 05:48
>>783
DelphiX(そりゃ、ど素人にはムリだな)
>>784
「特定のアプリ」依存
線で繋ぐなら、そこそこ汎用
>>784
785の言ってるのはVirtualAudioCableかな。おすすめ。

プログラムからプログラムへ直接読むならバッファを探して読み出すしか無いかな。
リングバッファだと内部でどう管理してるか分からないし、実質無理。
高レベルオーディオなら音源ファイルがどこか(外に無ければリソースにでも)あるだろう。

低レベルオーディオなら、フックをかける方がいいのでは
ただ、コールバックなのか、窓ハンドルに対するメッセージなのかで楽さが違うかも
788デフォルトの名無しさん:03/05/20 11:58
CheckBoxのチェックが変化したときだけ呼び出されるイベントってつくれないのでしょうか?
MouseClickとかMouseDownだとチェックがつかなくても呼び出されるし、
キーボードからチェックつけたら今度は呼び出されないし・・・。こまってます。
789A:03/05/20 12:08
>>785-787
やっぱり普通は無理っぽい…ですか
線で繋ぐ。とは?
VirtualAudioCable……なるほど、サウンドカードの振りをしてデータを送ってもらう
って感じですかね。
リソースというか、音の元は、ストリーミングでネットの向こうから流れてくるので…
このフックを実現したのが、上のソフトかな?
>>788
TControl::OnClickのヘルプ嫁
>>788
TCheckBoxのOnClickがそれ。
>>788
OnClickでイベントを拾い、比較用の変数と比較すればよろし。
OnClickはキーボード入力でも反応する。


TForm1 = class(TForm)
private
  ChkValue:Boolean;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  if ChkValue<>CheckBox1.Checked then
  begin
    {やりたい事}
    ChkValue := CheckBox1.Checked;
  end;
end;
793デフォルトの名無しさん:03/05/20 14:26
フォーカスを設定できる状態かそうでないかを判断するためにはどうすればいいでしょうか?
794デフォルトの名無しさん:03/05/20 14:47
すんげぇ、初歩的な質問かもしれませんが、
作成したアプリの中にキャンバスなり、なんなりを作って、
その中に、作成したアプリの下にある画面(デスクトップの背景とか)
を表示させることって出斬るんでしょうか。

delphi5なんですけども、どなたかわかる方居ましたらおながいします。
795794:03/05/20 14:54
>>793

漏れも初心者なので間違ってるかもしれませんが、

フォ−カスが受けられるか受けられないかは、
ActiveControlプロパティにフォ−カスを受けられるコンポ−ネントの参照が
入っているらしいので、そのへんを引っ張ってくれば判断できるんじゃないでせうか?。

全然違ってたらすまそです。
>>794
初歩的というより結構難しいと思いますよ。
リージョンを定義してとか・・・
Windows2000以後なら半透明 WS_EX_LAYERED を使うとか

それに、longhornではアプリ毎に別の描画面を持つようですしね。
797794:03/05/20 15:05
>>796

レス有難うございます。
ちょっとググってみたら結構難しそうだなあ、と。
VBなんかだとわりと出来るっぽいんですが。

アプリの中に枠を作ってその中に背景を表示。
イメ−ジとしては拡大鏡の拡大しない感じのを作ろうと思ったんですが。
delphiじゃ難しいんスかね。

当方、今までJAVA教徒だったんですが、結構delphiも面白いじゃん。
と思ってる今日この頃です。(でもまだまだ未熟ですが)
>>797
いやだから、そのアプリだけ D6パーソナルで作ればいいじゃない。
799794:03/05/20 15:19
>>798

そういうテもありましたね。うっかりしてますた。
ちょっとD6で調べてみます。てか、D7でもいいのかな?。
D5でも

SetWindowLong(Handle, GWL_EXSTYLE , GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);

でダメかな?
801794:03/05/20 17:22
D5とD6って互換性あんま。無いぽですね。。。

>>800

アドバイス有難うございます。
ちょっと今すぐは試せないんで、時間のあるときに試してみたいと思い鱒。
D3で試したコード

function SetLayeredWindowAttributes(Hwnd: THandle; crKey: COLORREF
; bAlpha: Byte; dwFlags: DWORD): Boolean; stdcall;
external user32 name 'SetLayeredWindowAttributes';

procedure TForm1.FormCreate(Sender: TObject);
const
  WS_EX_LAYERED = $80000;
  LWA_COLORKEY = $00000001;
  LWA_ALPHA = $00000002;
begin
 SetWindowLong(Handle, GWL_EXSTYLE , GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
 SetLayeredWindowAttributes(Handle,ColorToRGB(Color),0,LWA_COLORKEY);

end;
あの、言語の難易度として
C++>C>Java>VB
というのはわかるんですが、Delphiはどのくらいなんですか。
VB以上Java未満?
>>801
> D5とD6って互換性あんま。無いぽですね。。。
はぁ?
>>803
C++>Java=Delphi>C>VB
806デフォルトの名無しさん:03/05/20 17:52
>>803

漏れの主観でもそんな感じ。

>>804
D5で作ったものがD6で動かないことはある。
上位互換と下位互換で違ってくるんだろうけど。
807seven:03/05/20 19:31
この[スレ|板]には、Delphiの神が、何故かウジャウジャいるので、ちょっと混み入った案件では、VBよりもDelphiが簡単なのかも。
つーか、すみません、VBのほうが簡単な案件が、今ちょっと思いつかないです。
サーバーソケット使ったプログラムで、Openメソッドを呼び出すと
必ず終了時にEAccess〜クラスの例外が発生してしまいます。
でもこれ書いとかないと使えないのですが、どうすれば回避できますか?
お願いします。
RichEditやMemoコントロールのスクロールバーをHotTrack形式に出来ないんですか?
上のコンポーネントに限らず他のも含めて。
TScrollBarを使ったらどうですか?
811デフォルトの名無しさん:03/05/20 21:14
TFormにOnMinimizeやOnMaximizeが無いのは何故ですか?
デルファイの限界が垣間見えました。
>>811
Delphiの限界じゃなくて君の限界だろw
>>811
残念ながらそこが君の限界です。
悪いこと言わないので、VBに専念したほうがよいでしょう。

ちなみWindowsの仕組みさえ知っていれば、
WM_SIZEメッセージのwParamを調べれば、
いつ最大化、最小化したかすぐに知ることが出来ますけどね。
814 :03/05/21 00:27
>>813
そんなイヤミ書いたら811がかわいそう(藁
811は質問してるんじゃなくてDelをけなそうとしてるいつもの椰子だと思うけどな

とりあえず
procedure TForm1.WMSize(var Message: TWMSize);
begin
 case Message.SizeType of
  SIZENORMAL : DoSometing;
  SIZEICONIC : DoNothing;
  SIZEFULLSCREEN: DoAnything;
 end;
end;

Windowsアプリに関してはDelはほとんどオールマイティなんだから
アラを探しても無駄だよ
APIを使うのにいちいち自分で道を作らなくちゃいけない某人気開発環境とは違って
初めから道ができてて、しかもきれいに舗装してあるからね
816815:03/05/21 00:50
もし本当の質問者だったら
インターフェース部の書き方は自分で調べてみてほしい
procedure WMSize(var Message: TWMSize);
ではだめだよ
817 :03/05/21 00:54
>>816
大丈夫。つまんねーネタだって(藁
すません。
もう初心者向けではないのですが
APIでPopupMenuを出した場合
PopupMenuのフォントを変更するには
どうしたらいいのでしょうか?

ポインタでもいいので、教えてください。
819デフォルトの名無しさん:03/05/21 06:40
初心者向けではないと自覚してのカキコはだめです。
超初心者向けだよねと思い込んでカキコするのは可です。

話し変わるけど、Del6pro持っているのに、Del7per買っちゃった。
コンパイラがDCC32からDelphi32に変わっているのにビックルぐぃ。
>>818 APIでなければ可能なのか?
WM_SETFONTを送ろうにもポップアップの窓ハンドルは取得出来ないし
SYSTEM_FONTを変更すれば全部変更されてしまう
>>818
オーナードローする。WM_DRAWITEMとか参照。
かなりややこしい上、特定アプリでだけメニューのフォント変えられても
ユーザー混乱させるだけなので、多分やらない方がいいような気も。

なお、デフォルト項目を太字にしたいというのであれば別のフラグがあります。
822820:03/05/21 08:35
ああ、ゴメン。オーナDrawなら可能だね。
でも、WM_DRAWITEMメッセージは親窓に送られる。
だから、隠れた小窓を作ってそれを受け取らないといけない。
クラスを作って、メッセージディスパッチで処理させて
AllocateHWndでメソッドを登録してそれをTrackPopupMenuに渡したら? 

823821:03/05/21 08:46
TrackPopupMenuは、親ハンドルがアクティブで無い時の挙動が怪しかったり…。
というかAllocateHWndが使える→VCL使ってる→TPopupMenu使えばいいじゃん、になるので
素直に親ウィンドウのウィンドウ関数に書き足せばいいと思う。
824820:03/05/21 09:03
>>823
フサギコは小さなDLLを作りたいんだそうだ。
つまり親窓はアプリ側のハンドル。
確かにClasses を追加すれば多少大きくなるけど uses Menuするよりはマシだし
でも、AllocateHWndして SetParent で親子関係作ったんじゃうまくゆかないかな?
825821:03/05/21 09:15
>>824
>AllocateHWndして SetParent
やったことないなあ…。WS_POPUP付けてSetParentしてSetForegroundWindowして…ってやればできそうな気も。
ただ、そういう条件なら、スレッド限定のフックを試みるという手もある。
826820:03/05/21 09:23
そうだな。親窓のハンドル持ってるんだから SetWindowLongでフックしてしまうのも手か
827デフォルトの名無しさん:03/05/21 10:50
Del6にIndy9をインストしたんだけど
[致命的エラー] Project1.dpr(5): ユニット IdGlobal は異なるバージョン System.RTLVersion によりコンパイルされています
....とエラーが出て止まるんだけど対処方無いですか?
>>827
US のサイトにある、日本語用の D6 Update3 を宛てる。
かな?
829Dale L. Fuller:03/05/21 12:21
日本側で公開されないね
オオノタンにメールでもしてみよう。
ここは超初心者向けスレッドだということが忘れさられつつある気が….
(…という私の書き込みも難しすぎたかなぁ,と反省.)

#超初心者向けではないスレッドが壊滅させられているので
 ここが避難所になっている状況も考えなければいけませんが….
831デフォルトの名無しさん:03/05/21 14:56
レベル的には「オブジェクトインスペクタ」って何ですか?。
位が丁度いいのか?。俺、丁度そんなレベルだし。。。
832デフォルトの名無しさん:03/05/21 14:59
クリックされてもフォーカスを受け取らないというか
アクティブにならないフォームを作りたいのですが
どうやったらよいのでしょうか?
ヒントだけでもください。
833ねこま:03/05/21 15:08
直前にフォーカスを持っていたウインドウにパスしたらどうでしょう

もしかしてエクスプローラのドラッグ開始みたいな事がしたいの?
だったら違うけど
直前のウインドウが無くなっていたら?
835デフォルトの名無しさん:03/05/21 15:16
editで文字を右寄せする方法がわからないです。
ttp://www.borland.co.jp/qanda/delphi/d0000090.html
Editのままする方法もあるけど、これでいいんじゃないの? 元は同じコントロールだし
>>835
>>835著作権法上問題かも知れんけどな〜
↓行数が多すぎだったのでかなり削ったけど参考になるとは思うよ
published
 property Alignment: TAlignment read FAlignment write SetAlignment default taRightJustify;
end;

constructor TMyEdit.Create(AOwner: TComponent);
begin
 inherited;
 FAlignment:=taRightJustify;
end;
procedure TMyEdit.CreateParams(var Params: TCreateParams);
begin
 inherited CreateParams(Params);
 Params.Style:=Params.Style or ES_MULTILINE;
 case FAlignment of
  taLeftJustify : Params.Style:=Params.Style or ES_LEFT;
  taCenter   : Params.Style:=Params.Style or ES_CENTER;
  taRightJustify: Params.Style:=Params.Style or ES_RIGHT;
 end;
end;
procedure TMyEdit.SetAlignment(const Value: TAlignment);
begin
 if FAlignment <> Value then
 begin
  FAlignment := Value;
  RecreateWnd;
 end;
end;
838832:03/05/21 15:38
>>833
どちらかというとWindowsにアクセサリでついてくる
スクリーンキーボードみたいなことがしたいです。

>直前にフォーカスを持っていたウインドウにパスしたらどうでしょう
これだとタイトルバーが一瞬青くなってまた灰色に戻るのですが
できれば全くフォーカスを移さないでやりたいです。
839デフォルトの名無しさん:03/05/21 15:58
Delphiみたいなマイナー言語やっても仕事は無いから
趣味以外では使えんぞ。エロゲ会社行くなら別だが。
840デフォルトの名無しさん:03/05/21 16:01
ここは学生とか引きこもり位しかいないから
情報を良く見極めたほうがいいぞ。
無駄な努力は出来るだけしないほうがいいに決まってる。
いちおう書いとくが、ES_RIGHT は一行 Edit コントロールに対しては Win95/NT4 では
サポートされていません。Win98 / NT2000 以降。
もう気にしなくても良いプラットフォームだけどね。
839=840
頑張って生きてね。
843835:03/05/21 16:24
>>836-837
ありがとうございます。なんとかできそうです。
もうひとつお聞きしたいのですが、editに数値以外を入力させない方法でいいのがありませんか?
今は、edit.textをint型にキャストして、エラーが起きたら再入力させる。みたいなことをやっているのですが、これだとイマイチって感じがします。
>>831
まさにそういうスレだと思います.たとえばオブジェクトインスペクタだと…

オブジェクトインスペクタというのはコンポーネントの表示を書きかえたり,ユーザーがコンポーネントに対してクリックとかの操作をしたときの処理を書いたりするときに使う.
Delphiを起動するとのっぺらぼう(死語か?)のフォームとその左にオブジェクトインスペクタが出てくるよ.
オブジェクトインスペクタの一番上のドロップダウンリストには Form1: TForm1 と表示されていると思うけど,これはForm1という名前で,TForm1という種類のコンポーネントの設定を表示していますよ,ということなんだ.

設定にはプロパティとイベントの2種類があって,表示内容などの設定がプロパティ,ボタンを押したときなどの動作がイベント.
たとえばフォームの見出しを書き換えたい場合はCaptionというプロパティで見出しの表示内容が決まるのでここを書き換える.
Delphiを起動したとき,オブジェクトインスペクタにはプロパティの一覧が表示されているのでCaptionと書いてあるところをさがしてみよう.
この欄の右側の文字列が見出しの内容をあらわしている.ここを書き換えるとフォームの見出しも変わるよ.

…って,こんな説明で大丈夫かなぁ.
>>844みたいに、ネタとか釣りとか言わないで優しく答えてくれる人ばかり
だったら楽しいだろうなあと思いつつ、何も調べない教えて君の増加を懸念したり。

仕事レベルとか趣味レベルとか、んなこたーどうでもいいのにさ。
ただDelphi習いに来てるだけ・゚・(ノД`)・゚・。
あほか(ゲラ
↓ ↑
 →
848デフォルトの名無しさん:03/05/21 17:41
さいきんプログラムはじめました。
で、Label1.Captionの中で改行させたいんですけど、できないようなんです。
デルファイの限界が垣間見えました。
849831:03/05/21 17:51
>>844
すげぇ、わかりやすいっす。

>>848

改行させたかったら、CRLF入れれ。#13#10だっけ。
>>848
その話題は以前やった
結論=できる
以上
851限界厨は ◆adhRKFl5jU :03/05/21 18:07
だよね
>>848
つまらないからもう来るなよ。
853デフォルトの名無しさん:03/05/21 19:02
>>843
OnKeyDownイベントの中で、
if not (Key in ['0'..'9']) then Key := #0;
とかではダメですか?
バックスペースキーは許可した方がいいかもしれません。
854835:03/05/21 19:09
>>853
同時にバックスペースも許可するにはどうしたらいいでしょうか?
855831:03/05/21 19:19
すいません、質問なんですが、

ListBoxでスクロ−ルバ−が表示されてる時に、そのスクロ−ルバ−が
動いたことを読み取る方法はあるのでしょうか?。

スクロ−ルバ−が動いた時にイベントを発生させようと思ったのですが。
どなたかわかる方が居ましたら、宜しくお願いします。
856853:03/05/21 19:19
思い出せなかったので、調べてみたら、#8のようでした。あと、ハイフンも必要だという場合は#45です。
あと、OnKeyDownではなくOnKeyPressに書いてください。ごめんなさい。
857831:03/05/21 19:33
Delphiの限界が垣間見えました。
858デフォルトの名無しさん:03/05/21 19:36
Delphiなんか止めとけって。
金にならない物を時間かけてやって将来どうするんだ?
まだVBのほうが金になるぞ。
俺のお勧めはC,C++ Javaこの辺りがいいと思うぞ。
特にJavaは簡単だからDelphiやるならJavaやっとけ。
あとはLinux使えるようになれ。
*BSDは金にならんから辞めとけ。
就職、転職、派遣何でも役に立つぞ。
派遣でも時給4000円程度になるから
結構いい金になる。
Delphiだといくら出来ても企業じゃハァ?で終わりだぞ。
>>849
ありがとう。なんとか限界を超えることができました。
860831:03/05/21 19:40
>>858

洩れ、企業でdelphiなんですが。。。それもバ−ジョン5限定です。
2カ月前までJAVAやってたんすけど、こういう人も居るんでdelphiでもいいんじゃないですかね。

>>859

良かったね。洩れも限界超えたいっす。
861デフォルトの名無しさん:03/05/21 19:42
あと、.NETはまだ将来が不透明だから手を出さんほうがいい。
簡単な物はVB、serversideはJavaとスクリプト言語
合間にC,C++を勉強しておけ。
これが一番金になる。
862デフォルトの名無しさん:03/05/21 19:46
>>860
珍しい企業だな。でも将来どうする?
潰しが利かんぞ。
あと、全角で英文字を書くな。
SEの基本だからな。
863デフォルトの名無しさん:03/05/21 19:48
こんなこと書かんでも良かったかな。
ライバルが増えるだけかもな。
お前らは大人しくDelphiやっとけ。
Delphi最高!!
>>831
大体2通り方法があって、一つは
procedure XX.XXX(var message: TMessage);
begin
 if message.msg = WM_VSCROLL then ... //縦スクロールのとき。横ならWM_HSCROLL
 ListBox.WndProc(message);
end;
見たいなメソッドを用意して、ListBox.WindowProc := X.XXXとしてやる(XはXXのインスタンス)
あとはスクロールイベントつきのListBoxコンポーネントを作る奴で
TMyListBox = class(TListBox)
procedure WMVScroll(var message: TWMVScroll); message WM_VSCROLL;
end;
procedure TMyListBox.WMVScroll;
begin
...
inherited;
end;
という感じ(残りの部分はウィザードが吐いてくれる)
これはIDEでイベントを使えるようにしたもの
TMyListBox = class(TListBox)
private
 FOnVScroll: TNotifyEvent;
 procedure WMVScroll(var message: TWMVScroll); message WM_VSCROLL;
end;
procedure TMyListBox.WMVScroll;
begin
 if Assigned(FOnVScroll) then FOnVScroll(Self);
 inherited;
end;
久しぶりにDelのコード書いた。

866の失敗。ごめん。
TMyListBox = class(TListBox)
private
 FOnVScroll: TNotifyEvent;
 procedure WMVScroll(var message: TWMVScroll); message WM_VSCROLL;
published
 property OnVScroll: TNotifyEvent read FOnVScroll write FOnVScroll;
end;
procedure TMyListBox.WMVScroll;
begin
 if Assigned(FOnVScroll) then FOnVScroll(Self);
 inherited;
end;
失敗してしまうとは情けない。
しんでしまうとはふがいない
飲んでしまうとはもったいない。
         アリガトウ アリガトウ  
 ∫,,,,,,,,,∧,,∧   Pluginな仕様の脳内保管まで
⊂,,,,,,,,,つ,,゚Д゚ミつ  してくれたアラガトウ>>823、他みなさん

"TPopupMenuだったらフォント変更は簡単なんだ"
と勝手に思ってますた。
そうか、OSでMenuのフォントは管理されてるんでしたか。

メニューを表示させたときに
[ >  ]挿入
[ '  ]挿入
[ // ]挿入
として、文字幅がそろわない
のが気になったんで等幅フォントにしたいなと。

スマソ、今日は疲れきってるので
スレを全部追うのもつらいす。
872いつも思うのだが:03/05/22 01:21
>スマソ、今日は疲れきってるので
みたいな「誰も聞いてないようなこと」を読ませる人って、
基本的に構って欲しいんだろうなぁ…って思う。
掲示板に「風邪をひいちゃって」とか書く人と同じ。
知らんて。
聞かれたら書けよ、って思う。
そんなことにいちいち突っ込む君も(ry
874872 ◆ErG3fI.u3U :03/05/22 02:00
>>873
うむ。そーツッコミ来るとは思ったけど、素直な感想。
許したもれ...
レスってくれた内容を試してからレスしたいんだけど
今日、無理ってことを言いたかったので。
ネタは質問スレではふらないですよ。
>>872
お前は何故コテハンしてる時点で構って君だと見抜けない?
877876:03/05/22 04:19
名無しで通すオレってシニカル
878デフォルトの名無しさん:03/05/22 09:36
パソコンの処理が重いときにプログラムの処理が実行されると、
上に書いた行から一つ一つ実行されてるのが丸見えになってしまいます。
(たとえばボタンを押して、フォームのサイズが変わるものだと、まずHeightが変更されてから、Widthが変更されてるという順番が肉眼で分かったりする)
これを、一気にやる方法はないんでしょうか?
変だねえ・・・処理が重い時には普通 WM_PAINTは溜められて一挙に変更される筈だが?
SetBoundsで縦横同時に変更できるYO!
う〜ん(--;)、一挙に変更されてるのに肉眼で見えてしまう私の動体視力が特異なだけでしょうかね?

>SetBounds
サイズ変更に限った話ではなかったけど、これは便利そうですね。いいこと知りました。
どうも。
ほとんどのコンポーネントにはBeginUpdateみたいな機能もあるけど、
出来ない奴はウィンドウハンドルにWM_REDRAWFLAGメッセージ送って再描画をさせないようにする方法もある。
883デフォルトの名無しさん:03/05/22 12:22
プロジェクト オプションのコンパイラのオススメの設定を教えてください
884831:03/05/22 13:17
>>864

ありがとうございます。ちょっと試してみます。
885毛の生えたフサギコんだ中年戦士:03/05/22 13:28
Del7を買ったらエディタがおもしろい。それと誰か
Del.NETの解説ページ作りませんか。
自分自身のプログラムが非アクティブ状態にある時、
タイマーイベントでアクティブにしたいんですが、どうすればいいんですか?
887デフォルトの名無しさん:03/05/22 16:10
const
IniFile = TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));

こんなふうにやりたいのですが、定数式が必要らしいです。
複雑になりそうですか?
>>886
FormのOnDeactivateでタイマーを動かして
TimerのOnTimerでApplication.BringToFrontすればいいかも
>>887
var IniFile :TIniFile;
として

initialization
IniFile = TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
finalization
IniFile.Free;IniFile:=nil;
end.
とするしかないかもね
Delphi勉強開始には、どれがいいですか?
Personal
Studio Professional
Studio Enterprise
エンタープライズ高い…
Enterpriseって言った所で買わないだろ?
>>891
ん〜、今年のボーナス次第、です
会社で買ってくれと言っても、
Delphi開発できる人いないし
勉強開始なら D6Personal だろ無料だしね
少し突っ込んで勉強したいなら Studio Professional がぜひ欲しい所だね。
実はStudio Architect Trialっていうバージョンもある
>>893
無料!?
とりあえずボーランドサイトに逝ってきます!!

>>894
名前から察するに、
エンタープライズより格上デツカ?
つ〜ことはさらにお値段の方も…
((((((;゚Д゚))))))ガクガクプルプル
Integer型であり、またString型でもあるデータを保持するときにIntegerで保持してるのとStringで保持してるのではどちらが有利なんですか?
有利というのは?
898デフォルトの名無しさん:03/05/22 17:20
>>895
気にするな。
Pro版で十分過ぎるコンポーネント。
899デフォルトの名無しさん:03/05/22 17:21
TQueryでRDBにUNICODE文字列を格納したいです。
AsStringで格納できますか?
出来れば、数行サンプルコードが欲しいでつ。
900899:03/05/22 17:23
ついでに、UNICODEとWideStringの関係も良く分かりません。
今までイコールだと思ってました。
あれ、日本のサイトではArchitect紹介されてない?
USに日本語の対鍵盤あるのに
902896:03/05/22 17:32
忘れてください。
903896:03/05/22 17:41
型によって負担が大きいのとそうでのないのがあるのかなと思いまして。StringでいいのにWideStringを使ってみたり。
904896:03/05/22 18:02
> Integer型であり、またString型でもあるデータを保持するときに

プログラムが大規模になるとstringではサイズがでかすぎる、
intにするべきである、という場面は確かに存在します。
そういう時は「crc32.c」でgoogleしてみましよう。
>>901
日本のサイトでは、
>>890
の3種類だけでした
見るところ間違った?だけかもしれませんがNE(;^_^ A
>>890
クライアントサイドのDBアプリだとPro板
サーバーサイドだとEnt版
でないとライセンス違反になっちゃうよ
Personalやらは、DBをつかうコンポ無し。注意されたし
907890:03/05/22 19:07
>>906
了解シマスタ!!
って、まだソコまでのレヴェルでわ…
Delphiなんて趣味でしか使(ry
>>908
しっ!
それを言っちゃぁ(ry
910デフォルトの名無しさん:03/05/22 20:08
質問です。

NetWare3.12(だったと思う)サーバー上の上のOracle6.3に
アクセスするアプリをDel5Proで組みたいのですが、何が
必要になるのでしょうか?
今までDB系は扱ったことがなくてまず何をそれえればいい
のかもわからん状態でして。

よろしくお願いします。
>>904
>プログラムが大規模になるとstringではサイズがでかすぎる、intにするべきである、という場面は確かに存在します。
CRCのxor用のテーブルのことでしょうか・・・・・・
それはサイズというより計算速度の問題で数値型が求められてるのだと思いますが。
var
 i: Integer;
begin
 i := 1;
 while i <> 0 do
end.
でループさせているのですが
CPU使用率が100%になってしまいます。
あ、私はメールチェッカーを作っています。
タスクトレイに入れる前に
まず終了しないためのループでつまずいてしまいました…
普通はどのようにループというのをやるのですか?
913デフォルトの名無しさん:03/05/22 21:10
TListViewをIconスタイルで使っていますが、
プログラムからフォーカスを
ListView1.ItemFocused := item;
ListView1.Selected := item;
として移動してもListViewの画面外に指定されたアイテムがあるままなのですが、
どうすればListViewの画面内にプログラムから指定したアイテムが表示される所まで
スクロールできますか?
>>912
GetMessageやWaitForXXXXで、何か起きるまで待つ。

while 終了条件 do
begin
 何か起きるまで待つ
 何が起きたかに依って色々する
end
>>912
[小さいタスクトレイ常駐アプリケーションを作りたい!!]  は試してみたの?
procedure TTaskTrayApp.Run; がその部分で

repeat
  if not ProcessMessage(msg) then WaitMessage;
until Terminated;

今度は、
TTaskTrayApp.ProcessMessag を見て。
  WM_QUIT が来たら Terminated:=Trueにして終了してるね?
916912:03/05/22 21:41
>>914
WaitForがばっちりですありがとうございます。
>>915
試してみましたが、
勉強のために作っていますので、
ShellAPIを使って自分で書こうと思っています。
ありがとうございます<(__)>
Delphi IDEのバグにやられちまったよ
3時間の労働が無駄になった
918912:03/05/22 22:17
小さいタスクトレイ常駐アプリケーションを作りたい!!
はすごいメモリ消費しますね。
普通にアイコンはいるようにして作って3K程も
消費してます。
これならふつうにVCLのっけて作ったのと変わらないや…
メモリの掃除屋さんとか
全然消費してないけど
どうやってアイコンをタスクトレイに入れてるんだろう…
どなたかご存じないですか?
Windows XPの最小必要メモリが64MBだから3Kは許容範囲ではないでしょうか
アイコン画像が3k程あるとか言わないでね.。
Mには単位を付けてKには付けない。か。Delphiユーザもレベルが下がったものだ・・・。
>>921
思いっきりレベルの低いツッコミですね。
>>922
レベルの低い人には添う見えるんでしょうね。
>>923
添うなんですか。
>>924
添うなんですよ、川崎さん。
>>912
3K?3M(バイト)では?
ほとんど何もしないexeからでも、USER32.dllのウィンドウ作成とかメッセージ処理系のAPIを呼ぶと、
それだけで2Mぐらい消費しない?(Win2000)
レベルの低い突っ込みですね
928毛の生えたフサギコ:03/05/23 12:11
さて、ゴールが見えてきました。

このスレッドはPart2はありません。

スレッドを使い切ったら相談室へどうぞ。
>>918 そのた

今時主記憶 1G byte も当たり前。って時代なので考え方も変えていかなければならないのだけど。
仮想記憶が前提の Windows メモリマネージャーでの話。
メモリ割り当ては他の Win32 API に比べても処理速度が遅いため、できれば呼ばないほうが
アプリ全体の速度が上がる。だからといってメモリを消費しないわけには行かないから、多くの
アプリケーション(実際は処理系付属のランタイム)がある程度の大きさのメモリを起動時に確保し、
それをライブラリ内で小分け、および再利用します。
4K 以下のメモリを多量に消費するアプリケーションの場合、劇的な速度向上が見込まれます。

処理系付属のメモリマネージャーは、多くのアプリでそれなりの性能を出すように設計されているため
特殊用途には向きません。つーか特殊なことをおこなうにはメモリマネージャーをチューンナップする
必要があるわけだ。

ソースコードを持っているなら、メモリマネージャーのコードを読む。全部理解しなくても良いから
メモリの初期割当量、および割り当てメモリが足りなくなったときの再取得量を調整してごらん。
初期消費量が小さいアプリケーションを作ることができます。

ただ、それで VCL アプリを作っても、結局必要とするメモリ量は変わらないので最後には同程度の
消費量になるでしょう。その場合は非 VCL アプリを作るしかない。

930デフォルトの名無しさん:03/05/23 18:07
マイク端子から音声データを取り込みたいのですが
どういう風にすればよいでしょうか?
MultiMediaAPIについて学習しる
HeyMike(RECODING, START);

HeyMike(RECODING, STOP);
>>917
3時間作業してバックアップのひとつもとらない椰子が悪い
934激裏情報さん:03/05/23 19:23
全く関係ないファイルをドロップしてもソフトが起動してしまうんですが、
これを防ぐにはどうすればいいんでしょうか?
935A:03/05/23 19:29
>>934
さすがに、起動すら防ぐことは出来ないと思うから、
プロジェクトファイルで、一番最初に、ファイルをチェックして
もし関係ないファイルだったら、そのまま終了すればいいんじゃない?
想像以上の良スレにつき、くだスレシリーズを当分続けたいと思います
937激裏情報さん:03/05/23 20:57
>プロジェクトファイルで、一番最初に

それを前提としての質問だったのですが
beginの直後に
ParamCount/ParamStr で引数を確認して、引数があってかつ拡張子が期待と違ったらダイアログだしたら?
939デフォルトの名無しさん:03/05/23 23:00
>>930
おれの知ってる限り、やり方は3種類あって。
1.TMediaPlayerを使う。
2.MCIコマンドを使う。
3.低レベルAPIを使う。

1.はヘルプ見ろ。
2.3は、下のページや書籍を参考に。
http://www.ne.jp/asahi/nagoya/ahomaro/builder/index.html
http://www.ascii.co.jp/pb/msp/36001/36001.htm
どうも、まずはParamCount等について調べてからやってみます
941デフォルトの名無しさん:03/05/24 00:11
Bool型の変数に何も代入しなかった場合、Trueとして扱われるんですか?Falseとして扱われるんですか?
試せよ。
試した。
試された。
試す時。
Formを使用せずに小さなアプリを作っています。
windowを表示する場合の無限ループのサンプルは
たくさんあるのですが
windowを作っていない場合の
無限ループの仕方がわかりません。
簡単なものはありませんか?
サンプルとして書いて頂けると嬉しいです。
いま、Windowをウンコの形にしようと頑張ってます
メディアプレイヤーのように形が普通じゃないのを作るのは難しいですね
949 :03/05/24 01:20
>>948
がんばれ。
950デフォルトの名無しさん:03/05/24 06:58
case ○○ of
1 : △△;
2 : □□;
end;


1 : △△;
2 : □□;
この部分だけを他のcase文で使い回ししたいのですが、何か良い方法はありますか?
>>950
関数にでもしとけば?後設計見直すか。
952950:03/05/24 07:18
Imageをクリックした時の動作をTagごとに分けたいんです。
Imageは50個ぐらいでTagが1〜90ぐらいまであるので、caseの中身だけ使い回しできたら早いんですが。。
Image50個全部に↓を書いたら何千行になってしまいますよね。

case Image1.Tag of
 1 : 関数A;
 2 : 関数B;
 (以下略)
end;

この場合、caseで良いんでしょうか?
まだプログラミング始めて1週間なので、これ以外思いつきません。
>>952
関数なら関数ポインタとTagとを型キャストで相互変換するとか
メソッドならメソッド配列を作って配列引数として呼び出すとかさ
と書いた後で思ったのだが、Image.OnCickをTag毎に設定すればいいんじゃないの?
>Imageは50個ぐらいで

モグラたたきゲームか?
どっちにしろ、アプローチの仕方が悪いぞ。
956デフォルトの名無しさん:03/05/24 07:44
DelphiのUTF-8ライブラリってみなさん何使ってますか?
957950:03/05/24 08:43
>>953
全然意味がわかりません(´Д⊂

>>955
もぐらたたきじゃないんですけど、どうしてもImageを使わないといけないツールなんです。
958950:03/05/24 08:57
自己解決です。

case (Sender as TImage).Tag of
 1 : 関数A;
 2 : 関数B;
 (以下略)
end;

でできました。
ありがとうございました。
>>956
System.UTF8Decode/UTF8Encode
AnsiToUTF8 / UTF8ToAnsi
では足りない?どういった処理をしたい?
>>959
おい。先に言って下さい。

今し方UCS2<->UTF-8変換ルーチン書き終えてマターリしてたのに・・・。
すみません限界です。
メールチェッカーを作っている者ですが
アイコン上にマウスをもっていくと
エラーダイアログが大量に出て落ちてしまいます。
ソースを見て頂けませんか?
もう自分ではどこが悪いのかが分かりません…
ttp://isweb41.infoseek.co.jp/computer/ultra-k/test.txt
ここにテキスト形式であげました。
どうかよろしくお願いします<(__)>
962たぶん:03/05/24 10:19
TaskTrayWndProc 内で CheckIT 変数を参照していますが、
CheckIT変数には代入されないでしょう。

問題は、
1、コンストラクタ中でループしてる為に
  たとえば、  CheckIt:= TCheckIt.Create; としたとしても、TaskTrayWndProc メソッドが呼ばれる時には代入されてない

2、そもそも
if (Msg.LParam = LongInt(TaskBarReCreate)) then
 と Self を使えば CheckItを参照する必要はない


という事では?
>>961
>エラーダイアログが大量に出て落ちてしまいます。

エラーメッセージ読まぬものにプログラムする資格無し。
>>952
Image1にそれを書いて、
他のImageNのOnClickにImage1Clickを割り当てたらいいと思う。
またはActionList使う。
>>961
一行目の時点でミスってるからじゃないの?
>>965
ワラタ
967デフォルトの名無しさん:03/05/24 13:43
Delphi 6 RTL アップデート #3 キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
968950:03/05/24 14:15
>>964
それだと、Image2の時もImage1のTagを参照してしまうと思うんですが。
>>941
 手続きまたは関数の中で宣言する変数(ローカル変数)の場合は最初の値はどちらかはわかりません.それ以外の場合はFalseです.
type
TForm1 = class(TForm)
private
FNantoka: boolean; // フィールド変数.初期値はFalse
procedure Foo;
end;

var
Kantoka: boolean; // グローバル変数.初期値はFalse

function HoeHoe: boolean; // 関数の場合.戻り値も初期値は不定.戻り値は必ず代入しなければならない.
var
Flag: boolean; // ローカル変数.初期値は不定
begin
(略)
end;

procedure TForm1.Foo; // メソッドの場合
var
Done: boolean; // ローカル変数.初期値は不定
begin
(略)
end;

 実際には毎回同じ値が返ってくるので一見大丈夫そうですが,保証されていない以上,同じ値が返ってくることを当て込んではいけません.(コンパイラオプションによっては値が変わるようです) また,ローカル変数の初期値が不定なのはboolean型変数以外でも同じです.
970デフォルトの名無しさん:03/05/24 14:23
Readmeを見てもアップデートの仕方が良く分かりませんでした。
なぜ、今までと違う複雑な形式でアップデートさせようとしているのでしょうか?
デルファイの限界が垣間見えまし(ry
>>968
もっと頭使ってください・・・
Image1.Tagじゃなくて、Form1.Tagを使うとか
脳内保管で意味分かんないこと書いてしまった(↑2行目)
何やりたいのか見えてこない。頭使えとしか言えない
974A:03/05/24 14:30
>>968
その為の、
case (Sender as TImage).Tag of
だと思うぞ。
解決したんじゃ……?
975950:03/05/24 14:33
>>971
頭使ったんですけど、自分の力ではどうしようもないから先人の知恵をお借りしようとここへ来たわけです。

>>974
解決したんですが、後レスだったんで、そっちの方が良いのかなぁと思ったんです。
っていうか、もう上のほうで教えられてるのに、
それを調べもせず、分かろうともせずに「意味が分かりません」で終わらせているのはどういうことなんだろう。
ネタなんだろうか。
>>972「フサギコとモナーの」って何か幼稚(というよりマニアック)な感じがするんだけど、なんとかならんか
ギコ猫の相談室というスレがこの板が出来る前からあった。
その流れでフサギコやモナーが使われている。
a
aa
aaa
aaaa
aaaaa
aaaaaa
そいつは知らなかったぜ
986デフォルトの名無しさん:03/05/24 15:08
そろそろ新スレ.....

「くだらないDelphiはここに書き込め Part2」
sage
sagege
1000
992デフォルトの名無しさん:03/05/24 15:20
VB.NET最高
993に釣られてみるか。

>>993
VB厨のふりしたDel厨死ね
995デフォルトの名無しさん:03/05/24 15:23
ランタイムエラー出るんでないの?
996デフォルトの名無しさん:03/05/24 15:25
997デフォルトの名無しさん:03/05/24 15:27
( ´д)ヒソ(´д`)ヒソ(д` )
100!
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。