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

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


★前スレ
くだすれDelphi Part7 (超初心者向け)
http://pc2.2ch.net/test/read.cgi/tech/1065195699/

★その前
http://pc2.2ch.net/test/read.cgi/tech/1063202727/
http://pc2.2ch.net/test/read.cgi/tech/1061090908/
http://pc2.2ch.net/tech/kako/1058/10588/1058834815.html
http://pc2.2ch.net/tech/kako/1055/10559/1055986736.html
http://pc2.2ch.net/tech/kako/1053/10537/1053757982.html
http://pc2.2ch.net/tech/kako/1051/10518/1051882835.html

★ご注意
・質問者は捨てで良いのでなるべくトリップを付けましょう。
・煽り荒らし騙りは放置してください。悪質な場合は削除依頼へ。
ひかりのどけき2GET
推奨テンプレ(嘘

kakinotane.s7.xrea.com/dirDelphi/mainmenu.html ここで
一通り練習してみよう。
まずは「基礎から学ぶDelphi講座」を最初から最後まで、実際に入力しながらやってみる。
その後、自作コンポーネントの道の「はじめに」から「クラス参照型について」までやってみよう。
そしたら一通りは動かせるようになるので、
「3分で作ろうアプリケーション」の出来上がりをみて、ソースを見ず考えて作ってみよう。

そしたら、それぞれのVCLの使い方、役立つ関数を覚えていこう
VCLの使い方はココ www.geocities.jp/takamori700/index_03.html
関数はココ www.borland.co.jp/tips/delphi/dh002/index.html

これを全部こなせば、とりあえず一通りのことはできるようになるぞ






















>>1-5
( ・∀・)つ〃∩ オツーオツーオツーオツーヌツールツーポツーヌルポー
>>7
      ∧_∧ハゥッ
   ∧_(Д`; )←>>7
  ( ・∀・)   つ
  (っ  ≡つて ヽ ガッ!
  して_)_ノw (_)
9sage:03/12/13 23:08
フォームにComboBoxを20個くらい貼り付けてるんですが、
9x系だとリソースを大量に食いつぶしてしまいます。
なんかいい方法ないっすかね?
>>9
ソレは「いっぺんに表示する必要」があるの?
分けられるなら、用途別に分けて使い回すとか。
コードは面倒臭くなるだろうけど。
Win2k/XP導入。それが一番簡単だ。
俺は、もう9X系のサポートは打ち切った。制限多すぎるしね。
12デフォルトの名無しさん:03/12/14 00:43
コンボボックス20個使うようなソフトに興味がある
Del厨のセンスは最悪ですねw
リッチテキストエディタを作りたいのですが、行ごとや選択範囲のみにボールドなどの装飾や
フォントサイズの変更はできないのでしょうか?
出来る。
16デフォルトの名無しさん:03/12/14 01:12
>>14
(Delphiインストール先)\Demos\RichEdit
コンボボックス20個ってそれだけで画面の半分以上が埋まりそうだね
>>9
レスが無い所を見ると、「煽られたのでイヤになった」か「元から釣りだった」の
どっちかだろうか?
TEditでウムラウトのついた文字も扱いたいのですが、どうすればいいでしょうか?
20デフォルトの名無しさん:03/12/14 08:13
Delphiでは無理
>>12
アンケートフォームとか。
Delphi6ってXPでも使えますか?
>>22
取りあえず試せば?
>>23
XPのほうを買うかどうか迷ってます
>>24
買うほどのOSじゃないよ。
if a = 0 then
処理1
else
処理2

なんで処理1、処理2の後ろにはセミコロン要らないの?
Cから移ってきたんだけど、こういう細かいところが変なので覚えにくい・・・
>>26
セミコロンは文の終わりではなく区切りを表すものと考えて下さい(略

Delphi3Q&A150選 P66より。
>>26
処理2の後は必要でしょ。
>>28
いや、最後が所属ブロックのend;かend.ならいらん。
3126:03/12/14 12:02
なんとなく、ほんとになんとなくだけど分かったと思うw
if文全体を「文」として考えるんですよね・・・?
すぐ後ろがend;ならそこで結局区切られるからセミコロンは要らないってことなのかな。
>>26
超マジレスすると、、、
Cのセミコロンは「文末」を意味する。だからセミコロンも文の一部。
Pascalのセミコロンは「文同士の区切り」を意味して、文の一部ではない。

Cのifの構文は、「 if(条件) 文1 [else 文2] 」だから文1の後ろにもセミコロンが付く。
Pascalは「 if 条件 then 文1 [else 文2] 」だから文1の後ろにセミコロンは不要。

ちなみにPascalは本来文がある所に文が無い場合は「空の文がある」と仮定する。
だからendの直前の文の末尾にセミコロンがあると、セミコロンとendの間に「空の文」が
あると解釈される。

だから、then の直後にelseを書いたり、elseの直後にセミコロンを書いたりしても
エラーにはなりません。
case文のコロンの後ろに文を書かずにセミコロンを書いてもエラーにならないし。
自慢房がいますね
そんなことは入門サイトのリンク貼って終わり、得意気になに調子のってんだか。
パパパスカルマスターしたぞー、とか思ってるんじゃね?
 ∫,,,,,,,,,∧,,∧   >>32わかりやすい説明っすね
⊂,,,,,,,,,つ,,゚Д゚ミつ

質問です。
コンパイルしたExeのファイルバージョンは
オプションダイアログで設定できますが

それと同じ値を"製品バージョン"にも
自動で反映させてあげたいのですが
どうすればいいんでしょうか?

お願いします。
>>33
パパパスカルマスターしたぞーniワロタ
36デフォルトの名無しさん:03/12/14 13:20
C製のDLLをインポートして使うときに
CのヘッダファイルからObjectPascalの関数/手続き宣言を生成してくれるようなツールってない?
SWIGのDelphi版みたいなの。
 ∫,,,,,,,,,∧,,∧   もひとつー。
⊂,,,,,,,,,つ,,゚Д゚ミつ

SQL鯖2000にTADOなんちゃらを使って接続しています。
SELECTを呼ぶときとUPDATEを呼ぶときで
呼び出し方が違うですが
これを同じ方法で呼び出すことはできますか?
やりかた教えてください。

SQL鯖2000のQueryAnalyzerは
どっちのSQLでもOKだったりするので
いいなーと思います。
>>33
でもDelphi上級者でも平気でendの前のセミコロンは省略可能、とか言ってる奴が居るな。
そして変な例外を作るな!と他言語信者から言われる。

むしろPascalの方がbegin..endもforもifも、全て文という同一概念で扱ってる点では
文法的に美しいのだが。
>>38
最初は、なんでこんなつながりでエラーでないんだよ!
と思ってたけど、慣れると見やすい。
どこが区切りがわかりやすいね。
すみません、「TUIWebBrowser」というフリーのブラウザーのコンポーネントに
ついての質問です。(フリーのコンポーネントの質問でもよいのでしょうか?)

ActiveXの実行などを止めたくて、DownLoadControlプロパティを下のように
設定しています。
 browser := TUIWebBrowser.Create(self.WebPanel);
 TOleControl(browser).Parent := self.WebPanel;
 browser.DownLoadControl := [];
 browser.DownLoadControl := browser.DownLoadControl + [CS_NoScripts];
 browser.DownLoadControl := browser.DownLoadControl + [CS_NoJava];
 browser.DownLoadControl := browser.DownLoadControl + [CS_NoActiveXRun];
 browser.DownLoadControl := browser.DownLoadControl + [CS_NoActiveXDownLoad];
 ページを表示する

この時点の設定は効くのですが、ページを表示した後から設定を変えようと
下のようにしても反映されませんでした。
 browser.DownLoadControl := browser.DownLoadControl + [CS_Videos];
 browser.DownLoadControl := browser.DownLoadControl + [CS_BGSounds];

色々検索してみたんですが、C関連のページしか見つからず(QueryInterface
やOnAmbientPropertyChangeを使用していました)、Delphiでの解決方法が
見つかりませんでした。
どのようにしたら良いのでしょうか?よろしくお願いします。
>>40
それは作者に聞いたほうがよくないかい?
IndyのIdTCPServerをつかってプログラムを組んでいます.
ところがプログラム内部でApplicaiton.Terminateしても.何事もなかったかの
ようにプログラムは動きつづけます(終了してくれません)
直ちに終了させる方法はないでしょうか?

PostMessage(Application.Handle, WM_CLOSE, 0, 0);
を使うとIndy内部でごちゃごちゃと後片付けをやっていてプログラムの終了が
とても遅いです.

やりたいことはバッチファイルで自身の削除コマンドが実行される前に
自身を終了させたいのですが…
>>42
TIdTCPServerがConnectしたままになってないか?
Disconnect済みか?
44煽りじゃないけど:03/12/14 18:22
>>42
自分が何してるか、何したいか理解できてないっぽくないか?
なんでわざわざ自分自身にPostMessageでWM_CLOSE飛ばすの?
こちらとしても何したいのか分からない。無駄が多い気がする。
いきなりApplication.Terminate;呼ぶのもあまりよろしくないかと。
漏れはメインフォームのDestroyに片付け処理(>>43のような)入れて最後にTerminate呼ぶようにしてる。

サンプル蔵より
"実行ファイルの自殺幇助バッチファイル"
http://forum.nifty.com/fdelphi/samples/00578.html
45デフォルトの名無しさん:03/12/14 19:13
>>34
はぁ?両方ともダイアログで設定できるだろ?数行下の設定すんのに横着すんな!

>>37
はぁ?ADOコンポでどうやってSELECTやUPDATEしてんのか書け!ボケ!
もちろんQueryAnalyzerのもだ。ソース出さずに質問すんな、カス!
>>43
>>44
>>なんでわざわざ自分自身にPostMessageでWM_CLOSE飛ばすの?
えっと終了させたいのでこうしました,これはだめなんですか?

サンプルのほう見てなんとかやってみます
ありがとうございました
スレ違いじゃないと良いんだけど・・・
Delphiで課題出されたんですよ。

別のアプリケーションのウィンドウを監視して、特定の画像が現れたらマウスで追尾するアプリを作れと。。
2ヶ月以内に作れないと大学を干されんばかりの危機的状況なので。
Delphiやディジタル画像処理入門の書籍を読みあさって、Delphiの超基礎とテンプレートマッチング法の理屈までは理解出来たのですが。
いざ作るとなるとどうしたらいいのやら・・・(;´Д`)
C言語とオブジェクト指向がなんたるか程度なら分かりますが、Windowsアプリ開発とやらの経験が一切無くて。どうにもこうにも。
専門用語パリパリの説明でもクソ必死に勉強しますんで、どうかアホ学生の僕を導いて下さい。

今、妄想してる作り方はこんな感じです。是非ツッコミを
1.本体アプリのデザイン
2.別アプリの画面を取得(TScreenで良いのでしょうか・・・)
3.テンプレートマッチング法で特定画像の位置検出
4.マウスの自動操作

長文スンマセン
48デフォルトの名無しさん:03/12/14 20:41
>>47
うーん、これだけだと漠然としていてなんともいえないけど、とりあえず…

1.に関しては、フォームとコンポのデザインてことかな?
今回のような目的ならたぶんButton1個と監視用のTimer置くだけでしょう。

2.に関しては、別のアプリというのが特定のものなのか不特定多数なのかに
よるけど、「必ずアクティブである」という条件なら、Alt+PrintScreenをTimerで定期的に投げちゃえばいいのでは?
プログラミングでの画面キャプチャの仕方は検索すれば出てくる。

3.これは知らんので、頑張ってちょうだい。画像そのものはTPictureあたり見て。

4.マウスの自動追尾ってのがどういうことをしたいのかよく分からないけど、
マウスポインタの位置を変えたいならGetCursorPos、SetCursorPosのWindowsAPIを使うことになる。

いずれにせよ、もう少し仕様を固めてからまた質問しに来た方がいいよ。
たしかに
>別のアプリケーションのウィンドウを監視して、特定の画像が現れたらマウスで追尾するアプリ
の意味がわかんない。

別アプリが何かもわかんないし、特定の画像がどんな画像なのかもわかんない。
特定の画像といっても、動画、アニGif、静止画(フルカラー、256色、16色)とかあるし。
画像だから、動画とアニGifは違うかもしれないけど・・。

あとマウスで追尾というのも、よくわかんない。画像の縁をなめるのか、画像が白黒の円で、
その円周をなめるのか、特定の画像がきたとき、画像の真ん中にポインタがいくのか。
あと、マウスで追尾=マウスカーソルで追尾かどうかもイマイチわからんし。
5040:03/12/14 21:21
>>41
レスどうもです。
うーん、配布ページに掲示板が見当らなかったのと、なんとなく作者さんに
直接質問メールを送るのは気が引けたので。もう少し調べてわからなかったら
考えてみます。

それでもうひとつ質問なんですが、>>40とおなじような事を通常のIEコンポで
行う事は可能でしょうか?
スクリプト実行や画像表示の切り替えと、ページ表示後にも設定を切り替え
られるようにしたいのですが。
5147:03/12/14 21:49
>>48
即レスありがとう

1に関しては大体そんなつもりで書きました。
1〜4に挙げたプログラム根幹の部分が出来たら、インターフェースも色々と試行錯誤しようかと思ってます。
(追尾に関する設定を入力可能に出来るようにする等)

2でPrintScreen→ファイル読み込み→マッチング処理は考えてみました。(別アプリは必ずアクティブです)
ただし、可能な限り高速化しろとの事ですので。HDDを通さないように、リアルタイムで画面を取得出来る別の方法を検討中です。

4のGetCursorPos、SetCursorPos。ググッってみました。
恐らく、これを使う事になると思います。ありがとう。。。 WindowsAPI=C言語でいう関数 みたいなニュアンスなんですね。
コンポーネントとプログラム記述方法しか勉強してなかったや。


具体的な事を言うと。
スクリンセーバーの様にフルスクリーンになっている画面を多角形の図形が動き回るプログラムが用意されていまして。
そこで指定された図形を、マウスで高速追尾するというWindowsアプリを作れと。。(Delphi限定!)
48さんのおかげで、マウス追尾のあたりは出来そうです。たぶん。

今、さっぱりわからんのは。
アクティブになっているフルスクリーンウィンドウの画面情報をバックグラウンドのアプリから取得する方法についてです。
リアルタイムの画面描画って、DirectXなんでしょうかね・・・?(;´Д`)

とりあえず、Delphi関数のあたりを勉強しなおしてきます。
5247:03/12/14 22:08
>>49
やっぱ言葉不足ですよね。申し訳ないです。

別アプリとは51に書いた通りの様な物です。人工知能の研究の初歩中の初歩をやってます。
特定の画像についてですが、
動画やアニGifといったようなファイルではなく。描画されている画面そのものです。
16色の静止画が画面内をランダムに動き回るのを想像して頂ければ、、、

マウスは、画像の中央を常に追尾するような仕様にするつもりですが。
その細かな方法まで全て質問するのはおこがましいかなと思ったので、省きました(;´Д`)
C言語は一通り勉強しましたので、何とかなるかなぁと・・・。がんばってみます。

今まで、Muleの白い画面でプログラミングしてましたが。
初めてのWinアプリ開発で、情報量の多さに戸惑っています。(笑)
>>52
例えばロボットの目にCCDカメラが仕込まれていて、
そのCCDに特定の物体が描画されたとき、それを目が追尾するという
ようなイメージでいいのかな?(ちといい加減すぎるけどw)

画像解析とか、実際に画像を扱った具体的な処理はわからないけど、
画像をキャプチャ>2色化して判別を用意に>TMemoryStreamに入れる
ようにして取り込んで、該当図形のTopとHeight、LeftとWidthを取得して、
その真ん中にカーソルを配置すればいいんじゃないかな。

ただ、その画像が○の時は追尾して、■の時には追尾しないとかは
難しいかもね。

>>50
ブラウザとかの設定って、設定した後にブラウザの再起動を前提とするような
設定ってあるよね。そういう設定だったら、どうしようもないのかもしれないね。

設定有効後にリロードするようにしたり、(もし可能であれば)設定を有効したあと
に直前に表示した内容をキャッシュしておいて、それを読み込むようにするような
感じじゃだめなの?
>>47

デバイスコンテキスト(DC)経由で画面をキャプチャして逝けってことかな。普通はこの方法。
Windowsの制限上別プロセスからだと完璧なキャプチャはきっと無理でしょう。
それでも、自前でバッファ(ビットマップ)を準備しておけばいくらかは速いです。
工夫すれば画像解析部分をマルチスレッドで並列処理すれば速いかな。
再解析する時、前回の位置付近から行うことで処理量を減らせるとか。

マウスカーソルについてはMouse変数が使えるならラップされているので、それで制御するのもいいかと。

GetForegroundWindowで前面のウィンドウを取得できるが、ターゲットが限定されているならば
出題者にその方法を聞くのもよいかと。課題で窓の取得方法を自分で探させるのは関係ない気がする。
それともソフトウェア工学としてならば、自分で調べて解決できるスキルは必要ですが(笑)

まさかアセンブラ化までしろとか言われてないですよね。
5640:03/12/14 23:49
>>54
どうもです。
よくあるタブブラウザーの機能として実装されているのと、似たような処理で
C言語のサンプルがあったので、ページを表示したままでも出来るのかなぁと。
ブラウザーそのものを再生成すると、戻る進むの値も消えてしまうので、出来
ればそのまま反映させたいです。

一応どこか(URLを忘れました)で見つけたCのサンプルはこうなってました。
//画像の表示を無効化
dwDefault &= ~DLCTL_DLIMAGES;
LPOLECONTROL pOleControl = NULL;
LPDISPATCH m_pDispatch = NULL;

m_pDispatch = GetApplication(); //IDispatchインターフェイスのポインタを取得
ASSERT(m_pDispatch);
m_pDispatch->QueryInterface(IID_IOleControl, (LPVOID*)&pOleControl); //OlecontrolインターフェイスをQIします
ASSERT(pOleControl);
pOleControl->OnAmbientPropertyChange(DISPID_AMBIENT_DLCONTROL);
if (pOleControl)
pOleControl->Release();
if (m_pDispatch)
m_pDispatch->Release();
Refresh();

「TUIWebBrowser」で真似して作ろうとしたんですが、ここからわからなく
なってしまいました。
var
 iDisp: IDispatch;
begin
 iDisp := TUIWebBrowser(viewItem.ItemObject).ControlInterface as Idispatch;
 //iDisp.QueryInterface(const IID: TGUID; out Obj): HRESULT;
 iDisp.QueryInterface(IOleCont, ???)
5747:03/12/14 23:50
>>53
そうですそうです、そういった研究の初歩をやってます。
今の段階ではCCDカメラは使っていませんので、追尾する画像はあらかじめ定められています。
(R255 G0 B0 で16×16pixの正方形等です)
ですので、事前に追尾するBitmapを用意して。それと一致した画像を追尾するという方法を使います。
この方法をテンプレートマッチングと呼ぶそうです。(この内容は学術スレっぽいので、スレ違いですね。。)

>ただ、その画像が○の時は追尾して、■の時には追尾しないとかは難しいかもね。
ifやcase文でネットリと記述しようかと思っているんですが、複雑になっちゃうって意味なのかな。。

>>55
デバイスコンテキスト・GetForegroundWindowですね。大変参考になります。
後はコードを最適化しろという事ですね、深く考えてみる事にします。

>出題者にその方法を聞くのもよいかと。
学生を放任する感じの助教授なんです。Delphiでやってみろと一括されただけで…
僕自身、ソフトフェア工学寄りですので、アセンブラ化までは課せられていません。Winアプリ開発です。
スキル・・・身にしみる一言です。(笑)

みなさん有り難う、一文一文。本当に参考になりました。
とりあえず画面キャプチャのあたりを実践しながらやっていこうかと思います。
また来るかもしれませんが、その時は石とか投げつけないで下さいね(;´Д`)
>>56
「何をしてるかも分からないのに、真似するだけ(理解出来てない)」では
理想のもんは出来ないと思うよ。
つーか、「全く理解してないけど、やってみたら出来た」って話はどうよ。

言いたいことは「”TWebBrowserそのまま”でセキュリティ等の切り替えが出来るかどうか?」
ってことでしょ?
答えは「出来ない」だと。
5958:03/12/15 00:00
前半が意味不明だな。
要するに「何してるか理解してないで、真似して書いたコード」ってのは
意味があるのかな?と。
6040:03/12/15 00:36
>>58-59
うーん、不勉強や調べ足りないと言われると痛いところですが……。
自分のやり方になりますが、先ずは理解できなくても人のコードを真似しつつ
わからないところを徐々に憶えていっているので、意味が無くはないです。

現時点だと、調べ方にも行き詰まってしまってて、調べるヒントだけでも
欲しい所だったので。でも、TWebBrowserでは出来ない事がわかっただけでも
助かりました。ありがとうございました。
6158-59:03/12/15 00:40
>>60
何となく違ったニュアンスで取られたような気もするけど…。

とりあえず「どんなことが出来るのか」ってのは
メソッドやらプロパティを眺めるのも一つの手かと。
「.」打ってさ(藁
>>60
ブラウザ再生成じゃなくて、
設定変更後リロードじゃだめなの?
もしくは、再生成しても、進む戻るを設定できればいいわけ?

>>57
まったく同じ画像を追尾するなら、ある意味楽なんじゃね?
特徴のある画像なら、1pixごと追わなくても、最大で31pixずつ
追跡していけばいいじゃんね。

さらに出現している場所、ある時間で何Pix動くかもわかれば、
その範囲だけみればいいから、よりスピードアップできそう。

具体的な方法がおもいつかないんで、ロジック的な意見で
ごめん。
6340:03/12/15 01:08
>>61
フォローすみません。もちろん「.」打って眺めて、ググって調べて一週間
やっとたどり着いたのが>>56 だったのです。IDispatchみたいに「.」を
打っても出てくれないものもあって中々難しくて……。

>>62
答えるの忘れてすみません。リロードしてもダメでした。
出来れば再生成しないで設定したかったのですが、進む戻るを設定する方法が
あるなら教えて欲しいです。
何月何日以降は起動できなくなるようにしたいのですが
どうやってやればいいのか全然わかりません。
どのようにやればできますか?
>>64
日付を比較しれ。
んである日付より時間が過ぎていたら、Form.Create時に
Exitしれ。
構造体の先頭から任意のメンバまでのバイト数を取得したいんだけど
ANSI Cの offsetof に相当する関数ってないの?

>>47
速度を稼ぐために、まず取得した画像のscanline(行のポインタが返る)を
一気に配列に格納する。んで、

ループ1
各行で(255,0,0)が横に16個連続する場所を探す。
 見付かったら
  ループ2
  縦にずらしていって16×16(255,0,0)か確認。
  適合したら座標を出力
  ループ1に戻る

画像さえ取れればあとは簡単にできる。
67デフォルトの名無しさん:03/12/15 10:22
共通モジュール用のユニットを作成する場合、ヘッダーは、どう記述したらいいのでしょうか?
>>67
ユニットを作成すれば、自動についてくる。
6964:03/12/15 15:11
>>65
わかりました。
親切にどうもありがとうございました。
>>46
メインフォームのCloseメソッドやDestroyメソッドを呼ぶとか。
//MainFrm.Destroy;
PostMessageだと、回りくどいね。
MainForm.Release;
とかしても、TIdTCPServerのTCPServerExecute(AThread: TIdPeerThread);
が送受信の真っ最中で終わってくんないんでしょ。
だから、他の方法を考えてメッセージ飛ばせばどうかな?と思ったんじゃない?
Bitmap.PixelFormat の pfDevice って、具体的には何を指すんでしょうか。
ヘルプの PixelFormat を見ても書いてないんだけど・・・。
pfDeviceビットマップは,デバイス依存ビットマップとして格納されます。
WM_CLOSE受信してもCloseが呼び出されるだけでは?
75デフォルトの名無しさん:03/12/15 22:21
手伝ってくれる方キボンヌ
http://program.dot.thebbs.jp/1071486463.html
>>47
もっと詳しい情報キボンヌ
できれば別アプリケーションをUPして。
そうしたらオープンソースでマジで作りますよ

これって視覚認識機構から眼球運動変換の解明でしょ?
>>76
大学とかの課題なんでそ?
ヒントとかだけにしてあげたほうがいいと思うけど。
前に研究課題をネットから、そのまま持ってきて問題になったことなかったっけ?
人の楽しみ(課題)奪うのイクナイ
>>75
マルチにマジレスすると、P2Pファイル共有ソフト作りが忙しい。
8076:03/12/15 23:52
知ってるテーマでちと熱くなってますが、
「別アプリケーション」の表示される画像とその動きによっては、
学位論文級のテーマです。
提示課題が簡単だったら手伝いません。
ただ、学者であれば如何に効率よく(人間らしく)視標を追うかのアルゴリズムを追求するするべきで、それ以外のWindowsの操作についてはそれほど知る必要もないと思います。
まぁそれと課題の質も見たいというのもありますがw
81デフォルトの名無しさん:03/12/16 00:15
stringlistで最初の行と次の行、あるいはその次の行が同じかどうかをチェック
しようとしているのですが、

for i:=0 to stringlist1.count do
if stringlist1[i]=stringlist1[i+1] then
begin
stringlist1.delete(i);
i:=i+1;
end
end
とやるとi:=i+1のところでエラーとなってしまいます。
このような処理をやるにはどうすれば良いのでしょうか?
whileで繰り返すしかないのでしょうか?
>>81
forのカウンタ変数いじんな。これ鉄の掟。
なのであなたが言ってるそれがスマートな解かと。
for i:=stringlist1.count-1 downto 0 do
//stringlist1.count-1
>>81
とりあえず、そのコードはかなり間違ってるとして、
何がしたいのかいまいち見えない。
for i:=stringlist1.count-2 downto 0 do
if stringlist1[i]=stringlist1[i+1] then
stringlist1.delete(i);
end;
脳内補正よろ
俺も>>81が何をしたいのかイマイチわからん。
>>84
>>86

コードを読まず1行目の仕様を読むのですよ。
もしかして「同じ行があったらソレは削除」ってこと?
被ってる行が無くなるようにしたいと。
89デフォルトの名無しさん:03/12/16 00:29
>>88
そうっす。
>>85のコードだと行を削除するとその文、countの値が小さくなるから最後のところで
エラーになってしまうのですよ。
>>89
TStringlistのSortのヘルプ読んで。
はい解決。
91デフォルトの名無しさん:03/12/16 00:32
92デフォルトの名無しさん:03/12/16 00:34
>>90
読んだのですけど、並べ替えは書いていますけど同じ内容の行の削除については
書いてないので分からないです。。。
>>85
無茶苦茶行数及び各行の文字数が多い場合は、ハッシュ値求めて比較したほうが早い、
とか余計混乱させることを言ってみるテスト。
9490:03/12/16 00:38
>>92
いや、「同じ行を一つにする」ってのがあるから根気よく読んでくれ。
>>81
まず、
iが0からCountまでが間違い。Count-1が正解。
StringListに追加する時点で重複を排除していないのが間違い。重複は追加しない。
For文をカウントする変数を変えるのが間違い。その変数にはさわらない。
For文の終了値を変更する操作をするのが間違い。終了値は変えない。

つか、その文だとiとi+1が同じ時だけ削除してるけど、iとi+2が同じ時は削除しなくても
いいわけ?

ま、それはおいといてStringListをもう一つ用意して、重複していない文字列だけ
その用意したStringListに追加していけばいいだけ。
96デフォルトの名無しさん:03/12/16 00:46
>>94
いや、sortの説明って短いですから間違いないですよ。

Sort メソッドは,リスト内の文字列を昇順で並べ替えます。

procedure Sort; virtual;

説明

Sort メソッドを呼び出すと,Sorted プロパティを False に設定したリストで文字列を並べ替えることができます。Sorted プロパティを
True に設定した文字列リストでは,自動的に並べ替えが実行されます。

注意Sort メソッドは,CaseSensitive プロパティが True の場合には AnsiCompareStr を使って,
CaseSensitive プロパティが False の場合には AnsiCompareText を使って文字列を並べ替えます。カスタマイズした比較演算子を使用する場合には,かわりに CustomSort メソッドを使用します。
9790,94:03/12/16 01:05
いや、「Sortのヘルプだけ」じゃなくてさ。
まぁ、いいや。
他の人のレスを参考にしてくれ。
オレは降りた。
98デフォルトの名無しさん:03/12/16 02:01
質問です。
このページで使われているような(ここではHTMLで実現してますが…)
・上側に縦スクロールしない領域
・左側に横スクロールしない領域
があるようなScroolBoxもどきコントロールが欲しいのですが、作ろうにも
どうやって作れば良いのか全く見当がつきません。

http://prodb.matsushita.co.jp/product/comp.do?pg=16&hcd=00002810

具体的に、どのようなコントロールから派生させて、どの部分を改造すれば
いいのかご指南頂けたら幸せになれるのですが、誰か偉い人教えてください。
スクロールバーと好きなものを組み合わせて作れ。それで作れる。
見当がつかないのは理解する努力が足りないだけ。頑張って仕様を見極める。
そうそう、改造とかそんな簡単なことでき実現できないよ。1から組み立てるべし。
100仕様書無しさん:03/12/16 06:07
Wardとかのアプリの子ウィンドウを独自に作るには、SetParentAPIで簡単に出来ますよね。

逆に、フォームの中にWard等のアプリを埋め込む事って出来るんですか?
101デフォルトの名無しさん:03/12/16 06:46
>>100
OLEか?

SetParentAPIをWordに使えばおk。
10247:03/12/16 07:37
こんにちわ47です、沢山のレス有り難うございます。
現在、フォームにボタンとイメージのコーポネントを一個ずつ配置した状態です。
クラス・レコード・Delphiの基礎的な構文を勉強し直してました。
結果、ボタンクリックのイベントでDC経由からデスクトップ画面をキャプチャする所までやっと辿り着けました。

procedure TForm1.Button1Click(Sender: TObject);
var CaptDC : HDC;
begin
CaptDC := GetDC(0);
Image1.Width := 640;
Image1.Height := 480;
BitBlt(Image1.Canvas.Handle,0,0,screen.width,screen.height,CaptDC,0,0,SRCCOPY);
ReleaseDC(0,CaptDC);
end;

次は、EnumWindowsAPIを使って実行中のアプリケーションを一覧を取得し、目的のウィンドウを探し。
ApplicationEventsコンポーネントのOnIdleイベントで本アプリをバックグラウンド動作させ、
キー操作で、 連続キャプチャ←→キャプチャ中止 を制御する所まで進めたいと思っています。
(詳しい方法はさっぱり分からないので、本当にこの方法で良いのか分かりませんが・・・)
とにかく、一歩ずつ進んで行こうかと思っています。。。
10347:03/12/16 07:45
>>55さん
DCのアドバイスありがとう、一歩前進出来ました。
>>62さん
ロジック的でも本当に有り難いです。画面情報取得のプログラムが出来てから、色々試行錯誤してみるつもりです。
>>76
恐らく、ご想像の通りのテーマです(笑)
動く物体を見るとき人間は、感覚でその軌跡を追いますが。
AIでは物体の物理軌道を計算し、その軌跡を追うといった感じです。
いずれは運動学・ロボット工学も混ざり、高度なロボット等に応用される物になりますが。
なにぶん若輩なもので、現状で提示されている課題は「簡単」な物です。2次元で、かつソフトウェア内だけでの処理ですので。
まぁ、徐々にエスカレートして行く事になるでしょうが・・・(泣)
さすがに、自分に課せられた課題を全て渡して「やってください」なんて事は出来ません。。。ご好意ありがとうございます。
Delphiでそのアプリとの連携が取れれば、後はObjectPascal構文でのアルゴリズムを考えるだけになるので。
何とかなるかなぁって思い始めてきました。
>学者であれば如何に効率よく...
その通りですよね、、教授達もWinアプリを作れない人がほとんどです(笑)
ただ今回の研究は対外的な意味合いが強く、Winアプリでないといけないそうです。

最初は悩みましたが、ここに書き込んで本当に良かったです。。
とてもあたたかい。
どんな画像が動き回るのか(画像が複数なら全部)を
どこかにうぷしてほしいね。じゃないと、次からは何も
話が出来なさそう。

対外的ってことは、研究室のの作成物として公表するって
ことなんかね。それを研究生にやらせると。
だから教授は(ry
10547:03/12/16 12:03
ここまで話を引っ張っちゃったんでUPしてみます。
http://tomikawa.asahi-u.ac.jp/joyful/734.gif
大体こんな感じです、研究室っぽさ漂ってますよね(;´Д`)
画面内で特定の座標を指定して、(たとえば画面中央)
画像がその座標に近づく動きをしているか、遠ざかる動きをしているのかという判定もする事になりそうです。
>>102
OnIdleはバックラウンドでもなんでもない。メインスレッドのメッセージキューが空っぽになった時発生するイベント。
バックラウンド処理がしたければ、スレッドを使いましょう。というかスレッド使わないとGUIが固まる。
107デフォルトの名無しさん:03/12/16 16:03
設定を保存するのに、iniファイルとかレジストリとかに値を持ちたくないので、
自分自身のEXEファイルを変更して設定を保存する方法が知りたいです。

変更する設定は、数個だけです。
数バイト程度です。

どうしたらいいでしょうか?

108デフォルトの名無しさん:03/12/16 16:06
delphiのコード支援のように、ホップアップするウィンドウ(ホップアップした後選択できる)
を作るには、formをshowしてマウスの位置に表示(してから、動的に作成したラベルなどに
文字を表示)するのでしょうか?
それとも、もっと別の効率の良い方法があるのでしょうか?
>>107
実行中のEXEに変更を加える事は出来ないので、
どうしてもやりたいなら、自分自身をコピーして、それに書き込み、
ウインドウを閉じる時に自分を削除してコピーをリネームするしか
ないと思う。
11076:03/12/16 16:15
>>47
画像提示アプリはDirectX使ってますか?
大きなこと言ってしまったので簡単なサンプルくらいは作ろうかとおもってますが、
DirectX対応となると片手間で作れるほどのスキルがありません。
それと
視標はスムースに動くのかそれともステップで動くのかも知りたいです。
111デフォルトの名無しさん:03/12/16 16:23
>>109

>ウインドウを閉じる時に自分を削除してコピーをリネームするしか
ないと思う。

自分を削除できるの?
削除したあと、リネームとかできるの?
>>111
自分を削除する事は出来ないので
リネームするソフトウェアを起動して、実行中の本体を終了させた後コピーをリネームし
自分も終了する。
だからEXEが二ついるね。(本体とリネームEXE)
(あはは、なんじゃこれ)
自分で試してみればいいじゃん。
ダメだったら、改変専用のexeを作って、終了時にそのexeを
実行させればいいじゃん。
なんでiniやレジストリでダメなのか興味あるね
シリアルとか、デモ用の期間制限とかかね

115デフォルトの名無しさん:03/12/16 16:41
>>114

たかだか 数個の設定のために、余計なファイルがないほうがすっきりするやん。
>>108
Delphi互換のリサイズ可能のポップアップウィンドウを作るならばちょっと難しいです。
フォーカスを受け取らない単純なポップアップウィンドウも実装それなりに面倒です。

ちなみにポップアップは、SetWindowPosでSWP_NOACTIVATEを指定します。
そんでもってWM_MOUSEACTIVATEでMA_NOACTIVATEを戻り値にします。
これでマウスクリックなどではフォーカスを受け取らなくなります。
これだけで実装は終わりではありません。いつ消去するかの実装も必要です。
>>115
いつの間にか実行ファイルの日付やサイズが変わってるのは怖い。
そのために実行ファイルを後から書き換えるより、
iniやレジストリにしたほうが、よほどすっきりしてると
思うのだけれども。

Windowsディレクトリあたりに、わからんように格納して、
アンインストするときには、アンインストーラーに削除
されればいいと思うんだけど。
論争は他でやれヴァカ
120108:03/12/16 17:35
>>116
レスありがとうございます。
私の手には負えそうもないので、大人しくFormを使ってやる事にします。
>>108
このネタ以前Delphiマガジンでやってました。
そのとき公開されていたコンポーネント持ってます。
著作権に触れるので大っぴらに公開できませんが、
メールアドレスでも教えてくだされば手渡しします。
ってこれは問題ないですよね??

>>107
以前作ったことあります。
HDを掘り起こせばなきにしもあらずですが…
要ります?
122108 ◆OPb3r6Vs1g :03/12/16 18:52
>>121
レスありがとうございます。
自分のメアドをド忘れしたので、帰宅してからメアド晒します。
宜しくお願いしますm(_ _)m
123121:03/12/16 19:19
>>107
期待させてスマソン。
見つかりません。
歯がゆいのでもう一度挑戦してみます。
124デフォルトの名無しさん:03/12/16 19:43
HTMLエンコード処理
http://ash.or.jp/java/htmlencode.htm

みなさんこういうのをDelphiではどうしていますか?
(つまり< を '>'に変換したい)
StringReplaceをループさせろなんて話は聞きたくないです。
変換かかってしまった
&lt; → '>'
&lt; → '<'
127107:03/12/16 20:30
>>123

ないならいいです。
どのようにすればいいか、アイデアだけ教えてもらえればそれでいいです。
128123:03/12/16 20:48
そんでは途中までとその続きのヒント。

>>107
手順は
1.あらかじめ出来上がったファイルの末尾に領域作成
自分自身(.exe)の最終にデータを保存する為の領域を作っておく(例256バイト0で埋めるとか)

2.終了時に自分のコピーを作成
そのコピーの末尾に対してデータを書き込む

3.バッチファイルを作成
バッチファイルは元のexeファイルの削除と
コピーされたexeファイルの名前の変更と
自分自身を削除を行わせる

という流れです。
129123:03/12/16 20:49
>>107
自殺プログラム
procedure TForm1.Button1Click(Sender: TObject);
var
psi:TStartupInfo;
ppi:TProcessInformation;
batname:string;
begin
batname:='test.bat';
mksuicidebat(batname);
GetStartupInfo(psi);
psi.dwFlags := psi.dwFlags or STARTF_USESHOWWINDOW;
psi.wShowWindow := SW_HIDE;
CreateProcess(nil,PChar(batname),nil,nil,false,0,nil,nil,psi, ppi);
close;
end;

procedure TForm1.mksuicidebat(name: string);
var suicidebatText:TStringlist;
path:string;
begin
path:=ExtractFilePath(Application.ExeName);
suicidebatText:=TStringList.Create;
suicidebatText.Add('@ECHO OFF');
suicidebatText.Add(':loop');
suicidebatText.Add('del "'+ Application.ExeName + '"');
suicidebatText.Add('if exist "' +Application.ExeName+ '" goto :loop');
suicidebatText.Add('del "'+ path+name + '"');
suicidebatText.SaveToFile(path+name);
suicidebatText.Free;
end;
130123:03/12/16 20:56
あー。
データの読み込みは書き込みの逆の要領でやってください。
やってくれるのであればこれ以上の作業はしません。
できたらソース公開してくれるとうれしいかも。
131107:03/12/16 21:02
バッチファイルは 誰が消すんでしょうか?
132123:03/12/16 21:20
おーい、完成任せて大丈夫かいな?
とりあえずソース貼り付けてボタン押して味噌
133123:03/12/16 21:21
一応、念のため…
デバッグモードでボタン押しちゃだめだよ
13447:03/12/16 21:22
>>76
画像提示アプリ自体、手の込んでる物でして。画像が重なり合ったりもしますし。
DirectX8程度の物を使っているはずです。
指標はスムースに動いています。

>>106
ご指摘サンクスです。
書籍にスレッド(TThreadオブジェクト)について書いてあったので、そこのソースを移してコンパイルしまくってます。
実行出来ませんが(;´Д`)。。根本の考え方が間違ってるんだろうなぁ・・。
exeの後ろにデータ付けても、アンチウイルスにひっかかるなんて心配はないのでしょうか?
136123:03/12/16 21:36
もちろん試しに作ってみただけなので動作したってだけです。
細かいところまで突き詰めてません。
何なら、空白のリソースつけてそこに書き込んでもいいでしょ?
とりあえず作ってみてから考えたらいかがでしょう。

とにかく凄く怪しいアプリです。
アンチウイルスが好んで指摘しそうな振る舞いをしまくってます。
137108 ◆OPb3r6Vs1g :03/12/16 22:17
>>121
[email protected]
です。宜しく御願いしますm(_ _)m
>>137
Delphiマガジンでダウンロードサービスをやっているんだが。
ttp://dmj.psnet.ne.jp/DL/
上のURLのVol.8 のやつな。
Delphi6のpersonalのチュートリアルを読みつつ
テキストエディタを作っています。

アクションマネージャーがpersonalでは使えないのは分かっているのですが、
標準アクションクラスも利用できないのでしょうか?
140121:03/12/16 23:51
             /ヽ       /ヽ
            /  ヽ      /  ヽ
  ______ /     ヽ__/     ヽ
  | ____ /           :::::::::::::::\
  | |       //       \  :::::::::::::::|    >>138
  | |       |  ●      ●    ::::::::::::::|   ショボーン
  | |      .|             :::::::::::::|   
  | |       |   (__人__丿  .....:::::::::::::::::::/  
  | |____ ヽ      .....:::::::::::::::::::::::< 
  └___/ ̄ ̄       :::::::::::::::::::::::::|
  |\    |            :::::::::::::::::::::::|
  \ \  \___       ::::::::::::::::::::::::|
141知ったかぶり:03/12/16 23:58
>>135
アンチウイルスは「ソレっぽいコード」をかたっぱしから
照らし合わせてるだけなので、合致すりゃー検知ってことになるんでわ?
>>141
普通は、あるアプリがexeを書き換えることなんてないので、
exeを書き換えようとするだけで反応することもある。

たった数個の設定のためにファイルを残すのを避けるべきか、
たった数個の設定ならexeを書き換えるべきか。
143141:03/12/17 01:26
>>142
オレの言いたいことは「全然関係無いexeでも、誤検知される可能性はある」って
ことだけ。

後半の2行は質問者宛だよね?
144デフォルトの名無しさん:03/12/17 05:18
隠しファイルに設定を書き込むのはどぉ?
直接セクタを書き換えるのはどうだろう?
146142:03/12/17 08:57
>>143
そそ後半は自分自身の独り言。

確かアンチウィルスによっては、今はしてないかもしれないけど、
ファイルを書き換えようとする行為を監視してて、それがexeとか
だと通常はあり得ないので、アラートを出すものがあったような
記憶がある。
147デフォルトの名無しさん:03/12/17 09:49
それ以前に、実行ファイルを書き換えて設定を保存していたら、Windowsの
権限の設定で、全てのユーザーに実行ファイルの書き込み権限を与えなくては
ならず、現実的でないのでは??

プログラムの設定情報は、レジストリの HKEY_CURRENT_USER 以下に記録するか、
iniファイル等を \Documents and Settings\username\ 以下に記録するかに
してくれ。
(よくexeと同じフォルダにini置くプログラムあるけど、あれ嫌い。CDから実行できんぞ)
148108 ◆7NPnFDqudg :03/12/17 10:13
>>140
メールありがとうございました。
参考にさせて頂きます!
質問です。
二つのクラスA、Bがあって、それぞれ内部にAはB型のプロパティを持っていて、
BはA型の変数を持っています。
この二つのクラスは、結構規模も大きく、互いの独立性も高いので、それぞれを
個別のユニットで宣言したいのです。
そうすると、interface以下のusesで互いのユニットを参照すると、循環参照だと
怒られます。
このような場合はどうすればいいのでしょうか?
>>149
クラスの設計を見直す
>>149
どっちかのusesをimpliment節以下に記述する
>>151
>>149のままだと、それでは解決できない。
・一つのpasに書くw ←これで解消できたっけ?w
・互いに使う部分を一つのclassとして作成し、個別部分はそのclassを派生する
・それぞれのclass型で変数を持つのではなく、TObjectとして持つ
154デフォルトの名無しさん:03/12/17 13:09
parentクラスから継承してchildクラスを作成
parent型で宣言した変数にchildインスタンスを代入すると
child.methodではなくparent.methodが実行されます
child.methodを実行させたい時はどうすればいいですか?
>>153を読んで思ったけど
クラスAをB型プロパティ抜きで、できるだけメソッドをabstractにしたクラスA'をユニットA'に
クラスBをA型フィールド抜きで、できるだけメソッドをabstractにしたクラスB'をユニットB'に
それぞれ定義する。
クラスAを定義するユニットA、クラスBを定義するユニットBはそれぞれユニットA'とB'を
usesしてクラスA'、クラスB'から派生させる。
内部のB型プロパティ、A型フィールドはクラスB'、A'型とする。

ダメかな?
>>154
virtualメソッドにする。
>>81 やりたい処理が>88の通りでしたら…
stringlist1[0]と同じ文字列がないかをstringlist1[1]〜stringlist1[stringlist1.count - 1]から調べて削除.
(ただし削除すると以後の行が一個ずつずれるので>85のようにstringlist1[stringlist1.count - 1]から逆方向に調べる)
これによりstringlist1[0]とだぶっている行がない事が確定.
以後同様に,stringlist1[なんとか]と同じ文字列がないかをstringlist1[何とかの次]〜stringlist1[stringlist1.count - 1]から調べて削除.
これを繰り返す事ですべての重複がなくなる…はず.
i := 0;
while i < stringlist1.count - 1 do
begin
for j := stringlist1.count - 1 downto i + 1 do
if stringlist1[j] = stringlist1[i] then
stringlist1.Delete(j);
i := i + 1;
end;
ちなみにDelphiのfor文は繰り返し処理を始める前に最終値とループ回数を決めてしまいます.
>81のソースだとたとえば最初に通るときのstringlist1.countの値が10だとすると最終値は10,ループ回数は11で確定します.
ループの中でstringlist1.countの値が変わったとしても無視されます.
繰り返しの一周ごとに値のチェックをやりたい場合はwhile文かrepeat文を使います.


158デフォルトの名無しさん:03/12/17 14:51
freeメソッドで例外が発生します。
新規で作成して

procedure TForm1.FormCreate(Sender: TObject);
var
fs:TFileStream;
begin
fs.Free
end;

これだけで例外が発生します。
d6のパーソナルです
>>158
あなたは感想を書きたいのですか?質問したいのですか?










CreateしてないのにFreeしたら例外でるのはあたりまえ。
今、delphi7のヘルプ、"レコードの可変部分"を読んでいるのですが
このような型はどのようなメリットがあるのでしょう?

ヘルプをみて、コピー&ペーストしてみるも
いまいちつかめません・・・

どなたか、お馬鹿な私に教えてください

//delphi7ヘルプ"レコードの可変部分"より一部引用
type
TShapeList =(Rectangle,Triangle,Circle,Ellipse,Other);
 TFigure =record
 case TShapeList of
 Rectangle:(Height,Width:Real);

 Triangle:(Side1,Side2,Angle:Real);
 Circle:(Radius:Real);
 Ellipse,Other:();
end;

?
161デフォルトの名無しさん:03/12/17 15:10
>>159
freeの説明これがあるんですが

>オブジェクトが nil の場合でも Free メソッドはエラーにはなりません。
>このため,オブジェクトが初期化されていない場合に Free メソッドを呼び出してもエラーにはなりません。
>>161
「fsにnilが入ってることを保証する」という説明はあるか?
というより、警告見ろよ
fsをnilしてから、freeしるw
var
fs: TFileStream;
begin
fs:=nil;
fs.Free;

エラーでなかった
ちょとビクーリ
>>165
Freeの中でnilかどうかチェックしてるだけ。
初歩的な質問だけどプロシージャから抜けるにはどうすればいいの?
C言語のreturnみたいなのはないの?
exit;?
フロー制御ルーチン嫁
>>149-155
クラスBをA型フィールド抜きで、全メソッドをabstractにしたクラスB'をユニットB'に
あとはユニットAでユニットB'をusesしてクラスAを定義。
ユニットBでユニットB'とユニットAをusesしてクラスBを定義、ここでA型フィールド追加。
でいいんでない?

但しこれだと、無意味にユニットが一つ増える、毎回仮想メソッドが呼ばれて
微妙にパフォーマンスが落ちる、という欠点があるか?
(クラスB'をユニットAを間借りして宣言する、というのもアリかな)

まぁ多少ソースが醜くなってもよければ、クラスBのA型フィールドをTObjectで
とりあえず宣言しといて、implementationでユニットAをusesして、毎回キャスト
あるいは一時変数に代入して使う、というのが現実的かも。
バイナリデータを編集できるようにしたいのですがどうすればできますか?
>>171
TFileStreamでいろいろ調べる。

どうしてもTFileStreamを使いたくなかったら、型指定無しのFile型を使って、
地道にAssignFileとかResetとかCloseFileとかやる。
>>171
それだけでは、バイナリデータの書き換えたい所を書き換える、としか言いようがない。
そのデータはどこにあるんだ?メモリ?ファイル?紙?
174171:03/12/17 18:15
>>173
紙です。
どうやら TPaperStream を使えば巧くいきそうです。
有難うございました。
175171:03/12/17 18:18
174は偽物です。
>>172
TFileStreamですね。
ありがどうございます。
>>173
ファイルからです。
176172=174:03/12/17 18:27
>>175
>174は偽物です。
洒落の通じない奴だな…
177171:03/12/17 18:37
>>176
_| ̄|○すみません…。
178デフォルトの名無しさん:03/12/17 18:43
ウインドウメッセージ使ってOperaの広告を非表示にするコードきぼんぬ。
漏れの使ってるdelphi6 personalにはwinsightが付いてないので広告のハンドルを
取得するコードを書くことが出来ません。 NukeとかHandleXを使えばハンドルを
確認することは出来るんですが… ダメ元で書いてるのでアレだったらスルーでお願いします。
TRichEditのDoubleBufferedプロパティをTrueにすると、
表示されているはずのフォントが見えなくなってしまいます。
(かならず背景色と同じになってしまう)

SelectAllをしてもテキスト色や背景色がまったく変わらず、
DefAttributes.ColorやSelAttributes.Colorをいじっても更新
されません。

ただしキャレットを動かすと、ちゃんとテキストが表示されて
いるように動きますし、コピーもできます。

対処法を教えていただけないでしょうか。
注意:TRichEdit など一部のコントロールでは,自身をビットマップに描画できないものがあります。
こうしたコントロールの場合,DoubleBuffered を false に設定する必要があります。

ヘルプにこんなんありますた。これ?
レスありがとうございます。

>>180
Σ (゚Д゚;)がーん。じゃTRichEditではLine.BeginUpdate/EndUpdateが
無意味な部分のちらつきは抑えられないのだろうか。。。
>>181
Lines.Addで追加する前後で、
いちいちBeginUpdateとEndUpdateやってんじゃないの?

Addする初めに一発、最後に一発すればよろし。
または、いろいろ変換するような作業をしているなら、
いちどTStringListで作業してから、一気にLinesにコピーしれ。
183179=181:03/12/17 20:38
>>182
いえ、Lines(データ)絡みの部分ではなく、まずRichEditを作成して、貼り付ける
(自分の場合はタブ)ところで既にちらつくじゃないですか。(サイズが大きいと
けっこう気になる)

そのへんどうにかならないかなと思ったんです。
MediaPlayerコンポーネントを例を交えながら解説しているサイトなどないでしょうか?
小数点以下の切捨てや四捨五入はtrunc関数を使えばできますが、
小数第何位以下を切り捨て、四捨五入はどうすればよいのでしょうか?
よろしくお願いします。
Trunc(x * IntPower(10, y)) / IntPower(10, y)
四捨五入はSimpleRoundToで一発
>>147
ガ━━(゚Д゚;)━━ン!
オレのソフト、設定が必要なヤツは全部iniファイルでやってるのに…。
>>187
だからiniファイルの位置が問題なんだって・・・
189187:03/12/17 23:50
>>188
ガ━━(゚Д゚;)━━ン!
オレのソフトのiniファイル、全部アプリケーションのあるフォルダなのに…。
190185:03/12/17 23:53
>>186
有難うございました
>>189
だから、ZIPで解答、インストーラー無しで実行可能とかじゃなく、
インストーラーでProgramFilesフォルダ以下にインストされる仕様
なら、それごとCDに焼いて実行しようとは思わないから
いいんだってば・・・・
192189:03/12/18 00:04
>>191
だから、そなたが嫌ってる仕様なんだってば(藁
いや、マジで。
そーかー…嫌いな人もいるんだなー。
193147:03/12/18 01:56
>>192
いや、CDから実行することは無いんだが、USBメモリをかなり日常的に使っているので、
USBメモリ内のexeがあるフォルダにデータを記憶させられると、別環境で変な動作を
することがあるのが嫌だと。

ちなみに俺はいつも、
GetEnvironmentVariable('APPDATA')+'\Project1.ini'
みたいなファイルに保存してます。

ちなみに %APPDATA% は標準的な状態では
C:\Documents and Settings\username\Application Data
を表してます。

これなら、マルチユーザ環境で使いたい人、インストーラが嫌いな人、CDRから直接実行したい人、
レジストリが嫌いな人、みんなが満足。
iniファイルが嫌いな人は不満足と言ってみるテスト
自分が把握してない場所に勝手にファイルを作られるのが一番嫌いだ
>>174
TPen.Color := clRed; しろよ。





と思いついた頃にはすでに終ってる話題だった・・・。
197デフォルトの名無しさん:03/12/18 09:03
>>195
iniファイルがどこにあるか、アプリで確認できるようにすれば 無問題?
>>197
んで、iniを好き勝手にいじられてバグの原因になったりして。
>>198
そりゃユーザじゃなくプログラマの責任だぬ。
>>193
APPDATAなんて標準で存在しないOSもあんだろが
二つのフォームがあって、片方をドラッグしていったとき、
もう一方のフォームに近づくとピタッと、そのフォームの横
にくっつくヤツありますよね。
例えば、PhotoShopのツールなんかのような。
ああいうのって、どうやれば実現できますか?
202デフォルトの名無しさん:03/12/18 17:29
ボタンにフォーカスが当たれば(クリック可能状態になれば)表示されているアイコンが変わる、
というようなボタンを作成することはできますか?
できますよ
204202:03/12/18 17:41
>>203
教えていただけませんか?
>>201
フォームを動かして手を離したとき、
ある領域内に離したフォーム存在すれば
そのフォームの位置を変更
ってのはどうだろうか、と言ってみる。
>>206
ありがとうございます。

やっぱそんな感じなんですかね
なんか、枠だけ表示させて、ぴたっとくっつけろ
とかいう話になりそうで(゚Д゚;)

なんかいい方法ないでつかね
JAVAからプログラムに入った者ですが、
Delphiデストラクタを利用するコツはあるのでしょうか?

どんどんオブジェクトを他のクラスに渡すと、
いつ、どこで破棄すれば安全なのか
分からなくなってしまうんで。
209デフォルトの名無しさん:03/12/18 23:10
>>207
FDelphiにサンプルがある。
ttp://forum.nifty.com/fdelphi/samples/00760.html

俺はこれを参考にコンポを作った。
>>202
よくよく考えてみると、
>ボタンにフォーカスが当たれば
って表現はちょっと違う気がする。

それはともかく、「メッセージをトラップしてアイコン変えるコンポーネント」
作るとかかな。
211202:03/12/19 02:27
>>210
メーリングリストを読み漁ってたら、TImageを改造したComponentを見つけることができました。
やってることは210さんと同じでした。

> よくよく考えてみると、
> >ボタンにフォーカスが当たれば
> って表現はちょっと違う気がする。
確かに違いますね(汗

どうもありがとうございました。
>>208
>Delphiデストラクタを利用するコツはあるのでしょうか?
使わなくなったとき。スコープから抜けるとき。

>どんどんオブジェクトを他のクラスに渡すと、
これがどういうことなのか具体的に示してくれれば解説できるかも。
213178:03/12/19 09:14
手当たり次第色んな組み合わせを試しまくったら解決しました。 どうも。
>>209
お、ありがとうございます。
ちょっと、ソース眺めてみます。
Word:=CreateOleObject('Word.Application');
で、パスも指定してないのにワードが起動でき、
Word.Documents
で、文書にもアクセスできるのですが、
そういう感じに、アクセスされる側のアプリを作りたいのですが、
なにから調べていったらいいかもわかりません。
わかる方がいたらなにか手がかりをください。
216デフォルトの名無しさん:03/12/19 14:43
桁数の大きい数字の計算をする場合どうすれば良いでしょうか?
実数ではなく整数の計算です。

現在は
a : array[0..1000] of int64;
と宣言した配列変数に計算結果を入れて行っていますが、
単純な掛け算や割り算でもif文で桁あふれを検知するコードを作ったり
色々ややこしいので、もっとサクっとできる方法はないでしょうか?
ビット配列なんてどうだろうか?
>>215
オートメーションサーバーとかかな
>>216
つまりは「めんどくせーから誰か作ってよこせ」ということやね。

ttp://forum.nifty.com/fdelphi/samples/00849.html
220デフォルトの名無しさん:03/12/19 15:14
質問があります。
僕はCGI/PerlとPHPはわかるのですがDelphiは初心者です。

今まで趣味でCGIのゲームを作っていたのですが、
サーバ負荷がかかるのと動きが遅いので、
これからはコンパイルできる言語を使って作りたいと思っています。

そこで質問なのですが
インターネット麻雀の東風荘みたいなゲームは
Delphiで作れるでしょうか?
それともそういうのはVC++を使った方がいいのでしょうか?
>>212
関数にパラメータとしてオブジェクトを渡すときです。
リスト等に格納されるなら、生成側で破棄するわけにはいかないし、
逆にリストから渡されてきたものなら、
受け取り側で迂闊に破棄できないと思ったもので。
>>220
>Delphiで作れるでしょうか?
>それともそういうのはVC++を使った方がいいのでしょうか?
お前次第。

>>221
単純に、最後まで使ってる人に破棄をお願いすると。
TListで管理してるなら、Delete(n)する前にFreeを呼び出す。
Delete(n)してもまだ使う(TListの管理外)なら、使い終わったときにFree。

>受け取り側で迂闊に破棄できないと思ったもので。
破棄しても、以降そのオブジェクトを使わず、リストがアドレスを持ってる
だけなけら問題なし。

リストに任せるならTObjectListとかを使う手もある。
>お前次第。
禿銅
224220:03/12/19 16:06
>>222
>>223
回答ありがとうございました!
僕次第ということはDelphiは東風荘みたいなのを作るのに
十分な環境を備えているということですね。
Delphiはネットワークプログラミングに向いてないと
どこかで読んだので本当のところどうなのかなと思って質問しました。
225216:03/12/19 17:08
レスありがとうございます。
>>217
ビット配列だと、どの辺が>>216よりも楽になるのでしょうか?

>>219
有用なサンプルありがとうございます。
やはり配列変数を使って、それをループで回して計算する以外に
方法はなさそうですね。
for i := 0 to 100 do
a := 1000000000000000000000000000000000000000 * a;
こんなのがサクっと出来るような便利変数ってコンパイラが進化しても
難しいんでしょうね。
>>225
相当ダメな人ですね
>>222
ありがとうございます。
末端での破棄が基本なんですね。

となると、
procedure f();
var
v:TObject;
begin
v:=TObject.create();

−vに関する加工処理(略)−

(*加工したオブジェクトを他のクラスに送る*)
o1.f1(v);
o2.f2(v);
o3.f3(v);
end;

みたいな手続きは慎重に作ったほうが良いですね。
実際、あまり美しくないですし。
>>226にはげどうだが。
>こんなのがサクっと出来るような便利変数ってコンパイラが進化しても
だからさ、誰かが作らないとことには使えないわけよ。仮にこういう演算を
サポートするコンパイラができたところで、内部的には同じようなことをやってる。

ついでに言えば、こういう多倍長演算ができる言語は存在する。

>>227
それは俺も良く使うけど、やっぱりどこで破棄されるか気をつけてる。
o1,o2,o3内で破棄するか、別の方法を使うかよく考える。
>>227
自分で参照カウンタもどきの仕組みを付けたオブジェクトを作るとか。

>>222
TObjectListと言えば、一つ疑問があるのだが…
いつもTObjectListを使うとき、

var
 list: TObjectList;
 obj: TMyObject;

//中略

 obj := TMyObject.Create;
 try
  list.Add(obj);
 except
  obj.Free;
  raise;
 end;

とやって、Addで例外が発生したときに、確実にobjを破棄しているのだけど、
これだとリストに追加はできたけど、その後に思いもよらないような原因の
エラーが生じた場合にもobjを破棄してしまうようなきがするけれど、このような
場合はみなさんどうしてますか?
DelphiのIDEのメインウインドウ(コンポーネントパレットがあるウインドウ)
以外のウインドウにフォーカスがある時に、キーボードのどのキーを押せば
メインウインドウにフォーカスを移せますか?
232231:03/12/19 19:50
すいません

× フォーカスがある
○ アクティブである

です
>>230
その後の部分を更にtryで囲めばいいんでねぇの?
>>223
リストに追加はされたのに、それ以外の原因でAdd内で例外が生じた場合はどうするか、ってことだろ。
>>234 ??
それ(=Addで例外が発生)以外の原因でAdd内で例外が生じるって?
リストに追加された時点でAdd自体は成功じゃ?

揚げ足取ろうとしてるわけじゃないけども。
>>230
addしたとき、indexをもってきて、んでTListからオブジェクトを
破棄すればいいんでねーの?
objの破棄は、それで達成できるんだよね?
237デフォルトの名無しさん:03/12/19 22:30
アプリ起動時に「既に起動しているメモ帳」をSetForeGroundAPIを使って最前面にもってきたいんだけど
うまくいきません。 アプリ起動時でなくアプリ起動後にボタンを押してSetForeGroundAPIを使って
最前面にしようとするとバッチリ動きます。(まったく同じコードで)
アプリ起動時(OnCreate)にはSetForeGroundAPIは使えないの?!

環境:winXP HomeEditon DELPHI6 PERSONAL sp3
同じようなコンポーネントをいくつも動的に作成したくて
MyComp: TMyComp;
CompList: TComponentList;
とグローバル宣言しておいて
var IsMyCompAssigned:Boolean;

IsMyCompAssigned := True;
MyComp := TMyComp.Create(Self);
MyComp.Parent := Self;
//途中で解放していたら、そこを埋めるように作成する。
for i:=0 to CompList.Count-1 do
if not Assigned(CompList[i]) then
begin
MyComp.Name := 'MyComp' +IntTostr(i);
CompList.Insert(MyComp, i);
break;
end;
if IsMy
MyComp.Name := 'MyComp' +IntTostr(i);
CompList.Add(MyComp);
end;

とやってみたんですがダメですた
我に光を
>>237
SetForeGroundで他窓を最前面に出しても
自窓が作成された瞬間、自窓が最前面に出るんじゃ?
>>237
タイマーで、ちょっと遅らせて前にだしたら?
もしくは、自窓を後ろに戻す(できんのか?w)。
241237:03/12/19 23:14
>>239
それなら他窓が2番目にくるはずなんすけど底に沈んだままなんす。
ボタンに同じコードを割り当てて実行してみるとちゃんと一番前に出るんだけど・・

>>240
タイマーっすか、sleepは試してみたんすけどこれはどうなのかな、試してみます
>>240
2行目
問題は後ろに戻す作業をどこに書くかだ(w
Createに書いたんじゃ意味ねぇ
243237:03/12/19 23:24
タイマーでもダメでした。

var
Form1: TForm1;
hCalc: HWND; {ハンドル}
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
hCalc:=FindWindow(nil,'電卓'); {電卓のハンドルを取得}
//SetForegroundWindow(hCalc);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
SetForegroundWindow(hCalc);
timer1.Enabled := false;
showmessage('タイマーを実行しました。');
end;

//showmessageはちゃんと実行されたんですが・・(´・ω・`)ショボーン
ShowMessageしなきゃ…

ってマジレスしていいのかな?
>>243
Intervalは?
それと、Timerイベント内では電卓取得してないみたいだけど、その辺りは?
しかもTimer.Enabled:=True;も見当たらない。デフォでTrueかな?
>>245
ShowMessageがでたんだから、Trueでそ。
でも、ShowMessageがでると、自窓が上に
きそうだよね。
Caption変えるぐらいに汁
「きそう」っつーか、必ず来ると思うんだがどうか。
248246:03/12/19 23:49
>>247
シッーー
OnShowじゃ無理なんかね。
必ずしもCreateで設定する必要ないし。
250237:03/12/20 00:06
>>245
ありがとうございました! 解決しました!!

>Timerイベント内では電卓取得してないみたいだけど
これを追加したらちゃんと動きました、ハンドルを再取得する必要があったんですね('_';

感謝っ!

あとIntervalは10000(10秒)で試したっす。
showmessageもちゃんと起動から10秒後に実行されました。
>デフォでTrueかな
もちろんそうです(^-^

>>244
ShowMessage は SetForegroundWindow(hCalc) の後に実行されるんで
無関係だと思うんすが・・。 一応試してみたけど結果は同じですたよー

>>246
えと、
setforegroundが実行されて電卓が最前面に出た直後にshowmessageも
実行されたんすが最前面には出てきませんっした。

>>249
OnCreateで出来ました、どうもお手数をお掛けしました、すみませんっす。

みなさん感謝っすm(_ _)m
251237:03/12/20 00:08
あとテストしたときのコード置いておきますー

var
Form1: TForm1;
hCalc: HWND; {ハンドル}
implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
hCalc:=FindWindow(nil,'電卓'); {電卓のハンドルを取得}
SetForegroundWindow(hCalc);
timer1.Enabled := false;
beep; //音を鳴らす
showmessage('タイマーを実行しました。');
end;

ではでは、お世話になりましたーm(^_^)m
>再取得する必要があったんですね('_';
再取得も何も一回も取得してないっしょ(w
SetForegroundWindow(hCalc)

〜合間〜

ShowMessage

この「合間」って、どんくらいの「ミクロの世界」だろうな。
ちとまち。
同じコードでbuttonのイベントのときにうまくいったのはなぜ?
まったく同じコードじゃないの?
>>254
見てみれば分かる
違うんだYO!
>>255
ちがうのかYO
おしえてくり・・
257237:03/12/20 07:54
>>254
あ・・・、こんな大切なことを書き忘れるとは・・・
Button1の動作をOnCreateに割り当てて実行してたんです。

procedure TForm1.Button1Click(Sender: TObject);
begin
hCalc:=FindWindow(nil,'電卓'); {電卓のハンドルを取得}
SetForegroundWindow(hCalc);
end;

どうもすみませんm(__;)m

今気付いたんですがTimer1を使った場合ってOnCreateは使って
無いんですね、これでも何の問題も無いので構わないんですが。

やっぱりOnCreateでは出来ないのかな、>249さんのおっしゃるように
他のイベントでも色々試してみます、ありがとうございましたっ!
>>244
マジレスするとshowmessageはアプリが背面にあるときにアプリを前面に出すようなことはしない。
>>257
TimerがデフォでTrueのときどのタイミングで発動するかなんて考えたこと無かったな
hCalcは別にローカル変数でいいんじゃないかとオモタ。
複数のメソッドで共有するより個々のメソッドで毎回取得したほうが確実だと
>>259
そだね
理想的には、Formのプロパティとして設定して、もし閉じられていたら
nilを返すようにするのがいいかも。
あと、どうせタイマー使うなら定期的に存在しているか確認して、
もし存在してなければ、Formに何かしらのイベントを発生させて、
処理させてあげる必要があるね。
261デフォルトの名無しさん:03/12/20 17:08
DelphiWorldにあるDBCtrlCloneGrid
http://home1.infonia.ne.jp/~delphian/delphi/compo/database.html

このコンポの上にTCustomComboBox発生のコンポ乗せると
以下の例外が出るのですが、どなたか対処法知ってる方いらっしゃいますか?

例外...
プロジェクト Project1.exe が EInvalidOperation クラスの例外を生成しました。
'コントロール '' は親ウィンドウを持っていません'
262261:03/12/20 17:14
例外発生はDelphi6, Delphi7で確認出来ました

TButtonやTCheckBoxなどの非DBControlは乗るのに・・・
264261:03/12/20 17:31
>>263
ありがとうございます。

うーん、検索先全て目を通しましたが
へたれなものでよくわかりませんでした・・・

すみませんが引き続き情報をお待ちしています。
ファイル末尾を削りたいときは
ファイルストリームに読み込んで
SetLength(FS, FS.Size-1);
としたので無問題ですか?
この後Writeしていっても大丈夫でしょうか?
>>265
ためしてみれば良いか悪いかわかるだろ。
なぜSetLengthが出てきたのか謎だが。
267244:03/12/21 00:37
>>258
ぬな!?そーだった?そーか。
超初心者が初心者に教えようとして逆に教えられてしまうスレ。
269デフォルトの名無しさん:03/12/21 07:38
ソケットコンポーネントを使って自分自身にポートスキャンするには
どう書けばいいのですか?
>>269
ループバックアドレス叩くんじゃ駄目なの?
271デフォルトの名無しさん:03/12/21 09:53
winamp2.xxのようにメインフォームにサブフォームが
吸着するようにするにはどうしたらいいんでしょうか?
>>271
WM_MOVINGじゃなかったっけ?
273270:03/12/21 13:06
>>272
これ使えばできそうですね。
情報ありがとうございました。
274デフォルトの名無しさん:03/12/21 13:36
C言語のbsearchに相当するような関数はないですか?
汎用的なリストからの検索関数。
qsortはTListのCustomSortで代用してるんですが。
>>266
えっ、やっぱSetLengthじゃない方法あるんですか…
FS.Seek(-1, soFromEnd);
こうしてWriteしていくのが最善ですか?
なるべく最善の方法でやりたいんで一人でコツコツ試すだけじゃ何とも。
ヘルプも読まずに、仕様無視でコーディングするお前が恐ろしい
>>275
もう一つFileStreamつくって、size-消す数だけ渡して保存しれ
canvasでBegin/EndUpdateするにはどうすればいいのでしょうか
教えてください
279278:03/12/21 21:24
訂正
canvasでbegin/endupdateのように
描画タイミングをコントロールするにはどうしたらいいんでしょうか?
WM_SETREDRAW
適当なBitmapのCanvasに描いてから目的のCanvasに転送
282278:03/12/21 21:57
>280 >281
ありがとうございます
参考にさせていただきます
Delphi6 Personalなんですが、内蔵エディタのキーバインドって変更できないんですか?
>>275
Truncateじゃだめなん?
どなたかタスクバーがクリックされた事を検出する方法をご存じの方はいらっしゃいませんか?
286244:03/12/21 23:03
ShowMessageの件を検証してみたら、
「1回目は前に来るけど、2回目以降は前に出ない」って
なったんだけど、どーなってんの?
>>286
意味わからん
つか、意味はわかるけど、どういうように書いたのかわからんと、
この場合、返事のしようがないと思われ。
288244:03/12/21 23:21
>>287
「タイマーでShowMessage」するだけの話。
1回ShowMessageのダイアログが他のウィンドウの前に来るけど、
2回目以降は前に出なかった。

…ってことなんだが。ま、忘れてくれ。

    ∧,,∧  まうすふっく使うとええじゃろー
   ミ,,゚Д゚彡   >>285
    ミ つ旦)~~
  〜と,,,~),,~)

ここのソースのDLLを使って
サンプルアプリを参考にすると出来そうですよ。
http://www.nakka.com/lib/mhook/

もう閉鎖されちゃった、ここのサンプルの受け売りです
http://homepage3.nifty.com/kazu-kozawa/

function SetHook(hwnd:LongWord; msg:integer):integer;Cdecl;external 'mhook.dll';
procedure UnHook;stdcall;external 'mhook.dll';
procedure TForm1.FormCreate(Sender: TObject);
begin
SetHook(Handle,WM_MouseHook);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnHook;
end;
こうしておくと
procedure WMMouseHook(var Msg:TMessage); message WM_MouseHook;
このメッセージハンドらに
いろんな情報が流れてくるので
タスクバーでボタン押した事もわかるようになるようです。
290285:03/12/21 23:37
>>289さん、ありがとうございます。早速明日あたり試してみます。
    ∧,,∧   mhook.dll、
   ミ,,゚Д゚彡   短いCコードなので
    ミ つ旦)~~  これをDelphiには焼き直し
  〜と,,,~),,~)     出来ないのかしら。

