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

Delphi相談室(超初心者用)その11

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、お礼はDelphiの布教と初心者の
救済をお願いします。

<前スレ>
(11) http://pc2.2ch.net/test/read.cgi/tech/1074523803/

似たようなスレがありますが空気を読んでスレを選んでください。
<類似スレ>
【Delphi初心者】今から始めるDelphi Part01
http://pc2.2ch.net/test/read.cgi/tech/1062422335/
Delphi相談室(中級者以上)その12
http://pc2.2ch.net/test/read.cgi/tech/1064420818/
Delphi相談室(上級者用)その12
http://pc2.2ch.net/test/read.cgi/tech/1064766880/
【終わりの】Delphi 8 for .NET【始まり】
http://pc2.2ch.net/test/read.cgi/tech/1073688379/

雑談ぽい話はこちらに
<雑談スレ>
ミ,,゚Д゚彡フサギコのフサフサDelphi談話室その12
http://pc2.2ch.net/test/read.cgi/tech/1076095856/
0002デフォルトの名無しさんNGNG
4 名前:デフォルトの名無しさん[sage] 投稿日:04/01/19 23:57
ほとんど更新されてないけど、これも書けよ。
毎回書いてもらえない。

DelWiki
http://onigiri.s3.xrea.com:8080/delphi/


5 名前:デフォルトの名無しさん[sage] 投稿日:04/01/19 23:58
Delphiの入手とインストール
http://onigiri.s3.xrea.com:8080/delphi/index.php?%5B%5BDelphi%A4%CE%C6%FE%BC%EA%A4%C8%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB%5D%5D
0003デフォルトの名無しさんNGNG
★過去ログ 【Delphi相談室(超初心者用)】
その10 http://pc2.2ch.net/test/read.cgi/tech/1074523803/

★過去ログ 【 くだすれDelphi 】
9 http://pc2.2ch.net/test/read.cgi/tech/1071294733/
8 http://pc2.2ch.net/tech/kako/1068/10682/1068201045.html
7 http://pc2.2ch.net/tech/kako/1065/10651/1065195699.html
6 http://pc2.2ch.net/tech/kako/1063/10632/1063202727.html
5 http://pc2.2ch.net/tech/kako/1061/10610/1061090908.html
4 http://pc2.2ch.net/tech/kako/1058/10588/1058834815.html
3 http://pc2.2ch.net/tech/kako/1055/10559/1055986736.html
2 http://pc2.2ch.net/tech/kako/1053/10537/1053757982.html
1 http://pc2.2ch.net/tech/kako/1051/10518/1051882835.html

★ご注意
・質問者は捨てで良いのでなるべくトリップを付けましょう。
・煽り荒らし騙りは放置してください。悪質な場合は削除依頼へ。
0004デフォルトの名無しさんNGNG
早速質問します。
マウス左ボタンでコントロールからドラッグドロップすると、マウスカーソルが
コントロールが外れても、マウスボタンを離すまでOnMouseMoveイベントが発生
しつづけますが、他のボタンでもこのような動作をさせる為にはどうすれば
いいんですか?
0005デフォルトの名無しさんNGNG
「他のボタン」ってマウスの右/中ボタン。って意味だね?
0006デフォルトの名無しさんNGNG
うい。そうです。
0007デフォルトの名無しさんNGNG
API レベルでは MouseCapture
VCL レベルで、Drag の機能を使うのであれば BeginDrag

VCL では、デフォルトでは左マウスクリックだけが BeginDrag を呼び出す。
だから動かしたいコントロールの OnMouseDown で、右ボタンのときにも
BeginDrag を呼ぶようにすればよい。

関数シグネチュア、長いので一部省略
procedure TForm1.Label1MouseDown( ... );
begin
TControl(Sender).BeginDrag(true);
end;

マウス中ボタンは、コントロールによって別の意味がある場合が多いので
個別に対応がひつようだなぁ
0008デフォルトの名無しさんNGNG
重複ですよ。

くだすれDelphi(超初心者用)その11
http://pc2.2ch.net/test/read.cgi/tech/1076609666/
0009デフォルトの名無しさんNGNG
こちらが7分遅いな・・・というわけで終了。
0010デフォルトの名無しさんNGNG
if Self.Terminated then Exit;
0011デフォルトの名無しさんNGNG
開始
0012デフォルトの名無しさんNGNG
スレタイからするとここか?
0013デフォルトの名無しさんNGNG
Delphi6Personalをインストールしようとしたところ、
Delphiインストーラが起動してインストールボタンを
押しインストールの準備に入った途中で

「Windowsインストーラサービスにアクセスできませんした。
セーフモードでWindowsを実行している場合、または
Windowsインストーラが正しくインストールされていない
場合に発生する可能性があります。サポート担当者に
問い合わせてください。」

というダイアログが出てしまいます。

検索で引っかかったSymantecの情報によってWin2kのセーフモードにて
  ・msi.dll -> msi.old
  ・msiexec.exe -> msiexec.old
  ・msihnd.dll -> msihnd.old
としたあと、ノーマルモードで再起動し
MicrosoftからWindowsインストーラ InstMsiW.exe
をダウンロードして実行してもおなじ
「Windowsインストーラサービスにアクセスできませんした〜」
のダイアログが出てしまいます。どうすればインストール出来ますか?
0014デフォルトの名無しさんNGNG
サポート担当者に問い合わせるとインストール出来ます
という意地悪な回答は置いといて
ファイルは壊れてないよね?
OS書いてないから細かいこと言えんが
http://support.microsoft.com/default.aspx?scid=kb;ja;JP319624
http://www7.plala.or.jp/asahikawa-ing/winxp_8.html
http://support.microsoft.com/default.aspx?scid=kb;ja;315353

どうでもいいけど「できませんした」って漫画に出てくる不良っぽい
0015デフォルトの名無しさんNGNG
>>14
Win2kSP4ですんで、上のリンク先のを試してみます。

とりあえず現状はWindowsInstallerサービスを開始しようとしても
----------------------------------
Microsoft Management Console

ローカルコンピュータのWindowsInstallerサービスを開始できません。
エラー 5: アクセスが拒否されました。
----------------------------------
というダイアログが出やがります。
0016デフォルトの名無しさんNGNG
>>14
おかげさまでインストールできますた
0017デフォルトの名無しさんNGNG
おめで�d
0018ふと疑問に思った ◆TJ9qoWuqvA NGNG
procedure ????????
var
SA :TStringList ;
SB :TStringList ;
SC :TStringList ;
SD :TStringList ;
begin
SA :=TStringList.create ;
SB :=TStringList.create ;
SC :=TStringList.create ;
SD :=TStringList.create ;

こんなふうに沢山クリエイトしても問題ないですか?
0019デフォルトの名無しさんNGNG
問題ないよ。ただ使うメモリが増えるだけ。
どれだけ増えたかはタスクマネージャ見れば分かる。
0020ふと疑問に思った ◆TJ9qoWuqvA NGNG
あんがと
0021デフォルトの名無しさんNGNG
解像度を変える方法を教えてください。
下のサイトの方法ではwin98なら解像度を変えることができたのですが
win2000だと解像度が変えられません。

参考に下サイト↓
ttp://forum.nifty.com/fdelphi/samples/00804.html

実際に解像度を変えるプロジェクトを作成してUPしてみました。↓
http://gamdev.org/up/img/246.zip
0022デフォルトの名無しさんNGNG
0023デフォルトの名無しさんNGNG
C言語のsystem関数に相当する機能はありますか?
002421NGNG
別スレにて解決法を教えていただき
解像度を変更する関数部を下記の様に変更して無事解決しました。

procedure TForm1.Button1Click(Sender: TObject);
var
DevMode: TDeviceModeA;
begin
DevMode.dmSize := Sizeof(TDeviceModeA);
DevMode.dmBitsPerPel := ScrC;
DevMode.dmPelsWidth := 640;
DevMode.dmPelsHeight := 480;
DevMode.dmDisplayFrequency := 1; // 面倒なのでdefaultを採用
DevMode.dmFields := DM_PELSWIDTH or
DM_PELSHEIGHT or
DM_BITSPERPEL;
ChangeDisplaySettings(DevMode,0);
ChgFlag := True; // 変更あり

end;
0025デフォルトの名無しさんNGNG
>>23 CreateProcess
0026デフォルトの名無しさんNGNG
>>25
サンクス
しかし、引数多っ
0027デフォルトの名無しさんNGNG
>>26
ShellExecute
0028デフォルトの名無しさんNGNG
>>26
WinExec
0029デフォルトの名無しさんNGNG
Delphi7 Personal買って、後でProにアップグレードできますか?
その場合の価格は?
0030デフォルトの名無しさんNGNG
20$
0031デフォルトの名無しさんNGNG
3万円ぐらいだったかと。
003229NGNG
>>31
ありがと

すまん、もう一つ。
アップグレードの場合、紙のマニュアルって付いてくるの?
0033デフォルトの名無しさんNGNG
付いてくると思うけど、
8Proへバージョンアップした人に聞いた方がいいね。
あれ? もしかして、7Proにバージョンアップしたいの?
これはボーランドに聞いた方がいいです。

その前に、8Proって.NET以外は7と同じでは?

0034デフォルトの名無しさんNGNG
Form1.Canvas.Brush.Color := clRed;
Form1.Canvas.Ellipse(0, 0 ,150, 150);
これでForm1に色がつかないのですが間違ってるのでしょうか?
0035デフォルトの名無しさんNGNG
>>34
それだけのソースならちゃんと表示されるはずだが
(実際試して赤い○が表示されたよ)
前後で何か変なことしてない?
0036デフォルトの名無しさんNGNG
いつもEdit Controlみたいな形なのに、Clickすると右に[...]っていう
Buttonが出てくるのを作りたいですが、どれをつかえばいでしょうか

おねがします。
0037デフォルトの名無しさんNGNG
>>36
Editを親にしてSpeedBtnを右側に作成。それをフォーカスを得た時に
VisibleをTrueにすればいいんじゃない?
サンプルコンポーネントのSpinEditのソースとか参考に。
0038デフォルトの名無しさんNGNG
>>35
ありがとうございます
OnCreateのイベントでテストしたからできなかったようです
003929NGNG
>>33
D8ProはD7とは別物、.NET専用だって。D8にはWIN32用にD7が付属している。
今D6Perで勉強中なんだけど紙のマニュアルが欲しいからパッケージ版を買おう
と思ってます。
でもいきなりProは高いし、とりあえずD7Perを買って、うまくいったらProに
バージョンアップしようと思ってました。
Perは開発者ガイドが付いてこないけど、あとのマニュアルは同じだから
バージョンアップしたときに開発者ガイドだけでも付いてこないとどうかな
と思ったんですよ。
D8は当然D8のマニュアルな訳ですけど、今のところ.NETには興味がないのでD7
が欲しいんです。
でも、WIN32版の後継Delphiも予定されているみたいだから、もうちょっと待って
みるつもり。

0040デフォルトの名無しさんNGNG
>>39
ヤフオクとかでたまにみるよ
マニュアルだけ〜
004129NGNG
>>40
一応、アラートでチェックしてます(まだ、でない・・・)。
0042デフォルトの名無しさんNGNG
紙のマニュアル買う金でモニタもう一個買ったほうがよっぽどましとか逝ってみたり
0043デフォルトの名無しさんNGNG
>>38
OnPaint
0044デフォルトの名無しさんNGNG
テキストエディタからソースをカット&コピーしたらソースが

result:=false;

filename:=ChangeFileExt(application.exename,'.ini');

selfini:= TIniFile.Create(filename);

と言うように1行おきに書いているのにF8でステップ実行させると
空白行も実行したり中身がある行を飛ばしたりしてしまいます。

これを元に戻す方法を教えていただけないでしょうか。
0045デフォルトの名無しさんNGNG
最適化をオフにしとけ
004644NGNG
>>45
たぶん私へのレスだと思うのですが、
{$OPTIMIZATION OFF}として最適化をオフにしたのですが、駄目でした。
0047デフォルトの名無しさんNGNG
>>46
[プロジェクト]-[オプション]-[コンパイラ]-[最適化]のチェックボックスをクリア。
その後再構築でどうよ?
004844NGNG
>>47
たびたびありがとう。

やってみたのですが同じでした。
0049デフォルトの名無しさんNGNG
変なdcuを参照してるんじゃないのか。
ソースに@@@@@@とか書いたらちゃんとコンパイルエラーになるか?
005044NGNG
>>49
やってみました。
@@@と書いてもエラーにならないでした。お手上げです。
0051デフォルトの名無しさんNGNG
TStringGridで特定の個所だけ文字の色を変えたいのですが
どうやればできるでしょうか?
0052デフォルトの名無しさんNGNG
自分のオブジェクト名がNameプロパティと違う場合ってどういう場合が考えられますか?
プロシージャのパラメータとしてSelf.Nameを渡していたら挙動がおかしかったので
ブレイクポイントを設定してSelf.Nameを確認したらXX(名前)_1とかって入っていたのですが・・・
005352NGNG
こっち重複スレですね
本スレのほうに書き直します。
0054デフォルトの名無しさんNGNG
>>50
@@@ を書いてもエラーにならない。
ということはエディタで開いているソースがコンパイルされているわけではない。ということだ。

ディレクトリを検索して、同じ名前のソースファイルがないかどうか。
同じファイルボディを持つコンパイル済みユニットが転がっていないか。

あと、マシンの日付は正しいものになっているか。

それともひとつ... 不正に入手したライセンス。ということはないかな?

005544NGNG
>>54
おはようございます。
>ディレクトリを検索して、同じ名前のソースファイルがないかどうか。

同じファイル名のファイルは一つしか出来ないと思いますがどういう意味でしょう?

>同じファイルボディを持つコンパイル済みユニットが転がっていないか。

同じファイルボディと言うのはどういうことですか?

>あと、マシンの日付は正しいものになっているか。

はい大丈夫です。

>それともひとつ... 不正に入手したライセンス。ということはないかな?

いえ、それはありません。

重複スレとは知らなかったのでメインスレに再度書き直します。
0056デフォルトの名無しさんNGNG
>>55
たとえばさ、コンポーネントを登録すると、そのコンポーネントのあるフォルダも検索パスに登録されてるわけ
そのパスに同じ名があったりすると、(例えばunit1.pasみたいにね) どうなるか判るよね?

0057 ◆RP51Otsw62 NGNG
Delphi6パーソナル

たとえば temp.bmp とか temp.txt
を実行ファイルに埋め込んで使用する
にはどうすればいいでしょうか?
0058デフォルトの名無しさんNGNG
>>57
リソースファイルにする。
0059デフォルトの名無しさんNGNG
>>57
ttp://homepage2.nifty.com/Mr_XRAY/Halbow/Notes/N008.html
0060 ◆RP51Otsw62 NGNG
ありがと
0061デフォルトの名無しさんNGNG
Delphi 6 Personal→Update Pack 2→RTL2を入れて
RTL3を入れようと思ったら\Libに\Debugフォルダが
存在しないんですが。。。

(XPHome sp1最新うpデート済み)
0062デフォルトの名無しさんNGNG
説明書もっとよく嫁
006361NGNG
分からないです。。。
0064デフォルトの名無しさんNGNG
分からないなら分かるまでがdelphi。
家に着くまでが遠足。
オヤツは300円以内。
0065おしえて下さいNGNG
超初心者な質問で申し訳ないのですが教えて下さい。
既存のエクセルファイルを開き、内容をStringGridに移したいのですがどうやれば
良いのでしょうか?
色々検索掛けたのですが”TExcelApplication”による新規作成しか見つからなかった
ものですから・・・。
宜しくお願いします。
0066デフォルトの名無しさんNGNG
ただのCSVファイルなら stringlist.conmatext でループさせて読み込めば(・∀・)イイ!!。 他の形式だったらシラネ
006761NGNG
インスコし直して分かった事

インスコ時点でデバッガオプションでのパスは$(DELPHI)\Lib\Debugに
なってるけどやっぱり\Lib\Debugが存在しない
BorlandDelphiPersonalEditionJP.exeの中を見ても存在しない
HKLMのAEDebug キーがうpデート2パックを入れると
\progra~\略\Bin\BORdbk60.exeなんてなったり変

寝よ。。。
0068デフォルトの名無しさんNGNG

つーか、いいかげん本スレに移行しろよ・・・

http://pc2.2ch.net/test/read.cgi/tech/1076609666/

もうこのスレには書かないで↑のスレに書いて頂戴。>>69-1000
0069デフォルトの名無しさんNGNG
こっちの方が親切な人が多い
0070デフォルトの名無しさんNGNG
わざわざ覗いてくれてる位だからねぇ
0071デフォルトの名無しさんNGNG
まぁな。
0072デフォルトの名無しさんNGNG
前スレの>>1あたり、「くだすれ」という名前をやめよう、と言いだして非難されてた
奴が、粘着でこのスレを上げ続けているとしか思えないんだが。

