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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
このスレッドは、

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

Delphi使いが優しくコメントを返しますが、お礼はDelphiの布教と初心者の
救済をお願いします。
2デフォルトの名無しさん:03/08/17 12:28
くだすれDelphi(超初心者向け) (Part1)
http://pc2.2ch.net/tech/kako/1051/10518/1051882835.html
くだすれDelphi(超初心者向け) Part2
http://pc2.2ch.net/test/read.cgi/tech/1053757982/
くだすれDelphi(超初心者向け) Part3
http://pc2.2ch.net/test/read.cgi/tech/1055986736/
3デフォルトの名無しさん:03/08/17 12:29
 M
| -_- |
このスレッドは、

オフでは話せない引き篭り、もしくは質問者自身何が何だが
分からないバカ質問を勇気を持って糾弾するスレッドです。

糞Delphi使い(しかも使いこなせない)が低脳を振り絞りコメントを返しますが、
お礼は糞Delphiの撲滅と上級者だと思っている初心者の駆除をお願いします。
>>5
は、いかなるツールを使ってもアプリひとつ作れないに50,000ユーロ
[F9]であっという間に出来あがりなわけだが
それがDELの良いところ
9デフォルトの名無しさん:03/08/17 16:14
フレームの初期化処理は、どのイベントに書けばよいのでしょう?
10デフォルトの名無しさん:03/08/17 16:14
>>9
フレームもクラスだから Create を継承して書けばいいと思うけど?

ただ、フレームはチョコっと使うには便利だけど、初期化処理までそこに書くような場合は
コンポーネントにした方がいいと思うけどなあ
>>11
処理にもよるけどCreateは早すぎな気が。
フレーム内のコンポーネントを操作できないからね。

>>9
TFrameの宣言に
protected
 procedure Loaded; override;
って追加してLoadedに書けばいいかも。
フレーム使わずに、フォームにして ドッキング使う方が楽かもね
14デフォルトの名無しさん:03/08/17 17:07
なぜ、Delphi使ってる人は引き篭りが多いのですか?
15sage:03/08/17 17:11
>>14
それはね、ティムポが小っちゃいからだyo
>>14
キタキター
Dockって位置情報の保存・復旧も含めてもっと簡単にならないのかね。
サンプル読んでいろいろやろうとしたけどめんどくさすぎ。
がんばってラップすればいろんなプロジェクトに簡単に適用できるようになるのかな。
BorderStyle := bsNone;
BoundsRect := Rect(0, 0, Screen.Width, Screen.Height);
でフォームを最大化した時、それに併せてボタンを同じ倍率で拡大するにはどうすればよろしいのでしょうか?
>>18
同じ倍率でWidth、Heightやフォントサイズを変更すればいいでしょう。
Excelや拡大鏡のように見た目をそのまま拡大縮小する必殺技もありますが。
20デフォルトの名無しさん:03/08/17 22:46
フサギコ新スレ建たないな〜
CSV形式のTextfileの、ある行の特定の1バイトだけ
書き換えるには、どうしたら良いのでしょう?

例)8行目の
"0","3","2"
"3"を"1"に書き換えるには?

file of Byte で読み出すと、場所が分からない。
Textfileでやると、ファイル全部を書き直すしか
方法が無いように思うし。
スマートな方法がありましたら、概略で良いので
教えて下さいませ。
>>21
そのどっちかしかないよ。前者の場合先頭から一バイトずつ解析していけば可能。
TStrings二つ使ってやるのが楽かも
lines.LoadFromFile('foo.cvs');
for i := 0 to lines.Count-1 do
begin
 values.CommaText := lines[i];
 ...
 lines[i] := values.CommaText;
end;
23デフォルトの名無しさん:03/08/18 00:44
 ∫,,,,,,,,,∧,,∧  ・・・
⊂,,,,,,,,,つ,,゚Д゚ミつ
>>17
同意

>>20
ど・・・どお・・・ドウイ・・・

>>21-22
ニケーイそふとではRubyやPerlなら
簡単に出来る〜
って書いてたな…
Win32Check使うとでる警告をOffにするにはどうすればいいの?
移植性なんて全然興味がないので。
25デフォルトの名無しさん:03/08/18 02:02
Perl の連想配列みたいなものはありますか?

 list['key] := 'value';

とか書けたらうれしいのですが。
26デフォルトの名無しさん:03/08/18 02:03
>>25
Map
TStrings.Values[]
2825:03/08/18 02:08
>>26, 27
おお、ありがとうございます。
早速、調べてみます。
    ∧,,∧    いまさらなんですが.....
   ミ,,゚Д゚彡
    ミ つ旦)~~ 
  〜と,,,~),,~)
Destroyが仮想メソッドなのは
TObject.FreeからちゃんとDestroyが呼ばれる
為に必要。と激しくわかた積もりです。

で、Createの方なのですが
自分で暮らすを作る場合
Createは仮想にする必要があるのでしょうか?
自分で多々井を使うような場合はとても必要なのだとわかりますが

そういう用途がなければ
静的メソッドで隠してしまってもいいのですか?

・TObject継承ならオッケとか、オッケくないとか。
・TComponent継承ならCreateは仮想でoverrideとか、
・俺はいっつも仮想でoverrideとか  
そういう、ご意見教えてください。
>>30
>自分で多々井を使うような場合はとても必要なのだとわかりますが
これがどのレベルの多胎のことを言ってるのか分からないけど

type TMyObject = class;
TMyObject2 = class(TMyObject); constructor Create; virtual; end;
TMyClass = class of TMyClass constructor Create; override; end;

function CreateObject(MyClass: TMyClass): TObject;
begin
 Result := MyClass.Create;
end;

とするときvirtual/overrideがあればCreateObject(MyClass), CreateObject(MyClass2)は
それぞれ期待したインスタンスを生成できるが
なければ両方とも基底クラスであるTMyClassのインスタンスが生成されてしまう。

だから判断基準はクラス参照経由でコンストラクタが呼ばれる可能性があるかどうか。ということ。
3231:03/08/18 02:57
激しく間違えた。>>31は無し。

type
TMyObject = class constructor Create; virtual; end;
TMyObject2 = class(TMyObject) constructor Create; override; end;
TMyClass = class of TMyObject

function CreateObject(MyClass: TMyClass): TObject;
begin
 Result := MyClass.Create;
end;

とするときvirtual/overrideがあればCreateObject(TMyObject), CreateObject(TMyObject2)は
それぞれ期待したインスタンスを生成できるが
なければ両方とも基底クラスであるTMyClassのインスタンスが生成されてしまう。

だから判断基準はクラス参照経由でコンストラクタが呼ばれる可能性があるかどうか。ということ。
実際にはclass of でクラス参照を定義したクラスのコンストラクタをvirtualにすればいい。
>>20
立てました.

ミ,,゚Д゚彡フサギコとモナーのDelphi質問相談談話室2
http://pc2.2ch.net/test/read.cgi/tech/1061142216/