漏れはCわからないから
出来ないですけどねー。
292頭の中が低レベルLv:3:03/12/21 23:49
あんまり暗記力が無いアホでも
何かプログラムが造りたいでありんす
>>292
作ってください。
294頭の中が低レベルLv:3:03/12/22 00:08
無理っす
基礎すらしらない
文字一つは書けても単語が書けない英語のテストの状態
>>291
Delphiは共有データセクションをサポートしてないから
メモリマップドファイルを使う必要があって面倒だよー。
Delphi2達人テクニックにサンプルコードがあるよ。もう絶版らしいけど。
ネットでもどこかにサンプルが落ちていた記憶。
296デフォルトの名無しさん:03/12/22 00:37
onClickイベント発生時、シフトキーが押されているのかを知る手段はありますか?
onKeyDownとかなら出来ますが、「シフトを押しながらコントロールをクリックすると・・・」を実現させたいもので。
コントロールをクリックってなんなんだ?
とまぁ、それはおいといて
GetKeyStateとかいう名前じゃなかったかな?
298296:03/12/22 00:49
あ、APIにあるんですね。ヘルプにないわけだ・・・。
サンクス、挑戦してみます。
http://forum.nifty.com/fdelphi/faq/00259.htm
299296:03/12/22 00:51
↑・・・じゃなくて、WindowsのAPI、でした
300297:03/12/22 00:52
あぁ、名前あってたか。
よかっ…
おまいらちょっと待て。
OnClickのShift引数は使えないのか?
303デフォルトの名無しさん:03/12/22 10:02
Xp+Del6 Entです。
テキストファイルを読んで処理をしたいのですが
ファイルを開く方法として
(1)FileOpne
(2)Assign
(3)Reset
等があるみたいなんです。
(1)のHelpをみると
低レベルのファイルアクセスルーチンです。
通常のファイル操作には,AssignFile,Rewrite,
および Reset を使ってください。
とあります。どれでも動きそうなんですが違いが良く判りません。
よろしくお願いします。
>>303
個人的にはTFileStreamとかTStringListとかの方が好き
とさらに選択肢を増やしてみる。
>>288
そんなことも知らない初心者が他人に教えようとするな、消えろ。
306デフォルトの名無しさん:03/12/22 14:13
734 :心得をよく読みましょう :03/12/21 22:30 ID:FIvsZDWN
【板名】 プログラム
【スレのURL】 http://pc2.2ch.net/test/read.cgi/tech/1071294733/
【名前】
【メール欄】 sage
【本文】
どなたかタスクバーがクリックされた事を検出する方法をご存じの方はいらっしゃいませんか?
307デフォルトの名無しさん:03/12/22 14:21
デルファイってなに?
308261:03/12/22 15:53
>>261です