>>71は前スレの1だろ?
0073デフォルトの名無しさんNGNG
てことはおまえは現スレの1だな。
0074デフォルトの名無しさんNGNG
どちらも粘着ではあるね
0075デフォルトの名無しさんNGNG
ちゃうぞ。
0076デフォルトの名無しさんNGNG
Delphiって何で馬鹿にされてんの?
簡単に作れてまさにRADツールって感じで好きなんだけどな。
0077デフォルトの名無しさんNGNG
>>76
会社の方針でDelphiを使わせてもらえない香具師らの妬み。
0078デフォルトの名無しさんNGNG
hozen
0079デフォルトの名無しさんNGNG
呆然
0080デフォルトの名無しさんNGNG
今日、品川区の某図書館に新しくdelphiの本が入ってるのを発見。
入門用だったので、借りませんでしたが…。
ちょっとうれしくもあり、複雑でもあり。
0081デフォルトの名無しさんNGNG
>>80
品川図書館?
らくだの第三版があってちょっと驚き
0082デフォルトの名無しさんNGNG
図書館って「こういう本を入れて欲しい」って言うと
結構よろこんで入れてくれるらしいよ。
来館者のニーズを知りたがってるからね。
008380NGNG
>>81
違います。
ちなみに品川の「バイブル」の方は私が借りてます(藁
0084デフォルトの名無しさんNGNG
Cみたいにポインタを配列のようにアクセスするにはどうすれば良いんですか?
0085デフォルトの名無しさんNGNG
Inc, ^
0086デフォルトの名無しさんNGNG
>>82
図書館は別に本屋って訳じゃないから。
司書さん達は仕事だからやってるだけであって、よろこぶもよろこばないも無いよ。
要望があれば入れる、無ければ入れないだけ。潰れる事は滅多に無いからむしろ手間が増える購入希望は鬱陶しいと思う。
0087デフォルトの名無しさんNGNG
TMemIniFileのReadSectionValuesを使って
セクション内のキーの値(だけ)をStringListにまとめて入れられるはずなのに、
キー名も一緒に入ってしまうのは仕様?
0088デフォルトの名無しさんNGNG
>>87
仕様というか、ヘルプにそう書いてある。 だいいち、キー名が無いと不便でしょうがないでしょ?
0089デフォルトの名無しさんNGNG
むかしは、けっこう図書館にリクエストしてたけどさ、進化の早いコンピューター関連の本は、
蔵書には、向かないような気がする。

ま Delphiの本は Ver2の本を昔 買ったやつもってるけど、いまだに 役に立ちそうなので
いいかもしれないな。
初心者向けの本といっても、基礎的なことが 書いてあるので ちゃんと読めば
戦力アップになるよ。
0090デフォルトの名無しさんNGNG
ちなみに ココ
http://hp.vector.co.jp/authors/VA009712/take/delphi/index.htm

バージョンは 古いけど、けっこう役に立つよ。
0091デフォルトの名無しさんNGNG

重複スレに書くなよ馬鹿

本スレ http://pc2.2ch.net/test/read.cgi/tech/1076609666/

よって ======== 終 了 =========
0092デフォルトの名無しさんNGNG
こっちの方が親切な人が多い
0093デフォルトの名無しさんNGNG
わざわざ両方 チェックして 回答してくれる人は、それだけで 親切かと思われ。
0094デフォルトの名無しさんNGNG
デジャブの悪寒。。。
0095デフォルトの名無しさんNGNG
エラーが出た行で とまってくれません。
どのようにすれば、エラーが出た行で とまるようにできるのでしょうか?
0096デフォルトの名無しさんNGNG
ソースが無いライブラリ上の例外のせいで止まったんだね?

デバッグ版ライブラリを使えるなら使えばいいし、
それが出来ないなら、
ステップ実行を1回すればそこから次の行に移れる場合もあるから、それで判断するか、
CPU窓を出して、どのライブラリ呼び出しで起きたか判断してから、ステップ実行するか
0097デフォルトの名無しさんNGNG
>>95
エラーが出たとデバッガがとまってる行はズレてることがあるから気をつけろ。
数行前から逐一止めて確認したほうがいい。間違いない。

で、肝心の止め方だが
エディタで行の左のほうをクリクリっとやってやるんだ
赤くなればOKだ
0098デフォルトの名無しさんNGNG
>>97

>エラーが出たとデバッガがとまってる行はズレてることがあるから気をつけろ。

そのズレまくりなのを なんとかしたいのです。
もちろん、ブレイクポイントをつけることなどは してますが、
頻繁にその行を 通る場合は 何度もとまるので大変です。
値によってエラーになるので、それが どの値かを調べたいのですが・・・。
0099デフォルトの名無しさんNGNG
場合による。
ソース見せろ。
0100デフォルトの名無しさんNGNG
再構築しろ
0101デフォルトの名無しさんNGNG
>>69>>92 氏ね、粘着
0102デフォルトの名無しさんNGNG
質問よろしいでしょうか。バージョン6のパーソナル使ってます。
MP3を鳴らそうとして、コンポーネント、ActiveXからWindowsMediaPlayerを追加しました。
ここで、繰り返し再生させたいのですが、WMPの設定で連続再生のボタンにチェックをいれても
1回しかならずに止まってしまいます。

どのようにすれば繰り返し再生できるのでしょうか。

なお、通常のTMediaPlayerを使用すると富士通のパソコンだと動くのですが、
vaioだと鳴らなかったりしたんで、WMPをインストールしました。
0103デフォルトの名無しさんNGNG
>>102
>質問よろしいでしょうか。バージョン6のパーソナル使ってます。
だめ。ここは重複スレ。
↓で聞きなおすように。
http://pc2.2ch.net/test/read.cgi/tech/1076609666/l50

故意に書くなよ>粘着君
=============== 終 了 ===============
0104103NGNG
すいません誤爆でした。
0105デフォルトの名無しさんNGNG
>>98
>そのズレまくりなのを なんとかしたいのです。
だからそのファイルをコンパイルしなおせ。と。
行番号情報が古いものを使い続けているだけだ。

そのファイルがライブラリのファイルなら、ファイル名を教えて。直してあげよう。
0106デフォルトの名無しさんNGNG
これ完全なFAQだな。
0107デフォルトの名無しさんNGNG
delphi8のWin32版がでるというのは本当ですか?
0108デフォルトの名無しさんNGNG
>>107
デマ
0109デフォルトの名無しさんNGNG
>>107
US Newsgroup その他での話によると、夏あたりまでに D7 のアップデートの話もあって、Delphi8/W32 との関係がまだよくわからない。

なお Delphi8 IDE そのものは VCL/W32。
IDE 上で動くアドインを開発するための、Delphi8 相当の W32/VCL のライブラリとコンパイラキットが
すでに公開されている。

0110デフォルトの名無しさんNGNG
>>102
俺は ACMを使ってWavデータを復元して低レベルWavI/Oを使って再生してる
ACMのヘッダーは msacm.pas  で検索すれば見つかる。

もっと手軽が希望なら
http://www.sams.co.jp/kei/mp3plyr/manual/manual.htm

0111デフォルトの名無しさんNGNG
hozen
0112デフォルトの名無しさんNGNG
死ねよ粘着
0113デフォルトの名無しさんNGNG
ここは実質12ってことで

FA?
0114デフォルトの名無しさんNGNG
次スレあげ

前スレ
くだすれDelphi(超初心者用)その11
http://pc2.2ch.net/test/read.cgi/tech/1076609666/
0115デフォルトの名無しさんNGNG
Winソケットを使ったプログラムを組みたいんですけど、どこかによいソースとかありませんか?
0116デフォルトの名無しさんNGNG
ソースを見たら<プログラムを組>むことにはならんと思ふ
0117デフォルトの名無しさんNGNG
>>115
「Winsockを使ってみようぜ」
このサイト見てみれ
多分あんたが求めてるものじゃあない。
0118デフォルトの名無しさんNGNG
こっちのスレを再利用でいいのかな?

WindowsのシステムフォルダってDelphiではどのように書けばよいのでしょうか?
Win95ではWindowsですし、Win2000ではWINNTですし・・・
0119デフォルトの名無しさんNGNG
GetEnvironmentVariable
0120デフォルトの名無しさんNGNG
GetWindowsDirectory, GetSystemDirectory
0121デフォルトの名無しさんNGNG
>>120
ありがとうございました。
0122デフォルトの名無しさんNGNG
http://ww4.tiki.ne.jp/~yonyon/programing/delphi/tips/tips-file.htm#01
0123デフォルトの名無しさんNGNG
自作のプログラムを起動させていると、丸1日ぐらいすると突然、キーボードから
キーが入力で着なくなったり(NumLockを押してもNumLockのLEDが点滅するのみ)、
マシンを再起動しようとすると再起動の途中のWindowsをシャットダウンしています
の画面でマシンが固まったりしてしまいます。

stringlistやsendinputを多用したソフトなのですが、このような症状の回避策に
あるいはチェックするべきところに心当たりはないでしょうか?
Stringlistのfreeはtry.finallyで必ずやっています。
OSはXP,D6Proで書いてます。
漠然としていてレスしにくいと思うのですがどうかお願いします。
0124デフォルトの名無しさんNGNG
>>123
まず、メモリの使用量がどんどん増えていないか確認してみては?
0125デフォルトの名無しさんNGNG
>>123
とりあえずMemCheckを使ってみれば?
ttp://www.yks.ne.jp/~hori/MemCheck.html
0126デフォルトの名無しさんNGNG
ハンドルなどのシステムリソースを食らい続けたときの症状っぽい
0127123NGNG
>>125
使って見てみます。

>>126
THandle型はたぶん使っていないのですが、どういう意味でしょうか?
0128デフォルトの名無しさんNGNG
>>127
おまいさんが直接使ってなくてもVCL内部ではたくさん使われている。
0129デフォルトの名無しさんNGNG
文字列のInsert関数みたいに、動的配列の真ん中に要素を挿入できる関数はありませんか?
0130123NGNG
>>128
何度もすみません。
ということはどの辺をチェックすれば良いでしょうか???
0131デフォルトの名無しさんNGNG
>>130
動的に生成していて、破棄していないものを調べる。
例えば、CreateしてFreeしてないものがないかとか。

使ったことないけど>>125ので検出できるんじゃない?
0132デフォルトの名無しさんNGNG
しらねーよ
ソース出せないなら自分でやれよ
0133デフォルトの名無しさんNGNG
>>129
http://forum.nifty.com/fdelphi/samples/01393.html
ココを参考にして自作する
あるいは自殺する

動的配列って何の?
0134デフォルトの名無しさんNGNG
>>130
だから、タスクマネージャ出して、そのリソースとかメモリとかが増えてないか調べてみろよ
更新速度を遅くしとけよ。
0135デフォルトの名無しさんNGNG
>>130
http://www.automatedqa.com/products/memproof.asp
ここのMemProofでもチェック出来るよ

でも、このソフトでチェックすると、何かわけわからんエラーも表示される
というか、Form作成→コンパイル→出来たバイナリチェック→エラー検出となる。
そして、しばらく作りこんでバイナリの容量が大きくなると消える(その代わり更に変なエラーがでてきたするw)

リークのチェックぐらいには使えるのでおためしあれ
0136デフォルトの名無しさんNGNG
つーか、何でもリークのせいにするなよ
0137デフォルトの名無しさんNGNG
まずはリークを疑えという話なんで、他にアドバイスがあればしてあげれば?
0138デフォルトの名無しさんNGNG
1、普段からアプリを作ったらタスクマネージャでメモリ・リソースが使ってる間に増えてないか確認するのをクセにする

2、デバッグ中、範囲チェックはさせる

3、ファイルを異常に沢山作成させてないか、ハードディスクを時には確認する
0139デフォルトの名無しさんNGNG
ヘルプ見てもいまいち解かりにくいのですが
SetLengthで確保した動的配列の割当を開放するのはどうすればいいのでしょうか?
「nil を代入するか,Finalize に変数を渡します」
とあったので今は動的配列変数にnilを突っ込んでます。
他でも見たのはSetLengthで0を割り当てるとかもありました。
0140デフォルトの名無しさんNGNG
>>139
SetLengthという手続きで確保しているから、Finalizeという手続きで開放した方が
見た目がよさそうなので、そうしてる。

その割には、オブジェクトの開放はFreeAndNilを使うよう徹底してたりするわけだが。
0141デフォルトの名無しさんNGNG
質問失礼します。
プログラミングの勉強をしようと思ってC言語の入門書片手にやり始めたのですが
Sample1.cというソースファイルをコンパイルしてSample1.exeというファイル
にするというところでいきずまっています。

その入門書には\CGENGO\PRACTICEに移動してdirでSample1.cがあるのを
確認した後Lcc Sample1 と入れてEnterでコンパイルとなっているのですが
以下のような文がでてきてできません.なぜできないのでしょうか?
これだけの情報ではわからないかもしれませんがご教授の願います。

Microsoft (R) KKCFUNC バージョン1.10
Copyright (C)Microsoft Corp. 1991,1993. All rights reserved.

KKCFNC が組み込まれました。

マイクロソフトかな漢字変換 バージョン 2.51
(C)Copyright Microsoft Corp. 1992-1993

エラー:エクスドメモリーマネージャーがすでにくみこまれています。
XMSドライバは組み込まれていません。

Microsoft (R) KKCFUNC バージョン1.10
Copyright (C)Microsoft Corp. 1991,1993. All rights reserved.

KKCFUNCはすでに組み込まれています。

コマンドまたはファイル名が違います。
lcc: can't exec: cpp: No such file or directory
0142デフォルトの名無しさんNGNG
誤爆だ、わーい!
0143デフォルトの名無しさんNGNG
Delスレ的にはBCC32だな。
0144デフォルトの名無しさんNGNG
>>142
えむしえ
0145デフォルトの名無しさんNGNG
ComboBox1の中の数値とComboBox2の中の数値を掛けたいのですが、
どうすればよいのでしょうか?
begin と end の間の処理なんですが・・・
中の数値を一度変数に置き換えないとダメですか?
stringとintegerの間に互換性がないとか言われてチンプンカンプンです
0146デフォルトの名無しさんNGNG
>中の数値を一度変数に置き換えないとダメですか?
はい

>stringとintegerの間に互換性がないとか言われてチンプンカンプンです
文字列型と整数型は全く異なる型で互換性のないのが当たり前です。
VBではこの当たり前じゃないことが通用してしまうわけですが…
0147デフォルトの名無しさんNGNG
>>146
ありがとうございます!m(_ _)m
それで、変数に置き換えようとしたのですが、
begin
w := ComboBox1;
end;
では出来ないようで、途方に暮れております・・・
どうすればいいのでしょう?
0148デフォルトの名無しさんNGNG
>>145
var
V1,V2,V3:Variant;
begin
V1 := ComboBox1.Text;
V2 := ComboBox2.Text;
V3 := V1 * V2;
Edit3.Text := V3;
end;
0149デフォルトの名無しさんNGNG
>>148
Delphiらしくはないけど、それでも動くよね(最近この手のレスのやりとりがあったっけ)

>>147
普通は
var
 nValue1, nValue2, nResult: Integer;
begin
 nValue1:=StrToInt(ComboBox1.Text);
 nValue2:=StrToInt(ComboBox2.Text);
 nResult:=nValue1*nValue2;
 Edit3.Text:=IntToStr(nResult);
end;
みたいになるよ。

ちなみに変数を宣言しないで一行で書くことも可能
 Edit3.Text:=IntToStr(StrToInt(ComboBox1.Text)*StrToInt(ComboBox2.Text));
0150デフォルトの名無しさんNGNG
>>148
ありがとうございます!!!!!!
Variantなんて初めて使った・・・
ちなみに、Label.Caption:=V3
にしようとすると、エラーになってしまうのですが、
これは出来ないのですか?
それともどこか間違っているのでしょうか?
0151デフォルトの名無しさんNGNG
149の方がスマートだよ、148はある意味悪例。
なんにせよ、例外処理(数値が求められるところ
に文字とか出た場合のとか)は必要。

うちでは、148の内容の
Edit3.Text := V3;
を
Label.Caption:=V3
に変えても、一応通る(エラーなし)けどね。
0152デフォルトの名無しさんNGNG
反対に148の方がスマートか。
正に、「らしくない」がふさわしい。
0153ななしへたぐらま ◆XcB18Bks.Y NGNG
>>139
ヘルプには書いてありませんが,
単に解放するだけでしたら何もしなくても自動的に解放されます.
(『長い文字列型と同じ』という記述に注意してください)

明示的に解放する場合,
その配列を別の動的配列変数に代入していなければ
その3つの方法のどれでも解放されます.

>>145
ここでいう『互換性』とは
・式の中であるふたつの値を一緒に使えるか
あるいは
・ある値を変数に代入できるか
ということです.
DelphiではIntegerなどの数値型とStringなどの文字列型には『互換性』がありません.
0154デフォルトの名無しさんNGNG
150です。
このスレのおかげで今夜は寝ることが出来ますです。
特に>>148
さんに感謝しますm(_ _)m
みなさんどうもありがとうございますです
0155ななしへたぐらま ◆XcB18Bks.Y NGNG
>>153 が途中で切れてしまったので続き.

…よって,>>149のように文字列として連結したいときは数値を文字列に変換し,
数値を演算したいときは文字列を数値に変換しなければなりません.

>>148はバリアント(Variant)を使った例です.
バリアントには文字列でも数でも格納することができますし
文字列と数値との間の変換も勝手にやってくれるので非常に便利です.
そもそも文字列型だとか数値型とかいちいち意識しなくて済むので特に初心者には楽ちん(死語?)でしょう.
しかしバリアントには落とし穴があります.

たとえば>148の方法で足し算をやるとうまくいきません(文字列とみなして連結してしまうようです).
v1に文字列が代入された時点ではv1は文字列として情報を持っています.v2も同様です.
代入先が数値変数ならv1とv2は自動的に数値に変換されますが
代入先がバリアントの場合の仕様はドキュメントには書かれていません.
恐らく変換しなくて済むものは変換しないようになっているのでしょう.

なお,この問題はたとえば v3 := VarAsType(v1, varDouble) + VarAsType(v2, varDouble)とすれば回避できますが,
この時点で『文字列型だとか数値型だとかいちいち意識しなくて済む』メリットは失われてしまいます.

DelphiではVBと違い,基本的にバリアントを使わず,
プログラマーに型やその違いをはじめから意識させることによって
いちいち型変換しなければならない代わりに
予期しない型変換によるトラブルを未然に防いでいます.
0156デフォルトの名無しさんNGNG
>>140 >>153
ありがとう御座います。安心して使いまくります。
0157123NGNG
>>138を参考にしてやってみたのですが今日も駄目でした。
タスクマネージャーをずっと表示していたのですが、メモリの使用量は
増えていませんんでしたがまたキーボードがいかれてしまいました。

リソースの使用量は確認できなかったのですが、どのようにすればリソースの使用量は
確認できるのでしょうか?
また、どのようなことを忘れていたらリソースの量はどんどん増えていって
しまいますか?
0158デフォルトの名無しさんNGNG
Delとは直接関係ないんだが、
スタートアップで起動させるソフトを登録する
レジストリで、起動させるプログラム名と任意の
引数を与えたいのだが、どう書くの?
ぐぐったけどよく分かんなくて、今手元に本とかも
ないので誰かおせーて。
0159デフォルトの名無しさんNGNG
そういや俺Variant型って1回も使ったことないや。
なんか危険な香りがプンプンするよね。
0160デフォルトの名無しさんNGNG
>>159
基本的な考え方は何でも入るObject型と同じですよ?
0161デフォルトの名無しさんNGNG
>>160
そりゃ知ってますけど、なんか本能的に
わかりにくいバグを生みそうな予感がします。
0162デフォルトの名無しさんNGNG
>>159
Comをやるときには必要になるよ。(Excelを操作したり)
それ以外の用途ではほとんど使わないね。
0163デフォルトの名無しさんNGNG
>>162
それも知ってるけど、個人的にCOM使わないし
こういう足し算のパターンではまず使わないなぁ、と。
個人的にはね。
0164デフォルトの名無しさんNGNG
かけ算か。
0165デフォルトの名無しさんNGNG
Gkitって言う有料コンポではVariant型使いまくられてるので仕方なく使ってます。
0166123=157NGNG
どなたかよろしくお願いします。
0167デフォルトの名無しさんNGNG
>>123=157
だからリークなわけないっていってるじゃん。
リソースはタスクマネージャで表示項目にハンドルやGDIを追加してください。
0168デフォルトの名無しさんNGNG
キーボードが逝かれるってのは、
Msg.Resultを処理してなくてブラックホールできてるんじゃないか?
0169デフォルトの名無しさんNGNG
>>158
HDDからこんなのが出てきたけど、参考になるかな?
var
ri: TRegistry;
begin
ri := TRegistry.Create;
ri.RootKey := HKEY_LOCAL_MACHINE;
if(ri.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\run', True)) then
begin
ri.WriteString('適当な名前', '実行ファイルのフルパス オプション');
end;
0170デフォルトの名無しさんNGNG
初心者スレで閉じて解放するところを省略するのはいかがなものか
0171デフォルトの名無しさんNGNG
>>170
ごめんよ。関係ない部分を編集してたら抜けてしまった。
var
ri: TRegistry;
begin
ri := TRegistry.Create;
ri.RootKey := HKEY_LOCAL_MACHINE;
if(ri.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\run', True)) then
begin
ri.WriteString('適当な名前', '実行ファイルのフルパス オプション');
end;
ri.free;
end;
0172123=157NGNG
>>167
たびたびすみません。
では何が原因だと思われますでしょうか?
教えていただいたリソースの確認はやってみます。

>>168
MSGの意味が分からないのですがどういう意味でしょうか?
0173デフォルトの名無しさんNGNG
>>172
ソースも出せないくせに粘着すれば答えが出ると思ってんの?
0174123=157NGNG
200kbほどあるのですが、どこかにアップした方がいいでしょうか?
0175デフォルトの名無しさんNGNG
>>174
アップローダくらい自分で探せ!おまい何様だ?
0176デフォルトの名無しさんNGNG
>>172
XPならタスクマネージャのパフォーマンスタブで 合計の所にハンドルの表示があるから、その数を確認
それが増えていってないなら、リソースリークではないだろう

メモリの消費量はコミットチャージの方で確認してるよね?

ところで、そのアプリ使わなくても そのキーボードいかれる現象起きない事は確認してるんだよね?
0177デフォルトの名無しさんNGNG
とりあえずタイマーで回してる部分のみを張ってみては?
0178デフォルトの名無しさんNGNG
リークじゃないかと言い出すやつに限って、リークさせてみたことないから、
だんだん変になるってのは、どう変になるかにによらずリークだといいだす。
0179デフォルトの名無しさんNGNG
>>178
うーん。
低レベルオーディオとかのCALLBACK中に悪さしてるとか、グローバルフックをかけてるとかなら別だけど、
普通に作って、保護例外とかも出ないなら、それ以外の可能性が考えられないからなあ

あるいは例外全部キャッチして握りつぶしてるのかな? ならデバッガ上で動かしてみるべきだね。
0180デフォルトの名無しさんNGNG
>可能性が考えられない
個人の能力に依存
0181デフォルトの名無しさんNGNG
リークじゃなくて、メモリのフラグメンテーションかもしれない。
とりあえず、メモリ使用量がホントに増えてないんだろうな?
0182158NGNG
>>169
ありがとうございました
0183123=157NGNG
皆さん何度もありがとうございます。えぇスレや。
3時間ソフトを走らせてみたのですが、メモリの使用量は5M近辺をうろうろしていて
大きくはなっていません。ハンドルは74、GDIオブジェクトは67から変化しません。
マシン全体の合計のハンドル数も4400弱を上下しています。

>>176
コミットチャージの合計値は110M前後です。上昇はしていません。
このアプリを使う前はこのような症状は無いでした。

>>177
はい。次に貼り付けます。長文スマソ
0184デフォルトの名無しさんNGNG
SendInput があやしい
0185123=157NGNG
procedure TMainForm.MainTimerTimer(Sender: TObject);
var
TempList1:TStringList;
TempList2:TLightstrings;
i,j,jj,age1 :Integer;
SetName,kk,s,s1:string;
ChangeData:boolean;
Wnd,ChildWnd:HWND;
begin
MainTimer.Enabled:=False;
ChangeData:=false;
if (LastGetDataTime<now-EncodeTime(0,3,0,0)) then
begin
Richedit1.Lines.Add(FormatDateTime('yyyy/mm/dd hh:mm:ss',Now)+',通信が途絶しました。再ログインします'+SetName);
Richedit1.Repaint;
Login(Self);
LastGetDataTime:=now;
end;
for jj:=1 to 10 do
begin
kk:='';
SetName:=whatsetname(jj,kk);
statusbar3.SimpleText:=SetName+' Data';
statusbar3.Repaint;
kk:=MainPath+SetName+'.Data.'+formatDateTime('yyyymmdd',Now-1);
s :=MainPath+FormatDateTime('yymmdd',Now-1)+SetName+'1.txt';
s1:=MainPath+FormatDateTime('yymmdd',Now-1)+SetName+'2.txt';
if not fileexists(kk) then
begin
0186123=157NGNG
TempList1:=TStringList.Create;
TempList2:=TLightStrings.Create;
try
try
TempList1.LoadFromFile(kk);
age1:=FileAge(kk);
for i:=0 to templist1.Count-1 do
begin
TempList2.Text:=TempList1[i];
Nowtime:=Now;
if SetData1(jj,SetName,TempList2,s,s1,NowTime) then
begin
ChangeData:=true;
end;
LastGetDataTime:=now;
end;

if age1=FileAge(kk) then
begin
if not DeleteFile(kk) then
begin
RichEdit3.Lines.add(FormatDateTime('yyyy/mm/dd hh:mm:ss',Now)+',Data file "'+kk+'" Delete Failed');
end;
end
else
begin
j:=TempList1.Count;
TempList1.LoadFromFile(kk);
for i:=0 to j-1 do
begin
0187123=157NGNG
TempList1.Delete(0);
end;
TempList1.savetofile(kk);
end;
except
RichEdit3.Lines.add(FormatDateTime('yyyy/mm/dd hh:mm:ss',Now)+',Data file "'+kk+'" Open Failed');
end;
finally
TempList1.free;
TempList2.Free;
end;
if errorflag and (not errorReportflag1) then
begin
TempList1:=TStringlist.Create;
try
i:=Richedit1.Lines.count;
if i>2 then
begin
TempList1.Add(Richedit1.Lines.Strings[i-3]);
TempList1.Add(Richedit1.Lines.Strings[i-2]);
TempList1.Add(Richedit1.Lines.Strings[i-1]);
end
else
begin
TempList1.Add(Richedit1.Lines.Strings[i-1]);
end;
Mail(TempList1);
errorReportflag1:=true;
finally
0188123=157NGNG
TempList1.free;
end;
end;
if (DataCount<16) and ((not errorflag) or ChangeData) then
begin
SetData2(jj,SetName);
SetData3(SetName);
if MaxData/MinData>0.8 then
begin
statusbar3.SimpleText:=SetName+' Data Process';
statusbar3.Repaint;
DataPro(jj);
statusbar1.Color:=clBtnFace;
statusbar1.SimpleText:='正常処理中です。';
statusbar1.Repaint;
end;
end;
end;
end;
TempList1:=TStringlist.create;
try
if not errorReportflag2 then
begin
errorReportflag2:=true;
TempList1.Add('エラーが起きています。');
Mail(TempList1);
end;
finally
TempList1.free;
end;
0189123=157NGNG
ComboBox2Change(Self);
MainTimer.Enabled:=True;
end;

以上です。もっと長いのですが、余計な部分は消してます。
読みにくいソースですみません。
0190デフォルトの名無しさんNGNG
SendInput使ってないじゃん
0191デフォルトの名無しさんNGNG
わかった、FileAgeだとおもう。
0192デフォルトの名無しさんNGNG
直接関係ないけど
1. 通信途絶の時はSetNameが初期化されてないけどいいのか?
2. ファイルkkが存在しない時にTempList1が読もうとしてるがいいのか?
3. メール関係のシェアウェアを公開してたりするか?
0193デフォルトの名無しさんNGNG
SetDataの中の人が気になるな〜
TLightStrings(おいらは知らなかったけどニフティにあるらしいね)というのが
引数になってるから余計に…
あとはMailとDataProかな〜
いずれにせよ、このリストからはリークもリソースの開放し忘れも見えてこないね。
0194デフォルトの名無しさんNGNG
×リスト
○ソース  ま、いっか
0195デフォルトの名無しさんNGNG
原因がわからないエラーの時は原因を探すのを先にやらなければいけない。
しかし、1日おいて突然起きるような現象を突き止めるのはとても厄介だ。

Timerで エラーレポートをRichEditに書いてるけど、これだと暴走して電源切らなくちゃいけなくなったら消えてしまう。
ファイルに書き出しておいた方がいい。

ところで、大量にファイルを作ってるんじゃないのか?
大量にファイルを作ると、時間と共に急激にWindows全体が重くなるよ。
0196123=157NGNG
>>190
SendInputは
procedure TMainForm.Login(Sender:TObject);
var
Wnd:HWnd;
begin
Wnd:= FindWindow(Nil,'Error');
if Wnd <>0 then
begin
SetForegroundWindows(Wnd);
end;
keybdInput(VK_ESCAPE, 0);
keybdInput(VK_ESCAPE, KEYEVENTF_KEYUP);
SendInput(KeyInputCount,KeyInputs[0],SizeOf(KeyInputs[0]));
KeyInputCount:=0;
こんな感じで使ってます。ちなみにkeybdInputは
procedure TMainForm.KeybdInput(VKey:Byte; Flags:DWord);
begin
Inc(KeyInputCount);
SetLength(KeyInputs,KeyInputCount);
KeyInputs[KeyInputCount-1].Itype:=INPUT_KEYBOARD;
with KeyInputs[KeyInputCount-1].ki do
begin
wVk:=VKey;
wScan:=MapVirtualKey(wVk,0);
dwFlags:=KEYEVENTF_EXTENDEDKEY;
dwFlags:=Flags or dwFlags;
time:=0;
dwExtraInfo:=0;
end;
end;
です。
0197デフォルトの名無しさんNGNG
たぶんファイルはたくさん作ってないぞ。
1.txtと2.txtだけ。
0198123=157NGNG
>>192
1,SetNameの中身は数字で表示しているだけなので大丈夫です。
2,すみませんログを削除しすぎていました。
if not fileexists(kk) then
begin
kk:=MainPath+SetName+'.fxcm.'+formatDateTime('yyyymmdd',Now);
s :=MainPath+FormatDateTime('yymmdd',Now)+SetName+'1.txt';
s1:=MainPath+FormatDateTime('yymmdd',Now)+SetName+'2.txt';
end;
こんな感じになってます。
3,いえ、公開しているソフトは1本も無いです。

>>193
LightStringsやめてStringlistでテストしてみます。
MailとDataProまでここにあげるとなると他の皆様に迷惑でしょうからやめておきます。
無料のサイトにソースをアップした方がいいかな

>>195
毎回ファイルに書き出すようにします。ありがとうございます。
あとファイル数は同じファイルに定期的に上書きしているだけなので大丈夫です。
0199デフォルトの名無しさんNGNG
SendInputで発生したイベントによって
KeyInputCount:=0; が実行されないとか…

KeyInputCountのリセット位置を工夫すると
安定するような気もするな〜
0200デフォルトの名無しさんNGNG
おいらなら
とりあえずKeyInputCountを他の変数に代入して
SendInputを呼び出す前にKeyInputCountを0にしてしまうな〜
もちろんSendInputの引数は代入した方の変数なると
0201デフォルトの名無しさんNGNG
俺も全然関係ないことだけど、
TStringlistをメソッド内の変数にして何回も生成破棄するってどうなのかね。
メンバにしてコンストラクタで生成し、メソッド内ではClearするだけの方がすっきりしそう。
余計なtry..finally全部消えるのに。
0202123=157NGNG
>>199
KeyInputcountの値はきちんと入ってるみたいです。
試しにこの行を削除して実行してみたのですが、過去の履歴も一緒出力するようになりました。

>>200
すみません、理解しきれていないのですが、KeyInputCountを0にして
呼び出せば安定する、って言う意味でしょうか?

>>201
ソフトが安定したらFormCreateでStringListを育成して、FormCloseでFreeしようと
思っていたのですが、それよりも201さんが書かれたメンバにしてコンストラクタで生成する
方法の方が安定しますか?
やり方が分からないのでちょっとイメージがわかないです。
0203デフォルトの名無しさんNGNG
OS変えろヴォケ
0204デフォルトの名無しさんNGNG
>>203
>>123が2kかXPを使ってるのは間違いないと思うのだが、それだけではダメなのか?
0205デフォルトの名無しさんNGNG
マシン変えろヴォケ
0206デフォルトの名無しさんNGNG
SendInputによって発生したイベントを処理するイベントハンドラの中に
更にSendInputを呼び出すものが紛れ込んでいたらハングアップするだろうけどなぁ
同じキー入力が何重にも発生するだろうから…
(SendInput自体にSendInputが割り込むことはないけれど)

症状から見て極まれにしか起こらないみたいだから
SendInputの処理中にタイマーのイベントが発生した場合だけ起こる現象化かもね
0207123=157NGNG
>>206
>SendInputによって発生したイベントを処理するイベントハンドラの中に
>更にSendInputを呼び出すものが紛れ込んでいたらハングアップするだろうけどなぁ

たぶん無いと思います。
でもこのままだとSendInputが原因かどうか分からないので問題の切り分けのために
とりあえずSendInputを全部//行にして実行してみます。

0208デフォルトの名無しさんNGNG
チョンやチャンコロには著作権なんて考えはないからな。
死ねや!チョン&チャンコロ
0209デフォルトの名無しさんNGNG
禿同
0210デフォルトの名無しさんNGNG
覇解怒鵜
0211デフォルトの名無しさんNGNG
ごくマレに起きるのか、それとも時間と共に起きるのか切り分けないといけないね。

1時間毎に、フォームの状態とかを保存した上で 同じアプリを別プロセスで起動して、
自分を終わらせて、同じアプリは自分の終了を確認したらフォームの状態を復元して動作するような仕掛けを作って
やっぱり24時間したらハングアップするかどうか見てみたら?
0212123=157NGNG
>>211
24時間たったら必ず起こる、と言うわけではありません。
もっと早く起きるときもあります。
昨日の夜からSendInputを殺して動作させていたのですが、エラーがやっぱり
出てしまいました。
別プロセスで起動する、と言うのが良く分からないのですが、ちょっと考えます。
0213デフォルトの名無しさんNGNG
原因は、自分じゃなくて操作しようとしてる相手にあるかもしれないから、厄介だね。
しかも、長時間稼動しなければ発生しないとなるとなおさらだ。

きりわけをする為に、
SetForegroundWindows とか、相手に投げてるメッセージを探して
それを連続して投げてみて同じ事が起きないか順に見てみたら?
SendInput も1回だけじゃなくてSHIFTとか関係なさそうなのを連続して投げてみるとかしてさ
0214デフォルトの名無しさんNGNG
>>196
よく判らないけど、別のアプリをコントロールしようとしてるのならば、

"Error"タイトルの窓が無ければ、どこか判らないフォアグラウンドプロセスにESCを送りつけるの?
見つかったとしても、 SetForegroundWindows は 何? SetForegroundWindow ?
SetForegroundWindow は必ず成功するわけではない。
ブリンクさせてなりたいという意思を表示させるだけの事も多い。
この場合、やっぱり現在のフォアグラウンドプロセスにESCを送りつけるわけで、

アプリ全体にこの手の配慮不測があるとすると、そこらへんを見直さないといけないと思うよ。
0215123=157NGNG
>>213
試してませんでした。やってみます。ありがとうございます。

>>214
2週間ほど前まで、214さんが言っておられるタスクバーが茶色ブリンクするだけの
症状にも悩んでいたのですが、こちらのスレで解決法を教えていただいたので
その処理をSetForegroundWindowsというprocedureにして必ず目的のWindowを
表に出せるように処理しています。
0216デフォルトの名無しさんNGNG
フォーム上に文字を表示するのはどうすればいいんですか?
0217デフォルトの名無しさんNGNG
フォームにTLabelコンポーネントを張れ!
そしてオブジェクトインスペクタのCaption欄に文字を入れろ
0218デフォルトの名無しさんNGNG
        ゴガギーン
             ドッカン
         m    ドッカン
  =====) ))         ☆
      ∧_∧ | |         /          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     (   )| |_____    ∧_∧   <  おらっ!出てこい >>1!!
     「 ⌒ ̄ |   |    ||   (´Д` )    \___________
     |   /  ̄   |    |/    「    \
     |   | |    |    ||    ||   /\\
     |    | |    |    |  へ//|  |  | |
     |    | |    ロ|ロ   |/,へ \|  |  | |
     | ∧ | |    |    |/  \  / ( )
     | | | |〈    |    |     | |
     / / / / |  /  |    〈|     | |
    / /  / / |    |    ||      | |
   / / / / =-----=--------     | |
0219218NGNG
あぁこうやって誤爆するんだ…
0220デフォルトの名無しさんNGNG
質問があります。9を2で割ったときの余りがいらないんですが、どうやって捨てたらいいですか?
0221デフォルトの名無しさんNGNG
>>220 DIVをつかえ  使ったこと無いけどたぶん
a:= 9 DIV 2;
0222デフォルトの名無しさんNGNG
a:=trunc(9/2); というのも有ったかもしれぬ
0223デフォルトの名無しさんNGNG
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄」
―――――――――――――‐┬┘
                        |
       ____.____    |
     |        |        |   |
     |        | ∧_∧ |   |
     |        |( ´∀`)つ ミ |
     |        |/ ⊃  ノ |   |   
        ̄ ̄ ̄ ̄' ̄ ̄ ̄ ̄    |   [余り]
                        |
0224デフォルトの名無しさんNGNG
                      |
      ____.____   |
      |        |   ウヒョー .|  .|   [余り]
      |        | ∧_∧ |  .|
      |        |(  ・∀・)つ━━┫  ┃
      |        |/ ⊃  ノ |  .|....┗━┛
       ̄ ̄ ̄ ̄' ̄ ̄ ̄ ̄   |
0225デフォルトの名無しさんNGNG
>>217
ありがとうございました
0226220NGNG
>>221-222

ありが�d
0227デフォルトの名無しさんNGNG
普段はbutton1をクリックして処理を開始しているプログラムを、
スタートアップでウィンドウズの起動と共に自動的に1回処理させたいです。
その時に、フォームは出ないようにしたいのですが、フォームの
Createイベントの中で
Button1Click;
Close;
とやるとエラーが出てしまいます。
どうすればいいのでしょうか?
0228デフォルトの名無しさんNGNG
>>227
普通は、OnClickでは、処理を呼び出すだけで、実際の処理は別のクラスに書くものです。

そして、その処理は .DPR に 書くと良いでしょう。
0229227NGNG
ありがとうございます。
.DPRですか。ぐぐってもすこししらべてみます。
0230デフォルトの名無しさんNGNG
コード・エディタがどうにも使いにくいので、出来れば秀丸にしたいのですが、
どこの設定を変えれば宜しいのでしょうか?

超初心者的質問で申し訳ないのですが、どなたかご教示お願い致します。
0231デフォルトの名無しさんNGNG
>普通は、OnClickでは、処理を呼び出すだけで、実際の処理は別のクラスに書くものです。

はぁ?
0232デフォルトの名無しさんNGNG
ひぇ〜 ”はぁ” 来た〜〜〜
0233デフォルトの名無しさんNGNG
> コード・エディタがどうにも使いにくいので、出来れば秀丸にしたいのですが、
> どこの設定を変えれば宜しいのでしょうか?
> 超初心者的質問で申し訳ないのですが、どなたかご教示お願い致します。
 Delphi 予約語などのの強調表示ができればいいんだろ。秀丸は Pascal の強調表示には対応してた
はず。しかし、超初心者ならコードエディタにも慣れた方がいいと思うぞ。なんと言ってもコード補
完は便利だから。
0234デフォルトの名無しさんNGNG
>>230
統合開発環境じゃなくて秀丸使いたがるなんて、プログラムの初心者じゃないだろ。自分で調べろ!
といいたいところだが…

秀丸を統合開発環境のデフォルトエディタには出来ない。
統合開発環境も一緒に起動しておいて秀丸で編集して保存。
んで、統合開発環境のエディタをアクティブにすると、「内容が変更されたが更新するか?」というメッセージが出るのでOKする。
んで、メニューからコンパイルすればよい。