サブジェクトが長すぎるとはねられたのでカタカナが半角になっております.
って,早速ミスか…すまんです._| ̄|○
何やってもへたれ('A`)
3521:03/08/18 08:19
>>22
やっぱり、他に方法は無いわけですか。
ありがとうございました。
36デフォルトの名無しさん:03/08/18 10:49
チェックボックスを複数配置し、これをラジオボタンのように、複数チェックできないよう
制御できるでしょうか?

実際にこういったことをするかどうかはともかく、そういう動きの方法が思いつきません……。
>>36
OnClickイベントでSender以外のチェックボックスのチェックを全てはずす。
3836:03/08/18 10:56
>>37
それは試してみたのですが、最初にチェックをつけ、別をチェックしたとき、
元のチェックは消えるのですが、現チェックが付かないのです。

書き方が違うのだろうか。
>>38
それは多分Checked := FalseしたときにさらにOnClickイベントが発生してしまうから。
多重にイベントが発生しないようにすればいいよ。

var updating: Boolean;

procedure TForm1.ChckBoxOnClick(Sender: TObject);
begin
 if updating then Exit;
 updating := True;
 try
  ... // メインの処理
 finally
  updating := False;
 end;
end;
Delphi7でXMLを扱う場合、XMLDocumentコンポーネント使うのと、
MSXMLを改めて取り込むのとどちらの方がいいんでしょうか?
それとも使いやすいXMLクラスがどこかで提供されているんでしょうか?
4136:03/08/18 11:25
>>39
できました。ありがとうございます。
なるほど……。
>>40
どういうふうな使い方をしたいの?
4340:03/08/18 11:39
>42

読み書き。
それほど大したことを使用とは考えてません。
普通に読み書き、多少の検索程度で。

ついでなんですが、どっかで使い方解説しているサイトありませんか?
>>43
そうか。自分も最初色々調べたけど、そういうの使いこなすの結構めんどくさいから
状態遷移形で自分でパースしてやってる。
使いたい部分を見つけてそこを切り出してその前後は変更しないようにすりゃ他人にも迷惑がかからず
手間もごく小さいしね。
FileStreamでFileAを元にFileBを作成、
両者をFreeAndNilした後に、MoveFileExでBでAを上書きしようとすると、
たまにエラーが返ってきます。

どうも書き込み終了より先にファイル移動しようとしてしまって、
エラーが出てるようなのですが、対処策って何かありますか?

46デフォルトの名無しさん:03/08/18 17:07
http://forum.nifty.com/fdelphi/samples/00003.html
↑のページの通りにやってもできねーぞ。
ご指摘お願いします。
47デフォルトの名無しさん:03/08/18 17:09
>>46
マルチすな
MainMenuコンポーネントのMenuItemのShortCutプロパティに
どうすれば「Ctrl+Shift+S」とか、プロパティのコンボボックスにない
パターンを設定できますか?
>>48
コンボボックスになくても書ける。
内部ではTextToShortCutが使われていると思われる。
5048:03/08/18 17:38
>49

あ、本当ですね…
tabsheet1の子コントロールにmemo1があったとします
memo1からtabsheet1を取得したいのですがどうやれば出来るでしょうか?
memo1
(memo1.parent as ttabsheet)
>>52-52
ありがとうございました
delphix delphi6に対応してくれんかのぉ
Stringってポインターですよね?
ってことは、乱用すると実行時に
メモリーの断片化を起こすような
気がするのは、気のせい?
気にスンナ。
んなこといったらDelのクラスインスタンスは
全てヒープに確保されるから何も作れなくなるぞ。
>>55
だ か ら 、 動 く っ て 

オレは、この発言を見るたびにいって(ry
googleで検索してくれ。お願いだから。

堀さんも堀さんだよ。忙しいのは分かるけれどインストール方法くらい、
本家に書いてあげてくれよ。
wikiにでも書いてまとめろや
60デフォルトの名無しさん:03/08/18 23:42
これを使うがよい。ガイジンさんが改造してくれてる。

ttp://turbo.gamedev.net/undelphix.asp
>Quite simply, UnDelphiX is a unofficial version of DelphiX powered by the official JEDI DirectX headers. It also has various "Better English" error messages, comments, and samples. It also will include DXG and DXW editors with full source.
61デフォルトの名無しさん:03/08/18 23:48
メガネ、巨乳、少女、緊縛、美女、ストッキング。
さあ貴方の股間をムズムズさせる語句はいったいいくつありますか?
全てのエロを網羅した作品です。
アニメとはいえこれだけたくさんのフェチ心をくすぐる作品はめったにありません。必見!!
無料ムービーをご覧下さい。
http://www.pinkfriend.com/
>>57
了解。ワスレます。
>>45
バッファフラッシュかな。
>>62
そんなことでパフォーマンスを下げるよりもっと良い開発環境に切り替えるべきです。
>>56
DHGL(ttp://www.asahi-net.or.jp/~HA3T-NKMR/DGS/DownLoad.htm)
メモリ断片化対策メモリマネージャが入っている
>メモリ断片化対策メモリマネージャが入っている
 _, ._
(. ゚ A ゚;)
監視式で特定のcharの配列を監視してます。大きな配列なので配列の一部のみを
表示させたい(例えば長さが1000の配列で10から20番目までを表示させる)ので
すが可能ですか?
68デフォルトの名無しさん:03/08/19 10:15
D6PRO上のQuickReportを使って印刷をしているのですが
用紙サイズ設定などが、プレビュー上のプリンタ設定から選んでも反映されずに
default設定の用紙でしか、出力されません。

PrinterSettings-QutputBinをAutoにしていますが
これ以外にどこか設定などするのでしょうか?
まだまだDlphi道の浅い私に、どなたか教えて頂けますでしょうか。
よろしくお願いいたします。
6945:03/08/19 11:09
>63
そのバッファフラッシュの方法が知りたいのですが…
FileStreamにメソッドありました?
7018:03/08/19 11:36
>>19
>Excelや拡大鏡のように見た目をそのまま拡大縮小する必殺技もありますが。
どのようにやればよろしいでしょうか?
ScrollBoxなどのように、ClientToScreenを持たないコンポーネントの
スクリーン上の座標を知るにはどうしたらいいでしょうか?
ClientToScreenあるような気がするのは気のせいですか?
var Point: TPoint;として
Point:=ScrollBox1.ClientToScreen(Point);
TWinControlを継承しているなら↓でもできるし
Point:=TWinControl(ScrollBox1).ClientToScreen(Point);
あるいはWin32APIを直接使うことも出来る。
Windows.ClientToScreen(ScrollBox1.Handle, Point);
7371:03/08/19 14:36
>72

あ、あれ?(;´Д`)
コード補完でTYPOしてて、無いと勘違いしていたかな?

あう〜、勘違いして申し訳ない。
次バージョンに当たるDelphi8って、.NET対応だけのプログラムしか組めないのですか?
http://www.borland.co.jp/about/message/openletter_to_delphi_community.html
>Octaneは、Windows 2003とMicrosoft(R) .NETフレームワークの両方を完全にサポートする予定です。


だそうだ
通常のWindowsアプリケーションも作成できるみたいですね。
良かった。
VC++しかネイティブを作成できないとなると終わっているよね。
bsNone のフォームを作成する時に、CreateParams で WS_THICKFRAME を
設定しているのですが、これと同じ枠が表示されるけどサイズ変更は不可、
って方法はありますか?

WS_THICKFRAME を外して、WS_BORDER を設定してもベタッとした表示ですし、
WS_DLGFRAME ではタイトルバーが表示されてしまって…。
> WS_DLGFRAME ではタイトルバーが表示されてしまって…。

されないぽくない?まあ他に自分で描くとか、WM_NCHITTESTで結果を変えるとか
方法はあるだろうけども。
>78
ぐぁ! 本当ですなぁ…。
WS_BORDER と WS_DLGFRAME 両方を設定すると
タイトルバーが出るんで、駄目だと思い込んでました…
スマソ(;´Д`)
8068:03/08/19 18:59
プリンタの用紙設定方法を質問した者ですが、一筋縄で行かない難しい問題なのでしょうか…
ここに書けば、皆さんのご意見を伺えるかと思ったのですが
ご親切な方、恐れ入りますがよろしくお願いいたします。
俺、超親切。でも知らん。
8277:03/08/19 19:14
>78
と思ったら、今度はウィンドウの高さが34ぐらいより
小さくすることが出来ないっぽい…むむむ
>>82
じゃあWM_GETMINMAXINFOを処理して、自分で最小の高さを設定。
8477:03/08/19 19:51
>83
その作業してました。なんとかなりました。
しかし原因は何なんでしょうね?
VCL中でダイアログは最低この大きさ、とか書いているんですかね?
たぶんOSの仕様。VCでも同じだし。
>>80
漏れの所もやってみたが確かに出ねぇな
A4のみ出してたんで気がつかんかった・・・
クイックレポートのバグかヽ(`Д´)ノ

他の連中てどうしてるんだ?(゚д゚ )
>>80
ここで「QuickReport,印刷」で検索してみれ
http://www2.big.or.jp/~osamu/Delphi/
88デフォルトの名無しさん:03/08/19 22:25
integerとExtendedには互換性がありません
とエラーが出たんですけど漏れにはこの意味がわかりません。
またどのように対処したらよいのでしょうか?
>>88
エラーメッセージを選択してF1キー
>>88
文字通り。互換性が無いんだよ。
何をしたら、ソレが出るんだか書いたら対処をアドバイス出来るかもしれんが…。
そのレスじゃダメだな。
実数型(single,dobule,extendedその他)を整数型(Integer,Cardinal他)に代入するには
小数点以下を切り捨てるなり四捨五入しなければならず、
整数型で表現できる数値の範囲でなければならない。
C使いなら実数型をそのまま整数型に入れちゃうかもね。
>>92
最初はよくやったよ。不便だなぁと思ったものだ。
<ヘッダー>
<ビットマップ>
<ヘッダー>
<ビットマップ>
<ヘッダー>
<ビットマップ>
.
.

上のようなファイルをTFileStreamで読み込み、表示させるプログラムを作っています。
ビットマップ部先頭にPositionを移動し、Imageに流し込むようにすると
エラー(ビットマップが不正です)が出るビットマップとそうでないものが出てきます。
エラーのでるビットマップ部をバイナリエディタで切り取ってファイルから読み込むと
エラーは出ません。どうしたらいいのでしょう?教えてください。
悔い改める
>>88
実数を整数にするには、
丸める(Round)か、切り捨て(Trunc)か、+方向へ切り上げ、-方向へ切り下げ、四捨五入…と、
色々方法があるので、どれか選んで関数を使うべし。

暗黙の変換を許してる言語もあるけれど、結構危険と思ってる。
>>94
ビットマップのヘッダーには、データ本体へのオフセットが含まれてた気がする。
TBitmap.LoadFromStreamがSeekしようとして変なところに移動してしまわないよう
一旦TMemoryStreamにでも切り出して使えばどう?
>>88
特に理由がなければExtendedは使わない方がいいぞ。
互換性がやばい。
>>97
うまくいきました!ありがとうございます。
>>67
キャストしろ。

>>69
なければAPI使え。
>>60
インストールの仕方がわからない・・
誰かやさしく教えてください
産休>>32
よくわかりました。

そう。多胎って
>だから判断基準はクラス参照経由でコンストラクタが呼ばれる可能性があるかどうか。ということ。
の意味で使いました。

中村タン本に書いてありましたが
VCLの基本思想って継承を使った実装ではなくて
イベントを使った委譲による実装が多くしてあって、
わかりやすいそうですね。
10368:03/08/20 10:00
昨日、QuickReportで用紙サイズ設定が反映されない件を質問した者ですが
レスを付けてくださった方々様、お礼申し上げます。

ただ結論としては、QuickReportではバグがあって命題のプリンタ設定が使えず
伝票など特殊サイズの手指しと業務に対応出来なかったと言う事で
非常に残念な結果でした…

今回はAccess+VBで対策予定ですが、今後の事もありますので
もし打開策をお持ちの達人がいらっしゃいましたら教えて頂ければ幸いです。
その手のレポートツール類って評価しては使えないから使わないって結論になるんだけど・・・

といか、Windowsの印刷ってとてもお手軽なんで、そんなツール使わずにベタベタ Canvasに表示しときゃ
何の苦労も無いって事で
105デフォルトの名無しさん:03/08/20 10:05
利用されていない(新たに利用できる)portを探すにはどうすればよいでしょうか
Delphi6Personalです
106デフォルトの名無しさん:03/08/20 10:05
Personal版ではDBアクセスはどう頑張っても無理なの??
なんとかしたいのだが・・・
>>105
シリアルポートの事?  Open してみてエラーステータスを見るのが一番簡単では?

それともTCP/IPポートの事?
>>107
TCP/IPポートです
>>106 無理って事じゃなくて DBGridとかが使えない(使える権利がない)から苦労するってだけで
フリーなDBエンジンをネイテブに叩く限りはなんとでもなるでしょ。
11068:03/08/20 10:11
>>104
そうなのですか!? 初心者ですのでさっと言って頂ける内容でもありがたいです。

BDE〜DBEditなどのDBコンポーネントを利用しているのでQuickReportを前提に考えておりましたので
差し支えなければ簡単な手ほどきをして頂ければ助かります。
>>110
どういうふうに印刷ったって
BDEなら、ToString して 指定位置に Canvas.TextRect で印刷するだけでしょ?

そこらへん印刷用の関数をいろいろ作っていけば簡単になるよ
自分は簡単なマクロ作ってる。
112デフォルトの名無しさん:03/08/20 10:19
DB操作をする場合たとえばC++とかならRecordSetのクラスを作ったりするのだが
Delphiならどうするの?
しかもDBGrid使えないんじゃ、表示もツライのでは・・・?
Delphiに興味はあるがそれを考えるとなかなか手が出ない・・・
2D RPGのマップエディタを作っています。
タイルを読み込むまではできましたが、タイル1マスを描くごとに
Imageに描きCopyRectを使ってマップ本体に転送しているので
とても遅いです。なにかほかにいい方法はないでしょうか?
>>112
それはProを買えってご宣託でしょう。
RecordSetに相当するのがProには用意されているし、DbGridも便利に使える。
パーソナルでやるなら TStringListをDB代わりに使える範囲でチマチマやるしかないと思うよ。


>>113
書き換えた場所だけ転送してるんだよね? そんなに遅い?
115デフォルトの名無しさん:03/08/20 15:43
シングルクォーテーション ' を
#39で記述しますが、
これを16進数(27h)で書くにはどうしたら良いですか?
#$27にするとエラーになっちゃうし
''
117デフォルトの名無しさん:03/08/20 15:48
''は、見づらいからいやなんです
'xxxx' + #39 + 'xxxxxx'
というふうに書きたい
39の部分は、文字コードなんで16進で・・・
118113:03/08/20 15:50
>>114
1マス転送する毎に640x480のビットマップをImageに書いてからCopyRectで
指定した一部を転送してるので、遅くなってしまうのだと思います。

1つのマップを描くのに数十枚の640x480のビットマップがいるので
できればStreamから直接一部だけを転送できるような関数が
あればよいのですが・・
'xxx' + Chr($27) + 'xxxxx'
120デフォルトの名無しさん:03/08/20 15:54
>>119
thx
>>115
#$27 でいいと思うが? どう書いてエラーになったの?
'xxxx' + #$27 + 'xxxxxx' でも + を省略して
'xxxx'#$27'xxxxxx'   でもいいよ 
>>118
よくわからないが、どうしてもっと大きなBMP作ってそこに描かないの?
>>122
マップ描画用のImageは初めから用意してあります。
ウラにもうひとつImageを置き、1マスごとに一旦640x480のビットマップを
いちいちそれに描いて、そこからマップデータに指定されているチップを
転送するので、遅くなってしまいます。
もしかして Imageって言ってるのは TBitmapの事じゃなくて TImageなのか?
>>124
そうです。TImageです。。。
それしか方法が思いつかなかったので・・
Del厨らしく一言
「フリーコンポ使っとけ」

TAlphaBitmap
DirectXでもいいならDelphiX、QuadrupleD
127デフォルトの名無しさん:03/08/20 16:52
コンポーネントなしならBitmap
アリなら>>126と同じくTABitmap
128113:03/08/20 17:07
TABitmapすごいですね。使ってみますね。
また何かあればよろしくお願いします。
>>123を読むとTABitmap使っても変わらない予感。
130デフォルトの名無しさん:03/08/20 19:49
Delphiを使ってWeb画面を表示する方法は、
ttp://plaza21.mbn.or.jp/~takoyakusi/delphi/WebBrowser.html
を見て分かったのですが、
よくブラウザで見かける、
「現在読み込み中」みたいなメーター
を出す方法(または読み込み完了したことが分かるフラグ)
が分かりません。
教えていただけないでしょうか。
Delphi6パーソナルを使用しています
>>113
 どちらかというとゲーム制作板向けの話題ですが….

 マップエディタを作るのでしたらドローグリッド(TDrawGrid)を使ってみては?
 ドローグリッドはセルの縦横の長さをタイルと同じに,縦横のセルの数をマップと同じにして,OnDrawCellイベントでタイルのイメージを転送します.

 ドローグリッドが「[3, 5]のセルのイメージを(128, 64)-(159, 95)の領域に描けや」って要求してくるので「へいへい.[3, 5]はえーっと…(一覧表を見る)…ああ,11番のタイルだな.じゃぁこれをコピペ,と」という感じで描画していくわけです.

 すべてのタイルを含んだイメージをビットマップオブジェクト(TBitmap)に持たせ,イメージ転送にはCopyRectを使って実験してみましたが(ビットマップは24Bit DIB形式にした),手元の遅い環境でも速度的には問題ありませんでした.
 (ちなみにWin 95,CPU: MMX Pentium 200 MHz,VIDEO: Trident 9685,画面モードは1024×768のハイカラーです)

>>118
 転送に時間がかかるのはCopyRectが遅いからではなくて無駄なイメージ転送が多いためでしょう.なおドローグリッドを使わないとしてもマップを描くのに必要なビットマップはタイル用に1枚,フレームバッファ用に1枚だけで済むと思いますが.
 もしかしてマップ全体の表示イメージを640×480に切って持たせようとしていませんか?マップ情報はタイル番号の2次元配列として持たせないと駄目ですよ.

133130:03/08/20 23:20
>>132
ありがとうございました
134デフォルトの名無しさん:03/08/21 00:30
他のアプリに文章を渡したいのですが、仮想キーボードを使った方法と
クリップボードを使った方法を教えてもらえないでしょうか。
マウスクリックまでは検索して分かったのですけど、キーボードのキーを疑似的に
押すこととクリップボードを使ったペーストはやりかたが分かりませんでした。
135デフォルトの名無しさん:03/08/21 04:18
TDataModuleにTMainMenuを置いて、それをTFormのMenuプロパティに指定したところ、
設計時にはメインメニューが表示されるのに、実行時には表示されません。
お助けを。
>>134
 製品版? ならバージョンによってCDROMにSendKeyとかいう名前のが入ってないかな


>>135
どこかのイベントで再度設定してみたらどう?
137あぼーん:03/08/21 04:34
138デフォルトの名無しさん:03/08/21 05:10
DataModule2のOnCreateで

MainMene1 := TMainMenu.Create(Self);

とやって、メインフォームのOnCreateで

DataModule2 := TDataModule2.Create(Self);
Menu := DataModule2.MainMenu1;

とやってみたけど、表示されませんでした。
素直にメインフォームにメインメニューを置く事にします。
>138
なんかツッコミどころ満載な事やってんな。
それはいいとして、普通にFormのMenuプロパティに設定しただけで、ちゃんとメニュー出たよ。
どうせDataModule2を自動生成の対象から外してるとかそんなんじゃないの?
140デフォルトの名無しさん:03/08/21 05:52
>139

その通りでした。お恥ずかしい。
Delphiもコンストラクター内で例外投げちゃダメですか?
>>141
どうしてダメだと思うの?
>>141
投げると自動的にデストラクタが呼ばれるようになっておる。
144デフォルトの名無しさん:03/08/21 12:09
質問させてください。
D7のオフィシャルコースウェアで財務管理システムを作る演習があるんですが、
そこのプログラムを実行するとカスタム例外処理の部分で例外が発生してしまいます。
コンパイルは通るんですけど、例外を知らせるプロンプトが出るべき部分を
実行させると、どの部分でもクラス生成のエラーが出ます。
どなたか同じ症状で悩んだ方いらっしゃいますか?
この原因はどのようなことが考えられるのでしょうか?
>カスタム例外処理の部分で例外が発生
それでいいんじゃないのか?
146144:03/08/21 13:10
いえ、出るべきプロンプト(エラーメッセージ)が実行中に出ずに
アプリが停止してから”例外が発生〜”と出る症状なんです。
147144:03/08/21 13:13
いえ、結局実行中にでるべきエラーメッセージが出ずにその部分で
実行がストップしてしまうんです。
そのエラーが”クラス生成の例外が発生〜”なんですが。
カスタム例外クラスの記述は間違っていないです。
というか、付属CD-ROMから移しただけなんで問題ないはずなんですが。
>146
聞けば聞くほどソレで正常だと思うのだが?
オフィシャルコースウェアに解説は無いのか?
ツール->デバッグオプション につていの解説とかさ
149144:03/08/21 13:36
無いんです…確かに「デバッガ例外が発生」ていうプロンプトです。
しかし、デフォルトでテーブルに入っているデータが参照出来ずにこの
エラーが出るんですよね。
何かチェック項目を変えればいいんでしょうか?こちらでも調べます。

あと接続周りもチェックして接続は出来ています。
構造体に一気に代入するにはどうすればいいですか?
a = { 0 , 2 , 3 };
↑こういうことをやりたいんです
そうか。 とりあえず、IDEで走らせて 例外が出たらそういう状態になるのは”正常”だ。

例外を出したくないなら、 ツール->デバッガオプションで無視する例外に入れておけばいい 
>>150
そういう場合は 構造体を返す関数を作るのが簡単でスマートだと思うよ。
153150:03/08/21 14:42
>>152
できました。ありがとうございます
cでいう'\n'に対応する改行コード教えてください。
あとラベル内で改行ってできますか?
sLineBreakか#13#10
できます。
ドッキングウィンドウを作成し、実際にドッキングさせると
細いタイトルバーっぽいのと閉じるボタンが出ますよね。

bsNoneにしているフォームでタイトルバー(もどき)を
自分で描画しているので、その細いタイトルバーとかも
なんとかイメージ統一のために自力で書きたいのですが、
何かいい方法はありませんか?
157デフォルトの名無しさん:03/08/21 20:23
delphi personalを購入しようかと検討中なのですが

このソフトでどんなソフトまで作れるでしょうか
簡単なメモ帳ソフトを作ってみたいのですが、できるでしょうか。
>>157
無理です。
personalなら買わずにダウンロード。
>>158
そうなんですか・・・やっぱり7万円のソフトじゃないと無理か・・・

>>159
XPに対応しているver.が見当たらないんです
>>160
XP対応って、Delphi自体がXPで動くかどうかだよね?
http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=069593

Delphi6Personalのダウンロードは、
http://www.borland.co.jp/delphi/personal/
>>161
そうです!ありがとうございます!
163デフォルトの名無しさん:03/08/21 21:08
formにeditを縦に3つ並べて、一番上と真中のeditに数値を入れて、
上のeditから真中を引いて、その結果を一番下のeditに入れるやり方が
わからないのですが教えてください。
164デフォルトの名無しさん:03/08/21 21:09
>>163
Edit3.Text:=IntToStr(StrToInt(Edit1.Text)+StrToInt(Edit2.Text));
166デフォルトの名無しさん:03/08/21 22:06
>>165
ありがとうございます。
+になっていますが−ですよね?
この場合で割りたい場合は+の所をdivにすればいいのでしょうか?
Delphian Worldに登録されているツリーリスト表示(TTreeList)で
サブアイテムが隠れてしまっていても水平スクロールバーが表示されません。
一番左にあるアイテムだけでスクロールバーの表示が決まってるみたいなのですが
これをListViewのようにサブアイテムが隠れる時でもスクロールバーを表示するようにするには
どういう風にしたらいいでしょうか。
ちょっとわかりにくいかもしれないですがよろしければお願いします
>>166
> +になっていますが−ですよね?
ですね(プゲラ
> 割りたい場合は+の所をdivにすればいいのでしょうか?
やってみればいーじゃん(プゲラ

>>167
作者に言えばいーじゃん(プゲラ
「つかえねーコンポ晒してんじゃねーヴぉけ」(プゲラ
169デフォルトの名無しさん:03/08/21 22:27
現役女子高生ですが、相当遊んでいるのでしょう。性感帯はかなり敏感でアヘアヘ状態です。
少し淫乱系なのか、快楽に対してかなり貪欲です。
ビラビラなども肥大気味で性生活を垣間見ることができます。
騎乗位で挿入されながらクリトリスを剥き出しにするシーンは個人的に気に入りました。
結合部のアップシーンが豊富で非常に楽しめる作品です。
援交女オンリー 。今すぐ無料ムービーをゲット!!
http://members.j-girlmovie.com/main.html
171デフォルトの名無しさん:03/08/21 23:16
初歩^6の質問ですが教えてください。

サブルーチンに二つの変数を送り、二つの整数Resultを返してもらうことって
出来ないでしょうか?

Sub 2ch(i,j:integer):
           ↑↑
ここに2つ入れれると思うのだけど、やり方が分からなくて・・・
>>171
スレ違い(プゲラ
173163:03/08/21 23:26
一番下のeditに出た数値を他のeditに同時に表示させることは
できますか?この場合はどのように書いたらよいでしょうか?
>>172
ネタでも釣りでも無いんですぅ。
教えてください。おながいします。
175デフォルトの名無しさん:03/08/21 23:27
変数パラメータを使え。
procedure 2ch(var i,j:integer);


または、返値を32bitの整数にして16bitの整数2つの情報を書き込め。

176デフォルトの名無しさん:03/08/21 23:31
>>173
'イベント'ってわかるか?
一番下のeditが変化したと・き・に、残りの2つのeditに書き込め。
>>171

type
 TResult = class
 public
  A, B: Integer;
 end;

function _2ch(i, j: Integer): TResult;
begin
 Result := TResult.Create;
 Result.A := i;
 Result.B := j;
end;
DelphiからExcelマクロに引数渡したいです。

var ole: OleVariant;
ole := CreateOleObject('Excel.Application');
ole.Workbooks.Open('\Book1.xls');
ole.Run('Macro1');

マクロは起動できたんですが、引数渡せません。
どなたか教えて下さい。
>>171
type
TResult = record
  A, B: Integer;
end;

function _2ch(i, j: Integer): TResult;
begin
Result.A := i;
Result.B := j;
end;
>>171
type
TResult = object
  A, B: Integer;
end;

function _2ch(i, j: Integer): TResult;
begin
Result.A := i;
Result.B := j;
end;
181171:03/08/21 23:43
皆さんたくさんありがとうございますた。
>178
Excelのバージョンは?
183163:03/08/21 23:46
>>176>>177>>179>>180
ありがとうございます。早速、やってみます。
あとボタンを押して実行させたいのですがその場合は
どのように書けばよいのでしょうか?
184163:03/08/22 00:06
>>177.178.180
は関係ないですね。すまそ。早とちりですた。
185163:03/08/22 00:09
>176
イベントって何ですか?
わかりません。
>一番下のeditが変化したと・き・に、残りの2つのeditに書き込め。
モンキーブレインな漏れにはこの意味が分かりません。


186 :03/08/22 00:13
>>163
いくら「くだすれ」でもさぁ…。
自分で実験しまくってからでも遅くないと思うけどなー。
全然、試行錯誤してないでしょ?

ボタンをダブルクリックした所に関数呼ぶコード書いたら?
187 :03/08/22 00:19
>>163
分からなかったらさー、検索したらどーだね。
それでも答え出ない場合には質問するとかさー。

イベントの例:
editのtextの内容が変わったら…とか(変わった時に動作させたいコードを書く)。
188178:03/08/22 01:06
>>182
バージョンは9.0です。
>>185
まずは、フォームのデザイン画面に何かボタンを貼って、次にそのボタンを
クリックしてみる。

すると、エディタの画面に切り替わり、しかも何やら自動的にテキストが挿入
されていて「書きかけのプログラム」みたいな状態になっていると思う。

そこに、自分の望む動作を書き込む。

コンパイル後に実行した画面には、さっき貼り付けたボタンが表示されていて、
そのボタンをクリックすると、書き込んでおいたプログラムが実行されるはずだ。
まずは、メッセージボックスでも表示させるといいかも。

さて、イベントってのは、マウスをクリックしたりキーボードを押したりしたという
事実に応じて発生する信号みたいなもの。

で、OSとDelphiのライブラリの組み合わせが、うまいことこの事実を察知して、
「おやボタン1が押されたようだな。じゃあ、それに対応しているプログラムを
呼び出してやろう」と、お世話してくれる。

Delphi は、この「イベントと、それに対応するプログラム」の取りまとめ方が
賢くて、プログラムを書く人は画面をデザインしながら、そのデザインの各場所
に対応したプログラムを適当に書いてやれば、実際の画面上にあるものと
プログラムとの対応付けは、Delphiがうまく処理してくれるといわけ。
190189:03/08/22 01:20
>>189
ちょっと訂正

> まずは、フォームのデザイン画面に何かボタンを貼って、次にそのボタンを
> クリックしてみる。

クリックじゃなくて、ダブルクリック。
191デフォルトの名無しさん:03/08/22 02:20
>>178
試してみたんだが、
var
 s:String;
 i:Integer;
ole.Run('Macro1',100,'abc');
ole.Run('Macro1',s,i);
のようにDelphiの定数や変数をそのまま渡せたぞ。
OleVariant型で渡そうとするとエラーになる。
あと、VBAのInteger型は2バイトなので、その引数にDelphiのInteger型を渡すと
エラーになる。変数サイズを一致させないといけないみたい。

余談だが、VBAのRunメソッドはApplicationオブジェクトに属するので、
ドキュメントを開かなくても実行できる。
'ファイル名'!モジュール名.マクロ名
という書式で。
178の例だと
ole.Run('''\Book1.xls''!Module1.Macro1');
で実行できるかも。
昔のVBAのヘルプには書いてあったんだが。

ole.Workbooks.Open('\Book1.xls');
ole.Run('Macro1');



192191:03/08/22 02:22
最後の2行いらない。
193デフォルトの名無しさん:03/08/22 11:58
#13とか#10みたいな特殊文字の一覧どこにありますか?
>>193
GExpertsのASCII Chart
clWindowとかの色定数を$808080とかのカラーコードに戻す関数ってありますか?
なんかWindowsAPI使わないとできなさそうだけど・・・
ColorToRGB
197144:03/08/22 14:18
>>152
おそくなりましたが有難うございました。
結局再コーディングしましたが別のバグにハマりました…
D7の応用編オフィシャルコースウェアはミスプリがあるので
delphi始めて2週間では厳しいです。
ただ納期が近いので2〜3日でパッケージ何とか組みます。
198デフォルトの名無しさん:03/08/22 15:37
>>193
「ASCIIコード表」で検索。32未満の部分。
199178:03/08/22 16:53
>>191>>192
返事遅くなりました。
ありがとうございます。
やってみます。
200115:03/08/22 17:15
>>121
遅レスですいませんが、 エラーは私の勘違いでした すんません
しかし、いろいろ教えてもらったので良かった
201デフォルトの名無しさん:03/08/22 18:29
ネストしたループから抜けるのに
label使うのってスマートじゃないんですか?
スマートじゃないです。
203デフォルトの名無しさん:03/08/22 20:06
久しぶりに来てみたらDelphi相談室って無くなっちゃったのね。

Delphiで他のアプリのスクロール操作をしようと思っています。
で、そのアプリのスクロールバーにマウスの位置を移動して
PostMessage(Wnd,WM_LBUTTONDOWN,0,0);
PostMessage(Wnd,WM_LBUTTONUP ,0,0);
してやってるのですけど、全く反応しません。
ちゃんと、
SetCursorPos(*,*);
GetCursorPos(MP);
Wnd := WindowFromPoint(MP);
SetForeGroundWindow(Wnd);
だけじゃなく試しに、
Windows.ScreenToClient(Wnd, MP);
を入れてみたりもしたんだけど駄目でした。

そのアプリがカーソルキーでのスクロールに対応して無い糞なので
マウスでスクロールさせるしかないのですが、良い方法は無いでしょうか?
204デフォルトの名無しさん:03/08/22 20:25
あるよ
205デフォルトの名無しさん:03/08/22 20:27
毎回期待を裏切らないこのシリーズ。
今回の出演は女子高生で何とパイパン女です。
何故マン毛がないだけでこんなにいやらしくなるのでしょう。
ツルマンのドアップ映像は売るほどあり、超大満足間違いなし。
アナルにも指を入れられますがまんざらではないようでよがり始めます。
多少画像は荒れ気味ですが内容からすると文句なしの作品です。
完全素人!!無料動画を即ゲット。
http://members.j-girlmovie.com/main.html
>>203
SendMessage(Wnd, WM_LBUTTONDOWN, 0, MAKELPARAM(xpos, ypos));

スクロール目的ならWM_HSCROLL/VSCROLL送った方が良さそうだけど。
207デフォルトの名無しさん:03/08/23 00:41
editに数値を入れてそれを折れ線グラフで表現すること
ってdelphiでできますか?
そのときeditを置いているformとは別のformにグラフを
出したいのですがこれは可能でしょうか?
で、具体的に何が分からないんだ?
>>208
(´-`)。o ○ (恒例の「unitを使う(参照)」の予感)
210デフォルトの名無しさん:03/08/23 00:56
>>208
今の漏れに出来ない事
editの数値を元にグラフをかくこと
それを別のformに表示すること
これができません。
>>210
1.出来ます。
2.可能です。
はい、次↓
editにはデータが一個しか入らないわけだが。
区切って入れるのか?つか丸投げしたいなら宿題スレ池。
213デフォルトの名無しさん:03/08/23 01:08
>>212
複数のeditを作ってグラフを作りたいなと思います
214デフォルトの名無しさん:03/08/23 01:17
Del6Per なら、VtChart コンポーネントを使った方が早いし、使いやすいかと。
var A: Integer

A := IntToStr(Edit1.Text);

で整数なら値が取得できるから
それをもとにグラフ描け
216デフォルトの名無しさん:03/08/23 01:20
TChart使え。

>>215
StrToInt?
217デフォルトの名無しさん:03/08/23 01:23
本当に初歩の質問ですみません
折れ線で書くときはformに何を置けはいいんですか?
218デフォルトの名無しさん:03/08/23 01:31
>>216
tchartってのはactiveXにあるVtchartのことですか?
219 :03/08/23 01:32
>>217
LineTo使えば?
220デフォルトの名無しさん:03/08/23 01:35
'Additional'にある'Chart'
221デフォルトの名無しさん:03/08/23 01:51
>>220
漏れはDel6Perを使っているんですが、ちょっと見当たらないような
>>215
あげあし取りではないが、
命令口調で間違いは恥ずかしい。
>>222
>あげあし取りではないが
どこが?
>>222
固定粘着キモイ
この程度のミスで騒ぐなよ。
226デフォルトの名無しさん :03/08/23 10:54
Delphi7を使用しています。

テーブルにインポートをする際に、読み込んだ文字列の
カンマ数-1とフィールド数があっているかを調べたいと思っています。
そこで、String型変数に格納した文字列のカンマ数を取得しようとしました。

関数で特定文字の数を取得するものはないでしょうか?
カンマ数を一行で取得できればと思ったのですが。
やはり1文字づつループしてカンマをカウントしていくしか方法はないでしょうか?
よろしかったら教えてください。。
227デフォルトの名無しさん:03/08/23 11:25
AnsiReplaceStr()でカンマを削除してから文字列の長さを取得、
それから元の文字列の長さと比較。

素直に、
http://forum.nifty.com/fdelphi/samples/00628.html
や正規表現ライブラリを使った方がいいと思うが。
228デフォルトの名無しさん:03/08/23 13:13
Delphi6 Personal を使っています。

エディタを製作中なのですが、
テキストファイルなどのショートカットファイル(〜.lnk)を読み込んで、
その参照先のテキストファイルのパスを取得するにはどうすればよいでしょうか?
普通に開いてもlnkファイルそのものを開いてしまい読める状態ではありません。
何かよい方法がありましたらご教授お願いします。
IShellLink
文字列を辞書順(アルファベット順)にならべるプログラムを組みたいのですが、
文字列比較する命令がわかりません。おしえてください
231デフォルトの名無しさん:03/08/23 15:16
デルファイ7のアップデートが出ないのはなぜですか?
とっくに出てます
233デフォルトの名無しさん:03/08/23 16:33
でてません。
234228:03/08/23 16:46
>>229
大変ありがとうございました。
おかげさまでIShellLinkで検索したところ、
海外のサイトに目的の動作をするソースを発見できました。
ちょうど素人的な質問御免

exeファイルからソースファイルを見ることできまつか?中身を見るっつーの?
できますよ。
余裕余裕。楽勝っつーの?
ちょうど素人的っつーの?
>>235
無理。
「コンパイラ」って何かを調べてみな。
TApplicationEventsのOnIdleでDone:=Falseした時って
これどうせイベントで他の処理終わってから戻って来るんだから
Sleepしなくてもいいやっていうのはダメですか?
プロセスの優先度はノーマルだとして
>>239
あり できるっつーレスとあんたのレス、どっちが信憑性あるか考えたらあんただった
コンパイラってのを調べてにたら、それが不可能って事をなんとなく理解できますた
あり
JEDI DirectX9 HeadersでD3Dアプリ作ってるんですけど
フルスクリーンからウィンドウモードにResetするとメニューとかの
クライアント領域以外の部分が消えちゃって
ウィンドウ位置もデスクトップの0,0に固定されちゃうんですが
元通りのウィンドウに戻すにはどーしたらよろしーんでしょうか?

確か昔BCBでやってたときも同じトラブルに見舞われた記憶があるんだけど
ソースが残ってない・・・助けてエロい人
スレ違いな予感
とはうすうす感づいているんですが
「Delphiなんかシラネーヨ」と追い返されるのが怖い・・・
Delphiってシステムアプリの作成ってイメージが強いんだけどDirectX使ったゲーム作る場合ってどう?
Delphiで作成された有名なゲームとか知りませんか?

今までJavaとかやってたんでオブジェクト指向使える言語がいいなと思ったんですけど。
>>245
有名なゲームはしらんけど
素人レベルでは充分な感じ

ただオブジェクト指向で云々ならC#でやってみたらどうかな?
>>245
海外にはボンバーマンもどきを作ってる人とかQuake2をDelphiに移植する人とかいろいろいるが
国内だとらじおぞんでくらいしか知らんなあ
エロゲ
DelphiでDirectX使えるの?
252デフォルトの名無しさん:03/08/23 20:34
使える
つか調べろ
サンプル全部みたけどなかったよ?
>>253
あんたPG向いてないよ
CSBならサンプルでもDirectXを使っています
使い物になるか微妙なDelphiなんて放っておいて
CSBに乗り換えましょう
>>251
delphixってのインストールしなされ
ただしdelphi6以降では使えないので注意
257デフォルトの名無しさん:03/08/23 21:08
Delphi7で作ったソースをDelphi5でコンパイルする事で来ます?
いつもは5で作業をしているのですが、どうしても7で一時期だけ作業を
しなければなら無くなってしまいました。

変なコンポは使ってないのですが、どうでしょう?
コンパイルが通るようにするコツなどがありましたら教えてください。
>>256
Del6 perで使えてます>DelphiX

>>60を見よ
>>60
日本語になりませんか?
260デフォルトの名無しさん:03/08/23 21:25
自分で翻訳すると日本語になります
なんだサポートしてるのDirectX7かよ
>>258
インストールの仕方がわからんちょん
263デフォルトの名無しさん:03/08/23 22:01
>>262
それならどうせインストールできても使えないね
264 :03/08/23 22:15
>>262
パッケージをインストールしようとすると「古い形式で……」と出るので変換する。
その後でDXRender.pasとDXReg.pasを書き換え。


※DXRender.pas
mov eax,Dest; add eax,TDXRMachine_Color.R+1 → mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R+1)
同じようなコードがあるので、同じように修正。

movzx edx,byte [offset _AddTable+edx+ebx] → movzx edx,byte [offset (_AddTable+edx+ebx)]
こちらも似たコードがあるので、それらを同様に修正。


※DXReg.pas
http://turbo.gamedev.net/delphixd6.aspの
「When you are done with all that hacking your DXReg file should look like this…」以下の内容に書き換え。
>>263
マニュアルまで英語なのか?
お前らバカじゃねーの
266デフォルトの名無しさん:03/08/23 22:20
>>265
意味わかりません
>>266
だろ
英語なんて意味がわからないんだよ
Image1に画像を読み込んだ後いったん破棄して
アプリケーション起動時の何も無い状態に戻すにはどうすればいいですか。
>>268
意味不明。
DirectX9もヘッダーがあるからできるっちゃ、できるが、
SDKのユーティリティ関数群までコンバートされてるわけでは無い。
そんなわけで、既存のDirectXのラッパーライブラリを使わない場合は、
実際には、C/C++やC#に比べてかなりマンドクセーです。

D3Dなんかまだよくて、DirectShowなんかは、
SDKサンプルのベースクラス群がないと死ねるどころじゃない。

と、茨の道を歩きたいマゾにはお勧めです。 > DirectX + Delphi
だからJEDIのheadersかClootieのDLL使えって・・・
何も考えずC/C++のサンプル書き写すだけで動くから
別スレッドからユニット内グローバル変数(Implementation節のvar)に触るのは危険ですか?
危険です
ではtimeSetEventAPIは1プロシージャ内にも割り込んできますか?
例えば
 procedure TestProc;
 begin
  do something A;
  do something B;
 end;
とある時に、AとBの間に
 timeSetEvent(1000, 1, TimeProc, Integer(Self), TIME_PERIODIC);
としたTimeProcが割り込んでくることはありますか?
ええ、別スレッドですから
>>272
危険の定義によっては危険じゃないこともあるだろ。
一方が読むだけで他方が書くだけなら破綻しないこともある。
何をやりたいかによるよ。
>>276
どこかのだれかがUnit内グローバルにじゃんじゃか書き込んでいく内容を
別スレッドで片っ端からファイルに保存したいだけです

Synchronize使えば大丈夫ですか?
>>277
そのグローバル変数がStringがTStringListのことなら何かで保護しないとまずいね。
TThread.Synchronizeでも問題ないけどサブスレッドがFormなどの
VCLのコンポーネントに触らないならのCriticalSection使った方が軽いよ。
TrackPopupMenuでPopupMenuを表示させることはできた。
ではコードからPopupMenuを閉じるにはどうすればいいのかよ!
>>278
CriticalSectionって書き込むほうでも面倒みてやんないとだめですよね?
そのトレードオフ考えてもSynchronizeよりコスト低いですか?
俺馬鹿だからコード量増えるのはツライっす・・・

今のコードは書き込む方は特に何もしないで
Thread.Execute内でSynchronizeで1行取ってきて
スレッドオブジェクトが持ってるFileStreamにWriteしてます
Synchronizeはメッセージ経由だからやたら遅いよ。
別に気にならなきゃそれでも構わないけど。
Winnyを操作するツールを作ってみようかと思うのですが、
WS32で見てもSpy++で見てもnyのリスト更新ボタンなどがなく、
操作できるのはせいぜいCMBボックスと検索ボタンぐらいです。
しかし、巷にはリスト更新ボタンを押すツールが出回っています。
同じことをDelphiで行うにはどうすればいいでしょうか?
実行できるのであれば、Winnyのバージョンは1でも2でもかまいません。

よろしくお願いします。
283デフォルトの名無しさん:03/08/24 18:11
久しぶり(一年ぶり)にDelphiを触ってるんですが、手元の本やネットで調べたんですが分からなかったもんでちょっと教えてください。

フォームに数値を入力すると、その数値だけ同じコンポーネントを作成したいのですが、どうしたらいいのでしょうか?
具体的には、フォーム上にテキストボックスがあるんですが、そこに数値を入力すると、その下に同じ画像や図形を数値分だけ並べて表示したいんです。

本当に初心者でスマソ。いいたいことが伝わったらいいんですが、なにぶん用語とかかなり忘れたりしてる部分があるので…
画像や図形ってコンポーネントのことか?
それともビットマップイメージに描かれた図の事か?
285282:03/08/24 18:19
コンポーネントのことです。
286285:03/08/24 18:19
名前間違えた・・・283です。
procedure TForm1.Edit1Change(Sender: TObject);
var i: Integer;
 comp: TYourComp;
begin
 for i := 1 to StrToInt(Edit1.Text) do
 begin
  comp := TYourComp.Create(Self);
  comp.Parent := Self;
  comp.YourProp := xxx; // 初期化処理
 end;
end;
288デフォルトの名無しさん:03/08/24 19:08
超低脳な質問 
Delphiってフリーソフト?
あげちまった すまそ
>>290
しらない
>>290
関係ないかもしれないが、前スレの

913 名前:デフォルトの名無しさん 投稿日:03/08/16 14:05
少しはヘルプ見ろよ。


914 名前:905 投稿日:03/08/16 14:21
>>913
インストールしたフォルダの中に、ヘルプファイルがありました。
ありがとうございました


915 名前:デフォルトの名無しさん 投稿日:03/08/16 14:23
フォームのタブクリックしてF1でヘルプが出るよ


916 名前:デフォルトの名無しさん 投稿日:03/08/16 14:24
そりゃあるさ

がなんか印象深かった
293283:03/08/24 19:52
>>287 サンクス!!

えっと、もうひとつ質問させてください。さっきはコンポーネントを作る、ということを聞きましたが、逆にコンポーネントを削除することってできますか?
非表示とかじゃなくて完全に消しちゃいたいんです。ボタンをクリックすると表示されていたコンポーネント(画像とか)を削除する方法教えてください。

ほんまにすんません。何度も。
Free
>>288
Delphi6 Personalのみフリー
ダウンロードは>>161
296デフォルトの名無しさん:03/08/24 20:10
editを使って割り算をしようと思い下のように書きました
しかしうまくいきません。どこを直せばいいですか?
edit1.text:=inttostr(strtoint(edit2.text))/(strtoint(edit3.text));
>>296
div
/→div
かっこの位置がおかしいぞ
edit1.text:=inttostr( strtoint(edit2.text) div strtoint(edit3.text) );
300デフォルトの名無しさん:03/08/24 20:23
>>297
>>298
>>299
ありがとうございます。
301デフォルトの名無しさん:03/08/24 22:20
教えていただいた下の式だと1÷2=0.5という計算ができないのですが
何をつけたしたらよいでしょうか?
edit1.text:=inttostr( strtoint(edit2.text) div strtoint(edit3.text) );

>>301
Format
303デフォルトの名無しさん:03/08/24 22:36
>>301
整数型じゃなくて実数型を使え。
304デフォルトの名無しさん:03/08/24 22:39
formatって初めて見ました。下のように書いたらダメでした。
どのようにformatは使ったらよいのでしょうか?
var
edit1:format;
begin
edit1.text:=inttostr( strtoint(edit2.text) div strtoint(edit3.text) );

edit1.text := floattostr( strtofloat(edit2.text) / strtofloat(edit3.text) );
306デフォルトの名無しさん:03/08/24 22:47
>>305
ありがとうございました。出ました。
これからdelphiはじめようと人間に作れそうなゲームってどんなのがありますか?
よろしくお願いします。
ブロク崩しがVBで作られていく過程が2chで
放映されてた時は大盛り上がりだったようですが

それを移植してみてはどうでせう。
スキルは付くのではないかしら。
FreeOnTerminate := trueしたTThreadを
Executeループ内である条件を検出してSelf.Terminateした時
デストラクタが呼ばれ無いんだけど何故ですか?

procedure TThread1.Execute;
begin
 repeat
  DoSomething...;
  if SomeCondition then Self.Terminate;
 until Terminated;
end;

こんなコードなんだけど、コンストラクタでSelf.FreeOnTerminate := trueしても、
生成したインスタンスにSomeThread.FreeOnTerminate := trueとしても
デストラクタが呼ばれない
もちろんdestructor Destroy; override;なので普通にFreeメソッド呼べば
デストラクトされる 謎
呼ばれたけども。
>>198
#127 (#$7F) DEL ... Deleteが抜けていますっ.
ショートカットが設定されたMainMenuを持つメインのフォームと
もう一つツール用のウィンドウの2枚のフォームで構成される
アプリケーションを作成する時に、
ツール用ウィンドウがアクティブでもメインのフォームの
ショートカットを有効にしたいのですが、どうすればいいでしょうか?
313デフォルトの名無しさん:03/08/25 21:45
かちゅ〜しゃのように、
更新したとき「更新されていますよ」ってメッセージを出すには、
どうしたらいいでしょうか?
314デフォルトの名無しさん:03/08/25 21:56
何が更新されたとき?
315 ◇鼻毛:03/08/25 21:57
        
316デフォルトの名無しさん:03/08/25 22:00
>>314
パンツ
>>313
メッセージボックスを出したい?
ShowMessage('');
MessageDlg('', mtWarning, [mbOK], 0);
ちょっと教えてください。
ブロク崩しが話題に上がっていたので、勉強のつもりで作ってみようと思っていろいろとしてるんですが、
四角形を3列4行分描くものを作ろうとして、下のようにやったところ、コンパイルエラーは出ないんですが、実行時にデバッガ例外が発生とかいってうまく動かせません。
どうすればいいでしょうか?
var
Form1: TForm1;
Block:Array[0..4,0..3] of TShape;
Block_top:Integer;
Block_left:Integer;

procedure TForm1.FormCreate(Sender: TObject);
var
i1:Integer;
i2:Integer;
begin
Block_left:=16;
for i1:=0 to 4 do
begin
Block_top:=20;
for i2:=0 to 3 do
begin
Block[i1,i2].Left:=Block_left;
Block[i1,i2].top:=Block_top;
Block[i1,i2].Width:=20;
Block[i1,i2].height:=10;
Block[i1,i2].Brush.Color:=clRed;
Block_top:=Block_top+16;
end;
Block_left:=Block_left+24;
end;
end;
デバッガでステップ実行してエラーが出る直前の場所・i1, i2の値を調べてみろ。
320デフォルトの名無しさん:03/08/25 23:50
RichEditにたとえばこんな下のような文章を入力して、

”詳細はココをクリックしてください。”

ココをクリックしたときにRichEdit1SelectionChange
でイベント拾って処理を行うことには成功したのですが、
ココの部分にきたときにカーソルを変化(crHandPoint)
させるにはどうすればいいでしょうか?


321デフォルトの名無しさん:03/08/26 00:04
>>282
まだこのスレ見てるかな?

そのボタン(緑色のボタンだよね)はTSpeedButtonだよ。
自分でフォームに乗せてSpy++とかで見てごらん。出てこないから。
で、何で出てこないかというと、TSpeedButtonにはウィンドウハンドルがないから。
TWinControlから継承してないでしょ?Graphicから継承してる。
だからそれはボタンに見えるけど、実は単なる画だと分かる。

で、肝心のボタンの押し方だけど、これはそのボタンのある座標をSpy++で調べて、
そこへWM_LBUTTONDOWN/UPを送る、つまりマウスクリックをシミュレートしてやればいいよ。

Winny1の例だが(私もリスト更新ボタンが押したくて自作ソフト作ったんだよね)。

//更新
hWinny := FindWindow(nil, 'Winny v1.14');
if hWinny > 0 then
begin
SendMessage(hWinny, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(400, 10));
Sleep(100);
SendMessage(hWinny, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(400, 10));
Sleep(100);
SendMessage(hWinny, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(300, 40));
Sleep(100);
SendMessage(hWinny, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(300, 40));
end
else
MessageBox(frmNeedle.Handle, 'Winnyが見つかりません。', nil, MB_OK or MB_ICONERROR);
i1、i2の数値以前に
procedure TForm1.FormCreate(Sender: TObject);
begin
Block[0,0].Left:=20;
Block[0,0].Top:=20;
Block[0,0].Height:=20;
Block[0,0].width:=20;
end;
とやっても同じようなエラーが出てきます。
で、project.dprのソースが表示され
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run; ←ここの部分が反転しています。
end.
特に何が原因でエラーが起きたとか表示してくれません・・・。
BlockをCreateしてないんじゃないか
つーかデバッガの使い方覚えれ
つーかオブジェクトの生成・廃棄のやり方覚えれ
326デフォルトの名無しさん:03/08/26 01:30
Del製アプリってタスクバー右クリックしても
移動とかサイズ変更のメニューが出ないんだけど
どうやったら出せるようになるの?
これがないとあまりに不便で憤死しそうです。
>>326
ギコナビのソースをコピペ
>>324
エディタの左余白をクリックでブレークポイントをつけて実行
とまったら、F8でステップ。F7で関数内に行く。F4でカーソル位置まで実行など。
止まってるときは変数を選択してCTRL+F7で変数の中身を参照できる。など。
あとはヘルプを見れ。

>>325
var
 MyObject: TMyClass;
begin
 MyObject := TMyClass.Create; //生成
 try
  MyObject.MethodA(10);
 finally
  MyObject.Free; //破棄
 end;
end;
(´-`)。o ○ (最近じゃ、「教えろ」を「覚えれ」って言うのか…?)
330328:03/08/26 01:44
>>325
ごめんごめん。「覚えれ」だったのね。「教えれ」かと勘違いした(w
>>327
ソースの見方が分からないよ。。。
>>331
あ、アレね、別にソース見なくてもいいよ。てゆうか、あのソースからアソコの部分を取り出すの大変だよ
中村氏のサイトにあったソースをパクッ、、いや、、参考にしただけだから
http://www.asahi-net.or.jp/~HA3T-NKMR/tips025.htm









すみません、、丸ごとコピーしました
>>309
ヘルプとソース嫁! TerminateはTerminatedをTrueにするだけのメソッド。

>>312
アクションの使い方をマスターしろ!それで全部解決する。
ソース厨ウザ。スレタイ嫁。
質問がレベル高すぎ!
>>332
試してみたけどうまくいかない。。。
type
TNewStyleMainForm = class(TForm)
procedure FormCreate(Sender: TObject);
end;
TNewStyleForm = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);

このpublishedでvirtualでないメソッドって何者?
これだとどこからも呼び出されないような気が。
というか実際呼び出されないんだけど。
337336:03/08/26 09:57
って単なるイベントハンドラか。
でもやっぱりフォームが出ないよ。
338312:03/08/26 10:39
>333
え? アクションで出来るの?
…といっても、今ひとつActionがよく分からないんですが…。
もう少しヒントを (;´Д`)
Delphi で使うには,どんなヘッダーを書いたらいいでしょうか?
---tp.h begins
#ifdef DLL_EXPORT
#define DLL_DECLSPEC __declspec(dllexport)
#else
#define DLL_DECLSPEC __declspec(dllimport)
#endif
typedef struct _tp tp;
DLL_DECLSPEC tp* foo (tp* point, int x, int y);
DLL_DECLSPEC void bar(tp* point);
---tp.h ends
---tp.c begins
#define DLL_EXPORT
#include <stdio.h>
#include "tp.h"
typedef struct _tp
{
int num1; int num2;
} tp;

DLL_DECLSPEC tp* foo (tp* point, int x, int y)
{
point->num1 = x; point->num2 = y;
return point;
}

DLL_DECLSPEC void bar(tp* point)
{
printf("%d %d\n", point->num1, point->num2);
}
---tp.c ends
DelphiとKylixってコードそのまんま移植できたりするんですか?
341デフォルトの名無しさん:03/08/26 13:11
ホームページを表示してそれを印刷するアプリを作りたいのですが、
HPを印刷するにはどうすれば良いでしょう?
342339:03/08/26 13:20
よくわからないのは、
typedef struct _tp tp;
のところです。
>>340
Delphi CLX だけで作ったもの -> ほとんどそのまま Kylixで動く
Delphi VCL で作ったもの -> CLXに一度移植 ->
344339:03/08/26 14:21
type
_tp = record
num1 : Integer;
num2 : Integer;
end.
p_tp = ^_tp;
とやるしか、思いつかないのですが。
>>344
NULLを渡さないのであれば、 Delphiでは参照渡しにする事も多いね。
ただ、帰り値がポインタで返すのだからポインタでもいいかな
>>338
アクション以前にほかのウィンドウがアクティブでもMainFormのMainMenuのショートカットは効くのだが。
ソースを読めばわかるが、VCLは独自にショートカット処理を行っている。
ショートカットのキーの組み合わせが発生した場合、VCLは順番(順序はどうだったか忘れたが)に
ショートカットを持っているアクションやコントロールがないか調べて、一番最初のショートカットを持っていて処理を受理する
アクションまたはコントロールでその走査は終わるようになっている。
標準アクションなどのおかげで、逆に標準コントロールのショートカットが処理されなくなることも・・・。(Delphi7では改善されているぽい)

もし本当にショートカットが発生してないのならば、どこかで既に処理されちゃっているか、または自分自身の設定ミスかなにかだろう。
>>343
ありがと。
>346
それがMainForm以外にMainMenu、MenuBarコンポはりつけてやっているんですよ。
そのフォームであるショートカットを押すとサブフォームが開いたり閉じたり、
ってしようとしたら、開いた後そのフォームがアクティブでなくなるので
反応しなくなる感じです…。
(MenuBarコンポはBorlandが提供しているCDに入ってないコンポです)

どっか、設定しなおしたら直るのかなぁ…
TThreadで、コンストラクタでプライオリティをtpLowestにした場合
終了するときWaitForするとえらい終了に時間がかかるんで
DoTerminateをオーバーライドしてそこでtpNormalに戻すようにしたんですけど
それでもやっぱりtpLowestの時と同じくらい時間がかかります

ちなみに最初からtpNormalのままならすぐに処理が回ってきて素直に終了してくれます
あとtpLowestにするタイミングを変えても終了までかなり待たされます(当たり前か)

Executeの中身はtpLowestで実行してTerminateされたらすぐ終了できるようにするには
どうしたらいいんでしょうか?
>>348
Application.OnShortCutで回避を。
TApplicationEventsを使えるバージョンならば、TApplicationEventsのOnShortCutでも同様なことが可能。

procedure TForm1.ApplicationEvents1ShortCut(var Msg: TWMKey;
var Handled: Boolean);
begin
Handled := IsShortCut(Msg);
end;

こんな感じ。Screen.ActiveCustomFormで処理するかどうか判定つけるのもよいだろう。
>>349
プライオリティの問題ではない。Terminatedをチェックする頻度を上げるかアルゴリズムの見直しをする。
WaitForで時間がかかるのは、スレッドが終了しない、つまりExecuteメソッドが終わっていないことが考えられる。
そこらへんをきちっと調べてみる。
>350
対象のサブフォームのFormShortCutで同様のような感じで、
メインのフォームのメニューのIsShortCutを呼ぶ、という形で
うまく行きました。

ありがと〜 (^ー^)v
>>351
いや、Executeの中ではまだSleep(1)しかしてないんですけど・・・
プライオリティをptNormalにすれば即時終了するのにプライオリティの問題ではないんですか?
すみません質問させてください。
あるWord型をリトルエンディアンとしてファイルに書き込みたいのですが、
何かいい方法があればお教えいただけませんか?

ビットシフトを考えたのですが、どうもうまくいきませんでした。
よろしくお願いします。
>>354
Hi
Lo
356341:03/08/26 17:53
ホームページの表示は
TWebBrowserで出来ましたが、これを印刷する事ができません。
環境はWinXP、Delphi7 Professionalです。
宜しくお願いします。
>>355
ありがとうございました。
>>353
原因を決め付けないでどこで処理の時間がかかっているか調べる。
かなり待たせされるというのが実測でどのくらいか知らないが5秒以上とかなら、
明らかに自身のコーディング(設計)に問題がある可能性が高い。
プライオリティの違いでたまたまバグが表面化されたことも考えられるし。
試しに、今まで提示された条件で同様のテストを行ったけど問題の現象は確認できませんでした。
>>349
どーせバックグラウンドのWinnyが負荷かけまくってるんだろ。
タスクマネージャでCPUが100%になってないか確認してみな。
だからptNormalにすりゃ普通に終了するんだっつーの おまいらアホか?
優先度が低くならないと発現しないバグって何だよ 聞いたことねぇ
もういいよ、おまいらよりアホな俺にはどうせ無理だよ クソが
FileListBoxで選択したファイルを開こうとしているのですが
ファイルが選択されていない状態ですとエラーを吐いてしまいます。
選択された状態ですときちんと動作してくれます。
このエラーを吐かない様にするにはどうすればよいですか?
>>361 条件式一つ書けば(・∀・)イイ!!
if でなんとかが true なら 開く  って感じで。細かいことは調べてないからわからん
>>362
そのいい加減さが(・∀・)イイ!!
364デフォルトの名無しさん:03/08/26 20:36
editに入れた数値をstringgridに表したくて
edit1.text :=inttostr(strtoint(cells[1.1]);
と書いてみましたが、上手く表示されませんでした。
どのように書いたらいいでしょうか?
>>361
ItemIndex を見ればいいんじゃないか?
-1 ならファイルが選択されていないって事だから
366722:03/08/26 21:01
>>206を参考にして色々とやってみたのですが、やっぱり出来ませんでした。

他のソフトをアクティブにしたりボタンを押したりは簡単にできるのですが、
スクロールだけがどうしても出来ません。

すみませんがどなたか、例えばexplolerの左半分の画面をスクロールするソースを
書いていただけないでしょうか?
367366:03/08/26 21:02
>>366の名前が722になってるのは嘘です。
>>366>>203です。
よろしくお願いします。
>>364
その2重の変換って必要なのか?
369デフォルトの名無しさん:03/08/26 21:17
>>368
必要ないですね。失礼
漏れが書いたものはcellsが未定義になってしまい
実行されないんです。
370282:03/08/26 21:23
見てますです。
更新されました。ちょっと感動。感謝です。

あとは、最小化されているときは最大化してからとか、
この技法をny2に応用とか、色々頑張ってみます
371282:03/08/26 21:24
>>370
失礼 >>321さんへです
>>364, >>369
逆じゃないか?
StringGrid1.Cells[1,1] := Edit1.Text;

未定義なのはたぶん Cells の前の StringGrid を省いたから
373デフォルトの名無しさん:03/08/26 21:38
>>372
ありがとうございます。逆でした。

>>366
マウス操作を真似ようとしてるんだったら、
ボタン押すのと離すのの間にWM_MOUSEMOVE入れてみ。
スクロールメッセージ送ってるんだったら、
wParamとlParamを適切に設定してるか確認。
おまえら>>279は無視ですか_| ̄|○
あえてスルー
377366:03/08/26 22:28
>>>374
レスありがとうございます。
WM_MouseMoveを間に入れてみたんですけど駄目でした。
SendMessage(Wnd,WM_LBUTTONDOWN,0,0);
の0,0の部分を0,MakeLParam(xpos,ypos)にしたり、左ボタンクリックじゃなくて
>>206で教えてもらったWM_HScrollに変えてみたりしたのですけど駄目でした。
考えつく事を総当たりしてみたと思うのですが、出来ないのですみませんが、
ソースくれくれ厨にならせてください。
どなたかよろしくお願いします。
>>377
WM_LBUTTONDOWN ← 移動「前」の座標
WM_MOUSEMOVE ← 移動「後」の座標
WM_LBUTTONUP ← 移動「後」の座標
こうなってるか?

スクロールメッセージ使うなら、たとえば
SendMessage(Wnd, WM_VSCROLL, SB_LINEDOWN, 0)
で下に1行スクロール。後は調べてくれ。
379366:03/08/26 23:43
>>378
たびたびありがとうございます。
はい、座標はきちんと移動させています。それでも駄目なんですよ。
SB_LineDownだけじゃなくて、SB_PageDownも試したのですが駄目です。
スクロールバー以外の場所だったらWM_LButtonDownさせる事ができますけど、
スクロールバーの上だけはどうしてもWM_LButtonDown状態にさせることができません。
スクロールバーの上下矢印の上でもクリックさせることができません。
他の場所だったら簡単に押せるのですけど・・・

どなたか解決法を知らないでしょうか?
>>335
そうですね.
というわけで誘導.

超初心者向けを超えていそうな質問はこちらへ…

ミ,,゚Д゚彡フサギコとモナーのDelphi質問相談談話室2
http://pc2.2ch.net/test/read.cgi/tech/1061142216/

私が書くと宣伝みたいですが….
PageControl1
 Tabsheet1
  Panel1
 TabSheet2
  Panel2…
こんな感じになってるとします
PageControl1のActivePageIndex又はActivePageで
Panelを取得したいのですが
どうすればできるでしょうか
>>381 無理矢理書いてみました タブの中にパネル1つだけなら使えるのやも・・・

procedure TForm1.PageControl1Change(Sender: TObject);
begin
showmessage( (PageControl1.ActivePage.Controls[0] as Tpanel).name);
end;
>>365
ありまとー(ノ^o^)ノ
パネルにそれっぽい名前付けてForm1.FindComp一発じゃねーの?
>>382
とりあえず一つだけなのでできそうです
ありがとうございました
>>379
スクロールバーは非クライアント領域だから
WM_NCLBUTTONUP, WM_NCLBUTTONDOWNでないの?
>>366
エクスプローラー左側をスクロール

function EnumChildProc(Handle: HWND; Param: PDWORD): Boolean; stdcall;
var
 S: string;
 Size: Integer;
begin
 SetLength(S, $FF);
 Size := GetClassName(Handle, PChar(S), $FF);
 SetLength(S, Size);
 Result := S <> 'SysTreeView32';
 if Result = False then Param^ := Handle;

end;

procedure TForm1.Button1Click(Sender: TObject);
var
 ExpHandle, TargetHandle: HWND;
begin
 ExpHandle := FindWindow('ExploreWClass', nil);
 if ExpHandle = HWND(nil) then Exit;
 EnumChildWindows(ExpHandle, @EnumChildProc, Integer(@TargetHandle));
 SendMessage(TargetHandle, WM_VSCROLL, MakeLong(SB_LINEDOWN, 0), 0);

end;
25000x25000位のビットマップを扱えるコンポーネントってありませんか?
TBigBitMapだといろいろできなくてダメです・・
素のTBitmapにはサイズの制限があるの?どのくらい?
ボタンクリックで
Form := TForm.Create(Main);
Form.Show;
のようにウィンドウをどんどん作った場合、
ある特定のウィンドウを指定して閉じることって可能ですか?

作ったフォームごとにユニークな数字を登録していって、
5番目に作ったウィンドウだけ消すとかしたいんですが。

それともFormを配列にしたりして、Form[FormNum]等に
しないとできません?
ObjectListで持っておくのが無難かも。
>>391
ありがとうございました。試してみました。
Form := Tform.Create(Main);
ObjectList.Add(Form);
と追加し、
ObjectList.Delete(0);
ObjectList.Capacity := 0;
等で可能なようです。
ちなみに、Deleteする前に解放するとエラーになるし、
ObjectList.Free;するとウィンドウも消えてしまうので、、
完全にポインタでオブジェクトを格納してくれているみたいで安心しました。
ただ、これで本当にメモリがすべて解放されているかどうか、ちょっと不安ですw

何はともあれ、これでいけそうです。ありがとうございました。
ちょっと気になったんだけどBitmapとかをCreateしたあとFreeしないとどうなるの?
>393
ごみが溜まっていきます。
>>242が自己解決

CreateDeviceのhFocusWindowはApplication.Handleにして、
d3dpp.hDeviceWindowはApplication.MainForm.Handleにしてやると
万事上手くいったように見える

これであってるの・・・? なんかハックな気分なんだけど・・・
そうなった理由がわからないのに上手くいったように見えるのが一番怖い
>>394
メモリに?
397366:03/08/27 17:47
>>387
出来ました。ありがとう。
SendMessage(TargetHandle, WM_VSCROLL, MakeLong(SB_LINEDOWN, 0), 0);
の設定が悪かったみたいです。

>>394
だから、ゴミが溜まるとどうなるか、と聞いている
>>398
どうもならん
ゴミがたまるだけ
イヤなら捨てろ

まぁアプリ終了すればOSが勝手に片付けるが
>>398
ゴミが一杯なるとHDD内にガスが発生し高温になると爆発します。
画像のスクロールの仕方について教えてください。
>>401
質問の内容がそれだけじゃ、じぃちゃんの名にかけても返答は無理だ。
>>401
スクロールさせたいだけなら、
TScrollBoxの上に乗せるとか
>>401
座標をちょっとずつずらして表示する
405デフォルトの名無しさん:03/08/28 01:31
Canvas.TextOutでWingdingsなどの特殊なフォントを描画するにはどうすればいいでしょうか?
まるで特殊でないフォントなら描画できるような言い方だな。
TCanvas.Font.Name
>>407
var str : string;

Form1.Canvas.Name := ' Wingdings ';
Form1.Canvas.TextOut( 0, 0, str );

strになんて入れたらいいのかがわからないんですよ・・。
すみません、

Form1.Canvas.Name := ' Wingdings ';

Form1.Canvas.Font.Name := ' Wingdings ';

の間違いです。
>>408
同じ文字コードの字を入れとけば良いんじゃない?
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVXXYZ
1234567890
-=^~\|@`[{:*;+]}\_//.>,<
>>410
うーん、

Form1.Canvas.Font.Name := 'Wingdings';
Form1.Canvas.TextOut( 0, 0, #80 );

こうしてみてもだめぽ。「P」としか描画されない。

Form1のFont.Nameを 'Wingdings'にしたらうまくいったけど、
Canvasはだめだぁ。
Canvas.Font.Name := 'Wingdings';
Canvas.Font.Charset:=SYMBOL_CHARSET;
Canvas.TextOut(0, 0, 'P');
だめなのはおまえだぁ
>>416
できた! ありがとう!
俺が駄目だったようです
>>412
Charsetを指定汁!
いやあ、そんなお礼なんて。
TActionMainMenuBarでXPスタイルのメニューバーは出来るんですがXPスタイルのポップアップメニューはどうすれば実現できますか?それらしいコンポーネントが見あたらないんですが。
TPopupActionBarEx というのがAdditionalの右のほうにない?
なければ、
http://codecentral.borland.com/codecentral/ccweb.exe/listing?id=19151
のパッチを当てる。
サイトの解説によると、リリースされたやつには入ってなかったらしいけど。
俺の環境はパッチ済みなのでどうだったか覚えていない。
パッチ済み割れ
クラスのインスタンスのコピーをしたいんですが、
クラスを単純に代入してもそれは参照がコピーされた状態ですよね?(A := B;)
コピーをするにはどうするのがいいのでしょうか?
クラスにAssignメソッドの実装?
>>420
正解
422420:03/08/28 10:53
>421
TPersistentのAssignで自動的に…ってことは無理ですか(;´Д`)
何かAssignの一般的な実装書いているとこ無いですかね?
>>422
無理。
TStrings.Assign でも読むべし。
>>420-423
確かにAssignメソッドの実装方法の見本ならVCLのソースを見るのが一番
ですが,Assignならこんな感じで.
TTestPerson = class(TPersistent)
private
FName: string;
FAge: integer;
public
procedure Assign(Source: TPersistent); override;
property Name: string read FName write FName;
property Age: integer read FAge write FAge;
end;

//■外部のオブジェクトを複写する(TPersistentを直接継承している場合の例)
procedure TTestPerson.Assign(Source: TPersistent);
begin
//●もしソースがTTestPersonかその派生クラスならNameとIDを複写
if Source is TTestPerson then
begin
FName := (Source as TTestPerson).Name;
FAge := (Source as TTestPerson).Age;
end
//●それ以外(複写を許可しない)場合は
// 親クラス(TPersistent)のAssignメソッドを実行する
// (内部でEConvertError例外が生成される)
else
inherited;
end;
425420:03/08/28 16:08
>424
ありがとう、兄貴!( ̄▽ ̄)

実は、
ttp://hp.vector.co.jp/authors/VA009712/take/delphi/pointer.htm
のクラスに
ttp://halbow.cool.ne.jp/VCL04.html
のSave・Load・Assignをミックスしようとしているんですが、
TStringsとかのAssignと全然やり方が違うので…。

ところで、このリストの仕組みでListAクラスとListBクラスを用意して、
ListAが管理するItemAクラスはListBをプロパティとして持つ状態にしたいのですが、
Save・Loadがうまく行きません。
TWriterでうまく書けてない感じなんですが、WriteBuffer・ReadBufferに変えたら
うまく行った様な感じです。
どうしてなんでしょう? TReader、TWriterに問題あり? (;´Д`)
スコープpublishedにしてるか?
publishedプロパティは定義しておくだけでTPersistent派生のクラスはストリーム保存される
428420:03/08/28 17:05
>426-427
TPersistentは継承して無いです。はい。

Save時にItemAのデータの後にListBのSaveToStream呼ぶようにしたら、
Load時に、
 ・書き込んだ数値が取得できない(0が返ってきた)
 ・ReadStringメソッドで不正なプロパティです、のエラーが発生するようになる
って症状なのですよ…。

ところで、publishedがストリーム保存されるのは、
コンポーネントの時の話じゃないんですか?
429デフォルトの名無しさん:03/08/28 21:07
教えてください。
このスレを読んでるとWinXPだと動かないことはないけど支障がある場合がある、みたいですが、
初めてプログラム言語を勉強をしている者に対しては必要十分な機能でしょうか?
>>429
つうか初めてプログラム組むのにDel使って、すぐに機能に不満がでるなら
超天才プログラマか、どこかで勘違いしているかのどっちかだろ。
今からはじめるならDelphi覚える意味は無いな。
C#やった方がいいよ。
始める前からうだうだ言う香具師はまず伸びないから安心しる
>>432
いいこと言うね〜
429です。
ごめんなさい。なんかうまく伝わらなかったんですけど、XPでも支障はないですか?
おまえに支障がある
StringGridの特定のセルに色付けしたいのです。
DrawCellってイベントを使うとこまでは分かったのですが、
色づけの領域を求めるやり方が分かりません。。。
どうしたらいいんでしょうか
>>434
んなもん初めて聞いた
>437
>429が言いたいのはDelphi6 Per版のVisualStyleについての話ではないだろうか…
クラスの参照(アドレス)をStreamに書きたいのですが、
Stream.ReadBuffer(FList, SizeOf(Pointer(TList)));
で正しいのでしょうか…
440デフォルトの名無しさん:03/08/28 22:51
Delphi7で組んだソースをDelphi5で読ませることはできる?
button,Opendialog,timer,labelぐらいしか使ってないんだけど。
441439:03/08/28 22:57
>439
WriteとRead間違えた…

まぁ、要はストリームに書いたクラスの参照を他のに写してやりたいのです。

Stream.WriteBuffer(ListA, SizeOf(Pointer(TList)));
して、
Stream.ReadBuffer(ListB, SizeOf(Pointer(TList)));

一見、うまく行っているのですが、EXE終了時に何故かAccessViolation…
>>441
お前は、基礎からDelphiを勉強しなおす必要がある。DelphiのクラスはC++系とは違うことを理解汁!
特定のフォームがアクティブで、キーが押されたときに特定の処理を
行うにはどうすればいいのでしょうか?Form.KeyDownだと他の
コンポーネントにフォーカスがいくとうまくいんです。
444439:03/08/28 23:42
>442
(;゚Д゚) ガーン

「こんなことはしちゃイカーん!」
ってのが結論ですかね…(;´Д`)
つーかListB:=ListAで良いじゃん。
446440:03/08/29 00:09
誰かおいらのお馬鹿な質問の相手をしてくれ
そんなことするのはお前だけ。
自分で試してレポートしろ。
たぶん439は=で中身がコピーされると思っていたんだな。Delphiのクラスのインスタンスは
単なるポインタなのでそういうことはできない。(そういう仕様) C++のようにいきなり構造体のような感じじゃないのだ。
ちなみにそのポインタのアドレスは何を示しているかと言うと、VMTやらメンバ変数やらまあ色々なものが列挙されていて
その配置はRTTIが生成されているもの以外は外から取得するのは難しいです。VMTくらいは無理やりできるけど。
で、中身を何かに書き出したり復元するには、そういった実装がないものはそれを行うコードを書く必要がある。
>>440
既出だが、*.dfmはDelphi6以降非ASCII文字はエンコードされるので、一旦6以上のDelphiでテキスト表示してDelphi5にコピペするか
ツール使って変換する必要がある。
>>443
Screen.ActiveCustomFormあたりで判別汁!
>>443
・TForm.KeyPreview:=true;。
・TActionManagerかTActionListでTActionを作ってショートカットキーを設定。
452436:03/08/29 00:29
なんで俺は無視されてますか
↓次のレス予想するぜ!……出ました!「オナニードロドロ」!
>>436
求める必要ないだろ。TDrawCellEventについてヘルプ嫁。
455453:03/08/29 00:41
外れたぜ!
456440:03/08/29 00:45
>>449
レスありがとう。
そのツールってどこに置いてますか?
ぐぐってみたけど、検索キーが悪いのか引っかからないもんで。
457デフォルトの名無しさん:03/08/29 01:09
Delphi6PersonalでShlObjを使ってフォルダ選択ダイアログを出そうと思
い以下のように書いたのですが、コンパイルは通るものの選択してOKを
押すとアクセスできないメモリに書き込みました、とエラーが出てしま
います。
イマイチ原因がつかめないのですが何故だかお教え頂けますでしょうか。
begin
GetMem(PPath, MAX_PATH);
try
with Browse do
begin
hwndOwner := hDialog;
pidlRoot := nil;
lpszTitle := 'フォルダの選択';
ulFlags := BIF_RETURNONLYFSDIRS;
lpfn := nil;
lParam := 0;
end;
IDList := SHBrowseForFolder(Browse);
if IDList <> nil then
begin
// 選択されたフォルダ名の処理部分
end;
finally
FreeMem(PPath, MAX_PATH);
end;
end;
>458
たぶん
Browse.pszDisplayName := PPath;
が抜けてるような気がする
参考
ttp://forum.nifty.com/fdelphi/samples/01269.html
460439:03/08/29 09:29
>448
いえ、浅いコピーになるのは分かっているので、
クラスにAssign実装して深いコピーにしているのですが、
時には浅いコピーがしたいので、
そういう時は参照だけコピーされるようにしたいのです。
>>445の言うとおり内容としては確かにListB := ListAです…)
461458:03/08/29 09:37
>>456
できました。
低レベルな内容に答えて頂いてありがとうございました。
>>460
単純に参照のアドレス突っ込んでも駄目だろうな。
ロード時には当然アドレス変わってる可能性があるから。

でもフォーム上のコンポーネントの他のコンポーネントへの参照や
イベントハンドラはちゃんと読み書きできてるから何かありそうな気はする。
464439:03/08/29 12:10
>462
うーん、実際にはストリームに書いて、
即読み出して入れてるんで、
インスタンスはある状態なんですけどね。

まー、素直にListA := ListBする方向に変更しマッスル
>>462
RTTIマジック。publishedプロパティのストリームから保存復元コードを追っていくとおもしろいよ。
ドキュメントにはないDelphiコンパイラの仕様が見えてくる。
466デフォルトの名無しさん:03/08/29 15:10
Delphi6 personalでTScrollBarをXPスタイルにする方法ありますか?
TScrollBoxはXPスタイルなんですけどね・・・。

「BorlandDelphiリファレンスガイド 〜6&7 Personal対応 」
って本に方法が載ってるみたいですけどお金なくて買えません。

それは、
「全体はクラシック、
ScrollBarなど自動で対応しちゃうコンポは
類似コンポも含めてXPスタイルに」
ってことかな?

俺も知りたい…
>>467
ScrollBarって一番目立つ部分だと思うし、
取りあえずScrollBarだけXPスタイルに出来ればいいんですが。
Delphi7のVCLのソースを読めばわかるけど、XPスタイルにするにはリソースを追加するだけではなく
描画コードなども最適化する必要がある。
最適化コストを考えると素直にDelphi7を導入するのが楽です。
>>469
うーん、かなり手間が掛かるようですね。
delphi7導入を検討してみます。
しかし、クラシックスタイルならば、TScrollBarはやっぱりクラシックのまま
(他のコンポーネントの自動的につくスクロールバーはXPスタイル)

…(;´Д`)
>>466-470
楽したいと思ったら、VCL
http://www.tmssoftware.com/winxp.htm
を貼り付けてActive := Trueにするとできる。
>>466
Manifestつければスクロールバーもビジュアルスタイル適用されるよ。
Manifestだけじゃ無理なのは、BitBtn TabSheet GroupBox StatusBar Coolbar
あたりかな。他にもあったとおもう。
Mike Lischke 氏のページ http://www.delphi-gems.com/
(現在鯖引っ越し中の模様)
にある ThemeManager.zip を入れればDelphi4-6でも各コントロールに
WinXPビジュアルスタイルを適用できる。
ちなみに、Delphi7の Themes.pas ユニットも同氏が携わっている。
クラシックスタイルながらスクロールバーだけXPスタイルになるので、
TScrollBarも同じようにできたらなぁ…
(全体をXPスタイルにするのではなく)
>>475
無理。
477デフォルトの名無しさん:03/08/29 19:32
フォントのスタイルを設定ファイルに保存したいのですが、以下のサイトを
参考に組み込んだところ、太字で保存されませんでした。

http://forum.nifty.com/fdelphi/faq/00041.htm

正常に保存させる方法を教えてください。
>>477
サンプルにある INIファイルに情報が反映されるのか、INIファイルを
エディタで調べて、保存されているかどうかを見る。
INIファイルに太字の情報が保存されていなかったら、IniFileに書き込むときのコードに
誤りあり。
INIファイルに太字の情報が保存されていたら、読み取るところのコードに
誤りがある。
どちらかをはっきり汁。
479 :03/08/29 20:11
>>478

INIファイルの情報を見ると、Style、Pitchは太字に変更しても0のままに
なります。

[Font]
Style=0
Pitch=0
Name=MS Pゴシック
Size=9
WriteIntegerする直前の各変数の値は?
481 :03/08/29 20:37
すみません。

  FStyle:=FontDialog.Font.Style;
  FPitch:=FontDialog.Font.Pitch;

この2つを、 if FontDialog.Execute thenの上に書いていました。
下のようにすると、問題なくINIファイルに保存できました。
お恥ずかしい・・・逝ってきます。

if FontDialog.Execute then
begin

  FStyle:=FontDialog.Font.Style;
  FPitch:=FontDialog.Font.Pitch;

FontIni :=Tinifile.Create(ChangeFileExt(ParamStr(0), '.ini'));
try
FontIni.WriteInteger('Font','Style',Fs);
FontIni.WriteInteger('Font','Pitch',Fp);
FontIni.WriteString('Font', 'Name', FontDialog.Font.Name);
FontIni.WriteInteger('Font', 'Size', FontDialog.Font.Size);

finally FontIni.Free;
end;
end;
>>472
インスコ方法教えてください_| ̄|○
パッケージのインストールやコンポーネントのインストールを試しましたが無理でした
6Perです
しかし古臭いUIのDel6Per製アプリが充満したらイメージ悪くならないか。
早く最新版のダウンロード版Per公開しろ。
MS-Officeも古くさいUIでつね。
>>482
別にインスコしなくてもいい。
パスの通ったところにファイルおいて
{$R WinXP.RES}
を追加すれ。
お前らD7proくらい買え。
Winnyを使えば簡単に手にはいるけどやるなよ。
あれはポエムを落としたり匿名で公開するためのソフトウェアだ。
シリアルが手に入らないから落としたけど使えん。
OLEで自作アプリからエクセルをコントロールすることは何とかできるのですが、
人が直接セルに何か入力した場合とかを簡単に知る方法って有るのでしょうか?

ふっくとかいわれてもできないれべるのにんげんでふ。
>>489
わかるようになれ
以上
491デフォルトの名無しさん:03/08/30 00:09
>>489
OLEでExcelのイベントを補足しろ。
492デフォルトの名無しさん:03/08/30 00:45
StringGridで、列ごとに中央寄せとか左寄せとかで表示したいのですが
どのプロパティを使えばよいのでしょうか?
探すのが下手なようでなかなか見つかりません(泣
それと、VBみたいにボタンの色は変えられないのでしょうか?
何故か自分はボタンの色どころかボタンのフォント色まで変えられません・・・
FontのColorを変えたのに色が変わらなかったです・・・(滝汗
変な配色はやめてください。
>>492
たしか、標準のTButtonでは色の変更はできなかったはずです。
Delphian Worldにそれ対応のコンポーネントがフリーであるから
それをつかってみるのも吉
495デフォルトの名無しさん:03/08/30 03:14
DelphiMLネタ

halbowさん、いつになく怒ってるね
こんなhalbowさん見たの初めて
中の人いつもと違うから
>>492
StringGridコンポにはそういう機能はありません.
その代わり,自分でテキストを描くことができます.

自分で描くためにはこのコンポのOnDrawCellイベントを(ヘルプ参照),
中央に描くためにはWindows APIのDrawTextを使います.
http://www.microsoft.com/japan/developer/library/jpgdipf/_win32_drawtext.htm

procedure TP11MainForm.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
const
cDrawFormat = DT_NOPREFIX or DT_CENTER or DT_SINGLELINE or DT_VCENTER;
cMargin = 2; // 周囲のすき間の幅
var
theGrid: TStringGrid;
InnerRect: TRect; // 周囲のすき間を除いた四角い領域
begin
theGrid := Sender as TStringGrid;
// 周囲のすき間を除いた領域を求める
InnerRect := Rect;
InflateRect(InnerRect, -cMargin, -cMargin); // WindowsのInflateRect API
// 背景の塗りつぶし
theGrid.Canvas.FillRect(Rect);
// テキストの描画
DrawText(theGrid.Canvas.Handle, PChar(theGrid.Cells[ACol, ARow]), -1, InnerRect, cDrawFormat); // WindowsのDrawText API
end;
>>490
そうか、ふっくをつかえということか
499デフォルトの名無しさん:03/08/30 10:38
>>492
拡張StringGrid
セル内の文字列の配置(右寄せ・左寄せ・中央寄せ)が可能なコンポーネント
です。フリーウェア・ソース付き。
Delphi Worldにあります。
http://home1.infonia.ne.jp/~delphian/delphi/
言語じゃなくてIDEの質問です

ソースコード編集中にF1で呼べるヘルプに
新しいヘルプファイルを追加する方法ってどうするんでしたっけ?

JCLのヘルプがちゃっかり組み込まれてるんで
昔自分でやったはずなんですけど
どうしても思い出せないのです・・・
>>500
Pro以上なら ヘルプの所に カスタマイズというメニューがありませんか?
>>501
ごめんなさい
Del6パーソナルです・・・
>>502
インストールしたフォルダの .txt は一応読んでみた?
>>503
Delphiのですか?

何がしたいかというと
自分で作った.hlpファイルもF1で呼び出せるようにしたいんです

ヘルプコンテキストの事とかは並行して勉強中なので
とにかくF1押したときの検索対象に
新しい.hlpファイルを追加する方法を知りたいんです
>>504
だからさ、 Win9x系でヘルプが大きすぎて入らない時の為の対策がかかれているでしょ?
確か、CLXとVCLで分ける方法だったかな?
それとやるべき作業は同じだろ?
halbowさんがどうして怒ってるのかやりとり教えて。
もうML脱退したから分からんのです。
あれを怒ってるととらえるか。人が減ってみんな必死になってるのか?
中村拓男氏もライターになって以前ほど投稿数もなくなったし。
508ああ:03/08/31 01:49
プログラムでパスワードとか
どうやって保存してますか?
複数の人が使うパソコンとかだと
そのまま保存するわけにもいけないし。
パスワードはどこで処理するの?
ネットワークに対して送信するのか
単にフォームで入力されたパスワードと一致するかどうかを確認するのか。
510ああ:03/08/31 01:57
複数のユーザ名とパスワードを
登録して使うプログラムなのですが、
(具体的にはメールソフトです)
アカウント情報の保存をどうしようかと
考えてます。
そしたらスクランブルかけた独自のバイナリファイルじゃないの。
これだけだとプログラム解析されたらおしまいなので
さらにセキュアにしたければオプションで指定可能なパスワード
(メールアカウントの物じゃなくてバイナリファイルにアクセスする為の物)
をキーにしてバイナリファイルの暗号化・複合化をするとか。
512ああ:03/08/31 02:18
>>511
自前のルーチンでわかりにくくしても、
暗号強度にすこし不安を感じます。
本気で取り組むとしたら、やはり暗号理論の
勉強しなきゃだめなような気が
してきました。
>>512
パスワード強制すると忘れた場合に悲惨なことになるからオプションがいいかもね。
MSのOutlookはそうなってる。
あと共通鍵型の暗号化ルーチンは無理して自作しなくても
OpenSSLのコードがそのまま使えるよ。
CのコードだからBCCでビルドする必要があるけど。
514デフォルトの名無しさん:03/08/31 15:22
StringGridで、Shiftを押しながら↓キーを押して複数選択して、
その選択している範囲を知るにはどうすればいいですか?

Row1〜10が選択(青い状態になっている)されています
といったような情報を知りたいのです。よろしくお願いします。
Selection
StringGrid大人気だな。
一体何に使ってるの?
517514:03/08/31 17:40
>>515
ありがとうございましたm(_ _)m
518 :03/08/31 23:53
コンポーネントを必殺技のように叫んでみるシリーズ
「ストリンンッ…グッ……グリッドォッ!」
コンポーネントを2ch風に書いてみるシリーズ
「ストリソググリド」
520デフォルトの名無しさん:03/09/01 00:32
質問よろしいですか?StringGridについてなんですが。

以下のように入力しておいて、
[非表示の行は表示しない]
[全部表示する]
とボタンを用意して、表示/非表示を切り替えるにはどうすればよいでしょうか?

StringGrid1.Cells[1, 1] := '非表示';
StringGrid1.Cells[1, 2] := '';

イメージとしては[非表示の行は表示しない]ボタンをクリックしたときに、
こんな感じにしたいのですが、
これじゃ当然エラーが出てしまいます。
for i := 1 to StringGrid1.RowCount - 1 do
begin
if StringGrid1.Cells[1, i] = '非表示' then
StringGrid1.Rows[1].Visible := False;
end;

よろしくお願いします。
StringGrid1.RowHeights[1] := 0;
ファイルを開くのにTFileStreamを使用してるんですが、
巨大なファイル(900KBあたりから)が開けません。
TStringListを使用しても開けないんですが、こういったファイルを開くのはどうすればいいのでしょうか?

FS := TFileStream.Create(Edit1.Text,fmOpenRead);
Memo1.Lines.LoadFromStream(FS);
FS.Free;
> 巨大なファイル(900KBあたりから)が開けません。

10MB だって楽勝だけど?
524デフォルトの名無しさん:03/09/01 06:48
TQuery で、CHAR 型サイズ 1 のフィールドを取ってきています。
DB 上スペース 1 文字のもが、空文字で取れるのですが、そういう
ものなのでしょうか?
>>522
エラーメッセージくらい書け
>>522
Q1 Win9x?
Q2 900Kも開けた?

アドバイス: TMemo はWindowsコントロールなのでWinの制限がそのままです
メモ帳の制限と同じです。
> TStringListを使用しても開けないんですが
Memo関係ないってことか?
文字列の一行目をケツに持ってくるっつぅ関数二つほど考えてみたんですが
function Spiral(const s:widestring):string;
var
Len:Integer;
begin
Len:=Length(s);
Result:=Copy(s,2,Len-1)+Copy(s,1,1);
end;

function Spiral(const s:widestring):string;
var
i,Len:Integer;
begin
SetLength(Result,Length(s));
Len:=Lenght(s);
for i:=1 to Len-1 do Result[i]:=s[i+1];
Result[Len]:=s[1];
end;
どちらが早いでしょうか?
また、もっと早いのありますか?
1行目?
他からのイベントでフォームを閉じるときと、
ユーザが×ボタンを押してフォームを閉じるときに
異なるコードを実行したいのですが、ユーザが×を
押してフォームを閉じようとしているというような
判別って可能でしょうか?
>>529
ぁ、、、一文字目でし
>>530
OnCloseQueryでできんかね?
>>531
できんよ?
var s: WideString; len: Integer; c: WideChar;

len := Length(s);
if len >= 2 then
begin
 c := s[1];
 Move(s[2], s[1], SizeOf(WideChar) * (len - 1));
 s[len] := c;
end;
>>530
WM_SYSCOMMAND の SC_CLOSE でフラグを立てる
プログレスバーがステータスバーの中にあるのってどうなってるの?
>>535
とりあえずフォームにプログレスバーをはっつけて
FormCreateでProgressBar1.Parent := ScrollBar.Panelsなんらってやればいい
>>537
激しく厨なコードだな・・・
どの辺が厨なのさ?
煽りとかそういうんじゃなくて、今後のために教えて欲すぃ。
質問っす!(=゚ω゚)ノ

TList型のインスタンスを2つ用意して、
List1 := List2;
ってしている時に、
List2.Free;
した後に、
List1.Free;(またはFreeAndNil)
した時にエラーになるのですが、
こういう、同じインスタンスを見ている変数の
開放時にエラーにならないように、
インスタンスが有効かどうか知る方法はありますか?
Assigned関数は効果なさそうですし…。
>>538
たしかにヘンだね。
コンストラクタで Owner を StatusBar1 にしてるし、
Parent は設定してないし。このコード、動くとしてもヘン。
>>540

List1 := List2; こんなことをしないように!
>>540
ない。

オブジェクト変数は実質ポインタなので極めて危険な罠。
NILを代入して擬似的に無効に見せかける方法もあるが。

ついでに言うと、List1 := List2; をやってしまった時点で
最初のList1のインスタンスは行方不明。メモリリークだ。
丸ごとコピーするならAssignメソッドを使う。
>>540 TList型のインスタンスを2つ用意して、

インスタンスを二つ用意して、List1 := List2; こんなことするのは
どういう意味よ?
545デフォルトの名無しさん:03/09/01 21:36
>542-544

す、すんませ〜ん(;´Д`) えーと、「インスタンスを2つ」は書き間違いでした。

事前に宣言片方は宣言だけして、
List1: TList;

で、もう片方はインスタンスを作成して、
アイテムも入れてやって、
procedure TForm1.Button1Click(Sender: TObject);
var
List2: TList;
begin
List2 := TList.Create;
try
List2.Add(Edit1);
List1 := List2;
finally
List2.Free;
end;
end;

で、最初のリストの方を使う
TEdit(List1[0]).Text := 'Hoge';

って感じでやりたいのです。
もちろん実際のコードは全然違って、Editの代わりに何らかのクラスをCreateしてやっているので、どっかでFreeしないといけません。
List2の寿命も本当はもっと長いので、終了処理時などでList2が保持するインスタンスをFreeするようにしているのですが、
その後、List1の方の保持するインスタンスもFreeしたいのです。

…やっぱやり方がまずいっすか…(;´Д`)
>>535
プログレスバーに限らず何でもできるよ。DUnitのソースからコピペ

procedure SetStatusBarPanelBounds( WinControl: TWinControl;
 StatusBar: TStatusBar; PanelIndex: Integer );
begin
 WinControl.Parent := StatusBar;
 if PanelIndex = 0 then
  WinControl.SetBounds(
   2, 2,
   StatusBar.Panels[0].Width - 2,
   StatusBar.Height - 2 )
 else
  WinControl.SetBounds(
   StatusBar.Panels[PanelIndex].Width + 2,
   2,
   StatusBar.Panels[PanelIndex+1].Width - 2,
   StatusBar.Height - 2 );
end;
>>545
いや、だからね、

君の問題は、オブジェクトの「代入」と「複製」の違いを理解していないことなの。
>542-544に答えは書いてあるからよく考えれ。
Del厨には理解不能だって
>>548
ではC++,VB.NET,Javaでのケースを教えてくれたまえ。
>>549
スレ違い。氏ね
□□□□□□□□□□□□□□□
>>548および自作自演は放置推奨
□□□□□□□□□□□□□□□
>>551
□□□□□□□□□□□□□□□
お前が邪魔邪魔邪魔邪魔邪魔邪魔
□□□□□□□□□□□□□□□
553545:03/09/01 22:20
>547
一応代入と複製の違いは分かるつもりです。で、今回は複製は関係ないんです。
>545はあくまで例として書いただけでして…。
実際には参照をコピーして、そのオブジェクトのプロパティにセットしてやりたいんです。
(複製としての値を操作したいのではありません)
しかし管理するリストが2重にあって、誤って2重にFreeする恐れがありまして。
そういうインスタンスの管理をするな、と言われたらそれまでですが。

質問は「参照先が無効な変数のFree実行時のエラー回避方法はありませんか?」
と聞けばよかったのかも…。
□□□□□□□□□□□□□□□□□□□□□
>>548および>>552および自作自演は放置推奨
□□□□□□□□□□□□□□□□□□□□□

> 「参照先が無効な変数のFree実行時のエラー回避方法はありませんか?」

この質問、3ヶ月おきにどこかに現れるね。実体ひとつに参照を複数に
するようなコードは書かないようにしてください。一方が Free した
ことを他方で知るための一般的な方法はありません。
そういうときはインターフェイス使うのだ
とりあえず参照先が有効のときのみ破棄することはできる。

List2.Free;
List2 := nil;
または
FreeAndNil(List2);

で、

if Assigned(List1) then
//if List <> nil then
begin
List1.Free;
end;

でも、もう少し考えれ。
>>557 !?
牛乳吹いた
>>557
Assigned(List1) は常に True なのでは…
>>557
List2だけnilにしても意味ねーだろw
> 「参照先が無効な変数のFree実行時のエラー回避方法はありませんか?」
C#ではこのような問題は発生しません。早急な移行をお勧めします。
>>562
C#ではこのような問題は発生しませんが、つくったアプリはだれも
使ってくれません。早急に Delphi への移行をお勧めします。
564デフォルトの名無しさん:03/09/02 03:19
TStringListにaddやappendで改行が含まれたStringを加えると
改行されずに追加されてしまいます。

これを改行するにはどうしたらよいのでしょうか?
元からあるTStringList文字列にString文字列を加えたいので(文字列の順番が重要なので)
TStringList.Textで代入するわけにもいきません・・。
565564:03/09/02 03:22
すいません。いきなり自己解決しました。
564を読み直していて思いついて

SL.Text := SL.Text + str ;

で解決しました。
>>516
とりあえず画面のレイアウトとかあんまり考えなくてもいろいろ使えるので
VB2時代からこりゃ便利だワイと思ったものです.

>>539
コントロールの関係にはコントロールの親子関係とコンポーネントの所有関係のふたつがあります.
たとえばフォームにパネルを置いてその上にボタンを置いた場合,
ボタンの親はパネルですがボタンの所有者はフォームです.

コントロールを実行時に作成する場合はコンストラクタで所有者を,
Parentプロパティで親を指定しなければなりません.
今回の例ではたとえばフォームのOnCreateイベントハンドラで生成する場合,

ProgressBar1 := TProgressBar.Create(self); // 所有者=フォーム自身
ProgressBar1.Parent := StatusBar1; // 親=ステータスバー

と書かなければなりません.
>>553
ひとつのオブジェクトの実体を複数の変数で参照してどこからでも解放できるという発想は捨てて,
所有と解放の責任を持った変数と参照するだけの変数という風に厳格に区別した方がよいと思います.

具体的にはList1.Freeは禁止,解放は常にList2で行います.
(リストをカラにしたいだけならList1.Clearで済むはず)

なお,参照変数が存在する間はオブジェクトを所有する変数と
そのオブジェクトの実体が存在していなければなりません.

具体的には少なくともList1 := List2;を実行する前から変数List1が消滅するまでの間は
変数List2とそれが所有するオブジェクトの実体が必ず存在していなければなりません.

#参照先が消滅してもいいようにするためには
 消滅時に「消滅するぞ」とすべての参照先に通知して
 各参照先が参照をやめるような仕掛けを作らなければなりません.
 コンポーネントの中には他のコンポーネントを参照するプロパティがある場合がありますが,
 コンポーネントは中にその仕掛けを持っています.
568ねこま:03/09/02 05:02
誰か言うだろうと思って静観していたのですが,みんな以外と知らない問題なんですね.

↓これを貼り付ければいいです.
object StatusBar: TStatusBar
 Left = 0
 Top = 353
 Width = 740
 Height = 20
 SimplePanel = False
 object ProgressBar: TProgressBar
  Left = 1
  Top = 2
  Width = 199
  Height = 18
  Min = 0
  Max = 100
  Step = 1
  TabOrder = 0
  Visible = False
 end
end
>>545
List2.Freeの後にList1 := nilするのはだめなのか?
570288:03/09/02 09:17
>List2.Freeの後にList1 := nilするのはだめなのか?

これするくらいなら、はじめから参照複数もつな、が正解
> コンポーネントは中にその仕掛けを持っています.

今の場合と違うんでは。コンポーネントのオブジェクトを二つの変数で参照する
場合でも問題は同じ。
> みんな以外と知らない問題なんですね.

実行時に動的に、そして一時的に生成したい、が問題なのでは?
573545:03/09/02 09:45
オハヨウゴザイマス。

皆さん、色々な意見ありがとうございます。
やはり管理と参照と、それぞれのListの役目を明確に分けるのが良いようで…。
実際のコードではTListを所有しているクラスがDestroy時にインスタンスを
開放しようとした時にエラーが出ていたので、困っていました。
その辺り、改修します。

>557
それで解決するなら質問しに来てませんよ…(ちゃんとHelpに明記されてますし)
ヽ(;Д;)ノ

>562
それってJavaと同じで参照しているものが無くなれば開放される、ってやつですか?
そういう時は、直接の参照を使わずに間接的に参照する

例えば、参照カウンタで管理されたハンドルオブジェクトを作る。
ハンドルにListの参照を割り当てておいて、使うときはハンドルから取り出す。
参照先が開放されているときは、nilが返ってくる

var
 Handle: TObjectHandle
begin
 if Assigned(Handle.ToObject) then
  (Handle.ToObject as THoge).Foo;

古典的な方法ではある。
実際使ってるけど、結構面倒。
interfaceでも使ったらどう?

参考URL
http://www2.tky.3web.ne.jp/~yosshin/memo/000213.html
スマン574のコードは、beginの前に初期化コードがあると考えてくれ
576デフォルトの名無しさん:03/09/02 11:09
TStringGridのスクロールバーがダメダメです。
TMemoのスクロールバーはちゃんと行の多さに合ったバーになります。
そんなナイスなスクロールバーが付いたTStringGridの拡張コンポーネントは
ないでしょうか?
自作クラスのあるプロパティを、プロパティ名を文字列で指定することで
アクセスすことは出来ませんか?
(JavaのInvokeとかの感じで)

HogeClassのString型のFooプロパティに値を入れるとして、
Hoge.Method("Foo", "(゚Д゚)");
って感じで入れられたらいいのですが。

同様に指定したプロパティの型によって整数値とかも
入れられたりとかできたらなぁ、と。
578577:03/09/02 13:01
http://130.158.124.192/~takeuchi/delphi/browse.cgi?index=034608

どうもPublishedなプロパティ以外は取れなさそうですし…。
579デフォルトの名無しさん:03/09/02 13:20
教えて下さい
Delphiで、すでに起動しているアプリを終了させる事ってできませんか?
感覚としては、メモ帳とかをタスクマネージャーから、タスクの終了みたいな事を
やりたい訳です。
>>579
終了させたいアプリにWM_CLOSEを送る
SC_CLOSEのほうがいいかな
var hMemo:HWND;
begin
hMemo:=FindWindow(nil,'メモ帳');
SendMessage(hMemo,WM_SYSCOMMAND,SC_CLOSE,0);
end;
582579:03/09/02 17:05
ありがとうございます。

早速試してみます
>hMemo:=FindWindow(nil,'メモ帳');

これはさすがにだめでしょう。
> Hoge.Method("Foo", "(゚Д゚)");

Hoge.Foo := '(゚Д゚)';

より便利ですか?
Method が自分で実装できるなら、なんだってできるだろうに。
>584
継承元が違う複数のクラスの同名プロパティに
値を入れたいので。
>>585

だから、クラスごとに代入する Method メソッドを勝手に実装したらいいんじゃないの。
>586
じゃあ、メソッドを実装しないとJavaのInvokeみたいなことは
できないんですね…わかりました。
>>573
>実際のコードではTListを所有しているクラスがDestroy時にインスタンスを
>開放しようとした時にエラーが出ていたので、困っていました。

オブジェクトが has しているオブジェクトをクラスの外で Free すること
(できること)がそもそも問題なのでは?
安全にするには、TList を継承して、自分を has しているクラスのインスタ
ンスを保持し、自分が Destroy されるときに、それに通知するようにすると
よいのでは。
>>585
こういう場合はInterfaceを使えばできるんじゃないっけ
interface を使うとどうできるの? 代入の実装コードを書くのは同じでは。
DelphiのOpenDialogBoxについて質問です
OpenDialogBoxにて

if OpenDialog.Execute then
filename := OpenDialog.FileName;
としfilenameをみると,たとえばE:\test.txtを選択したら
このfilenameにE:\test.txtと入っています
なんとかフルパスでなく
test.txtとだけ取り出す方法はないでしょうか?
>>591
filenameをExtractFileName
ほかの拡張子だけとかはヘルプ見れ
ExtractFileName
ExtractFileNeme
さすがdel厨。馬鹿なレスしかないな。
>>577
今、手元にDelphiないけど
SetStringProperty(Hoge, "Foo", "(゚Д゚)");
ってな感じでできたと思う。
ヘルプにはのってないからPro以上ならTypInfo.pas見て。
598577:03/09/02 20:50
>597
それがPublishedなプロパティにしか効かなかったのです…
勘違いでしょうか?
(以下はGetの方のパターンですが…)

procedure TForm1.Button1Click(Sender: TObject);
var
 PropInfo: PPropInfo;
begin
 PropInfo := GetPropInfo(Sender.ClassInfo, 'Caption');
 if Assigned(PropInfo) then
  if (PropInfo^.PropType^^.Kind = tklString) then
  begin
   MessageDlg(GetStrProp(Sender, PropInfo), mtInformation, [mbOK], 0);
  end;
end;
>>598
貧乏臭い発想で設計されたDelphiは
publishedなプロパティにしかRTTIがないから無理。
600デフォルトの名無しさん:03/09/03 00:06
以前StringGridでSelectionを教えてもらった者です。
今回、Ctrl+AでStringGridを全選択状態にしようとしましたが、
上手くいきません。イメージとしては、下のような感じです。
よろしくお願いします。

procedure TMainFForm.GrdKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ([ssCtrl] = shift ) and ((Key = 227) or (Key = 65)) then
begin
StringGrid1.Selection.Top := 1;
StringGrid1.Selection.Bottom := StringGrid1.RowCount - 1;
end;
end;
毎回技術系スレに馬鹿なレス書きしてるのはどこのアフォアンチだ。
そんなに荒らして欲しいのか?
>>600
以前StringGridでSelectionを回答した者です。
ヘルプにあるよー

var
R : TGridRect;
begin
if (ssCtrl in shift ) and (Key = ord('A')) then
begin
R.Top := 1;R.Bottom := StringGrid1.RowCount-1;
R.Left := 1;R.Right := StringGrid1.ColCount-1;
StringGrid1.Selection := R;
end;
end;
>>601
すみません。
>他のスレッドでは書き込めない超低レベル、もしくは質問者自身何が何だが
>分からない質問を勇気を持って書き込むスレッドです。
をまに受けてしまい。いつもお世話になってます。荒らして欲しいわけではないです。
賢い人たちは
ミ,,゚Д゚彡フサギコとモナーのDelphi質問相談談話室2
http://pc2.2ch.net/test/read.cgi/tech/1061142216/
に書き込まれていると思うので、こっちが低レベルなのは見逃してください。無理か

>>602
毎度申し訳ないです。ありがとうございます。
>>603
601 が言ってるのは 596 か 599 のことなんでは?
標準正規表現クラスが無いのはネタですか?
>>605 そうです。
607522:03/09/03 04:37
522です…レス遅れて申し訳ありません。

開けない原因は「ファイルの重さ」ではなく「NULL文字が途中にある」
ことだと判りました。
レスして頂いた皆様、申し訳ありませんでした。
Booleanの変数がTrueの場合はFalseに
逆の場合はその逆にってルーチンないですか?
booleanVariable = not booleanVariable;
var
b:Boolean


b := not b;

これをルーチンにすると楽しい?
>>609-610
thx!
612デフォルトの名無しさん:03/09/03 13:08
フォームグリッドの目が荒いのですが
細かくするにはどこを設定したらいいでつか?
>612
環境オプションのデザイナ
最初の頃は notで反転させるの気づかないんだよな・・・
Cっぽく
var a: boolean
a:= not 
とかできたたら楽なのになぁ C+=2 とか好きだった。
615デフォルトの名無しさん:03/09/03 13:46
>>613
でけますた!

またおしえてくだしゃい
プログラム終了でバツボタンと同じ役割の命令は何でつか?
Close
SendMessage(handle,WM_SYSCOMMAND,SC_CLOSE,0);
>>602
このコードだとFixedCols(固定カラムの数)やFixedRows(固定行の数)が
デフォルトの1以外の時にうまくいきません.
FixedColsやFixedRowsの値を1以外にして実験してみてください.
正解はあえて書かないでおきます(実験すれば多分わかる).
619615:03/09/03 14:23
>>616
そのフォームが終了するんでつね?

>>617
SendMessage(自分に、第二ぱらめたは何?、終了こまんど、でふぉると)
第三ぱらめたを変更したら任意のメッセージを送れるということでいいでつか?
620デフォルトの名無しさん:03/09/03 14:33
文字列 "あいうえお" の先頭文字の "あ" を "ア" に変えたいのですけど、
以下の内容では実行できません。
どうすればいいでしょうか?

procedure TForm1.Button1Click(Sender: TObject);
var
  s: WideString;
begin
  s := 'あいうえお';
  s[1] := 'ア';
  ShowMessage(s);
end;
>>619
APIのヘルプ見ろ
>>620
'ア'って書くとStringになるからWideCharには代入できない。
WideCharにする方法はいくつかあるけどこれが楽だと思う。
procedure TForm1.Button1Click(Sender: TObject);
var
s: WideString;
begin
s := 'あいうえお';
s[1] := WideString('ア')[1];
ShowMessage(s);
end;
>>620
S[1] := #$30A2
ってのもある。激しくオススメしないが。
624デフォルトの名無しさん:03/09/03 16:06
そのプロシージャの性的な変数を宣言するにはどうするのでつか?
age
626デフォルトの名無しさん:03/09/03 16:31
ListViewの内容を保存するにはどうすればよいですか?
TreeViewの場合savatofileなどがあったのですが。
>>624

Delphiには静的変数は存在しないけど、型付定数というものを使えば可能。

procedure TForm1.Button1Click(Sender: TObject);
const
 C: Integer = 0;
begin
 C := C + 1;
 ShowMessage(IntToStr(C));
end;

さらに、{$J+}のコンパイラ指令をつけるか、プロジェクトオプションのコンパイラタブ
の「型付定数への代入」のチェックを入れる必要があり。
628デフォルトの名無しさん:03/09/03 16:40
Variant型で保持しているJpegデータをTImageに読み込むにはどうしたらいいのでしょうか?
629デフォルトの名無しさん:03/09/03 16:43
>>627
なるほどザわーるど
630デフォルトの名無しさん:03/09/03 17:30
一つのコンポーネントを同時に二つのスレッド(AThread)から
使うようにしたいのですがどうにもできないようです
これってできないのですか?
Synchronize
632デフォルトの名無しさん:03/09/03 17:50
>>631
いぇそうではなくって,Createした時点で例外がでるのです
コンポーネントの情報をCreate時点でスレッド内部の変数に記録しておく
ようにプログラムを組んだのです.
でも,Create時点で例外がでます.
>>622
できました。 サンクス
>>632
スレッド以前のただのバグ。
>>632のバグって事ね。
Synchronize の中で Create するといいんじゃない。ウィンドウコントロール
だとほとんど必須。メインスレッドに作らせるといいです。
バグっていう言葉は慎重に使わないと誤解を招くよ。
特にライブラリを使ってるときは。
638デフォルトの名無しさん:03/09/03 19:04
Indyのサーバコンポーネントのマルチスレッドのイベントハンドラ内でエラーが発生しても、エラーが消えますね。
スレッドのエラー処理は特殊なんでつか?
ふつうだって、メインスレッドなわけだが
641デフォルトの名無しさん:03/09/03 21:47
質問に答えてるキモヲタ共は氏ねクズ
↑、おい、どうした、なんか悪いものでも喰ったか?
>>642
あんたの嫁をくっちゃった
StringGridなのですが、
Ctrlを押しながら複数のセルを選択して、
現在選択中のセルはココ、ココ、ココ
というような情報を抜き出すにはどうすればよいでしょうか?
よろしくお願いします。
645デフォルトの名無しさん:03/09/03 22:28
>>644
いいかげんExcel&VBS使ったら?
低脳が盲目的にDelにしがみついてたって意味無いよ。
>>644 Selection じゃだめなの?
Excelが入ってない環境はどうするよ?
それとVBSってアンタ・・・
648デフォルトの名無しさん:03/09/03 22:42
VBSなの?
馬鹿は非人道的に放置しる
650デフォルトの名無しさん:03/09/03 23:17
解説本がすくないしなあ
>>644
TStringGridの選択領域は、矩形で定義されています。
# Selectionプロパティ
なので、複数のセルを飛び飛びに選択するのは無理のはずです。
Objectsプロパティに独自に作成したセル管理用のオブジェクト
ぶら下げて、選択フラグをON/OFFしてみる。
選ばれているかどうかはOnDrawCellイベントで何らかの印を表示する。
基本的にはそんな感じですよね.
自前で選択フラグを用意して,選択フラグが立っているセルは
OnDrawCellイベントで選択したときの色などで描き直す….

ただ選択フラグを持つオブジェクトの生成と廃棄をしなければならず,
特に実行中にグリッドの列や行の数が変わった場合の処理が面倒そうです.

しかし,今回はセルに対しては選ばれているかどうかという情報だけ持たせればよいので
グリッドのObjects[桁, 行] = nilのときは選ばれていない,それ以外なら選ばれている
という風にすると(厨なやり方ですが)簡単かもしれません.
>Ctrlを押しながら複数のセルを選択して、
>現在選択中のセルはココ、ココ、ココ
>というような情報を抜き出すにはどうすればよいでしょうか?

という質問の回答としては微妙にずれてるような.....
本当にSelection使ったときめちゃくちゃ
MenuItemをたくさん作ろうとしているのですが


MenuItem : array of TMenuItem

SetLength(MenuItem , i2);
for i := 0 to i2 do begin
MenuItem[i] := TMenuItem.Create(Menu);
(略)
end;

MenuItem : TMenuItem

for i := 0 to i2 do begin
MenuItem := TMenuItem.Create(Menu);
(略)
end;
ってどっちが良いのでしょうか?
動的に生成したメニューアイテムを、あとで個別に操作したい場合には前者。
アプリ終了時まで削除しないなら後者。

メニューアイテムには親コントロールが存在するのでその気になれば後者のコードでも
メニューを手繰っていくことができるので、能力的には大差ない
>>657
詳しい解説ありがとうございました
あのさ・・・

無償ビルダーって聞いてデルファイをダウンロードして登録までしてインストールしてみたんだけど

・・・もしかしてこれって C じゃないの?
C#
>無償ビルダー

Delphi にはビルダーという名がついたのはありませんよ? 勘違いでしょう。
>>659
Delphi言語という実用性が高い素晴らしい言語です。
Cなんて古くさい言語と一緒にしないでくださいね。
663デフォルトの名無しさん:03/09/04 07:15
ところで、Delphiで利息計算しようと思ったんですが、
1 10進の型が無いので、金額が間違ってしまいます。
2 四捨五入も銀行のやり方と違うので、金額が違ってきます。これは関数つくれば
 解決できますが、、、、

折角これだけ豪華装備のDelphiなので、10進演算や金融関数つければ最強のプログラミング
ツールになるのに、、、なんとかなりませんか。
1. Decimal
2. 利息計算する場合は、学校で習う四捨五入ではなく ISO/JIS で定義されている四捨五入を使います。あなたのほうが間違っています
すまん。Currency 型だ。
Currency 型は金額計算での丸め誤差が非常に少ない固定小数点データ型です。
これは最下位 4 桁が暗黙に小数点以下の桁を表す位取り 64 ビット整数として格納されます。
代入文や式でほかの実数型と混在させた場合は,Currency 型の値に対して自動的に 10000 での除算または乗算が行われます。
>>666
それはヘルプからの丸写しか?
D6 以降、Pro 以上なら TBCD がつかえるでしょ?
ScrollBarのOnScrollはバーをドラッグした場合のイベントですよね?
ScrollBarのほかの位置をクリックするとそこまでバーが移動するアプリ
とかありますがあれってどうやってるんでしょう?
>そこまでバーが移動するアプリ
そんなのあるんだ。なんてやつですか?
右クリック->ここへスクロールでいいだろ
標準に反した変なUIをつくるなよ
うるさいなぁ。プログラマの自由だろ。 >> 671
ML にでも引きこもってろ。
時間がないので要点だけ。

TScrollBar から継承して新しいコンポーネントを作成。
CNHScroll と CNVScroll をオーバーライド。
TScrollBar.DoScroll のコードを見ればおおむねわかると思う。
ScrollCode が scPageDown と scPageUp に対して独自のコード(ページ単位移動ではなく、クリックされた位置に移動)を書けばよい。

671 の意見もある意味正しいが、自分の作りたいものを作るのが上達の早道なので
がんがってください。

671 へ。
Delphi の標準の TScrollBar では「ここへスクロール」は出ません。
「くだすれ」ですから、せめて標準ポップアップが出るスクロールバーコンポーネントを
教えてあげてください。
>Delphi の標準の TScrollBar では「ここへスクロール」は出ません。
出るだろ。ってか出すのはOSだ。XP使え。
676デフォルトの名無しさん:03/09/04 12:50
TImageのWidthとHeightを変更してもCanvasのClipRectの領域が変化しません。
WidthとHeightに合わせてClipRectの領域も変化させるにはどうすれば良いでしょうか?
677669:03/09/04 13:03
>>670
書き方が悪くて伝わらなかったかな。
例えばWMPとかです。

>>673
なんか難しそうですな。
>676
BitmapのWidth,Heightを変えろ。
679676:03/09/04 13:59
>>678
レスありがとうございます。
image1.Picture.BitmapのWidthとHeight
を変更したらClipRectの領域が消えました。

やり方が違うのでしょうか?
エラーログを取るのを目的として、
現在実行中の関数(と出来ればソース名、行数)を
取得することは可能でしょうか?
>>654
 確かに.文章をまとめているうちに説明がなくなってしまいました….

 まず重要な事実はStringGridはそれぞれのセルが選択されているかどうかという情報を持っていないということです.

 Selectionプロパティというセルの選択状態を示すプロパティがありますが,これは桁○から×かつ行△から□の範囲が選ばれていますよ,というもので,四角い範囲を1か所しかえらぶことができないのです.
 たとえば桁2行1のセルと桁4行2のセルだけを同時に選択する,ということができません.

 ゆえに >>644 の機能を実現するためには,
 ・セルごとに選ばれているかどうかの情報を自分で用意(1)して,
 ・セルがクリックされたら(2-a)その情報を自分で更新(2-b)して,
 ・情報が更新されたら(3-a)グリッドの表示を自分で更新(3-b)しなければなりません.

 で,過保護っぽいですが,代わりになるフレームを作ったのが放置してあるので晒すです….

//●セルごとの選択情報を持ったグリッドの代わりとなるフレーム(マウス専用)
// フレームに文字列グリッドを置き,文字列グリッドのAlignをalClientに,OptionsのgoRangeSelectをFalseにしてください.
// ※この例では文字列グリッドの名前をGridにしていますがしなくてもかまいません.
TStringGridFrame = class(TFrame)
Grid: TStringGrid;
procedure GridSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure GridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
private
function GetSelected(aCol, aRow: integer): boolean;
procedure SetSelected(aCol, aRow: integer; const Value: boolean);
public
property Selected[aCol, aRow: integer]: boolean read GetSelected write SetSelected; // プロパティ:指定されたセルが選択されているかどうか
end;

function TStringGridFrame.GetSelected(aCol, aRow: integer): boolean;
begin
Result := (Grid.Objects[aCol, aRow] <> nil); // nil以外を指していればフラグが立っているということにする
end;
procedure TStringGridFrame.GridDrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
// 選択フラグが立っているセルのみ,新たに描画し直す.
if Selected[ACol, ARow] then
begin
Grid.Canvas.Brush.Color := clHighlight;
Grid.Canvas.FillRect(Rect);
Grid.Canvas.Font.Color := clHighlightText;
Grid.Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Grid.Cells[ACol, ARow]);
end;
end;
procedure TStringGridFrame.GridSelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
begin
// セルが選ばれたらそのセルを選択(選択されていれば選択解除)する
Selected[ACol, ARow] := not Selected[ACol, ARow];
end;
procedure TStringGridFrame.SetSelected(aCol, aRow: integer;
const Value: boolean);
begin
if Value = True then
Grid.Objects[aCol, aRow] := self // nil でなければ何でもいい
else
Grid.Objects[aCol, aRow] := nil;
Grid.Invalidate; // グリッドを再描画する
end;
>>680
取得は不可能だが表示は可能
Assert参照
マウスの左ボタンを押したままクリックとかにはなってないがそれは宿題っていうことで.
ヒントとしてOnSelectCellの代わりにOnMouseDownを使う(場合によってはOnMouseUp, OnMouseMoveも).
とにかくコンポでわからないことがあったらまずはヘルプでプロパティ,メソッド,イベントをすべてチェック.
>>680
TD32デバッグ情報つけるかマップファイルがあれば色々情報が取得が可能。JCLにそんなライブラリがあったよ。
動作状況のログとるなら普通に重要なところとかに出力命令かけばいいだけの話のような。
行番号なんてたいして役に立たない。わかりやすいシンボルでも出力しとけ。
686デフォルトの名無しさん:03/09/04 19:11
質問です。
Delphi7でFormないにExcelを表示して、編集・保存をしたいのですが
ブラウザコンポーネントを使わず、Excelコンポーネントを使わず。

なにか良い方法ありますか?
>Excelコンポーネント
Excelのインストール無しにってことか?
だったら無理。あきらめろ。
688デフォルトの名無しさん:03/09/04 19:16
Serverタブのなかに、ExcelWorkBookなどのコンポーネントがありますが
それをつかわず(たとえばComObjなどをつかう)にということで。
>>685
>行番号なんてたいして役に立たない。わかりやすいシンボルでも出力しとけ。
開発中は役に立つし、わかりやすいシンボルいちいち決めるのは面倒だろ。
やっぱ__FILE__, __LINE__は欲しいよな。

>>680
パフォーマンス落ちるからあまり勧めはしないけど

procedure TForm1.Button1Click(Sender: TObject);
begin
 try Assert(False, 'Error!'); except on E:Exception do OutputDebugString(PChar(E.Message)); end;
end;

実行結果
ODS: Error! (C:\Program Files\Borland\Delphi6\Projects\Unit1.pas, 28 行)
690680:03/09/04 19:32
>689

THX!!!
>>686おまい単発で同じ質問でスレ立てた香具師だろ。
単発+マルチ質問やめれ。いままで散々各所で言われてきたことだろう。
削除依頼出してこい。ちっとは考えろ。

で、ヒントは。
1. Formに VCLのSystemタブの OleContainer("OLE"と書かれたアイコン)を貼り付ける。
2. 貼り付けられたコントロールを右クリックして「オブジェクトの挿入」を選択する。
3. 「オブジェクトの挿入」ダイアログボックスが表示されるので、
4. その中から「Microsoft Excelワークシート」を選択してOKを押す。
このとき、「新規作成」を選択しておく。また、「アイコンで表示」のチェックを外しておく。
5. OKを押すと、Excelが起動してしまうが、これを閉じる。
6. IDEからこのプロジェクトを実行する。
7. 実行している OleContainerをダブルクリックしてみると、Excelがフォームの中に表示され、
編集が可能になる。

とりあえずここまで自力でやって、後は考えてみぃ。
BitBtnって押したらへっこんだままなんか?
普通のButtonみたいな動作は出来ないわけ?
>692
普通に動くけど?
>>669
TTrackBarでも使っトケ
StringGridのOnDrawCellって、描画する際に枠線とかを除いた範囲のRectが
引数になっていますよね?
あの枠線ごと塗りつぶしたいのですが、単純にRectを広げる方法でOKでしょうか?
>>686
              _________
 Σ○         /
 -|       ○ < けいちゃん!!!何しとん!!!
  ∠     十   \
   ||| ピョン   人     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>695
枠線なくして自分で描いた方が
698デフォルトの名無しさん:03/09/04 23:35
>>686
Delphi談話室へマルチポストですよね?
699デフォルトの名無しさん:03/09/05 00:13
dllファイルを別の言語で作成して貰いました。

使用には問題ないのですが、配布をする際に、作成したexeファイルと、dllファイルを
1つのexeファイルにしたいのですが、どのようにすればよいでしょうか?

静的リンク動的リンクとは関係ないですよね?

自己解凍書庫

以上。解らなければぐぐれ。
「別の言語」がOMFフォーマットの.objを吐くなら、dllではなく.objを貰ってくればリンクできる。
でなきゃ不可。
702デフォルトの名無しさん:03/09/05 00:19
えっ? Delphiって一つのEXEに出来るんじゃなかったの?(藁
>>695
>単純にRectを広げる方法でOKでしょうか?

やってみればいいじゃん。InflateRect()
702は低脳
>>704
こらこら、何も言い返せないからって
それはないでしょ。
>>700
目から鱗。

>>702
.dllってのはあくまでPEフォーマットの実行イメージであって、静的にリンクするための部品じゃないからねえ。
リンクしたければその前段階である.objを貰ってこい、ってのが変な話か?
(リソースとして丸ごと抱え込んで、実行時に吐き出してLoadLibraryなんて荒技はのぞく)
707699:03/09/05 00:30
>>えっ? Delphiって一つのEXEに出来るんじゃなかったの?(藁

ってマジに思っていたのでが、違うんですか?
コンパイルするときの設定でどうにかなると思っていたのですが。

>>701
ありがとうございます。
確認してみます。

なぜ、objでは良くて、dllではだめなのでしょうか?
708699&707:03/09/05 00:32
>なぜ、objでは良くて、dllではだめなのでしょうか?

>>706

わかりました。
ありがとうございます。

タイミングがずれてしまった。
>>708
別に一つの実行ファイルになっていようが、
二つの実行ファイルになっていようが
違いはないからね。

一部の狂Del信者は一つのEXEマンセーとか言っているけど
ただのアフォなんで無視していいから。
>>702
DLL側がDelphi製じゃないからだろ。
糞言語が足を引っ張るってこと(ゲラ
DLLをリンクできない仕様にしたマイクロソフトは糞。
.soをリンクできない仕様にした糞は誰だろうねぇ(w
馬鹿? >>711
>>710
本気でDelphiで作られたDLLならリンクできるとお考えですか?
Delphiで作られたDLLでリンクできる物を教えてください。
714デフォルトの名無しさん:03/09/05 03:22
>>710
最近のDel厨はobjとDLLの区別もつかんのか(ゲラ
DLLは何の略か考えてくれ
ネタは元スレでやれよ。
>>713
DelphiならDLLにしないだろ
                  ノ      } ゙l、   」′           .,/′   .,ノ _,,y
    .,v─ーv_         〕      〕 .|  .il゙            《 ._   .,,l(ノ^ノ
   ,i(厂  _,,,从vy      .,i「      .》;ト-v,|l′          _,ノ゙|.ミ,.゙'=,/┴y/
   l  ,zll^゙″  ゙ミ    .ノ       .il|′アll!           .>‐〕 \ _><
   《 il|′     フーv,_ .,i″       ||}ーvrリ、             ¨'‐.`   {
    \《 ヽ     .゙li ._¨''ーv,,_     .》′  ゙゙ミ| ,r′                }
      \ ,゙r_    lア'    .゙⌒>-vzト    .ミノ′                 〕
       .゙'=ミ:┐  .「      ./ .^〃     :、_ リ                   .}
         ゙\ア'   .--  ,,ノ|    、    ゙ミ}                   :ト
           ゙^ー、,,,¨ -   ''¨.─   :!.,   リ                   ノ
              〔^ー-v、,,,_,:     i゙「   }                  .,l゙
              l!     .´゙フ'ーv .,y    ]                  '゙ミ
              |     ,/゙ .ミ;.´.‐    .]                   ミ,
              |     ノ′ ヽ      〔                   ミ
              }    }     ′    }                   {
              .|    .ミ     .<     〔                    〕
              .{     \,_   _》、    .{                    .}
              {      ¨^^¨′¨'ー-v-r《
                  ノ      } ゙l、   」′           .,/′   .,ノ _,,y
    .,v─ーv_         〕      〕 .|  .il゙            《 ._   .,,l(ノ^ノ
   ,i(厂  _,,,从vy      .,i「      .》;ト-v,|l′          _,ノ゙|.ミ,.゙'=,/┴y/
   l  ,zll^゙″  ゙ミ    .ノ       .il|′アll!           .>‐〕 \ _><
   《 il|′     フーv,_ .,i″       ||}ーvrリ、             ¨'‐.`   {
    \《 ヽ     .゙li ._¨''ーv,,_     .》′  ゙゙ミ| ,r′                }
      \ ,゙r_    lア'    .゙⌒>-vzト    .ミノ′                 〕
       .゙'=ミ:┐  .「      ./ .^〃     :、_ リ                   .}
         ゙\ア'   .--  ,,ノ|    、    ゙ミ}                   :ト
           ゙^ー、,,,¨ -   ''¨.─   :!.,   リ                   ノ
              〔^ー-v、,,,_,:     i゙「   }                  .,l゙
              l!     .´゙フ'ーv .,y    ]                  '゙ミ
              |     ,/゙ .ミ;.´.‐    .]                   ミ,
              |     ノ′ ヽ      〔                   ミ
              }    }     ′    }                   {
              .|    .ミ     .<     〔                    〕
              .{     \,_   _》、    .{                    .}
              {      ¨^^¨′¨'ー-v-r《  
720644:03/09/05 07:36
>>646 >>651 >>654 >>681 >>685
貴重なご意見ありがとうございます。
Delphiで、もう少し頑張らせていただきます。
DLLの話のまとめ

1、リソースに取込んでストリームで読んで実行時に吐出して使う
 http://pc2.2ch.net/test/read.cgi/tech/1009080085/21

2、バイト列として直接ソースに埋め込んで吐き出して使う
 http://pc2.2ch.net/test/read.cgi/tech/1009080085/167-168

3、Cで書かれたソースがあるなら、BCBコンパイラ(フリーので可)で .obj にして
 それを静的リンクする。
>697
FIXEDのところの線も無くさないと、空白の領域出来るんですね。
ふーむ、自力描画がよさそうですね。

>703
全体の領域としてはクリッピングされても、セルとしてはクリッピングされずに、
別のセルを(当然ですが)上書きしちゃうんですね。
これはこれで面白いですが…。
StringGridのPaint見ているけど、よーわからん(;´Д`)
724723:03/09/05 11:12
1行目と2行目のRectが1ドットだけ被ってる…(;´Д`)
Rectの最下行に線書いても消えるわけだ…。

ところでFixedなセルの線の引き方がよく分かりません。(;´Д`)
ShellListViewで複数選択したアイテムの
ファイル名を取得したいのですがどうすればいいのでしょうか?
726梨@Delphi歴1日??:03/09/05 13:27
# 具体名を出して申し訳ないです。。。

OSに依存したAPI「FlashWindowEx」を使っているのですが、
当然、「FlashWindowEx」を持たないOSでエラーが起きてしまいます。

そこで、「FlashWindowEx」を持たないOSを判別して、
If文で分岐すればエラーが出なくなるかと思ったのですが、
やはりエラーが出てしまいます。
ただし、「FlashWindowEx」の処理部分をコメントアウトすれば正常動作します。

これを、OSを判別して動作するためには、どうすれば良いでしょうか?
>>726
FlashWindowExを呼び出すコードをDLLに分離する。
アプリケーションはOSの種類を判別して
FlashWindowExをサポートしている環境であればそのDLLをLoadLibraryする。
サポートされていなければロードせずに処理をスキップする。
728梨@Delphi歴1日??:03/09/05 13:35
早速のレスありがとうございます。

>>727
# やっぱりそうなるのか。。。

出来れば、FlashWindowExを呼んでいる所は1行で2箇所だけな上に、
頻繁にコールされる部分になるので、
実行速度の観点と、ソースコードの保守の面から、
わざわざ別のDLLにする事無く動作出来れば理想的なのですが、
難しいでしょうか。

# DLLにするって事は、周辺の処理ごとDLL化する形になる気がするし、
# 「周辺の処理」の共通部分を修正したら2箇所を変更する事になるような。
729727:03/09/05 13:38
と思ったけどFlashWindowExをGetProcAddressで取得した
関数ポインタ経由で呼び出せばいけるかも。試してないけど。
730梨@Delphi歴1日??:03/09/05 14:31
>>729
試してみた所うまくいきました。ありがとうございました。
731321:03/09/05 14:34
TOleContainerを使って、Form内でExcelを編集しているのですが、
そのExcelに変更があった場合にそれを返してくれる関数のようなものが
あれば、教えていただきたいのですが?
732冷たい名無しさん:03/09/05 15:16
>>726
FlashWindowをサポートするOS
Client: Included in Windows XP, Windows 2000 Professional, Windows NT Workstation, Windows Me, Windows 98, and Windows 95.
Server: Included in Windows Server 2003, Windows 2000 Server, and Windows NT Server

FlashWindowExをサポートするOS
Client: Included in Windows XP, Windows 2000 Professional, Windows Me, and Windows 98.
Server: Included in Windows Server 2003 and Windows 2000 Server.

だから、Win32APIの GetVersionExを使用して、現在のOSのバージョンを取得して、
WindowsNT WS, WindowsNT Server, Windows95じゃなかったら FlashWindowExを呼び出すコードを使用する
ようにしたほうがスマートなような気がする。

GetVersionExの使用方法がわからなかったらまた聞いて。
打ち合わせ or 外出にならなければ答えることができるかもしれない。
733梨@Delphi歴1日??:03/09/05 15:20
>>732
なるほど、そうですねえ。

# なんか質問の意図とはあってない気がするけど、
# 手元のソースコードの状態には向いたアドバイスだ。

OSの判別部分は別の方に書いて貰っているので、
参考情報として伝えさせて戴きます。ありがとうございました。
734冷たい名無しさん:03/09/05 15:27
>>続き
var
ver: TOSVersionInfoA;
MajorVersion, MinorVersion, BuildNumber: Word;
begin
ver.dwOSVersionInfoSize := SizeOf(ver);
if GetVersionEx(ver) then
begin
with ver do
begin
MajorVersion := dwMajorVersion;
MinorVersion := dwMinorVersion;
BuildNumber := dwBuildNumber;
end;
end else
showmessage('OS情報の取得に失敗');
showmessage(IntToStr(MajorVersion) + '.' + IntToStr(MinorVersion) + '.' + IntToStr(BuildNumber));
end;

dwMajorVersion, dsMinorVersion, dwBuildNumberの値がどのOSに対応しているのかは、
MSDNおよび以下のURL参照にして。
ttp://homepage1.nifty.com/MADIA/delphi/delphi_bbs/200111_01110013.html

この値を基にOSを判別して分岐処理させればよいです。
735冷たい名無しさん:03/09/05 15:28
インデントいれてなかった。読みにくく申し訳ない。
首吊ってくるわ。
LonghornでFlashWindowExが廃止されたらどうするんだろう・・・
実際に削除されることはないとは思うけど。
>>724
Del5とDel3で試しましたけど被ってはいないようですよ.

Windowsでは一般に長方形の領域を表現するとき,
右端1ピクセルと一番下の1ラインは含まれません.
たとえばあるTRect型の値がLeft=100, Top=100, Right=200, Bottom=150の場合,
実際の領域は(100, 100)-(199, 149)となります.

グリッドコンポのOnDrawCellが渡してくるRectの領域はちゃんとセルの領域だけを指しているようです.
(セルの区切り線の部分も除外されているようです)


FixedなセルのイメージはD5のGrid.pasを見たところではWindowsのDrawEdge APIで描画しているようですね.
ソースをお持ちのようですのでGrid.pasからDrawEdgeをファイル検索してみてください.
たまに、グラフィックボードのドライバが悪くてカブる場合もあるよね。

最近、そういうの考えるとめんどくさいから何でも一度Bitmapに描いてからDrawしてる。
Javaみたいに基本型(IntegerやBoolean)が
クラスになったようなやつありませんか?

StringGridのObjectsにTrue、Falseとか入れたいんだけど…
一々クラス宣言しないといけない?
TObject(True)
>>739
Java使ったらどうですか?
>740
お! これでいけるのですか(・∀・)

VCLのプロパティエディタのソースで、2回だけ出てはきますが…
743デフォルトの名無しさん:03/09/05 17:52
Perlのsplitに相当するような関数ってありませんかね?
str = 1357924680
から
strarr[0]に1 strarr[1]=3 … strarr[9]=0
としたいのです。最終的にint型にしたいんで、IntToStr()してから
divとmodで分けようかととも考えたんですが、最初の文字列が長くなるとそれが使えないので。

助言をいただけないでしょうか。
>>743
Perl使ったらどうですか?
745デフォルトの名無しさん:03/09/05 18:00
>>744
ハァ?
>744
退場!(・A・)
>>743
StrToInt(str[1])とは違うの?
>747
数「字」を、一文字ずつにばらして、
それぞれのも数字を関数か何か(チェックサム用?)に
数「値」として渡したい、ってことかな〜?
>>748
それこそ747ので十分じゃない?
>>583
メモ帳なんて普段使わないからWindowTextうる覚えだった。すまん。
初期状態 '無題 - メモ帳' だったのか…
hMemo:=FindWindow('Notepad',nil);
これならきっと大丈夫・・・だよね?
>>579 ごめんな。まぁウィンドウハンドルとかの勉強がんがってくれ。ググればすぐだから
751743:03/09/05 18:43
>>747さんの方法でうまく試すことができました。
文字列を配列にすることができたのでなんとかなりました。
どうもありがとうございます。
>>736
確かにそれは言える。ちと怖い。>>734のコードを見ると、むしろGetVersionExがなくなる
方が怖いような気もするが。

まあ Win16からWin32になったときの大きなパラダイムシフトも何とか乗り切ったので、
"それなりに"楽観的にみれるし、準備時間は残されているので、なんとかなるんじゃない?
Delete手続きで質問です。
StringListに対してDeleteを使ったら
『変数パラメータに定数オブジェクトを渡すことはできません 』
というエラーが出るんですが、これはしょうがないんでしょうか。
ヘルプでこのエラーを調べても詳細は書いてありませんでした。

var
  List:TStringList;
begin
  List := TStringList.Create;

  List[0] := ' abcde ';
  Delete( List[0], 1, 2);
  Caption := List[0];

  List.Free;
end;
Deleteは変数を参照渡しします。
が、プロパティは変数ではありません。
一時的な変数を間に入れてください。
755梨@Delphi歴1日??:03/09/05 19:59
>>736
安全側に振るか、高機能側に振るかのポリシーの問題なのでは。

今回のは、「変更前は無条件にFlashWindowExを使っていた」ものを
「古いOSにできれば対応して欲しい」という趣旨で書き足すだけなので、
新しいOSでは原則FlashWindowExするという対応の方がいい気がした。
List[0] := Copy(List[0], 3, High(Integer));
757梨@Delphi歴1日??:03/09/05 19:59
>>734
ありがとです。
SysUtilsユニットには
Win32MajorVersion
Win32MinorVersion
CheckWin32Version
こんなのがあるわけだが。
759梨@Delphi歴1日??:03/09/05 20:57
正直言うと、バージョン取得にAPI使ってないと思います。

あと、>>729の方法で行くなら関数ポインタの値を見たら、
OS判別しなくても良いじゃないかって指摘されますた。
そりゃそうですね、と反省。
760デフォルトの名無しさん:03/09/05 21:04
.NETならOS判別なんて面倒で無駄な処理は必要なくなります!
StringGridの編集終了イベントが拾いたいのですが、
http://www2.big.or.jp/~osamu/Delphi/tips.cgi?index=0263.txt
これしか方法無いですか?
>>760
Javaですら携帯Javaと携帯エミュレータJavaで
環境を判断して書かなきゃならない場合が存在するのに?
>>762
放置できないなら来なくていいよ。
764デフォルトの名無しさん:03/09/05 21:21
>>763
ここDelphiスレだから
別にいいんじゃない。
766デフォルトの名無しさん:03/09/05 22:03
でも..やっぱDelphiって最強なんだよな!
放置
768761:03/09/05 22:31
そのスレの [Delphi-ML:66374] がポイントみたいっすね!
試してみます。
(ちょうどStringGrid継承コンポを使っていたので)
769761:03/09/05 22:46
この OnEditEnd でACol、ARowが欲しいんだけど…(;´Д`)
770761:03/09/05 22:58
事故レス
素直にTSetEditEvent型のイベントにして、
Col、Row、Cells[Col,Row]で値渡して十分だった…
>>761
OnSetEditText は普通に起きてるだろ。ちったぁ考えろよ。
渡さなくても Col Row はその時点で有効
773761:03/09/05 23:05
>771
編集のたびに起こるイベントじゃなくて、
編集終了時のイベントが欲しいんですよ。
編集最後の状態だけが欲しいっていう、
MLのスレ主と同じ状況っす。

逆に編集中のイベントが邪魔で…。
だから、Col Row はいつでも参照可。
775デフォルトの名無しさん:03/09/05 23:16
ListBoxのアイテムをダブルクリックすると発生するイベントは
ないようだけどこれは自作しないとだめ?
もしそうだとしたらどうやって作るのか教えてください
>>775
だから、よく見ろよ。
777デフォルトの名無しさん:03/09/06 01:07
>>776
お前が良く見ろ。
馬鹿が。
Look at the Event Pane of Object Inspector carefully! Understand?
>>775
ある
>>775=775
ばーかばーか氏ね盲目
>>780
そりゃー775は775だな。とても視力がよろしいようで何よりです。
782775:03/09/06 11:53
すんません,ありました(゚Д゚)
783775:03/09/06 11:59
いや・・・ない!!
騙されるとろろだった
784775:03/09/06 12:01
あるよ
OnDblClickってイベントがあるもの
ちなみに当方Del6
785775:03/09/06 12:03
偽物は辞めてください!!
でもそれってListBox自体がダブルクリックされた場合じゃないの?
アイテムとは違うような。それとも俺の勘違いか
787775:03/09/06 12:04
ついでに質問
あのWinMXのキューの部分で使われてるようなコンポーネントは
StringGridを使ってるの?どうにもStringGridでは使いにくいようなきがする
Winnyでも使ってるじゃない?あれStrinGrid?
にしてはなんかちがうっぽいんだけどなぁ
ネタですか?>>775
789775:03/09/06 12:06
786
いけないかな?
ListBox自体のダブルクリックを検出して,そのときに選択されているアイテムを
取得すればOKっぽいのですが
割れ厨は逝け
アイテム処理するならItemIndexが-1じゃないかを判定する処理をいれて
アイテムがなにか選択すれば実行ってのをOnDblClickの中にいれれば
いいんじゃね?
792775:03/09/06 12:06
いぇ当方大まじめです
793775:03/09/06 12:07
>>790
答えられねぇ無能はだまってろクズが
794775:03/09/06 12:08
それそれ,そういう風にしますThx!!
795デフォルトの名無しさん:03/09/06 12:54
質問です。

Delphiで、標準ダイアログに追加でコントロール等の配置ってできないのでしょうか?
VC等でのやり方はWEBを検索すると見つかるのですが、ヘタレなものでDelphiへの応用法が
わかりませぬ。。。
無理
コモンダイアログのカスタマイズはここがわかりやすい。BCBだけど
サンプルソースを読み替えればDelphiでもいける。
ttp://www.kanazawa-net.ne.jp/~pmansato/CommonDialog.htm
>>795
フリーコンぽーネントでそれようのがあるよ。
ListViewのVierStyleをvsReportにしたときアイテムを選択するには
一番左のカラムをクリックしなきゃだめなようですが、
これを行の中をクリックすればどこでも選択できるようにするにはどうすればいいんでしょう??
サブフォームをShowModalで表示し、ダブルクリックしたときに閉じるように処理したとき
サブフォームが閉じたあとメインフォームでMouseUpイベントが発生してしまいます。
どうすればいいのですか?
>>799
RowSelect:=True;
802デフォルトの名無しさん:03/09/06 14:44
String型の文字列をTStringStream型に代入するには
どうしたらよいですか?
ヘルプ読めないの?
アタマついてる?
>>801
thx
805デフォルトの名無しさん:03/09/06 16:32
スレッドの中でループまわすようにプログラムしたんだけど
外部からそのスレッドが作動しているか作動していないか見分ける方法は?
Terminatedは外部からじゃつかえないっぽいし…
>>805
public propertyなフラグを用意すればいい。
WaitForSingleObjectを待ち時間ゼロで実行して戻り値で判断すればいい
808デフォルトの名無しさん:03/09/06 17:15
エクスプローラのアイコンの自由配置と配置の保存についてなんですけど、
あれはどうやって実装されてるんでしょうか?

俺想像では、

指定フォルダのファイルを検索

検索されたフォルダを、リストに格納

レジストリとか、どこかに保存しているファイルの配置情報を読み込み

配置情報がなければ、リストをソートして、リストビューの可視部分のitemにファイル情報追加

配置情報があれば、それに従い同じく可視部分のitemにファイル情報追加

って感じだと思ったんですが

これだとファイル一個ずつ、ポイント保存して、
開くときは、ポイントを読み込んだファイル群から、
フォルダの可視範囲に入りそうな位置のファイルをチョイスして、
itemに追加して...ってかなり重い処理&保存情報大杉になってしまいます。
エクスプローラはどうやってんだあああああん。

誰か知恵ちょうだい(;´Д`)
809808:03/09/06 17:18
ええっと
追記… 
 
 
指定フォルダのファイルを検索

検索されたフォルダを、リストに格納
 
 
上の二つで言ってるファイル、フォルダはそれぞれ ファイルやフォルダってことです
わかるとは思いますけど…

しかし、なんか文バラバラだ…
1レコード256+4+4の固定長のバイナリファイルにハッシュで突っ込めば?
エクスプローラって重いじゃん
812808:03/09/06 22:31
確かに軽くはないけど
たぶんListViewの限界だと思うんだけど
そうでもない?

自動配置しない状態なら
エクスプローラより早い処理もできるけど
TListViewの、か?
自分でラッパクラス作れ
814デフォルトの名無しさん:03/09/07 04:25
TStringListのCommaTextやDelimitedTextで
コンマだけで区切りたいのですが、Delimiterを','に
セットしても、スペースでも区切られてしまいます。
どのようにしたらよいでしょうか?
んなこたない。
最小のサンプル作って確かめてみろ。
816デフォルトの名無しさん:03/09/07 04:54
いろいろ試してみたのですが、やはりうまくいきませんでした。どこが間違っているかも分からないです。
var
file_list: TStringList;
line_list: TStringList;
i: integer;
list : TListItem;
begin
file_list := TStringList.Create;
line_list := TStringList.Create;
try
file_list.LoadFromFile('MyList.csv');
for i := 0 to file_list.Count - 1 do
begin
line_list.Delimiter := ',';
line_list.CommaText := file_list[i];
list := ListView1.Items.Add;
list.Caption := line_list[0];
list.SubItems.Add(line_list[1]);
list.SubItems.Add(line_list[2]);
list.SubItems.Add(line_list[3]);
list.SubItems.Add(line_list[4]);
end;
finally
file_list.Free;
line_list.Free;
end;
end;
>>816
スペース区切りは強制です。
818デフォルトの名無しさん:03/09/07 07:46
Delphiの神託って買いですか?
http://www2u.biglobe.ne.jp/~sho-/pcgame/Delphi.html
古すぎ
>>814
確か スペースでも区切られる仕様だと記憶してる。
http://www.geocities.co.jp/SiliconValley-Oakland/8522/data/uSpliter.txt
これ使えば そのループは
for i := 0 to file_list.Count - 1 do
 with TStringSpliter.Create( file_list[i]; ) do try
  list.Caption := getCSVfield;
  list.SubItems.Add(getCSVfield);
  list.SubItems.Add(getCSVfield);
  list.SubItems.Add(getCSVfield);
  list.SubItems.Add(getCSVfield);
 finally free;end;

と綺麗に書けるよ。
× with TStringSpliter.Create( file_list[i]; ) do try
○ with TStringSpliter.Create( file_list[i] ) do try

getCSVfield は TStringSpliter のメソッドね。
spliterのスペルはいつ直るんだろう・・・
>>820
紹介してもらったコードを使ってできました。
ありがとうございいました。
nilってなんて読むの?ニル?
ラテン語 nihil 「無」の短縮形
dllを使おうと思って調べているのですけど
dllの作り方は解ったのですが他のファイルから呼び出す方法がわかりません
もし解説サイトなどがあれば教えてください
>>822
直しちゃうと VCL TSplitter と喧嘩しちゃうからワザとなのかも。
>>826
何かのプラグインを作って試してみたら?
>>827
んなアホな。何のためのnamespaceだよ。
>>829
いや、それはわかってるけどさ、
もし RegisterClass して使われると名前空間関係なく喧嘩しちゃうでしょ?

まあ問題ないなら直して使ったら?
見苦しい言い訳ハズカシイ
放置!
833デフォルトの名無しさん:03/09/07 15:47
空文字列をCSVに変換したとき要素数はいくつ?その根拠は?
1つ
RegisterClassは滅多に使わないけど RegisterComponentの名前問題は厳しいな
ハァ?
>>835
お前はよくやったよ。今日は家に帰ってゆっくり休め。
838833:03/09/07 16:05
空文字列なら0
空文字列以外はTrimして1って変?
これだと' 'は['']になる。
スレッドでもう一つ質問
CreateされたかCreateされてないかを見分ける方法ないでしょうか?
プロパティーでDefaultにFalseを指定しても
これはCreateするまで有効ではないんですよね?
>>838
変すぎるyo
841833:03/09/07 16:34
>>840
そのココロは?
調べてみたらruby1.8のCSVは838のような仕様になってるからそうしてしまおうか。
ペケボタンを押しても
「終了する前に〜をして下さい」といって 終了を阻止するようにするには
どうしたらいいの?
TForm.CloseQuery
844デフォルトの名無しさん:03/09/07 17:30
>>843
代入できない左辺値です
といって怒られるんですが…
勝手に怒られてろよ。
846デフォルトの名無しさん:03/09/07 17:58
411 :デフォルトの名無しさん :03/07/04 15:28
MDI アプリケーションで、親フォームの閉じるボタン
(フォーム右上の×ボタン) が押されたっていうイベントを、
子フォームよりも先に親フォームで捕まえる方法ってありますか?

412 :デフォルトの名無しさん :03/07/04 16:20
親フォームのCloseQueryをオーバーライドして、
bool __fastcall TMainForm::CloseQuery(void)
{
  // 子フォームのCloseQueryが呼ばれる前にしたい処理
  //       :
  return TForm::CloseQuery();
}
とか。あとWM_CLOSEがきた時点で処理するとか。
>>839
質問の意味がわからない
>>847
馬鹿?
カツヲ発病
ごめん。誤爆しました。
>>847
839 が
>これはCreateするまで有効ではないんですよね?
と書いてるのは、インスタンスを作る前にアクセスしようとする厨房の質問だと
852デフォルトの名無しさん:03/09/07 20:31
CLR上で動くDelphi.Netの質問はこちらでよろしいですか?
違います
854デフォルトの名無しさん:03/09/07 20:44
Win2000にてDOSプロント上で動作するプログラムを作成しようと考えています。
その際、DelphiにてDOSプロント上の文字の色や文字の表示位置などを指定するには
どのような方法があるのか教えていただけませんか?
>>854
GetStdHandle
GetConsoleCursorInfo
SetConsoleTextAttribute
SetConsoleCursorPosition
など
>>854
DOSプロンプトとコンソールアプリは全く別のもの
見かけは似てるけど
857デフォルトの名無しさん:03/09/07 21:20
DOSプロンプトはコンソールアプリのひとつなんじゃないの?
そうだね。

>Win2000にてDOSプロント上で動作するプログラムを作成しようと

厳密に言って、これはどんな意味かな?

メモ帳だって、notepad とすると起動するので「DOSプロント上で動作するプログラム」
になるのかな?
>プロント
860854:03/09/07 22:37
>854
教えていただきありがとうございます。
このような関数(?)を探していました。
本当にありがとうございます。

>856,857
DOSプロント上で動くアプリ=コンソールアプリと思っていました。
今後はきちんと言葉の意味を確認した上で質問することにします。


>858
確かに考えてみると質問の仕方がまだまだ曖昧でした。
自分の考えていたのはCUIのアプリのことです。
861デフォルトの名無しさん:03/09/07 22:57
Delphiのcaseでfall throughって書ける?
ひとつのビットマップを分割して表示するには、
どうすればいいのですか?
>>861
gotoですっ飛ばす…よりは、共通部分を関数内関数にしたほうが健全w
>>862
TCanvas.CopyRect() で好きな部分を好きなだけ表示
865デフォルトの名無しさん:03/09/08 00:05
del厨馬鹿ばかりだな
Ver7にあげたらおかしくなったんだけど...
基本フォームにDBグリッドがあって、継承したフォームで
DBグリッドにカラムを作成して、カラムを削除しようとしたら
「別のフォームから継承したコンポーネントを含んでいるため削除できません」
になってしまう。
完全にバグだと思うがサポートインシデント無いから問い合わせ出来ん。
だれか助けてー。
>>866
参照しているDataSetが Active = True のときにこのようなことが
起きたことがあるような気がしたんだけど。

ちがっていたらスマソ。
すみません質問です。
BCBで作ったコンポーネントはDelphiで使えるようにできますか?
検索したら2ちゃんの過去スレが出てきて「ほぼ不可能」とか
書かれていたんですが・・パッケージ化しても駄目なんですか?
ActiveX ライブラリを作成しようと思うのですが、
ちょっと作り方がわかりくいので、参考になるページはあるでしょうか?
メソッドの引数や戻り値にStringやBooleanを設定するにはどうすればいいのか…。
(LPSTRとWordBoolでいいんですか?)
"動的配列で構成されたレコード型"の配列を使っているのですが、
その配列に値を代入しようとすると
配列型が必要です。
とエラーが出ます。ポインタ操作のページを見ていろいろ試しましたが
うまくいきません。何かいい方法はないでしょうか?

---------

Foo = Record
 bar : array of Word;
end;

var
 hoge : array[0..15] of Foo;

(略)

Func(str,hoge[0]);

---------
関数Funcのところでエラーが出ます。
>>870
Funcの定義は? もしかして procedure Func(str:string ; var array of Foo); じゃあるまいな?
872869:03/09/08 19:29
無理やり作ったActiveXをVB側で読み込ませたら、
コード補完表示した瞬間にアボーン(;´Д`)

参考文献でもいいので情報ぷりーず…
>>871

procedure Func(str : String; Data : Foo);

です。
875869:03/09/08 19:54
>>873
これはActiveFormが中心の本ですよね?
私は自作クラスをVB側に提供したいので、
ActiveXランタイムを作成したいのですが、
この本で参考になりますかね?

コード補完では落ちるのを回避できましたが、
自作クラスのメソッド実行時にアボーン…(;´Д`)

文字列をBSTRで渡すのがマズイ?
>>874
それ見る限りは問題はないと思うけどね。
もしかして、 hoge を初期化してないんじゃないの?

ローカル変数は必ず初期化してから使わないといけないよ。
 Foo に動的配列を使ってるから、変なサイズが入ってるんじゃないの?

それから、procedure Func(str : String; const Data : Foo); にした方がいいよ。
その呼び出しの複製は無駄なコピーだと思うけどね。



>それから、procedure Func(str : String; const Data : Foo); にした方がいいよ。
str はなぜ const にしませんか。めちゃくちゃ長い文字列かも。できないの?
>>877
const にしても問題ありません。ただ、

文字列は、ちょと特殊なテクニックが使われているのです。
複製が行われた時には実際の値の複製はされなくて、何か変更があった時にコピーがされるのです。
>何か変更があった時にコピーがされるのです。
わかりました。ありがと。
その場合の初期化とは
hoge[0].barのサイズを決めるということですか?
それはFunc内でやることになっているのですが・・・

実際に作っているプログラムはstrで与えられるファイル名のデータを
解析してDataにためるものです。
>>875
OleStrToString・OleStrToStrVar 使ってるんだよね? 問題ないと思うけど?
>>880
それがやりたいならば

procedure Func(str : String; var Data : Foo); //var は out の方がいいかもね

まあ、
function Func(str : String) : Foo;
と帰り値で渡すのがいいと思うけどね
883869:03/09/08 20:39
>881
チョンボでした(;´Д`)
ActiveXのクラスの中で自作クラスをCreate、Freeしてるつもりでしたが、
ActiveXのクラスってCreate、Destroyって無いんですか?
HasしているクラスのCreateが行われてなくてアボーンだった模様(;´Д`)

クラス生成時にHasしているクラスの生成とかはどうすればいいですか?
>>867
データセット閉じてもダメですた。
質問なのですが、delphiでコレクション系のクラスってどんなのが
あるのでしょうか?

なんかTListとかいうのしかみつからなかったのですが、Hashみたい
なクラスは無いの?
886869:03/09/08 21:09
>883
OleStrToString・OleStrToStrVar使ってません。
これいるんですかかね?
メソッドの引数として貰った文字列はそのままで使えましたけど…。

戻り値が文字列のところをBSTR *にして、
Result := ClassA.StrProp;
って渡しているんですが、VB不正終了…
887デフォルトの名無しさん:03/09/08 21:09
THashedStringList
Contnrs.TBucketList
VBから移行しているのですが、VBのQueryUnload手続きにあるUnloadModeのような
引数はDelphiにはないのでしょうか?
UnloadMode引数は、プログラム(というかウィンドウ)が閉じられるとき、
閉じようとしたのは誰なのか(ユーザーやOSなど)を知ることができるものです。
この説明であっていると思いますが、よろしくお願いします。
>>889
なぜDelphiスレでVBのなんて説明のしかたをするんですか?
VCLのソースを見ろって言葉を何度も見かけてるんですけど、
どうやったらソースを見れるんですかね?
>891
そういう排他的レスつけるのイクナイ(・A・)
>892
Pro版以上には付いている。
後は対象のコードの上でCtrl+クリック汁
895889:03/09/08 23:24
質問の仕方が悪かったので改めます。
フォームが閉じられるとき、閉じようとしたのがユーザーなのか、Windowsの
終了時の巻き添えなのか、などの情報を取得する方法はありますか?
直前でCopyFromしていたFileStreamを
FreeAndNilする瞬間にエラーが出ているんですが、
これは書き込み途中で先に開放が行われようとしているのでしょうか?
>>787
リストビューを詳細表示モードで使っているか,あるいはリストボックスとヘッダーの組み合わせ.

グリッドはボタンやリストボックスのようなコモンコントロール
(Windowsに標準で用意されているコントロール)ではないので
世間一般のアプリケーションではグリッドコンポみたいなのが使われることはあまりないかもしれません.

898デフォルトの名無しさん:03/09/09 00:56
ショートカットでCtrl + 1、Ctrl + 2ってどうやって設定するのですか?
そのまま'Ctrl+1'をShortcutにコピペじゃ駄目?
900デフォルトの名無しさん:03/09/09 01:05
>>899
できました
ありがとう
901デフォルトの名無しさん:03/09/09 01:31

FormをAlphaBlendで透明化して、かつ
常に他のアプリケーションのウィンドウよりも
手前に表示させることはできますでしょうか
AlphaBlend := True
FormStyle := fsStayOnTop
903 :03/09/09 01:52
>>901
検索すれば「常に前」は出てくると思うが、もう既に検索したという前提で、
透明化すると「setwindowpos」では何か不都合があるのかな?
904デフォルトの名無しさん:03/09/09 02:27
>>895
OnClose/OnCloseQueryで判別できます。

ユーザーがウィンドウを閉じると、OnCloseQuery→OnCloseの順に発生します。
Windowsを終了させるだけだと、OnCloseQueryしか発生しません。
フォーム上に貼り付けたコンポーネントの重なり順をプログラムから変更する方法はありますか?
ZOrder とか ZIndex みたいなのがないかなぁ、と。
>>905
BringToFrontとSendToBackでゴニョゴニョゴニョ
907デフォルトの名無しさん:03/09/09 02:57
ウィンドウズアップデータをインストールしましたら
ウィンドウズの画面に変なアイコン(Microsoft XML 4.0 Parser SDK)が出てきました。
これは何ですか?検索したんですが分かりません。
Windows2000ServicePack4にしました。バイオのデスクトップ型です。
Microsoft XML 4.0 Parser SDK
はソフト開発とかのプログラミングとかで使うやつですかね?
908905:03/09/09 03:07
>>906
なるほど、こんなメソッドがあったんですね。
ヘルプを眺めているときは気が付きませんでした。
どうもありがとうございました。
>ボタンやリストボックスのようなコモンコントロール
ボタンやリストボックスはコモンコントロールじゃないよ
ステータスバーやツリービューはコモンコントロールだけど
>Windowsに標準で用意されているコントロール
標準コントロールとコモンコントロール
MemoにたいするPerformをラップしまくったコンポーネントってない?
>911
意味和漢ねぇ
913911:03/09/09 07:16
こういうのをラップしてCursorPosLeft/Topプロパティとしてアクセスできるようにしたものです。
em_LineFromChar メッセージを使用することで行番号を取得できます。


procedure TForm1.Button1Click(Sender: TObject);
var
iLine : Integer ;
begin
iLine := Memo1.Perform(em_LineFromChar, $FFFF, 0);
{ 最初の行は,0です。}
messageDlg('行番号: ' + IntToStr(iLine), mtInformation, [mbOK], 0 ) ;
end;

914デフォルトの名無しさん:03/09/09 07:17
>>902
>>903

ありがとうございました
>>913
TMemo はだいたい7割くらいはラップしてるけど、のこりは、コードが書けるなら
簡単に派生クラスを作れるね。自分で作っても、1.5時間くらいでできるのでは。
TStringListを使ってテキストファイルを読み込むと
だとHogehoge.Countで全部の行が簡単に得られるけど、
ただのStringの文字列で文字数を得るには1文字ずつ取得していって、
文字があるかどうか確認するしかないのでしょうか?
Length(Hogehoge.Text) // 文字のバイト数を取得(漢字は2バイトでカウント)
Length(WideString(Hogehoge.Text)) // 文字数を取得
Length
919916:03/09/09 10:33
ありがとうございます。 すっきりとまとまりました。
920デフォルトの名無しさん:03/09/09 11:46
TBitmapのTransparentについて聞きたいのですが、
ビットマップの背景とはどこをさしているのでしょう?
□□□□□□
□■■■■□
□■■■■□
□□□□□□ なら□の部分になるのでしょうけど、

□□■■■
■■■■■
■■■■■
□□□■■  のようなビットマップだと解釈に迷います。
どの色を背景とするような指定はできるのでしょうか?
>>920
どの色を背景とするような指定しか出来ません。
922895:03/09/09 12:22
>>904
ありがとうございます。今から試してみます。
>>921
どの色が背景かと決められれば十分です。
どのようにして決めるのでしょうか?
>>923
TransparentColor / TransparentMode でヘルプを見て下さい。
ファイルストリームにフラッシュする命令ってあります?
>>909-910
ごめんなさい,
標準コントロール=コモンコントロールだと勝手に勘違いしておりました.
フォローに感謝いたします.
927デフォルトの名無しさん:03/09/09 17:08
>>907です。
無視しないで下さい!プンプン!
>927
SDKは開発キットと言えるものですから、確かにその通り。
しかしそれはDelphiとは直接関係ないので、ここでそれ以上の回答は…。
>>927
スレ違いです!プンプン!
は,いかん,ここは優しく答えるスレだった _| ̄|○
コンソールタイプのアプリケーションの開き方が分かりません
932デフォルトの名無しさん:03/09/09 21:39
超初心者の教えて君ですみません。

レコード型をblockwrite,blockreadで読み書きしたいのですが、
string型が文字化けしてしまいます。
char型を使うとよさげな記事を見かけたのですが、
使い方がわかりません。ご指南お願いします。
933932:03/09/09 21:40
あ、あともうひとつだけ!

canvasにtextoutで書いた文字などに
別ウィンドウが覆いかぶさると文字が消えてしまうのですが
対処法があればお願いします。
>>932
レコードメンバーをstring ではなく array [0.. 大きさ-1] of char にして下さい。

>>933
OnPaintイベントで描くようにして下さい

>>932
ShortString使え
936デフォルトの名無しさん:03/09/09 22:39
>>928
ありがdです。
あちこち(初心者板のくだ質スレ・WINDOWS板のWIN2000スレとUPDATAスレ)で
質問しましたが放置とかスレ違いとか言われて困ってました!

最後に質問です!
開発キット(SDK)のスレはどこにあるんですか?そこにいったほうがいいんですよね?
それとも、私のような初心者ど素人にはSDKは縁のないのでアンインストールした方がいいんですか?
>>929
どこで質問すればいいんですか?教えてプンプン!
>>936
よく判らんが、好きにしたらと思うのだが?
まあ確かにWindowsUpDateは時々悪さする時あるな
この前、勝手にネットワーク設定変えてWindowsログオン外しやがったもんだからキーボード接続せなならん事になった。
938928:03/09/09 22:53
>936
SDKについての質問などから、おそらく現在のあなたには必要ないものでしょう。
従ってアンインストールしてもそれほど問題も無いと思われますし、
また、あなたをSDKのスレに誘導したとしても、おそらくそこで放置プレイされるのが
オチだとおもいます。
(なお、私はSDKスレがあるかどうかさえ知りません…)

ですので、今はSDKのことはスパッと忘れましょう。
あなたが本当にSDKを必要だと思った時に、その時、また会いましょうw
>>936
アンインストールするよりは、ショートカットだけ消しておくべし。
M$謹製の何かのアプリが使ってるんじゃないの?
940932:03/09/09 23:00
>>934
>>935
アドバイス、ありがとうございました。

array [0..最大値 -1] of charは試したことがあるのですが
型キャストに失敗しているのか、エラーが出てしまいます。
なんかつまらないミスしてそうなんですが、もうちょっとだけお付き合いお願いします。

あと、この場合、最大値が不明なケースはどのようにするのがベストでしょうか?
>>940
最初に文字列長を2バイトで書き込んで次に文字列のバッファを書き込む。
読み出すときはその逆。それからBlockRead/Writeは古い手続きなので
TFileStreamを使うことを検討すべし。
942デフォルトの名無しさん:03/09/09 23:40
ちょっと、スレ違いかもと思いましたが、ここでお聞きします。

ツールバーやボタンなどで、アイコンを表示することができますが、
そういったアイコンを、販売しているソフトはないでしょうか?

Webなどの素材集を探してみたのですが、それらしいものを見つけられませんでした。
お勧めのものがありあましたら、お教えください。

会社で使用するため、著作権関係がうるさいので、Freeのものは使用できません。
(会社の規定で利用できない。)

また、VB6も持っているのですが、そこにあるアイコンは、使用してもライセンスは問題ないのでしょうか?

標準であるものって寂しいですよね。
お願いいたします。
BorlandのIDEのをパクればまさか訴えられることもないだろ。
Borlandに聞いてみたら?
>>937
>>938
>>939
さんくすです。助かりました。
>>942
フリーなら、http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999486538&res=3&fi=no
とかにあるけど、フリーダメなんだよね?
じゃあ、自分で書くか、デザイン会社に発注すべきでは?
それにしても、いまだにフリーソフトウェア禁止の会社があるんだね。
ApacheもTomcatもeclipseも何にも使えないじゃん。アーカイバもFTPクライアントも全て買ってるの?
>>940
array [0..最大値] of char はヌルで終わる文字列と呼ばれています.

・文字列定数を代入できる
 ca := 'digital'; // 配列caの内容は[d][i][g][i][t][a][l][#0]....となります
・文字列変数“に”代入できる.
 s := ca;
・文字列変数“を”代入することはできない.
 文字列変数の内容をコピーしたい場合は StrPCopy(ca, s); とします.
 ※sの長さが決して最大値より長くならないように注意してください.
  StrPCopy(ca, copy(s, 1, High(ca)); とすれば大丈夫でしょう.

なお『短い文字列』(ShortStringまたはstring[長さ])を使う場合はおたがいに代入することができますので
こちらのほうが簡単だと思います.
>array [0..最大値] of char
は定義上は文字型の(一次元)配列。ただしコンパイラが PChar と同値と取り扱ってくれる。
PChar も Array of char も、ヌルターミネートはコード/プログラマの責任。

ヌルターミネーターが付着するのは Ansi/WideString を PChar にキャストしたとき。そのときのみコンパイラ / RTL がヌルターミネーターの存在を保証する。
948579:03/09/10 08:12
てすと
949デフォルトの名無しさん:03/09/10 08:13
すいません、教えてください。
Delphi5にてWindowを持たないアプリを殺す事は可能でしょうか?
(ググってみたんですが見つかりません)
常駐しているアプリを殺したいんです・・・
>>949
常駐していても、窓ハンドルを持っていないと色んなメッセージを受けとれないので、たぶん持っていると思います。
もしSetWindowsHookExとかでフックしてるようだと、外から強制終了させるわけにもいきませんし
>>949
NT 系のタスクマネージャがやっているような、プロセス終了方法。ということ?
Window を持たないプロセスの列挙方法が知りたい?
プロセスハンドルを押さえた上で、殺し方を聞きたい?
>949
ExitWindowsEx
>>952
OS ごと終了するから、どんなスレッド/プロセスでも殺せるけどさぁ.
954デフォルトの名無しさん:03/09/10 11:23
Del6Proでプロジェクトをビルドすると毎回VCLのUNITもコンパイルされて
DCUが自分のDCUと同じディレクトリに生成されてしまいます。
デバッグもVCLにステップインしてしまいます。
どうすればVCLのコンパイル済みのDCUを使ってくれるのでしょうか。
>>954
ふつーはそういうことはおきないんですが。
出荷デフォルトから何か変更してるでしょ?
考えられるのは...
・検索パスに source ディレクトリが登録されている。ってところか?

または
・ライセンスクラック版を使っている
コンポ作っているのですが、イベントが意図しないタイミングで発生するので、
ステップ実行でイベントの呼び出し元を知りたいのですが、
呼び出し元に行ってくれず、描画処理の方に行ってしまいます…
(StringGrid継承コンポなんで)

せめて、イベントを呼び出したメソッドを知る方法はありませんか?
>>957
そのイベントにブレークポイント設定して実行して停止したら
[表示|デバッグ|呼び出し履歴]
959957:03/09/10 12:05
>958
ありがとうございます。
これで調査してみます。
960957:03/09/10 12:19
で、試したら、一回目の呼び出し元はちゃんとしていた(MouseDown)だったんですが、
2回目は無し…(呼び出し履歴は下からExe名、イベント名SelectCellのみ)

(;´Д`)
961957:03/09/10 12:25
>960
あ、分かりにくく書いてしまった。
2回呼ばれていたのはSelectCellイベントでして。
その呼び出し元が知りたくて…。

goRowSelect切ると、まともに動作しているように見える…。
デバッグ情報をもたないモジュールから呼ばれているのでは?
デバッグ情報つきの DCU でアプリケーションとコンポーネントを再コンパイルしてからもう一度。

それでもわからないときは、CPU 画面で、F7 でシコシコ手繰っていく...
963957:03/09/10 13:28
>962
わー、一杯履歴が。
ありがd〜

これで解明したらいいなぁ…。
964デフォルトの名無しさん:03/09/10 15:14
readln, writelnと同等のインターフェースを持つ関数ってユーザーが定義できる?
できないとしたらコンパイラが特別にreadln/writelnを認識してパースしてるってこと?
だとしたらかっちょ悪いね。
>>964
他にも system 設定のものはそういうのが多いよ。
まあ盲腸のようなもんだね。今は特に必要としないけど pascal である為には必要という事
966デフォルトの名無しさん:03/09/10 19:10
今ノートPC(pen3M1G,512MB)でdelphi6proを使用しているのですが、
結構フガフガします。
delphi6proがサクサク動くような構成のPCって言うのはどんな感じでしょう?
デスクトップで5〜10万(OS除く)という条件ならどういうヤシが良いでしょうか。

また皆さんの使ってるPCのスペックと、動作具合はどんな感じなんでしょうか?
・普段使わないパッケージはロードしない
・NT,2000,XP使う

ていうか俺のマシンより遙かに良い環境じゃねぇか…。
968966:03/09/10 19:21
>>967
普段使わないパッケージをロードしない、とは
どういうことなのでしょう?w
初心者過ぎて分かりません。delpgi暦は2年なのですがw
>966
あと、画面効果は切る。
XPのLuna(ビジュアルスタイル)も当然止めてクラシックスタイルに。

OS書いた方がいいよ〜
メニューの「コンポーネント」-「パッケージのインストール」で、
普段使わないもののチェックをOffにする。
971●のテストカキコ中:03/09/10 19:33
http://ula2ch.muvc.net/ (このカキコは削除しても良いです)
>>966
買うならメモリ512でなるべくCPUの速い奴。Celeronは不可。
マルチモニタ激しく推奨。

ついでに実行時パッケージを使って構築するとリンクが早くなる。
>>966
にやにやすんなよ
974966:03/09/10 19:38
>>969
あ、すみません。OSはXPproです。

普段作成するプログラムがjpgイメージを多く使う(全部で数MB)のですが、
実行するにも保存するにもすんごい時間がかかってしまいます。
XP自体の無駄な機能は切ってます。クラシックスタイルにもしてます。

>>970
ありがとうございます。今その通りにやってみたらなんか起動が早くなりました!
何やらダイアログがポンポン出てきましたが、一覧から削除します、みたいな
のだけOKしときましたが大丈夫でしょうか。
〜が使用できなくなります、って言うのはやめておきました。

いやありがとうございますた。これだけで早くなるなんて。
ほかにも技があったら教えていただきたいです。

>>972
CPUの速さってそんなに影響しますか?メモリとかHDDが遅いのかな〜
と思ってたんですが。delphiにセロレンはだめなのですか。
マルチモニタはどうもなれないので1画面でせせこましくやっておりますが・・。

>>973
確かに970さんのおかげで早くなったのでにやにやしますが。
Unicodeのファイル名を扱うにはどうすればいいの?
>>975
現実的に考えてDelphiじゃ無理。
.NETなら余裕なんだけどw
$ man cout
No manual entry for cout
>>975
扱うってなんだ?もっと具体的に書け。
>>966
それDelphiのせいじゃなく、データがでかいから*.dfmの保存に時間かかっているだけじゃない?
データ部を別ファイルにするように設計してみては?(というより巨大データは普通は分離しておくかと)。
>>975
ファイルシステムがUnicode文字に対応していないならば無理してUnicodeで扱う必要はない。
普通にAnsiにしておくほうが現状問題ない。それでもやるのかい?
>>980
アホDel厨は素直にFAT16を使っていてください。
http://www4.airnet.ne.jp/munakata/filesystem.html
>>946
>>947
ありがとうございました。
現在抱えていた課題はクリアできたみたいです。
array of char のほうで何とか。

今後の課題のために、PcharとTfilestreamもちょびちょび勉強したいと思います。
お世話様でした。
>>978
はあ?馬鹿?
984966:03/09/10 21:35
>>979
多分そうだと思うのですが、よく分からないのであきらめますw
フォームにイメージをべたべた張ってあるだけなので、
データを別に・・と言われてもさっぱりです。
>>983
はい。馬鹿。
>>981
Win95/98/MeでUnicodeを使用したファイル名を扱う方法を教えてください
Delphiは糞と言うことで
988コナン:03/09/10 22:26
>>986
あれれぇ〜? おかしいなぁ。NT/2K/XPはどこいったんだろう?
あっそうか。NT/2K/XPならUnicodeを使う方法を知っているってことだね。
でもそうすると、NT/2K/XPなら問題あるってことだよねぇ。
でも現状問題ないって言っているし。
もしかして、アホDel厨さんはNT/2K/XPなんて想像外のことなのかなぁ?
FATの内部形式と外部形式を混同しないこと
990デフォルトの名無しさん:03/09/10 22:39
で、NT系でファイル名にUnicodeが使えることに対してのレスはないのかね?
すでに答えは出ている。Delphiじゃ無理だ。

975 :デフォルトの名無しさん :03/09/10 19:55
Unicodeのファイル名を扱うにはどうすればいいの?


976 :デフォルトの名無しさん :03/09/10 20:02
>>975
現実的に考えてDelphiじゃ無理。
.NETなら余裕なんだけどw
てーか次スレよろ↓
しく↑
VBは文字列はUnicodeだから
Unicodeのファイル名も何も特別なことを
しなくて扱える。
>>VBは文字列はUnicodeだから
Ansiファイル名は扱えないの?
>>995
Ansi文字列はUnicodeに変換される。
>>975
現実的に考えてDelphiじゃ無理。
.NETなら余裕なんだけどw
>>991
無理じゃない。ライブラリが標準で対応していないだけだ。
自作しようかな。作りたくなってきた。きっと海外ものなら既にあるだろうけど。
海外物は日本語処理とか丁寧に作ってあるものが少ないから嫌な自分でした。
>>Ansi文字列はUnicodeに変換される。
というわけで、Delphi でも大丈夫
>>998
だから現実的に考えて無理なんだろうね。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。