こちらで解決できる情報が得られなかったので
MLに投稿してみようと思います
(作者様には連絡取りましたが、保守は行っていないとのことでしたので・・・)

返信くださった方、ありがとうございました。
309303:03/12/22 16:10
>>304
TStringListでやってみます。
どうもです
実は「タスクバー」という表現が漠然として答えるのが難しいといってみるテスト
Spy++あててみて味噌
311デフォルトの名無しさん:03/12/22 20:25
2から始まる連続した数字を3単位でまとめたいんですが、うまくいきません。


2 3 4 を 2 としたい。
5 6 7 を 5 としたい。
以下、同様

5以上は、うまくいくのですが、3 4 が うまくいかないです。


>>311
(x - 2) div 3 + 2 じゃなくて?
313デフォルトの名無しさん:03/12/22 20:42
>>312

xが 5、6、 7の時は 5 としたいのです。
(x - 2) div 3 * 3 + 2
315デフォルトの名無しさん:03/12/22 21:25
x - ((x+1) Mod 3)
316デフォルトの名無しさん:03/12/22 22:45
MailのテキストをクリップボードとCommaText経由でstringlistにコピーしているのですが、
改行でくぎられなければならないのになぜかstringlistの[0]に
'Date: Mon, 22 Dec 2003 21:00:05 +0900'#$D#$A#$D#$AMa
と中途半端な行まで入ってしまいます。
このような場合に、改行できちんとくぎらせるようにするにはどうしたらよいのでしょうか?
以下はクリップボードに入れたテキストです。