dos窓が良ければコマンドラインコンパイラ(bin\dcc32.exe)もあるぞ。
0235デフォルトの名無しさんNGNG
慣れろ。

以上。
0236デフォルトの名無しさんNGNG
>>231
俺は>>228の言いたい事が解ったぞ。
0237デフォルトの名無しさんNGNG
DPRにあるルーチンってフォームのユニットから呼び出せたっけ?
0238デフォルトの名無しさんNGNG
たっけ?じゃなくて試せよボウズ
0239デフォルトの名無しさんNGNG
質問させてください。

フォームにボタン(Captionはボタン生成)を1つ貼り付け、
それを押すと度にその下に新しいボタン(新ボタン1,2,3...)が
にょきにょき出てくるテストプログラムを作っています。

ここで新ボタンを押すと、その押したボタンが消える(破棄される)
ようにしまして、消える事は消えるのですが消えた後にほぼ必ず
読み込み違反のエラーが出てしまいます。ごく稀に出ない時もあります。

このエラーが出ないようにするにはどうすればいいのでしょうか?
0240デフォルトの名無しさんNGNG
ソース
0241デフォルトの名無しさんNGNG
>>239
イベントハンドラ内でFreeしたらあかん

ttp://www.sakaki.keiaikai.or.jp/cgi-bin/ConvRoom/webconv.dll/alltree?No=17155
0242デフォルトの名無しさんNGNG
>>239
ボタンを破棄しないで
VisibleをFalseにしる
0243デフォルトの名無しさんNGNG
アッチョンブリケ
0244228NGNG
すみません >>228 は誤解を招く表現でした。

前半はドキュメントとビューを別けようという話です。

OnClickに、見かけとか、そのフォームに関する処理を書くだけならいいのですが、
何か処理をする時、 何か処理をするという事は、データを扱うという事ですので、
そのデータの方に注目して、別のユニットにその処理を書きます。
そうすると、そのユニットは単独で使う事が出来るようになります。
たとえばバッチ処理をさせたりしたい場合に便利になるわけです。
そのあたり、馴れない間は、DataModuleに書くと良いでしょう。


後半は、アプリ起動時に処理させたい内容は、.DPRに書くと良いという話です。
DataModuleを使う場合、.DPRはこんなふうになっています。
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TDataModule1, DataModule1);
  Application.Run;
end.
ここで、  Application.Run; をParamによって条件判断して呼ばなければ
そのままアプリはフォームを開かずに終了し、endの後でCreateされてるフォームは
Applicationを親にしているので自動的に開放されます。
0245227NGNG
>>228,>>244
きっかけをもらえて助かりましたYo!
データモジュールの使い方が分かってアリガ�d
0246デフォルトの名無しさんNGNG
>>239
ボタンはオーナーであるフォームが管理してるんだから
勝手に破棄しちゃ駄目でしょ。Components配列から外さないと。
0247デフォルトの名無しさんNGNG
>>246
子コントロールが開放(たとえばButton1.Free; を実行)されれば、
自動的に親と通信するから大丈夫。

>>239
将来の事を考えると、イベントハンドラ内でFreeしない方がいい。
でも、それとは別に、イベントハンドラ内でFreeしても現在のVCLでは問題ない。

だから、何か変な事をやってるように思うから、その部分のソースを書いてみて。
0248デフォルトの名無しさんNGNG
>>247
> イベントハンドラ内でFreeしても現在のVCLでは問題ない。

設計時にポトペタしたのは大丈夫だけど、動的につくったやつはそのイベントハンドラ
で Free するとエラーになる。試してごらん。
0249デフォルトの名無しさんNGNG
フォーム1からフォーム2をリンクして開こうとおもうのですが
新しくフォームを生成するのではなく
フォーム1の中でフォーム2を実行したいのです
どうすればいいのでしょうか?

また、こういったわからないことがあったら
どうやって調べたらいいのでしょうか?
ヘルプファイルもいまいち理解しにくいのですが
0250デフォルトの名無しさんNGNG
>>249
PageControl使ったほうがいいかも
0251ミ,,゚Д゚彡 ◆A6VzDeLphI NGNG
>>248
試してみました。

procedure TForm1.Button1Click(Sender: TObject);
begin
 TButton(Sender).Free;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 with TButton.Create(Self) do
 begin
  Parent := Self;
  Top := Y;
  Left:= X;
  OnClick := Button1Click;
 end;
end;
0252デフォルトの名無しさんNGNG
質問です。
WebBrowserを使って簡単なブラウザを作っているんですが、
リンク先が新しいウインドで開く設定のリンクだった場合
IEが新たに立ち上がって、IEにリンク先のページが開いてしまいます。
これをIEでなく、ブラウザ自身を立ち上げて表示させたいのですが
どうすればいいんでしょうか?
よろしくお願いします。
0253デフォルトの名無しさんNGNG
その作ってるブラウザをデフォルトのブラウザに
しなきゃなんないんじゃないの?
0254デフォルトの名無しさんNGNG
>>251
エラーが出ました。
0255デフォルトの名無しさんNGNG
質問お願いします。
Delphi 6 personal で作ったツールを仕事で使ったらライセンス違反ですか?
0256デフォルトの名無しさんNGNG
>>255
そういう微妙なライセンスの問題は、個人の契約問題ですから
ご自分でボーランドに問い合わせて下さい。
0257デフォルトの名無しさんNGNG
>>252
リンクをクリックしたときに発生するイベントあるんだから(OnBeforeNavigate2)、
そこにShellExecute使って自分自身を起動するようにすればよい。引数にはリンクのアドレスを入れておく。
んで起動時にOnCreateでParamStr(1)で読み込んで、Navigateする、と。
0258デフォルトの名無しさんNGNG
>>252
http://delphi.sakura.vg/lesson26.html
0259デフォルトの名無しさんNGNG
>>255
よしんばそれがライセンス違反だったとしても
それを確認できる人はいない。

Del6Perで作ったソフトそのものを売ったりしなきゃ
全然オッケーでしょ。
0260252NGNG
>>257
>>258
新しいウインドを開くリンクをクリックして、とりあえず自身のブラウザを
立ち上げるまでにはなりました。まだリンク先の表示は出来ませんが・・・。
参考に頑張ってみます。ありがとうございました。
0261デフォルトの名無しさんNGNG
フォームのデザインをするときに、色のセンスがないので、
市販のソフトなどの色使いをまねして作りたいのですが

マウス上の色をTColor(-$7FFFFFFF-1..$7FFFFFFF)で返すソフトはないでしょうか?

もしくはその処理を教えてください。

原色だらけのFormで見づらくて。
0262デフォルトの名無しさんNGNG
function GetColorByCursorPos: TColor;
var
DesktopCanvas: TCanvas;
CursorPos: TPoint;
begin
GetCursorPos(CursorPos);
DesktopCanvas := TCanvas.Create;
try
DesktopCanvas.Handle := GetWindowDC(GetDesktopWindow);
Result := DesktopCanvas.Pixels[CursorPos.x, CursorPos.y];
finally
DesktopCanvas.Free;
end;
end;
0263261NGNG
>>262

ありがとうござます。

けど、自分で作成したForm内はTColorの値をとれるのですが、
本来の目的、他のアプリの取り方がわかりません。

明日?、起きたらもう一度挑戦します。
0264デフォルトの名無しさんNGNG
>>263
262 さんではありませんが 262 の関数で画面のどの場所でも色が取れるのを確認したよ。
0265デフォルトの名無しさんNGNG
こんなのもあった

http://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200309/03090060.txt
0266デフォルトの名無しさんNGNG
>>261
ALT+COPYして そのアプリの画面イメージをクリップボードに入れてから
処理すると楽なんじゃないの?
0267デフォルトの名無しさんNGNG
>>266

どう楽か知らんが、1点の情報が必要なのに100万点の情報をメモリに入れるのは
バカみたい。
0268261NGNG
色の値をとれました。
ありがとうございます。

>265 で実施したのですが、
Form外のマウス位置の情報を >262,264 さんがどのように実施したのか
教えていただけないでしょうか?
0269デフォルトの名無しさんNGNG
GetCursorPos
0270デフォルトの名無しさんNGNG
>>268
GetCursorPosというWin32API
検索しようね。
分からない部分をググるだけでもだいぶ違うぞ
0271デフォルトの名無しさんNGNG
GetCursorPos が分からないのではなく、どのタイミングでカーソル位置を取得
するのか分からないんだと思う。>>265 の方法はマウスキャプチャを利用して
OnMouseUp で検出してるけどね。
0272デフォルトの名無しさんNGNG
>>220

なんか お金を払ったときなどの釣りはいらねぇ〜っていう セリフを思い出した。
0273261NGNG
>269,268,271

>271さんがいっているように、どこで処理を書くのかわかりませんでした。
TForm1.FormMouseMove で処理を実施してもForm外では認識しなかたので。

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Form1.Color := GetColorByCursorPos;
end;

と、Timerで処理すればよいのがわかり、解決出来ました。

ありがとうございます。
0274デフォルトの名無しさん NGNG
StringGridについて教えてください。

通常の列については、goColSizingでサイズ変更が可能になるようなのですが、
FixedColはできないのでしょうか?
StringGrid自体の幅があまりとれないもので、FixedColを調節して
通常列の値が見えるようにしたいのですが・・・。

どなたかご存知の方がいましたらご教授ください。
0275デフォルトの名無しさんNGNG
QuickRepotの印刷イメージをImage1.Canvas に
コピーしたいのですがどのようにすればよいのでしょうか?
色々試してみて

QuickReport1.PaintTo(Image1.Canvas,0,0);

で出来そうと思ったのですが、デザイン中の画面が表示されてしまいました。

Image1.Canvas := QuickReport1.QRPrinter.Canvas

では、エラーが出てしまいます。
よろしくお願いします。