Date: Mon, 22 Dec 2003 21:00:05 +0900

Mail,1,3



__________________________________________________
Do You Yahoo!?
Yahoo! BB is Broadband by Yahoo!
http://bb.yahoo.co.jp/
なぜTextを使わないのか
318316:03/12/22 22:52
>>317
すみませんが、どういう意味でしょうか?
319316:03/12/22 22:56
あっ、すみません。書いておきながら私が思いっきり勘違いをしていました。

Commatextを使用していません。
クリップボードのテキストをstringlistに入れてその中身をstringlist1[0]として
見ようとしているのですが、>>316に書いたようになぜか改行位置で素直に分かれて
くれません。
改行位置で切り分けるにはどのようにすればよいのでしょうか?
「stringlistに入れて」って、そもそもどうやって入れたんだ?
まあ、stringlist.Text := Clipboard.AsText; でやってみて。
321244:03/12/22 23:15
>>305
>そんなことも知らない
なんだ。じゃ、前に出るんじゃないか(藁
>>296
『中村の里』での記述によればマウスの左ボタンをクリックすると
OnMouseDown,OnClick,OnMouseDownの順にイベントが発生するそうなので….

TForm1のprivate節にフィールド変数
FButton1MouseLButtonDownWithShift: boolean;
を追加して…

procedure TForm1.Button1Click(Sender: TObject);
begin
if FButton1MouseLButtonDownWithShift then
ShowMessage('シフトを押しながらクリックしたらしいぞ')
else
ShowMessage('シフトを押さずにクリックしたらしいぞ');
end;

procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if (Button = mbLeft) and (ssShift in Shift) then
FButton1MouseLButtonDownWithShift := True;
end;

procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
FButton1MouseLButtonDownWithShift := False;
end;
無駄なフラグとフラグ操作はバグの元ですぜ。
実際>>322は危険が危ない。
既に出てるGetKeyState / GetAsyncKeyState のが安全だし1行で済むでそ。
324デフォルトの名無しさん:03/12/23 00:48
Delphiってどこで落とすの?
シェアウェアなん?
>>324
某蘭島にいって落とされてこい
>>324
Borland - Delphi 6 Personal Download http://www.borland.co.jp/delphi/personal/
327デフォルトの名無しさん:03/12/23 01:04
ダウンロードするページ↓
ftp://ftpa.borland.co.jp/delphi/personal/BorlandDelphiPersonalEditionJP.exe
にいくと鯖が見つかりませんってなるんだが
>>327
じゃここで
Borland Delphi 6 Personal日本語版(Windows95/98/Me/プログラミング)
http://www.vector.co.jp/soft/win95/prog/se205882.html
330デフォルトの名無しさん:03/12/23 01:10
>>328-329
ダウソできました マジ親切ですね ありがd
331松井 ◆...VBh.www :03/12/23 01:14
皆さんはじめまして
突然ですがYAHOOのトップにチャットという項目があるのはご存知ですよね?
そちらのチャットのカテゴリの中に「政治」があります
その政治カテゴリのユーザールームに「創価学会YAHOO支部」という部屋があります
そこの部屋に遊びにきてください
ボイスチャットもフル稼働です
みなさんの中にも創価学会に対するご自分の意見をどんどん言ってください
その宣伝でした
尚、人数制限がありますので(50人)すぐに満室になって入れなくなるので
今これを読みまして興味を持たれた方はおはやめのご入室をお勧めします
>>331
創価学会ってなんですか?儲かりますか?
>>323
GetKeyStateってリアルタイムなボタン押下を返すのかと思ってました(汗.
Windows素人には参考になりますです.
>>321
アプリを起動するとshowmessageしなくても前面に出るんだよ。
知ったかぶりするのは迷惑なのでやめてね、わざと嘘教えてるのと同じだよ。
こういう書き込みがログに残るとそれを見た人まで被害を受ける死ね。
StringGridで中の表の幅を変えたり、フォームの幅を変えても
一番右の行がつねStringGridの端まで続いてるようにする…
(デフォルトじゃサイズ変えちゃうと一番はしの行がとぎれちゃうじゃないですか?)
のはどうすればいいのでしょう?
ちょっと説明わかりにくいかもしれませんがどなたが教えていただけないでしょうか?
日本語版Delphiで、String型からWideString型への代入をすると、
自動的にShift_JISからUTF-16に変換されるのですか?
あとUCS4String型に代入すると、UTF-32になるのですか?
manifestを組み込んだアプリを作成したのですが、
ComboBoxに全角文字を打ち、それをバックスペースで消すとバグが生じます。
これを防ぐ方法を教えてください。
>バグが生じます。
はぁ?
339デフォルトの名無しさん :03/12/23 13:11
「モジュールxxxxのアドレスxxxxでアドレスxxxxに対する読み込み違反」
というエラーが出ます。
mapファイルを見てもそのアドレスは見つかりません。
どうすれば、ソースのエラー該当行を見つけることができますか?
>>339
ブレークポイントを適当に設定しながら探す。
またはデバッグ用のログを吐かせながら絞り込むとか。
341337:03/12/23 13:48
>>338
説明不足ですみません。
例えば、あいうえおと打ったあとバックスペースを押してください。
本来なら「お」が消えるはずなのに「あ」が消えます。
その他にもバックスペースキーを押すことにより文字化けが生じたりします。
対処法が分かる方、お願いします。
サンプルプログラムのソース↓
http://tool-ya.ddo.jp/2ch/trash-box/contents.jsp?file=20031223134512090.zip
>>338
やってみればわかる。まあお前が無知なだけだがw

>>337
俺も対処方法がわからん。Unicode化で一応回避はできるが、それについては説明マンドクセ。
343337:03/12/23 14:35
>>342
レスありがとうございます。

ComboBoxに入力した文字をUnicode化するにはどうしたらいいのでしょうか…
参考になるページかヒントを教えてください。
344デフォルトの名無しさん:03/12/23 16:14
このスレの前スレが8じゃなくて7なのはなぜですか?
>>1がバカだから
>>335
グリッドのOnResizeイベントで処理しる!
…といいたいところですが,TStringGridのOnResizeイベントは隠されていて使えません.
しかし,このグリッドが親のコンポにあわせて幅を変える場合(AnchorsのakLeftとakRightがともにTrueの場合)は
そのコンポのOnResizeイベントハンドラで幅を調節します.
たとえばグリッドがフォームForm1の上にあり,AlignがalClientなどの時,
procedure TForm1.FormResize(Sender: TObject);
var LeftWidth, i: integer;
begin // 右端のセルに割り当てられる最大幅を求めてそれが1以上なら幅をその値に変更(1未満なら無視)
LeftWidth := StringGrid1.ClientWidth; // グリッドの内幅から…
for i := 0 to StringGrid1.ColCount - 2 do //dec(LeftWidth, StringGrid1.ColWidths[i] + StringGrid1.GridLineWidth);
dec(LeftWidth, StringGrid1.ColWidths[i]); // 他のセルの幅を引く
dec(LeftWidth, (StringGrid1.ColCount - 1) * StringGrid1.GridLineWidth); // セルとセルの間の線の幅をすべて引く
if LeftWidth >= 1 then
StringGrid1.ColWidths[StringGrid1.ColCount - 1] := LeftWidth;
end;

>>336
一つ目はその通りです.string(AnsiString)型とWideString型は暗黙的に相互に変換されます.
式の中で混ぜて使ったり,string型をパラメータに取る関数や手続きにワイド文字列を渡す事も(その逆も)出来ます.
型キャスト演算子を使う場合も普通のキャストのように『強引に別な型として解釈する』のではなく実際に変換を行います.
procedure TForm6.Button1Click(Sender: TObject);
var
s: string;
begin
s := '自作自演';
ShowMessage(WideString(s)[2]); // 『作』を表示
end;
二つ目はうちのDelphi(バージョン5)にはその型がないのでわかりません,すいません.
>>346 >336へのレスに書いた例はいまいちだったでしょうか….

>>339
エラーが発生した行の変数の値は確認しましたか?この行が表示できる場合はチェックしてみてください.
アクセス違反エラーになるケースで多いのは私の経験だとアドレス0での読み込み違反なら値がnilポインタの参照,
さもなければCreateする前やFreeで解放した後のオブジェクトを参照したときなどでしょうか.
配列変数の存在しないインデックスを参照した場合(ar: array[0..9] of integerと宣言して ar[10]を参照したときなど)
にもアクセス違反になりますが,これはコンパイラオプションで『範囲チェック』を有効にする事で検出できます.
348336:03/12/23 18:01
>>346
どうもです。これで安心して使えます。
UCS4String型への直接の代入はできませんでした。
WideStringToUCS4Stringのような関数が用意されているので、それを使うようです。
しかもUCS4String型は単なるUCS4Char型の動的配列?謎が多いです。

ちなみにUnicode系<->JIS系の変換テーブルは、各exeが持っているのですか?
それともOSの機能なのでしょうか?
ソース嫁
>>334
はぁ?何言ってんの?もう一度読み返せ。
>>350
ひととおりまとめて下さい
352デフォルトの名無しさん:03/12/24 00:48
すみません質問させてください。
↓のページを参考にさせていただき、
ttp://www2s.biglobe.ne.jp/~aks-lab/delphi_part1_4.htm
読み込んだ画像に合わせてフレームを変化するプログラムを作ろうと
したのですが、どうしても、うまくいきません。
デバッグで追いかけてみたのですが、どうやら、

-------------------------------------
//ユーザー定義手続き(画像フォームのサイズ調整)
Procedure TForm2.ImageView(ViewBitmap:TBitmap);
begin
//イメージのサイズの調整
Image1.Height := ViewBitmap.Height; ・・・・ (1)
Image1.Width := ViewBitmap.Width;

//フォーム2のサイズの調整
Form2.Height := Image1.Height + 28; ・・・・ (2)
Form2.Width := Image1.Width + 9;
-------------------------------------

の(1)の段階でImage1.Heightに0以外の値を代入しているのですが
(2)の段階でImage1.Heightがなぜか0になってしまいるようです。
ただ、この現象は、この関数が1回目に呼ばれたときだけ起きるらしく、
2回目以降は、上記の現象は起きず、意図どおりに動作してくれます。
これは何がいけないんでしょうか?

開発環境は Windows2000 + Dlphi6 personal updatePack2 です。

似たような現象をご存知の方がいらっしゃいましたら
是非ご教授お願いいたします。
ぬるぽ
354デフォルトの名無しさん:03/12/24 01:28
   ( ・∀・)   | | ガッ
  と    )    | |
    Y /ノ    人
     / )    <  >__Λ∩
   _/し' //. V`Д´)/
  (_フ彡        /  ←>>353
>>352
呼び出すタイミングの問題でしょう。
356デフォルトの名無しさん:03/12/24 10:36
>> 355
なにか事前に初期化処理をしなければいけないんでしょうか?
どうもTBitMap.Canvas.Pixels[x,y] に RGBのピクセル値を代入する
場合にも、同様にうまくいかない場合があり困っています。
>>350
うざいなぁ、showmessageがアプリを最前面に出してると思いたいなら
勝手に思っててくれよ・・。
>>337>>343
私は某フリーソフトの作者です。
最近その問題と戦っていたのでちょっと詳しいです。
ComboBoxだけでなく、文字入力できる標準コントロール全部で問題発生します。
ただし、問題が生じるのはXPのみです。

ユニコード化が必要ですが、非常に困難なので、
他人の作ったユニコードコンポーネントを使うべきです。
ttp://home.ccci.org/wolbrink/tnt/delphi_unicode_controls.htm
差し替えできるものはすべて、このコンポーネント群に差し替えるべきです。

しかし、ComboBoxに関しては、オートコンプリートにバグがあり、
オフにしないと日本語を入力したとき問題が生じます。
バグについて何度もメールしましたが、コンポ作者は日本人ではないため、
どう説明しても伝わらず、終いには私が修正したソースを送りましたが、反映されていません。
そういうわけで自前で多少修正が必要です。
>>358
修正内容教えてちょ
360358:03/12/24 13:53
何カ所か、stringの長さとwidestringの長さを混同して比較しているところがあります。
全角文字のない国ではこれらを混同しても問題は起こらないというのが、
作者に問題点が伝わらない一因です。
また、日本語IMEを使わないとバグを再現できないということも一因ですが。
で、オートコンプリートがらみでは、最新版とは多少ずれるかもしれないけど、
TntStdCtrlsの1817、1818、1888、1889、1890行目あたりを確認し、
お好きなように修正してください。
我が家のXPではうまいこと動作しています。
>>352
ソースがいけないようです….
イメージコンポのAutoSizeがTrueになっているのに自分でサイズを変更しようとしているのが問題.
> Image1.Picture.Bitmap := ViewBitmap;
とコンポに画像を入れた時点でサイズは自動調整されるのでその後でフォームのサイズを変更すればよいでしょう.

なおフォームのサイズ調整ですが内寸と外寸の差がいくつになるかを決めうちするこのコードも問題です.
フォームの見出しの高さや枠の太さはユーザーが好きなように決められるからです.
WindowsXPに至ってはこれらのサイズのデフォルトすら異なります.
フォームのClientWidth/ClientHeightプロパティを使う方が簡単確実です.

※ちなみに元のコードだと2回目以降の読み込みでも画像サイズが直前と異なると正しく動作しません.

もっともDelphiのもっと比較的新しいバージョンならこんなことをしなくても
イメージコンポとフォームのAutoSizeプロパティをTrueにすれば自動的にフォームのサイズを変更してくれるようですね.
(件のサイトではDelphi3を使っていますがこのバージョンには存在しません)
manifestの不具合って自前で対処しなきゃいけないほどマイナーなの?
普通にTEditで再変換狂うからすぐ気がつくと思うが。
質問です。
複数画面間で共有できる変数型って何でしょうか
教えてください
>>363
すべて
>>363
画面なんていう単位のスコープなどない
>>363
言語ガイド通読10回
TBatchMoveの使い方で質問です。
AppendUpdateモードで更新するときインデックスを指定するのはソーステーブルの
IndexFieldNamesプロパティで良いのでしょうか。
368352:03/12/24 22:22
>>361
詳しく教えていただきありがとうございます。
AutoSizeをFalseにしたところ正常に動作しました!
なるほど。そういうプロパティがあったのですね。
ClientHeight等も調べて取り入れてみようと思います。
ありがとうございました。
直接Delphiとは関係ないんですが・・・・。
ツールバーを作ったときのアイコンってどうしてます?
やっぱり自作でしょうか・・・(;´Д`)
漢ならいさぎよくShowCaptions:=true
>>358
(´・ω・`)ショボーン
修正以前にそのコンポーネントインストールできなかったよ…
Del6 personalで使える方法キボン
TntUnicode_6.bpgインストールするだけだがなぁ
373358:03/12/25 13:25
ttp://www.delphi-gems.com/ThemeManager.php
D6以前のバージョンでは、上記コンポを先にインストールしてください。
タブコントロールなどでLUNAスタイル対応するために必要なコンポです。
というか、XP対応のためのユニコード化なので、テーママネージャは入ってて当たり前。
あとは従来通り、Delphiバージョンに対応したパッケージグループをインストール。
Formにボタンを配置して、
「A」キーを押した時とかに、
そのボタンが押されるようにする
簡単な方法ないですか?
ボタンを押したのと同じ動作をさせたいのか、マジで押したいのか。
ボタンがへっこまなきゃ嫌なのか、へっこまなくても押したことになればいいのか。
ボタンの押し方がわからないのか、Aキーの感知がわからないのか
aキーも受け付けるのか、フォームがアクティブでないときは受け付けるのか
>>375
押されたのと同じ動作をしたいです。

で、いま調べていたらKeyPreviewと、OnKeyPressをみつけました。
これでなんとかできそうです。しかし、このキーが、Deleteキーとか
カーソルキーだとイベントが発生しません・・・なんでだぁぁ
>>377
取りあえずヘルプ読んでみなされ
onkeydo
if key=
button1cli
380371:03/12/25 14:50
>>372
>>373
TntUnicode_6.bpgではコンパイルエラーが出るし、
TntUnicodeVcl_R60.dpkもTntUnicodeVcl_D60.dpkも同様でした。・゚・(ノД`)・゚・。

DB関係をはずしてもこのパッケージは設計時には使えませんのエラーメッセージが出ます。
Delphi超初心者向けにもうちょっと詳しくお願いします。
381デフォルトの名無しさん:03/12/25 15:31
画面に線を引きたいのですが、コンポーネントでできますでしょうか?
Canvas.MoveTo( 10, 10 );
Canvas.LineTo( 100, 100 );

これらだと
未定義の識別子 : 'Canvas'
というエラーになってしまいます。
>>381
「何に」線を引きたいのか書いてないのが原因。
フォームに引きたいのか、ペイントボックスに引きたいのか、マジックでディスプレイに引きたいのか。
>マジックでディスプレイに引きたいのか
ワロタ
>>381
Canvasというプロパティが存在するオブジェクトに対して使用しなければ意味がないよん。
TCanvas のインスタンシュを生成して、
Handle に GetDC(0)でシュエしたものを設定し、
スクリーンに線をひく事はシュキました。
この場合、ReleaseDC のインスウは何になるのですか。

var
 TC:TCanvas;
begin
 TC := TCanvas.Create;
 TC.Handle := GetDC(0);
 TC.Line(50,20);
//ReleaseDC()
 TC.Free;
end;
>>385
つまらん
387デフォルトの名無しさん:03/12/25 20:13
WebBrowserコンポーネントで表示しているページの、FORM欄に文字列を
アプリ側から入力したいのですが、どういった方法がありますでしょうか。
具体的に言うと、WebBrowserコンポーネントで作ったブラウザに
自動ログイン機能を付けようとしているのですが・・・
>>387
つまらん
389387:03/12/25 21:44
>>388
真剣に悩んでるので茶化さないでください
>>380
そんな調子じゃ出来る頃にはXPかDelphiがなくなるから安心しなよ
391デフォルトの名無しさん:03/12/25 23:25
Form1 の ListBox のデータを使い、別スレッドでグラフィックを描かせたいのですが、
上手く画面(PaintBox)に表示できるときとできないときがあります。
失敗したときは、TForm1.GamenPaint の CopyRect がうまく出来ないような…?
なんで上手くできるときとできないときがあるのか、教えてくらさい。おねがい。
type
 MyThread = class(TThread)
 private
  TesBuf : TBitmap;  ListData : TListBox;
 protected
  procedure Execute; override;  procedure BitmapCopy;
end;
var
 Form1: TForm1;  GrDat : array[0..4] of TBitmap;
procedure MyThread.Execute;
begin
 TesBuf := TBitmap.Create;
 with TesBuf do begin
  width = xxx; Height = xxx;
  << Form1.Listbox1 を使って色々作画 >>
 end;
 Synchronize(BitmapCopy);  TesBuf.Free;
end;
procedure MyThread.BitmapCopy;
begin
 GrDat[0].Assign(TesBuf);  Form1.Gamen.Refresh;
end;
procedure TForm1.GamenPaint(Sender: TObject);
begin
 << GrDat.Canvas を必要な範囲だけ PaintBox.Canvas に CopyRect >>
end;
392デフォルトの名無しさん:03/12/25 23:31
>>387
自動でログインさせたいのなら、単にIndyのIdHTTPでユーザー名とパスワードをPOSTすればいいだけだ。
POSTして返ってきたHTMLをWebBrowserに表示させればよい。
>>385
ReleaseDC(0,TC.Handle);
0もハンドルです。
>>319
スレッドの使い方間違ってます。
TForm1にアクセスする時点でスレッドは同期しなくてはいけません。
スレッドが効果を表すのは”単独処理”だけです。

リストボックスにある情報から作図する場合
1.スレッドに情報を送る
2.作図
3.結果を出力
の2のみが別スレッドで扱えます。
他は同期をとってください。
>>387
以前からよくある質問です。
直接書き込む方法は恐らくネット上に上がってません。
実装は非常に困難なはずです。
簡単なのでよければ
クリップボード、仮想キーを使う手があります。
>>387
DOM使えばいけんじゃないの?
397デフォルトの名無しさん:03/12/26 09:07
>>387
受信したHTMLを書き直して 表示しなおすという手は どう?
HTMLファイルの直接変更で うまくいくのかな?
398デフォルトの名無しさん:03/12/26 10:01
Format文の使い方が よくわかりません。

たとえば integer 型の変数 a を 0か空白をつけて 9桁にしたいのですが、
どうすればいいのでしょうか?

aの中身が 100 だとすると
000000100 というのを取得したい。
もしくは ______100 というのを ( _ は 空白です)
DelphianWorldの
UIWebBrowser51を使ってみたら?
オートコンプリートの機能とかあるし、
ひょっとしたら使えるかも。
Format('%.9d',[100]);じゃだめ?
>>398
FormatFloat
402デフォルトの名無しさん:03/12/26 13:03
6Personal(Free)でデータベース(Accsess2000)を
操作することが出来ますか?
(標準では無理そうなんですが)
>>393
ありがとうございます。
>>402
できます。
くだすれDelphi Part7 (超初心者向け)の[625]にサンプルが有りますよ。
405デフォルトの名無しさん:03/12/26 14:03
パパパスカルマスターしたぞー
年末にパスカル使うぞー
406デフォルトの名無しさん:03/12/26 14:10
>>404
ありがとうございます
407デフォルトの名無しさん:03/12/26 14:26
別スレで相手にされませんでしたので。。。

QuickReportのプレビュー画面の印刷設定が効きません。
回避方法はありまつか?効くようにするか、印刷設定ボタンを消すか、等。
408デフォルトの名無しさん:03/12/26 14:32
>>
407
アンチエイリアス
409デフォルトの名無しさん:03/12/26 18:06
>>1
>お礼はDelphiの布教と初心者の救済をお願いします。

おふだ?
意味がわからん。
410デフォルトの名無しさん:03/12/26 18:49
oreidaro



turareta・・・
411デフォルトの名無しさん:03/12/26 19:23
お礼には 3種類の読み方がある。

おれい
おさつ
おふだ
412387:03/12/26 20:02
みなさんありがとうございます。
タイミング悪くディスプレイが逝ってしまったので、すぐには試せないのが残念(今は携帯から)ですが、
やってみます。
ありがとうございました。
413デフォルトの名無しさん:03/12/26 21:01
どなたかお知恵を貸して下さい。
フォームを常時、最も手前に表示させたいんですが、
どこを弄べばいいんでしょうか?
414デフォルトの名無しさん:03/12/26 21:01
>>411
だから?
お前は自分の都合で読み方変えるのか?
普通は文面みて読むだろ


mataturareta・・・
>>394
1.TBitmap、TListbox を持ったスレッドを作る。
2.フォームの ListBox1 から、スレッドの TListBox にデータをコピーする。
3.スレッドの TListBox を使ってスレッドの TBitMap に作画する。
4.スレッドの Synchronize で呼び出した手続きで Form1 に TBitMap を Copy する。

…で、Execute で処理するのは 3 のみってことであってるかな?
あと、同じ関数を TForm とスレッドと同時に呼ぶのは、問題ありなのかな?
>>414
お前おもしろいからトリップつけれw
>>411

お札...おふだ、おさつ
お礼...おれい

ではないでしょうか
日本語大丈夫ですか?
418デフォルトの名無しさん:03/12/26 22:28
フォントを最小にすると区別が付かなくなるぞ
>>418
最小にしてみたが、ついた
>>415
ビューがいらないんならTStringList使えば?
>>420
よく考えたら TStringList でも同じように扱えるんですよね。そうしてみます。
422デフォルトの名無しさん:03/12/27 09:05
ま、確かにお礼がDelphiの布教と初心者の救済をお願いします。になるのは変だ。
メッセンジャーについている共有ホワイトボード
のようなものを作りたいのですが、どういうように
考えればいいか、作る方法が思いつきません。

どなたかヒントだけでも結構ですので、教えて
いただけないでしょうか。
>>423
例えばホワイトボードサーバ作って、

サーバはクライアントから描画命令を受け取り描画する。
クライアントはその時点での描画イメージをサーバから取得できる。

とか。
ヒント
ホワイトボードそのものが共有されてるわけじゃない
ありがとうございます。
やっぱり、図形の場合は座標1や描画する形、
フリーハンドの場合は座標の軌跡、
文字の場合は表示を開始する座標と
文字のフォント、大きさや色、
画像の場合は表示する座標と画像そのもの
を相手側に送って処理させるという感じなん
ですかね。

はずしてるかもしれませんが・・・・
>>426
両者の間でイメージの不整合が出ないならそれで全然良いと思うよ。

俺は両者のイメージを同一にするためにサーバは専用に一つだけいた方が良いかなと思ったけど。

>>413

TForm.FormStyle?
429413:03/12/28 00:40
>>428
それでした!!
>>429
お札に埋もれてたなw
431デフォルトの名無しさん:03/12/28 12:01
Delphi Personal 6の英語版ってのはどこでダウンロードできますか?
ボタンを押すとForm1を非表示にしてForm2を出す方法を教えてください
>>432
Form1.Hide
Form2.ShowModal
>>433
出来ました。ありがとうございます
435431:03/12/28 14:38
自己解決しますた
>>433
ShowModalにするとメインスレッドでの処理が全て停止してしまうわけだが
まぁいいか。
おそらく>>432には関係ないw
>>436
ヴァカは黙ってろ
>>437
何で怒ってるんだ?
Delphiで、「aspでADOを使う感覚で楽にローカルDBを使いたい」、
というのは贅沢でしょうか…

アカデミック縛りがない最後のバージョンなD5Proか、
D6Personalで、ターゲットOSがWin2k/XP。
その環境でAccess2000のmdbを扱いたい。

タイプライブラリのインポートで、MDACのインポートを試してみたけど、
どのMDACのバージョンでもうまく扱えず。
BDEは配布の段を考えると扱いが面倒なので遠慮したい…
ラッパコンポがないか探してみたけど、検索ヘタなもんで見あたらなかった…

色々試したり調べたりで休みを丸々一日潰しちまったい。
なんかいいコンポまたは解説サイトへのポインタだけでかまわないので、
どなたかご教授ください…
440デフォルトの名無しさん:03/12/29 23:00
下記のコード、もう少し早くなりませんか?
X,Yは100から500位までです。

〜Data[i][j] : word
ibl,ibh : byte

for j := 0 to Y-1 do
begin
 for i := 0 to X-1 do
 begin
  ibl := Lo(gpData[i][j]);
  ibh := Hi(gpData[i][j]);
  str := Chr(ibl) + Chr(ibh);
  ibl := Lo(gsData[i][j]);
  ibh := Hi(gsData[i][j]);
  str := str + Chr(ibl) + Chr(ibh);
  ibl := Lo(opData[i][j]);
  ibh := Hi(opData[i][j]);
  str := str + Chr(ibl) + Chr(ibh);
  ibl := Lo(osData[i][j]);
  ibh := Hi(osData[i][j]);
  str := str + Chr(ibl) + Chr(ibh);
  ibl := Lo(stData[i][j]);
  ibh := Hi(stData[i][j]);
  str := str + Chr(ibl) + Chr(ibh);
  a.WriteBuffer(Pointer(str)^,10);
 end;
end;

>440
普通にByte3次元配列へキャストするとか。
最初に文字列の長さを計算して、
SetLengthして、str[n] := Char(); で上書きしてくとか。
a.WriteBuffer(gpData[i][j], 2);
a.WriteBuffer(gsData[i][j], 2);
……
でよくない?
443デフォルトの名無しさん:03/12/30 00:38
444440:03/12/30 00:52
>>441
どうもです。SetLength〜の方はできました。
3次元配列へのキャストのほうがよくわかりません。

ba : PByteArray

ba := Pointer(gpData[i][j]);
str[1] := Chr(ba[0]);
str[2] := Chr(ba[1]);
ba := Pointer(gsData[i][j]);
str[3] := Chr(ba[0]);
str[4] := Chr(ba[1]);

  ・・・・・

こんな感じにすると保護違反が出てしまいました。
すみませんが教えていただけませんか?
type
hoge1=array of hoge0
type
hoge2=array of hoge1
つーか、ベンチマークして自分で考えろよ。
まず最初にどの部分がどのくらい時間がかかっているか調べる。
そして時間を減らす(処理量を減らす)ことができる部分がないか調べる。
そしてその調査に基づいて最適化を行う。
順序立てて考えればシンプルに解決。

まあ、一番時間がかかっている部分は実行しなくても明白だが。
データ構造見直して
var Data: array[0..X-1][0..Y-1] of record gp, gs, op, os, st: Word; end;
とでもすれば、WriteBuffer(Data, SizeOf(Data)) で一発。
>>446
はいはい、そうまでしてかまってもらいたいのですね?
449439:03/12/30 10:10
>>443さん
ありがとう!
心から感謝。
きちんと動作できるのも確認しました。
TPopupMenuでメニューを追加しています。
Delphi7のヘルプをみると、TMenuItemのインスタンスを次々に作成し、
TPopupMenu.Items.Addしてメニューを追加しているように見えます。

各メニューだけTMenuItemのインスタンスを作成し、PopupMenuに
追加しろということだと思いますが、ここで作成したTMenuItemの
インスタンスは、PopupMenu破棄時にすべて自動に破棄されるの
でしょうか。それとも、すべて自分で破棄するようにしなければいけ
ないのでしょうか。
マニュアルにそれらしき項目がないか、見逃しているようですので、
ご存じの方えられましたらよろしくお願いいたします。
>>450
VCLのソースは?
>>451
おお、その手がありましたね。
みたところ、TPopupMenuが保持しているTMenutemをDestroyで破棄しており、
さらにTMenuItemのデストラクタでAddしたものをすべて破棄しているようです。
この手はVCLのソースみれば、一発でしたね(汗

ありがとうございました。助かりました。
MDIアプリケーションでActionMainMenuBarを使っているのですが、
子ウィンドウを最大化したときに元に戻すボタンが表示されずに
元の大きさに戻せません。何かよい方法はありませんか?
元に戻すボタンをつくります
455デフォルトの名無しさん:03/12/31 09:22
TCheckListBoxについて質問します。

チェックリストの項目はitemsのLoadFromFileやSaveToFileのメソッドを使えば
読み書きできますが、チェックデータの読み書きはできないようです。これの読み書き
は皆さんどうやってますか?Checkedプロパティをすべての項目についていちいち調べて
別ファイルに保存するしかないんでしょうか?
>>455

使ったことないからわからんけど、TString型の
インスタンスも持ってるからSaveToFileつかえるけど、
肝心のCheckしてあるかどうかまで保存できないみたいね

いちいちっていっても、そんなに面倒じゃないでそ。
もう一つTStringListあたりをもつ継承Classをつくって、
"Text","True"のようにCSVではき出すようにしたり、

Text
True

のようにはき出したりして、読み込めるようにすれば
いいんでない?それほど難しいともおもえんし。
保存できるコンポもどっかにおちてそうだし。
TStringListの中のアイテムを全部、グリッドの中に入れたいんですが。


for i:=0 to titles.Count - 1 do
begin
Grid.Cells[0,(i+1)] := Titles.Strings[i];
end;

とやると、最後Titleの最後までグリッドの中に入れられません。

for i:=0 to titles.Count do
とやるとリストの範囲を超えているとか言われますし…
どうすればよいのでしょう?
>>457
ごめんなさいちょっと疲れているようです
休みますね…自己解決しました(汗
TCustomFormを継承してコンポを作っているのですが、
TCustomFormのVisibleをみると
property Visible write SetVisible default False;となっていて、
read設定がありません。

その上の親Classをみにいっても、それらしき設定がないんですよね・・・
さしあたり、作成しているコンポでは、property .... read GetVisible()
GetVisible()でresult := inherited visibleで取得できているよう
なんですが、なんか気持ちが悪い・・・

Visibleはどこからもってきてるんでしょうか・・
ちゃんと継承元を調べればわかる。
というか調べなくてもほとんどの人は常識として知っている。
>>460
了解
また眺めてみます
プログラムのアイコンなんですが、アイコンのリソースを入れたくないので
アイコンのリソースを削除する方法を教えてください。
(あのDOSアプリみたいに味気ないWindowsのEXEファイルのデフォルトの
アイコンにしたい)
プロジェクトファイルの{$R *.res}を削除
あけまして どうも おめでとう ございます
あけおめ
466デフォルトの名無しさん:04/01/01 13:45
>>463
ありがとうございます
それとみなさんあけましておめでとうございますm(_ _)m
467デフォルトの名無しさん:04/01/01 17:30
プログラミングに直接関係ない質問で恐縮ですけど、コンポーネントパレットが消えてしまったのですがどうしたら復活しますか?
「コンポーネントの一覧表示」から一列ずつ並んだウインドウは出てくるのですが、それを元通りに横長の状態にしたいです
右クリックで「コンポーネントパレットを表示」とすると、何も置かれていないスペースが出てくるだけです
再インスコすれば楽勝です
INDY9をインストールしたのですがDEMOSをコンパイルしようとすると
エラーがでてきました
>[致命的エラー] MainForm.pas(7): ユニット IdGlobal は異なるバージョン System.RTLVersion によりコンパイルされています

検索していくうちにアップデートを適用したほうがいい、というように書かれていましたので
元々適用していましたが再度確認しました
>Delphi 6 RTL アップデート #3
>Borland Delphi 6 アップデートファイル #2

しかし、結果は同じです
どうすれば正しくコンパイルできるのでしょうか
>>469
dcuファイルの削除。
471名無しさん@お腹いっぱい。:04/01/02 17:14
var image: array[1..10] of TImage;
を使いたいのですが、どうしたら使えますか?
初歩的な質問ですみません・・・。
472デフォルトの名無しさん:04/01/02 19:10
画像(bmp)の任意位置の色コードを取得する方法教えて下さい。
よろしくお願いします。



>>471
for i := Low(image) to High(image) do image[i] := TImage.Create(Self);
で準備完了。Freeもお忘れなく

>>472
bmp.Canvas.Pixels[x, y]
474デフォルトの名無しさん:04/01/02 20:25
アフォですまん
bmp.Canvas.Pixels[x, y]なんだけど
RGB形式にするにはどうすればよいのですか?
ヘルプ読めアフォ
476名無しさん@お腹いっぱい。:04/01/02 21:31
>>473 さん
ありがとうございました!
image := TImage.Create(Form1);
image.Parent := Form1;
でもできました。失礼しました。
海外掲示板用オフラインリーダーを作るスレ
http://pc2.2ch.net/test/read.cgi/tech/1072883528/

海外でよく使われていうる掲示板スクリプト
専用のオフラインリーダー作って下さい。

必要な条件はID、PASSを管理できること、
OpenJaneみたいな三面型の見た目。
簡単にローカライズできるように言語ファイルを採用
478デフォルトの名無しさん:04/01/02 22:02
・ボタンを押すごとに一つずつパネルを動的に生成
・パネルのCaptionには、ComboboxのItemIndexが入っている
このとき、パネルを生成する度にCaptionに表示された数字の昇順に並び替えるにはどうしたらいいですか?
479デフォルトの名無しさん:04/01/02 22:08
はじめました。僕も最近DirectX9.0をはじめました。
開発環境はVC++6.0ですが、何か参考になるサイト、
本などがありましたら教えてください。
よろしくお願いします。
>>475
ありがとん
アフォでも出来たよ
>>478
やりたいことの意味が分からん。もう少し詳しく書いた方がいい。
>>478
ぱげいんでx
484478:04/01/02 23:48
ごめんなさい、前回の書き込みでラベルと書こうとしたのをパネルと書いていたため支離滅裂なものになってました。

今やりたいことは、トランプを山札から一枚引く度に手札に加えて、手札を昇順に並べ替えることです
Combobox.ItemIndex:引いたカードの数字
label:手札の内容を表示

今はOnclickイベントが発生するたびにlabelを動的に生成し、Combobox.ItemIndexを配列に記録しています。
配列の中で並べ替えは上手くいっているのですが、それをlabelのcaptionに順番どおりに表示する方法が解りません。
解決手段があれば教えていただけないでしょうか?


485デフォルトの名無しさん:04/01/02 23:51
>>472
某Delphi談話室にマルチポスト。
あっちにもレスしとけ。カス。
486デフォルトの名無しさん:04/01/03 00:20
>>485
誤解されてるみたいだけど
いくらアフォでもマルチはしてないです。

487デフォルトの名無しさん:04/01/03 00:24
>>486
ほう。じゃ、誰かが騙ったってことか?
一字一句同じコピペなのに?
488487:04/01/03 00:25
スマン。
>>471だった…。
489デフォルトの名無しさん:04/01/03 00:29
どうせ信じてもらえませんけど
アフォなんでその某講話室教えてくださいませんか?
>>489
マルチポストしたのは「471」。
491489:04/01/03 00:44
誤解がとけたからもういいや
スレ汚してすまん
>>491
こちらこそ。スマヌ。
pixcel[0,0]を透明色を設定した後、stretchDrawを使ったのですが、
98だと赤と青の成分が逆の色が透明色になってしまいます。
XPだと普通に描画するので原因まがよく分かりません。
ちなみに、透明色の赤と青の成分が
同じ(たとえば、紫)だと98でも普通に描画します。
OSの仕様でしょうか?
日本語?
エディタについて質問なんですがdelphiについてるやつ以外のもの
使ってる方いますか?
もしいたらどんなの使ってるか教えてください。
今までvi使いだったので慣れてないから使いづらいです。

http://forum.nifty.com/fdelphi/faq/00016.htm
ここ見ると諦めて標準の使ってろって事らしいですが…
ToolsAPIというのを使えばIDEをかなり拡張できるみたいだが資料が全然ない。
とりあえずGExpertsをいれて我慢すれ。コンパイルすれば日本語通るようになるし。
あれ…?
delphiって無料verがあったような気がしたんですけど
有料しかないんですか?
>>497
ある。
あけおめ!
    ∧,,∧  このあたりを参考にどうぞ。>>495
   ミ,,゚Д゚彡   他のエディタと併用する
    ミ つ旦)~~   ことができます。
  〜と,,,~),,~)

http://onigiri.s3.xrea.com:8080/delphi/index.php?%5B%5B%A5%C4%A1%BC%A5%EB%A4%CE%C0%DF%C4%EA%5D%5D#content_1_3
500デフォルトの名無しさん:04/01/04 05:24
ネットワーク関係の質問です。

クライアントに接続を切られるとサーバーは例外を発生させて
非同期接続の場合「非同期ソケットエラー」とメッセージがでますが、
これの例外が起きたら自動に解消する記述をしたいです。

try finally文を使って頑張りましたが分からなかったので質問します。
ご返答よろしくお願いします。
>>500
try〜except〜end
502デフォルトの名無しさん:04/01/04 14:40
〜の間には何と書けば良いですか?
    ∧,,∧  
   ミ,,゚Д゚彡
    ミ つ旦)~~

例えば、ADOのDB接続の場合は
begin
try
DataModule1.ADOConnection1.Connected := True;
except
on E: EOleException do begin
ShowMessage('DBと接続できません' + sLineBreak +
e.Message);
end;
end;
end;
こんな風に書くのだけど、これはDB接続不具合の場合。

「非同期ソケットエラー」というのが
どういうエラーになるのかは、漏れにはわからないので

IDEのデバッグモードでEXXXExceptionという表示を
調べて、記述すればいいのではないかと思われ。
>>500
ServerSocket1ClientErrorでErrorCodeに0を代入
505デフォルトの名無しさん:04/01/04 15:35
>>504さんの場合ですと、それが実行された以降
他のクライアントにメッセージを送ることができなくなります・・・。
他の方法はありませんか?
506デフォルトの名無しさん:04/01/04 15:46
あ、すみません。
エラーコードの場合ですと、「非同期エラー」の例外メッセージのうえにある
ボタンを押したことになりません。
ボタンを押すと同様の処理をしたいのです。
何をしたいのか、さっぱりわからんし、
後からやりたいことの追加をされても困る
もっと最初から、いろいろ情報を書いてもらわないと

と書いておくが
Delphiから実行するとexcept処理していても
エラーメッセージがでる。exeで実行すると例外時
にはダイアログがでないという返事でいいのかな。
>>505
自分でボタン押せよ。
というより
何言ってるのかさっぱり分からん。
解読した>>507はネ申?
509デフォルトの名無しさん:04/01/04 20:11
自分は「非同期エラー」の例外メッセージのうえにある
ボタンを押すのと同等の処理を、そのボタンを押さずにしたいのです。
でもエラーコードやtry except文をいじっても
エラーメッセージが消えるだけで、そのボタンを押す処理と同等の処理を
したことにはなりません。
そのボタンを押すのと同等の処理をするには、どのように記述したらよいですか。
(try except文の使い方によってはできるかもしれませんが、
自分の力ではできませんでした)
>>509
ツール->デバッグオプション->言語固有の例外->追加->例外クラス名を書け
例外メッセージのうえにあるボタンてのがよくわからんのだが・・・
ボタンがわからん以上、ボタンを押すのと同等の処理もよくわからんし。

実装してるSocketもTIdTCPServerなのか、TTCPServerなのか、
その他のコンポなのかによっても違ってくるだろうし。

つか、漏れに知識がなくて、普通の人にはあっさりわかるのかな・・・
512デフォルトの名無しさん:04/01/04 20:40
あ、ごめんなさい。TServerSocketを使っています。
ボタンとは「非同期ソケットエラー」というメッセージのうえにある、
「OK」と書かれたボタンのことです。
>>512

>>510は無視ですか。では一生頑張って下さい。
514509:04/01/04 20:43
>>510
ܷܵܶ
515デフォルトの名無しさん:04/01/04 20:45
>>510
自分は初心者なので、それについてよくわかりません。ごめんなさい。
>>515
そうですか。だからと言って避けても仕方がないですよ。
517デフォルトの名無しさん:04/01/04 20:48
例外クラス名ってどうやってしるんですか?
非同期エラーのダイアログを自動で閉じたいけど、
try〜except〜end処理だと、そのダイアログが
でてこないという意味なんかね。

なら正常な動作だと思うんだが。
非同期エラーがでたことをユーザに伝えたくて、かつ
ある一定時間後に自動的に消したいのなら、
except〜end間で、新たに自動的にフォームが閉じられる
ように書くしかないね。
519デフォルトの名無しさん:04/01/04 21:17
質問です。現在アルゴリズムを勉強中の者です。
今使っているテキストが、C++BuilderとDelphiのユーザー向けのものなのですが、
テキストの中にShowArrayコンポーネントを置いて〜という記述を見つけました。
しかし、コンポーネントパレットを探しても見つからないのですが、フリー配布されているDelphi6には
このコンポーネントは無いのでしょうか?
520デフォルトの名無しさん:04/01/04 21:19
>>518さん
はい。そういうことなのですが、
try except文を使用すると、例外はでなくなるのですが、
socket.activeconnectionsの数がへらないのです。
例えば、ユーザーが一人いて、その人がいきなり切断します。
そうするとtry except文が例外を消す。
でもsocket.activeconnectionsからは-1されませんでした。
コレを自動で-1するようにしたいのです。
ボタンをクリックした場合、-1はされました。
お願いします。
521デフォルトの名無しさん:04/01/04 21:21
>>520
exceptの中で、そのClientに対して切断処理すれば
いいんでないの?
普通、予期できるエラーダイアログをユーザにみせる
のはよくないと思うけど。
523519:04/01/04 21:41
こんなに早く回答が帰ってくるとは思ってませんでした。
無事にコンポーネントのインストール完了しました。
本当に有難うございました。
524デフォルトの名無しさん:04/01/04 21:41
Tform1.close で serversocket.close 処理したら難なくクリアしました^^;
おさわがせしてすみませんでした。。。
525デフォルトの名無しさん:04/01/04 21:43
>>523 いえいえw
自分の話題が忘れられるとこまるのでww
>>524

>>500を何度よんでも
>>522の解決には至らん

ttp://www.hyuki.com/writing/techask.html
527デフォルトの名無しさん:04/01/05 11:09
>>502
もう一度文法からおさらいしてみましょう
>>527
いくつも解決案が飛び出しているのに、今更そんな初歩的な煽りをかます意味はあるのか?
何がどうなって解決に至ったのか分からんな
form1を閉じたときにserversocketを閉じたら解決
( ゚д゚)


漏れが日本語能力に欠けているのか?
>>529
exceptで処理をしているならわかるが、閉じるところでなんとか
してるところで、多分なんか間違ってるんだろね

一つ言えるのは、わけのわからん質問の連続で食傷気味に
なっていて、もう指摘する意欲もなかったということだろ。
531デフォルトの名無しさん:04/01/05 19:11
文字列に入った値が有効な日付かどうかチェックする方法を教えてください。

エラーとかを出してチェックする方法以外で。
>>531
でも、例外をキャッチするのが早いと思うぞ。
533デフォルトの名無しさん:04/01/05 19:19
例外だと Delphiで実行中に 止まるから いやなんだよね。
534デフォルトの名無しさん:04/01/05 19:19
それに わざわざ 例外を 起こさせるなんて おかしいよな。
>>534
例外的なデータが入ってきてるんだ。例外が起こってしかるべきだと思うが。
後、>>533に関しては昨日俺がどこかに解決策を書いた。
536デフォルトの名無しさん:04/01/05 19:42
質問です

リッチテキストコンポーネントで追加した行に色をつけたいと思っているんですが、うまくいきません。
ヘルプをみると、キャレット?の位置が重要みたいなのですが、よくわかりません。

temp:='ほにゃら';
RichEdit1.Lines.Add(temp);
RichEdit1.SelStart:=0;
RichEdit1.SelLength:=Length(temp);
RichEdit1.SelAttributes.Color:=clRed;

こんな感じに書いてみましたが、最初の行しか色が変わりません。
よろしくお願いします。
>>536

  0   Length(temp)
 ↓    ↓
  |ほにゃら|


なんで当たり前では?
538536:04/01/05 20:25
>>537
えっと、上のコードを何回か繰り返しても、
最初の一行しか色がかわんないんです。
最後にaddした行の色を変える方法ってどうしたらいいんでしょう?
>>538
start := length(RichEdit1.Lines.Text) - length(temp);
length = length(temp);

540デフォルトの名無しさん:04/01/05 22:30
TThread使ってindyでGetしてるんですが、
Terminateに対応する方法がわかりません。

Get待ちの間にTerminatedが監視できないのです。

TerminateThread使って止めるしかないんでしょうか?
TThreadとはいえ、一つの処理で止まるような場合には
やっはりThread内で停止する。つねに、ループをぐるぐる
まわってるわけじゃない。

実際に調べてみたことないし、やったこともないけど、
ぱっと考えつくとこといえば、受信したことをイベントとして
受けるようにするか、スレッドがスレッドを監視するように
するしかないんでないかい?

でも、Indyなら、そういう事象に対応した何かがありそうだけど。
542見習プログラマ:04/01/06 00:38
delphi6 personal使ってます。マウスのホイールがOS(Windows)上では動くのに、delphiのexeでは動きません。
なぜでしょう??教えてください。
>>533
止まるのか?
function(day: string):boolean;
begin
Result := True;
try
日付に変換
except
Result := False;
end;
end;
こんな関数つくっておけば?
>>542
おかしいな。俺はホイールを指で前後に回すと動くけどな。
545538:04/01/06 01:31
>>539
あああ、わかりました。
これよんで>>537の意味もわかりました。

行、桁という概念じゃなくて、先頭から何バイト目って考え方だったんですね。

ちなみに
>>359さんの
>start := length(RichEdit1.Lines.Text) - length(temp);
だと、改行コード分ずれるので
start := length(RichEdit1.Lines.Text) - length(temp)-2;
にしました。

ありがとうございます。
Delphi製P2Pソフトキタ━━━━(゚∀゚)━━━━ッ!!
Share (仮称) Part 2
http://tmp2.2ch.net/test/read.cgi/download/1073307436/
Delphiの変数宣言時の初期設定はグローバルスコープ
だけが可能なんでしたよね?プロパティの初期値設定は
publishedスコープで宣言したproperty行の末行に
default {値}
でしたっけ?
違います。
>>547
コンストラクタで初期化する、が正解。
>>549
ありがとう
じゃ、propertyでのdefaultは、プロパティインスペクタに表示される
値が決まるだけ?
結局、すべての初期値はCreateで設定しなければならないのね・・
>>550
ヘルプ読め。
552デフォルトの名無しさん:04/01/06 13:26
コンポーネントなどのオブジェクトは、デザイン時に初期値をセットできる。
質問させてください

現在、TWAIN機器から画面にビデオ映像を取り込んでいます。
ここでBMPが取得できるので、これを組み合わせてAVIファイルを
作成したいと思っています。さらにWaveファイルも追加(後付け)
しようと検討中です。

いろんなサイトを見ているのですが望むようなDel7で使用できる
コンポや、テクニックを解説しているサイト等がなく苦労しています。
どなたかソースを公開されているサイトや、解説されているサイトを
ご存じでしたら教えていただけないでしょうか。

日本サイトで検索に引っかかるコンポは残念ながらDel7では利用
できませんでした。よろしくお願いします。
>>553
うんこ
555デフォルトの名無しさん:04/01/06 17:48
以下のようなコードで悩んでいます。
TStringListを返す関数で
Freeはどのように行えばよいでしょうか。

MyList := TStringList.Create;
try
//
finally
MyList.Free;
end;
Result := MyList;←問題ないでしょうか?
試してないので実際にやってみて↓

Result := MyList;をfinallyの前に書いて、受け取る側で別の
StringListを作成してAssignする。
または、
Result := TStringList.Create;
Result.Add('');

のようにしていく。
557358:04/01/06 18:05
自己フォロー

>>>359さんの
>>start := length(RichEdit1.Lines.Text) - length(temp);
>だと、改行コード分ずれるので
>start := length(RichEdit1.Lines.Text) - length(temp)-2;
>にしました。

このやり方で組んだら、色をつける位置がちょっちゅうずれる現象が。
いろいろ右往左往しながら書き換えて実験してみたら、
実はワードラップを有り無しで挙動が変わるのがわかりました。
マンドクサ
>>556
ありがとう。2つ目の方法でやります
入力していて太字になるのと、そうでない違いを教えてください・・・
560デフォルトの名無しさん:04/01/06 20:01
エディタオプションで 色を設定している違いじゃないのか?
予約語かどうかなんじゃない?
562デフォルトの名無しさん:04/01/06 23:50
プロセスを起動したいんだけど、WindowsのAPIを使うしか無いのでしょうか。
Delphiが用意した起動用の何かって存在しないのでしょうか。
⊂,,,,,,,,,つ,,゚Д゚ミつ たぶんナイです。

WinExec/ShellExecute/CreateProcess
どれか使ってください。
564562 Delphidびy2日目:04/01/06 23:59
ども
「dびy2日目」って何?
566デフォルトの名無しさん:04/01/07 13:15
デビュー2日目だろ
567デフォルトの名無しさん:04/01/07 17:08
オブジェクトを開放するコードでHPや本で@のようなコードをよく見かけます。ネストが深くなるので私は今までAのようなコードを書いていたのですが、Aの方法はよくないのでしょうか?それともどちらでもよいのでしょうか。
@var
 SL1, SL2: TStringList;
begin
 SL1 := TStringList.Create;
 try
  SL2 := TStringList.Create;
  try

  finally
   FreeAndNil(SL2);
  end;
 finally
  FreeAndNil(SL1);
 end;
end;
Avar
 SL1, SL2: TStringList;
begin
 SL1 := TStringList.Create;
 SL2 := TStringList.Create;
 try

 finally
  FreeAndNil(SL1);
  FreeAndNil(SL2);
 end;
end;
>>567
例外処理の理念からすればAより@の方がよいが、その差は TStringList.Create; が失敗したとき
の動作だけとなる。よく見ると TStringList.Create; が失敗したときのことを@は考えていないわけで、
それを考えると@も不完全。

けど、TStringList のコードを見ればわかるけど、これが失敗するときはメモリがほとんどない状態なので
どうしようもない。そこまでクリティカルなコードを書かなければいけないことはほとんどないので
私はAを使う。

もちろん、どんなクラスにも当てはまるわけではなく、例外が起きやすいかどうか。起きた場合に対策が取れるか
どうかなど、そのクラスにあわせた例外処理コードを書くべき。

そのクラスの素性がわからない場合には、@の外側にもうひとつ try をつけるか、
SL1 の帰り値のチェックコードを入れるかな?
569デフォルトの名無しさん:04/01/07 18:07
Delphi7でテキスト処理で困っています。
Postgresにunicodeでデータを格納しています。
ODBC-BDE経由で接続しています。DelphiやSQLエクスプローラーで読み出すと
化けてしまうのですが、どのように対処すればいいのでしょうか。

WideStringでとりだして変換とかやってみたのですがうまくいきません。
他の人が作ったソースを引き継いでやっているのですが、
過去に作成されたバイナリ(D6で作成)ではちゃんと取得できているので、
ソース上で変換をかける必要は無いのかなと思ってます。
LANGDRIVERの設定一発でいけたりするのでしょうか。
またはD6でコンパイルすれば大丈夫だったりするのでしょうか
>>569
どう化けるのかがわからないとなんともいえないね。

>またはD6でコンパイルすれば大丈夫だったりするのでしょうか
環境があるのなら、まずは Try!
571569:04/01/07 18:25
「あいうえお」だと「=?=?=?=?=?」です。「メvとかの文字と「?」が
交互にでる感じですね。D6は手元に無いのですが、業務でやっているので
必要なら買おうかと。

ちなみにDBがUNICODEでもSQLエクスプローラーで文字化けせずに表示
できるものなのでしょうか?それができれば出来そうな気が・・

572デフォルトの名無しさん:04/01/07 18:38
>>568

へーTStringList.Create; が失敗するときってあるのね。
じゃ、それを考慮したプログラムを作成しないとダメってわけだ。

ま、それが失敗するようじゃ、終了させたほうがよさそうだけどな。
573569:04/01/07 19:20
すいませんインストールするODBCドライバを別のにしたら解決しました。
ありがとうございました
>>572
一応超初心者向けスレッドだからいちゃもんは控えめにね。

(2G - 4) くらいメモリ確保してから、コンストラクタ呼べば、たいていの言語システムは
メモリ確保に失敗するんではないかな?

だから
>それが失敗するようじゃ、終了させたほうがよさそうだけどな。
ってことなので、それを考慮するくらいならほかの事を考えようよ。ってことで
Aでいいんじゃないの。っていっているのだよ。

この判断は TStringList.Create が、まず滅多に例外を起こさないことを前提にした議論なので
それを無視しないでくれ。
>>568
どちらが正しいか悩んでいたので、
教えていただきありがとうございました。
576572:04/01/07 20:01
私は、TStringList.Create が例外を起こすということを知らなかったので、
そういうことがあるのだと 初めて知ったのだ。

だから、そういう危険性があるならば、それを回避する処理も当然必要だと
いうだけの話だ。

その例外が発生する頻度は、知らない。
だから、その頻度に関する議論を 私はしていない。
というか、頻度に関することは どこに書かれてあるのか知らない。
574で 見て そうなのかと思っただけだ。

もちろん、
>TStringList.Create が、まず滅多に例外を起こさないことを前提
これが 一般常識ならば、私は その常識を知らない初心者というだけのことだが。

577572:04/01/07 20:02
追記

ちなみに うちのマシンでは、メモリが無い状態は、頻繁に起きる。
⊂,,,,,,,,,つ,,゚Д゚ミつ ネストが深くなるので。
           という理由ならば
カキカエロ
@var
 SL1, SL2: TStringList;
begin
 SL1 := TStringList.Create; try
 SL2 := TStringList.Create; try

 finally FreeAndNil(SL2); end;
 finally FreeAndNil(SL1); end;
end;

>577
もしソースを読める(理解できる)のであれば、TStringList.Create がどの程度複雑なことをして
どの程度メモリ等リソースを消費するのか考えて見ましょう。

2G byte のファイルを LoadFile すればまず確実にメモリ不足になりますよね?
そのことと、TStringList.Create が(メモリ不足で)例外を起こすことは分けて考えないと。

「私のマシンはよくメモリがない状態になる」と「TStringList.Create がメモリ不足で例外を起こす」は
同値ではありませんから。

一応、すべての関数/手続き/API は、失敗することがある。と心がけましょう。
次に、失敗/例外が起きたときに、どのくらい致命的なのか。どう対応することが可能なのか。を
考えて見ましょう。

超絶技巧な技を駆使して例外を補足するより、エラーダイアログを出してアプリケーションを終了したほうが
よい場合「も」あります。その判断は例外処理コードにはできません。
>578
それは本末転倒。頓智問答じゃないんだからぁ
⊂,,,,,,,,,つ,,゚Д゚ミつ
頓知問答や本末転倒とは思わないが?

柔軟に考えれば、Aでもそれほど問題がないわけで
俺からみれば、頓知問答は....

ま。いいか。
ネストがいやだから、インデントを削除しました。
ってのは技としてあるからね。
だから否定はしないけど、567 さんがほしがっている回答ではないとおもう。

ま。いいか。
583デフォルトの名無しさん:04/01/07 22:01
テキストファイルの末尾に追加でデータを書き込みたいのですが、C言語のアペンドモードみたいなものはないでしょうか。
普通にWriterで書くと、元々ファイルにあったデータが消える新規書き込みになってしまいます。
>>583
軽くヘルプを読む。
585583:04/01/07 22:03
スレ間違えました。すいません。
>>583
assignfile / append
ストリームなら
.seek で末尾に移動してから。
587デフォルトの名無しさん:04/01/07 22:30
例外関係でふと思ったのですが

hoge := THoge.Create;
try

except
hoge.free;
raise;
end;
hoge.free;


raise使うときのメモリ開放って
これでいいんですが。
>>587
finally使うことをお勧め。
589587:04/01/07 22:34
いいんですが。

じゃなくて

いいんですか?

です。
げげ、
今までTry〜Finallyの間でCreateしてた・・・・
そうか、複数Createするとき、最初にCreateしたのが逝くと、
もう一つはインスタンス作ってないから、そこでまた
エラーになるわけか・・・・
>>588
finallyだと
raiseするタイミングがわからないのです。
>>591
その場合は例外をキャッチすればいいのでは?
>>591
hoge := Thoge.create;
try
 try
 except
  raise;
 end;
finally
 hoge.free;
end;
>>593
ちょっとfinallyについて勘違いしたみたいです。
もっかいhelp読み直して見ます。
595デフォルトの名無しさん:04/01/07 22:47
ゲームのメインループを作る場合、どんなものが一般的なんでしょうか?

・Application.OnIdle + timeGettime + sleepなんかで、一定間隔でイベントが起きるように仕組む
・mmsystemを使って高精度なタイマを作る

くらいしか思いつかないのですが・・・。
DelphiXのTDXTimerなんか素敵だと思ったんですが、今や過去の品ですし。
TTimer使え。
ただしイベントの発生間隔の精度が悪いこと、処理落ちしたときに描画を端折ることを考慮しとけ。
>>595
ms単位で時間が取れる関数+ビジーループというのをどこかで見滝がした。
>>595
TThreadで、ぐるぐるループさせて、
イベント渡してあげればいいんじゃね?
なんのゲームかワカンネけど
>>596
あほか、mmtimerが出てる時点でTTimerなんぞお話にならんって事だ。
>>599
アホはお前。
mmtimerで高精度な間隔を要求する時点で間違ってるだろ。
>>600
高精度と高分解能の区別も付かんのか?
Windowsなゲームにハードリアルタイムなんぞ期待するバカがどこの世界に(略
602595:04/01/07 23:01
ありがとうございます。
ひとまず、秒間30回くらいで確実にイベントが起こせれば良いのですが、
TTimerを試すとXP系でも破綻してしまい・・・。(平気で33msが50〜100msくらいに)

"時間測ってsleepしながらのonIdleイベント"とmmtimerが頭の中で戦ってます。
できれば簡単に書きたいので前者かなとも思うのですが、どのくらいの精度が
出せるのかわからなくて、、、う〜ん。
>>595
OnIdleではダメ。まずはスレッドの使い方を覚えれ。
それとタイムスケジューリングはとりあえずGetTickCountを使って見るべし。

begin
 while True do begin
  Application.ProcessMessages;
  Sleep(1);
  if 間隔チェック then
  begin
   UpdateData;
   UpdateView; // 描画処理
  end;
 end;
end;
>>604
sleepの分解能も精度もかなりいい加減なわけだが。
>>605
間隔チェックのところでQueryPerformanceCounter使ってチェックする。
1ループの時間を計ってたとえば30msだったら次は33+3ms後に更新するように調整する。
mmtimer使おうがスレッド使おうが厳密な一定間隔で回すなんて無理。
>>606
昔DOSで似たようなことやったけどCPUがキャッシングしてくれたりして結構愉快になりました。
608595:04/01/07 23:29
色々ありがとうございます(ノД`)
精度の高い間隔チェックの方法と、スレッドあたりを勉強してみます。

メインスレッド:描画準備&待機
サブスレッド:時間計測 で、一定間隔でメインに向けて「描け」メッセージを発射するって感じでしょうか。
>>608
激しく描画が間に合わない予感。
610595:04/01/07 23:34
あぁっそうか、全然ダメですね.... (´・ω・`
ゲームって 入力->計算->レンダリング->フレームバッファ表示
の順に処理して行くんだからその一部を非同期にするメリットはないと思うけど。
これ以上は、どんな描画をするとか、準備にどんぐらい
時間がかかるか、どんな動きをするかとかまでわからんと
答えようがないのではないかと。
>>611
描画ってのは得てして時間がかかるものです。
614595:04/01/08 00:02
そうですね。スキルアップのために2Dのシューティングでも作ってみるか的な
考えなので、漠然としすぎてたかもしれないです。
絵の用意と描画はbmpからQuadrupreDでも使って楽にできますから、
> 1. 一定間隔でイベント発生
> 2. その間隔と入力内容をもとに座標計算
> 3. その結果を使って絵を構成して描画
でしょうから・・・問題は「一定間隔を発生する方法」と「描画がもたついて遅れたときの処理」でしょうか。
もうちょっと苦悩してみます(でもこれが案外楽しいw)。
>>614
一定間隔なのは描画と各種判定だけでよい。
そのほかの計算は待ちを入れずどんどんバッファリングしていけばよいのではないか。
>>614
ゲーム開発者じゃないので、間違ってたらごめん。

その例「だけ」でいくと、
描画のところは時間と完全同期じゃなくていいんじゃないの?

1 メインスレッドのループでは入力判定だけ行う
2 別スレッド、またはメインスレッド内で動くべき座標を計算
3 描画オブジェクトは、まったくの別スレで描画を続ける。

つまり描画は描画だけをTThreadがずっとしてて、どこに動く、
どんな描画をするという値を描画スレッドにプロパティとして
渡してあげればいいような気がする。このオブジェクトは、
ある一定期間(Wait)ごとにプロパティの値に従って描画をし
続けると。

必ず、このポイントに動かしたいというような時は、やはり
描画スレッドに何かしらのフラグと移動する座標を渡して
やって、移動しおえてフラグが消えるまで座標計算スレッド
は描画スレッドに値を渡さないとか。






617595:04/01/08 01:28
ありがとうございます、描画と計算は分離しちゃっても良さそうですね・・・。
逆に、計算は一定間隔でしてデータを次々詰めていき、描く時間はわからないから
描画はベストエフォート(Max30FPS)で頑張るっていうのもアリかも。

精進します(`・ω・´)
>>617
その両方があっていいかと。

1)入力結果により、すぐに反映させるとき
→あたり判定により爆発とか
いままでのバッファをクリアして、ただちに目的とする動作をする

2)最後まで描画させたいとき
→特定地点まで必ず動かせたいとか
計算結果をバッファにため込んでいく

ただ、その描画する部分の属性をどれだけ作るかでデータの
受け渡し方法や計算する間隔もかわってきそう。
例えば動作に関して言えば、速度は初期速度や加速度、動きに
関しては最終目標到達座標と、そこにたどり着くまでの動き方
(放物線、直線、サイン波)等。

m秒間隔で計算して厳密に動かすというより到達点と動き方等を
描画するスレッドに渡して、あとは勝手に動いてくれってほうが、
計算する側もメインループも負担が軽いでそ。

どんな動きをさせたいかわからんけど、ある一定までジグヅク、
そこから逃げるように去っていくとか、厳密に計算でやるより、
バッファ1 ここ(ある一定地点)までこう(ジグザグ)動いて
バッファ2 ここ(ある一定地点)から逃げるよう(自機のいる座標
と反対方向に)に去っていく
という動作のできる描画スレッドを作ると計算も少なくて楽かも。
var
 SL1, SL2: TStringList;
begin
 SL1 := nil;
 SL2 := nil;
 try
  SL1 := TStringList.Create;
  SL2 := TStringList.Create;
 finally
  FreeAndNil(SL1);
  FreeAndNil(SL2);
 end;