そもそもの目的は、両面印刷の実施です。
表面 ImageKit という市販のソフト( http://www.newtone.co.jp/index.html )
裏面 QuickRepot で作成されたイメージ
という形で印刷したかったのですが、うまくいきません。
QuickRepot1.Print を実施すると、次のページに印刷されます。
回避方法として、QuickRepotの印刷イメージをImageKit側に呼び出そうとしています。

表裏面ともに、ImageKitのデータの場合はできました。
もっと簡単な方法がありましたら教えてください。
0276デフォルトの名無しさんNGNG
つづき --------------

以下は、表裏面ともにImageKitの例

procedure TForm1.Button1Click(Sender: TObject);
begin
//IkFile1,IkDisp1,IkPrint1 はImageKitのコンポーネント
IkFile1.FileName := 'C:\Test.tif';
IkFile1.LoadFile(4);
IkDisp1.ImgHandle := IkFile1.ImgHandle;
IkDisp1.Display(1);

IkPrint1.PrintFileName := 'Default';
IkPrint1.PrintCreateDC(ikPrintFileName);
IkPrint1.PrintDlg; //これで両面印刷に設定する
IkPrint1.PrintStartDoc();
IkPrint1.PrintStartPage();
//表面の印刷
IkPrint1.ImageOut(IkPrint1.hDC, IkFile1.ImgHandle,
100, 100, 1000, 1000, True, True, ikPrinter);
IkPrint1.PrintEndPage();
IkPrint1.PrintStartPage();
 //裏面の印刷
IkPrint1.ImageOut(IkPrint1.hDC, IkFile1.ImgHandle,
100, 100, 1000, 1000, True, True, ikPrinter);
 //QuickRepot1.Print ここで実施しても両面にはならない

IkPrint1.PrintEndPage();
IkPrint1.PrintEndDoc();
IkPrint1.PrintDeleteDC();
IkPrint1.ReleaseDevModeHandle;
end;
0277超初心者ですNGNG
実行した内容の保存、呼出の方法についてお伺いしたいです。
例えば、変数のカウントがどこまで進んだかをファイルに保存し、
Memoに呼び出す、といったことをしたいのですが、
簡単で構わないので、何かサンプルをいただければありがたいです。
0278デフォルトの名無しさんNGNG
上記御質問の返答が書込まれていない所すみませんが,
便乗して質問させて下さい.

モーダルフォーム生成の際ですが,form1(メインフォーム)から

form2:=Tform2.Create(self);
try
form2.ShowModal;
finally
form2.Release;
end;

以上のコードを用いると form2 はモード付きで表示されますが,
この状態で form1 をマウスクリックした場合において,form2 に,
一般によく見るような「タイトルバーの点滅」が得られないのです.

何分気に掛かりますので,これを実現する策がありましたら御教授下さい.
0279デフォルトの名無しさんNGNG
モーダルだからフォーカスは同じアプリの他フォームに移動しないのは当然。
0280デフォルトの名無しさんNGNG
>>277
変数をファイルに保存するので一番簡単なのはINIファイルだけど、
カウントを履歴のように保存したいのかな?それだとTStringListだけど。
もうちょっと具体的なことが分からないと(どういう形式でファイルに保存したいのか)。
0281デフォルトの名無しさんNGNG
あ〜、ちかちかするやつか? なんでだろうね。標準モーダルループじゃないからだと。
0282デフォルトの名無しさんNGNG
>>278

実現しなければならない機能に比べて、やらなきゃならないことはいっぱいある。
まぁ、そんなトリヴィアは気にしないこと。
0283デフォルトの名無しさんNGNG
実現しなければならない と やらなきゃならない
の違いがわからん。かわいいミスか?
0284デフォルトの名無しさんNGNG
つまり、つまらんこと実現するためにモーダルループに介入しなければならんほど
大変なのでやる価値があるとは思えない、ということ。
0285デフォルトの名無しさんNGNG
TOpenDialog のようなコモンダイアログを表示している場合もちかちかしないね。
この場合は標準モーダルループのはずなのに。うーむ、MainForm がそもそもダイアロ
グだからだろうか。わからない。
0286デフォルトの名無しさんNGNG
Delphiアプリは、Applicationという見えないウィンドウがあって
それがフォームを出したりしている。

と、ここまで書いて思ったが
そこらへんの話って、Halbowさんとこになかったっけ。
0287デフォルトの名無しさんNGNG
>>286
> Delphiアプリは、Applicationという見えないウィンドウがあって
> それがフォームを出したりしている。

うん、それがこの場合にどう関係あるのかがわからないんだよね。
Application ウィンドウからみて MainForm はモードなしダイアログなんだろうか?
それが関係ありそうだけどよくわからない。
0288デフォルトの名無しさんNGNG
Delphi 6 RTL アップデートパック #3をダウンロードしたんですけど

このアップデートパックは ZIP 形式で圧縮されています。このファイル
を一時的なフォルダに展開し、Delphi 6 のフォルダ(デフォルトのパス
は以下のとおり)にコピーしてください。

c:\program files\borland\delphi6\Source\RTL\Common\Classes.pas
c:\program files\borland\delphi6\Lib\Classes.dcu
c:\program files\borland\delphi6\Lib\Debug\Classes.dcu
c:\program files\borland\delphi6\Lib\rtl.dcp
c:\program files\borland\delphi6\MergeModules\BaseRTL.msm
c:\winnt\System32\rtl60.bpl
c:\winnt\System32\rtl60.map
c:\winnt\System32\rtl60.jpn
と書いてあってこの中の下の3つって
Cドライブの中にwinntフォルダがないんで
C\WINDOWS\SYSTEM32の中にコピーするんですか?
OSはMEです。
0289デフォルトの名無しさんNGNG
俺は2000持ってないけど、ダイアログの点滅は2000でも起こりうるのか?
XPだけならマニフェストあたりの問題かも試練。
0290デフォルトの名無しさんNGNG
>>288
すでにあるかどうか確かめる。
試してみる。
0291デフォルトの名無しさんNGNG
>>289

自分は Win2k だけどメモ帳の開くの OpenDialog では、ちかちかするよ。
0292デフォルトの名無しさんNGNG
>>288
「ミ田+F」の長押しで検索。
0293デフォルトの名無しさんNGNG
ウィンドウのオーナー変えるだけの話。でも色々注意しないといけないことが多い。
気にしないほうが幸せになれる。
Delphi8でWinFormという解決方法もあり。
0294デフォルトの名無しさんNGNG
> ウィンドウのオーナー変えるだけの話。

Form2 のオーナーは Application だよね。どう変えるの?

> でも色々注意しないといけないことが多い。

全然「だけ」じゃないね。(笑
0295デフォルトの名無しさんNGNG
モーダルダイアログをちかちかさせるために .NET アプリにするのは変!
0296デフォルトの名無しさんNGNG
TForm2 は CreateParams() を override してオーナを変更できるが、コモンダイアログ
の場合はどうするのかなー
0297デフォルトの名無しさんNGNG
delphiでデザインパターンについていろいろ書かれてる本は有りますか?

現在、kakinotane.s7.xrea.comを眺めながら
『Java 言語で学ぶデザインパターン入門』 結城 浩(著) を購入して理解を深めていく方法を
とろうか、とるかまいか悩んでいるところなのですが・・・
0298デフォルトの名無しさんNGNG
> delphiでデザインパターンについていろいろ書かれてる本は有りますか?

見たことない。デザパタは知らないより知っていた方がよいが、
悩んでがりがり勉強するほどのものとは思えない。結城さんの本は
買っておいても損はしないと思う。
0299デフォルトの名無しさんNGNG
良書かもしれないが入門/通俗本でしかないので、とっととちゃんとした本を読むように。
0300297NGNG
Delphiの本はまだ無いのか・・・
オブジェクト指向の本と同様に、Delphiで本書いたらもうけるかも(偉い方おねがい)

『Java 言語で学ぶデザインパターン入門』 結城 浩(著) を入門書に
それ以降はまたいろいろ探して勉強に取り組みたいと思います

御回答、ありがうございました
0301デフォルトの名無しさんNGNG
http://onigiri.s3.xrea.com:8080/delphi/index.php?%5B%5B%A5%C7%A5%B6%A5%A4%A5%F3%A5%D1%A5%BF%A1%BC%A5%F3%5D%5D
0302デフォルトの名無しさんNGNG
XP真乳フェストって言うコンポーネント貼り付けてみたら
パネルとかが透明になってしまった。
コンポ削除したけど元に戻らないのはなぜ?
0303デフォルトの名無しさんNGNG
>>301
そちらはまともに保守されてないのでこっちがいいかも。
ttp://kakinotane.s7.xrea.com/dp/dp.html
0304303NGNG
既出だったね。すまん。
0305278NGNG
多様なご回答,ありがとうございます.

当方,Application ウィンドウの概念を理解していなかった様です.
動作の実現が難しいとしても,疑問は解決する事が出来ました.
どうも,有難うございました.
0306デフォルトの名無しさんNGNG
Windows 2003 serverにMultilingual Interface Pack日本語を被せて、
Delphiで作成したアプリを実行しましたが、
Quick Reportのプレビュー画面が、文字化け化けになってしまいました。
どうすれば対処出来るんでしょう。
0307デフォルトの名無しさんNGNG
>>306 ボーランドにバグレポートを出しつづけましょう。
0308デフォルトの名無しさんNGNG
デザインパターンとライブラリって何が違うんだ?
0309306NGNG
>>307
そんなことしても、何の解決にもなりません。
Quick Reportのプレビュー画面のフォントを調べたいんですが、
VCLフォルダにソースが無い。
0310デフォルトの名無しさんNGNG
> デザインパターンとライブラリって何が違うんだ?

まったくちがう。なにが同じなんだ?
0311デフォルトの名無しさんNGNG
http://hp.vector.co.jp/authors/VA009712/take/delphi/pointer.htm
ここに書いてある通りに追加するときにNewでメモリ領域を確保して
ListViewのOnDeletionでDisposeしているのですが
「〜回メモリーを解放し忘れています」とMemCheck2.0の中の人が怒ってしまいます。
どっちを信じるべきですか?
0312デフォルトの名無しさんNGNG
自分を信じること!
0313デフォルトの名無しさんNGNG
しょ(´・ω・`)ぼ(´・ω・`)ー(´・ω・`)ん
0314デフォルトの名無しさんNGNG
これは、前にも話題になったけど

Dispose(Item.Data);

ではダメで、New() するときに使った型にキャストして Dispose() する必要が
あるんじゃなかったか。

0315デフォルトの名無しさんNGNG
そのサイトの例だと

Dispose(PFavData(Item.Data));

だと。
0316311NGNG
>>315
ウホッ、イイ男!!
0317デフォルトの名無しさんNGNG
管理人に通報しておいてよね!
0318311NGNG
>>317
パリ旅行の話ばかりで書き込みづらい(´・ω・`)
0319デフォルトの名無しさんNGNG
>>318

http://pc2.2ch.net/test/read.cgi/tech/1076610073/311-316

を貼っておくといいのでは?
0320デフォルトの名無しさんNGNG
「ヲッチ先、荒らさず、マター…」

ヲッチ先じゃねーや(藁
0321275NGNG
印刷のイメージは

QuickReport1.QRPrinter.Canvas

ここにあるのでしょうか?

どなたかお願いいたします。
0322デフォルトの名無しさんNGNG
印刷のイメージは印刷するまでどこにもありません。
Printer.Canvas は印刷するデバイスコンテキストをカプセル化したもので
印刷イメージではありません。
0323239NGNG
とても遅くなってしまいましたが、レスしてくださった方ありがとうございました。
>241 の方法を試してみましたが上手くいかず、>242 の方法を取り入れた
折衷案で、どうにかエラーが出ないようにしました。

1.新ボタンクリック→2.不可視に→3.次の新ボタンクリック
→4.直前に不可視にしたボタン破棄→5.今クリックしたボタンを不可視に→3へ

と言った方法です。
アプリケーションを作る時にこの方法が耐えられるかどうか分かりませんが、
とにかくすっきりしました。ありがとうございました。

また、質問した時の廃棄のコードは>251と全く同じでした。
0324デフォルトの名無しさんNGNG
>241 の方法を試してみましたが上手くいかず

これは不思議です。コードをしめしてくださいませんか。
0325311NGNG
>>319
通報しますた
0326デフォルトの名無しさんNGNG
質問があります。
西暦の4桁とその月だけほしいときは、どのようにすればいいですか?
0327デフォルトの名無しさんNGNG
ヘルプの”日付時刻ルーチン”を辿って組み合わせを考えてみたら?
0328326NGNG
>>327

組み合わせてできました。ありがとうございました。
0329デフォルトの名無しさんNGNG
電卓のソフトを作ってみてるんですが、Edit右寄せと数字しか入らないようにするやり方を教えてください。
0330デフォルトの名無しさんNGNG
数字しか入らないようにするには MaskEditを使えばいいでしょう。 右寄せは

TEdit/TMemoがラップしてるのは Windows EDITコントロールです。
そこで、Delphi-CDROMに付属している日本語WinAPIヘルプから
"コントロールの概要" "エディット コントロールの概要"を見てみましょう。
ES_RIGHTというスタイルを選べば、右寄せに出来る事が判るでしょう?

後は、
TCustomMemo.CreateParams を眺めて
TMaskEditにこの機能を付ければよいのです
0331デフォルトの名無しさんNGNG
>ES_RIGHTというスタイルを選べば、右寄せに出来る事が判るでしょう?

Win95,98,Me では一行エディットで右寄せにできません
0332デフォルトの名無しさんNGNG
ん?98 以降はサポートしていると思ったが。
0333デフォルトの名無しさんNGNG
>>323

  { Private 宣言 }
 public
  procedure WMUser(var Msg:TMessage);message WM_USER;
  procedure ButtonClick(Sender:TObject);
 end;

....

procedure TForm1.ButtonClick(Sender: TObject);
begin
 PostMessage(Handle,WM_USER,WPARAM(Sender),0);
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 with TButton.Create(self) do begin
  Parent := self;
  Left := X;
  Top := Y;
  OnClick := ButtonClick;
 end;
end;

procedure TForm1.WMUser(var Msg: TMessage);
begin
 TObject(Msg.WParam).Free;
end;

でいいのでは?
0334デフォルトの名無しさんNGNG
>>332

Windows 95, Windows NT 4.0 だけダメなようです。すみません。
ちなみに Windows の電卓の入力・表示部分はスタティックコントロール
ですね。
0335デフォルトの名無しさんNGNG
改行の入力を無効にしてMemoを一行の高さで表示、というのはどうだ。
0336デフォルトの名無しさんNGNG
>>331
ES_MULTILINE もついでに指定してしまえばいいじゃないか。
0337デフォルトの名無しさんNGNG
よく使うんだからフリーのコンポ使えよ・・・
0338デフォルトの名無しさんNGNG
なんでもフリーのコンポでできることはフリーのコンポつかえよー、ってか。
プログラミングよりコンポ探しの方法を鍛えろよ、ってか。
お気楽プログラミングで行きましょう、ってか。
Delphi っていいなぁーーー
0339デフォルトの名無しさんNGNG
なんでもとは言ってない、よく使うんだから、と言っている

おまいはまず脳を洗え
0340デフォルトの名無しさんNGNG
よく使わないのはフリーのコンポを使わないのはどうして?
それに右寄せエディットって、どうしてよく使うとおもうの?
0341デフォルトの名無しさんNGNG
電卓ばかり作ってるんじゃないのー(藁
0342デフォルトの名無しさんNGNG
よく使うんだから電卓コンポつかえよ・・・
0343デフォルトの名無しさんNGNG
簡単なお絵かきソフトの実験をしています。
よくPhotoShop等であるような、画像上をマウスでドラッグすることで、
点線の四角形で画像の範囲を選択するような動作を実現したいのですが、
点線の描画(というか消去の仕方)で悩んでいます。

いま検討しているのは、レイヤーのように
TImageを2枚重ねて1枚目に実際の絵、2枚目に選択範囲の
点線を表示させ、範囲のTRectを1枚目に送って処理する方法が一つ。
この場合はドラッグされるごとに消去→点線の描画をくり返します。

もう一つはドラッグ時に元の画像をコピーしておき、
ドラッグされるごとに、元の画像をTImageにコピー→点線の描画を
繰り返す方法です。

しかし、前者の方法だとcanvasを利用して描画すると透過しなくなってしまい、
後者だと画面のちらつきが激しくなります。

このような動作を実現するためには、どのような処理を行えばいいの
でしょうか。よろしくおねがいします。
0344デフォルトの名無しさんNGNG
よく使われるテクニックは XOR 描画ですね。
XOR を2度すると元に戻るという原理を使うわけです。
Penに pmXor を使ってドットを2度描いてごらんなさい
0345デフォルトの名無しさんNGNG
16進数RGB値から色を表示する単純なプログラムを作ってます。
そこで、0〜9、A〜F以外の文字があった場合エラーメッセージを出したいんですが、
この場合どうしたら効率いいでしょう?
0346デフォルトの名無しさんNGNG
>>345
効率を考えるようなところじゃないでしょう
1、
for i=1 to length(str) do if not (str[i] in ['0'..'9' , 'a'..'z' , 'A'..'Z'] ) then begin エラーです ; break;end;

2、
try
StrToInt('$'+str);
except エラー;end;

とか、何でも
0347323(239)NGNG
>324 >333
Σ(゚Д゚ )...すいません、今やったら出来ました。
>241 でも >333 でもエラー出ませんでした。
前にやった時は当たり前のようにエラーが出たんだけど、なんでだろ_| ̄|○

ありがとうございました。
役に立つか分かりませんが、後の人のために一応ソース出しておきます。
まあ、>241,>333 とほとんど同じですが。
0348323(239)その1NGNG
  { Private 宣言 }
  index : integer;
  procedure NewButtonClick(Sender:TObject);
  procedure WMUser(var Msg:TMessage);message WM_User;

.....

procedure TForm1.Button1Click(Sender: TObject);
var
 NewButton : TButton;
begin
 index := index + 1;
 NewButton := TButton.Create(self);
 with NewButton do
 begin
  Top := Button1.Top + (Button1.Height + 5) * index;
  Left := Button1.Left;
  Height := Button1.Height;
  Width := Button1.Width;
  Caption := '新ボタン' + IntToStr(index);
  OnClick := NewButtonClick;
  Parent := Self;
 end;
end;
0349323(239)その2NGNG
procedure TForm1.NewButtonClick(Sender:TObject);
begin
 ShowMessage('このボタンを破棄します');
 PostMessage(Handle,WM_User,WPARAM(Sender),0);
//TButton(Sender).Free とすると、消えるけれどエラー
end;

procedure TForm1.WMUser(var Msg: TMessage);
begin
 TLabel(Msg.WParam).Free;
end;
0350デフォルトの名無しさんNGNG
Delphiでウィンドウにテーブルのコントロールを表示したいのですが、コンポーネントは何を使えばいいのでつか。
テーブルは10列×200行くらいの大きさで、内容は自分で設定します。
JavaのJTableみたいに値を設定する感じでやりたいのです。
コンポーネントと値の設定方法など誰か教えてください。
0351350NGNG
自己レス
StringGridのようですね。
とりあえずやってみまつ。
0352デフォルトの名無しさんNGNG
>>349
> TLabel(Msg.WParam).Free;

じゃなくて

TObject(Msg.WParam).Free;

にしてください
0353デフォルトの名無しさんNGNG
begin
sy := StrToInt('ComboBox5.Items');
sm := StrToInt('ComboBox4.Items');
sd := StrToInt('ComboBox3.Items');
Memo1.Lines := IntToStr('10000 * sy + 100 * sm + sd ');
end;
とすると、
指定された引数で呼び出すことの出来るオーバーロード関数'IntToStr'が定義されていません
というエラーが出たのですが、これはどういう意味なのでしょうか?
いろいろ調べてみたのですが分かりません。
0354デフォルトの名無しさんNGNG
''で囲まれたものは文字列。中身の解釈はされない。
だから'ComboBox5.Items'は項目(の個数)とは解釈されないし
'10000 * sy + 100 * sm + sd 'が計算されることもない。
Memo1.Lines.Add( IntToStr(ComboBox5.Items.Count * 10000) );
と書くべし。
0355デフォルトの名無しさんNGNG
StringGridで選択された一行を削除する方法を教えてください

DeleteRow?は使えないようです(使い方を知らないだけかも

選択行以降を一つづつ上に繰り上げて、RowCountを一つ減らすしかないのかな
0356デフォルトの名無しさんNGNG
派生クラスを作るとき、メソッドにoverrideって書いても書かなくても
同じ結果になっているように見えるのですが、何が違うんですか?
0357デフォルトの名無しさんNGNG
初心者らしいいい質問だ。次。
0358デフォルトの名無しさんNGNG
overrideし忘れると基底クラスの変数から呼び出したときにうまく呼び出されなくなるよ。
0359デフォルトの名無しさんNGNG
もうちょっと書いてやれよ。

overrideしないと、継承されない。そのクラス独自のメソッド扱いになる。
派生元になった関数が呼ばれないってこと。
その結果、>>358
0360275NGNG
>322
以下のコードでPreview画面がとれるので何か方法があると思っているのですが?
Canvasなどのグラフィック関係がよくわからなくて。
QuickReportの良い資料はないでしょうか?
http://www.qusoft.com/ を見てみましたがよくわかりません。

この処理が出来ると、Del8Ent買って貰えるんです。
お願いします、どなたか教えてください。

procedure TForm1.Button1Click(Sender: TObject);
begin
QuickReport1.Prepare;
QRPreview1.QRPrinter := QuickReport1.QRPrinter;
end;
0361デフォルトの名無しさんNGNG
clientdatasetで質問

既に使っている(というか使い終わった)clientdatasetを違うレコードを持った
データセットで再利用したい時はどうすればいいの?
っていうかclientdatasetを解説した本なりサイトがあったら教えて下さい
ヘルプも見てますが分かりずらいよ…
0362デフォルトの名無しさんNGNG
>>355
StringGridの派生クラスを作ったほうが早い。
下のURLにある「StringGrid に関する Tips」を参考にどうぞ。
ttp://hp.vector.co.jp/authors/VA015850/delphi/tips/
0363デフォルトの名無しさんNGNG
何を買ってもらおうとかまわんが、
まじめに実装するとなるとWinの印刷プレビューは簡単じゃないぞ。
メタファイルのCanvas経由でやるのが常道かな。
中村の里にDHGLてのがソース付きであるから、それを参考に。
とりあえず、本は買っとけ。とても参考になる。
0364デフォルトの名無しさんNGNG
>>358-359
とても参考になりました。
0365デフォルトの名無しさんNGNG
QuickReportは印刷前にその情報をメタファイルで生成する。
これは印刷用と表示用を同じように扱う為だ。

そしてそれはQRPinterも一緒。TPrinterとの大きな違いは
描画前にNewPageしろって事ぐらいかな。
0366デフォルトの名無しさんNGNG
メソッドをoverrideしないと静的メソッドとなり単に上位クラスの
メソッドを隠すだけ。VMTには置かれない。VMTのメソッドに
無いと言う事は多鯛が扱えない。多鯛はデザパタの基本みたいなもんだから
それらの技巧が使えない。差し替えが出来ないのであらゆる面で固定的
になる。不便。
0367デフォルトの名無しさんNGNG
>>344
できますた!
ありがとん!!
0368デフォルトの名無しさんNGNG
>>355
MoveRowで最終行と取り替えて行数を1減らす。



というのを実装したDeleteRowというメンバがTCustomGridにある。



protectedで。
0369デフォルトの名無しさんNGNG
日系ソフトウエアのC#の記事見てたら、見た目がカレンダーコンポと
同じ物を使ったサンプルを見つけたんだが、何で?
DelのカレンダーってWindowsに備わっている物を使っているの?
0370デフォルトの名無しさんNGNG
>>369 yes
0371343NGNG
何度も質問すいません

今度はTImage上にテキストを描画させたいのですが、
この場合はどうすればいいでしょうか。

よくあるのが、IME(ATOKだけかもしれないけど)のように
文字を入力できるちっこいウィンドウというか四角いスペースを
作成して、その中で編集、確定時にTImageに描画するものや、
PhotoShopのように、直接、TImageに描画、編集できるものが
あるようですが、これも基本的にxorの手法なんでしょうか。

クリックで表示開始位置決定、キー入力で文章編集、エンター後に
確定で描画という処理ができればいいのですが、
何かうまい方法ってあるのですか?
0372デフォルトの名無しさんNGNG
>>371
おいらだったら
クリックしたら普段は非表示にしてあるTEditをそこへ移動して表示し
エンターしたらまたEdit1を非表示にして
中身をTImageへ描画すると思うよ。

方法は他にも色々ありそうだけど
(複数行ならTMemoにする手もあるし)
0373デフォルトの名無しさんNGNG
× Edit1
○ TEdit

TEditもTImageも正確にはそのインスタンスということになるけどね。
0374デフォルトの名無しさんNGNG
>>371
文字データを持たせる為の Objectを作っておくといいでしょう。
TPersistent継承にしてストリーム入出力出来るようにしてさ、

そして、その文字データが収まるサイズのBITMAPをメンバーに持たせておて
描画する時はTImage直接ではなく、TImageと合成して描画させるわけです。

そして保存時に、その合成結果を保存出来るような仕掛けにしておけば、
自由に文字位置も変更出来るし、文字内容も変更出来るでしょ?
0375デフォルトの名無しさんNGNG
TStringGridのRowsとかColsとかって型はTStringsじゃん。
TStringsのメソッドで消せばグリッドの表示にも反映出来るんじゃないの?
0376デフォルトの名無しさんNGNG
Delphiで動的に配列を作ることはできるのでしょうか?
doubleの配列を作りたいのですがなかなか。。。。

もしできるのでしたら配列の上限は何個なのでしょうか?
あと、最後に配列がいくつなのかをCountするStringlistのCountと同じ機能を
もった物があったら教えてください。
0377デフォルトの名無しさんNGNG
>>376
ヘルプでキーワード「動的配列」
0378デフォルトの名無しさんNGNG
> TStringsのメソッドで消せばグリッドの表示にも反映出来るんじゃないの?

一列まるごと、一行まるごと削除するのに、TStrings の Free をつかうんですか?
0379デフォルトの名無しさんNGNG
>>378
DeleteかClearでしょ
0380デフォルトの名無しさんNGNG
文字列を削除すると StringGrid にも反映されるんですか。文字列ではなく、行または列を削除したいんです
0381375NGNG
やってみたが駄目っぽいな。
0382デフォルトの名無しさんNGNG
>>380
なるほど…
Freeだとアクセス違反がでるし
Delete、Clearはそもそも行や列には作用しないと…

やっぱり、しこしこコードを書くしかないのかな
↓こんな感じで
procedure TForm1.mnuDeleteColClick(Sender: TObject);
var
i: Integer;
nDeleteBegin: Integer;
nDeleteEnd : Integer;
nDeleteCount: Integer;
nMoveCount : Integer;
grTemp: TGridRect;
begin
grTemp:=StringGrid1.Selection;
nDeleteBegin:=grTemp.Left;
nDeleteEnd :=grTemp.Right;
nDeleteCount:=nDeleteEnd-nDeleteBegin+1;
nMoveCount :=StringGrid1.ColCount-nDeleteEnd+1;
for i:=0 to nMoveCount-1 do
StringGrid1.Cols[nDeleteBegin+i].Assign(StringGrid1.Cols[nDeleteBegin+i+nDeleteCount]);
StringGrid1.ColCount:=StringGrid1.ColCount-nDeleteCount;
end;

…鈍臭。
0383デフォルトの名無しさんNGNG
>>382
それをまず手続きとして書き直しなさい。
0384デフォルトの名無しさんNGNG
>>383
というより
TStringGridを拡張した方がいいべさ
0385デフォルトの名無しさんNGNG
borlandのdelphi6personalのライセンスキーの取得っていうのはBJMNとやらに
メアド登録した後待ってればいいんですか?
0386デフォルトの名無しさんNGNG
とりあえず待っておけばいい
0387355NGNG
>>362
こういう方法があるんですね…。
かなり参考になります。
サンクス

>>368
か…かしこい…。
こういうシンプルな考え方が出来るようにならないといけないすね
でもソートされていない今の順序をなるべく保持しておきたいと
思っているので、ちょっと今回のには向かないかも
0388デフォルトの名無しさんNGNG
>>386
そうします。
ありがとうございます。
0389368NGNG
>>387
「入れ替える」んじゃなくて指定行を最終行の後ろに移動、だね。
日本語不自由でスマソ。
試しにフォームにStringGridを貼ってOptionsの中のgoRowMovingをTrueにして
FormCreateで各行に適当な値を放り込んで実行、行の左端をつまんで別の行で
離すと、、、これがMoveRowの動作。
0390デフォルトの名無しさんNGNG
ライブラリパスを一度に切り替える方法はありませんか?

いくつかのライブラリをインストールして使わせてもらっています
似たようなジャンルのライブラリだとどうしても名前が衝突してしまうようで
その都度ライブラリパスを削除したり追加したりして対処してきました

別のプロジェクトなので同居する必要はありませんが
編集するプロジェクトを変更するたびにライブラリパスを編集するのは大変です
上手い方法はないでしょうか?
0391デフォルトの名無しさんNGNG
プロジェクト->オプション->ディレクトリ 検索パスを設定
0392デフォルトの名無しさんNGNG
>>390
usesでパス指定するとか
0393390NGNG
うまくいきました
ありがとうございました
0394デフォルトの名無しさんNGNG
http://www.namakoworld.com/lowtech/d6tips/dtips4.htm
これもをもとにmanifest.res作ってみたのですが、
たったの32byteのファイルになってしまいました。

別にこれでも大丈夫なのでしょうか。。。
教えてくださいまし_| ̄|○ |||
0395385NGNG
待てど暮らせどメールが来ませぬ(´・ω・`)
0396デフォルトの名無しさんNGNG
のんびり待てばいいよ。なくても普通に起動できるんだから。
0397デフォルトの名無しさんNGNG
>>395
むしろ待たなくていいよ。他にやることあるでしょ?
なかったら・・・・ごめん
0398385NGNG
>>397
ごめん、ないんだ
0399デフォルトの名無しさんNGNG
辞書順でどちらの文字列が先に来るかを調べるにはどうすればよいですか?
半角英字だけでかまわないんですが
0400デフォルトの名無しさんNGNG
Create時にSelfを指定出来る物は明示的に
自分でFreeしなくて良いのでしょうか?
それとも念のため自分でFreeしたほうが良いのでしょうか?
0401デフォルトの名無しさんNGNG
質問なんですが
PostMessageで
procedure(var Msg : TOriginalMsg);
にメッセージを送る場合
どのようにパラメーターを送れば良いのでしょうか?
0402デフォルトの名無しさんNGNG
>>399 AnsiCompareStr AnsiCompareText AnsiStrComp AnsiStrIComp AnsiStrLComp
とかその辺。 どう使うかはまだヨクワカラン。
0403デフォルトの名無しさんNGNG
>>401
WM_?
0404デフォルトの名無しさんNGNG
>>401
procedure musumesanwobokunikudasai(var Msg: TOriginalMsg); message WM_PIYOPIYO;
となっていたら
PostMessage(xxx.Handle, WM_PIYOPIYO, wParam, lParam);
0405吐駄っちNGNG
>>401
投稿前に、捜してみましょう

http://www.goggole.com (w

家族に不幸があったため 2ch 活動を自粛しています。m(_≡_)m
---- (-_-)(-_-)(-_-) THE REAL BAKA (-_-)(-_-)(-_-) ----
At the beach, The Real Baka is the one drawing fool in the
sand.
吐駄 庇出於
0406デフォルトの名無しさんNGNG
>>404
WM_PIYOPIYOってどんなときに送られてくるメッセージでしか?
やぱーり、CPUが逝っちゃってるときでしか?
0407デフォルトの名無しさんNGNG
戸田キター
0408デフォルトの名無しさんNGNG
>>394
おかしいと思いますよ。
ちなみに私が普段リンクさせてる manifest.res は 652 バイトです。
スペースや改行を削ればもう少し小さくなりますが、32 は小さすぎです。
0409デフォルトの名無しさんNGNG
>>400

コンストラクタでオーナーを設定できるものは、オーナーが自分が Free される
まえに Free してくれる。もちろん、コードで Free してもいいですが。
0410デフォルトの名無しさんNGNG
>>387
今更だけどGridの列単位でSringListに移してSringListのメソッドで消した後
Gridに戻すのを全列に対してループさせるってのもある。
0411デフォルトの名無しさんNGNG
というか、TStringGridはデータ構造とViewが一体になってるから、
これをフォームのイベントで処理しようとするとすぐに膨大にスパゲッティ化してしまうよ

そんなに使い込むならデータ構造は別にする方がいいと思うけどなあ
0412デフォルトの名無しさんNGNG
> そんなに使い込むならデータ構造は別にする方がいいと思うけどなあ

同感。で、表示は OnDrawCell でおこなう、と。
0413デフォルトの名無しさんNGNG
ってか、TDrawGrid でやればいいんだね
0414デフォルトの名無しさんNGNG
timageにファイルをドラッグして取得するには
どのhandleを取得すればいいの?
0415デフォルトの名無しさんNGNG
TImage は TWinControl の派生クラスではないので、ウィンドウハンドルはありません。
0416デフォルトの名無しさんNGNG
>>415
ガーーン
じゃあ、ファイルのドラッグはできないってことですか・・・・・
他に手段はあるのでつか?
0417デフォルトの名無しさんNGNG
パネルにのせて、パネルのハンドルを使えばいいじゃない
0418デフォルトの名無しさんNGNG
>>417
おお、賢いっす!ありがとう 調べてみまつ

fHandle := AllocateHWnd(WndProc);

とかやってますた ガックシ・・・
0419デフォルトの名無しさんNGNG
TImageが乗るのはフォームかパネルで窓ハンドルを持ってる。
だからTImageの親のハンドルを使うようにすればいい

こうすれば一般化、汎化出来る。
0420デフォルトの名無しさんNGNG
>>419
たとえばTImageを継承したコンポを作るときには、その親のHandleを取得して
ドラッグに対応すればいいってことでつか?
もしTFormだったらフォーム全体がドラッグ対象になるけど、それがイヤなら
ユーザ側でTPanel等の上に乗っけてくれってことですかね。

それともTPanelを継承したコンポにTImageを継承したコンポを乗っけて、
それはそれで一つのコンポとしてドラッグに対応したほうがよいでつ?

って自分でも何かいてるかわからんくなった・・・・スマソ
0421400NGNG
>>409
回答ありがとうございます。

タスクマネージャ見ながら実行>終了を繰り返して
メモリの合計(コミットチャージ)やハンドルの合計
とか見ていたのですが、自分でフリーしてもしなくても
殆んど変わらないので気になっていました。

と言うわけで、オーナーに任せることにします。
0422デフォルトの名無しさんNGNG
>>421
開放し忘れはMemCheckでチェック
0423デフォルトの名無しさんNGNG
>>420
色んな方法があるよね。

TPanel・TImageを継承したりすると、汎用性を逆に失ってしまう場合もあるから、
メッセージフックを使う非ビジュアルコンポーネントを作って、そっちで対応する方法が一番スマートかもね。
0424デフォルトの名無しさんNGNG
> メッセージフックを使う非ビジュアルコンポーネントを作って、そっちで対応する方法が一番スマートかもね。

いや、それでは解決しません。>>420 では、ドロップの範囲を限定したいのですから
ウィンドウの実体としても限定した範囲をもっていなければいけません。ですから
パネルに Image をのせて、パネルの WindowProc を入れ替えてサブクラス化する
のが現実的です。コンポにするとサブクラス化しなくてよいのでさらに良いです。
0425デフォルトの名無しさんNGNG
>>424
DragQueryPoint で位置をひらって、グラフィックコンポーネントがあれば
それを対象にするようにすればいいじゃない。

OnDrop( ctl : TControl ; fnames : const array of strings);
みたいなイベントで処理すれば
0426400NGNG
>>422
サンクス。
探してみます。
0427デフォルトの名無しさんNGNG
それか、その非ビジュアルコンポーネントでメッセージフックを使って

マウス位置のコンポーネントのZオーダから順に
そのコンポーネントのOnDragDropを呼び出して
Sourceに応答があればそれが実行して終了

ってのはどうだろ?
0428デフォルトの名無しさんNGNG
> DragQueryPoint で位置をひらって、

でもそれだと、ドロップ可能を表すカーソルの変化を阻止できないでしょう。
ユーザは、ドロップ可能なところにドロップしたつもりなのに、なにもおきな
かったら変に思うよ。
0429デフォルトの名無しさんNGNG
>>427

Delphi のドラグドロップじゃなくて、ファイラからのドロップファイルのこと
だと思うよ。だからハンドルが必要なんで。
0430デフォルトの名無しさんNGNG
>>428

ゴメン、キミ ズレてない? ねえ、ほんとはボクの事呼んだんだよね?

    Yes No
0431デフォルトの名無しさんNGNG
>>430

キミがずれてると思う。
0432デフォルトの名無しさんNGNG
>>429
だから、非ビジュアルコンポーネントで、フックするTWinControl先を指定すれば
そのTWinControlのハンドルで DragAcceptFilesして
なおかつ TWinControlのWndProcをフックしてWM_DROPFILES を自分で処理する

で、WM_DROPFILES を見つけたら DragQueryPoint で求めたマウス座標の位置の
コンポーネントのZオーダ順に
コンポーネント.OnDrop(コンポーネント , SendStr , x,y);
を送って、
SendStrのExecuteedプロパティがどこかでセットされたらそれで終了
最後までセットされなかったら、最初に CanExecute プロパティがセットされたものを再度呼び出す

TSendStrはファイル名と、Executed CanExecuteとかのプロパティを持たせると
0433デフォルトの名無しさんNGNG
> 非ビジュアルコンポーネントで、フックするTWinControl先を指定すれば

フックする TWinControl がないから苦労してるんでは。
たとえば、Form1 に Image1 をのせた場合、Form1 をフックするんでしょ?
DragAcceptFiles() は Form1.Handle にするんでしょ?
なら、Image1 が載ってないところでもカーソルはドロップ可能になるでしょ?
428 はそのことを言っている。
0434デフォルトの名無しさんNGNG
おお、いろいろありがとうでつ。

いま、TPanelの継承コンポを作って、その上にTImageを動的に作成し、
TPanelで拾ったFile名とDrop位置をTImageのプロパティで渡すように
作っていまつ。

ところでTPanelのコンストラクタで

constructor TTestPanel.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 TestImage := TImage.Create(Self);
 TestImage.Parent := Self;

と動的に作成しようとしているのに、コンストラクタでは自分自身の
TWinControlって取得できないんでつね。
Self.Nameをみても空白が帰ってくるぽ。このやり方も挫折かも・・・
0435デフォルトの名無しさんNGNG
>>403-405
wparamにどんな何を入れればいいかわからないのです
0436デフォルトの名無しさんNGNG
> コンストラクタでは自分自身の
> TWinControlって取得できないんでつね。

自分自身のインスタンス参照は self でしょう。コンストラクタではまだ Window
の実体が作られていないってこと? 

> Self.Nameをみても空白が帰ってくるぽ。

動的に作って試してますね? IDE からポトペタでは自動的に名前が付けられる
けど、動的に作成したら Name プロパティーは空白です。でもそれがどうして
必要なんですか?
0437デフォルトの名無しさんNGNG
>>434
非ビジュアルコンポーネントを載せる時の親にしてもいいし
載せた後で、プロパティで指定出来るようにしてもいいじゃないか
0438デフォルトの名無しさんNGNG
>>435

なんのメッセージを送るつもりですか?
定義済みの WM_XXXX なら Win32.hlp を見れば何を設定すべきか書いてあります。

そうではなく、自分が勝手に送る WM_APP だとか WM_USER なんかだったら、
自分で勝手に設定します。設定したくなければ WParam も LParam もゼロに
しておくこともできます。
0439デフォルトの名無しさんNGNG
> 非ビジュアルコンポーネント

派生クラスを作ってるんだからメッセージフックは自前でできるでしょう。
非ビジュアルコンポーネントを作る必要はないよ。
0440デフォルトの名無しさんNGNG
>>436
説明不足スマソ

上記で書いたようにTImageからはHandleが取得できないので、
TPanelのコンポにTImageを動的に作成して、ドラッグ&ドロップ
に反応したTPanelがTImage継承Classにプロパティとしてファイル名
を渡そうとかんがえたんです。TPanelはポトペです。

そこでTImageを動的に生成するためTPanelのCreateで
>>436のように生成しようと思ったら、TPanelが自身のTWinControlを
取得していないので、TImage.Parentを設定できずにCreateで動的に
生成できないってことなんです。
0441デフォルトの名無しさんNGNG
>>440
その方法でやるなら、
CreateWindowHandle を継承したら?
0442デフォルトの名無しさんNGNG
>>440
無理にTImageを載せた状態で作成させないでも
自分の子コントロールを>>432 で OnDropを呼ぶようにすればいいじゃないか
0443デフォルトの名無しさんNGNG
> TPanelはポトペです。

ポトペタで >>434 のようなコンストラクタを書くってのがわかりませんが?
TTestPanel クラスは TPanel の派生クラスですよね?
0444デフォルトの名無しさんNGNG
説明
Trim 関数は,指定された文字列 S から先頭部分および末尾部分の空白と制御文字を取り除きます。

ヘルプにこう書いてあるけど、ソース見た感じ空白しか取り除く気ないように見えるんだけど
0445デフォルトの名無しさんNGNG
>>444

S[I] <= ' '

こうなってるでしょ。制御文字は空白以下の文字コードなのよ
0446デフォルトの名無しさんNGNG
>>443
げっ・・そうなんでつか。
TPanelは派生Classでポトペです。TImageはTPanelのCreate時に
動的生成しようと思ったもので・・・・
0447デフォルトの名無しさんNGNG
>>446
それはOKだけど
動的生成させなくても、後から載せるのも大きな手間じゃないでしょ?
TImage以外のコントロールも載せられるしね
0448デフォルトの名無しさんNGNG
>>446

うーむ、もっとも簡単なのは、ただ、ドロップファイルを受け取って、イベントハンドラ
を呼び出すだけの TPanel 派生コンポです。そのイベントハンドラで、設計時にコードで
受け取ったファイルの処理をするようすればいいのでは。上に載せるのは TImage でも
TPaintBox でも TLabel でもなでもいいので、設計時にのせたらいいのでは?

コンストラクタでウィンドウハンドルが取れないことがあるのは事実で、たしか、
>>441 のようなメソッドをoverrideしてウィンドウが作られたあとにする必要が
あったと思います。わたしだったら、DropEnable:Boolean というプロパティーを
作り、デフォルトで false にしておき、オブジェクトインスペクタやコードで
true にしたとき、DragAcceptFiles() を実行するようにします。false のときも
そうですが。
あと、procedure WMDropFiles(var Msg:TWMDropFile):message WM_DROPFILES;
というメッセージ処理手続きをくっつけるだけです。
0449デフォルトの名無しさんNGNG
>>448
ありがとうございまつ。
すべてまとめて一つのコンポーネントができないかなぁと
欲がでまして・・・・

考え方は同じでつ。いま、IsDrop: Booleanプロパティを作って
それで実験したらできました。
ただ、自動でやりたかったので、AfterConstruction、
PaintWindow等のメソッドをoverrideしてやってみましたが、
両方とも難アリでした。
0450デフォルトの名無しさんNGNG
> PaintWindow等のメソッドをoverrideしてやってみましたが

すみません、忘れてしまったのですが

CreateWnd
CreateHandle
CreateWindowHandle

のようなメソッドを override して、さきに継承メソッドを実行したあとなら
Handle が有効になるのでした。
0451デフォルトの名無しさんNGNG
>>445
ありが
0452デフォルトの名無しさんNGNG
TThreadって何処でFreeすればいいのでしょうか?
Sleepするとメインスレッドは操作できないし
0453デフォルトの名無しさんNGNG
ポトペ/ポトペタって何でつか?
0454デフォルトの名無しさんNGNG
>>452
TThreadはExecuteが実行終了された時点で、デストラクタが呼ばれて、
その後に勝手に自分自身を破棄する。

>>453
パレット等からTButtonなんかを選択し、フォームに貼り付けるようにして
配置する方法。自分で作成する方法は動的生成といいまつ。
0455デフォルトの名無しさんNGNG
FreeOnTerminateがTrueならな
0456453NGNG
>>454
レスthanks!
ポトペ=ポト+ペ(=paste)
ポトペタ=ポト+ペタ(=「ぺた」っと貼る)
でつか?ではポトの語源は何でつか?
0457デフォルトの名無しさんNGNG
>>415,417,419,423,425,427,428,430,432,433
>>436,437,439,441,442,443447,448,450さま

ありがとう!できまつた!!

TPanel派生Classを作成し、その上にTImageを
動的に作るようにして、TPanelが受け取った
ファイル名等をTImageのメソッドに受け渡すことで
処理できました!

ExplorerからDragDropに対応したTImageコンポが
一つできました。後生まで大事に使いつづけます。

0458デフォルトの名無しさんNGNG
ぽっとりとぺたっと貼り付けるからw
0459453NGNG
>>458
ありが�d。
誰が使い始めたんだよ〜わかりにくいよー! ヽ(`Д´)ノウワァァン
0460デフォルトの名無しさんNGNG
ツルペタ、ツルペタうるせーよ。このロリコンが!
0461デフォルトの名無しさんNGNG
Button,Edit,Label,Panel,Combo,CheckBox,RadioGroup等のコンポを計15,6個
ほど使って作った物を1セットとし、それを縦40×横40で合計1600セットを
スクロールさせて使わなければならないのです。
win98では絶対無理そうなのでwin2k用にしますが果たして動くのでしょうか?

無理な場合、今考えてるのは概観はそのままでスクロールすると中の値だけ変えていき
ページ数を表示するような仕組みにしようかと思ってるんですが。
0462デフォルトの名無しさんNGNG
何か良い考えがあればよろしくお願いします。
0463デフォルトの名無しさんNGNG
出来る出来ないってだけなら動的に生成して試してみればいいだけでは。

>無理な場合、今考えてるのは概観はそのままでスクロールすると中の値だけ変えていき
>ページ数を表示するような仕組みにしようかと思ってるんですが。
動いたとしても無駄にメモリ食うから
最初からこっちにしておいたほうがいいと思うよ。
0464デフォルトの名無しさんNGNG
データの取り方や保存の仕方がわからんからなんともだけど、
ある程度、使用するコンポの数やデータの残し方が同じなら、
ページを切り替える(前、後ボタンとかつける)ようにして、
その都度、コンポをForm上に配置しますね。私なら。
0465デフォルトの名無しさんNGNG
>>457
公開すれ。
0466デフォルトの名無しさんNGNG
>>465
公開すれも何も、上のレスアンカー辿っていけば
簡単にできるわけだが・・・・
0467デフォルトの名無しさんNGNG
>>463-464
レスありがとう御座います。
500セット置いてみましたが使用に耐えませんでした。
メモリを大切にしながらページ切り替えで考えていきます。
0468デフォルトの名無しさんNGNG
>>467
つーか、その仕様を書いた奴、または要望を出した奴が
メモリを大切にしなさすぎ

仕様を書いた奴がいるなら、そいつがぬるぽ
要望を出した奴がいるなら、それを止められず要求定義
に書いた奴がぬるぽ
0469デフォルトの名無しさんNGNG
>>454-455
ありがとうございます
これで安心してTThreadを使えます
0470デフォルトの名無しさんNGNG
Threadを使いたいんですが、Helpを読んで自分でやってみたのですが、
エラーばかりで手も足も出ませんでした。
簡単な処理で結構ですのでやり方を教えてもらえないでしょうか?

Thread処理のやり方の例が載っているサイトを知っていたら教えてもらえるだけでも
結構です。

0471デフォルトの名無しさんNGNG
このスレ、最近すんごい速度なんですけど何で?
0472デフォルトの名無しさんNGNG
>>470
TThreadに関しては、Borlandが書いてるTipsだかFaqだか、
それが一番やくだつと思うけど。

エラーばかりでるってのは、SyncrinizedしないでForm上の
コンポをいじろうとしてるからじゃないかな。
0473デフォルトの名無しさんNGNG
>>470
まずどんなエラーが出るからだな。

コンパイルでエラーが出まくりなのか? 動いたけどエラーが出て止まるのか?
0474470NGNG
>>472
新規作成メニューからスレッドコンポを選ぶとUnit2と言うのが自動育成されますよね。

で、Procedure ****.Execute; ってところに
スレッドとして実行したいコードをここに記述って書いてるのでそこにコードを
書いているのですが、このスレッドをどうやって呼び出すかが分かりません。
Buttonを押したらこのスレッドのコードが実行されるようにするにはどうしたら
良いのでしょうか?

BorlandのTipsでぐぐったら
http://www.borland.co.jp/tips/delphi/dh004/thread_2.html
しか出てきませんでした。
0475デフォルトの名無しさんNGNG
hoge.Createに変数などを初期化するコード。
hoge.Executeにそのスレッドで実行したいコード。

Button.Clickでhoge.Create
これで、hogeスレッドが作成されて、Executeが実行される。
スレッドは自殺させるのが基本なので、開放忘れには注意な。
0476401NGNG
>>438
const
 WM_OriginalMsg = WM_USER+1;

 procedure OriginalMsg(var Msg : TOriginalMsg); message WM_Original;

type
 TOriginalMsg = record
  s : string;
  i : integer;
  p: Pchar;
 end;

PostMessage(Handle , WM_original ,0,0);

この場合どうやれば
procedure OriginalMsg(var Msg : TOriginalMsg); message WM_Original;
のMsgに代入出来るのでしょうか?
小出しになってしまいすいません
0477おNGNG
>>474

そのときに作ったTThreadからの派生クラスをCreateでインスタンス化すれば
Execute内のコードがスレッドとして実行されるわけだが、
その前にDelphiのヘルプに「クラスとオブジェクト」という項目があるから
そこを読んでクラスの扱いについて学んだ方が良いな。
0478デフォルトの名無しさんNGNG
>>474
先に1見たほうがいいよ
http://www.borland.co.jp/tips/delphi/dh004/thread_1.html
0479470NGNG
>>475
自殺させるのはどこに書けばよいのでしょうか?
あと、引数を渡すにはどうすればよいのでしょうか?

何から何まで聞いてすみません。検索しても出てこないっす。

>>477
読んでみます。

0480470NGNG
>>478さんのリンク先に書いてました。ありがとうございます。
0481デフォルトの名無しさんNGNG
出てこないってことは無い。
オレ自身も検索して調べてやった体験がある。
0482デフォルトの名無しさんNGNG
>>479
引数ってか、Create時に渡したいのか、execute時に渡したいのか、
それぞれで違うわな。

TThreadは、Execute内で勝手に動いてて、勝手に消滅するものだと
おもえばいいとかこうとおもったが、知らない人が誤解しそうなので
やめた。

メッセージを送って制御したり、プロパティを変化させて動作させる
まで自己回帰してるprocedureと表現しておこう。
0483デフォルトの名無しさんNGNG
>>479
引数…ていうかスレッドに処理させるデータをセットしたり、
スレッド処理の結果を受け取ったりするには、
それなりにクラスについて理解しなければならんのだよ。



0484デフォルトの名無しさんNGNG
>>476
Windowsメッセージというのはフォーマットが決まってるから、
受け取るレコードもTMessage型と互換の構造をしてないとダメよん。

TOriginalMessage = record
 Msg; Cardinal; { メッセージコード(WM_Original)がここに入る }
 i: LongInt; { wParamがここに入る }
 p: PChar; { lParamがここに入る }
 Result: LongInt; { 結果を入れる場所、結果イラネと思ってもコレ必須 }
end;

こんな感じかな。残念だけどsは入る余地ありません。
何かメッセージ以外の受け渡し方法を考えてください。
Postでポインタ渡すのは、変数の寿命をしっかり管理しないと危ないし。
0485デフォルトの名無しさんNGNG
WM_COPYDATA
0486デフォルトの名無しさんNGNG
>>470
自殺させるっていうのは、自分で後始末しろって意味。
スレッド内で確保したメモリとかは、他のスレッドからは開放できない。
開放しないでスレッドが消えるとメモリリークになる。
簡単なやりかたは、
Createでグローバルな変数を読んで
overrideしたExecuteにパラメータとして渡す。
Executeでは最初にTerminatedをチェック。
あとは処理をする関数を呼んでいって、最後にSync.する。

>>483のいうようにクラスについて理解していないと扱えないから、
まずヘルプを読みこむことを勧める。
0487デフォルトの名無しさんNGNG
>>スレッド内で確保したメモリとかは、他のスレッドからは開放できない。
氏ね
0488デフォルトの名無しさんNGNG
え?
出来るの?
0489ななしへたぐらま ◆XcB18Bks.Y NGNG
>>445
細かいことですがDelete(#$7F)というコードもありますね.
Trim関数ではこれは取り除かないみたいですが.
0490デフォルトの名無しさんNGNG
>>488
スレッドとはタスクと違って リソースを共有するのが特徴だからね。
0491デフォルトの名無しさんNGNG
>>489

意味がわかりません。
0492デフォルトの名無しさんNGNG
スレッドとプロセスを混同する香具師って多いね
0493デフォルトの名無しさんNGNG
2ch全体をOSとすると、

プロセス→板  スレッド→スレッド

つーことだな
0494デフォルトの名無しさんNGNG
Windows3.1の頃はDLLのグローバル変数経由でプログラム間で情報の共有が出来て楽しかったな・・・
0495デフォルトの名無しさんNGNG
>>494
いま情報共有できたら、
すごいウィルスとか、スパイウェアとかでてきそうな悪寒
0496デフォルトの名無しさんNGNG
>>484-485
いろいろありがとうございます。勉強になりました
WM_COPYDATAでやってみます
0497デフォルトの名無しさんNGNG
Delphiの勉強のためアドレス帳を作っています。
レコード型のTPersonDataというのを作って、
PersonDatas: array[0..1023] of TPersonData として情報を格納しています。
しかしこの方法では少人数の情報しか入力していなくても、
常に1024人分のメモリが確保されているという無駄があり、この方法は間違っているような気がします。
また、登録できる人数の限界もあります。
登録した人数分だけメモリを確保し、登録人数の制限をなくすにはどのようにすればいいのでしょうか。
0498デフォルトの名無しさんNGNG
TObjectListだとサイズを自動的に増やしていってくれる。
動的配列と言うのもあるけど(array of TPersonData)あまり賢くない。

しかしDatasはないだろ。
0499デフォルトの名無しさんNGNG
TListで管理するとか。
作るたびにNewでメモリ確保して
「汎用リスト」でググってみ
0500デフォルトの名無しさんNGNG
>>497
素直にデータベースを使う。
Delphiの真価はデータベースを使ってこそわかるから。
DelphiはもともとOracle(超有名データベース)との接続を
簡単にしようというのが目的で開発されたもので
GUIの作りやすさなどついでのことでしかないらしいよ。

データベースには本当はFirebirdを勧めたいけど
とりあえずならParadoxでも構わないと思うな。
0501デフォルトの名無しさんNGNG
俺もTListにポインタ渡してあげて管理すればいいとおもふ。
TAddList = class(TList);
public
 procedure AddData(PersonData: TPersonData);
 procedure DelData(PersonData: TPersonData);
end;
とか派生クラスを作ってかんりしちゃり
0502デフォルトの名無しさんNGNG
Halbowさんの汎用リスト応用しれ
0503デフォルトの名無しさんNGNG
Object格納するのにTObjectListではなくTList使うメリットってあるのか?
0504497NGNG
レスをくれた皆様、ありがとうございます。
まだいじったことない項目ばかりですがDelphi覚えるのも目的なので
全部やってみようと思います。
0505デフォルトの名無しさんNGNG
>>504
ソフト内でのデータの持ち方もそうだけど、
意外とファイルに保存する方法のほうが大事かもね。
まずはSaveとLoadの方法を決めてからでも
データの持ち方を考えるのは遅くないかも
0506デフォルトの名無しさんNGNG
ほう、record型ってObjectだったのか
0507デフォルトの名無しさんNGNG
違います。C++とは違います。

procedure TForm1.Button1Click(Sender: TObject);
type
TRec = record
 A:Integer;
end;

TCls = class
 A:Integer;
end;

var
  Rec:TRec;
  Cls:TCls;

  P1,P2,P3,P4:Pointer;
begin
  P1 := @Rec;
  P2 := @(Rec.A);

  Cls := TCls.Create;
  P3 := Cls;
  P4 := @(Cls.A);
end;

この場合、P1=P2だけど、P3<>P4
0508デフォルトの名無しさんNGNG
レコードの話か。だったらクラスにしとけ>>497
0509470NGNG
昨日スレッドについていろいろと教えてもらったものです。
色々やってるのですが、どうしてもうまくいきません。
ソース晒すのでおかしいところを教えていただけないでしょうか?

procedure TMainForm.AppMessage(var Msg:TWMDropFiles);
var
FileNames:array[0..255] of Char;
begin
DragQueryFile(Msg.Drop,0,FileNames,255);
DateAdd.Create(FileNames);    ←BooleanとArrayには互換性が無いと怒られる。
DragFinish(Msg.Drop);
end;

unit Unit2;
interface
uses
Classes,SysUtils;
type
DateAdd = class(TThread)
private
{ Private 宣言 }
FileNameA:String;
protected
procedure Execute; override;
constructor Create(FileName:String);
end;
implementation
{ DateAdd }

0510470NGNG
constructor DateAdd.Create(FileName:String);
begin
FileNameA:=FileName;
inherited Create(False);
FreeOnTerminate:=True;
end;

procedure DateAdd.Execute;
var
AList,BList:TStringList;
i:integer;
begin
AList :=TStringList.Create;
BList :=TStringList.Create;
FileNameA:=ExtractFileName(FileNameA);
try
if FileNameA<>'' then
begin
AList.LoadFromFile(FileNameA);
for i:=AList.Count -1 downto 0 do
begin
BList.Insert(0,'20'+Copy(FileNameA,1,2)+AList[i]);
end;
end;
BList.savetoFile('Finish'+FileNameA);
finally
AList .Free;
BList .Free;
end;
end;
end.
0511470NGNG
以上です。
あと、>>477さんが教えてくれたクラスとオブジェクトの項目はD6Proにはありませんでした。
0512デフォルトの名無しさんNGNG
みにくいよ!

type
 DateAdd = class(TThread)
 private
  { Private 宣言 }
  FileNameA:String;
 protected
 public
  procedure Execute; override;
  constructor Create(FileName:String);
end;

にしれ
0513470NGNG
>>512
そういう風にしたのですが、なぜかインデントが無くなってしまいました。
0514ぬるぽNGNG
>>513
よくみれ

type
 DateAdd = class(TThread)
 private
  { Private 宣言 }
  FileNameA:String;
 protected
 public  ←ココ
  procedure Execute; override;
  constructor Create(FileName:String);
end;
0515こーほーNGNG
 WM_DRAWCLIPBOARD、WM_CHANGECBCHAIN の2つのメッセージを処理することでクリップボードを監視
するコードを書いているのですが、Win98SE+Delphi5 でコンパイルしたものが WinXp では正常に動作
しません。98とXpでは上記の2つの処理に何か違いがあるのでしょうか?

procedure TForm1.FormCreate(Sender: TObject);
begin
 hNextChain := SetClipboardViewer(Form1.Handle);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 ChangeClipboardChain(Form1.Handle,hNextChain);
end;

procedure TForm1.ClipChange(var Msg: TMessage);
begin
 if Clipboard.HasFormat(CF_TEXT) then
 Memo1.Text := Clipboard.AsText;
 SendMessage(hNextChain,WM_DRAWCLIPBOARD,0,0);
end;

procedure TForm1.ChangeChain(var Msg:TWMChangeCBChain);
begin
 if Msg.Remove = hNextChain then begin
 hNextChain := Msg.Next;
 Msg.Result := 0;
 end else
 Msg.Result := SendMessage(hNextChain,WM_CHANGECBCHAIN,
 Msg.Remove,Msg.Next);
end;
0516デフォルトの名無しさんNGNG
ロケットマウスみたいなのは作れる?
0517デフォルトの名無しさんNGNG
>>515
アップデートのパッチはあててる?
0518470NGNG
>>514
できました。
すげぇ。スレッドもドラッグ&ドロップも初体験だったのに・・・
ここの過去ログと皆さんのおかげです。
ありがとうございました。
0519デフォルトの名無しさんNGNG
>>516
昔つくった
0520こーほーNGNG
>>517
> アップデートのパッチはあててる?
 うーん? どうだったかな。
 で、もう一度delphi5update.exeを実行する前にd5upatch.exeを解凍しよう
と思ったのですがなぜか「CRCが一致しない」という警告が出てしまいます。
0521デフォルトの名無しさんNGNG
>>513
「2ch でインデント ⇒ 全角空白に置き換える。」は、半ば常識。
>>512 のソースをメモ帳とかにコピペしてみるべし。

(逆に、そのままだとコンパイルできないから気をつけるべし。)
0522デフォルトの名無しさんNGNG
 test
&nbsp;
0523デフォルトの名無しさんNGNG
( ゚Д゚) ?

 
0524デフォルトの名無しさんNGNG
(゚д゚)              !!
0525デフォルトの名無しさんNGNG
俺からもDrug&Dropについてちょっと教えて
DelphiでButton1にDropしたらAの処理
Button2にDropしたらBの処理をさせることはできる?
別にButtonじゃなくてもPanelでも何でもいいです。

できるのだったらやりかたを教えて
0526ななしへたぐらま ◆XcB18Bks.Y NGNG
>>491
制御文字は文字コード0〜31($1F)と127($7F)に割り当てられているのですが,
Trim関数は両端の空白と制御文字を取り除くといっているものの,
コード127($7F)だけは取り除いていないということです.

もっとも私が見たのはDelphi5のソースなので
Delphi6以降は変わっているかも知れません.
0527デフォルトの名無しさんNGNG
>>522
まあ、空白を &nbsp; に置き換えるのが一番親切なんだけど、結構面倒かと。
(正規表現使えるエディタならそれほどでもないかな...。)
0528>>527NGNG
つーか、別にインデント部分に拘らずに、素直に全置換でいいんだったな。
0529デフォルトの名無しさんNGNG
>>525
自分のアプリ内で完結するならOnStartDragやらOnDragDropをヘルプで調べれ。
アプリ間ならSDKのRegisterDragDrop, DoDragDrop, IDropTarget, IDropSource, IDataObjectあたりを調べれ。
0530デフォルトの名無しさんNGNG
FAQにあるとおりの手段でD&Dさせて、
後でどのコンポーネントにD&Dされたか調べれば出来るかと。
両方とも、検索すれば見つかるぞと。
0531デフォルトの名無しさんNGNG
>>526
> コード127($7F)だけは取り除いていないということです.

制御コードに $7F が含まれていることをはじめて知りました。
たしかに Trim() は $7F は取り除いていませんね。
ありがとう
0532デフォルトの名無しさんNGNG
TControl.OnDragDrop イベントはコントロール個別に呼ばれるので
たんに個別に違った処理を書けばいいのでは?
0533デフォルトの名無しさんNGNG
$7Fってどんなん?googleっても出てこんがな。
0534デフォルトの名無しさんNGNG
これか
http://e-words.jp/p/r-ascii.html
0535デフォルトの名無しさんNGNG
取得したフルパスのexeファイル、起動しているかどうかを調べるにはどうしたらいいのでしょうか
0536デフォルトの名無しさんNGNG
Trimのコードってさ
TrimLeft(TrimRight(s))
じゃ駄目なの?
それともソースにあるほうが速いんかね?
while回数増えそうなんだけどな
0537デフォルトの名無しさんNGNG
>>535
ファイルを書き込みモードで開こうとしてエラーが出たら起動中とか
不適切
0538デフォルトの名無しさんNGNG
>>536
Copyが1回か2回の違い。

>>537
それでは起動しているどうかは解らないな。
0539デフォルトの名無しさんNGNG
ファイルのフルパスなんか分からなくても
Mutexの名前が分かれば、起動してるかどうか分かるのだけれど。
0540デフォルトの名無しさんNGNG
>>535
PsAPI
0541デフォルトの名無しさんNGNG
いかりやを生き返らせるコードを教えてください
でるふぁいで
0542デフォルトの名無しさんNGNG
>>541
procedure TNullpo.Nullpo();
begin
 try
 finally
  Self.Nullpo();
 end;
end;
0543453NGNG
>>541
procedure TForm1.Button1Click(Sender: TObject);
var
 Time:TSystemTime;
begin
 with Time do
 begin
  DateTimeToSystemTime(Now,Time);
  wDay:=19;
  SetSystemTime(Time);
 end;
end;
0544デフォルトの名無しさんNGNG
ワロタ
0545デフォルトの名無しさんNGNG
ネットワーク上のテキストデータをMemoに表示するにはどうしたらよいのですか?
ご教授願います。
0546デフォルトの名無しさんNGNG
>>545
ネットワーク上ってのが範囲が広すぎて答えようがないぞ

httpd、ftpd上ならIndyを使ってダウンロード
LANの共有フォルダなら、ネットワークドライブにして
そのまま普通にアクセスしてまえ。
0547545NGNG
>>546
返答ありがとうございます。
HTTP上のtextデータの事でした^^;
早速Indy試してみます。
0548デフォルトの名無しさんNGNG
なら、TIdHTTPだな。
GetでURLを指定してダウンロードするだけ。
データはTStringStreamにはき出されるから、WriteStringで
そのままTMemo.Textにはき出せばいけそう。

改行されなかったらデータをなめて改行コードごとにデータを
取り出してTStringListにいれれ。
0549デフォルトの名無しさんNGNG
C#ならたったこれだけ。
Console.WriteLine(
 new System.IO.StreamReader(System.Net.WebRequest.Create("http://www.2ch.net").GetResponse().GetResponseStream()).ReadToEnd());
0550デフォルトの名無しさんNGNG
>>549
なんか悔しいじゃんよw

Memo1.Lines.DelimitedText := #10#13;
Memo1.Lines.CommaText := IdHttp1.Get(URL);

Delならこうかな?
0551デフォルトの名無しさんNGNG
>>535
9x > CreateToolHelp32Snapshot/Process32First
NT > 上かEnumProcessesでプロセス列挙してEnumProcessModules/GetModuleFileNameEx
0552535NGNG
みなさんありがとう
やってみます
0553デフォルトの名無しさんNGNG
初めてIndyをインストールしてみた
コンポーネントがいっきに増えてビックリたまげた
0554デフォルトの名無しさんNGNG
デフォで入ってないのか?
Personalか?
0555デフォルトの名無しさんNGNG
>>554
ういっす
0556デフォルトの名無しさんNGNG
StringListの中身をもう一つのStringListにコピーするのはどうするの?
A:=TStringList.Create;
B:=TStringList.Create;
try
A:=B
とやったけど駄目だった。
0557デフォルトの名無しさんNGNG
A.ASSIGN(B)
0558デフォルトの名無しさんNGNG
Thanks
0559デフォルトの名無しさんNGNG
起動時にTStringsにファイルを読み込みたいのですが
TextBuffer.LoadFromFile('C:\sage.txt');
とするとエラーになります。
TextBufferはClass Form1のprivateに宣言しています。
どうすればうまくいくのでしょうか?
0560デフォルトの名無しさんNGNG
>>559
TextBufferはTStrintList?
TStringは、そのままじゃインスタンスとして使えないので、
TStringListを使うべし。

それ以外なら、Createしていないとか、ファイルがないとか、
誤字脱字があるとか、具体的なエラーがわからないので、
なんともいえん。
0561デフォルトの名無しさんNGNG
>>559
TStrings は抽象クラスだから直接インスタンス化してはいけない。
でも LoadFromFile は TStrings で実装されてるから今回のエラーとは
関係ないと思う。
エラーの内容が書かれてないので何とも言えないけど、Create せずに
使ってるってことないよね。
0562デフォルトの名無しさんNGNG
ファイルの指定に間違いがありました
無事読み込めました
ありがとうございました。
0563デフォルトの名無しさんNGNG
時間の処理をしているのですが、TDateTime関数の中に1を入れてそれから
EncodeTime(0,15,0,0)を減じていくと、0になるはずなのに、
1e-17と言う値が入ってしまいます。
たぶん四捨五入で一番下の桁が残っているのだと思いますが、
これを回避する方法は無いでしょうか?

0564563NGNG
すみません追記です。
基本的に分単位の処理しかしません。
秒以下はいらないのですが、1mSが邪魔をしていて不等号での判断が出来なくて困ってます。
0565デフォルトの名無しさんNGNG
無理です。
x86の仕様上浮動小数点演算では必ず誤差が出るので直接 = で評価してはいけない。
YearとかDecodeDate等でIntegerに変換するには問題ない誤差ない、変換してから比較するしかない。
0566デフォルトの名無しさんNGNG
BCD演算やればいいと思うが、Delphiではできるの?
0567デフォルトの名無しさんNGNG
>>564
浮動小数点使ってて、1ms が問題となるような判断する方がどうかしている。
分までしか必要ないなら、分をベースにした整数演算すればいいだけ。
0568デフォルトの名無しさんNGNG
>>566
インラインアセンブラ使えば出来ないこともないが…
ちなみにCurrency型という物もある。整数以下の誤差が出ない。
0569デフォルトの名無しさんNGNG
> 浮動小数点演算では必ず誤差が出るので直接 = で評価してはいけない。

これは常識でしょ。こんなの知らないなら、プログラミングなんかの話はできないでしょ。
0570デフォルトの名無しさんNGNG
有限のビット数ですべての数を正確に記述出来るわけないのは、ちょっと考えれば
すぐに分かると思うんだがなー。
0571デフォルトの名無しさんNGNG
>>569

そうでもないよ。
漏れの取引先のとある社員は、入社8年目にして知らなかったし、
今年の新入社員4人のうち2人は、コンピューター専門学校のくせにVBすらも使えなかった。




………_| ̄|○
0572デフォルトの名無しさんNGNG
情報系の専門学校なんて基本情報の資格とって終わり
ゲーム系ならツールの使い方覚えて終わり
他の職種と違って専門学校のメリットはない
0573563NGNG
>>567
分をベースにした整数演算ってどうすればよいのでしょうか?
いくら考えてもTDateTime型は整数部は日に該当するので使いかたは分からないので。
0574デフォルトの名無しさんNGNG
>>572
浮動小数点の誤差は基本情報に出てくる問題だよ。
あんた知らないで資格試験バカにしているだけだね。
0575デフォルトの名無しさんNGNG
プログラミング系はいくら資格取っても頭が悪かったら
飯食っていけんぞよ。

独立して一人でぼろ儲けしている奴を何人か知ってる。
0576デフォルトの名無しさんNGNG
>>573
DecodeDateがあるならDecodeTimeも有ると連想できませんかね?
0577デフォルトの名無しさんNGNG
>>570
あんたちょっと普通からずれてるよ。
有限のビット数でそのビットサイズに入りきらない大きい値が表せないのは分かるが、
ビットサイズに入る値がとびとびの値で正確に表せないなんてちょっと考えても分からない。
0578デフォルトの名無しさんNGNG
>>575
資格取っただけで飯が食える職業なんて無いんだが。
あんたがやっているのは資格を自分で過大評価して、
そんなに評価は高くないと自分で普通の評価に戻しているだけ。
0579デフォルトの名無しさんNGNG
> ビットサイズに入る値がとびとびの値で正確に表せないなんてちょっと考えても分からない。

そうか? 0と1の間には無限個の数値があるんだが?
0580デフォルトの名無しさんNGNG
> 有限のビット数でそのビットサイズに入りきらない大きい値が表せないのは分かるが、

数値の大小と、浮動小数点の誤差は直接関係ない。
0581デフォルトの名無しさんNGNG
>>579
小数点以下一桁と限定すれば10個しかない。
0582デフォルトの名無しさんNGNG
>>580
それはちょっと考えただけでは分からない。
0583デフォルトの名無しさんNGNG
>>573
普通に全部自前で計算すればいいだけだと思うけど。
例えば、一時間三十分後の値なら、1 * 60 + 30 = 90 を足せばいい。
とは言っても、扱う範囲が年月日に及ぶとうるう年の扱いが大変だから、そこは TDate 型で処理すればいいと思う。

>>577
例えば、0.0 と 0.1 は表せても、1/3 は有限の桁数だと正確に表せないだろ。
0.1 の二進数表現がこういう状況になる (処理系が多い。)
0584デフォルトの名無しさんNGNG
> それはちょっと考えただけでは分からない。

そうか、きみのちょっととオレのちょっとは違うみたいだな。
プログラマならどっちが「普通」かな。
0585デフォルトの名無しさんNGNG
0.1、0.2、0.3、0.4、0.5、0.6、0.7、0.8、0.9
という数が代入も表示もできるのに、
実際はこの値でメモリに入っているわけではないと
いうのは普通に考えても分からない。
0586デフォルトの名無しさんNGNG
あなたは、なぜ浮動小数点と言うのか考えた事はありますか?
0587デフォルトの名無しさんNGNG
>>584
プログラマの定義が無いのでその質問は意味が無い。
0588デフォルトの名無しさんNGNG
>>586
君がなぜ浮動小数点というのかを考えたのはいつかね?
プログラミングを始める前ではなかろう。
0589デフォルトの名無しさんNGNG
> 小数点以下一桁と限定すれば10個しかない。

そうなんだよ。有効桁数を考慮して、浮動小数点におけるイコールとはどういううことか
を考えてプログラムする必要があるんだよね。だから、

> 1e-17と言う値が入ってしまいます。

なんていうう質問は、ほんとはないはずなんだよ。
0590デフォルトの名無しさんNGNG
>>589
だからと結論が全然結びついてないよ。
まず浮動小数点というのを知らないということを前提に考えな。
0591デフォルトの名無しさんNGNG
> プログラマの定義が無いのでその質問は意味が無い。

プログラミングするのがプログラマなら、普通のプログラマと
浮動小数点の内部表現を知らないプログラマがいる、あるいは二進法も
知らないプログラマがいる、というのが現実なのかな。
0592デフォルトの名無しさんNGNG
基本情報に合格していない奴は
プログラマにならなければいいって事だな。
0593デフォルトの名無しさんNGNG
>>591
実際そうだよね。資格とっていなくてもプログラマになれるんだから。
0594デフォルトの名無しさんNGNG
>>592
資格は関係なし。常識と想像力があればよい。
0595デフォルトの名無しさんNGNG
>>594
その常識とはなんですか?
一体どこで身に付ければいいのでしょうか?
0596デフォルトの名無しさんNGNG
あと、体力な。
0597デフォルトの名無しさんNGNG
資格試験に決まってんじゃんw
0598デフォルトの名無しさんNGNG
そんなもの義務教育で学ぶだろ。

とか言い出したら笑える。
0599デフォルトの名無しさんNGNG
つまり、常識を学ぶまで
質問もプログラミングをするな。
ちなみに、常識はプログラミングを
していれば自然と身につく。
矛盾しているが、これが答えだ。
0600デフォルトの名無しさんNGNG
必要に迫られるかどうかの問題でしょ。
必要に迫られれば気づいて対処するし、そうでなければ一生わからんかもしれん。
それを気づかなくてもプログラマとしてやっていけるかもしれん。

知識さえあれば優秀なプログラマともいえんし、優秀なプログラマならそのぐらい
知ってて当たり前ということもあるけど、どっちかというと知識は問題解決の手段
でしかなく、優秀な人なら知識がなくともいつか気づくでそ。
0601デフォルトの名無しさんNGNG
要するに今が必要になったときで、今が知るときなのに、
そんなもん常識だろとバカにする態度がいけない。
0602デフォルトの名無しさんNGNG
>>590
> まず浮動小数点というのを知らないということを前提に考えな。

浮動小数点を知らないとしても、有効桁数を知らないのはかなり致命的だと
思う。ヘルプにも載ってるんだし。

x.xxxxxxxxxx の加減算を問題にしているとき変数に 1e-17 が入るのはなぜか?
という質問なんだぜ。
0603デフォルトの名無しさんNGNG
人をすぐバカにする奴はたいてい大したことない
0604デフォルトの名無しさんNGNG
>>602
ヘルプに載っているというのなら浮動小数点もヘルプに載っているだろ。
ヘルプに載っていることは問題にならない。
0605デフォルトの名無しさんNGNG
誰でも最初は分からんものさ。
それが普通。
0606デフォルトの名無しさんNGNG
知らないことを素直に認めないのはたいしたことがない以前
0607デフォルトの名無しさんNGNG
知らないから質問しているわけだろ?
浮動小数点も2進数も有効桁数も知らない。
知らない人の常識は知らないに決まっているじゃん。
なんでそこで知っている人の常識がでてくるんだか。
0608デフォルトの名無しさんNGNG
>>606
その通りだけど、そんな奴はここには出てきていないよ。
ここにいるのは知らないことをバカにしている奴だけ。
0609デフォルトの名無しさんNGNG
だから資格勉強ぐらいしとけって、
それか情報関係の大学に行くか。
大学に行ったのにプログラマになるの?とか
大学じゃ遅すぎるというのなら資格勉強をしとけ。
浮動小数点の誤差問題など基礎的なことを学べるから。
0610デフォルトの名無しさんNGNG
つか、誰がだれだかわからん。
いいあってる香具師はトリップつけれw
0611デフォルトの名無しさんNGNG
言い合ってるヤツは他へ逝け。
でしょ?
0612デフォルトの名無しさんNGNG
なかさぁ、不毛っぽい議論はやめようよ。ちょっと読んでみてオレが一番ショック
だったのは、

>>579
> 0と1の間には無限個の数値があるんだが?

これを本当に知らないんだろうか。知らないとしたら、何個あるとおもってるんだろうか。
なんか、ここが本質のような気がする。
0613デフォルトの名無しさんNGNG
初心者スレで初心者の質問をすると荒れる。
これ初心者スレの常識w
0614デフォルトの名無しさんNGNG
>>612
無限個の数値があると分かっても
0.1が正確にあらわせないというは分からない。
この違いが分からない?
0615デフォルトの名無しさんNGNG
ある時は無限個、ある時は0個。
何個あるかどうかじゃなく、数値というものをどういうように扱っているかでしょ。
0616デフォルトの名無しさんNGNG
> 0.1が正確にあらわせないというは分からない。

うん、これは二進法で浮動小数点をどう表現するか、というかなり高度(?) なので
分からないかも知れない、とは想像つくね。

> 何個あるかどうかじゃなく、数値というものをどういうように扱っているかでしょ。

そうなんだけど、有限個のビット数でそもそも無限個の数値を正確に表せない、とは
ヘルプ読まなくても分かると思うんだがなぁ。
0617デフォルトの名無しさんNGNG
でも無限大は表現できるよ。
0618デフォルトの名無しさんNGNG
それは必要に迫られてないからでしょ。
自分の仕事では、ほとんど正数しか使わないから
そういう表現が求められることはないし、それで問題になることはないし。
0619デフォルトの名無しさんNGNG
今回の問題は、>>602 のいうように、浮動小数点の内部表現がどうの、というより、
有効桁数のはなしでしょ。1から引いていって、結果 1e-17 ならゼロとみなしてよい、
ということ。
0620デフォルトの名無しさんNGNG
問題にならないから気づかない。
使わないから気づかない。
こういうときは資格勉強が一番。
浅くても広い範囲の事を知ることができる。
0621デフォルトの名無しさんNGNG
>>619
どれくらいならゼロとみなせるんだ?
0622デフォルトの名無しさんNGNG
問題になれば調べる。それが漏れのやり方。
0623デフォルトの名無しさんNGNG
調べても調べても分からんかったら仕方がない。
ここ、初心者質問スレで質問する。それが漏れのやり方。
0624デフォルトの名無しさんNGNG
そんな奴ばかりだったらこのスレ要らないなw

で、自分のやり方に合わない奴(調べない奴)を煽っているわけか。
0625デフォルトの名無しさんNGNG
> どれくらいならゼロとみなせるんだ?

有効桁数の範囲を超えた小さい絶対値なら確実に。そうでなければ、かなり高度な
議論になる、と思う。それこそ、内部表現にかかわるような。
0626デフォルトの名無しさんNGNG
浮動小数点は誤差が出るんだよ。
だから0と比べたらいけないんだよ。
そんなの常識だろ。

といっておきながら、具体的にどうするのか聞くと
多分大丈夫なんじゃない? と曖昧なことしかいえない罠。
0627デフォルトの名無しさんNGNG
おぉ、居直っている。すげぇー。非常識もきわまれり、ってことか。

> 多分大丈夫なんじゃない? と曖昧なことしかいえない罠。

これ何番?
0628デフォルトの名無しさんNGNG
0.1だと誤差があるけど、0.5なら誤差ないよ。
0629デフォルトの名無しさんNGNG
曖昧だとおもうのは有効桁数を知らないからだろ。
0630デフォルトの名無しさんNGNG
>>624
いや、漏れは誰も煽ってないよ。煽るためだけに来るほど肥満じゃない。
自分の分かる質問なら教える。分からんかったら調べる。それが漏れのやり方。
0631デフォルトの名無しさんNGNG
>>628
無限個の中にはぴったりと一致して誤差なしで表現できるものもあるさ。
無限個から比べると無視できるほど少数だがな。
0632デフォルトの名無しさんNGNG
>>630
オレは少し肥満ぎみ。Q&A のスレって、どんなことでも自分で調べてみると
勉強になるね。ほんとに。
0633デフォルトの名無しさんNGNG
>>627
お前なら答えてくれるのかい?
0634デフォルトの名無しさんNGNG
>>632
ドーンマーイ。
やっぱ知識は少ないより多いほうがいいよね。可能性が広がる。
0635デフォルトの名無しさんNGNG
曖昧だとおもうのは有効桁数を知らないからだろ。

といっておきながら、具体的にどうするのか聞くと
多分大丈夫なんじゃない? と曖昧なことしかいえない罠。
0636デフォルトの名無しさんNGNG
知識をつけたはいいが他人がちょっとものを知らないだけで
馬鹿にしたような発言をする奴はどうかと思うけどな。
0637デフォルトの名無しさんNGNG

   |
_ー|ー|-┐     __|_     ̄──
   |  ノ   ヽ/ |  ヽ     /
   |     /丶/   |   |
    |     し^ヽ   /    \


         ヽ(;´Д`)ノ
0638デフォルトの名無しさんNGNG
> 具体的にどうするのか

有効桁数について調べて見れ、

と<具体的>に教えてやらない、といつまでも書き込みそうだな。(藁

あぅ、ちっとも具体的じゃないじゃないか、とレスされそうなので先回りしておくか。
0639デフォルトの名無しさんNGNG
元のネタを読んでいくと時間に関する質問のようだが
今話題にしている誤差は本当に関係あるのか?
0640デフォルトの名無しさんNGNG
>>638
ちっとも具体的じゃないじゃないか(w

先手を打ったつもりだろうが、答えは予想通り変わらない。
相手のレスが予測できるなら、ついでにそのレスの答えも用意しておいたら?
0641デフォルトの名無しさんNGNG
ヘルプより

type TDateTime = type Double;

なので、浮動小数点の演算に関することであることは間違いない。
0642デフォルトの名無しさんNGNG
そもそもDoubleってのがおかしいよな。
0643デフォルトの名無しさんNGNG
Power(2, -4) * 1.6 = 0.0625 * 1.6 = 0.1
だけど、0.1って誤差無しで表現できない?
0644デフォルトの名無しさんNGNG
教えて君は少しは調べたら。ヒントはもらったんだらさ。

有効桁数は、数値の大小と関係するので演算のもとになる数値によってゼロとみなす
しきい値は変化する。
0645デフォルトの名無しさんNGNG
> そもそもDoubleってのがおかしいよな。

そうか。時間の最小単位というのは無限小なので、とびとびに経過するもんじゃ
ないし、浮動小数点であったもいいんじゃないの。
0646デフォルトの名無しさんNGNG
誰も>>643は解らないの?
0647デフォルトの名無しさんNGNG
PCの時計は有限だよ
0648デフォルトの名無しさんNGNG
でも時・分・秒がちゃんと表せない小数ってのもなぁ。
本当に今の時刻は正確に表せているんだろうか?
0649デフォルトの名無しさんNGNG
>>646
1*10^(-1)
0650デフォルトの名無しさんNGNG
ヘルプより

次の表に TDateTime 値の例とそれに対応する日付と時間を示します。

01899 年 12 月 30 日 午前 12:00
2.751900 年 1 月 1 日 午後 6:00
-1.251899 年 12 月 29 日 午前 6:00
350651996 年 1 月 1 日 午前 12:00

PCの時計は関係なし
0651デフォルトの名無しさんNGNG
>>649
それは何という型でしょう?
0652デフォルトの名無しさんNGNG
>>650
1秒ってDoubleに表したら何?
2.75が1900 年 1 月 1 日 午後 6:00だとして
1900 年 1 月 1 日 午後 6:00:01はちゃんと表現できるの?
0653デフォルトの名無しさんNGNG
EncodeTime() とかさ、日付時刻ルーチンを調べてみたら?
0654デフォルトの名無しさんNGNG
0.5も誤差無しで表現できるね。
知ったかぶっていても、所詮この程度。
0655デフォルトの名無しさんNGNG
不具合が出るコードまだぁ?
0656デフォルトの名無しさんNGNG
>>654
誰も0.5が誤差無しで表現できないと言って無いと思いますが?
0657デフォルトの名無しさんNGNG
>>651
整数じゃん、バカじゃなかろうか
0658デフォルトの名無しさんNGNG
>>654
おまいは浮動小数点演算に0.5しか使わないのか。つか、>>631 読め
0659デフォルトの名無しさんNGNG
>>657
0.1は整数ですか?
0660デフォルトの名無しさんNGNG
こんな時間に起きてるおまいらの事だから
少数の扱いぐらいは心得てるんだろ?
その上で話を進めようや
0661デフォルトの名無しさんNGNG
>>659
ちょっとまて
0.1をエレガントに誤差なく表現する方法を
語ってたんじゃないのか?
0662デフォルトの名無しさんNGNG
数値とか時間とかさ、抽象化・一般化して考えることがないのかな

PCの時計だとか、0.5だとか、なんか痛すぎる
0663デフォルトの名無しさんNGNG
そこで.NETですよ。
.NETなら8バイト整数値なので100ナノ秒単位で
正確に時刻が表せます。
0664デフォルトの名無しさんNGNG

           ケンカ やめれ!!
               ∧∧
     |\       (´Д`)          /|
     ヾ  ̄ ̄ ̄ ̄ ̄    ̄ ̄ ̄ ̄ ̄ ̄ ̄ /
       ̄ ̄ ̄ ̄ ̄ ̄|  | ̄ ̄ ̄ ̄ ̄ ̄ ̄
               |   |
        / ̄ ̄ ̄ ̄\/ ̄ ̄ ̄ ̄ ̄\
       __/ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\ .\__
___<__)__________ (__>___
0665デフォルトの名無しさんNGNG
>>662
質問は抽象でも一般でもないからな
0666デフォルトの名無しさんNGNG
>EncodeTime 関数は,指定された時,分,秒,およびミリ秒を TDateTime 値にエンコードします。
ヘルプに書いてあるのは嘘なのか?
誤差がでるなんて書いてないぞ
0667デフォルトの名無しさんNGNG
>>616 とか >>628 は笑っちゃうね。
0668デフォルトの名無しさんNGNG
http://pc2.2ch.net/test/read.cgi/tech/1045772555/
0669デフォルトの名無しさんNGNG
>>666
誤差のない時計は存在しません。
0670デフォルトの名無しさんNGNG
>>669
その誤差じゃないだろw
0671デフォルトの名無しさんNGNG
>>669
時計じゃなくてEncodeTime 関数の話題なのだが
0672デフォルトの名無しさんNGNG
TDateTime の精度があやしくなってきたな。
実はちゃんと表せない秒があるんじゃないのか?
0673デフォルトの名無しさんNGNG
お前らが無資格なのはよくわかった
0674デフォルトの名無しさんNGNG
残念、資格持ちだw
だから役にたたないといっただろう
0675デフォルトの名無しさんNGNG
単にとった資格の内容忘れているか、
きちんと理解してないだけじゃん。
もう一回受けなおせ。
0676デフォルトの名無しさんNGNG
> 実はちゃんと表せない秒があるんじゃないのか?

あー、ほんとに有効桁数というのを知らないみたいだな。
あほらし。
0677デフォルトの名無しさんNGNG
>>676
とりあえず、一言いわないと気がすまないみたいだな。

煽りは放置ということで。
0678デフォルトの名無しさんNGNG
さすがDel厨。
初心者っぷりと初心者を煽る自称プロっぷりが
実に厨っぽくてすばらしい。
0679デフォルトの名無しさんNGNG
結論としては関数のバグ(もしくはドキュメントの不備)でいいのか?
0680デフォルトの名無しさんNGNG
で、誰も>>652の質問に答えられないのね。
0681デフォルトの名無しさんNGNG
ヘルプより

Double 5.0 x 10^-324 .. 1.7 x 10^308  有効桁数 15〜16

> 誤差がでるなんて書いてないぞ

有効桁数以下では誤差が出るのは常識だからいちいち書かないのではないですか?
0682デフォルトの名無しさんNGNG
>>680
自分で試せ
0683デフォルトの名無しさんNGNG
>有効桁数 15〜16

なら、秒まで楽勝でしょ
0684デフォルトの名無しさんNGNG
>EncodeTime 関数は,指定された Hour,Min,Sec,および Msec に対する TDateTime 値を返します。
ドキュメントによるとミリ秒まで保証していると読めるわけだが
0685デフォルトの名無しさんNGNG
ミリ秒だって楽勝でしょ
0686186NGNG
DelphiってFortran?
0687デフォルトの名無しさんNGNG
EncodeXXX() してから DecodeXXX() してみたらいいじゃないの
0688デフォルトの名無しさんNGNG
>>686
FORTRANだったらもっと精度いいよ
0689デフォルトの名無しさんNGNG
>>687
・・・
0690デフォルトの名無しさんNGNG
>>685
じゃあなんで今回誤差が発生したんだ?
0691デフォルトの名無しさんNGNG
いったい、何ミリ・ナノ秒まで正確にあらわせるのよ?
0692デフォルトの名無しさんNGNG
DecodeTime(EncodeTime(23,59,59,999),h,m,s,ms);
0693デフォルトの名無しさんNGNG
> じゃあなんで今回誤差が発生したんだ?

浮動小数点どうしの引き算したから。
0694デフォルトの名無しさんNGNG
最初1を代入して、つぎつぎ引いていって結果 1e-17 になった、ということは
有効桁数を超えて小さな値になった、ということ。
0695デフォルトの名無しさんNGNG
> 何ミリ・ナノ秒まで正確にあらわせるのよ?

Double 5.0 x 10^-324 .. 1.7 x 10^308

だから、ナノ秒、ピコ秒、アト秒、楽勝。というか、単位が問題なのではなく
有効桁数の問題。1日に対して
1.00000000000001 これは有効。

0.00000001000000000001これも有効。

integer みたいに固定小数点じゃないので、桁数だけが問題になる
0696デフォルトの名無しさんNGNG
1で1日だから、0.001 は 1/1000日の時間。
1日は86400秒だから、0.000011574...で1秒
0697デフォルトの名無しさんNGNG
うん、1日に対して1秒は1e-5の位、ミリ秒は1e-8の位、で TDateTime = Double
だから有効桁数 15〜16 、1日に対して1ミリ秒は全然問題なし。1年だと3、4桁
あがっても、大丈夫、1000年に対して1ミリ秒の精度は微妙になってくる。
0698デフォルトの名無しさんNGNG
逆に1ミリ秒にたいして1ピコ秒は全然大丈夫ね。
0699デフォルトの名無しさんNGNG
> 1000年に対して1ミリ秒の精度は微妙になってくる。

これはダメっぽい
0700デフォルトの名無しさんNGNG
(;´д`) 他所でやってくれよぅ
0701デフォルトの名無しさんNGNG
うーん、TDateTime 型って Delphi のものだから、その有効精度を議論するのに
他所って言われても、どこがいいんかなぁ
0702デフォルトの名無しさんNGNG
常識板ってあるんかいな
0703デフォルトの名無しさんNGNG
>>701
中級スレでも上級スレでも談話室スレでも好きなのをどうぞ。
0704デフォルトの名無しさんNGNG
ここで質問されたんだから、ここでいいのでは?
ここでだめな理由ってなに? 高度すぎるって?
0705デフォルトの名無しさんNGNG
初心者が質問し易い雰囲気を作ってあげようよ。
20も30もレスの応酬があるなら、移ってあげようよ
0706デフォルトの名無しさんNGNG
質問者にもっと具体的に何をやりたいかを聞いてから回答すればいい。
でなければEncodeTimeだのTDateTimeをどう使うべきか、そもそも使うべきなのかを判断できない。
不足した情報を妄想で埋めたり直接的な解答をすることが常に正しいわけではない。
無能な回答者がよく陥る罠だな。
0707デフォルトの名無しさんNGNG
>>563 の質問自体はきわめて明瞭なのでは?
有能な回答者はこの質問のどんな意味が分からないの?
0708デフォルトの名無しさんNGNG
ttp://www.unixuser.org/~ueno/bugs-ja.html

じゃ、これを読むの推奨しようよ。
的確な質問が必要→的確でない→再質問
のループに陥るなら、上を読んで効果的な質問をする方法を
多少は考えてくれと。

上のはバグ報告のだけど参考になるし、これを提示して
わかるように書いてくれっていえば手間も省ける。
0709デフォルトの名無しさんNGNG
浮動小数点演算なら誤差がでるのは当たり前、整数に直して演算しろ、とか
誤差の理由について延々レスがのびてるのは煽るのも悪いが、なんか、逆切れして
ろくに調べないのもいるからでは。690あたりまでいろんな茶々が入っているが
有効桁数、誤差の原因についてはちゃんと議論になってるよ。690以降は具体的
になってるが。
0710吐駄NGNG
>>706
俺のことかー
0711デフォルトの名無しさんNGNG
質問者から真の質問を抽出するのも大事な資質だぞ。
実社会に出て、お客さんに「効果的にバグを報告するには」なんて読ませられると思うか?
0712デフォルトの名無しさんNGNG
「超初心者用」と書いているんだから、質問そのものには文句をつけないようにしませんか?
文句があるなら回答しなけりゃ良いんだし。
0713デフォルトの名無しさんNGNG
「超初心者用」と書いているんだから、質問者そっちのけで議論しないようにしませんか?
0714デフォルトの名無しさんNGNG
PCエンドユーザー<>プログラム初心者
0715デフォルトの名無しさんNGNG
>>714
VBユーザーかい?
0716デフォルトの名無しさんNGNG
曖昧な質問書かれても曖昧な解答しかできない
0717デフォルトの名無しさんNGNG
ttp://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200403/04030058.txt
0718デフォルトの名無しさんNGNG
ここの場合はお互いプログラマ(職業じゃなくても)なんだから、
的確な質問をするのも能力つか勉強の一つだろ
0719デフォルトの名無しさんNGNG
コード晒してれば10分で解決した問題だな。
0720デフォルトの名無しさんNGNG
>>718
プログラマか否かってのはあまり関係ないのでは?

的確な質問ができるかどうかは経験による所もあるので、最初は難しい。
だからこのスレでは質問する側はあまり気にせず、回答する側が「具体的に書け」
「ソース出せ」と誘導すべきだと思う。
0721デフォルトの名無しさんNGNG
OnShow中にウィンドウを表示する方法ってありませんか?
0722デフォルトの名無しさんNGNG
>>721
具体的に書け ソース出せ
0723デフォルトの名無しさんNGNG
OnShow中にForm2.Visible := True;じゃだめけ?
0724デフォルトの名無しさんNGNG
>>721
OnShowは窓をこれから表示するというイベントですから、まだ表示されません。
OnPaintを使えばどうですか?
0725デフォルトの名無しさんNGNG
>>721
何をしたいのかだけでも教えて
0726デフォルトの名無しさんNGNG
どのフォームのOnShowなのか
どのウィンドウを表示するつもりなのか
OnShowでなければならないのか

1番目は"たぶん"Form1で
2番目は"たぶん"Form2だろうけど
解答が曖昧にならざるを得ない
現に>>723と>>724という2通りの解釈が出てきてしまっている
>>720
上のような質疑応答を毎回繰り返せばいいのかい?
0727デフォルトの名無しさんNGNG
>>726
非常に論理的な見解だが、最後疑問形にすんなよw
どうすればいいと思うかもかいてくり
0728デフォルトの名無しさんNGNG
>>726
質問する側が同一人物でない以上仕方ないでしょう。
それが無駄だと思うならスレタイに「超初心者向け」なんていれない方がいいと思う。
0729デフォルトの名無しさんNGNG
>質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
スマソ。天ぷら読んでなかったよ
0730デフォルトの名無しさんNGNG
メタ議論ウザ
0731デフォルトの名無しさんNGNG
try〜finallyで保護されている部分でエラーが起こっっても、
必ずfinally〜end;間の処理が実行されるのはわかるのですが
try〜finallyの間でExitなどで制御を移した場合も処理は実行されるのでしょうか?
0732デフォルトの名無しさんNGNG
try内でexitしたらfinallyにとんでくれるはず
0733デフォルトの名無しさんNGNG
>>732
はず…だと!?
0734デフォルトの名無しさんNGNG
procedure Exit;

説明

Exit 手続きは,現在の手続きを終了して,制御を呼び出し元に移します。
現在の手続きがメインプログラムである場合,Exit はプログラムを終了します。
Exit は,Exit を呼び出した呼び出し元の手続き文の次の文に制御を渡します。

注意Exit は,現在のブロックではなく現在の手続きから制御を呼び出し元に戻します。ただし,Exit は try..finally 構文で指示されている制御フローを終了しません。Exit が try 節内で呼び出されると finally 節が実行されます。
0735721NGNG
誤解を招いたようでスンマセン…
OnShow中に、"その"ウィンドウを表示する方法ってありませんか?でした。
>>724さんの方法で解決できました。
ありがとうございます。
0736デフォルトの名無しさんNGNG
>>734
すみません
ヘルプに普通に書いてありますね
必死にtry、finallyのとこばかり見てました
0737デフォルトの名無しさんNGNG
FileListBox1.Update;
これを行うと
FileListBox1.FileNameの内容が空白に戻ってしまうのですが、
空白にならないようにリストを更新する方法は有りませんでしょうか。。
0738デフォルトの名無しさんNGNG
Updateするってことはそのフォルダに変化があったと考えているわけで
もしそのファイルが消えてしまっていたらおかしなことになるね

かっこ悪いけど
var s: string;
 s:=FileListBox1.FileName;
 FileListBox1.Update;
 FileListBox1.FileName := s;
動作未確認
0739デフォルトの名無しさんNGNG
updateかけると選択解除になるんじゃない?
Explorerでも更新すると解除されるし。

いやなら、updateかける前にどこかに保存しておいたら?
0740デフォルトの名無しさんNGNG
>>738-739
ありがとうございます。
1秒ごとにリストを更新するようにしていました。
ItemIndexで同様の方法を試みようとして上手くいかず困っていたところでした。
そのままFileName使えばよかったのですね。
EInOutErrorがでましたが、何とかなりそうです。
0741デフォルトの名無しさんNGNG
>>740
>1秒ごとにリストを更新するようにしていました。
そのやり方だとファイル数の多いディレクトリを開いてるときにちょっと遅くなりそう。
指定したディレクトリが更新されたら通知するようなコンポーネントがあるよ。
Delphi6以降に。そっちでチェックしたほうが無駄がないかも。
0742デフォルトの名無しさんNGNG
何を目的としてるのかさっぱり分からん
0743デフォルトの名無しさんNGNG
>>741
Delphi6Personalでちょっと勉強中なもんで、、
そのようなコンポーネントはないようです。。
スミマセン。。
0744デフォルトの名無しさんNGNG
ファイル数を全部計算して、数が変化してたらUpdateを
かけるというのはどうよ

ttp://forum.nifty.com/fdelphi/faq/00161.htm
0745デフォルトの名無しさんNGNG
FindFirstChangeNotificationなんてのが出てきたけど。
0746デフォルトの名無しさんNGNG
これか!
ttp://www.wwlnk.com/boheme/delphi/tips/tec0650.htm

これいいね。知らなかった。このAPI。
0747デフォルトの名無しさんNGNG
>>745
それつながりでExplorerのフォルダツリーとファイルビューなコンポもあるし。
0748デフォルトの名無しさんNGNG
こんなのもあるし。

http://www.howtodothings.com/showarticle.asp?article=314
0749デフォルトの名無しさんNGNG
さらに

http://delphi.about.com/library/weekly/aa030403a.htm
0750デフォルトの名無しさんNGNG
標準コンポがあるんだからそれでいいじゃん。
せめてそれ以外のやり方のメリット書いたら。
0751デフォルトの名無しさんNGNG
FindFirstChangeNotification は特定フォルダ内で変更があった、というだけの通知
>>748-749 のは、シェル全体で変更があったことがわかる。ファイルだけじゃなしに。
詳細は >>749 に FindFirstChangeNotification との違いが書いてある。
0752デフォルトの名無しさんNGNG
>>748-749
そのコンポなかなか面白い。だいぶ前に休日一日つぶして作ったことがある。
Shevin 氏のヤツは実装がすこしアレだけどちゃんと動作する。>>748 のはその
改良版ということになってるが、動作が?のところがある。ファイルシステムの変更
監視はできるけど、どのファイルが、というところで ?? の動作がある。そのほか
のシェルの変更は試してないけど。
0753デフォルトの名無しさんNGNG
テキスト仲からタブ文字を検索したいのですが
Pos(Substr: string; S: string)でタブ文字を検索することは出来ないんでしょうか?
0754デフォルトの名無しさんNGNG
初歩的な質問ですが。。。

フォームにComboBoxを配置して、
ComboBox の items にボーダースタイルを表示させて
選択した候補を従って、フォームのボーダースタイルを変更するにはどーすればよいせうか?

ComboBoxのItems は TStrings なので、
単純にForm.BorderStyle := にはできないのです。

何を読んでベンキョーすればよいかでもけっこうです。
教えてください。
0755デフォルトの名無しさんNGNG
>>754
ConmbBoxのアイテムを選択すると
ItemIndexの値が変わる
どのイベントで処理すればいいかは分かるな?
後はがんばれ
0756デフォルトの名無しさんNGNG
TAB定数を使ってなんとかできないの?

bsNone,bsSingle,bsDialog,bsSizeable,bsToolWindow,bsSizeToolWin
は順に0-5だから、Itemsの0〜5に上の表示を割り当てて、
Form.BorderStyle := ComboBox1.ItemIndex;
でいけそーな悪寒
0757デフォルトの名無しさんNGNG
>>755, 756 さんへ

ありがとうございました。
ComboBoxのClickイベントに
Form1.BorderStyle := TFormBorderStyle( ComboBox1.ItemIndex);
と書いたところ、うまく切り替わるようになりました。

本当にありがとうございました。

じつは、もう1つ質問あるんですが。。。
0758デフォルトの名無しさんNGNG
かかんのかいw
0759デフォルトの名無しさんNGNG
質問があります。

フォームのBorderStyleの値(bsNoneとかbsSingle)を
プログラム的に読み出すことはできるのでしょうか?

やりたい事は、ComboBoxのItemsにBorderStyleの選択可能な値をいれたいのです。
いまは、かっこわるいのですが、初期設定として手入力しています。
でも、TFormBorderStyleの定義を読んで、それを文字に変換して、ComboBoxに代入したいのですが。

ヒントだけでもいいです。
教えてください。
0760デフォルトの名無しさんNGNG
>> 758さん

ごめんなさい。
いま書きました。
0761デフォルトの名無しさんNGNG
定義を文字として抜き出すのは無理なんじゃないかなぁ。
ShowMessage(IntToStr(Word(bsSizeToolWin)));で数値は求まる。
>>756にも順に0〜5と書いてあると思うが。
0762デフォルトの名無しさんNGNG
>>753
#9
0763デフォルトの名無しさんNGNG
procedure GetEnumNameList(TypeInfo: PTypeInfo;str:TStrings);
var i:integer;
var T: PTypeData;
var s:string;
begin
 T := GetTypeData(GetTypeData(TypeInfo)^.BaseType^);
 for i:=T^.MinValue to T^.MaxValue do
 begin
   s:= GetEnumName(TypeInfo , i);
  if s<>'' then str.Add(s) else break;
 end;
end;
0764763NGNG
>>759
実行時型情報を取得すれば可能で、具体的コードは 上の通り。

呼び方は
GetEnumNameList(TypeInfo(TBorderStyle) , ComboBox1 . Items);
0765763NGNG
逆に、文字列として列挙型名から列挙型に変換する事も可能。

GetEnumValue(TypeInfo(TBorderStyle), string )

他にもTypeInfoユニットにはこの関係のがイッパイ
0766デフォルトの名無しさんNGNG
それは.NETでも使えますか?
0767デフォルトの名無しさんNGNG
>>763 さん

できました。。。。。感無量です。

PTypeInfo、TypeInfo回りの勉強をします。

>>761さん
レスありがとうございました。
時間をとっていただいたことに感謝しております。
0768763NGNG
>>766
さあ?買ってないから知らない。 .NETなら System.Type でやったほうがいいんじゃないの?

>>767
自作の列挙型でも、publishedメンバーにさえすれば同じ事が出来るから、しばらく面白いよ。
0769563NGNG
>>1の2行目を熟読して質問です。
俺はまだ狸寝入りしていたほうがいいですか?
0770デフォルトの名無しさんNGNG
>>769
それで解決したんならそれでもいいよ>メル欄
コードを晒す気があるなら晒してもいいし。
0771デフォルトの名無しさんNGNG
>>769
Encode⇔Decode
0772763NGNG
>>564

>>567の書いてる通り、
時間単位の処理がしたいなら  TDateTime * 24
分単位の処理がしたいなら   TDateTime * 24*60
して、整数に(切り上げか丸めて)int64か浮動小数点で処理すればいい。

そうすれば1分は一足すだけでしょ?
浮動小数点でも整数の範囲なら=で比較出来るしさ。

TDateTimeに戻すのは同じ数で割るだけ。 
0773563NGNG
>>770-772
お三方、ありがとうございます。

とりあえず、動いたので当面はこれで行って他のバグを潰していきます。
次のバージョンでは精度を求めたいので>>772の方法できちんとチェック
しようと思います。
0774デフォルトの名無しさんNGNG
半角数字を全角数字にするファンクションあったら教えて下さい。
ヘルプは見たけど見つかりませんでした。
0775デフォルトの名無しさんNGNG
Copy('0123456789', n*2+1, 2)
0776デフォルトの名無しさんNGNG
なぜわざわざ全角数字なのか非常に気になるが、ここはぐっと抑えておこう
0777デフォルトの名無しさんNGNG
>>774

const
 Zenkaku:WideString = '0123456789';

function HanSuuToZenSuu(Ch:Char):string;
begin
 result := Zenkaku[Ord(Ch)-47];
end;

// てすと
procedure TForm1.Button1Click(Sender: TObject);
var
 i:integer;
 s1,s2:string;
begin
 s1 := '9876543210';
 s2 := '';
 for i := 1 to Length(s1) do
  s2 := s2 + HanSuuToZenSuu(s1[i]);
 Label1.Caption := s1;
 Label2.Caption := s2;
end;
0778774NGNG
サンクスコ
0779デフォルトの名無しさんNGNG
はじめまして、こんにちは。
Delphi初心者なのですが、今回チャットを作ろうと
D6PersonalにIndyを入れて色々見ているIRCの機能がありました。
そこで、IRCのクライアントとサーバーを作ろうとしています。(まずはチャット機能から。。。)
ネットで検索しても、これといったいい情報がなく、みなさんのお力をお借りしたく
思いました、よろしければ、どうすればチャットとして機能するか
ご指導願いたく思います。どうかよろしくお願いします。
0780デフォルトの名無しさんNGNG
他の言語やってたんじゃないなら、敷居が高すぎない?いきなり。
0781デフォルトの名無しさんNGNG
DelphiでPDFを読み込んでImage化する方法ってありますか?
(Readerを使わないで簡易ビューワーを作る方法を探してます)

外国産の有料コンポ使わないとダメかな・・・。
0782デフォルトの名無しさんNGNG
>>781
どうなんだろね。フリーのソースはあるから、そこから BCC55でコンパイル出来るようにしてそれをDelphiにリンクすれば使えるかも
http://www.foolabs.com/xpdf/download.html
http://www.cs.wisc.edu/~ghost/
http://www.devarchive.com/f1815.html
0783781NGNG
サンクス!うぉ、敷居高いですね・・・
オンラインドキュメント(型式は問いません、Delで扱えれば)を、ネット上から取ってきて
表示するアプリを作りたいのでPDFでなくても構わないんですが・・・うーん、フォーマットを考え直そうかな。
0784782NGNG
ごめん最後のは有料だったね。
0785デフォルトの名無しさんNGNG
>>779
いきなりIRCだと難しいと思うから、まず、TIdTCPClientとTIdTCPServerで
簡単なチャットプログラムを作ってみたら?
0786デフォルトの名無しさんNGNG
>>783
TWebBrowserでHTML表示するのが一番手っ取り早い予感
0787デフォルトの名無しさんNGNG
Reader使ってるじゃん・・・
0788デフォルトの名無しさんNGNG
>>787
マニュアルをhtmlで作って、それを表示するって意味でしょ
単に表示させるなら、それだけで十分だと思う。
0789デフォルトの名無しさんNGNG
.chmにしろよ。
0790781NGNG
オンラインで配りたい元データがpdfですた・・・ _| ̄|○ ヤッパリ ムリポ
いや、pdfからの変換ツールを探してくるか・・・。
0791デフォルトの名無しさんNGNG
>>790
TorryちゃんとDSPにPDF関連のフリーソフトたくさんあるけどだめなん?
PDF Createってあるから作るのがメインのん゛多いけど、Viewerかねてるのも
あるんじゃないの?
0792781NGNG
そ、そうですね、行ってきます。 <(;´Д`)>
0793デフォルトの名無しさんNGNG
現在、プロジェクトに登録されているpasで特定の文字列をgrepして
一覧表示するか、次々にその場所を表示してくれるような方法ってありますか?
0794デフォルトの名無しさんNGNG
検索の次のタブでできますた・・・スマソ気がつかなかったよ
0795デフォルトの名無しさんNGNG
TSplitterにOnClickイベントをやりたいのですがどうやればできるのでしょうか?
0796デフォルトの名無しさんNGNG
とりあえず コンポーネントの新規作成で継承して OnClickをpublished にしてみたら?
0797デフォルトの名無しさんNGNG
やってみましたがイベントタブにOnClickイベントはありませんでした
Publishedにproperty OnClick;を追加するだけでいいんですよね?
0798デフォルトの名無しさんNGNG
すいません。できました
間違えてPublicに書いてました
ありがとうございます
0799デフォルトの名無しさんNGNG
へー、そんなこと可能なんだ。
ダブクリとかインスペクタに表示されてないコンポでも
継承すればひょっとしたらいけるかもしれんってこと?
0800デフォルトの名無しさんNGNG
TControlやTWinControlは
イベント全部と多くのプロパティがprotectedのままだから
派生の仕方によっては
必要最小限のものしかpublishedになってないことも多いよね。

TControlから例えばColorやFontをpublicにしたクラスを派生させて
そのクラスへキャストすると見えるようになったりもする。
(親へではなく兄弟とか伯父さんへキャストするわけだから、邪道くさいかも)
0801デフォルトの名無しさんNGNG
わざわざカスタムコンポーネントを作成するほどでもなければ、
そのユニット内でクラスを別名で宣言してキャストすると
上位クラスの protected メンバーにアクセスできる。
上位クラスに存在しないメンバーだとコンパイルできないので安全。

こんな感じ↓
type TSplitter1 = class(TSplitter);

procedure TForm1.FormCreate(Sender: TObject);
begin
  TSplitter1(Splitter1).OnClick := Splitter1Click;
end;
0802デフォルトの名無しさんNGNG
あるFormから呼ばれて FormShowの中で条件を判断し、その条件によって
Formを表示しないで 閉じて戻りたいのですが、どのようにすればいいのでしょうか?

呼び出して元は、修正しないで 呼び出された側のFormだけ修正したいのですが、
教えてください。
0803デフォルトの名無しさんNGNG
FormShowでCloseしろ
0804デフォルトの名無しさんNGNG
Closeしても 表示されます。
0805802NGNG
なお 呼び出し側は ShowModal で表示させてます。
0806デフォルトの名無しさんNGNG
条件判断をする場所を変えてみましょう
呼び出し元のメソッドの中で判断をして、Showするか否かを決定すればぁ?
procedure TForm1.Yobidashi;
begin
if フニフニ then Form2.Show;
end;
0807802NGNG
だから 呼び出し元を 修正しないで
と言ってます。
0808802NGNG
ちょっと 誤字ってましたが、呼び出し元は、修正しないで、
呼び出された側だけ修正したいのです。
0809デフォルトの名無しさんNGNG
ShowModalをoverride
0810デフォルトの名無しさんNGNG
あぁ、コードの修正のことなのか。
理由がよくわからんがスマソ。
//OnCreate
OnShow
OnActivate
OnResize
OnPaint
//Application.OnIdle
この順番でイベント発生するはずだから、好きなの使いんしゃい。
0811デフォルトの名無しさんNGNG
このスレは 子牛の糞から 誕生しました
0812デフォルトの名無しさんNGNG
>>810
>>803-804
0813デフォルトの名無しさんNGNG
FormShow以外の選択肢が見えないの?
0814デフォルトの名無しさんNGNG
無駄に問題を難しくしとるな
0815デフォルトの名無しさんNGNG
フォームを動的に作成するようにして、Createでなんとかするとか。
これも呼び出し元をかえることになるんかな。

もしくはOnShowの部分でタイマーを動作させて、タイマーが動作
したらフォームを閉じるようにするとか。
0816デフォルトの名無しさんNGNG
809のでいいやんけ
0817802NGNG
ああ ShowModalをoverrideってのは、 showとは 別のイベントなのね。

ShowModalでも

OnShow
OnActivate
OnResize
OnPaint
の順なんでしょうか?

というか ShowModal が どのような処理しているか わからない・・・。
ソースを 覗いてくるか。
0818デフォルトの名無しさんNGNG
イベント順とかどうでもよくてさ、
function TForm2.ShowModal: Integer;
begin
 if 条件 then Result := inherited ShowModal else Result := mrCancel;
end;
0819802NGNG
覗いたけど、よく わからんかった・・・。
タイマー使ったから なんとかできたけど・・・。
0820デフォルトの名無しさんNGNG
プログラミング初めてやる人でDelphiする人って
どうやって憶えていけばいいの?漏れこれからやろうとしてるんだけど
0821デフォルトの名無しさんNGNG
>>820
入門書買って読む。
WEBで最初から情報拾ってると不正確で偏った知識しか実に付かないから注意しな。
WEBは詰まったところをワンポイントで質問したりFAQ&Tipsを調べるのにとどめたほうがいい。
0822デフォルトの名無しさんNGNG
あ 818の やり方が いいね。 サンクス。
0823デフォルトの名無しさんNGNG
WEBとヘルポで十分だよ
あとは慣れ
0824デフォルトの名無しさんNGNG
重い処理をするとき、処理中のフォームを ShowModal のような感じで表示して
処理が 終わったら、その表示したフォームを 閉じたいのですが、どのようにすればいいのでしょうか?
0825デフォルトの名無しさんNGNG
Form2.Show;
while Foo do
begin
 Bar; 重い処理
 Form2.ProgressBar1.StepIt;
 Application.ProcessMessages;
end;
Form2.Close;
0826デフォルトの名無しさんNGNG
>>824
>>825のようにすると、他のフォームのボタンやアイコンが動かせるから嫌なんでしょ?
>>824のようにするなら、他のフォームの動きを止めてしまう。

あるいは処理の方をスレッドにしてしまう
0827デフォルトの名無しさんNGNG
ShowModalされた処理中のフォームに処理を書くか
フォームからその処理を実行するメソッドを呼べばいい。
0828デフォルトの名無しさんNGNG
DelでUPnPを使ったプログラムって可能でつか?
具体的には対応ルーターでNAT越えしたいんだけど。
0829デフォルトの名無しさんNGNG
可能
0830デフォルトの名無しさんNGNG
487 デフォルトの名無しさん New! 04/03/24 12:05
Form.OnShow中にCloseしてもクローズされないという大バグが発見されました。
このバグはいつ直るのでしょうか?
0831デフォルトの名無しさんNGNG
>>829
おおっ!できるんでつか、ありがとうございます。
申し訳ないんですが、何を集めて、どうすれば、UPnPを使用したソフトが
作れるようになるのか、ヒントや解説してるページとかあったら教えてもらえないですか?

いま、いろいろ調べていますが何をどうすればいいかまったくわからん状態です。
SDKあたりがあるのかなと調べているんですが・・・・
0832デフォルトの名無しさんNGNG
Linuxだけど
http://upnp.sourceforge.net/
0833デフォルトの名無しさんNGNG
ネットワークスレでWindowsでのコーディングの仕方を聞いたほうがいいと思うが。
0834デフォルトの名無しさんNGNG
http://www.microsoft.com/japan/technet/itsolutions/network/plan/insidenet/sohonet/upnpsup.asp?frame=true
http://www.microsoft.com/japan/technet/prodtechnol/winxppro/evaluate/upnpxp.asp?frame=true
0835デフォルトの名無しさんNGNG
このスレは マカロニペンギンのフンから 誕生しました
0836デフォルトの名無しさんNGNG
フンフン
0837デフォルトの名無しさんNGNG
あるEditのコンポーネントに フォーカスが あるかどうかを 調べるには どうしたらいいのでしょうか?
0838デフォルトの名無しさんNGNG
>>837
EditコンポーネントのメソッドFocusedで調べることが出来ます。
0839デフォルトの名無しさんNGNG
MIDIファイルの関連づけがRealOneになっている場合に、
Delphi6Personalでデバッガオプションがディフォルトのままの時に、
WebBrowserで<embed src="*.mid" height=0>を含むページを開くと例外が発生し、
"invalid floating point operation"というメッセージが表示されます。
そしてその後、このWebページを操作出来なくなってしまいます。
これを解消するには、[デバッガオプション - OSによる例外 - Float Invalid Operation]を、
[処理]を[プログラムが受け取る]のままにして、
[再実行時の例外の扱い]を[例外を破棄する]にすればいいと判りました。

それで質問なんですが、自分で作ったプログラムを配布する際に、一般的には、
デバッガオプションをどのように設定すべきなんでしょうか?
0840デフォルトの名無しさんNGNG
例外処理をちゃんとすりゃいい
全部外しても別にかまわん
0841デフォルトの名無しさんNGNG
>>837
Form1.ActiveContorol=Edit1
0842デフォルトの名無しさんNGNG
訂正スマソ
to→t
0843デフォルトの名無しさんNGNG
Delphiは死滅したということなのですが次は何をやればいいでしょうか?
0844デフォルトの名無しさんNGNG
>>838 のいうように

if Edit1.Focused then

のほうがいいとおもう
0845デフォルトの名無しさんNGNG
>840
レスどうもです。
自分で書いたコードに関しては例外処理をしてるんですが、
ActiveXコントロール内で起きた例外に関しては、どうしていいかわからず、質問しました。
全部外してもとは、全て[再実行時の例外の扱い]を[例外を破棄する]にしても
問題ないってことでしょうか?
0846デフォルトの名無しさんNGNG
デバッガのオプションってダブクリ実行時関係あるの?
0847デフォルトの名無しさんNGNG
昨今のグローバリゼーションの波に逆らって申し訳ないが
日本語で喋って頂くわけにはいかないだろうか?
0848デフォルトの名無しさんNGNG
ひまわりスレに行って頂くわけにはいかないだろうか?
0849デフォルトの名無しさんNGNG
>>846
関係無い。
0850839NGNG
ああ、なんでだろ。デバッガオプションの設定が、デバッグ時以外にも適用されてると思ってた。
そんなわけないのにね…。適当に試して確認したときに、適用されてるように見えたのが原因か。

ところで、デバッガオプションの[再実行時の例外の扱い]を[例外を破棄する]と同様の事が
デバッグじゃない時に出来ず、例外の後、固まってしまうんですがどうしたらいいんでしょうか?
0851デフォルトの名無しさんNGNG
うちのエスパーはただいま出払っております
0852デフォルトの名無しさんNGNG
例外は 実行されてるスレッドから発生されたら、そのスレッドでキャッチして自分で処理すればいい
0853デフォルトの名無しさんNGNG
853 <AAにつき省略>

854 名前:デフォルトの名無しさん [sage] 投稿日:04/03/25 13:34
>>850
それを例外処理をちゃんとできていると呼ぶだろうか?


855 名前:デフォルトの名無しさん [] 投稿日:04/03/25 15:24
なんか変なカキコばっかしだな。


856 名前:デフォルトの名無しさん [sage] 投稿日:04/03/25 18:27
copy()みたいに可変個の引数を渡せる関数をつくりたいのですが、どう宣言すればいいのですか?


857 名前:デフォルトの名無しさん [] 投稿日:04/03/25 18:55
引数を 省略できるってこと?
copyのソースを見てみれば?


858 名前:デフォルトの名無しさん [sage] 投稿日:04/03/25 18:58
procedure foo(items: array of string);
とかじゃなくて?
0854デフォルトの名無しさんNGNG
859 名前:デフォルトの名無しさん [sage] 投稿日:04/03/25 23:19
引数の数とかで変えるのがオーバーロードちゃうん?


860 名前:デフォルトの名無しさん [sage] 投稿日:04/03/26 00:10
>>859
それを「可変個の引数」と言うのか?


861 名前:デフォルトの名無しさん [sage] 投稿日:04/03/26 00:23
>>860
856にとってはそれが「可変個の引数」。


862 名前:デフォルトの名無しさん [sage] 投稿日:04/03/26 11:30
突然ですが。

変数名を決めるとき、皆さんどーしていますか?
Pascal規則っていうのがあるそうなのですが、
ネットをめくっていっても、定義はこれ!というものがありません。
ハンガリアンの規則に準じて、変数名の最初を大文字にするってことなのかと
推測していますが、いまいち不確かです。

Pascal規則を知ってる方、書き込み願います。

(これに反してハンガリアン規則の解説が多いこと。。)
0855デフォルトの名無しさんNGNG
863 名前:デフォルトの名無しさん [sage] 投稿日:04/03/26 11:32
http://onigiri.s3.xrea.com:8080/delphi/index.php?%5B%5B%A5%B3%A1%BC%A5%C7%A5%A3%A5%F3%A5%B0%B5%AC%CC%F3%5D%5D


864 名前:デフォルトの名無しさん [sage] 投稿日:04/03/26 11:38
>>863さん

ありがとうございまする。


865 名前:856 [sage] 投稿日:04/03/26 14:20
concat(´・ω・`)のことダターヨ、ゴムーン


866 名前:デフォルトの名無しさん [sage] 投稿日:04/03/26 14:36
>>865
WritelnとかConcatはインチキ関数だから自分では作れない。
>>858のように
MyConcat(['aaa', 'bbb', 'ccc']);見たいにするしかない。



867 名前:デフォルトの名無しさん [] 投稿日:04/03/26 14:38
>>862

aから 順番に。
0856デフォルトの名無しさんNGNG
868 名前:デフォルトの名無しさん [sage] 投稿日:04/03/26 15:47
case c of
0 : CheckBox1.Checked := False;
1 : CheckBox1.Checked := True;
end;

case t of
1 : CheckBox2.Checked := False;
0 : CheckBox2.Checked := True;
end;

case b of
1 : CheckBox3.Checked := True;
0 : CheckBox3.Checked := False;
end;
これだとなぜか、下の二つのcase文が上手く動作しません。
例えばbの値が1でも、CheckBox3.CheckedがFalseになってしまいます。。
オエライ方なぜか教えてくださいまし。。(;´Д`)

869 名前:デフォルトの名無しさん [sage] 投稿日:04/03/26 15:53
んなこたない。
ShowMessage(Format('b=%d', [b]));
case b of
1 : ShowMessage('b=1');
0 : ShowMessage('b=0');
else ShowMessage('b<>0, 1');
end;
でどうなるか試してみろ。

870 名前:デフォルトの名無しさん [sage] 投稿日:04/03/26 16:01
0と1しかとらないなら、Boolean 型にしとけば、CheckBox1.Checked に
直接代入できると思うんだけど
0857デフォルトの名無しさんNGNG
871 名前:デフォルトの名無しさん [sage] 投稿日:04/03/26 16:03
こんなふうにもできる

CheckBox1.Checked := c = 1;


872 名前:デフォルトの名無しさん [sage] 投稿日:04/03/26 16:05
>>869
case c of の前に置くとb=1と二回表示されましたが、
case b of の前に置くとb=0と二回表示されました。。。

問題がある箇所はわかってきましたが、
なぜbの値が勝手に変えられてるのでしょうか。。


873 名前:デフォルトの名無しさん [sage] 投稿日:04/03/26 16:07
>>869
elseはendの後じゃないか?
0858デフォルトの名無しさんNGNG
874 名前:デフォルトの名無しさん [sage] 投稿日:04/03/26 16:08
CheckBox のイベントハンドラのなかで変数をいじってないか?


875 名前:868 [sage] 投稿日:04/03/26 16:13
>>874
あー、、すいません、、まさしくそれっぽいです。
CheckBoxのOnClickでいじられていたようです。
ヘルプ読んできたらわかりました。。
CheckBoxの場合Checkedが変更された場合にも
呼ばれるんですね。。


876 名前:デフォルトの名無しさん [sage] 投稿日:04/03/26 16:15
case 文の練習ならともかく、870と871も参考にしてね


877 名前:デフォルトの名無しさん [sage] 投稿日:04/03/26 16:20
>>876
はい、参考にさせてもらいます(´▽`;)
0859デフォルトの名無しさんNGNG
これからDelphi始めようと思ったんだけど、
Integerって書くの面倒なんでintと書きたいんだけど
C言語の#define みたいなのって無いの?
0860デフォルトの名無しさんNGNG
>>859
何もしないのが一番面倒臭くないよ。
C言語やってたらいいんじゃない?
0861デフォルトの名無しさんNGNG
そんなあなたにCtrl+Space
0862デフォルトの名無しさんNGNG
>>860
そんな冷たい事言うなよ。
超初心者同士仲良く仕様やこの糞野郎
0863デフォルトの名無しさんNGNG
>>859
Type int = Integer;
0864デフォルトの名無しさんNGNG
ありがとう!>>863
0865デフォルトの名無しさんNGNG
>>855
予言者キタ━(゚∀゚)━!!
0866デフォルトの名無しさんNGNG
procedure TForm1.Button1Click(Sender: TObject);
var
a:array[1..5] of integer;
b:array[1..5] of integer;
i:integer;
begin
for i := 1 to 5 do
begin
a[i] := 1;
b[i] := 2;
end;

a[random(1)] := 3;
caption := inttostr(b[5]);
end;

すみませんが、ちょっと上のプログラムを実験してもらえますか?
OSはWINXPのホームでDELは6のパーソナルですけど
これを実行するとエラーにならない上に、b[5]の結果が3になるんです。
こんな結果が出るのはうちだけでしょうか?

せめてエラーが出てくれれば三日も悩まずにすんだのに・・・
0867デフォルトの名無しさんNGNG
ちなみに、random(1)の結果が必ず0で、a[0]という範囲外の場所に
書き込んでいるから、という原因はわかってます。

ただ、なぜエラーが出ないのかが・・・くぅぅ泣ける・・・一度寝ます。
0868デフォルトの名無しさんNGNG
バッファオーバーランじゃな。
{$R+}で範囲チェックが有効になるよ。
0869デフォルトの名無しさんNGNG
>>867
エラーが出ないのは>>868

なぜその結果になるかは
i:=0;
a[i] := 3;
caption := format('%2d %8x %8x',[b[5], Integer(@(b[5])) ,Integer(@(a[i]))]);
0870デフォルトの名無しさんNGNG
うぉ、こんなに速く対応していただき、ありがとうございます。
ヘルプで{$R+} を調べさせてもらいました。これから活用します。
0871デフォルトの名無しさんNGNG
i:=0 or 1 みたいなのとxorの使い方が全く解らないのですが
どういう風に使うのでしょうか?


>>853-858乙です
0872デフォルトの名無しさんNGNG
xor / 排他的倫理和
って演算がどんなものかは知っているのかな?
0873デフォルトの名無しさんNGNG
and or xor を整数型に使うと、論理型を一度に出来るようなものと考えればいい

利用例
 if (x and 1)=0 then 偶数です
x:= x or 3 ;<--- 4で割り切ると 3 が余る数になる

xor は 1なら相手を反転するからこれを利用して a と bが等しいのを (a xor b) =0 

これを応用して、
1) bのbitが1の場所だけ cに aを代入する
2) 入力スイッチのon/offが in 変数のビット情報として入る 各ビットが2度同じ時だけ採用せよ

なんて事が並列に出来る

0874デフォルトの名無しさん NGNG
DelphiでVCから呼ばれるDLLを作成したいっす。
で、データモジュールを使っているのですけど、
ヘルプに「データモジュールのコンストラクタとのやり取りが不良になる可能性があるため,C++ で OnCreate イベントを使うことはお勧めできません(OldCreateOrder を参照)。かわりに,コンストラクタをオーバーライドすることをお勧めします。」
と書いてあります。(OldCreateOrder を参照)・・・参照しましたがわかりません。

「コンストラクタをオーバーライドする」・・・?overrideですよね?
virtualではないですよね?
なんかチンプンカンプンなんです。
やりたい事は、VCからCreate(引数なし)を呼ばれたらDelphiで作ったDLL内にあるデータモジュールを生成したいんです。
ご教授お願いします。
0875デフォルトの名無しさんNGNG
>>866
できれば0オリジンにして欲しかった予感
0876デフォルトの名無しさんNGNG
>DelphiでVCから呼ばれるDLLを作成したいっす。
あなたにはまだ無理です。

VCL のデータモジュールって VCL に依存しているから、VC から使うにはいろんなことを
知っていないと。ヘルプにあるのは C++Builder からの使い方だからね。

0877デフォルトの名無しさんNGNG
もしどうしても VC から VCL を使いたいのであれば

・別アプリにして起動。
 ほとんど別アプリと言ってもよい DLL を VCL で作って呼び出す。という手もある。
 どちらにしろ、入出力をどうするかをしっかり決める必要がある。
・COM にして呼び出す。
 VC/Delphi とも COM でインターフェースをとることができるから、細かい操作が必要なときには
 この方法も使える。
0878ななしへたぐらま ◆XcB18Bks.Y NGNG
>>874
> やりたい事は、VCからCreate(引数なし)を呼ばれたらDelphiで作ったDLL内にあるデータモジュールを生成したいんです。
このCreateが何を指すのかわかりませんが
コンストラクタのオーバーライドは以下のようにします.
type
 TMyDataModule = class(TDataModule)
 public
  constructor Create(AOwner: TComponent); override;
 end;

実装:
constructor TMyDataModule.Create(AOwner: TComponent);
begin
 inherited; // 親クラスのCreateコンストラクタを実行する inherited Create(AOwner); としても可
 // 以下,追加すべき初期化処理を書く
end;
0879デフォルトの名無しさんNGNG
>>878さん
ご親切にありがとうございます。オーバーライドの方法はわかりました。
しかし、僕の説明不足で・・・。
もう一度よろしいでしょうか?

・delphiでDLLを作成する。
・このDLLはVCで使用する(VCから呼ばれる)。
・DLL内にはデータモジュール(class)がある。

DLL内にグローバル関数を作成し、それをVCから呼び、結果を得る事は出来ました。
次に、class(データモジュールです。DLL内で非ビジュアルコンポーネントが使いたいので、それを貼り付けてあります)
を生成して、必用な初期化を行いたいんです。

わかっていない所は、
・VCからこのclassを生成する場合、どのように生成すればいいのか?
 DLL内にグローバルなCreateという関数を用意し、この中でデータモジュールを
 生成するのか?もしそうだとした場合、データモジュールにあるOnCreateイベントの
 引数、(Sender:TObject)には何を指定すればよいのか?

・VCからこのclassを生成する場合、直接、データモジュールのベントにある
 OnCreateを呼ぶ事はお勧めできないとヘルプに書いてあるので、オーバーライド
 する必用がある。オーバーライドするという事は、データモジュールのベントに
 あるOnCreateは使用せずに、自分でconstructorを作る必用があるのか?
 その場合、引数はどうなるのか?

という所がよくわかっていません。どうやってよいのかわからないので、
説明不足な点があると思います。指摘して下されば追記しますので
どうぞよろしくお願いします。
0880デフォルトの名無しさんNGNG
イベントハンドラの仕組み、インスタンスの作り方、関数とメソッド、なんか基本的
なことが分かってないような。VCから見えるのはエクスポートされた関数だけ。
0881デフォルトの名無しさんNGNG
一つ質問してよろしいでしょうか?
なぜVCで作ろうと考えないのですか?
0882デフォルトの名無しさんNGNG
そうですね、基本的な部分もわかっていないです。本当はは基礎を固めてから
行いたいのですが時間がなくて・・・。
ただ、イベントハンドラの仕組み、インスタンスの作り方、関数とメソッド、
ここらへんはわかっていると思うし、VCから見えるのはエクスポートされた関数だけ
というのも気持ちわかっている気でいます。
今、自分が作りたいDLLというのには親になるクラスがないような気がするんです。
親になるクラスがあれば、Create時の引数とかわかるのですが、親がいないのに・・・
なんて考えてしまってます・・・。
知識不足ですみません。
0883デフォルトの名無しさんNGNG
>>881
本当はVCでもよかったのですが、
もともとdelphiのアプリケーションだったんです。
そしたら、今度はインターフェース側がVCで、今までdelphiのアプリケーションだった
ものをDLLとして使用する。
というように方向性が変わってしまって・・。

今後の事もあるし、VCで作成するのもいいけど、とりあえずdelphiで作成しておきたいという部分もあります。
0884デフォルトの名無しさんNGNG
> 親になるクラスがあれば、Create時の引数とかわかるのですが、親がいないのに・・・

普通のアプリでは TDataModule は TForm1 と同じように Application を
オーナとして作られる。DLL でも Application をオーナとして作ればいいのでは?
0885デフォルトの名無しさんNGNG
フォームを表示するDLLは、フォームのオーナにApplicationを設定して作られる。
DLLではウィンドウなしのApplicatiionオブジェクトが自動で作られる。
0886デフォルトの名無しさんNGNG
DLLではウィンドウなしのApplicatiionオブジェクトが自動で作られるんですか、 勉強になりました。ありがとうございます。
えと、とりあえずこんなのを作ってみました。DLL部分です。 動作確認は、今の所、VCではなくdelphiでインターフェース側も作成し確認しています。
で、動いちゃってます。やってる事なんですが、普通じゃないでしょうか?
このクラスのメンバ関数Testですが、これは上記のようにエクスポートする関数(上記ではCreateTestやFreeTestというexportしている関数)を1つかましてアクセスしないとダメなのでしょうか?

public
procedure Test; stdcall; export;
としたいのですが・・・。試してみましたがクラス内にある関数をexportできるかボケ!と怒られました。ダメダメですみません。
プログラムは↓です。
0887デフォルトの名無しさんNGNG
library A;
 −省略−
exports
CreateTest,
FreeTest;
−−−−−−−−−−−−−−−−−−−−−−−−−−−−
unit B
type
TDataMdl = class(TDataModule)
:
public
procedure Test;
end;
procedure CreateTest; stdcall; export;
procedure FreeTest; stdcall; export;
var
DataMdl: TDataMdl;
:
procedure CreateTest; begin
DataMdl:= TDataMdl.Create(Application);
DataMdl.Test;
end;
procedure FreeTest; begin
DataMdl.Test;
DataMdl.Free;
end;
0888デフォルトの名無しさんNGNG
> 試してみましたがクラス内にある関数をexportできるかボケ!と怒られました。

ラッパー関数を作ってエクスポートして下さい。(笑
0889デフォルトの名無しさんNGNG
C++とかでNEWやDELETEするみたいにボタンとかのオブジェクトを動的に生成、削除ってどうやるんですか?
そのオブジェクトへの名前の付け方とかも。
0890デフォルトの名無しさんNGNG
>>888
それって↑の例でやってます・・・。よね?違いますか?
ってか、ラッパー関数使うしかないって事ですか?

0891デフォルトの名無しさんNGNG
Win2K環境で、簡単にI/Oポート(たとえばプリンタポート)を読み書きする方法はありますか?
0892デフォルトの名無しさんNGNG
Delスレで、Win2K環境の質問をする意味はありますか?
0893デフォルトの名無しさんNGNG
>>890
クラスのメソッドをそのままではエクスポートできない、ということでしょう。
CreateTest や FreeTest のなかではなく、単独で呼び出される場合のことだと思う。

if Assigned(DataMdl) then DataMdl.Test;

とかね。DataMdl.Free; も FreeAndNil(DataMdl);
にしたほうがいいね。
0894デフォルトの名無しさんNGNG
なんとなくわかってきました。あともうちょっとという感じです。
ある程度作ってみて、もう少し悩んでみます。で、VCはもっとわかりませんが、とりあえず動作するようなものを作ってみて試してみます。

みなさまどうもありがとうございました。
またわからなくなったらご教授お願いします。
0895デフォルトの名無しさんNGNG
教えてください。
TMemoのCanvas上で、
指定したpixel[x,y]が○色だったら、△色に変える。などを高速にやりたいんですが、
BitmapのScanlineみたいに、高速に色々出来る方法無いですか?

0896デフォルトの名無しさんNGNG
ないです
0897デフォルトの名無しさんNGNG
TMemo にはそもそも Canvas がない
0898895NGNG
すみませんでした。
他のCanvasがあるコンポーネントの場合では、出来ますか?
0899デフォルトの名無しさんNGNG
見えているところなら、同サイズのTBitmapのインスタンスに写し取ってから、加工して
また貼り付けたらいいんじゃないの?
0900895NGNG
今自分の書いてるものが、
899さんの言う方法でやってるんですが、
何か写し取らないで済む方法があったらあやりたいと思った次第で
質問させて頂きましたが、無いようなんで諦めます。ありがとうございました。
0901デフォルトの名無しさんNGNG
ScanLine というのはビットマップ特有の構造に依存してる。Canvas は画像そのもの
ではないので、ScanLine に相当するモノはもってない。Canvas 間の画像のコピーは
BitBlt()をラップした CopyRect() などを使うと高速で実行できるので、オフスクリーン
ビットマップに写し取ってから加工するという方法は、かなり一般的だよ。
0902デフォルトの名無しさんNGNG
>>872
一応ヘルプは読んだのですが意味解らんでした

>>873
どうしてそうなるのか自分で試してもよくわからなかったです


どうやら論理演算子とビット演算子というのが理解できてないみたいです
0903デフォルトの名無しさんNGNG
>>902

ここ読んでみては?

http://homepage2.nifty.com/Mr_XRAY/Halbow/Notes/N016.html
0904デフォルトの名無しさんNGNG
2chブラウザのOpenJaneがオープンソースだということでdelphiを始めてみました。
プログラムに触れたことは初めてです。
初歩的な質問なのですがデバッグのやり方が詳しく説明をされているHPなどは御存じ無いでしょうか?
OpenJaneで書き込みをしてみたところエラーダイアログがでるのですがその内容の意味すら分からないので
エラーダイアログの意味やバグを起こしている部分を探すやり方などを知りたいです。
よろしくお願いします。
0905デフォルトの名無しさんNGNG
>>904
F1キー押せ
0906デフォルトの名無しさんNGNG
>>891
ありますよ。
GWIOPM と GIVEIO が有名です。
私はGWIOPMを使っています。 GWIOPM.pas をuses して
GWIOPM_Driver.:=TGWIOPM_Driver.Create;
Status:=GWIOPM_Driver.OpenSCM;
Status:=GWIOPM_Driver.Install('' )
Status:=GWIOPM_Driver.Start;
Status:=GWIOPM_Driver.DeviceOpen;
を順に実行
if ERROR_SUCCESS = Status then
begin
GWIOPM_Driver.LIOPM_Set_Ports(sadr, eadr, true); <-プリンタポートの開始アドレス 終了アドレス
GWIOPM_Driver.IOCTL_IOPMD_ACTIVATE_KIOPM;
GWIOPM_Driver.DeviceClose;
end;
GWIOPM_Driver.Remove;
GWIOPM_Driver.CloseSCM;

とやれば I/O命令がその部分だけ使えるようになります。
Win9x系ではこのサービス呼び出しが失敗しますがどうせI/O命令はそのまま使えるので両方で動くプログラムになります
0907デフォルトの名無しさんNGNG
I/O命令 バイト入出力命令を使う方法は
function PortIn( adr:integer): integer;
asm
mov edx,eax
xor eax,eax
in AL, DX;
end;

procedure PortOut( adr,dt:integer );
asm
XCHG eax,edx
out DX, AL;
end;
0908デフォルトの名無しさんNGNG
>>895
TMemoにはCanvasが無いから、その変更したい位置のデスクトップDCを取得して
そこに描画するとかXORとかをかければ一瞬色は変えられるよ。
文字を編集したりすれば元に戻っちゃうけどね
0909デフォルトの名無しさんNGNG
>>889
ttp://hp.vector.co.jp/authors/VA014436/prg_memo/delphi/c_d.html

ボタンの場合は
var btn:TButton:
begin
btn := TButton.Create(self); <- フォームのメソッドで書かれる場合はself でなければ親を指定
//親が無ければ selfはnilでもいいけど、その場合自分が管理しないといけない それにボタンは単独では存在できないので窓が必要

その後、
btn.Parent:=self; //Createの引数はメモリを管理してくれる所、これはどの窓に属するボタンかを示すために必要

後は、サイズや表示位置や表示するかどうかとかCaptionとかを指定する。
動的に作ったボタンは名前を付けなくてもいい。自分で変数名 例:btnで管理すればいいから。
0910デフォルトの名無しさんNGNG
OSがインストールされた日付や時刻を知る方法はありますか?

0911デフォルトの名無しさんNGNG
GetSystemDirectory とかのフォルダーの作成日付で代用してみたら?
0912デフォルトの名無しさんNGNG
はあ、なんか最近Delphi調子悪いな…
起動→とりあえず全て保存→何故かアドレス読み込み違反
なんだかなぁ…
0913デフォルトの名無しさんNGNG
一度
del /S *.tds
del /S *.~*
del /S *.dsk
del /S *.dof
del /S *.dsm
del /S *.dcu
del /S *.DBG
del /S *.$$$
とかを実行してみたら? >>912
0914デフォルトの名無しさんNGNG
>>912
IDEにインストールされてるコンポーネントで、自作物のチェックを一つづつ外してから同じ事をして確認。
原因コンポが判ったら、それを再コンパイルしてみるとか、諦めるとか、デバッグするとか
0915デフォルトの名無しさんNGNG
Delphi6Personal使用者です。
ポップアップメニューで、特定のフォルダの内部に置かれたファイルを
操作したいんですが、メニューをフォルダやファイルに対応させた
構造にする方法が分かりません。フォルダの構造を解析して、
フォルダやファイルに対応するメニューを作成すれば良いんでしょうが
その方法がよく分かりません。
どうすればいいんでしょうか。
ご教授お願いします・・・。
0916デフォルトの名無しさんNGNG
>>915
すまんが、言ってる内容の絵が浮かばない。
0917デフォルトの名無しさんNGNG
FindFirst,FindNext,FindClose
再帰処理
0918デフォルトの名無しさんNGNG
>>915
・ディレクトリの中身を解析するにはFindFirst関数(FindNext,FindClose)を使う
・実行時にメニュー項目を増やすには
 TMenuItemのインスタンスを作りCaptionとOnClickプロパティを設定、
 追加したいMenuItemのAddメソッドでそのインスタンスを指定する。



0919デフォルトの名無しさんNGNG
>>915 俺もやろうとして挫折したよー。
0920デフォルトの名無しさんNGNG
>>916
済みません、915は何か分かりにくいですね。
要はWindowsのスタートメニューやIEのお気に入りのように
メニューからプログラムフォルダ内のショートカットを立ち上げたりとか、
Favoritesフォルダ内のURLファイルを立ち上げたりとか、そういう風な
処理をしたいんです。

どうすればいいのか全く見当がつかないので、とりあえずメニューを
起動時に作成する処理を検索して見つけたソース↓
ttp://forum.nifty.com/fdelphi/faq/00138.htm
を元に適当に作ってみたのですが、
メニューを追加する事は出来たのですが、サブメニューを追加しようとすると
デバッガで「未定義の識別子:'Menu1'」と怒られてしまいます。
0921918NGNG
自分で言っておいて難だけど、
再帰処理で末端までファイルスキャンして一気にメニュー項目作る方法はあまり良くない。
(もの凄い時間がかかるし、リソースも無駄遣い)

「ディレクトリ」であるメニュー項目をポップアップした瞬間に、
直下にあるファイルのみをスキャンしてサブ項目を作成、これを表示させる方が良いと思う。

しかし、これがDelのVCLの機能だけではこういう事が出来ないんだ…
VCLのオーナードローイベントを流用する裏技もあるが、これはこれで面倒だし。
0922デフォルトの名無しさんNGNG
ポップアップメニューにせずにListViewにフォルダ内のファイル一覧を表示とかは駄目?
というより>>920の説明を見てさらに分からなくなった。
0923デフォルトの名無しさんNGNG
>>917
>>918
どうもありがとうございます。
参考にさせていただきます。頑張ります。

>>919
ええ?・・・もしかして結構難しい処理なんでしょうか?(;´Д`)
初心者なんでかなり不安です・・・。
0924デフォルトの名無しさんNGNG
サブメニュー作っておかないと右向きの三角出てこないし
作っておくには下のフォルダ見に行かないと行けないし
メニューアイテムにはonダブルクリック無いし

辛かったよホンマ。
0925915NGNG
>>922
どうもポップアップメニューという事が混乱の元になってるような気が・・・。
実は自分が作ってるアプリはメニューの代わりにツールバーを
使用してて、ツールバーのボタンを押すとボタンの上にポップアップメニューが
出てくるようにしてるんです。
単にメニューで出来る事を、ポップアップメニューで肩代わりしてるだけなんです。

ListViewなら簡単に出来そうですね・・・うう、誘惑に負けそう。
0926デフォルトの名無しさんNGNG
やっぱりどうも絵が見えてこないんだが…。
やりたいことは、その方向じゃないと出来ないのかな?
「ダイアログで開いて(?)何かする」って方向はダメなんかい?
0927デフォルトの名無しさんNGNG
状態をキャッシュし通知イベントで更新するのもよいが、シェルインターフェイスが標準である予感。
0928デフォルトの名無しさんNGNG
最善の方法をよーく考えよ〜、お金は大事だYO

漏れには少し絵が見えてきたかもしんない。
IEの[お気に入り(&A)]をクリックした時に出てくるメニューみたいなのをつくりたいって意味だよね?
違ったらもうだめぽ

>単にメニューで出来る事を、ポップアップメニューで肩代わりしてるだけなんです。
宿題か何か?
その方法を選んだ理由をきぼんぬ。
特に意味がないなら他の方法でええんじゃないかな
0929デフォルトの名無しさんNGNG
たぶん マイコンピュータ とか フォルダを画面端に持っていって
ドロップするとでてくる奴だとおもう。
0930デフォルトの名無しさんNGNG
すまん。純粋に煽りでもなんでもなく、>>929のも分からん(^^;。
とりあえず、質問主は「他の代替法でも可って話」なら、一考すれってことで。
0931デフォルトの名無しさんNGNG
>>903
ありがとうございます。なんとなく理解できました
0932デフォルトの名無しさんNGNG
Canvasへの描画について教えてください。

白白白白白白白白白白白白
白白赤赤白白白青青白白白
黒黒赤赤黒黒黒青青黒黒黒 ←こんな線を描く事は出来ますか?
白白赤赤白白白青青白白白 (背景と違う色を避ける線を描きたい)
白白白白白白白白白白白白
0933デフォルトの名無しさんNGNG
>915
これ?
http://www30.tok2.com/home/garandou/info/launchpop/launchpop.htm
0934デフォルトの名無しさんNGNG
>>932

出来る
0935デフォルトの名無しさんNGNG
マ板の談話室から来ました。

Delphi 6 Personal を使っている初心者です。

標準電波を受信して、PCの時計合わせをするアプリを考えています。
受信機とPCはシリアルで繋ぐ予定ですが、
恥ずかしながら肝心の時計合わせの方法が分かりません。
Personal版のせいか、RecodeSecondやSecondOfが
使えないようなのです。
どなたか解決法をご教示いただけないでしょうか。

マルチになってしまいましたが、よろしくお願い致します。
0936デフォルトの名無しさんNGNG
>935
とりあえずusesにDateUtilsを追加してみる。
0937デフォルトの名無しさんNGNG
時計を標準時に合わせてくれるソフト
http://pc5.2ch.net/test/read.cgi/software/1058177751/
0938915NGNG
>>928
>IEの[お気に入り(&A)]をクリックした時に出てくるメニューみたいなのをつくりたいって意味だよね?
あ、そういう事です。そんな感じです。

>その方法を選んだ理由をきぼんぬ。
フォームの上に、メニューとツールバーの二列があると無駄に場所を取ってるような
気がしたので、メニューを作らずに、メニューの代わりにツールバー上のボタンを押すと
ポップアップメニューが出てくるようにしました。
でも確かに素直にメニュー使った方が楽ですね。

>>933
あ、ありがとうございます。早速使ってみます。
0939935NGNG
>>936
ありがとうございます。DateUtils追加で SecondOfなどが使えるようになりました。
あと、Windows APIのSetLocalTimeというのを使わなければいけないのですね。
最初バグっていて、1899年になってしまったのにはビビりましたw

>>937
いや、そういうことじゃなくてw
0940デフォルトの名無しさんNGNG
突然ですが、質問です。
プログラムを始めようと思っているのですが、C言語かC++言語にしようか
迷っています。ですが、友達からC++のソフトMicrosoft Visual C++ 6.0を
貰って、それをインストールしました。
これでも、C++のソフトでもC言語はできるのでしょうか?
あと、他にイイ言語があれば教えてください。
よろしくお願いします。
0941デフォルトの名無しさんNGNG
日本語
0942デフォルトの名無しさんNGNG
。・゚・(ノД`)・゚・。なんでここできくんだー
0943デフォルトの名無しさんNGNG
2ちゃん初心者です☆すんません(ノ_・、) ぐすん。。
どこで聞いたらいいからわからなかったので、
とりあえず、相談室って書いてあったので、書き込んでみました。
0944デフォルトの名無しさんNGNG
とりあえず、CやC++って書いてるスレにしてほしかったなw
まぁ、ここに来たのも何かの縁
Delphiやってみない?
0945デフォルトの名無しさんNGNG
それってなんなんですか?聞いたことがないんですが・・・
0946デフォルトの名無しさんNGNG
「相談室」の前に書いてるやん…
Winプログラミング言語の一つ
0947デフォルトの名無しさんNGNG
釣り。
スルー。
0948デフォルトの名無しさんNGNG
Delphiいいよ
個人的には、ひまわり、HSP、VB、Delphiの中では一番感触良いと思う
0949デフォルトの名無しさんNGNG
なるほど。たくさんプログラミング言語があるんですね。
で、Delphiっていうのは難しいんですか?
パソコンを触って1年ぐらいで、あまり知識がないと思ってるですが・・・
0950デフォルトの名無しさんNGNG
超初心者には一番向いてるんじゃないか とは思う。
0951デフォルトの名無しさんNGNG
>>949
Delphiいいよ
噛めば噛むほど味が出る
しかもPersonal版はフリー(無料)
0952デフォルトの名無しさんNGNG
マジですかっ!?
それは是非教えてほしいです!
詳しく、教えてもらえませんか?
時間があればでいいので
お願いします
0953デフォルトの名無しさんNGNG
>>952
http://www.borland.co.jp/delphi/personal/
0954デフォルトの名無しさんNGNG
漏れが初めて行った初心者用サイトはここ。
http://oto.chu.jp/kujira/text/delphi/zero/
非GUIだらけなんで、あんまり面白くない。初心者にはオススメできない。
「少し」慣れたくらいで行くほうがいいかも。「他の言語でもいいや」って人はたぶん途中で投げてしまう。
結局ここを通ってしまった漏れは、GUIプログラミングに移行するのにかなり苦労した。

http://kakinotane.s7.xrea.com/
ここのDelphi入門は比較的楽しかった。

書籍なしでここまで来ちゃったよorz
0955デフォルトの名無しさんNGNG
ttp://wblue.web.infoseek.co.jp/
漏れが初めてDelphiを勉強したのはここだったな。
0956デフォルトの名無しさんNGNG
つーか、クソマルチに反応するなよ。
0957デフォルトの名無しさんNGNG
どうしても初心者から抜けだせん・・・ハァ(・_・ )
0958デフォルトの名無しさんNGNG
下手糞の上級者への道のりは 己が下手さを知りて一歩目

クラス設計下手すぎ_| ̄|○
0959デフォルトの名無しさんNGNG
910です。答えありがとうございました。
0960デフォルトの名無しさんNGNG
inheritedに関して教えてください。
例えば、他のコンポの継承クラスを作る場合、Constructorと、Desructor
それぞれでinheritedする必要があると思いますが、これは自分自身(継承
元)をいじる場合以外には、基本的にinheritedはConstructorとDestructor
内の最も最後で行えばいいんでしょうか?
Destructorは特に流れからいうと、一番最後にinheritedすればいいように
思うのですが・・・

あと、TObjectの継承クラスの場合には、Createでinheritedしていない
サンプルが多いように思いますが、TObjectの継承クラスの場合は
Createでinheritedしなくてもよい(してもよい?)んでしょうか。
0961デフォルトの名無しさんNGNG
>>960
コンストラクターは最初にいんへりっど
デストラクターは最後にいんへりっど
でやってりゃあ間違いない。
0962デフォルトの名無しさんNGNG
>>960
>あと、TObjectの継承クラスの場合には、Createでinheritedしていない
>サンプルが多いように思いますが

TObjectのconstructorであるCreateは仮想メソッドじゃないからoverride出来ない
つまりinheritedは意味が無い

しかしTObjectのdestructorであるDestroyは仮想メソッドだからoverride出来る
つまりinheritedは意味がある
なんでDestroyが仮想メソッドかはどこかで説明があったはず
どわすれしたので、その辺は探しておくれ
0963962NGNG
あ、たぶんTObjectのDestroyを仮想メソッドなのはFreeで呼ばれるからと思う
今、ソース見ておもた

//引用TObject.Free
procedure TObject.Free;
begin
if Self <> nil then
Destroy;
end;

違ってたら、偉い方よろしく
0964デフォルトの名無しさんNGNG
なるほど〜inheritedの使い方がわかりますた。
了解です。ありがとうございました。
0965デフォルトの名無しさんNGNG
Indy9 のTIdHTTP を貼り付けるとアプリを起動して終了するだけで
メモリリークが発生(MemCheck で確認)するんですが
何とか回避できないでしょうか?
0966デフォルトの名無しさんNGNG
ソースをいじれ
0967デフォルトの名無しさんNGNG
>>962
inheritedを使うのに仮想メソッドであるかどうかは関係ない。
コンストラクタでinheritedを使うのは親クラスの初期化処理を任せるためだ。
TObject直下のクラスがコンストラクタをinheritedしないのは
TObject.Create自体に処理がないから省略しても問題ないと言うだけのこと。
0968デフォルトの名無しさんNGNG
ActiveXの取り込みでMSXMLをインストールしようとしているのですがリストにMSXMLがありません
どうすれば出るでしょうか?

IE5SP4+XML4SP2
0969962NGNG
>>967
おお、ほんとだ。。。
ちょっとテストしたら、確かに仮想メソッドかどうかなんて関係有りませんでした・・・
また一つ勉強になりました
ありがとう
0970デフォルトの名無しさんNGNG
なぁ、きいてくれ
DelphiWorldにあるDBCloneCtrlGridちゅうのを使って開発してたんだが
いざ、開発終了間近になって、MemCheckにてメモリーリークがないかチェックをしたのよ
そしたらDBCloneCtrlGridがリークしてるのよ・・・
しかもとんでもない数のリーク量・・・
DataSetをOpen,Closeするだけでどんどん増えていく・・・

なぁ、神よ、、お馬鹿なわしは直すことができない
どうか力をかしてくれまいか・・・
0971デフォルトの名無しさんNGNG
そのコンポ使ってないから何とも言えないが
公開されてるコンポにエラーがあるなら作者に通報すべき

くれぐれも勘違いで先走らないようになw
0972970NGNG
いや、それがもうDelphi使って無いらしくて
サポートできないと言われました・・・

はぁ、まじ鬱だ、、自分の技術力の無さに・・・
0973デフォルトの名無しさんNGNG
>>970
メモリリークなんてほとんど修復不可能じゃん。
あきらめてそのコンポを使うのやめれ。
0974970NGNG
わかりました・・・
あきらめて、他を探してみます

返答、ありがとうございました
0975デフォルトの名無しさんNGNG
>>972
> いや、それがもうDelphi使って無いらしくて
> サポートできないと言われました・・・

見てみるから、ソース頂戴って言ってみたら ?
0976デフォルトの名無しさんNGNG
次スレ立てます。
0977デフォルトの名無しさんNGNG
次スレ立てました

くだすれDelphi(超初心者用)その13
http://pc5.2ch.net/test/read.cgi/tech/1081003641/
0978デフォルトの名無しさんNGNG
>>977
乙です。
0979970NGNG
>>975
実はソースはあるのですが
ほんとかなりの量で、しかもDataBase系のコンポ・・・
DataLinkとかなにやら聞いたことのないものから継承してて・・・

今日もしばらく見てみましたが、けっきょくわからず・・・
ただただ、私の技術がないのを再確認しただけにいたりましたです・・・
0980デフォルトの名無しさんNGNG
>>979
> ただただ、私の技術がないのを再確認しただけにいたりましたです・・・

なら、あきらめるしかなかろ。
0981デフォルトの名無しさんNGNG
アイコンをタスクバーにもアイコントレーにも表示させないように
するにはどうすればいいですか?
0982デフォルトの名無しさんNGNG
>>981
日某のQ&A
0983デフォルトの名無しさんNGNG
TListViewのColumnを実行時に増やすにはどうすればいいですか?
0984ななしへたぐらま ◆XcB18Bks.Y NGNG
>>983
var
NewColumn: TListColumn;
(中略)
NewColumn := ListView1.Columns.Add;
NewColumn.Caption := '見出しだ';

…みたいな感じで.
0985デフォルトの名無しさんNGNG
ありがとうございますた。
0986デフォルトの名無しさんNGNG
>>970
今のPCはメモリいっぱい積んでるんだから気にするな。
クライアントで動かすんなら就業時間しか使わないから、日々PC再起動で問題ないでしょ。
あとでこっそり直しとけ。
0987デフォルトの名無しさんNGNG
ソース見て直せばいいのに。
俺だったら嬉々としてやるね。
0988デフォルトの名無しさんNGNG
ソースがあって、Open,Closeするとリークするって解かってるんなら
結構簡単に治るかもよ。
0989デフォルトの名無しさんNGNG
まず、リークしてるオブジェクトを特定する
 VCLオブジェクトならNameやClassNameから検索できるだろう
0990デフォルトの名無しさんNGNG
質問です。
FindClose関数を呼び出すと必ずTSearchRecが引数になっている方が
呼び出されるんですか?
Windows.pasにWin32APIのFindCloseの定義が書かれていますが
こちらを呼ぶ場合は毎回Windows.FindCloseなどのような書き方を
する必要があるんでしょうか。
よろしくお願いします。
0991デフォルトの名無しさんNGNG
FindClose() は、SysUtils.pas、そして、Windows.FindClose はいうまでもなく
Windows.pas にある。コンパイラは uses 節の後ろのほうから探すので、上記の
pas の順番を入れかえると、Windows.pas のほうが優先される。しかし、ほかにも
API とダブってる関数やメソッドがあるので、順番の入れ替えはしない方がいい。
毎回 Windows.FindClose() のように書くのを勧めます。
0992デフォルトの名無しさんNGNG
なるほど、よくわかりました。
誠にありがとうございました。
0993デフォルトの名無しさんNGNG
BCBでわざわざGraphics::TBitmapと書くのが面倒です。
0994デフォルトの名無しさんNGNG
そうだね、Windows の TBitmap はレコード型だったね。Delphi では普通、
uses 節の前のほうに Windows があるので、クラスの TBitmap はそのままで
使えるね。
0995デフォルトの名無しさんNGNG
なぜこのスレにBCB
0996デフォルトの名無しさんNGNG
typedefで書きやすい名前にしるぇ
0997デフォルトの名無しさんNGNG
>>リーク直せない(´・ω・`)
そういうときこそGarbage Collectionコンポの導入ですよ
昔どっかに落ちてて拾ったょ
0998デフォルトの名無しさんNGNG
くだすれDelphi(超初心者用)その13
http://pc5.2ch.net/test/read.cgi/tech/1081003641/
0999デフォルトの名無しさんNGNG
999
1000デフォルトの名無しさんNGNG
⊂⌒~⊃。Д。)⊃
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。