end;

こんなんはだめですか
620デフォルトの名無しさん:04/01/08 09:04
おいおい、初心者同士ケンカすんなよなー。

お互い、わからないことばかりなんだから、知らないことがあって 当たりまえ!
621デフォルトの名無しさん:04/01/08 09:09
わざわざ使う関数すべてのソースを確認しているやつなんていないと思う。
だから、TStringList.Createが どういうソースなのか見てるやつなんて
ほとんどいないと思われ。
>>621
全部は確認しなくていいんだよ。
確認していない/できない場合は安全なほうに倒す。この場合は例外処理をちゃんとする。
確認できた場合/自分で作ったので振る舞いが予測できる場合は、省略できるかどうかの
見極めができるということ。実際に省略するかどうかは全体を見て判断するべきこと。
Data1: Pointer; Data2: Pointer; UseData: Pointer;
というようにポインタを設定していて、
if Data1 > Data2 then
 UseData := Data1
else
 UseData := Data2;
という処理を行いたい場合、どのように比較すればいいか
わかりません(上の例ではエラーがでます)。
比較の方法を教えて頂けないですか?
>>623
ポインタを比較したいのか、ポインタが差すデータを比較したいのか、北を非核したいのか?
>>623
Delphi ではポインタに対して適用できる演算(子)にはかなり制限があります。

C/C++ では、ポインタ = メモリの値ですが、Pascal では「何かを示すインデックス」でしかありません。
そのインデックスに「順序」があるとは限らない。というスタンスをとります。
だから、基本的に = と <> の二つの演算子しか使えません。ほとんどの場合、それで間に合います。
626続き:04/01/08 11:55
ポインタ型の実際の値は、Delphi では C/C++ と同様メモリのアドレスなので、

>if Cardinal(Data1) > Cardinal(Data2) then

と記すことでポインタ間の大小比較を行うことが出来ます。

>>619
ところでこれって(今まで出た例も)FreeAndNilである必要はあるのだろうか。
SL1.Free;でも十分な気がする。このあとにまだSL1やらを使う処理があるなら別だけど。
.Free で必要十分。
けど AndNil のコストはたかがしれているから、作法として使うことには問題ないでしょう。

629デフォルトの名無しさん:04/01/08 12:40
コストって 何?
cost.
631デフォルトの名無しさん:04/01/08 12:58
cost

━━ n. 値段, 原価; 費用; 犠牲, 損害; 【法】(pl.) 訴訟費用.

> AndNil のコストはたかがしれているから
このコストは 何だろうか?
Free に対して FreeAndNil の AndNil する部分の、
メモリ消費量、処理時間などの「コスト」。
質問です
リアルタイムにライン入力からの音にエフェクトかけるにはどうしたらいいでしょうか?
>>624-626
ありがとうございます。
ポインタが指すデータではなく、ポインタの変数に保存されている
メモリ(?)のアドレスそのものを比較したいのです。
>>626さんの方法で可能なのですね?ありがとうございます。
with文について教えてください
ML過去ログのdelphiの格言に、
「with文を使用するのは控えること」
とあるのですが、よく理由がわかりません
教えてください
with Button1 do with Button2 do
 Caption := 'xxx';

with Button2 do with Button1 do
 Caption := 'xxx';

で意味が変わってくるし、Captionの行だけ見ると何を操作しているのかわかりづらいから。
withに関連したバグがあることを理解した上で、
多重に指定しなければ普通に使っても問題ないよ。
>>636
ネストさせるとわかりにくいからなんですか
普通に使うように気をつけます
即レスありがとうございました
>withに関連したバグ
どんなバグ?バグはなかったはずだよ。

使い方を間違えると直感的にはわかりづらいコードを書いてしまう。ということだけでしょ?
>>638
withにバグがあるわけじゃなくて、withを使うことにより起こりやすいバグという意味だろ。多分。
>withに関連したバグがあることを理解した上で、
「withを使うことにより起こりやすいバグ」っていうのは単に使い方を間違えているだけだろ?
某 ML の、一部の人のミスケースを持ってきて With 文は悪と決め付けているだけ。

馬鹿が使えばどんな便利な道具もごみに化す。
使い方を間違えるなかったらバグなんて起きないな。
>>642
おまえは日本語がバグってるなw
チョソですか?
>>641
別に悪なんて言ってないが?
道具の使い方を間違えないように気をつけろといっているだけなんだが。
今日の教訓

べんりなcase文も使い方次第でゴミと化す
素晴らしいDelphiも使い方次第でゴミと化す
どんなに素晴らしいスレもカキコ次第でゴミと化す
646デフォルトの名無しさん:04/01/08 20:54
あたりまえ!
647デフォルトの名無しさん:04/01/08 21:03
withは便利だと思うがな。
でもネストさせると訳分かんなくなるから、使いすぎはよくないが。
ちょこちょこっと使う分にはいい感じ。

C#にはwithないから、不便だなと思うときもあるよ。
一部だけ取り出して全体の意をうやむやにする典型
with TStringList.Create do
try
  Text := なんかString;
  SaveToFile('セーブファイル.dat')
finally
  Free;
end;

こういう使い方が出来ると過去ログにあったが、
正直素人にはお勧めできないな。
カンタン!Delphiプログラミングという本を参考書にして今日から勉強してます。
その本のP19、ifという文の解説に

「if a=0 then a :=a+1 else a:=a-1という文はaが1であればaに1足し、
 そうでなければaから1を引くという意味」

というのがあったんですが、何がどういう理屈で『aが1であれば〜』となるのか、読んでも理解できません。
if a=0となっているのだからaが0であれば1足しそれ以外は1引くのでは無いのですか?
>>650
そうです
>>651
なるほど、ではただの誤植なんですね。
ありがとうございました。
みんな641の言う事は信じちゃだめ。
>>653
はいはい。
ライン入力の音声を2秒ほど遅らせて鳴らすにはどうしたらいいのでしょうか?
低レベルAPIがどうとか良く分からないんですよ。
2ch の書き込みと同様、ML のログも、頭から信じないようにね。
ちゃんと議論の筋道を読んで理解しましょう。
間違いの無いwithの使い方を理解してからwithを使えばいい。
つーか、文法/効用を理解して典型的な誤用(636みたいな)を知れば
こんなに便利なものは無い。と思うが。

「格言」なんてものを盲信するな。という例ですね
>>658
636の様な使い方で意図した動きにならない場合は
そのコードを書いた人に責任があるのは明確。
with の隠れた問題点はそこじゃない。

ちなみに
with Button1 do with Button2 do

with Button1, Button2 do
と出来る。

コードを書いた人に問題/責任のない、with の隠れた問題点とは?
散々外出なうんこ議論はフサスレでやったら?
659 が出て行ったらね。>> 661
>>662
解らないからってすねるなよ。
>>660
659は「責任がある」とは言っているが、
責任が無いとは言っていないよ。
はいはい。議論できないのなら出てこなくていいよ。
あなたの過去の失敗はあなたの失敗であって、必ずしも一般化できるわけではないからね。
665も解っていない予感…。
withと言えばFindComponentをwithで囲んで泣かされた俺
>>667
それはとんでもない With のバグですね。
>>655
考えてみた
1)
TMemoryStreamを二つ用意する。
マイクから入力されたWaveデータを2秒間交互に保存する。
入力開始から2秒後にTMemoryStreamを交互に再生する。

2)
TMemoryStreamを一つ用意する。
マイクから入力されたWaveデータをTMemoryStreamの一番
最後に書き足していく。2秒後にTMemoryStreamの最初から
普通に再生。

マイクから入力されるデータはWave形式だから、
WAVEFORMATEXで縦横データサイズきっちり決まってる
から、それほど難しくないよーな気がする。

漏れなら1)かなぁ。
>>669
Waveデータの構造は知らないけど、TQueueはダメなのか?
リングバッファを正しく実装できるなら2)
1)でやるなら、バッファ自体は10秒くらいとっておいて処理。当然スレッド作って作業。
>>667
それ、俺も泣いた
>>670
TOrderListの存在を知りませんですた(アセ
Add順とか、番号順に取り出してデータ吸い出せるなら、
それを使うのも面白いかも。

データビット数*周波数*チャンネル数*秒数(だっけ?)で
ループして、新たにTMemoryStream(GetMemでもいいかも)を
追加していき、Waveとして順番に再生、使用したらFreeすれば
よさげでつね。
タブシートにTMemm貼り付けると実行時エラーになるんですがなぜ?
TMemo ? タブシート?
タブシートってのは無いんだけど。

TabSet ? TabbedNoteBook? TabControl? PageControl?
>>675
素人コンポーネント使ってる奴は素人。
>>676
675 であげたのは、全部標準コンポーネントなんですが...
TMemmがなんなのか説明しない限りはどうにもならないね。
>>675
TPageControl のメンバーの事かと。
あぁなるほど。>>678

で、TPageControl にページの新規作成でシートを作り TMemo をそこに貼った分には落ちませんでした。と。
674 は TMemm なのか TMemo なのか。TMemo ならもう少し詳しい説明を。
キャプチャーを作ろうと思うのですが、VFWへのDLLを
ラップしたVFW.pasみたいなのって、Borlandからでたもの
ってないのですか?ネットで配布されているようなものには
どうもバグがあるので困ってます。
Borlandからでたものはない。

VFW はままこ扱いなんで、MS もあまり資料公開に乗り気じゃないし。
無視できない API なんだけど新設 API に誘導しなきゃいけないしね。

Delphi に収録されている各種 API の Delphi/Pascal 版の作成は Project JEDI の
人たちの物も多い

ttp://www.delphi-jedi.org/APILIBRARY:356378
の Video for Windows Interface Unit にバグがあるなら彼らにフィードバックしましょう。
>>681
お、ありがとうございます。私が持っているのより日付が新しいので、
もしやと思ったら、やっぱり直っていませんですた・・・

バグではなく、使えるはずの機能が使えないという問題です。
(これもバグといえばバグなのかもしれませんが・・)
function AVISaveVの引数「var ppavi:IAVISTREAM;」なんですが、
これは厳密には構造体へのポインタではなく、構造体を格納する
配列へのポインタなので、複数のポインタをDLLに渡せないという
問題が発生します。

これって報告すべきでしょうかね・・・
そこまでわかっているのなら報告してあげれば?
つーか、報告すべきかどうかなぜ悩むのか?
684デフォルトの名無しさん:04/01/10 16:22
"data11","data12","data13"
"data21","data22","data23"

というようなCSVデータをひとつずつ順に
取り出すには行に対してと、列に対してのTStringListを
ふたつ使っているのですが、他の方法もあったら教えてください。

SL1 := TStringList.Create;
SL2 := TStringList.Create;
SL1.LoadFromFile('Data.csv');
for i := 0 to SL1.Count - 1 do
begin
 SL2.CommaText := SL1.Strings[i];
 for k := 0 to SL2.Count - 1 do
 begin
  Writeln(SL2.Strings[k]);
 end;
end;
SL1.Free;
SL2.Free;
らくちん。
TStringList,TStrings等Delphiでは頭がTの文字から始まるのが
おおいですが「T」って何の略なんでしょ?

素朴な疑問・・・だれか教えてください( `_ゝ´)
そういったことは気にしない。というのが一番簡単 > 685

Type の略。という説が一般的。
>>687
気になりだしたら夜も眠れなくなるたちなんです(´・ω・`)

Typeですか、ありがとう
function Chinko(i:Byte): Byte;
begin
 case i of
 1:Result:= 2;
 2:Result:= 1;
 else Result:= 0;
 end;
end;
これを数式で1行に出来ませんか?
知っているがお前の識別子が気に食わない
知っているがチンコバイト。
692デフォルトの名無しさん:04/01/10 23:32
紙2001のように、他のアプリのOLEドラッグの開始・終了時にイベントを起こしたいのですが、
どうやったらいいのかさっぱりわかりません。
フックしてWM_MOUSEDOWN,WM_MOUSEMOVE,WM_MOUSEUPを監視してみましたが、
ドラッグしてるのかどうかまで解らないので、思うようにいきません。
どなたか教えてくれませんか?
693デフォルトの名無しさん:04/01/10 23:43
>>692
気のせいか、前にも見たぞソレ。
デジャブか?
たしか、「ソレの作者に聞け」で終わったハズだが。
>>682
先頭を渡すだけで逝けるだろ。こういう宣言の仕方のAPIは他にもある。
使い方を知らないお前の無知さをバグで片付けるな。

>>693
解決方法ちゃんと出たよ。
OLEドラッグのキャプチャウィンドウで判定する。
695692:04/01/11 00:51
>>693-694
すみませんでした。過去ログ調べてみます。
>>694
そのポインタを指定すると、型が正しくないといって、
Delphi様にしかられるのでつが・・方法が悪いんですかね。
正しいやり方を教えていただけまつか?

ちなみに、その型を
type
AIAVISTREAM = array[0..1] of IAVISTREAM;
として、Interfaceユニットのfunctionの型をAIAVISTREAMと
変更して、このポインタを渡してあげるとうまくできます。
>>696
694 のようなヤシを相手にしちゃだめ。
「同じポインタなんだから、キャストすればコンパイルできる」
っていってるだけ。

戯言は無視して Jedi にメールしなさい。
プラグインやdll以外でjpeg2000を
利用するいい方法はありませんか?
クグってもなかなか見つからないので。
700
701デフォルトの名無しさん:04/01/11 15:39
すいません。
Delphiの激初心者です。
Delphi7のプロフェッショナルを買いまして、ソフトのサンプルが乗っている本を見て
とりあえずこれ作ってみるかと思って作ってみたのですが
・フォームにTClientSocketを配置
ってのがあるんですが、なぜかコンポーネントがありません・・。
C++ Builderにはあるんですが・・・。
これはどういうことでしょうか?
702デフォルトの名無しさん:04/01/11 15:41
>>701
プロなら確実にある気がします。
コンセントの絵。
ClientSocketがServerSocket.Socket.Connectionsの自分の番号を
知るにはどのように書いたらよいですか?
ClientSocketのヘルプファイルがないため質問しました。返答おねがいします。
>>703
レスありがとうございます。
私もそう思いました。
C++ BuilderではInternetのコンポーネントのところにあるのですけれど、
DelphiのInternetのコンポーネントを見てみたところ、ちょうどその部分がぽっかり
抜けてしまっています。
もしかしてなくなってしまったのか?と思ってしまいました。
すべて調べ上げてみたのですけれど、どうしても見つかりません・・・(泣
誰かにもらいなさい
>>705
消極的だけどコンポーネントのインストールでVCLのソースからインストールしてしまうと言うのもありではないかと。
個人的には非同期ソケットって大嫌いなのでWininetでも使うことを大推奨することが多いですが。
>>705
私のDel7Proにもないよー 仕様かも。
TidTCPServerしか使ってないので、気づかなかった。
でも、VCLにはありそうなんで、手打ちでCreateしてみたら?
[表示][コンポーネント一覧]でもでませんか?
http://www.hatena.ne.jp/1073265272 によると、Del6 にはあったけど、Del7 は TTcpClient とかになってるらしい。
Indyを標準でCD附属させたからショボイのは削除したのでは?
Indy使っとけと言うBorlandの明かな意思表示ですよ。
>>709
ないでつね
>>711
でも、>>710のように、TTCPClientはあるのよね・・不思議
>>706-712
レスありがとうございます。
なるほど、Delphi7ではなくなっていたのですか。
全くわかりませんでした。
そんなことも調べられなかった自分が恥ずかしいです。
わざわざ調べていただいて大変なご足労をおかけいたしました。
本当にありがとうございました。
713 およびそこら辺のかたへ。> Readme をお読みなさい。
デフォルトでは,
TServerSocket と TClientSocket はコンポーネントパレットにも
インストールされません。これらのコンポーネントを使う必要があ
るときは,bin ディレクトリにある dclsockets70.bpl という名前
の設計時パッケージに入っています。
>>715
ありがとうございます。
パッケージのインストールからdclsockets70.bplを選択して実行したら
コンポーネントが使えるようになってました。
本当にどうもすみません。
DelphiでC++のinline関数みたいな事出来ますか?
Delphiのasmの勉強できるサイトご存知ないですか?
>>717
最適化の過程でやってるかも知れません。
て言うかあのキーワードって最適化の邪魔しないの?
当然邪魔をします。
しかし Delphi のコード生成ブロックが asm 節中のレジスタ使用状態を把握して
衝突しないようなコードが生成されます。
ほとんどの場合インラインアセンブラは速度の追求などのより強い最適化を行うために
使われるので、コンパイラの最適化が抑制されても問題はおきません。

asm 節以外では通常のコード生成が行われるため、副作用はあまりないでしょう。

それでも「インラインアセンブラを使う」ことは「速度が上がる」ことではありませんから
実際の生成コードを確認し、かつ速度を比較したうえで使うようにしましょう。
あ!
719 の「キーワードって最適化の邪魔しないの」を 718 の asm 文のことと誤解しました。
すみません。
>>721
説明も詳しいし、おまいいい香具師だな
ごめん
724デフォルトの名無しさん:04/01/11 23:56
oo4oを使ってoracleのテーブル定義を取得したいんです。
オラクルのヘルプ見るとVBのサンプル見たいのはのってるんだけど、
それをまねてもうまくできないです。

OraMetaDataクラスのAttributeメソッドを使うところで落ちるんですが。
EOleSysErrorってのがでて メンバが見つかりません。ってなってしまいます。





FileStreamをいじる練習をしてて、画像の集合体を作って遊んでいます。

で、SaveToStreamを繰り返すとファイルにどんどん追加されていっておぉ〜とかやってるんですが、
LoadFromStreamを使って先頭から読み出すときは、「ここまで読んだ」というのを自前で管理しないとダメなんでしょうか?
>>725
んーと、ファイルポインタとかファイルハンドルと考え方は一緒なんだけどね。
>>726
了解です。先頭から「何バイト読んだ」を考えながらもうちょっと遊んでみます。
ランダムアクセスするには、考え方変えないとダメそうですね。
>>727
Positionプロパティって無かったっけ?
それで累計バイト数とか取れそうな気が。
729725:04/01/12 01:56
そうですね、ありがとうございます。

が、Filestreamがjpeg+jpeg+jpeg...の形式だった場合、一度
TjpegImage.LoadFromStream(Filestream); をやると、positionが
ファイルの最後になっちゃうんですね。ガクッ
>>729
よくわからないが、

 OldPosition ;= FileStream.Postion;
 TjpegImage.LoadFromStream(Filestream);
 FileStream.Postion := OldPosition

でどうでしょう?
困ったね。

size1+jpeg1+size2+jpeg2+size3+jpeg3
で保存して
sizeを取り出しておけばどお?
>>731
それイイ!ね
自分で構造体作って、その内容をSize1に入れて上げる。
Size1には自分の長さとJpegの長さが入っていて、それを
読むと次のJpegの読み出し位置とSize2の頭の位置が
わかるという仕組みでいいかもね。
>>689
function Chinko(i:Byte): Byte;
begin
 Result:= IfThen(Byte(i1 - 1) < 2, 3 - i1, 0));
end;


function Chinko(i:Byte): Byte;
begin
 Result:= 4 shr ((i1 shr 3) or i1) and 3;
end;

だれか、もっとスマートな書き方よろ。
>>689
function Chinko(i: Byte): Byte;
 const Table: array[Byte] of Byte = (
  0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
 begin
Result := Table[i];
end;
>>734
1行じゃないし。
どなたかddddのVer2.12もってるひといませんか?
持ってるがお前の態度が気に入らない
もしよければどこかのホームページにあったのなら
URLおしえていただけませんか???よろしくお願いします。
737 の態度が気に入らないから..

ここの
ttp://www-fu.magma.ne.jp/~hayase/dddd/download.html
2.13 じゃだめなのかい?
あぁ、それでいいです
2.13ってDelphi6以降しか対応してないのですか?
Delphi5でインストできませんでした;
javaでいうところのHashMapとかHashTableに相当する標準クラスは
用意されてないのでしょうか?
>>742
Contnrsユニットをくまなく探すのが吉。
Ver2.12ほしいですぅ・・・
>>742
12月号のCマガ読むと多少幸せになれるかも。
>>743
サンクス
TBucketListでいいのかな。あと
javaDocだとクラスのサブクラスにどんなのがあるか
すぐわかるけど、
Delphiのヘルプについてる継承ツリーだと自分の先祖しかわからないですが、
これはポスター見ろってこと?
>>744
http://www.aqut.homeip.net/cgi-bin/cvsweb.cgi/quadrupled/

http://www.aqut.homeip.net/quadrupled/
anonymous CVSModule => quadrupled
cvsroot => :pserver:[email protected]:/home/cvsroot
Password =>
latest branch=>
note=> Only MS-Windows Japan User
>>747
なんか変なコード追加してcommitしても良いですか?
749デフォルトの名無しさん:04/01/12 23:09
Formを一番トップレベルでアクティブウィンドウとして表示したいのですが、
どのようにすればよいのでしょうか?
今まではForm2.showで大丈夫だったのですが、処理がだんだん重くなってきたら
Formが表示されるまでの間に他のWindowを表示させたら新しく表示されるFormが
裏に回ってしまってアクティブにならないので困ってます。
>>732
あほ!
sizeは4バイト固定で jpeg のサイズを入れるんだ。
構造体はいらない。
jpeg以外のデータもあるなら、RIFF形式について学べ。
http://home.ccci.org/wolbrink/tnt/delphi_unicode_controls.htm
だれかこれ使ったことある人居ますか?
なんかネーミングが危なっかしいんですけど…。
Unicode使いたいならDelphiはやめといたほうがいいよ。
煽りぬきで。
>>751
Tnt は標準ユニットです。US Newsgroup で Unicode 対応は?と聞くと、
Tnt を使え。と帰ってきます。
日本のユーザーグループしか見てないと 752 見たいなコメントしかつかないでしょう。
トリニトロトルエンなんて危なっかしい。
756デフォルトの名無しさん:04/01/13 03:20
FAQかもしれません、適切な過去ログなどありましたら教えてください。
こういうのってありでしょうか?

procedure test;
var
slTest:TStringList;
begin
slTest := TStringList.Create;

if Edit1.Text = '' then
Exit; // 途中で抜ける

   :
   :
slTest.Free;
end;

つまりCreateされたTStringListは、関数を抜けるときにFreeされるかどうかということなんですけど
このslTestは、CreateされたTStringListの実体そのものなのか、単なるポインタ(と言っていいかどうかわかりませんが)なのか?
実に幼稚な質問ですみませんがお願いします。

757751:04/01/13 03:55
>>752-755
了解しました。TNTで一発やってみます。
Create された Class は関数を抜けるときに自動的にはFreeされない
slTest はポインタでもあるし実態そのものでもある。
C 言語とは異なるものとして、そういうものと受け入れてしまうほうがよいかと。

実際には slTest はポインタとして格納されています。コンパイラが文脈に沿って
ポインタのままか、または実体を参照するのかを判断しています。
759756:04/01/13 04:41
>>758
ありがとうございます。
いままでは、必ずFreeをしていたのですが、おりこうさんだったりして?などとスケベ心がでてしまいました。
InsideDelphiを読んでも今ひとつわかりませんでした、助かりました。

すみません、もうひとつ
slTest.Add(sStr1);
slTest.Add(sStr2);
としたとき
slTest.Clear
とすると内部の値は破棄されると考えていましたが、それでよいのでしょうか?
単に内部にコピーされたsStr1,sStr2の値への参照が切れるだけでFreeされるまで存在するってことはないですよね
>>756

procedure test;
var
 slTest:TStringList;
begin
 slTest := TStringList.Create;
 try
  if Edit1.Text = '' then
   Exit; // 途中で抜ける

   :
   :
 finally
  slTest.Free;
 end;
end;

ってやるのが常套手段です。
try..と聞くとすぐ例外とセットで語られますが、finally以下は内部でBreakやExitを
呼んだときも確実に実行されます。
>>759
それはライブラリ製作者が考えることで、個々のプログラマが心配することでは無いのでは…


ってのは回答になってませんかね。
762756:04/01/13 05:09
>>760
あ、これはアリなんですか。 恥ずかしながらlabelを使ってました。
ありがとうございます。

>>761
大域でCreateしておいて、使うたびにClearしていたら、実は溜まったりしてないかなとか考えてました。
>>759
どの程度の知識があるのかわからないとコメントもしづらいね。
C++ ではない C 言語の知識はお持ちに見えるが...

Delphi において文字列型はガベージコレクタのようなものが実装されているので、
文字列を文字列型として扱っている間はメモリ管理を気にする必要はありません。

TStringList は文字列を格納できますが、Clear メソッドが呼ばれるとそれぞれの文字列への
参照を開放します。もしその文字列を誰も使っていないのならばメモリ上からも開放されます。
764756:04/01/13 05:25
>>763
ありがとうございます、理解できました。
長い間使っているのですが、実のところなにもわかっていないというのが現実です。
確かにInsedeDelphiには、Clearで参照を解放するとあったので改めて不安になりました。
ガベージコレクションがあるんですね。
ガベージコレクション「のようなもの」です。
String 型が使うメモリブロックは参照状態を管理されていますが、一般のポインタは
そのようにはなっていません。汎用ポインタを扱う TList などや、String 型をポインタに
キャストして使っている場合などは自分で管理する必要が出ます。
わからなければ使ってはいけない。という物ではないし。
もう少し、他人のコードを読むとよいかと思いますよ。
もし読めるのなら、RTL/VCL コードくらいは読みましょう。
767756:04/01/13 06:21
>>765
今その辺を調べてました。ありがとうございます。
ただwindowsの文字列リソースを使っているのか独自に管理をしているのかわかりませんが。
使い方として、自分が間違って使っていないか、いつも気になっています。

>>766
おっしゃる通りです。時間が無くてというのはいい訳ですね。がんばってみます。
>>767
ここは初心者板なので...
なぜ気になるのか。とういうこと自体を、一度気にしてみるといいかもよ
新しくフォームを作るたびに、そのアプリで使用しているフォーム
と重ならない場所に自動的に位置を変更して表示したいのですが
(違うアプリのフォームとの重なりはokです)、自分のアプリが
作成したフォームのない場所を求められる方法ってありますか?

それとも、それぞれの位置とWidthとHeightで手動で計算する
以外には方法がありませんか?
poDefault
771デフォルトの名無しさん:04/01/13 11:38
stringlistを使ってファイルから文字列を読んで、文字列処理をしているのですが、
ファイルサイズが数百キロバイトになってくると処理が数分かかり困っています。
私が、文字列を読んだり書いたりをいちいち繰り返す仕様にしているのが原因
なのですが、高速化するためにファイルをform.createのときに読み込んで文字列変数の
中に入れて処理すれば高速化できるだろう、と考えたのですが、変数の扱い方が分かりません。
同じprocedureの中だと
stringlist1:=tstringkist.create;
try
finally
stringkist1.free;
end;
でできますが、form.createで文字列変数をつくって、他のprocedureで文字列変数を
確実に解放したい場合にはどうしたらよいのでしょうか?
複数のprocedureにまたがってtry文を書こうとしたDQNなのでなにとぞ。。。
普通の初心者はグローバル変数として割り当てるってミスをするのだが...

stringlist1 をメソッド内ローカル変数からクラスのメンバーにする。という説明で
理解/解決しますか?

Form1Createの中でtstringlist.create
Form1Destroyの中でstringlist1.free
変数宣言はTForm1のprivateで
>>772
ClassのPrivateで宣言するのはもちろんだけど、この質問の場合、
destructor DestroyでStringList.Freeするという答えのほうが
近くないかな?
TFormを拡張するわけでもないのにconstructorをoverrideするのは
一般的とはいえない。OnCreate/Destroyでやるのがより一般的。
TFormを拡張してる。っていえばしてるんだが..
>>776
そう言い張りたいならかまわないけど
それならCreateとOnCreateの使い分けの指針を示してくれ。
そんなけんか腰にならんでも。
あんただって、何に対して「より一般的」なのかを提示してないんだから
お互い目くそ鼻くそだろ?
そのFormを継承する必要があればCreate/Destroy
そうでなければOnCreate/OnDestroyでいいと思うのだが、どうだろ?
超初心者向けだからあえて説明

で、まず違いは、Create はコンストラクタ本体。
OnCreate は、T(Custom)Form のメソッドのひとつ。

OnCreate でできることはコンストラクタでできるがその逆は不可能なことがある。
すべてのクラスはコンストラクタを持つが OnCreate は一部のクラスだけにしか存在しない。
OnCreate はコンストラクタが呼ばれた「後」に呼び出される。
だから厳密にはコンストラクタを拡張しているわけではない。(実際にはコンストラクタを直接拡張した場合と
ほとんど同じ動きをするように作成されている)

OnCreate はイベントとしてオブジェクトインスペクタに出てくるから GUI でイベントメソッドと関連付けることが可能。
これは歴史的な理由で機能拡張したフォームを IDE で使うのがめんどくさかったときの異物。
めんどくさいから、オブジェクトインスペクタで設定できるようになった。と考えてもよい。

TForm 以外の普通の暮らすには OnCreate はないから、普通に Create を拡張することになる。
また、そのクラスの性質として初期化が必要なデータなら、クラス作成時に初期化するほうが
コード全体の見通しもよくなる(可読性があがる。ということだ)



781デフォルトの名無しさん:04/01/13 13:11
書き込み時意外はファイルロックしないものとして
あるプロセスでファイル読みとり中に、別のプロセスにより
ファイルの内容が書き換えられた場合、
読み取り処理にどのような影響がでますでしょうか。

たとえばファイルのポインタが矢印の位置で読み取っているときに
別のプロセスに最後のBがCに書き換えられた場合、
 ↓
@AB

  ↓
@AC

出力は@ACとなるものなのでしょうか。


>>689
何でも短く書こうとせず,わかりやすさ重視で.

>>767
文字列リソースは使っていません.
なお文字列定数として文字列リソースを使いたい場合は『リソース文字列』を使います(ヘルプ参照).

「リソースハッカー」( ttp://www.users.on.net/johnson/resourcehacker/ )などで
実行ファイル中の各種リソースをのぞいてみると理解の助けになるかも知れません.
かなり遅れましたが…

>>699
どうもです。
要するにゼロから作れ、ということですね?
C++用のソースは結構見つかったので、
そっちの方を解析してみます。
>>783
C++のソースがクラスじゃなくて関数だけなら
BCCでビルドすればDelから呼べるよ。
まぁDLLにすりゃいいんだけど。
785名無しさん@Linuxザウルス:04/01/13 15:29
delphiでフォーカスがあるボタンの、ハンドルやキャプションを
読み取る方法は無いでしょうか?
>>785
ActiveControl
すいません。
ブラウザを一生懸命作っておりますが、ぜんぜんわからないので教えてください。
URLを指定してそのアドレス先のHTMLファイルを読み出すところまでできたのですが
そこからどうやってやればいいのか、全くわからずつまずいております。
どなたか教えていただけますでしょうか?
あと、そういう解説しているページもありましたら教えてください。
お願いします。
サンプルミロ
789デフォルトの名無しさん:04/01/13 21:39
Delphiの5で開発しています。
Google先生や、Delphi-MLの過去ログ等を参考にしながら、丸いウィンドウ(リージョン)を作りました。
そのフォームにはボタンやパネルなど色々乗っています。
このフォームからマウスが離れた時点でイベントをもらいたいのですが、どうにも上手くいきません。
procedureCMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
などのプロシージャを書いても、フォーム上の部品からは呼ばれるのですが、肝心のフォームから出たときには
呼ばれずに苦労しています。
Delphi-MLの過去ログを見ても意味がわからないヘタレに救いの手を・・・(´・ω・`)
>>781
わかりません。
プロセスが書いた気になってても、プロセス上のファイルバッファが書き換わってるだけとか、ドライバが書くのを待ってるとか、既に読み取りプロセスがキャッシュしているとか。
とにかくそういうのに依存するのは止めましょう。

テストした時はうまく動いても、実際に使う時に常に動くとは限りません。
791デフォルトの名無しさん:04/01/13 23:51
Win2000/XPでプロセス情報などのスナップショットを取得する方法を教えてください。
検索したらNTはダメってのしか見つかりませんでした。
>>780
関連する全イベントを捕捉する必要がある。
>>791
WinXP/2K/NT4でプロセス情報などのスナップショットを取得する方法を教えてください。
ということですか?
>>787
「何が分からない」の?それを書かないと…。
出来たことからの、「先」は何?

確か、2ちゃんねら(?)で「タブブラウザ作成法」を分かりやすく
解説したページがあったと思うけど、今はもう無いのかな?
URLは失念。

後は…蛸薬師さんの所とか。
>>791
MSDNにサンプルがあったと思うが。
>>787はブラウザを一から作りたいのでは?
797787:04/01/14 06:58
>>794-796
レスありがとうございます。
はい、ブラウザを一から作りたいと思っています。
HTMLソースを取得してからどうすればよいのか、がわからないということです。
>>797
パーサで解析して表示する。
Mozillaのソースが参考になるのかも。
TMediaPlayerで連続して途切れなくwavファイルをリピート再生したいのですがどうしたら良いのでしょうか?
Timerを使って繰り返して再生しようとしても1回1回の再生の間にどうしてもインターバルができてしまいます。
>>797
IEコンポの存在を知った上で0から作りたいのか?
いまどきそんな無駄なことをする奴は皆無とだけいっておく。
802デフォルトの名無しさん:04/01/14 12:58
>>801

ここに一人 いる以上 皆無ではない。
803デフォルトの名無しさん:04/01/14 13:56
ポインタについて教えてください。

pTMyClass = ^TMyClass;
procedure MyProcedure_1(pClass: PTMyClass);
procedure MyProcedure_2(pClass: PTMyClass);

上のような宣言をしております。
MyObjのポインタをMyProcedure_1にわたして、
さらにMyProcedure_1からMyProcedure_2にも
ポインタを渡したいのですが、以下のようだと
エラーが起きます。根本的にポインタを理解していない
かもしれませんが、間違いをご指摘お願いします。

var
 MyObj: TMyClass;
begin
 MyObj := TMyClass.Create;
 MyProcedure_1(@MyObj);
 MyObj.Free;
end;

procedure MyProcedure_1(pClass: PTMyClass);
begin
 MyProcedure_2(@pClass);
end;

procedure MyProcedure_1(pClass: PTMyClass);
begin

end;
Delのクラスインスタンスはすべて参照だよ。
だからいちいちpとか@とかなくていい。
つか入門書嫁。

var
 MyObj: TMyClass;
begin
 MyObj := TMyClass.Create;
 MyProcedure_1(MyObj);
 MyObj.Free;
end;

procedure MyProcedure_1(sender: TMyClass);
begin
 MyProcedure_2(sender);
end;

procedure MyProcedure_1(sender: TMyClass);
begin

end;

>>804
ありがとう
806 ◆y4sK/BWxfU :04/01/14 14:21
質問させてください。とあるアプリを作ってるのですが、そのアプリがアクティブではない状態でキーボード入力の判定を行いたいです。どうしたら宜しいのでしょうか。
807 ◆y4sK/BWxfU :04/01/14 14:22
すみません、なんかリターンが認識してないみたいです。
808デフォルトの名無しさん:04/01/14 15:32
ファイルが更新されたかどうかを早く確認する方法は無いでしょうか?
今まではファイルをstringlistに読み込んで長い処理をしたあとで、
元のファイルを別のstringlistに再度読み込み、Countを比較して判断していたのですが、
元のファイルが巨大になってきたら読み込みに時間がかかって困っています。

良い方法がありましたらアドバイスください。
809デフォルトの名無しさん:04/01/14 15:45
StringList1からStringList10まであるときに
StringList1[1]からStringList10[1]までをいっぺんに読みたいんだけど
for文を使って読むにはどうしたらいいの?

for i:=1 to 10 do
begin
s:=StringListi[1];
end;
とやるとエラーになってしまいます。
>>808
FileSizeぐらいじゃだめ?
一字一句間違いないか検査するなら、TFileStreamで比較しても
だめかいや?

>>809
for i := 0 to StringList.Count - 1 do
begin
 s := StringList.item[i];
end;

itemsだったかな?
>>809
まちがった・・
StringList[i].items[1];
スマツ
>>809
そりゃコンパイルエラーになる罠。
なんでエラーメッセージを書かないのか不思議だ。
813809:04/01/14 17:11
>811
そんなstringlistはない、と弾かれてしまいます。
>>813
ごめんごめん
procedure TForm1.Button2Click(Sender: TObject);
var
StringList: array[0..10] of TStringList;
i: Integer;
s: String;
begin
for i := 0 to 10 do
begin
StringList[i] := TStringList.Create();
end;
for i := 0 to 10 do
begin
StringList[i].Add('test');
end;
for i := 0 to 10 do
begin
s := StringList[i].Strings[0];
end;
end;
これでどうだ。
>>814が正解っぽいこと書いてる(1つ多いけど)からそれ以外で。

>>813
本当にそういうメッセージが出たのか?
>未定義の識別子 : 'StringList'
でなくて
>未定義の識別子 : 'StringListi'
ではないのか?
この違いはお前に教えないといけないことは大きく変わってくる。
前者なら単純に「配列を使え」だが、後者なら「識別子は足し算してもダメ」
というもっと基礎的なことを説明しないといけない。
メッセージは正確に書け。
>>808
ハッシュで比較する
MD5なら20MBpsくらいでできるし、過去スレにもあるし、サンプル蔵にもある
MD5はbitレベルの違いでは同じハッシュ文字列が生成されるとか聞いたことあるんで
更に精度を求めるならSHA1とかでいいかと
タイムスタンプかShellChangeNotifierで十分だろ
>>816
両方読み込むのが前提なら、MD5よりそのまま比較した方が
圧倒的に軽いわけで。
819797:04/01/14 18:42
すいません。
はやり自分がバカでした。
一から作ろうとするなんて・・。
IEコンポの使い方を勉強しようと思います。
すいませんでした
だからサンプルミロ
エクセルの表のような、タテ、ヨコのデータをメモリ上に
持ちたい場合の、便利な関数ってありますか?

やっぱり素直に2次元配列が便利ですか?
それとも、TGridあたりを利用したりもするのですか?
TObjectListx2のラッパー
A Boneの書き込みダイアログみたいに、フォームがDeactiveになったらClientHeightを0に
するところまではできるんだが、メインフォームをアクティブにしたときタイトルバーが後ろに
隠れてしまう。SetForegroundWindowしてもだめ。どうしたらいいのかな?
>元のファイルを別のstringlistに再度読み込み、Countを比較して判断していたのですが、
>元のファイルが巨大になってきたら読み込みに時間がかかって困っています。
元のファイルは"比較するためだけ"で読み込まれてるのだと判断したのだが
両方読み込むのが前提なのか……?
まぁstringlistで扱っていることを考えると大したサイズではなさそうだしな
どこかでこれに関するコードを見かけた気がしたんで探してみたが残念

日本語苦手
参考のために教えてください。

例えば、Classや構造体には、わかりやすいように
Tが先頭につきますよね。ClassのPrivate変数には、
fをつけてる人も多いと思います。

他に、例えばString、Integer、ポインタ、配列、オブジェクト
(Form、ComboBox等)、グローバルの場合、publicの場合・・・
これぐらいしか思いつかないけど・・・・、の場合、変数を
修飾する文字を書いたりしてますか?

もし書いている人がいたら、具体的にどのようにして区別を
しているのか参考までにお教えいただけないでしょうか。
826813:04/01/14 20:10
>>814
駄目です。未定義の識別子stringlistとなります。

たしか、例えばLabel1からLabel10まで内容を
for i:=1 to 10 do
begin
Label[i].caption:=Capdata[i];
end
とかで、forみたいな方法を使って簡単に書く方法があったと思ったのですが、
どうすれば良いのでしょうか?
827818:04/01/14 20:16
>>824
>>808が両方読み込んでいるようだから>>816のMD5による比較の話が
出てきたはずなのだが、だったら直接比較した方が早いというのが俺の主旨。

読み込む必要がなく、ファイルサイズはタイムスタンプでチェックしたいだけ
なら当然>>810>>817で十分というのは理解してる。
>>826
「駄目です」って>>814はコンパイルしてもエラーが出ない。だから
お前が間違ってるわけだ。

たぶんFindComponentのことだと思うが、Labelの場合は使える。
しかし、お前のやりたいStringListの場合は使えない。
829813:04/01/14 20:51
>>828
stringとstringsを間違っていました。きちんと動作できました。
失礼しました。

>>814さんもありがとうございました。
>>808
悪意を持って更新検知プログラムを騙そうとされることが無いなら、MD5よりもCRCの方が
圧倒的に早いぞ。
ファイルサイズ、更新時刻、CRCチェックで十分ではないかな?
>>825
特に書いてません。DelphiVCLソースを見ても特に決まりはありません。

↓これは昔からの慣習です。
--------
例えば、Classや構造体には、わかりやすいように
Tが先頭につきますよね。ClassのPrivate変数には、
fをつけてる人も多いと思います。
--------
>>825
Delphiにはそのような蛸な習慣はありません。
>>825
Delphi自体が相当に型チェックにうるさい言語なのであんまりあんまり気にしない。
ポインタにはPを付ける慣習もあるが、別に強制じゃないし。
834デフォルトの名無しさん:04/01/14 22:12
808です。皆さんたくさんのレスありがとう。残業で遅れました。

今はファイルが更新されていないかどうかが分からないのでそれだけのために
再度ファイルを読み込んでいます。
元々のファイルが更新された場合、ファイルサイズが増える方向にしか変わらないので
ファイルサイズあるいはタイムスタンプをチェックするだけで十分です。

ファイルサイズあるいはタイムスタンプをチェックするにはどうしたら良いのでしょうか?

>>834
FileAge
つーかヘルプ嫁
すいません、質問させてください。
初心者どころか入門者レベルの質問なのですが、
ボタンをクリックしたら別ウィンドウを開かせたいのです。
マニュアルを調べてみたのですけれど何がなんやらわからなくて困っています。
どなたかご教授お願いします。
Form2.Show/ShowModal
839デフォルトの名無しさん:04/01/14 22:58
>>837
procedure TForm1.Button1Click(Sender: TObject);
begin
 Form2.Show;
end;
>>838-839
ありがとうございます。
できました。
Form2は「新規作成」から追加したのですが、それでOKでしょうか?
このような質問に答えていただき、まことにありがとうございます。
begin
1〜;
2〜;

3〜;
4〜;
end;

2文と3文の間(※)に数秒間のインターバルを空けたいのですがどうすれば実装できますか?
sleep()を使うとアプリが数秒間固まるだけで望んだ動作を行いませんでした。

あと3文の実行を、別の場所で変動している数が特定の値になるまで待つ、
というコーディングの仕方を教えてください。お願いします。
while expr do
begin
 Application.ProcessMessages;
 Sleep(1);
end;
843840:04/01/15 00:10
すいません。
先ほどForm2の開き方を教えていただいたた者です。
なぜか保存して、また開いてコンパイルしてForm2を呼び出してみると
エラーが出てしまいます。コンパイルしたのにEXEファイルも作られないのです。
お分かりになる方、お願いします。
「ユニットを使う」ってのは、テンプレに書いといた方がいいかもな。
あと、「エラーが出る」って時は「どんなエラーか」ってのを書くと。
845840:04/01/15 00:33
>>844
ありがとうございます。
エラーは
プロジェクトProject.exeがEAccess Violation クラスの例外を生成しました。
'モジュール 'Project.exe'のアドレス00459A66でアドレス000002F4に対する書き込み違反が起きました'

というエラーです。
私にはさっぱり・・・。
助けてください。お願いします。
>>845
ちょっと落ち着いて。
参照してないフォームにアクセスしようとしたんじゃない?
でも、新規作成で作ったフォームで、一度は開くことができて、
んで保存して、再び開いてみるとエラーってのは、普通だと
想像できないよね・・・

その間に何かいじったりしてないかなぁ。
「出来ました」とは書いてるけど、「フォーム2を開くことが出来ました」とは
書いてないような…。
>>845
Form2が自動作成の対象になってないとそういうエラーがでるよ。
プロジェクト−オプションで自動作成の対象にするか
もしくは、開く前に
Form2:=TForm2.Create(Self);
とやって、用が済んだら
Form2.Release;
とやるのが普通かな。
850841:04/01/15 01:31
>>842
できました。ありがとうございました。
851デフォルトの名無しさん:04/01/15 07:00
すみません質問させてください delphi7
tMemoコントロールのGetTextBufについて質問させてください

var P:pAnsiChar;
begin
 GetMem(P,M_ITEM_01.Gettextlen+2);//2を足してるのは保険
 M_ITEM_01.GetTextBuf(P,M_ITEM_01.Gettextlen);
 M_ITEM_03.SetTextBuf(P);

 //Pの内容に加工してファイルに出力するルーチン
 FreeMem();
end;

memoの内容に改行がはいると
Gettextlenの値がメモに書き込まれている実際のバイト数より少なく、試しに
M_ITEM_03.SetTextBuf(P);により別のメモに書き出して実験sたところ
データの尻が切れます。
Gettextlenは当てにならないのでしょうか?

ヘルプにはTEXTプロパティを使えと書いてあるのですが
TEXTプロパティはtCaption型なのでメモリの上にまとめて展開いにくいと
思うのですがどうなのでしょうか?

それとも私がポカしているのでしょうか?
>memoの内容に改行がはいると
>Gettextlenの値がメモに書き込まれている実際のバイト数より少なく、
再現しないので、そのテキストを例示してくれ。

>TEXTプロパティはtCaption型なのでメモリの上にまとめて展開いにくいと
>思うのですがどうなのでしょうか?
試した上で言ってるのか?
853デフォルトの名無しさん:04/01/15 09:00
>>808

>今まではファイルをstringlistに読み込んで長い処理をしたあとで、

長い処理ってなんだ?
読み込むだけならば
StringList1:=TStringList.Create;
StringList1.LoadFromFile('FileName');

とすれば 読めるだろ。
あと if文で StringList1<>StringList2 とかチェックしてやればいいんでは
ないのか?

>あと if文で StringList1<>StringList2 とかチェックしてやればいいんでは
ぉ〜ぃ
>>854
釣りかネタでそw
856デフォルトの名無しさん:04/01/15 14:37
>>852
レス有難うございます。問題のテキスト列ですが
改行が4つ以上含まれると再現します。

>>TEXTプロパティはtCaption型なのでメモリの上にまとめて展開いにくいと
>>思うのですがどうなのでしょうか?
>試した上で言ってるのか?

これは試し方が不足していました。

自己レスっぽいですが、GetTextufは諦めて別の方法でやります
検証ありがとうございました
>>856
諦めるならいいけど、再現しないのが気になる。

問いたい
問い詰め
たい
小1時間
問い詰め
たい

これでGetTextLenは52になる。D7Pro+W2k。
>>857
漏れは何を問いつめたいのか気になる

何を問いつめたいか、問いつめたい 小一時間問いつめたい
859845:04/01/15 17:17
>>846-849
ありがとうございます。
Form2はきちんと自動作成になっていました。
でも、さっき帰ってきてもう一度試すと次はちゃんと開くことができました。
エラーもでません。
昨日のエラーはいったいなんだったのでしょうか?
Windowsがおかしかったのでしょうか?
・・・不思議です。
860デフォルトの名無しさん:04/01/15 18:44
>>857
こちらでも(小一時間)実験しました
(小一時間)テキストは末尾の改行を含むと52ですね。ウーム...
もしよろしければ、半角と全角を混ぜてみて検証してください

>>851
XPスタイル適応してませんか?
862デフォルトの名無しさん:04/01/15 19:28
>>857,858

おまえら、つめたいやっちゃなぁ〜
863 :04/01/15 20:42
メニューにDelphiのIDEみたいに「開き直す」を付けたいんですが
簡単にできるコンポーネントか仕組みありますか?
自分で管理して動的にメニューアイテム生成(または書き換え)して付け足さないといけないですか?
864デフォルトの名無しさん:04/01/15 22:18
2chブラウザにあるタイトル/レス/取得時間/板の部分ってどのコントロール使ってるでしょうか?
>>864
何というブラウザか教えてくれないと…。
OpenJaneの場合ならListView。
866デフォルトの名無しさん:04/01/15 23:27
「ありますか?」→「ある」/「無い」
「出来ますか?」→「出来ない」/「出来る」

好きなの選べ。
867デフォルトの名無しさん:04/01/15 23:55
Delphiのポインタ操作について教えてください。
Pointer型のPbufferから10バイト目の値を取得するにはどう書けばいいんでしょうか?

CのようにPbuffer+10とやるとエラーになってしまって困ってます…
Pointer(PAnsiChar(Pbuffer)+10)
とか・・・
>>869
Delの場合、Pointer型に対する加減算は出来ない上逆参照も出来ない仕様になっている。

やるとしたら別の型付きポインタにキャストするしかない。PCharならばCライクな加減算が出来る。
それ以外のポインタ型の場合はInc/Decしか使えない。
逆参照はできるよ。
871867:04/01/16 00:35
うまくいきました。thx!!
できません。
できるよ。
できます。実例をどうぞ。

var
 p: Pointer;

begin
 GetMem(p,10);
 with TFileStream.Create('hoge.bin',fmCreate) do try
  WriteBuffer(p^,10);
 finally
  Free;
 end;
 FreeMem(p,10);
end;
動きません。
動くよ。
どっちよ。
やってみろ。
879デフォルトの名無しさん:04/01/16 09:16
ひとつ伺いたいことがあって筆をとらせていただきます。
Delphi6のパーソナルを使っているのですが、
TStringListを使ってテキストファイルを読み込むことはできたのですが、
テキストを書き込むことはどうやってやるのでしょうか。

Textname := 'sample';
Alltext[0] := 'この文章は';
Alltext[1] := 'サンプルに';
Alltext[2] :' =なってます';

のように格納されていて、
Textnameである、sampleに拡張子をつけてsample.txtに
Alltext[0]から[2]を1行ごとに書き込もうと思ってるのです。
StringList := TStringList.Create();
for i := 0 to High(AllTest) do
begin
StringList.Add(AllTest[i]);
end;
StringList.SaveToFile(TextName + '.txt');
StringList.Free;

補正してくんろ。
StringList.SaveToFile();ってのがあったのですね。
さっそくやってみましたらできました。
ありがとうございます。
ふつー、LoadがあったらSaveもあるんじゃないかとヘルプを探すものだが。
Load という言葉の意味が解らないのかも知れぬ。
>>883
第13章まであるしね
885超初心者:04/01/16 12:59
超初心者向けなんだからお手柔らかに願いしますよm(__)m
ここは初心者上がりが超初心者を馬鹿にしたり見下しながら教えてやると言う暗黙の趣向
TStringList/TStringsは最頻出クラスだから
一度全メソッド・プロパティ斜め読みして
どんな機能があるか位は覚えておいたほうがいいよ。
機能を全部使ってみるサンプル書ければなおいいけど。