モナーの *やさしい* Delphi質問スレ Ver3

このエントリーをはてなブックマークに追加
1DELモナー
01/10/15 11:36
DELモナーがどんな厨房疑問でもやさしく答えます。
DELモナは時に私であり、時には別の人。
他のスレに書き込んで罵倒される前に、まずここで質問しよう。
 ∧ ∧
( ´∀`)(    )


■前スレ

モナーの *やさしい* Delphi質問スレ
http://pc.2ch.net/test/read.cgi/tech/1003113413/

モナーの *やさしい* Delphi質問スレ Ver2
http://pc.2ch.net/test/read.cgi/tech/1011649179/
2ヲッチャー:02/02/23 23:42
お疲れー>>1
で、誰なんだ?全くその通りだとは思うが厳しいな<Hotkeyちゃんの掲示板
2ちゃんねらじゃないのか?
3デフォルトの名無しさん:02/02/24 00:09
毎回思うのだが、>>1

 ∧ ∧
( ´∀`)(    )



 ∧ ∧
( ´∀`)
(    )

に治してやれよ。モナー分割されたままだぞ。
4デフォルトの名無しさん:02/02/24 00:11
 ∧ ∧
( ´∀`)(    )
>>3
C++相談室の v(^・^)v みたいなもんだ。気にするな。
 ∧ ∧
( ´∀`)(    )

 ∧ ∧  ∧ ∧
( ´∀`)(    )

 ∧ ∧  ∧ ∧
( ´∀`)(´∀` ) <オマエDelモナー
  ∧
Delモナー
7デフォルトの名無しさん:02/02/24 00:59
奈々子さぁーん ハァハァハァハァ
8ヲッチャー:02/02/24 01:33
しかし、言ってることも分かるしなぁ。
難しいところだ。彼のセンスは20年くらい前みたいだ。
もしかしてすごい年取ってるor子供なのか?
って、誰も知らんのか?
一応、
Borland 言語処理系プログラマー Watch スレ Part2
Delphi/CBuilder/JBuilder などの Borland 製品を使っている
プログラマーを観察するスレです。

http://pc.2ch.net/test/read.cgi/prog/1014384974/

があります。
10 ◆10000jp. :02/02/24 13:50
(´∀`)<新スレ乙です〜 えへへ
くだらない質問でゴメンナサイ
personalでフリーソフトを作って配布してはいけないのでしょうか?
あと、データベース関連やWebアプリ関連以外でpersonalではできないことは
あるのでしょうか?
要するに、personal版で本格的なフリーソフトを作ってはいけない(作れない)のでしょうか?
>>11
そういう質問を匿名掲示板でされてもなぁ。返ってきた答えを信じるの?
D6 Personal を所有しているのなら、License.txt を読めばよい。

ここに最新のライセンスファイルがある。
http://www.borland.co.jp/delphi/del6/license.txt
1311:02/02/24 14:32
>12
フリーソフトだったらいい、としか読めないのですが・・・
解釈が間違っていますか?(ネタや煽りではありません)
>>13
いいんでない?

で、本格的なフリーソフトってなによ?
1511:02/02/24 15:42
元々VisualC++を使っていて、最近Delphipersonalを使い出したクチですけど
フリーソフトを作るならDelphiの方が作りやすいのは自明なので
Delphiでフリーソフトを作ろうと思っています。

しかし作っている内にpersonalの機能制限やライセンス制限の壁に
ぶち当たってしまうのでは、という不安があるわけです。

そもそもシェアにしようなどという考えはありません。

でも、「Delphiを使い倒したら、嫌でもprofessional版を買いたくなるよ」
という発言が過去にありましたね・・・
んだから、本格的なフリーソフトってなによ?

本格的でないフリーソフトとの違いを説明してくれ。
直接的にも間接的にも対価を受け取らなければよいというライセンスだと思う。
只で配るなら抵触しない。(CD-R代とか)実費程度でも受取ったらダメ。
>>17
配布HPでバナー広告を表示するのはどうだろう?
>直接的にも、間接的にも、アプリケーションプログラムの配布または使用について、
>いかなる報酬も受け取ってはなりません。

です。契約文章の最終判断は契約当事者間(この場合特定プログラマーとボーランド)との
話し合い、および食い違った場合には裁判所のみが介入できますから、第三者の私が答えを出すことは
不可能です。

「アプリケーションをダウンロードさせるページでバナー収入を得る」のは
グレーゾーンでしょう。まぁボーランドがいちいちチェックすることもないでしょうけど。

... バナーって儲かるの?ちょっと心が揺れたぞ。
バナー広告の場合は、プログラムの配布や使用の見返りとして
ユーザから報酬を受け取るわけではないので可なのでは?

あくまでWebページの一部を広告スペースとして提供することに対して
広告代理業者から対価を受け取っているに過ぎない・・・と言ってみるテスツ

>>20
自分もそう思う。ソフトの見返りとしての報酬ってわけじゃないし。
じゃあすんごいソフト作って
「雑誌に載せさせてくれ」って言ってきた出版社から謝礼もらうのは禁止か・・・な。
>>22 といわれてから買ってもまにあうでしょ

ところで、personalでもWindoewsAPIに精通さえしていれば機能的には問題ないけど
コンポーネントを自作しようという場合にはVCLソースが無いと厳しいと思うよ
24デフォルトの名無しさん:02/02/24 21:10
>>22
そんな礼儀を知る雑誌など日本には無い
つーかそんなすごいソフト作れるようになったらProfessional欲しくなるって絶対。
機能的にはPersonalも十分だけど、バリバリ使うならやっぱりコードエクスプローラ欲しいもんね。
>>22
それはどう見ても「配布の見返りとしての報酬」ではないかな?
相手はそういう名義で領収書送ってくるぞ。
まぁまずはすんごいソフト作らなきゃいけ無いなぁ
>>15
フリーソフトの開発ツールとしてのpersonalとprofessionalの差は
・ライブラリのソースコードがない
・統合環境の一部の支援機能がない
くらいしかないように思います.

どちらもあると便利ですがなくても何とかなるものではないかと思います.
後者はDelphi3や4でついた機能ですし.

私は初代と2.0までは一番安いやつでしたが困らなかったです.
(あのころは一番安いやつにもデータベースがついてましたが全然使ってなかった)
むしろVBと違ってこれだけで何でもできるのが嬉しくて….

3からプロ版を使っていますが,
バージョンアップ時は一番安いやつからプロ版への移行がかなり安かったからという
消極的な理由でした.(会社のお金でしたし)
29名無し募集中。。。:02/02/24 22:37
Delphiのライブラリソースは理解を深めるのに大切。
D1の時に悲しい思いをしたので、D2でプロ版に変えた。
厨房な質問でスマソ
TreeviewにImagelistでイメージ(アイコン)を割り当てて表示すると
ノードを選択したとき割り当てたイメージでなくImagelistの0番目
のイメージに変わってしまうのですが仕様なんですか?
>30
イメージ用のインデックスって通常と選択時の二つがあって
選択時の値が0なんでは。
ツリービューの項目設定するフォームで指定できる。
他にイメージリストとが設定できる項目はStateImagesだけなので
これもImagesと同じイメージリストにしておいたのですが・・・
>>30-32
すいません。解決しました(自己レス)
ノードの方にindexを指定し忘れていただけでした。
間抜けでゴメン
いいんじゃん、とりあえずパーソナル版で作っても。
後でプロ版が必要になっても、べらぼうに高えわけでもないし。
35デフォルトの名無しさん:02/02/25 11:27
.NETって、まじ、何者なんですか?
DELPHI.NET とか…?
36デフォルトの名無しさん:02/02/25 21:34
みなさん、こんばんは

ボタンをクリックすると「へこんだ状態」
再度ボタンをクリックすると「でっぱった状態」といった、
ボタンの形状でOn/Offを切り替えられるような
ボタンを使いたいのですが、Delphiではどうすればよいのでしょうか?

VBから移行してDelphiを使っているのですが、
こういったトグルボタンってVBだけなのでしょうか・・・
>>36
TToolBar を使ってみるとか
3842:02/02/25 21:47
>>36
 色んな方法があります。
 一つの方法は、パネルを貼り付けて
ダブルクリックして

procedure TForm1.Panel1Click(Sender: TObject);
begin
with Sender as TPanel do BevelOuter:=TBevelCut(ord(BevelOuter) xor 3);
end;
>>36
SpeedButtonとか
40名無しさんです:02/02/25 23:05
IEなどの検索のようなモーダル表示のフォームはDelでは
どうやるのでしょうか?
41デフォルトの名無しさん:02/02/25 23:28
>>40
死ぬほど検索して質問してるのだろうな?マジで。
>40
IEの検索はモードレスだわさ。
だからShowModalせずにShowすれ。
43デフォルトの名無しさん:02/02/25 23:37
なんで「delphi モーダル 表示」って検索しないのかが分からん。
http://www.google.co.jp/search?q=%82%84%82%85%82%8C%82%90%82%88%82%89%81@%83%82%81%5B%83_%83%8B%81@%95%5C%8E%A6&hl=ja&btnG=Google+%8C%9F%8D%F5&lr=
好きなだけ死ぬまで検索してこい。
449:02/02/26 00:00
>>43
飛び先がグロ画像だったら笑える。
4543:02/02/26 00:03
即興でデコードするツール作って調べてみやがれ(藁
4640:02/02/26 01:23
showにすると親ウインドウにフォーカスが移せないですが…。
例えばVBだと 「show 0」とすると呼び出し側を操作できるように
なるのですが。
>>36
>ボタンをクリックすると「へこんだ状態」
>再度ボタンをクリックすると「でっぱった状態」といった、

これは、本来、チェックボックスの機能です。「へこんだ状態」が Checked
:= true; に相当しています。見かけをお望みのようにするには、スタイルに
BS_PUSHLIKE を加えます。たとえば、Form1 に CheckBox1 を置いて

procedure TForm1.FormCreate(Sender: TObject);
var
ST:LongInt;
begin
ST := GetWindowLong(CheckBox1.Handle,GWL_STYLE);
ST := ST or BS_PUSHLIKE;
SetWindowLong(CheckBox1.Handle,GWL_STYLE,ST);
end;

とすると外観がプッシュボタンのチェックボックスになります。
TCheckBox を継承して、property Pushlike:Boolean のような
プロパティーを持つようなコンポーネントを作るのは簡単です。
48デフォルトの名無しさん:02/02/26 01:26
>>46
VBやってろ。
49デフォルトの名無しさん:02/02/26 01:37
アプリケーションのタイトルを表示後、
3秒後にCloseしてメニュー画面を表示させたいのですが、
タイトルフォームがメインフォームに設定されているため、
タイトルのCloseの段階でアプリケーションが終了してしまいます。

1.タイトル表示(メインフォームに設定されている)
2.タイマーイベントでClose
3.メニューを表示

2.3を入れ替えてみましたが同様でした。

こういった場合は、どのようにすれよいのでしょうか?

5040:02/02/26 01:37
>>48
Delではできないと言うことですか?

Del製のエディタなどの検索フォームは一回一回閉じるのが
多かったのでもしかして特殊なことをしないとできないのかと
なんとなく思いました。
ただ単にDelではこのやり方が流行ってるの?
>>40
>showにすると親ウインドウにフォーカスが移せないですが…。
そんなことはありません。たとえば Form1 から Form2 を Show するとき

uses
Unit2;

procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Show;
SetFocus;
end;

とします。検索のダイアログのようにしたければ、 Form2 の BorderStyle を
bsDialog に設定し、CreateParams() を以下のように override します。

type
TForm2 = class(TForm)
private
{ Private 宣言 }
public
procedure CreateParams(var Params: TCreateParams); override;
end;

var
Form2: TForm2;

implementation

{$R *.DFM}

uses
Unit1;

procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.WndParent := Form1.Handle;
end;
52デフォルトの名無しさん:02/02/26 01:40
>>40
放置決定

>>49
スプラッシュ?
>>49
>1.タイトル表示(メインフォームに設定されている)
>2.タイマーイベントでClose
>3.メニューを表示

意味が分かるのは2だけです。
1はひょっとしてスプラッシュのことかな?
3は意味がわかりません。メニュー単独で表示、ということ?

54デフォルトの名無しさん:02/02/26 01:53
delphiとかIEみたいに、起動に時間がかかるヤツの前に
表示させて起動したら消すってヤツをしたいんじゃないの?
よーするにスプラッシュでしょ?違うの?
だったら検索すれ。「スプラッシュ」で。
>>49
>タイトルフォームがメインフォームに設定されているため、

Delphi では、プロジェクトファイルで最初につくられるフォームが
Application.MainForm になります。MainForm が閉じるとアプリケーションが
終了してしまいます。スプラッシュウィンドウは、MainForm 以外の Form で
作るべきです。
5640:02/02/26 01:58
>>51
おかげさまでできました。ありがとうございます。
ただ後半の部分は何をやっているかサッパリなので
調べてみます。
5751:02/02/26 02:53
>>56
>ただ後半の部分は何をやっているかサッパリなので

Delphi では、デフォルトですべての Form は、Application ウィンドウに
所有されています。Form2 をつねに Form1 より手前に表示させるために、
CreateParams() を override して、Form2 のオーナーを Form1 にしている
わけです。
58デフォルトの名無しさん:02/02/26 10:01
>>常に手前に表示
Form2.FormStyle = fsStayOnTop

>>スプラッシュ
frmTitle, frmMain の2つがあったとしよう。
どっちがどっちかは名前から連想。

プロジェクト→オプション→フォームで、
frmTitle を「自動生成」から「選択可能」へ移動する。

つぎに、表示→ユニットを表示→Project1.dpr (デフォルトでの名前)に
uses
 ShellApi;
var
 Start:Integer;
try
 { 開始時刻を記録 }
 Start := GetTickCount;
 { 表示 }
 frmTitle.Create( Application );
 frmTitle.Show;
 { 時間のかかる処理 }
 Application.CreateForm( TfrmMain, frmMain);

 { 最低3秒たつまで待つ }
 while GetTickCount-Start < 3000 do;

 { 後始末 }
 frmTitle.Close;
 frmTitle.Free;

 { 本体を実行 }
 Application.Run;


try→begin
6040:02/02/26 11:35
>>57
わかりやすい説明ありがとうございました。
6136:02/02/26 12:59
>>37 >>38
 ありがとうございます、両方試して>>38さんの方法を使うことにしました。
 
>>39
 SpeedButtonをどのようにすれば実現できるかわからなかったので、
 試すことができませんでした、すいません

みなさん、ありがとうございました。
 
>>61  >>47 も無視してやるなよ

63デフォルトの名無しさん:02/02/26 16:02
THotKeyで、バックスペースキーをショートカットとして入力したいのですが、
「なし」になってしまいます。
バックスペースはショートカットとして入力できないのでしょうか?
>>61
遅レスだが、CLXアプリだとそのものずばりのTButton.ToggleButtonがある。

TSpeedButtonだとGroupIndexを0以外にしてAllowAllUpをtrueにすれば良し。
65ねこま:02/02/26 17:34
'BkSp'
66デフォルトの名無しさん:02/02/26 21:06
>>65
ユーザがどうやって入力するの?
今日基礎からわかるDelphi6買ったんですが、
途中から分からなくなってしまいました。
どこが分からないかと言いますとObjctPascal入門というとこです。
16進数やら文字型等です。まだ44ページ目なのですが・・・。
どうゆう風に学んでいけばいいのでしょうか?
>>67
気にしないでどんどん前進する。最後まで行ってから、
また戻ってくる。これを繰り返す。あとは、とりあえず、
なにを作りたいか、目的を定めて、それから、具体的な
問題を設定し、解決してゆくにはどうしたらよいかを考
える。
>>68
どうも。しかし何も分からないんですよ。
例えばいくつか命令が分かればそれを組み合わせていろいろ作れると
思うのですが、ほとんど分からない状態でして・・・。
今分かるのはShowmessage('Hello The World');
くらいです(藁
70デフォルトの名無しさん:02/02/26 22:32
じゃあひたすらいろんなshowmessageしろ
ShowMessage長いよね。俺が一番最初に作った関数はSayだったよ
Say(Integer)とSay(String)のオーバーロードで。
showmessage('Who');
showmessage('are');
showmessage('you?');
73デフォルトの名無しさん:02/02/26 22:57
ほんと初心者的質問で悪いのですがDUMP(スペル違ってるかも・・)
ってなんですか?
前から気になってました・・・
74デフォルトの名無しさん:02/02/26 23:03
沖縄アクターズスクール初の男のダンスユニットです。
それはあなたの心の中に潜むもう一人のあなたです。
7667:02/02/26 23:08
Webページでも作って頑張るかな。
7768:02/02/26 23:12
>>69
じゃ、オレが具体的な課題を出す。

1.Form1 に3コのTEdit、つまり Edit1、Edit2、Edit3、と Button1 を配置
2.Edit1 と Edit2 には整数の文字列を入力するものとする
3.Button1 を押すと Edit1 と Edit2 の数値の和を求めて、Edit3 に表示

ヒント
・TEdit クラスの Text プロパティーについてヘルプを調べる
・IntToStr( ) 関数 と StrToInt( ) 関数について調べる

以上の課題を解いて、Button1Click ハンドラをここに示せ
78HotKey!:02/02/26 23:15
HotKey!
7967:02/02/26 23:19
すいません、1.しかできません。
本当に情けないです。
8067:02/02/26 23:24
又明日出直してきます。
81Button1Click ハンドラ:02/02/26 23:24
10 print "オマンコ"
20 goto 10
8268:02/02/26 23:30
>>67
うん、そうか、ではここを出発点としよう。
1.までできたなら Button1 をダブルクリックする。そうすると
コードエディタに Button1Click ハンドラが自動的に生成する。

そうしたら、

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit3.Text := IntToStr(StrToInt(Edit1.Text)+100);
end;

と書いたら、F9 を押して実行する。
そして、実行時に Edit1 に、たとえば 333 と入力して、Button1 を
押すと Edit3 に 433 と表示されるのを確認。

とりあえず、ここまで。OK?


8368:02/02/26 23:31
>>67

おいこら! まだ寝るな!
84デフォルトの名無しさん:02/02/26 23:40
寝られた68に乾杯(藁
8568:02/02/26 23:50
>>84
乾杯!!
まぁーったく、もう。
ここでチュートリアルしようとしたことに
無理があったかなぁ?
86デフォルトの名無しさん:02/02/26 23:59
1.本当に眠たかった。
2.「教えてやるから」という上からの態度に67がカチン!と来た。
3.分からんし、面倒だ。後は見てよう。

どれかであろう。2じゃねーのか(藁
16進数とか文字型とか言ってるから、まだボタン配置とかまで
行ってないんじゃ?

うちのDelphi5の本だと
型の説明→条件文など→コンポーネントの使い方
ってなってますよ。
8868:02/02/27 00:15
>>86
>2.「教えてやるから」という上からの態度に67がカチン!と来た。

ふーん、これだとすると、オレにはもうこれ以上のことはできないね。
なるほど......
8967:02/02/27 00:17
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit3.Text:=IntToStr(StrToInt(Edit1.Text)+StrToInt(Edit2.Text))
end;
9068:02/02/27 00:20
>>67

ぱちぱちぱち....

もう寝ます
9167:02/02/27 00:21
また、明日もよろしくお願いします。
おいおい、おまえは67が一人前になるまで面倒見る気かよ
バカじゃねーの
--GridのカラムでComboBoxスタイルで入力したい-----------
今までは、毎回非表示のComboBoxを実行時に乗せてやる
よく使われる方法でやってましたが、最近Grid使う事が多くて
毎回だと無駄な気がしてきまして挑戦中です。

そんなこんなで、
StringGridから派生させた自作のGridコンポを作成して、
カラム毎に属性をTInplaceEditListで保存してやって、
それを使ってコンボのカラムなのかを判断させようと考え
ています、でも、そもそも属性の設定とか出来ても、
ComboBox形式にするってのが雲をつかむような感じで
困ってます。

94デフォルトの名無しさん:02/02/27 01:27
>>93
なんだそのコピペまるだしなのは?
コピペじゃないんですが・・・。
VCLソースのTDBGridの実装を参考にな。
68は偉いなあ・・・。乾杯したい
98 ◆10000jp. :02/02/27 04:34
(´∀`)<乾杯
99デフォルトの名無しさん:02/02/27 10:52
TDBGridのAnchorsプロパティを
akLeft = True
akRight = True として、
フォームのリサイズにあわせてGridの幅きさを変わる様にしているのですが、
Gridの各項目の列幅はリサイズされません。

Gridの列幅リサイズできないものなのでしょうか?
100デフォルトの名無しさん:02/02/27 17:23
DelphiでCGI使いたいんですけど、GETを変数にしたいです。
どうすればいいですか?Delphi6使ってます
101質問!:02/02/27 19:01
本日からDelphiの勉強を始めました。
色々聞きたいこともあるのですが・・・まず。

えっと、「Delphi」
読み方はデルファイですか?デルフィですか?
あんまりな質問ですがなにとぞよろしくお願いします。
正解:デルポイ
103質問!:02/02/27 19:24
>>101です。

>>102さん。どもです。

自己レス。
ちょっとgoogleで調べればわかりますね。すみません。

デルファイ。覚えました。

また何かありましたらよろしくです。
104デフォルトの名無しさん:02/02/27 19:47
ListView でアイテムのドラッグイメージを変更するには
どうすればいいのでしょうか?
105Delフサギコ ◆zE1iiRdQ :02/02/27 20:52

  ,,,,,,,,,,,,,∧,,∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′,,,,,,,ミ,,゚Д゚彡< >>99がんばって、コーヂングするべし。
  UU""" U U   \_______________
106Delフサギコ ◆zE1iiRdQ :02/02/27 20:56

  ,,,,,,,,,,,,,∧,,∧   />>100
〜′,,,,,,,ミ,,゚Д゚彡< Request.QueryFieldsかしら。
  UU""" U U   \>>104
     ヨクシラン    MLか広場で話題に上っていた気がシル
107デフォルトの名無しさん:02/02/27 22:25
多次元の(?)構造体にまとめて値を代入するには
どーすればいいのでしょうか?
108デフォルトの名無しさん:02/02/27 22:27
>>107
なんだそのコピペまるだしなのは?
>107
(?)とあなたにしかわからない書き方をされても、我々には何のことやらわかりません。
具体例きぼん。
>109
あんたコピペに向かって何いっdの?
111デフォルトの名無しさん:02/02/27 23:26
δε|ph!
>>107
定数ならこんな書き方が出来る

type TMoge = record
 Hage: Boolean;
 Mage: Integer;
end;

const Moges: array [0..2,0..1]: TMoge = (
 ((Hage: True; Mage: 0), (Hage: True; Mage: 0)),
 ((Hage: False; Mage: 2), (Hage: True; Mage: 1)),
 ((Hage: True; Mage: 3), (Hage: False; Mage: 2))
);

定数じゃないなら、一個一個入れていこう。
もとのデータが多いなら、ファイルから読み込んでループ回すとかいろいろやり方はある
11361:02/02/28 11:06
>>47 
亀レスですいません
教えていただいた方法で、実現できました

チェックボックスの様に使いたかったので、
この方法で試してみます。

ありがとうございます。
11461:02/02/28 11:07
亀レスですいません。
>>47

教えて頂いた方法で確認しました。
チェックボックスの様に使いたかったので丁度良い形で実現できました。
教えていただいた方法で試してみます。

ありがとうございます。 m(__)m レス遅くなってごめんんさい
115 ◆XZOGuG76 :02/02/28 11:51
外字エディタを作る羽目になりました!
助けて下さい!

横x13
縦x16
と言う特殊なピクセルなんです。

マス目などはどのような物で作成したら良いでしょうか?
 ∧ ∧
( ´∀`)< >>107 逝って良し

 ∧ ∧
( ´∀`)< >>115 逝って良し
>>116
モナーの *やさしい* Delphi質問スレって言うのは嘘ですか?
×優しいDelphi質問スレ
○易しいDelphi質問スレ
>>117 御名答
>>115
TGrid / TStringGrid から派生するのが簡単では?
モナーの *やさぐれ* Delphi質問スレ
122幼稚園児:02/02/28 15:15
すいません、昨日デルファイぱーそなるをぼーらんどのホームページからダウンロードしたんですが
早速ボタン作って押してみると
「こんにちわ、せかい」が!!
ぶったまっげたーーーーーーーーーーー
俺みたいな幼稚園児でもアプリ作れるなんて、かんげきぃ!
幼稚園児っぽくないぞ(w
>>122
お前、ここの1だろ

幼稚園児が必死にデルファイを勉強するすれ
http://pc.2ch.net/test/read.cgi/tech/1014878810/
>120
いや、TDrawGridの方が良いと思う。
126デフォルトの名無しさん:02/02/28 17:47
DUMPってなんですか?
>>126 無造作にどさっと降ろす事だよ ダンプカーとかあるだろ?

業界用語では、データをフォーマットせずにドサっと出力する事
というか検索しろよ
>>126
生のデータを印刷する時にダンプリストでチェックしたか!とかっ
て言ってるだろ、印刷だけじゃなくて、バックアップとかでも
テープへデータベースのダンプ取っておいてくれ!とかあるだろ。
129ダンプ松本:02/02/28 23:46
ダンプ松本
130クレーンユウ:02/03/01 00:37
クレーンユウ
131モンスターロシモフ:02/03/01 00:43
モンスターロシモフ
132プログラム初心者:02/03/01 01:53
商品名 , 在庫数
商品名 , 在庫数
...

↑のようなレコードを持つクラスを自作中です。
とある商品の在庫数を x増やすメソッドを

procedure TSyohin.add(商品名, x)

と作ったのですが
減らす場合のメソッドの識別子はなんと名付けたらよいでしょうか?
長すぎず3〜6文字程度にしたいのですが自分では「del」ぐらいしか思いつきません。

なんかプログラミング以前の質問ですが、どうかやさしいレスをお願いします。
>132
inc, dec ……だと標準手続き名とかぶるから、incr, decr ではどう?
>132
addでは、新たな商品をリストに追加すると受け止められる。

ZaikoFuyasu、ZaikoHerasu がいい。


>>132 単純に xに負数を渡せるようにすればいいでしょう
 それと procedure ではなくfunctionにして 帰り値で結果を渡せるようにすれば
 そのメソッド一つで 0を渡せば値も返せるし
136132:02/03/01 03:11
>133
inc,dec も一応浮かんだのですが、
「1増加する」「1減らす」と言った印象が強いので避けてました。

>134
ああっすいません。
実は商品リストなんです。TSyohin ではなくて TSyohinList とすべきでした。

商品名がリスト内に存在すれば、その商品の在庫数を x増加する。
リスト内に見つからなければ、リストの最後に商品名を作成し在庫数を xと設定し、商品リスト登録件数を1増やす。

↑ .addはこういうメソッドです。

>135
これは便利そうですね。
そのように改良してみます。

>133-135
叩かれるかとビクビクしてましたが
こんなマヌケな質問にやさしく答えていただいてありがとうございました。
137デフォルトの名無しさん:02/03/01 03:21
下手に省略したりせずに delete でいいと思う。
138デフォルトの名無しさん:02/03/01 03:39
VCL風なら、TSyohinList.IndexOf で TSyohin を返す。
TSyohin = class
private
 FName: string;
 FStocks: Integer
...

Index := SyohinList.IndexOf(商品名);
if Index <> -1 then
begin
 Syohin := SyohinList.Items[Index] as TSyohin;
 Syohin.Stocks := Syohin.Stocks + 10;
end
else
...
139デフォルトの名無し:02/03/01 12:02
DBgridがクリックされたときに、
クリックされたセルのデータを取得したいのですが、
どうやったらよ いのでしょうか?
140デフォルトの名無しさん:02/03/01 14:33
セーブダイアログでセーブるとき
同じフォルダに同名のファイル名のファイルがあっても
そのまま上書きされてしまいます。
「〜はすでに存在します。上書きしますか?」みたいな
ダイアログを表示して確認させるにはどうしたら良いのでしょうか?
>140
セーブするときに同名のファイルがあるかどうか確認し、
同名のファイルが有るときは上書き確認のダイアログを出す
と言うようにすれば良いんじゃないですか?
>>140
TSaveDialog.Options の ofOverwritePrompt
143デフォルトの名無しさん:02/03/01 15:05
ListView の横スクロールバーを常に非表示にしたいのですが、
どうすればいいのでしょうか。

ShowScrollBar を使っても、うまくいかないのですが・・・
144140:02/03/01 15:26
>>141
それはそうなんですけどね、、笑
>>142
ありがとうございます。早速やってみます。
145デフォルトの名無しさん:02/03/01 15:27
厨房な質問ですみません。

DBgrid上の項目内容順で並べ替えをしようとボタンを配置して
IndexFieldNamesを書いたのですが

〜EDatabaseErrorクラスの例外を生成しました。'Table1:項目'○○○'のインデックスを〜
と蹴られてしまいます。

TtableのIndexDefsは設定しているのですが、まだ他に設定・書き忘れ
をしているのだと思うのですが確認すべき点を御教授ください。
146145:02/03/01 15:33
言葉が足らなかったです。
インデックスを持っていません。"と蹴られてしまいます。
147デフォルトの名無しさん:02/03/01 15:41
>>132
addならsubtractじゃねぇ?subとかでどうよ。
148141:02/03/01 15:43
>140
すいません。142のような方法があるって知らなかったから
自分で実装するしかないって思ってました。
>>145
フィールド名日本語にしてない?
150145:02/03/01 17:49
>>149
いえ、日本語では無いです。
151◇のんちゃん:02/03/01 18:03
Delphi無いけど、1から教えてYO!
152◇のんちゃん:02/03/01 18:05
んじゃ、2から教えてYO!
153デフォルトの名無しさん:02/03/01 18:34
長文すみません。

先日よりDelphi始めました。これまで、プログラム経験は有りません。
早速、初心者本を購入してWinMe上でプログラムを始めたのですが、
Linux上で動くKylixというモノがあるということを知りました。

そこで、以前よりLinuxにも興味があったので、これを機にLinuxを導入
して、Kylixでプログラムしようかな?と考えています。

そこで質問なのですが、
a,作成するアプリはほとんどがWindows用だと思います。
b,Kylixで作成したアプリは100%、Delphi(Win)互換なのでしょうか?
c.Kylixで作成する際のメリットとは何でしょうか?

もともとLinux上で作成したいと思ったのは、WinMeが結構不安定で
Linuxだったら・・・というのと、LInuxを始めるいい機会かな?
ということなのですが。

どうでしょうか?
迷っています。
WinMeは不安定なものです。
それが問題なら、Windows2000 か XP にしましょう。

>>153
LinuxでWindowsアプリを開発したいという理由でKylixを使うつもりなら止めとけ。
漏れもWindowsを2000かXPにするのを薦める。
156デフォルトの名無しさん:02/03/01 18:57
BDE AdministratorでSQL-ServerにBDE経由で接続する為に
新規作成を行い"SQL-SERVER"を選んだのですが、
ODBCとは違うパラメータで、どのように設定すれば良いのでしょうか?

ODBCの場合、サーバ名、データベース名、ログインID,PWで大丈夫なのですが・・・
157デフォルトの名無しさん:02/03/01 19:08
>>153です。

>>154 >>155さん。
ありがとうございます。

そうですか。

>LinuxでWindowsアプリを開発したいという理由でKylixを使うつもりなら止めとけ

やはりそうなのですね。
2000かXPにしようと思います。

でもLinux使ってみたい・・・。
Linuxについては、また考えようと思います。

ありがとうございました。
>でもLinux使ってみたい・・・。
何のために?

興味を持つのはよいと思うが、全く別の世界だから、心してかからないと。
159デフォルトの名無しさん:02/03/01 20:04
コントロールにスクロールバーが追加されたことを知るには、
どのようなメッセージを関知すればいいのでしょうか?
>>158
どうせ無料なんだから気軽に遊ぶのがよいかと。
あんまり気張ってもしょうがないっす。
161デフォルトの名無しさん:02/03/01 20:43
これいぢめだね。かあいそう
162デフォルトの名無しさん:02/03/01 20:58
>>157です。
>>158 >>160さん。ありがとうございます。

何となく興味があるだけなんですけど・・・

ちょっと質問変えて。

あえてLinuxでDelphiやるとすれば、どれを選びますか?

あくまで、あえてでいいのですが。
「Winあぷり=XP/2000がベスト」ということは踏まえて。
だから、Kylix/CLX は Delphi/VCL ではない。
Delphi/CLX で Kylix/CLX アプリを作成することはできるが
Kylix/CLX で Delphi/VCL アプリを作ることはできない。

Linux で Delphi はできません。
164145:02/03/01 21:15
>>145
あれから見本で実際動く分に、項目を変えIndexDefsに追加しても
やっぱり失敗します。
何を足したり・設定しないといけないのでしょうか。
>>164
うちの環境(Del6,Oracle8i)だと単純にソートしたいフィールド名を
IndexFieldNamesにいれただけでソートできるが。

IndexDefsは関係なかったような気がするが、ヘルプ見ると
ParadoxとdBASEはインデックスじゃないと使えないような記述があるな〜。
こっちは実際(DBのテーブル)のインデックスってことじゃない?
趣味でしかやってないがKylixはけっこう感動的だったぞ。
Linuxでも爆速コンパイルだし。

>>162
スレ違いだがLinuxの基礎的な知識は?
>>159
スクロールバーが付いてるかどうか判定するには、
GetWindowLong(Handle, GWL_STYLE) して WS_HSCROLL,
WS_VSCROLL が含まれているか調べる。
問題はどのメッセージで見るかだけど……一般的には
WM_SIZEかな。後はコントロールの種類によって色々。
168145:02/03/01 21:55
>>165
レスありがとうございます。
本を読んでいるのですが、ごく初心者なのできっとつまらない所で
躓いてるのだと思うのですが・・・

DBのインデックスはどこか別に設定する所があるのでしょうか?
169デフォルトの名無しさん:02/03/01 22:10
>>162です。
>>163 >>166さん。
レスありがとうございます。

>あえてLinuxでDelphiやるとすれば
すみません。間違えてました。
>あえてLinuxでKylixiやるとすれば
でした。

>Delphi/CLX で Kylix/CLX アプリを作成することはできるが
>Kylix/CLX で Delphi/VCL アプリを作ることはできない。
これは知りませんでした。

一方通行なんですね。それはやはりまずい。

>>166さん。

全然無いんです。で、今回がでいい機会かもなぁ・・なんて。
今までも気にはなってたけど、使う必要性に出会わなかったので。

とりあえず。板違いっぽくなってきたので、お暇します。

答えてくださった方々、ありがとうございました。
170デフォルトの名無しさん:02/03/01 22:32
C言語覚えたのにWindowsでプログラムできません
Win32API使えるようになったほうがよいのでしょうか?
作りたいものがありません
どうしたらよいのでしょうか?
>>169
だからぁ
Kylix/CLX で Delphi/CLX アプリを作るときに、最大の互換性が保たれる。ってこと。
一方通行、って訳ではない。
>>170
ここは「モナーの *やさしい* Delphi質問スレ」ですが?

C言語にしろ ObjectPASCAL にしろ、単なる開発言語なので、それだけで
Windows に特化したアプリケーションを作ることは無理だなぁ。
>>170
作りたいものがないなら、無理して作ることはない。
174デフォルトの名無しさん:02/03/02 00:03
begin
Kylix.delete;
end;
175デフォルトの名無しさん:02/03/02 00:06
上書き確認のヤツ、オプション設定してダイアログ出しても、
キャンセルがらみは自分で処理書かないとダメなんじゃなかったっけ?
たしか、自分で作った気がする…。
>>171
それにCLXアプリじゃなくてもTFormとか基本的な構造が似通っているから
WindowsAPIを使わない限り移植が楽だというのはあるな。
↑実はこれが一番難しいんだが。
>>162
DEBIAN GNU/Linuxと言って見るテスト
Vineでもいいか、でも、本当はKylixを使う事が目的なら
どーやら、RedHatの6.2互換程度がいいらしい、新しくても
古くても駄目みたい。
しかし、Linux使ってみたいならKylixなんて使わなくて良い
と思うけど、しかも、今から覚えるなんて・・・。
Pascalに興味があるならFreePascalってのもあるYO!
KylixはインストールとかにはLinuxの知識がないとだめぽいが
いったん動いてしまえばあとはDelとおんなじでIDEの上ですべてが完結してるから
gcc + makeよりかはわかりやすい(かも)

Win/VCLのアプリもAPI使ってなければ小変更でLinux/CLXに移植できたから
(主にusesの変更とか)
試してみる分にはいいと思うけど。

あと、APIが使えないんですべてVCLですませようとするから
VCL/CLXの勉強にはなる(w
しかし、>>169みたいにKylixに興味もってLinuxアプリとかが増えてくればいいんだがな〜。
たぶんLinuxに不足してるのはVectorレベルのアプリ(w だから
とりあえずランチャとかCUIアプリのフロントエンドからはじめればいいと思うんだけど。

良くも悪くもLinuxってフリーソフトのレベルが高いから、それが障壁になってるのかな。
GPLだし。
180デフォルトの名無しさん:02/03/02 11:46
ttp://www.sakaki.keiaikai.or.jp/Library/webconv/compile.html
を参考にして indy のインストールをしようと思ったんですが、
setenv.batには何を書けばいいんでしょうか。
181デフォルトの名無しさん:02/03/02 12:23
>>169です。

>>177 >>178 >>179さん。
お答えありがとうございます。

板違いっぽくなってきたのでLinux版の方に行って色々調べてみようと思ってました。
こんなにいろいろと教えていただき感謝です。

何分、Linuxについてまだ何も知らない状態ですので、色々と試したいとは思います。

>>177
DEBIAN GNU/Linux
Vine
RedHatの6.2
FreePasca
上記のモノ検索してみます。l

>>178
>APIが使えないんですべてVCLですませようとするから
>VCL/CLXの勉強にはなる
これは良さげですね(笑
今、失業中で時間があるので、少し勉強欲が出てるんです。

>>179
本来、Win用のアプリを作りたくてプログラムしたかったのですが、Linux使い始めて
もし、はまったりしたらコロッと変わるかもしれません(笑
Linux一筋・・・
ちょっとえらそうかな。

とりあえず作ってみたいのは「LAN用のコミュニケーションツール」です。
まずは自分のうちにあるネットワークだけのコミュニケーションだけで良い
と思っているのですが、ゆくゆくはICQみたいな物も作ってみたいと思って
います。

みなさんありがとうございました。
182デフォルトの名無しさん:02/03/02 12:27
>>179です。
あっ。
でも、まずはWinMe→Win2000/XPにして、Delphiをしっかり使えるように
するのが先決かな・・・
>>182
Delphi覚える覚えない以前の問題として、Win2kXPの方が安定
して開発できるでしょ。
Linuxは好きだが、世間で騒いだほどは安定してませんからね、
Xが悪いわけでもないのだろうがドライバとの相性か、イマイチ
不安定だね。
今のところは、まだLinuxでGUI使ったら負けだから、
Kylixの価値半減って事でDelphiで勉強した方がいい。
今のKylixは、どうしてもWinのプログラムをLinuxへ移行する必要
がある場合に使うものだろと思ふ。

プログラミング初挑戦並の初心者が、
Delphi6を始めるとしたらどんな本がいいでしょうか?
185デフォルトの名無しさん:02/03/02 23:08
begin
Linux.close;
end;
>184
'初'と'6'って字が書いてあればなんでもいいよ。
あえてどれってのが気になるならDelスレ読み返してみれば。
187デフォルトの名無しさん:02/03/02 23:16
>>184
「今日の献立ひと工夫」主婦の友刊
>>186
優しいDelphiという本は分かりやすいでしょうか?
http://www.amazon.co.jp/exec/obidos/ASIN/4526040266/250-9808802-0005006
189デフォルトの名無しさん:02/03/02 23:26
>>188
「男根羅漢拳の歴史」民明書房刊
190デフォルトの名無しさん:02/03/03 06:42
ListViewのOnOwnerDrawってどう使うんですか?
ためしにOwnerDraw:=Trueで、OnDrawItemを「Sender.Canvas.Font.Color:=clWindowText;」としてみても
真っ白なままで描画してくれないんですが…。
191190:02/03/03 06:43
うが。
編集している間に変になった。

「ListViewのOnOwnerDraw」→「ListViewのOnDrawItem」で何とか
>>190
OnDrawItem では自力で TextOut するなりしてアイテムを描画して
やらないとなにも表示されませんよ。
193qqqqqqq:02/03/03 13:21
すいません、デルファイってなんですか?
プログラム?アプリケーション?ただのツール?
>>193
 プログラム開発ツールでありプログラムであり
 アプリケーション開発ツールでありアプリケーションであり
 ただ(無料)のバージョンもあるWindows用の開発ツールでもあります
195qqqqqqq:02/03/03 14:25
すいません、参考図書スレをみて
「はじめてのdelphi」をかおうとおもったのですが
店屋に売ってません。
インターネットで購入したいのですが
どこにうってるでしょうか?
>>195
送料無料なら あまぞん
197qqqqqqq:02/03/03 14:36
>196
在庫切れだって(T-T)
198デフォルトの名無しさん:02/03/03 16:18
VC++から移行して1週間目のDel厨ですが、
デバッグ中にマウスポインタを重ねると
変数の値が見られますが、見られるときと
そうでないときがあるようですが、
何故なのでしょうか。あと変数の値を
評価してみても
最適化のため変数 'xxxx' をこの位置から参照することはできません
と表示されるのですが、よく意味がわかりません。
教えてください。
>198
多分両方とも同じ意味だろうね。俺もよく意味わかんないけど、
最適化オプションはプロジェクト→オプションからOffにできるから、
そうすればOKなのかなぁ?
200200:02/03/03 18:47
ちょっと行き詰まっています。
どうか、良い知恵を…

■通信ゲームのようなプログラムを作っています。

クライアントからサーバへ、サーバからクライアントへ命令を
送信するといった形で通信を行っています。

命令は、例えば

TCommand = class .. end;
TCommand1 = class( TCommand ) ... end;
TCommand2 = class( TCommand ) ... end;
..

といったふうに、TCommand を上位クラスとして、各コマンド内容を示す
クラスを派生させてあります。

そして、サーバやクライアントクラスには、以下のように
各コマンドに対応した内容を実行するメソッドを実装してあります。

TClient = class
 procedure DoCommand1( Cmd:TCommand1 );
 procedure DoCommand2( Cmd:TCommand2 );
 ...
end;
201200:02/03/03 18:48
■そこで質問です。

クライアント及びサーバ間の通信はテキストで行っているので、
各コマンドクラスをテキスト形式に変換して送信する必要があります。
それは良いのですが、問題は、受信したテキストを解釈し、
対応するコマンドクラスを生成し、実行する手順です。

今は、以下のように実装しています。

{ 各 Command クラスに対応するユニークな定数 }
const
 CommandID1 = ..
 CommandID2 = ..
 CommandID3 = ..
 ...


procedure TClient.OnReceived(Text:string);
begin
...
 { 受信したテキストに含まれるメッセージIDを元にして、対応するコマンドクラスを生成する }
 case メッセージID of
  CommandID1: begin
   cmd := TCommand1.Create;
   cmd.Decode( 受信したテキスト ); { テキストをコマンドクラスに変換 }
   Self.DoCommand1( msg );
   cmd.Free;
  end;

  CommandID2: ...
  ...
 end;

■なにかこう、無駄なような気がしてならず…
なにかスマートな方法はありませんか?
202200:02/03/03 18:48
■一応、

TCommand = class
 Client: TClient; { コマンドを利用するクラス }
end;

TCommand1 = class
 procedure DoIt; { 実行メソッド }
end;

procedure TCommand1.DoIt;
begin
 Self.Client.DoCommand1( Self );
end;

というふうに、各コマンドクラスに実行メソッドを持たせ、
クライアントやサーバクラスの対応するメソッドを呼び出すという方法も考えたのですが、
循環参照になりそうで不安です。煩雑になるので、
クライアント/サーバクラスと、コマンドクラスは、
出来れば別々のユニットにしたいのです。
203デフォルトの名無しさん:02/03/03 19:33
無料版のDelphiで、SysUtils.pasがないっていわれるんですけど、無料版にはついてないんですか?
>200
クラス参照使ってみたら?

procedure CommandListOnRegister(Sender: TObject);
begin
// クラスを前もって登録
CommandList.Register(TCommand1, CommandID1);
CommandList.Register(TCommand2, CommandID2);
...
end;

procedure TClient.OnReceived(Text:string);
begin
// 登録されたクラスからコマンドを生成
cmd := CommandList.Create(メッセージID);
if not Assigned(cmd) then exit; // 対応するコマンドがないなら抜ける
cmd.Decode(Text);
...
cmd.Free;
end;
cmd := CommandList.Create(メッセージID);

cmd := CommandList.CreateCommand(メッセージID);
だった。
毎回生成するのは遅そうなんでCommandListでTCommandのインスタンス保持しとくのがいいとは思うけど。
>>203
何も言わずに、Update1 当てろ。
207デフォルトの名無しさん:02/03/03 20:46
以前どこかのDelのスレで、Delphi6のHelpのあるファイルのある部分を修正すれば、
Helpの検索対象からCLXが外れるというのがあったと思うのですが、
そのことについてご存知の方いらっしゃいませんか?
>>207 Delphi6 をお持ちなら、ご自分のハードディスクのインストール先からreadme を読みましょう
209200:02/03/03 21:42
クラス指定子ってこういうふうに使うんですね…
一つ賢くなりました。

ところで、コマンドを実行するときは
var cmd:TCommand;
...
case AMessage.ID of
CommandID1: DoCommand1( TCommand1(cmd) )
CommandID2: DoCommand2( TCommand2(cmd) )
CommandID3: DoCommand3( TCommand3(cmd) )
...
end;

とやるしかないですか.
良く考えると、DoCommand1 の引数は TCommand1 型、つまり
TCommand の派生クラスなので、
DoCommand1( cmd ) ってやると互換性が無いといわれるんですね.

なんか二度手間な気が…
>209
それならdelegateすればよいかも。その利点は
・TCommand(とその派生型)はTClientを知る必要がない
・TClientは処理したいコマンドのみ処理すればよい
(TCommand23が後から追加されてもコンパイルエラーになることはない、処理しないコマンドは無視される)

procedure TMyClient.CommandListOnRegister(Sender: TObject);
begin
// クラスを前もって登録
cmd := TCommand1.Create;
cmd.ID := CommandID1;
cmd.OnExecute := TMyClient.Command1Execute;
CommandList.Register(cmd);
...
end

procedure TMyClient.Command1Execute(Sender: TObject);
begin
with Sender as TCommand1 do
begin
...
end
end;

// AMessage.ID=CommandID1なら
// TMyClient.Command1Executeが呼ばれる
CommandList.Execute(AMessage.ID);
211デフォルトの名無しさん:02/03/03 22:17
>>206
もちろん当ててますがなにか?
>211
ツール→環境オプション→ライブラリ→ライブラリパスには何が入ってますか?
213デフォルトの名無しさん:02/03/03 22:21
>>212

$(DELPHI)\Lib;$(DELPHI)\Bin;$(DELPHI)\Imports;$(DELPHI)\Projects\Bpl

と書いてあります。
214デフォルトの名無しさん:02/03/03 22:24
Delphiのフォルダ全部検索しても、SysUtils.pasはありませんでした。
SysUtils.dcuはあるんですけどね。
まぁ、無料版にはついてないんです。
ってことだな。
まぁ、FAQなんです。
ってことだな。
217デフォルトの名無しさん:02/03/03 22:26
>>215
やっぱそうですか。
218207:02/03/03 22:32
>>208
あ・・・…確かに「注意事項: オンラインヘルプ」に書いてますね (´▽`;)
教えていただきありがとうございました。
で、ふつうは「SysUtils.pasがない」とは出てこないはずですが、
何をやったのだ? >> 203 (217)
220デフォルトの名無しさん:02/03/03 23:15
>>219

var
Form1: TForm1;
TimeStamp : TTimeStamp;
DateTime : TDateTime;
Str : String;



begin
TimeStamp := MSecsToTimeStamp(1800000);
DateTime := TimeStampToDateTime(TimeStamp);
Str := TimeToStr(DateTime);
end;


(一部)
221デフォルトの名無しさん:02/03/03 23:26
あのう…もしかするとですね、

THoge=class
...
end;

THoge2=class(THoge)
 property Hog1...
end;

て宣言して

proc(Hoge2:THoge2);
begin
 property Hog2...
end;


var
 Hoge:THoge;
begin
 Hoge:=THoge2(Hog2); { 生成と同時にHog2プロパティをセット }
 proc(Hoge as THoge2)

ってやると、proc で受け取った Hoge って、Hog2プロパティの内容失われちゃいます?
んなこたないたださらにHoge->Hoge2にキャストしない限りpropにはアクセスできない
223デフォルトの名無しさん:02/03/04 00:46
del6 + WinXPなんですけど、
作ったアプリを実行するとタイトルバーだけ表示されて、
OS自体が固まっちゃうんですけど、こんな現象なった人いません?
224デフォルトの名無しさん:02/03/04 00:57
>>223
昔、Delphiの実行メニューから実行すると、
必ずそのプログラムの終了時にOSごと固まるという現象にあったことがある。

そのときは、コンパイルだけして、エクスプローラから exe を実行していたよ。
>223
バックアップとってから怪しげなコードバンバン削って原因究明してバグならMLで報告。
あの ML に送ってもあまり得るところはないとおもわれ。
レポートはここでいいよ。
227嗚呼…自作ツールにバグがあった…:02/03/04 01:11
この中で、「anyware」とかゆー「カンパを募るのを代行しますよん」
みたいなワケワカメなspam来た人はいる?
どーも意味が分からん。フリーウェアを登録して、カンパを募るらしいが…。
なにが「どんどんカンパしてください」だよ。よく読んでないけど、
どこに何の金がどーゆー流れで行くのやら?
>>223
まあにふぇすと、指定していない?
IDE の外では動く?
互換性を NT/W2K にしてみたら変化は?
229デフォルトの名無しさん:02/03/04 01:41
>>224
なるほど。毎回かならず固まるというわけではないのですけど、
今のところは、
コンパイル→実行とやると固まらない。
実行ボタンと同時コンパイルさせると固まる。
といった感じです。
エクスプローラから直で実行はしたことはないので、
ちょっとやってみます。
ちなみに何がちがうのでしょうね。

>>225
IDEを初回起動したらFormがすでにありますよね。
そのまま実行しても固まりました。
VCLの中身がどうとか言う話ならばDelを使い始めて2日目なので、
よくわかりません。すいません。

>>226
わかりました。お願いします。

>>227
まあにふぇすと?
互換性に関してはBorlandのHPに書いてあったので、
Win2000モードにしたのですが、変化ありません。

再インストしようかなと思っています。
でも再インストしてこの現象がでなくなったら、
原因がわからなくなってしまうしなぁ。。
>IDEを初回起動したらFormがすでにありますよね。
>そのまま実行しても固まりました。

もし、Trend/VirusBuster 入れていたら、リアルタイムウィルスチェックを
はずす。
231223:02/03/04 02:10
>>230
VirusScanは入れてますが、VirusBusterはいれてません。

OSがかたまると言ったのですが、
すべてが固まるというよりか、
CPUが100%になってしまって、
なにもできなくなる(マウスなどは動く)ような感じです。

あとコンパイルしてできたexeを直接実行すると大丈夫なようです。
でも初期状態のFormのexeを実行したときも、
タイトルバー→クライアント領域と描画されるタイミングが
その他のAPPと比べるとやたら遅くみえます。
VCLのFormはこういう物なのでしょうか?
そんなことはないと思うけど。
今年の頭から XP/Pro で D6 使っているけどおかしくなったことはないなぁ。
どうしようもなく解らないので質問。
ポップアップで、フォルダのツリーを出そうとしたらどうやったらよいのでしょう。

スタートメニューのような感じで、カーソルをあわせると1階層ごとにフォルダが ぱっ と開いていく奴。

1階層ごとに下のフォルダを調べて作るしかないのかなぁ・・・。
>>233
それ以外に、どんな方法があるというのだ?
235233:02/03/04 03:35
>>234 思いつかないから聞いてみたのだが・・・

タスクバーの ツールバー→デスクトップ を選ぶと出てくるような奴。
windowsに標準でできる機能だからどうにか簡単にできない物かなぁと。
SelectDirectory?>>233

関係ないけど
昔、実行中OpenDialog.Executeで必ず固まることがあったな
そのときやっぱりexeにして実行したら固まらなかった
しかもいつのまにか固まることなくなったし
なんか相性悪かったんだろうな・・・
VCLがゴロゴロ転がってるよ
>>236
>>233はダイアログじゃなくて、メニューに再現したいんだろ?
>1階層ごとに下のフォルダを調べて
のがとても簡単な方法のように思うけどなあ
厨な質問で申し訳ないのですが
たとえばMemo1コンポーネントの1行目だけ削除するには
どうしたらよいのでしょうか?
フォームのユニットファイルに、そのフォームでしか使わない関数を追加し、
interfaceに関数の宣言を行ったのですが、
コンパイルエラーは発生します。

フォームのユニット内に関数を作成する事はできないのでしょうか?
242デフォルトの名無しさん:02/03/04 12:51
>>240
TMemo.LinesはTStringsだ。TStringのヘルプ見れ。

>>241
できる。書き方が間違ってたんだろ。どう書いたのかと、どんなエラーが出たのか示してくれ。
243デフォルトの名無しさん:02/03/04 12:58
>そのフォームでしか使わない関数
ならinterfaceに宣言する必要は無いと思われ。
244241:02/03/04 13:01
>>242
>できる。書き方が間違ってたんだろ。
そうですよね・・・ すいません

こういう風に書いてます。

interface
function Msg(strMsg: String):boolean;

<省略>

function Msg(strMsg: String):boolean;
ShowMessage(strMsg);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Msg('AAA');
end;


フォームに関数を作成する練習として、
メッセージボックスを関数を使って表示させようとしています。
(戻り値は返してません)
245デフォルトの名無しさん:02/03/04 13:03
>>244
もし本当にそのまま切り出したのなら、Msgにbeginがないようだけど。エラーメッセージは?
246244:02/03/04 13:06
>>245
すいません、コピペ失敗です。
beginあります。

エラーメッセージは
宣言 が必要な部分に'USES'があります
>>246
usesはinterfaceの直後に書かないといけない。
interfaceとusersの間に宣言書いてしまったんじゃない?

で、その宣言はそもそも>>243 の通り、削除しても平気でしょ。
呼び出す処理よりは前に定義しないといけなくなるけど。
248デフォルトの名無しさん:02/03/04 13:32
ドッキングで質問です。
Panelを使ってフォームから取り外したりするドッキングみたいなの作ったんですが元に戻すことが出来ません。
一回フォームからはがすとくっつける事が出来ないんです。
さらにはがしたPanelに「x」ボタンが有ってそれを押して閉じてしまうと二度と表示され無いんです。

どうしたらいいんでしょうか?
249246:02/03/04 14:01
>>247
>interfaceとusersの間に宣言書いてしまったんじゃない?
その通りです。

>で、その宣言はそもそも>>243 の通り、削除しても平気でしょ。
>呼び出す処理よりは前に定義しないといけなくなるけど。

わかりました。
例えば、呼び出す処理の後に記述する場合は、
宣言が必要になるんですよね?

そういう場合は、どのように宣言すれば良いですか?


>>249
なんつーか、マニュアルに書いてある基本的なことばかりだな。
まずはじっくりマニュアル読んでくれよ。わかんないなら適当に入門書から。

ともあれ、クラスに所属しない手続きや関数をimplementationの中で宣言するには
forward宣言を行えば良い。この言葉を鍵に調べてみれ。
251デフォルトの名無しさん:02/03/04 22:05
>>210
TCommandList, TCommandって
TActionList, TActionと対になってますね。
実際デザインパターンのCommandの
別名にActionというのもありますし。
252223:02/03/05 01:56
VCLを使わないでCreateWindowでやっても×でした。
逝ってきます。
253223:02/03/05 02:49
原因がわかったので報告します。
原因はVirusScanのVSieldでした。
こいつをはずすと、実行時の微妙な遅延もなくなり安定しました。

ということでXP(だけ?)でVirusBuster or VirusScanを
入れてる方は要注意ということでよろしいです?
ガイシュツだったらごめんなさい。

>>230さんありがとうございます。
ListViewのOnCustomDrawItemで、選択したアイテムの背景色を変える方法ってないの?
>>254
If Item.Selected then

Canvas.Brush.Color
FillRect
256デフォルトの名無しさん:02/03/05 10:24
IMEなどでフォントを入力したらStringGridに文字を持ってくる方法って無いですか?

セルに持っていくのでは無く16x16のマス目にフォントを表示させたいのです。

「あ」と入力したら16x16のStringGridいっぱいに「あ」と表示させたい訳なんですが可能なんでしょうか?

DrawCellをオーバーライドして、自分で上書きする。
258デフォルトの名無しさん:02/03/05 11:14
Drawcellは使用してるんですがどのようにしてフォントを上書きするんですか?
ASCIIコードか何かを取得出来るのでしょうか。
DIBに描画して自力で色を取得するんじゃ?
>>256
難しいことしてますな
261デフォルトの名無しさん:02/03/05 13:02
>>256
あらかじめ第二水準まで作っておいて入力した文字によってGridに読み込むとか
一文字ずつcsvに保存して

□□□□□□□□
■□□□□□□□
□■□□□□□□
□□■□□□□□
□□□■□□□□
□□□□■□□□
□□□□□■□□
□□□□□□■□

上の様な文字だったら
0,0,0,0,0,0,0,0,
1,0,0,0,0,0,0,0,
0,1,0,0,0,0,0,0,
0,0,1,0,0,0,0,0,
0,0,0,1,0,0,0,0,
0,0,0,0,1,0,0,0,
0,0,0,0,0,1,0,0,
0,0,0,0,0,0,1,0,
とcsvで保存してそれを読み込むとか

他にこれより良い方有る?
あったら誰かフォローよろ
>258
Canvas.Fontを替えて、その後inheritedすればフォントは変わる筈。

それか、Canvasに自分で描画してもよいし。
>258
Drawcellメソッドと、OnDrawcellイベントハンドラは別だから間違えないでね。

コードみてないけど、Drawcellメソッドの中で、
OnDrawcellプロパティ(関数ポインタ)がAssignされてるか判定して、
Assignされてる場合、コールしてる筈。
264デフォルトの名無しさん:02/03/05 13:39
ListView の Report 形式表示で、アイテムがカラムの横幅に収まらない時に
それを補完するツールチップヒントが表示されますが、あれを非表示にする
にはどうしたらいいのですか?

TreeView の場合には ToolTips プロパティがあるのですが、
ListView には見あたりません・・・

だれかご存じでしたら教えてください。
265デフォルトの名無しさん:02/03/05 14:13
>>261
それは非常に面倒じゃない?
フォントのbit情報持ってきてGridに配置した方が・・
多分可能でしょ。
Memo1コンポーネントに

フリース (1000円)
エアテック (4000円)
財布 (500円)
鞄 (10000円)
ボーダー (2000円)

このようにデータが表示されていたとき
Button1を押したら
括弧内の値段順にソートしてMemo1に表示したいときは
どのようなコードを書けばよいのでしょうか?
267デフォルトの名無しさん:02/03/05 15:47
>>265
アイコンのドットエディタとかでありがちだけどどうやるのかわからん
StringGridを使って出来るのか?
>>256
なんで StringGrid なんだ??
独自コンポ作った方が遙かにスマートに出来そうだけど・・
>>266
TStringListのCustomSort使えば?
数字を抽出して比較する関数作ってさ
270256:02/03/05 16:43
>>268
>>269
参考になります。ありがとうございます。
271名無し募集中。。。:02/03/05 16:48
>>266
function GetNum(Line: string):Integer;
var
Index, Count: Integer;
begin
Index :=AnsiPos('(', Line) + 2;
Count := AnsiPos('円',Line) - Index;

Line := Copy(Line, Index, Count);

Result := StrToInt(Line);
end;

function MyCompare(List: TStringList; Index1, Index2: Integer): Integer;
begin
Result := GetNum(List[Index1]) - GetNum(List[Index2]);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
StringList : TStringList;
begin
StringList := TStringList.Create;
try
StringList.Assign(Memo1.Lines);
StringList.CustomSort(MyCompare);

Memo1.Lines.Assign(StringList);
finally
StringList.Free;
end;
end;

このようなコードで一応動く
やり方は、269が言ってるのと同じ
272256:02/03/05 16:54
256です。
やっぱりStringGridでは無理がありますか。
アイコンドットエディタとかはどうやって文字をグリッドに持ってきてるのか気になって・・・

>>272
ソースキボンヌ
ソース公開がいやなら一部分だけでもここに貼り付けて
274デフォルトの名無しさん:02/03/05 17:19
>>256
QuickReportで出来そうな気がするが。
出来ないか?

そんなことよりうちのdelphiでQRepのHelp出てこないんだけど何で?
みんなもそうなの?
275266:02/03/05 17:55
>>269
>>271
ありがとうございます。
271さんには例まで示していただいて、とても感謝してます。
まだdelphi、消防レベルにもいってない自分にはすごく勉強になります。
検索用フォームの戻り値用にTFormを継承する時に
新しいプロパティを追加してみたが、このプログラムには
重複させて表示させない為にフォーム表示用の関数を
作成してあるのですが、そこで問題が発生しています。

つまり、この中から新しく追加したプロパティを見る方法
で悩んでます。

----- フォーム作成用共通関数 ----
Application.CreateForm(wClass, wFrmName);

for idx:=0 to Screen.FormCount -1 do
begin
 if (Screen.Forms[idx].ClassName=wClass.ClassName) then
 begin
  if (Screen.Forms[idx].ShowModal=mrOK) then
   Result:=Screen.Forms[idx].FormResults.Text;
   //                 ↑
   // FormResultsが新しく追加したプロパティだが、この書き方
   // ではエラーになる。
   Screen.Forms[idx].Release;
 end;
end;


コンパイルを通そうとすれば、

if (Screen.Forms[idx].ShowModal=mrOK) then
  Result:= FrmKensaku(Screen.Forms[idx]).FormResults.Text;

のようにすれば通るが、これでは、共通の関数としては
問題がある。

何か、いい方法はないでしょうか?
277名無し募集中。。。:02/03/05 18:34
>>272
procedure ViewCanvas(Canvas: TCanvas);
var
  i, j: Integer;
  Color : TColor;
  s: string;
begin
  for j := 0 to 10 do
  begin
    s := '';

    for i := 0 to 10 do
    begin
      Color := Canvas.Pixels[i, j];
      if Color=0 then
        s := s + '■'
      else
        s := s + '□';
    end;
    Form1.Memo1.Lines.Add(s);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Bitmap: TBitmap;
begin
  Bitmap := TBitmap.Create;
  try
    Bitmap.Height:=11;
    Bitmap.Width:=11;
    Bitmap.Canvas.TextOut(0,0,Edit1.Text);
    ViewCanvas(Bitmap.Canvas);
  finally
    Bitmap.Free;
  end;
end;

Edit1, Button1, Memo1をForm1に貼り付けてください。
文字をキャンバスに表示して、pixelsプロパティで読んでます。
StringGridは設定が面倒なので、Memoにしました。
遅いからラインで持ってきたほうが良いと中村師に指摘される可能性120%
>>276
そんな事はできないと思われる
>>276
フォームにプロパティを追加して値を渡すなんて聞いたこともありません、
そもそもそれが間違いなのでは?
私はいつもグローバル変数で値を受け渡ししています、そうするのが
一番正しいやり方だと思いますがどうでしょうか?
>>278
ラインキャッシュ付き Pixels の実装、ほしい人。手あげて。
282デフォルトの名無しさん:02/03/05 20:33
>>277
逆にStringGridの方が簡単じゃない?
見栄えも良いし。

もしくはちょっと荒技だけど
0だったら色を塗る、1だったら色を塗らないって決めておいて、
>>277のソースの
s := s + '■'
s := s + '□'
の部分を
s := s + '0'
s := s + '1'
に変える。

さらに一文字ずつにカンマで区切ってそれをStringGridに読ませてやればいい。
どーよ?

0,0,0,0,0,0,1,0,0,0,0,0,
0,0,0,0,0,1,1,0,0,0,0,0,
0,0,0,0,1,0,1,0,0,0,0,0,
0,0,0,0,0,0,1,0,0,0,0,0,
0,0,0,0,0,0,1,0,0,0,0,0,
0,0,0,0,0,1,1,1,0,0,0,0,
▲こんな風になる(1の反転文字の例)


他にもいろいろ方法有りそうだな。
283デフォルトの名無しさん:02/03/05 20:50
>>282
そんなまどろっこしい事やらないでも s := s + '■' の処理をセルの色変えに変えれば良いんでは?
俺ならDIBSectionでやるが・・・。
結局自力で書いた方が速くて柔軟性あるからな。
早いとはいわん。
285Delフサギコ ◆zE1iiRdQ :02/03/05 21:37
  ,,,,,,,,,,,,,∧,,∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′,,,,,,,ミ,,゚Д゚彡< 何が悩みどころかわからんままレス
  UU""" U U   \_______________
>>276
もし、Application.Forms[i] is TXXForm なら
TXXForm(Application.Forms[i]).FormResults 取り出し

共通の関数としてどこの何に問題が??
286デフォルトの名無しさん:02/03/05 22:01
DIBSectionってなんだったっけ?

Delフサギコならわかるだろうか。
StringGridにだわる理由がわからん。DrawGridで十分だろ。
まあ、普通はグリッドなんか使わずに直接StrechBltすると思うけど。
288デフォルトの名無しさん:02/03/05 22:25
>>287
DrawGrid使ったことねぇや
あれ何に使うの?
289280:02/03/05 22:31
>>285 
本人じゃないんですけど、たぶん、
Screen.Formsを使ってるってことは、関数で動的にフォームを作成している
のだとおもわれる。

> TXXForm(Application.Forms[i]).FormResults 取り出し
これだと、各フォーム毎に書かないといけないので嫌だって話では?
おそらく、フォームが数百、いや数千は存在するのだろう(藁

つーことで、グローバル変数で処理するのが一番楽かと。
290276:02/03/05 22:53
>>289 解りました、そうします。
>>285 289さんが書いているのが全てなんですが、

function ShowFrm(wClass:TComponentClass;wReIdx:integer;
var Res:String):Boolean;
  |wClass=フォームクラス
  |wReIdx=戻り値の列番号
  |Res=戻り値
で、wReIdxがゼロの場合には全ての戻り値が帰って来て、
wReIdxに値が指定してあった場合には、その場所の戻り値
が来る、つまり、呼び出す検索フォーム側の追加したプロパ
ティはTStringsで定義しようかと。

で、呼ぶ時は、
rc:=ShowFrm(TkensakuFrm,1,S); とか
rc:=ShowFrm(TAddKensakuFrm,0,S); とかって感じで呼んで
フォームを表示させようかと思っていました。
フォームからの戻り値は Sに入って来るって感じです。

説明下手で申し訳ないです。

291デフォルトの名無しさん:02/03/06 00:33
HotKey で、エンターキーが入力できるようにしたいのですが、用意されていないみたいです。とすると、コンボボックスを使って、オブジェクトインスペクタの
ShortCut プロパティのように、文字列としてキーの組み合わせを登録し、
TextToShortCut でショートカット型にするのがスマートかと思ったのですが、

ユーザーに使いやすくするためには、
コンボボックスに大量のテキストを用意しておかないとなりません。
なんか、ショートカットの組み合わせ文字列が定義された定数配列とか
ないですか?
292デフォルトの名無しさん:02/03/06 00:43
>291
こんなんんでどうよ?

Form1.KeyPreview := Trueして

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if (Key = #13) and (ActiveControl = HotKey1) then
begin
HotKey1.HotKey := TextToShortCut('Enter');
Key := #0;
end;
end;
293291:02/03/06 01:07
>>292
おおおお
メカラウロコ
294デフォルトの名無しさん:02/03/06 01:12
ヒントを得て、これで解決しました。

アクションリストにアクションを4つ追加。
ショートカットはそれぞれ
Enter
Shift+ENter
Ctrl+Enter
Shift+Ctrl+Enter

OnExecute には

if ActiveControl = HotKey1 then
 HotKey1.HotKey := (Sender as TAction).ShortCut;

と。これ、ヒントを得たとはいえ、我ながら傑作な方法。
>294
それをアクションと呼ぶには苦しいぞ。
それにアクション一覧を表示してキーカスタマイズさせるようなUIを作った場合、
Enter系のゴミアクションが表示されてしまい見苦しいかも。
296デフォルトの名無しさん:02/03/06 01:25
DelphiってVBと同じ仕組みなんですか?
Cのようにネイティブコードにしているとは思えないんですが。
スタートボタンやストップボタンがついていてVBに似ているし。
ネタ?
>>297
ううん。
299デフォルトの名無しさん:02/03/06 01:29
ネタダヨネ? ネタダトイッテ! オネガイダカラ。
VCってVBと同じ仕組みなんですか?
Cのようにネイティブコードにしているとは思えないんですが。
スタートボタンやストップボタンがついていてVBに似ているし。
>>300
ついていないよ。
VC++触ったことない?
>301
ついてるよ。
VC++使いこなしてない?
303デフォルトの名無しさん:02/03/06 01:33
VBってN88BASICと同じ仕組みなんですか?
Cのようにネイティブコードにしているとは思えないんですが。
スタートボタンやストップボタンがついていてVBに似ているし。
304デフォルトの名無しさん:02/03/06 01:33
>>302
修正したらそのつどコンパイルし直す必要があるじゃない。
305デフォルトの名無しさん:02/03/06 01:34
祭り?
>304
必要ないよ。
VC++使いこなしてない?
307デフォルトの名無しさん:02/03/06 01:38
>>256は解決したのか?

結果が気になるのだが。
308デフォルトの名無しさん:02/03/06 01:38
VBってファミリーベーシックと同じ仕組みなんですか?
Cのようにネイティブコードにしているとは思えないんですが。
スタートボタンやストップボタンがついていてVBに似ているし。
ベーシックって言うし。
俺のストップウォッチはスタートボタンやストップボタンがついていてVBに似てますか?
特定定キーの状態を拾いたいの(押してるのか離してるのか)ですが
どうすればいいのでしょうか?

できればアクティブでも非アクティブでも拾いたいです
Buttonを貼り付けると矢印キーが拾えないので困ってます
311軍師:02/03/06 01:41
我が君!
ブヴィ房軍の計略にかかり、
我が軍は同士討ちを始めております!!
312デフォルトの名無しさん:02/03/06 01:42
>>309
ワラタ

>>310
フック…とつぶやいてみる予行演習。
>>269>>271
こういう時にサクっと使える正規表現ライブラリって在りませんかね?
314>>313:02/03/06 02:09
>>313-314
洋物、和物含めてイロイロあるけど、一番評判がいいのって、どれだ?
316デフォルトの名無しさん:02/03/06 02:41
>>315
洋物…トレイシーローズ
和物…長瀬愛
>310
GetAsyncKeyState
>>314
手が込んでるな…
メール入力欄に書きこむの、最近見かけないが
あれは速報版だけの慣習なのか?
>>290
つまり、関数内でフォームをCreateする時にクラスを変更出来たらいいんだろうか?
取りあえず、そんな事は難しいが、継承を使えば似たような事は可能だ。

1.独自にPropertyを追加したフォームを TParFormとする
2.検索フォームは全てTParFormを継承させて作る。

例)
 TKensakuForm1=class(TParForm);


3.関数内で使うクラスをTOrgFormとする

例)
Type
 TOrgForm = class of TParForm;
  ・
  ・
  ・
function CreForm(・・・・・・):String;
var
 frm:TOrgForm;
begin
  ・
  ・
 ftm:=TOrgForm(GetClass('フォーム名')).Create(Application);
 Result=frm.FormResults;
 frm.Release;
  ・
  ・

4.継承したフォームは、登録しておかなければならないので、initialization等にガンガン書いておく

例)

initialization
 RegisterClass(TKensakuForm1);
 RegisterClass(TKensakuForm2);
 RegisterClass(TKensakuForm3);
   ・
   ・
end.

これで、文字列としてフォーム名を渡してCreateできるはず。
眠いんで詳しい説明はしない、詳しくは、HELPの GetClass を参照
でも、これで解らなかった、もうDelphi使うな。
320デフォルトの名無しさん:02/03/06 06:15
なにやってるかさっぱり解らん。
結局>>319本人は自分で書いてて解らなかったのか?
Delphi使わんのは>>319の勝手だが。
文末がサッパリわからん。
322デフォルトの名無しさん:02/03/06 11:33
Memoにカンマで区切られたテキストデータが有るのですがこれをStringGridに渡す事は出来ないでしょうか?

A,B,A,A,A,A,A,A,
A,B,A,A,A,A,A,A,
A,B,A,A,A,A,A,A,
A,B,A,A,A,A,A,A,
A,B,A,A,A,A,A,A,
A,B,A,A,A,A,A,A,

こんなデータをカンマ毎に分けてセルに配置したいんです。
テキストから読み込むのは出来るのですがMemoから直接渡す方法が分からないです。
>>314 ワラタ
>>288
α)文字以外の物を表示する場合
β)内部処理とユーザーインターフェイスを分離したい場合

α)の場合
 たとえば画像の一覧を表示する場合.
 Objectsプロパティに入れる手もありますが
 たとえば8桁から5桁に変えたい場合,処理が面倒.
β)は
 ・アプリケーション全体で見たい情報をグリッドに入れちゃうと
  フォームが2つになった瞬間に内部情報が散乱してドツボにはまる(経験者).
  こういう場合は内部情報をプログラムのひとつのユニットにまとめて
  グリッドなどのコンポーネントは表示と操作に専念する
 ・グリッドをやめてリストビューにしよう!
  などと命令されたときにも楽に変更できる.
>>322
for i:=0 to Memo1.lines.Count do Cols[i].CommaText:= Memo1.lines.Strings[i];

326デフォルトの名無しさん:02/03/06 12:53
みなさま、ちょっと知恵を貸してください。

いま、自前のソフトに、簡単なマクロ機能を実装しようとしています。
仕様は、だいたい以下の通りです。

・実行することの出来る最も小さい仕事を Job と呼ぶ。
・TJob は、「仕事の種類」と「パラメータ」プロパティを持っている。
・1つの Action で、最大 10個までの Job を登録することが出来る。
・一つのショートカットコマンドには、一つの Action が対応する。
・Action の集合体を Macro と呼ぶ。

で、いかに楽に、いかにエレガントに、いかに機能の追加を楽に出来るように
実装するかということで頭を悩ませているわけです。

TJobType = ( 仕事名1, 仕事名2, 仕事名3, ..., 仕事名n );

TJob = record
 仕事の種類: TJobType;
 パラメータ: string;
end;

TMAction = class( TCustomAction )
 Jobs: array [0..9] of TJob;
 JobsCount:Integer;
 ...
end;

TMMacro = class( TActionList )
end;
327デフォルトの名無しさん:02/03/06 12:53
で、それを処理する部分は

procedure フォーム.ExecuteAction( Sender:TObject )
var Action:TMAction; ...
begin
 Action := Sender as TMAction;

 for I:=0 to JobsCount-1 do
  case Action.Jobs[I].仕事の種類 of
   仕事名1: Self.仕事1処理メソッド( Action.Jobs[i].パラメータ );
   仕事名2: Self.仕事2処理メソッド( Action.Jobs[i].パラメータ );
   ..
   仕事名n: Self.仕事n処理メソッド( Action.Jobs[i].パラメータ );
  end;
end;

としておいて、自前のアクションリストに

procedure AddAction( MAction:TMAction );begin;
 MAction.ActionList := Self.MacroActions;
end;

のようにして登録しようと。
でも、せっかくアクションリストで管理しているのに、実行するときに case で分岐させるのはどうも…
>>326
>200から始まる一連のやり取りが参考になるかも
TCommandってやつね
329デフォルトの名無しさん:02/03/06 13:18
>>325
ありがとう御座います
早速試してみます
330デフォルトの名無しさん:02/03/06 14:42
>>329
>>325のコードそのままだとおかしくないか?

Colsの所をRowsに変えないと持ってきたデータが90度反転するような
331276:02/03/06 15:39
>>319
有難う御座いました出来ました!
持続的クラスですか・・・勉強になりました。

>これで解らなかった、もうDelphi使うな。

私はまだDelphi使ってよさそうですね(藁
332デフォルトの名無しさん:02/03/06 15:46
このスレが一番グリッドの質問が多いのでここで質問させてもらいます。
グリッドの特定の位置できっかけをあたえたら(KeydownやMoundown)その列から一列セルの中身を右にずらす方法って無いですか?
Stringgridです。
333デフォルトの名無しさん:02/03/06 17:33
Memoなどの複数行について質問なんですけど、
Memo1.Lines := として





という複数行の文字列を代入したいんですけど、どうすればいいんですか?
Memo1.Lines.Strings[0] := 'あ'+#13#10+'い'+#13#10+'う' ;
Memo1.Lines.Text:='あ'#13#10'い'#13#10'う'
336デフォルトの名無しさん:02/03/06 17:44
>>333
これでどーよ?
memo1.Lines.Add('あ'+#13+#10+'い'+#13+#10+'う');

>>332
グリッドの内容をTstringlistに置いてから列(行)の挿入なりをしたら駄目かな?
よーわからん

誰かよろしく
337334:02/03/06 17:45
>335
しまった、やられた。
基本を押さえれてないってことですな。トホホ
ありゃ・・・・ただしこの方法で取得した後は何かやらないと改行結果が・・・
339名無し募集中。。。:02/03/06 19:32
Delphi+Apache関連スレってありますか?
>317
ありがとうございます。
無事解決しました。
341デフォルトの名無しさん:02/03/06 21:21
>>332
列の”列の挿入”じゃなくて一列まるごとセルに同じ文字列を書き込むなら出来るかも。
空白を書き込むとか。
やっぱTstrings使わないと無理か?

確認だけど上書きじゃなくて挿入なんだよね。
342デフォルトの名無しさん:02/03/06 21:22
C++Builderで作ったDLLのヘッダファイルを
Delphiで直接利用することってできます?
それとも.pasに書き直さないと駄目ですか?
343デフォルトの名無しさん:02/03/06 21:25
>>342
作り方による
344342:02/03/06 21:40
>>343
どう作ればいいですか?
345Delフサギコ ◆zE1iiRdQ :02/03/06 21:50
  ,,,,,,,,,,,,,∧,,∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′,,,,,,,ミ,,゚Д゚彡< 近頃忙しいっす。
  UU""" U U   \_______________
マッタク、コキツカイオッテ

>>332
このあたりを見ると幸せになれるかも。
Delphi広場<10356>

右にずらして、その後どうするのかわけわかだけど、

ColsはTStringsだからAssignで
ピーコしてからその列の内容を削除したらいいんでないの?

StringGrid1.Cols[X+1].Assign(StringGrid1.Cols[X]);
StringGrid1.Cols[X].Text := '';

こんな感じかしら。
動作環境がないのでわからんけど。
346デフォルトの名無しさん:02/03/06 22:08
>>345
それだと隣の列に上書きにならない?
>>342
pasに直さなきゃいけないのでは?たしかwww.freepascal.orgにh2pasっていう
ユーティリティがあったと思うのでそれを使うと幸せかも。
348Delフサギコ ◆zE1iiRdQ :02/03/06 22:29
>Delphi+Apache関連スレってありますか?

ム板にWebアプリ作成スレがあってもいいとおもう。

  ,,,,,,,,,,,,,∧,,∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′,,,,,,,ミ,,゚Д゚彡< 最近、お仕事がそればっかなのよ
  UU""" U U   \_______________

VB6でIISアプリには飽き飽きなので
Delphiにしたいが、我慢してC#に…
>>332
漏れならInc(ColCount)して
1行ずつCommaTextをTStringListに渡してInsertして
CommaTextで戻す。効率とかには目をつぶって(w
350332:02/03/06 23:28
StringGridの中身をカンマ区切りテキストに書き出してそのテキストに縦一列挿入って言うのはダメですかね?

そもそもカンマテキストに列の挿入って出来ましたっけ。

なんか凄く面倒な事になりそう・・・
351Delフサギコ ◆zE1iiRdQ :02/03/06 23:43
  ∧,,∧    / 
 ミ,,゚Д゚彡 <  やりたいことがワケ
Π ̄ ̄ ̄|  \ 
|つワカメ()   
| |___.|
  ∪∪
 なんで、カンマ区切りテキストがでてくる?>>349-350
 ColsとかRowsがTStりんgsってのは把握しているのかしら?

>>346
どうやったって、どこかの列が上書きされるしかないでしょ

InsertRow/ColやDeleteRow/Colなんて処理は
一度はこだわって作ってみるといいと思われ。

privateで宣言されているDeleteRow/ColとMoveRow/Colを
使うのがいいんじゃないでしょうか。
352デフォルトの名無しさん:02/03/07 00:15
MemoのLinesを初期化(なし)にするにはどうすればいいですか?
Memo.Lines.Clear
354デフォルトの名無しさん:02/03/07 00:28
東の邦楽に向かって、手を3度叩き、「メモさん、メモさん、初期化してくださいな」
と言う。
水を口に含み、少しずつ吹きながら言うと効果アップ。
東の住人が迷惑だからやめれ
356354:02/03/07 00:31
無駄なおちょくりレスでageると誤字で恥をかく好例。
ListViewでカラム見出の部分をクリックしてソートさせているの
だが、多くのソフトでやってあるみたく、△とか▽とか表示させるにゃ
どーすりゃいいのさ。
今はタイトルの文字に「▽名前」みたく表示させてるが、ダサすぎる(藁
>>357
VCじゃないとできないんじゃないの?
いいじゃん、そのダサイ状態でも機能的に問題ないなら。
どうでもいいけどさ、解決したんなら解決したって書いてよね。
>>359 誰のことか書かないと
361デフォルトの名無しさん:02/03/07 02:28
おしえてください。

DragModeをdmAutomaticにしたときに、
コントロールがクリックできなくなってしまいます。
例えば 4 ピクセルほどカーソルを移動させるとドラッグモードに切り替わる
ということをしたい場合、どうすればよいのですか?
>>357
TListColumnのプロパティでアイコンって設定できなかったっけ?
>>362 割り込みで申し訳ないんですが、私も先月同じ内容で
悩んでいました、Delphiの最近のバージョンではプロパティが
追加されたのでしょうか?
Columnのどのプロパティか見つけられませんでしたので詳しく
教えて下さい。 m(..)m
>>361
dmManualでやる
>>363
そんなのありません
366デフォルトの名無しさん:02/03/07 10:23
>>332
□□□□□
□□■□□
□□■□□
□□■□□
□□■□□
こういうグリッドが有ったとしたら特定の位置を挿入したいんでしょ

でもって挿入結果が
これ?
□□□□□□
□□□■□□
□□□■□□
□□□■□□
□□□■□□
(1,y)に挿入した場合

こんなの可能なのか?・・・
367デフォルトの名無しさん:02/03/07 10:28
MDIの子フォームを起動時に生成させなくするには
どうしたらいいですか?
368デフォルトの名無しさん:02/03/07 13:06
>>367
ムリ。
非表示にしておいて、Form起動後にCloseするしかない
>>367
プロジェクト > オプション > フォーム > 自動作成の対象
370デフォルトの名無しさん:02/03/07 14:15
>>369
できました!
ありがとうございます。
さっきまで必死にFormのプロパティを探してました
不特定の長さのデータを格納するにはなにを使えばいいのでしょう?

Integerのデータをどんどん追加したいのです。
TListだとポインターじゃないと怒られてしまいました。
配列だと最初に大きさを決めないといけないので応用が利きません。
372名無し募集中。。。:02/03/07 16:45
>>371
動的配列
>>371
IntToStrしてTStringListに格納してみるってのはどーよ。
374デフォルトの名無しさん:02/03/07 18:01
DelphiってAPIをどういう風に書けばいいの?
>>372
動的多次元配列なんて理想にぴったりでした。 ありがとうございます。
しかし上手くいきません。
何が間違ってるんでしょうか?

Edit3.Text := 28;
Edit4.Text := 31;

xx := StrToIntDef( Edit3.Text, 0 );
yy := StrToIntDef( Edit4.Text, 0 );
SetLength(Data, xx);
for x := 0 to xx do begin
SetLength(Data[x], yy);
for y := 0 to yy do begin
Data[x,y] := 0;
end;
end;
376添削:02/03/07 18:17
SetLength(Data, xx);
for x := 0 to xx - 1 do begin
SetLength(Data[x], yy);
for y := 0 to yy - 1 do begin
Data[x][y] := 0;
end;end;
>>376
動作しました! ありがとうございます。
378332:02/03/07 18:41
いろいろやってるのですがまだ解決出来ません。
グリッドの中身を一度カンマテキストに落として列の追加をやろうとしたのですが、どうしても追加しようとしてる列から
後ろが消えてしまいます。
一度別で確保して待避させてるのに・・・。

StringGridがセルの移動をサポートしてたら・・。
379デフォルトの名無しさん:02/03/07 19:05
>>374
関数名いきなり打ってみ
>>374
uses Windowsして後は関数と同じように書いていくだけ。
補完使えば楽だよ。
381デフォルトの名無しさん:02/03/07 19:38
>>378
カンマなら出来そうな気がするが・・・
>>363
ImageIndexは? 少くともDelphi5にはあるよ。
>>378
もう面倒くさいから、ループでCellsを一個一個コピーしろ。
383デフォルトの名無しさん:02/03/07 23:34
>>361
dmManualでやる
ドラッグを開始するにはどうすればよいのですか?
>383
OnMouseDownでBeginDrag。
385デフォルトの名無しさん:02/03/07 23:55
>>382
>もう面倒くさいから、ループでCellsを一個一個コピーしろ。

面倒と言うかそれが普通のやり方だと思う。
違うのか?
何でstringlistでやるのかわからん。
オーバヘッド多すぎない?
387通りすがり:02/03/08 00:59
>>385
いや、すごくまっとーだと思う
388Delフサギコ ◆zE1iiRdQ :02/03/08 01:29
>>378
         _________
  ∧,,∧   /
 ミ;゚Д゚彡< まだひっぱってるんすか?
  ミつ つ  \
〜ミ ,, ミ.     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∪∪   
CommaTextがなんででてくる?って
言ってるのにわかってもらえんし
>グリッドの中身を一度カンマテキストに落として列の追加をやろうとしたのですが、どうしても追加しようとしてる列から
>後ろが消えてしまいます。
ソース書きなよ。意味わからんそゴルァ

GridのColCountを+1しないと
いけないって事が理解できてないだけでは?

ColCountを1追加して
Cols[ColCount-1].Text := '';
で追加列の内容をクリアして
隠しメソッドのMoveColumnで
MoveColumn(ColCount-1, ACol);
ってするだけなんだが…

DeleteRowとかでMLログ検索してみそ。
勉強になると思うよ。
戸田は帰れ
390Delフサギコ ◆zE1iiRdQ :02/03/08 01:45
  ∧,,∧    
  ミ;゚д゚彡 ポカーン
391デフォルトの名無しさん:02/03/08 01:48
お願いおせーて!
richeditで1行ずつフォーカスをあてて行って最後まで行ったら
最初に戻るってどうやったらいいデスカ?
検索機能作ってどうしても、ループが上手くいかんのですよ。
>>391
>最初に戻るってどうやったらいいデスカ?

最後から最初に戻るには

RichEdit1.SelStart := 0;
RichEdit1.Perform(EM_SCROLLCARET,0,0);

じゃないの?
フォーカスってなんのこと?
393デフォルトの名無しさん:02/03/08 02:08
delphi6 Personalです。
ttp://member.nifty.ne.jp/m-and-i/tips/wildmatch.htm
このページのコンポーネントをインストールしようとしたら、
masks.pasがないと怒られました。
HDDをいくら検索してもないので、delphi自体を再セットアップして、
masks.pasを探してみたのですが、やはり見つかりませんでした。
Personal版にはないものなのでしょうか?
394デフォルトの名無しさん:02/03/08 02:10
>>392
レスどもです。
最初に戻るのは、そのやり方でやってるんですが、最後の行に行ったらって言う条件が
上手く書けないです。
ちなみに、フォーカスとは、選択した時に青くなるアレです。
普通はそう言わないのかな?
ちなみに、こんな感じでやってみたんだけど
if RichEdit1.Lines.Count-1=SendMessage(RichEdit.Handle,EM_LINEFROMCHAR,-1,0)
then change.selstart :=0;
よくよく考えたら、検索なんで、キャレットが最後の行に行く前に、終ってしまう・・・
395デフォルトの名無しさん:02/03/08 02:14
>>393
Masks.Pasとは、そのコンポーネントのソースのことでは?
どういう配布方法か知らないけど、ライブラリパスはちゃんと、きってますか?
全然違うこと言っていたら、ごめんね。
396Delフサギコ ◆zE1iiRdQ :02/03/08 02:19
 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 | 過去ログ見ーってのは、勉強になるよって意味で
 \_ _誰かさんみたいに、回答が面倒だから
    |/   っていう意味じゃないんだが…
   ∧,,∧
  ミ,,゚Д゚ミy━~~
   U   ミ
 〜ミ   ミ
   U''U  マ ドーデモイイカ
implementation
type
 TStrGridInsert = class(TStringGrid)
 public
  procedure InsertColumn(ACol: Integer);
  procedure InsertRow(ARow: Integer);
 end;
procedure TStrGridInsert.InsertColumn(ACol: Integer);
var
 GridRect1: TGridRect;
begin
 if (ACol < 0) or (ColCount-1 < ACol) then
 begin
  raise EAccessViolation.Create('Grid挿入列指定が間違っています');
 end;
 GridRect1 := Selection;
 if ACol <= GridRect1.Left then
 begin
  GridRect1.Left := GridRect1.Left +1;
  GridRect1.Right := GridRect1.Right +1;
 end else
 if (GridRect1.Left < ACol) and (ACol <= GridRect1.Right) then
 begin
  GridRect1.Right := GridRect1.Right +1;
 end else
 if (GridRect1.Right < ACol) then
 begin
 end;
 ColCount := ColCount + 1;
 MoveColumn(ColCount-1, ACol);
 Self.Selection := GridRect1;
end;
397395:02/03/08 02:19
>>393
あ〜
ごめんなさい。
まったく、違う事いってました。
こんなクラスあったんだすねぇ・・・スマソ
ちなみに、家のにはあったよ。DEL5のPROだよ。
パーソナルにはないみたいね。
398Delフサギコ ◆zE1iiRdQ :02/03/08 02:20

   ∧,,∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ミ,,゚Д゚彡 < ここまではいらんだろうけどね。
  (ミ  ミ)   \_selectionとか。
 〜ミ  ミ
   ∪''∪
procedure TStrGridInsert.InsertRow(ARow: Integer);
var
 GridRect1: TGridRect;
begin
 if (ARow < 0) or (ColCount-1 < ARow) then
 begin
  raise EAccessViolation.Create('Grid挿入行指定が間違っています');
 end;
 GridRect1 := Selection;
 if ARow <= GridRect1.Top then
 begin
  GridRect1.Top := GridRect1.Top +1;
  GridRect1.Bottom := GridRect1.Bottom +1;
 end else
 if (GridRect1.Top < ARow) and (ARow <= GridRect1.Bottom) then
 begin
  GridRect1.Bottom := GridRect1.Bottom +1;
 end else
 if (GridRect1.Bottom < ARow) then
 begin
 end;
 RowCount := RowCount + 1;
 MoveRow(RowCount-1, ARow);
 Self.Selection := GridRect1;
end;
399デフォルトの名無しさん:02/03/08 02:24
>>393
気持ちは分からんでもないが、作者に聞けっちゅーの。

つーか、usesにあるぞ<masks
よく見れ。
>>394
全体的に意味不明
・検索なら検索のアルゴリズムを書けよ
・フォーカスじゃなくて、文字を選択して「反転」してるんだろ?
401399:02/03/08 02:32
ちょーっと勘違い。でも作者に聞けれ!
402デフォルトの名無しさん:02/03/08 02:33
>>400
ごめんなさい最初からそうすれば良かったですね。

procedure TForm1.Button1Click(Sender: TObject);
//検索(changeはTRichEditです)
var
FoundAt: LongInt;
StartPos, ToEnd: Integer;
begin
with change do
begin
if SelLength <> 0 then
StartPos := SelStart + SelLength
else
StartPos := 0;
ToEnd := Length(Text) - StartPos;
FoundAt := FindText(Edit1.Text, StartPos, ToEnd, [stMatchCase]);
if FoundAt <> -1 then
begin
SetFocus;
SelStart := FoundAt;
SelLength := Length(Edit1.Text);
perform(EM_SCROLLCARET,0,0);
end;
end;
end;
こんなんです。ボタン押していって、最後にきたら最初に戻るってやりたいんです。
どうでしょか?
>402
最初のFindTextの結果が-1だったら、もう一回先頭からStartPosまで検索、
でいいんじゃないの。
>>402

結局、FindText() で最後まで検索したことを知りたいわけですね。
これは、最初に FoundAt が -1 になるときですから、

if FoundAt <> -1 then
begin
...........
end else
begin
ここに戻るコードを書く
end;

じゃないですかね?
>>403
>>404

やった!やったっすよ!
望むものが、できたっすよ!
本当にありがとうございます!

FindTextの見つからなかった時の戻り値って、-1なんですね。
まじ、勉強になりました〜
406デフォルトの名無しさん:02/03/08 03:37
>>395
>>399
parsonal版にはmasks.pasはなさそうですね。
とりあえず作者に聞いてみて、駄目そうだったらあきらめます。
>>382
おっと!発見しました、xxxicon みたいなのを探してました、
見出?にもイメージが付けれるのですね!

なんとなくいい感じで出来たのですが、アイコン位置と文字の
間が余分に空いているように見えるのが少し難点ですねぇ。

何れにしろ解決しました、ありがとうございました。
408332:02/03/08 11:01
Delフサギコさんありがとう!
MoveColumnがあるなんて気づかなかった・・・

409332:02/03/08 11:11
publicにあるInsertColumnにアクセス出来ないのですが何故でしょうか?
別ユニットに書いたら「(TStringGrid)は未定義の識別子」って出る。

Form1の implementation セクションに書いたら大丈夫なんだけど他の手続きからコール出来ない・・・。

質問ばっかりですいません。
410332:02/03/08 11:23
もしかして
var
 Form1: TForm1;
みたいに宣言しないと駄目とか?

411デフォルトの名無しさん:02/03/08 13:33
Cursorプロパティ以外のカーソルを使用したい場合はどうすれば良いのでしょうか?

自分で作成したカーソルアイコンを読み込ませたいのですが。
>>411
FormのCreateにて

Screen.Cursors[99] := LoadCursorFromFile('カーソルファイル.cur');
Cursor := 99;

って事かな
CheckListBoxでチェックだけ付けたいのに、普通の
ListBoxのようにマウスで選択状態にできてしまいま
すよね、あれを、選択状態にしないでマウスのクリック
のみでチェックを付けたり外したりでないでしょうか?
又は、ListBoxがフォーカスを失ったら選択状態が
解除出来ても良いが・・・。
414デフォルトの名無しさん:02/03/08 13:55
超初心者質問ですみません。
ボタンの色は変えられないのですか?
(アイコン等を使わずに)
フォントの色しか変えれないようなのですが・・・
415デフォルトの名無しさん:02/03/08 13:57
>>412
それで読み込んだアイコンはどのコントロールでも使えるのでしょうか?

ボタンやEditなど。
ちょいと試してみます。
>>414
普通、そんな時はパネルでも継承してボタンコンポ作るんだよ
>>414
又は、フリーのコンポがゴロゴロしてるからそれを使う
>>409
状況がいまいちよくわからんが
1. TStrGridInsertの宣言(typeからendまで)をinterface部に移す
2. 別ユニットの方では、TStrGridInsertがあるユニットをusesする
というような話?
419Delフサギコ ◆zE1iiRdQ :02/03/08 21:03
  ,,,,,,,,,,,,,∧,,∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′,,,,,,,ミ,,゚Д゚彡< 死後吐中はプロキシの都合上書き込めん
  UU""" U U   \_______________
ので、返事遅くなってスマソ。

TStrGridInsertは
無理無理キャストして

 TStrGridInsert(StringGrid1).InsertColumn(○)

と使うのよ。
MoveColumnはStringGridに実装されているけど
privateだから、継承クラスからしか見えない
そんなわけで、TStrGridInsertのコードからは
見えるけど、他からは使えんです。

もち、TStrGridInsertのインスタンスを作っったり
コンポーネントとして登録して利用してもいいけど
TStrGridInsertはメソッドしかないから
無理キャストしても何も問題ないっす。
(TStrGridInsertがメンバ変数を持つと
 チョトやばいだろうね)

この変の仕組みが、DelMLでDeleteRowを検索でしる
と勉強になるよ。
420デフォルトの名無しさん:02/03/08 21:12
Memoコントロールで箱型選択ってどうやるんですか?

421Delフサギコ ◆zE1iiRdQ :02/03/08 21:27
   ∧,,∧   / ̄
@,,,ミ,,゚Д゚彡 < >>420無理。TEtitor使え
⊂,,,,,,,,,つつ.   \_
array [0..260 +1] と array [0..Pred(260)] は別物なのでしょうか?
>422
(a) -1の間違い
(b) Succの間違い
どっちだ。
424422:02/03/08 22:15
>>423
失礼しました、"(a) -1の間違い "です。
425デフォルトの名無しさん:02/03/09 00:08
TEtitorってナニ?
426デフォルトの名無しさん:02/03/09 00:10
427デフォルトの名無しさん:02/03/09 00:15
Delフサよ。
お前かわいいな(*´▽`*)
>424
だったら内容としては同じもの。
ただし、コンパイラから見ると両者は「同一の型」ではない(これは
字面が違うせいではなく、両方とも array[0..260-1] のように同じ
字面にしてもやっぱりダメ)。
Object Pascal 言語ガイドの中に「型の互換性と同一性」っていう
トピックがあるから、そこを見てみるといいよ。
429デフォルトの名無しさん:02/03/09 01:22
430Delフザコギ ■zE1iiRdQ :02/03/09 01:41
    ∧,,∧   / ̄
 @,,,ミ,゚Д゚彡 < 下らん事で揚げ足とるのが楽しい人間の気が知れん。
 ⊂,,,,,,,,,づ,つ.   \_ TEditorの間違いでした!ス・ミ・マ・セ・ン!!!
431デフォルトの名無しさん:02/03/09 01:42
今日Delphi(Personal)使い始めました。
早速質問ですが、Imageで、実行時にサイズを大きくすると、
大きくした部分に線など描画ができないのですが、なぜですか?
(散々悩んだのちPaintBoxなるものをハケーンして代わりに使ってますが。)
ちなみに今はVBユーザーです。Delphiに乗り換えてもいいかも。
432デフォルトの名無しさん:02/03/09 02:07
>>431
君はVBやってなさい。
DateTimePickerでTDateTime型の初期値としてnilを入れた
いのだが入りません。
ゼロを入れると当然のように日付として扱われるしどーすりゃ
いいの?
>>431
PaintBoxで駄目な理由がわかりません。
PaintBoxでいいじゃん、つーか、その為にPaintBoxあるんだけど。
>>433
TEdit使えばいいじゃん、つーか、その為にTEditあるんだけど。
436433:02/03/09 02:19
>>435
それは、なんか違うと思いますが・・・。
俺に逆らうな!ハゲ!
438Delフサギコ ◆zE1iiRdQ :02/03/09 02:29

  カワリニ アヤマッテクレルンダ.......
      ∧,,∧___   / ̄ ̄ ̄ ̄ ̄
    /ミ*゚Д゚ミ/\<  トリpップが■ですよ、
  /| ̄∪∪ ̄|\/  \_____
    |____|/
     ,,,,∪∪,,, ,,

 単語間違いはフォースで感じ取るのじゃ。

 >>431
こんなん?

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 Image1.Canvas.Ellipse(Image1.ClientRect);
end;

procedure TForm1.FormResize(Sender: TObject);
var
 Bitmap1: TBitmap;
begin
 Image1.Picture := nil;
end;

ちょっと、リサイズすると画像消えちゃう。
画像はやっぱTBitmapあたりで
別メモリに持っておくべきか。
439Delフサギコ ◆zE1iiRdQ :02/03/09 02:54

      ∧,,∧___   / ̄ ̄ ̄ ̄ ̄
    /ミ,,゚Д゚ミ/\<  TDateTimePicker.Formatに
  /| ̄∪∪ ̄|\/ \スペースでも入れると
    |____|/   表示は消えてるみたいだけど。

  どうでしょ
>>438

> トリpップが■ですよ、
つーか、Delフザコギ
>>439 空白に見えますです!ありがとうございました!
でも、気をつけないと実際には変な日付が入ってるって
事ですよね。
442441:02/03/09 03:11
>>439 やぱし駄目でした、表示は良いのですが
入力できなくなるんですね。トホホ
フリーのコンポ漁ってきます。
>433
OnUserInputなりOnKeyPressなりでFormatを書き換えてやると
一見うまくいきそうで結局うまくいかないような予感がするナリよ。
っつーか、そもそも何のために空白なんかにしたいのかと小一(略)
>>443
俺も日付の初期化で悩んだ事があったよ、例えば、DBから日付を持って来る
場合に、DB上には必ずしも日付が入らなくても良い項目が沢山ある場合がある、
死亡年月日とか、退職日付とか。
何処かにフラグ持てば良いのだろうが、DB上での日付をNullで扱える物も多い
ので困るんだよなぁ。

>>433
日付がNullになるような場合DateTimePickerは使えないと思っていいよ、既にFree
コンポを探し当てたかな?

どうしてモナーが出てこないんですか?
446DELモナ一:02/03/09 04:26
 ∧ ∧         / ̄
( ´∀`)(    )  < 体が切れてる体よ!
              \_
447Delフサコギ:02/03/09 04:30
      ∧,,∧___   / ̄ ̄ ̄ ̄ ̄
    /ミ*゚Д゚ミ/\<  諸君等の愛してくれたモナ一は死んだ!
  /| ̄∪∪ ̄|\/  \ なぜだ!
    |____|/     \____
     ,,,,∪∪,,, ,,

次からフサコギの*やさしい* Delphi質問スレになる
坊やだからさ
449初めてのDelphi:02/03/09 08:19
var A : TStringList ;
だとして

A := TStringList.Create ;

と書くべき所を、未だに

A.Create ;

と書いて、エラーを出して原因がわからず1時間悩んだ俺は見込みなしですか?

ちなみになんで下の書き方だとエラーになるのかわからん。
var節で型は明らかになってるはずなのに・・・
>>449
AはTStringListだ
何でTStringListを作る?
それはTStringListで作る
>何でTStringListを作る?
この1行がわからんよなぁ
>>449
自分で簡単なクラスを設計してみればわかるかも
453451:02/03/09 10:00
解った・・・

確かにこの方が読解しやすいね。
・インスタンス.コンストラクタ
・型.コンストラクタ
の違いですか
455問題です:02/03/09 11:21
procedure TForm1.Button1Click(Sender: TObject);
var
a, b: TStringList;

begin
a := TStringList.Create;
a.Add('XXX');
b := a.Create;
b.Add('YYY');
Button1.Caption := a.CommaText;
end;
を実行した場合のButton1.Captionの値は何でしょう?
>>449
var A : TStrings ; でも

A := TStringList.Create ; と出来るようにする為です
>>449
"A"はTStringList型の『変数』、型から作られた『インスタンス』(実体)を納める物。
"TStringList"は、TStringList『型』。文字通り『型』。違いが解るかな?
厳密に言うと、AはTStringList型のインスタンスへのポインタに過ぎない。

まあ、あんまり深く考えない方がいい。
『型』にしかインスタンスを作る機能がない物と覚えた方が早い。
458Delフサギコ ◆zE1iiRdQ :02/03/09 14:40
   ∧,,∧     /フサコギなんだ....
   ミ;゚Д゚彡  < 
   ミU  U    \
 〜ミ ,, ミ
   ∪ ∪ AAはモナー板からコピペしておこう!
       ギコペにはフサAAは少ないから....

DBのNullな日付型は困りモノですね。
Null許容可能なDate型を用意してくれりゃいいのに。。。

そういえば、D6から日付型が拡張されたんでしたよね…
459デフォルトの名無しさん:02/03/09 16:48
質問です。
レコード型に型が不定のフィールドを定義したいのですが、その方法が分かりません。
例えば、
type
abc = record
aaa: integer;
bbb: string;
...
nnn: (型が不定); ←ここ
end;
var hoge: array of abc
値を保存するbyte配列を用意してそこに格納し、ポインタで参照することも考えましたが、
それだとbyte配列を固定長にしなければならないし、
データの追加・削除が自由にできません。
何かうまい方法はあるんでしょうか。
bbb: Pointerにして好きなデータぶら下げたら?
あるいはbbbのとり得る型が限られた数ならcase使うとか
>>459 そういう時の為のVariantだと思うのだが?
463デフォルトの名無しさん:02/03/09 16:58
TEditorなんてコンポーネントないよ。
personalだけ?
464459:02/03/09 17:01
>>460-462
ありがとうございます。
今試してみます。
465459:02/03/09 17:20
>>460
具体的にはどうすればいいでしょうか。
無知ですみません。

>>462
> そういう時の為のVariantだと思うのだが?
nnnにはレコード型も格納したいのですが・・・。
(ヘルプによるとできないようです。)
ほかに方法はありますか。

あと>>459の例は、
nnn:だけがbyte型になったり、string型になったり・・・ということです。
aaa、bbbは関係ありません。
誤解を招いてしまっていたらすみません。
>465
460ならNew/Dispose使え。
461の方がいいと思うが。
468デフォルトの名無しさん:02/03/09 20:40
>>467
ありがとう。シェアなんだね。
結局貧乏人には矩形選択を実装できないって事か。

はふぅ。
>>468
金がないなら技術を磨けYO!
>>468
自力で実装すると言う考えはないのですか?
471467:02/03/09 21:04
>>469
>>421でdelフサが「無理」って言ってるから
不可能なんじゃないの?
>delフサが「無理」って言ってるから
>不可能なんじゃないの?
この瞬間delフサは神になりました。

以後誰もdelフサの発言に疑問を持ったり
逆らったりしてはいけません。
473デフォルトの名無しさん:02/03/09 21:32
子プロセスを起動して標準入出力でやり取りできる
ターミナルっぽいメモ型コンポってない?
474467:02/03/09 21:48
>>472
ネットでいくら検索しても出てこないし、
何をどうすれば矩形選択になるのかサッパロ。

色を反転させたイメージを貼り付けたりすればいいの?
(@´ー`@) どこにもないものならば〜 作りましょ〜♪
>>467
編集コントロールを自作
TStringsの内容をCanvasに描画するようなやつ
477デフォルトの名無しさん:02/03/09 22:48
おい!! delphiっていつから//形式のコメント通るようになったんですか?
ずっと使いづらいと思いつつ{}でくくってたんだけど、
昔から//でも良かった?
>>473
おれも欲すいので作って呉
479Delフサギコ ◆zE1iiRdQ :02/03/09 22:54
.       ♀  ( 3000円で貧乏人か…パソコンどうやって買ったんだ?
       /\  (  悩む時間でバイト逝けよ…
.      |∧ ∧ .。○   あと、ダウソすりゃTEditorソース見え見えだって
  ___ ミ,,゚Д゚彡___( TMemo全部自作する気なら読むヨロシ
  |   ⊂   ⊃   |  ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ̄ ̄ ̄ミ  ミ ̄ ̄ ̄ __
'|.      ミ  ミ     |__†_レ  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
'|.      |.UU|     (゚Д゚,,) < 迷える子羊よ、お訊きなさい・・
'|.      |   | ∧ ∧⊂ ̄ ̄ハ  \______________
'|.      |   |.(   ,) | ╋ J
     | ̄ ̄ ̄./⌒ヽ ̄ ̄ ̄|
     |    (  ノ )    |
  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
_______|\________

 貧乏人には短形選択を実装できないんかゴルァ
480467:02/03/09 23:13
>>479
ありがと。
自宅帰ってからゆっくり調べる。
>>479
AAを書く時間でバイト逝けよ・・・
482もっとマターリいこうや:02/03/09 23:16
(*
                              ζ  ,
                               _ ノ
                             ( (   (. )
                               `
                             . -/■\ .
                          .´,.::;(´∀`A) `.
                          i ヾ<:;_ー-ーー,.ン |
                          l      ̄...:;:彡|
             /■\            }  . . ...::::;:;;;;;彡{
           ( ´ )-`)          i   . . ...:::;;;;;彡|
           ,つ  ⊆)            }   . .....:::;::;:;;;;彡{
          , :´ `"~.  `、          !,    . .:.::;:;;;彡j:::::::::::::::.......
.         . '  .    ; .丶         ト ,  . ..,:;:;:=:彳:::::::::::::::::::::::::::..
.        ,:´ .    '    ' `、        ヽ、.. ....::::;;;ジ.::::::::::::::::::::::
       ,'    . 簍J鶸鑼  ; `.           ̄ ̄  
   ,, -'''" .   .  駲刪櫑躪  . ' ';゛`'丶.、.......    
.  '´     !    . 膚順棚斷. ' , ;::::::::::::...`.::::::::.... 
 i       ヽ、..._,.__魎鬱蹠撫.,,__,.,..ノ.:::::::::   !::::::::::::...
. ヽ、                      ,: '.:::::::::  
    `=ー--、....,,,,,______,,,,,... --‐=''´..::::::
      ``" '' 'ー───‐―‐' ''' "´

       -モナーの *やさしい* Delphi質問スレ Ver3 -
*)
>>482 なんか見てると自分もマターリするな・・・

>>466 ありがとうございます。
484Delフサギコ ◆zE1iiRdQ :02/03/09 23:32
          _______________
   ∧.,,∧   /
  ミ.,,゚Д゚彡< TMemoで短形選択は非常に難しいと思われ
  ミ つ目(ミ . \
〜ミ,,O,,,,,,つ     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

TMemoはOSのメモコントロールを利用しているから
メモコントロールには元々短形選択機能なんてのはついてないの
OSのどこかのDLL(?)で動作してるから
メモコントロールのソースなんかどこにもないの。
だから大幅な機能拡張なんて出来そうにもないのです。
 (超裏技を使ったら出来なくはないかもしれんが
     …聞いたこともないです)

そいうのが嫌で、Editor機能を全部
Delphiソースで書かれたものとして
TEditorとか他にもDelphianWorlsに登録してありますよね。

裏技的なやり方をすれば
背景透明化なんかはTMemoでもできたり
改行コードやEOF描画はTRichEditでも
なんとか出来たりしますが、
短形選択は聞いた事ないですし
ヤパーリTEditorを使うのがよろしいと思います。

結構、多くのフリー/シェアエディタにも使われてるYO
TeraPadなんかもTEditorだよね。

3000円(だっけ?)で超優良なコンポーネントが手に入るので
すごく安い買い物だと思うよ。
書籍買うのとかよりもね。ソースつきだし勉強になるっしょ。
どんな書籍買ってもTEditor級のコンポーネントは
 簡単には作れないし。

ではでは。
485デフォルトの名無しさん:02/03/10 02:21
>>455
XXX,YYY
かなぁ・・・・。
a.Create
では新しいインスタンスは作成されなかったと思う。
文字列が半角英数字かを判定するにはどうすればよいのでしょうか
if (aaaa=bbbbb) then
 begin
  処理
 end;



if (aaaa=bbbbb) then
begin
  処理
end;

とどっちが読みやすい?
あと、

end else begin



end
else begin



end
else
begin

って書き方もあるけど、どれが読みやすい?
488デフォルトの名無しさん:02/03/10 02:40
489ネタでなければいいが…:02/03/10 02:41
>>486
StrToIntDef
490488:02/03/10 02:41
>if c in ['A'..'Z', 'a'..'z', '0'..'9'] then
これは文字cが半角英数かどうかって事ね。
文字列全体ならループまわして判定。
491489:02/03/10 02:43
ああ、アルファベットもってことか。
492486:02/03/10 02:52
>>488
>>489
>>490
ホント厨な質問してしまってすいません。。
こんな漏れに答えてくださってありがとうございます。
493 ◆l1kFOeLY :02/03/10 03:19
>>490
それでいいのかなぁ〜。
494Delフサギコ ◆zE1iiRdQ :02/03/10 03:43
  ,,,,,,,,,,,,,,,,∧,,∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′,,,,,,,,,,ミ,,゚Д゚彡 < なんでも判定するよろし。
  UU"""" U U    \_______________

type
 TStrInTable = (vitAllInclude, vitAllExclude);

function CheckStrInTable(const Str, Table: WideString;
InTable: TStrInTable): Boolean;
var
 ExistCondition: Boolean;
 i: Integer;
begin
 case InTable of
  vitAllInclude: ExistCondition := True;
  vitAllExclude: ExistCondition := False;
 else
  raise Exception.Create('InTableの不正指定');
 end;

 Result := True;
 for i:=1 to Length(Str) do
 begin
  if (AnsiPos(Str[i], Table)=0)=ExistCondition then
  begin
   Result := False;
   Break;
  end;
 end;
end;
495Delフサギコ ◆zE1iiRdQ :02/03/10 03:43
  ,,,,,,,,,,,,,,,,∧,,∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′,,,,,,,,,,ミ,,゚Д゚彡 < こんなんして使います。
  UU"""" U U    \_______________
const zenHiraTbl: String = 
  'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほ'+
  'まみむめもやゆよらりるれろわゐゑをんがぎぐげござじずぜぞだぢづでど'+
  'ばびぶべぼぱぴぷぺぽぁぃぅぇぉゃゅょゎっー';
const zenKataTbl: String = 
  'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホ'+
  'マミムメモヤユヨラリルレロワンヲガギグゲゴザジズゼゾダヂヅデド'+
  'バビブベボパピプペポァィゥェォャュョヮッー';
const hanKanaTbl: String = 
  'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォャュョッ゚ー・、。「」';
const zenNumberTbl: String = 
  '1234567890';
const hanNumberTbl: String = 
  '1234567890';
const zenAlphaTbl: String = 
  'ABCDEFGHIJKLMNOPQRSTUVWXYZ'+
  'abcdefghijklmnopqrstuvwxyz';
const hanAlphaTbl: String = 
  'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
const zenMarkTbl: String = 
  '−.&%$#*@?/,<>(){}|;:〜+`!V=_^・';
const hanMarkTbl: String = 
  '!"#$%&''()*+,-./:;<=>?@[\]^_`{|}~';
const zenSpaceTbl: String = ' '; 
const hanSpaceTbl: String = ' '; 

procedure TForm1.Button1Click(Sender: TObject);
begin
 if CheckStrInTable(Edit1.Text, hanNumberTbl, vitAllInclude) then
  Form1.Caption := 'すべて半角数字で構成されています'
 else
  Form1.Caption := '半角数字以外の文字が入っています'
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 if CheckStrInTable(Edit1.Text, hanNumberTbl + zenNumberTbl, vitAllExclude) then
  Form1.Caption := '一文字も数字は含まれていません'
 else
  Form1.Caption := '数字が含まれています'
end;
begin;

この文は妥当か?
コンパイルは出来た。
498Delフサギコ:02/03/10 10:44

            ∫    _________
   ∧,,∧     ∬   /
   ミ,,゚Д゚彡っ━~  < このスレは低レベルですな。
_と~,,  ~,,,ノ_.  ∀   \
    ミ,,,,/~), │ ┷┳━   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ .じ'J ̄ ̄| ┃
 ̄ ̄ ̄ ̄


>>493
全角文字を含む文字列の中の文字の場合,
ByteType関数などを使ってチェックしないといけないです.

例:文字列sの中の半角英数すべてを"#"に痴漢.
for i := 1 to Length(s) do
if (s[i] in ['A'..'Z', 'a'..'z', '0'..'9']) and (ByteType(s, i) = mbSingleByte) then
s[i] := '#';
>>499
毎回ByteType呼ぶと重い。
1バイト文字のときに限り、ならこんな感じかね。

isSecondByte := false;
for i := 1 to Length(s) do
begin
 if isSecondByte then
  isSecondByte := false
 else
 if s[i] in LeadBytes then
  isSecondByte := true
 else
 if s[i] in ['A'..'Z', 'a'..'z', '0'..'9'] then
  s[i] := '#';
end;

重さを無視すれば WideStringに代入して回したほうがコードはシンプルになるね。
501500:02/03/10 13:31
for->whileにして中でiいじったら?
502501!=500:02/03/10 13:32
500->>500だった
503デフォルトの名無しさん:02/03/10 15:49
変な質問ですいません。
画面があったとします。
その画面の左上から雪みたいなのがフワフワ降ってくるのを作ろうとしてるのですがうまくいきません。
直線にビューーーー!って飛んでいくんです。

どうしたら良いでしょうか?
sinとかつかわないとダメですかね?
もっと問題を具体的に逝ってくれないと。
どうしたら良いでしょうか?って言われても。
どういう実装を考えていて、どの部分のやり方がわからないのか、ということ。
さっぱり見当もつかないならあきらめてください。
ふわふわの動きを一定にして、順番に配列にでも入れてみては?
振り子運動をしながら落ちていくだけでもふわふわしそうですが・・・
506デフォルトの名無しさん:02/03/10 16:06
TShapeコントロールで、
クリックとドラッグがそれぞれ出来るようにしたいのですが、
OnMouseUp にクリックイベント内容を書き、
OnMouseDown に BeginDrag(False,4) とすると、
マウスボタンを押した瞬間に OnMouseUp が発生してしまいます。

どうすれば上手く行くでしょうか。
ay = 9.8
ax = 0.0

while True do
begin
 ax := ax + Random(10)-5;
 x := x + ax;
 y := y + ay;
end;
508デフォルトの名無しさん:02/03/10 16:45
Teditorを入れたら「DsgnIntfが存在しません」と怒られました。
ファイルを検索してもそんなファイル無いのですが、Del6では
使えないの?
509デフォルトの名無しさん:02/03/10 16:45
softiceとか使わなくても、Delp6で他人のソフトを解析・クラックすることが
出来ますか?
510デフォルトの名無しさん:02/03/10 17:19
>>508

無理。del5をダウンロードせい。
つーかdel6は不安定なんで素人にも玄人にもオススメできない
511デフォルトの名無しさん:02/03/10 18:16
>508
なぜここで聞くのか?
そもそもDel6用なんてどこにも書いてなかっただろ。
512511:02/03/10 18:22
> なぜここで聞くのか?

突っ込まれる前にいっておくと
作者のHomePageがあるだろ。つーこと。

ttp://member.nifty.ne.jp/~katsuhiko/
513509:02/03/10 20:00
DELモナーさ〜ん!
>>513
  _____        ______
/\   Λ_Λ     /
\  \(;´Д`)\  <   ハーイ?
 |\/| ̄ ̄ ̄ ̄|\  \______
 \.  | DELモナ . |
   \.|.____|
515デフォルトの名無しさん:02/03/10 21:26
a〜Zまでのアルファベットをランダムにだすようにはどうすればよいですか?
516>515:02/03/10 21:37
1. 0..25の乱数を生成
2. 1.の数値をa..zのアルファベットに変換
0〜51までの乱数を生成するとか?
s := 'ABC';
c := s[Random(Length(s))+1];
>>503
適当な横軸足しながら、sinで揺らせば?
複数のsinを足すとそれっぽい。
520509:02/03/10 22:37
Delフサギコさ〜ん!
521デフォルトの名無しさん:02/03/10 22:53
クリップボードに貼り付けしたりするにはどうるすんですか?
>>521
ClipBoard.Assign;
524デフォルトの名無しさん:02/03/10 23:36
PDFヘルプのクイックスタートの4-6に書いてあることをやろうと思うのですが、
コンポーネントパレットの[Additional]ページにあるという
ActionManager が見当たりません…。

何か特別なことをしないといけないんでしょうか?
525506:02/03/10 23:38
オネガイ >>506 オシエテ…
526デフォルトの名無しさん:02/03/10 23:44
>>524
面白くない。
528デフォルトの名無しさん:02/03/10 23:50
>>526

>>527
すみません、よく読んでませんでした。
逝ってきます
529デフォルトの名無しさん:02/03/11 00:12
アクソンジャーマネが無いのネ♥ってのは正直、見飽きた。
見飽きたというかなぜBorlandがそれに対処しないのか謎だよ。
>>530
確かに。
>>530
めんどくさいだけだろ。
533デフォルトの名無しさん:02/03/11 09:06
ある文字列から、該当文字列を検索して
Hitしたらその文字が何番目か返す関数ってあります?

例えば'TestWord@@@'って文字列から、'Word'って文字を探して
上の例なら5を返すような関数。
pos
535デフォルトの名無しさん:02/03/11 09:33
>>534
ありがとう。
今までずっとstrPos使ってヒィヒィ言ってたの。
>>535
(´ー`)y-~~~ ちったぁHelp読めや・・・
537デフォルトの名無しさん:02/03/11 10:16
質問です。
メインフォームで、あるボタンを押すと別フォームが現れるとします。
ボタンを押したときにその別フォームがすでに起動してたら、
新たに起動せずに、すでに起動してるのをアクティブにする、
ってことをしたいんですが、やり方わかりません。ぜひ教えていただきたい。
>>477
TurboPascalあたりからじゃねえ?

>>485
その通り。
だもんでこんな風に初期化を共通化するのに使うのもありだな

constructor THoge.Create;
beign
 :
end;

constructor THoge.CreateFromFile(const s: string);
beign
 :
 Create;
end;

539デフォルトの名無しさん:02/03/11 10:45
StringGridで縦に文字を抜き取る方法って無いですか?

ああああああああ
いいいいいいいい
ううううううううううう
ええええええええ
おおおおおおおお

ってあったら

あいうえおあいうえおって読んで行きたいんです。

540539:02/03/11 10:46
あ、これってfor文でyに変数持たせて回すだけか・・・。
>>537
むしろform2.showで何がうまくいかないのかわからん
542537:02/03/11 12:00
>>541
その別フォームってのはTOKBottomDlgでして、
OK押したらそのフォームの設定を保存するようにしてまして、
そんでshowmodalでやってるんです。
でもこのフォーム、ホットキーでも呼べるようになってまして、
そうすると二重起動できちゃうんです。これを阻止したいのです。
showだと、OK押したら保存、キャンセルなら保存しないっていうのは
どうやるんでしょうか?初歩的な質問で申し訳ないっす・・・
543537:02/03/11 12:48
あ、showで設定保存するのは簡単でしたな・・・
メモリ開放はcaFree使えばよいのかしら?
それは置いといて、やっぱり二重起動防止がわかりません・・・うぐっ
フォーム表示時にHotKey設定を消せば?
閉じたら再設定すけば?
545デフォルトの名無しさん:02/03/11 13:13
ヘルプのように、editに文字を入れたらリストの選択行を
設定したいのですが、Pos関数の戻り値が全て0になってしまいます。
何がいけないのでしょうか?

eはTedit、llはTlistboxです。


var ret,i:integer;
begin
for i:=0 to ll.Count -1 do
begin
if pos(UpperCase(ll.Items.Strings[i]), UpperCase( e.Text))<>0 then
begin
ll.ItemIndex :=i;
exit;
end;
end;
end;
>>545
Posの引数が逆なんじゃないの?
547DELモナ:02/03/11 13:41
 ∧ ∧
( ´∀`)< >>545 pos の引数は pos(検索文字列, 検索対象文字列) モナ。

>>539 わざわざ for 使わなくても、
s := StringGrid.Cols[0].Text; でいいんだナ。
548545:02/03/11 13:51
>>546,547

ありがとうございます!
何とお礼を言っていいのやら
549537:02/03/11 14:12
>>544
できました。的確なご指摘ありがとうございますm(_ _)m
Delモナが久々に登場した!
>>477
たしかDelphi 2.0からと記憶しています.
初代はできなかったと記憶しています.
また今,旧開発機でDelphi 2.0を起動して『//』が使えるのを確認しました.
552デフォルトの名無しさん:02/03/11 18:17
ActionListのカテゴリってどうやって増やすのですか?
'検索'を追加したいのですが、カテゴリの追加の仕方がわからずに
困っています。
553デフォルトの名無しさん:02/03/11 19:28
MDIでエディタを作っています。
メニューを親フォームに作成し、子フォームの
Memoコントロールをクリアする処理を作成したところ、
linesメソッドが未定義だと言われてしまいました。

MDI環境で子フォームのコントロールを制御したい場合は、
どのように指定したらいいのでしょうか?

procedure TMainForm.FileClearExecute(Sender: TObject);
var
ActiveEditer:Twincontrol;

begin

ActiveEditer:=ActiveMDIChild.ActiveControl;
ActiveEditer.Lines.Clear;    ←ココ でエラー
end;
>>552
直接Category書き換えるだけ
555552:02/03/11 19:57
>>554
「標準アクションの追加」で何とかうまくいきました。
ありがとうございます
>>553
ActiveEditorつーのは、TWinControlなわけでしょ。
TWincontrolには、Linesプロパティがないからエラーが出るのはあたりまえ。
じゃ、どうするのかといえば、
ActiveEditor := ActiveMDIChild.ActiveControl;
if ActiveEditor is TMemo then
TMemo(ActiveEditor).Lines.Clear;
で出来る。
557デフォルトの名無しさん:02/03/11 21:01
>>556
できました。
なんとお礼を言ってよいのやら。
とにかくありがとうございました。

それで、他にもTmemoを参照する場面が多々あったので、

>TMemo(ActiveEditor).

これの値をTMemo型に格納して処理させましたが、
このとき参照の解放作業のようなものは必要なのでしょうか?
それともスコープを抜けた時点で自動的に解放されるのでしょうか。


クラスはポインタ。
559477:02/03/11 21:25
>>551
レスさんくす。
今でも2.0って、現役なんだなー
ま、フツーのアプリの開発なら、全然困んなそうだけど。
560デフォルトの名無しさん:02/03/11 21:29
集合型は便利だ。すごく便利だ。しかし、涙を飲んで定数にする場合がある。
なぜなら、集合型はファイルに保存したりするときに、数値や文字列に
変換するのが面倒だからだ。そこで、汎用型変換ルーチンを作った。
役だてていただきたい。

type TYPE = (...)
type TYPES = set of TYPE; 
↑と宣言している集合型と整数の相互変換ルーチン

{ 集合型を整数に変換..64要素まで対応 }
function TYPES2Int(S:TYPES):Int64
var
 I:TYPE;
begin
 if Ord(High(TYPE)) >= 64 then
  raise Exception.Create('要素数が多すぎる');
 for I := Low(TYPE) to High(TYPE) do
  if I in S then
   Inc( Result, 1 shl Ord(I) );
end;

{ 整数を集合型に変換..64要素まで対応 }
function Int2TYPES(S:Int64):TYPES;
var
 I:Integer;
begin
 if Ord(High(TYPE)) >= 64 then
  raise Exception.Create('要素数が多すぎる');
 for I := Low(TYPE) to High(TYPE) do
  if S and (1 shl Ord(I)) <> 0 then
   Include( Result, I );
end;
>>560
集合型の実体は 256 bit / 32 byte のデータでしかないから, byte[0..31] に
強制キャストしてしまえば終わり。
>>561
そうか。
563デフォルトの名無しさん:02/03/11 23:09
>>561
喜び勇んでコピペした俺の立場わ
564デフォルトの名無しさん:02/03/11 23:22
フリーにするくらいなんだから、もーーーーーーー少し、ヘルプを「いい感じ」にするのと、
詳細なリファレンスを作ってくれたなら、もっと売り上げに貢献…するような
気がするようなしないような。
あくまで希望っちゅーか、展望っちゅーか、未来予想図っちゅーか…。
ま、感謝してますが>ボーランドさん
個人的には過去のバージョンの最下位エディションも公開して欲しい…。
>>564
>もー(略)ー少し、ヘルプを「いい感じ」にするのと、 詳細なリファレンスを
胴衣。

それにしても、ちゃんとしたアプリケーションが作れるソフトでフリーとは
もう感謝です。だれでもアプリケーションが作れる環境が手に入るって
いうのは画期的ですね。みんなプログラミングしましょう。
(Professionalは高いですが・・・)
そーいや、なんで名前がコロコロ(?)変わったりしたの?
568485:02/03/12 04:21
>>538
お礼。
TObject(nil) is TComponent はTrueかFalseか?
569デフォルトの名無しさん:02/03/12 09:05
>>567
 何の名前のことだか不明なのだが……

 社名であれば、Borland というのは「開発ツール(言語)メーカー」という
イメージが非常に強く、Enterprise 分野に進出するにあたってそのイメー
ジを払拭するために、Inprise という名称に変えた、というところ。
 実際このとき、Borland の名前は開発ツール群の名称として残していた
(Inprise の Borland Delphi とか……)。

 が、結局 Borland のネームバリューのほうが強かったので、元に戻した、
そういうわけだが。
店頭に余った製品を回収しなければならないが、
その費用の損失で株が下がると困るから社名を変えて回収した、
というのが本当の理由と聞いたが。
>>570
RAD ツール関連は Borland ブランドで出し続けた事実一つで、その妄想は否定される。
572デフォルトの名無しさん:02/03/12 10:40
Delphiでiniファイルを作ったり読み込んだりするのは何を使うのが一番良いですか?
VBでは簡単に出来たと思うのですが。
573デフォルトの名無しさん:02/03/12 10:43
画面を常に前面に表示させたくてAPIで指定しようとしたのですが、
「定数が範囲を超えました」と言われてしまいました。

SetWindowPos(form1.Handle, -1, 0, 0, 0, 0, 68);

どうも第2引数が原因らしいのですが、-1を指定しないと
前面に固定表示されないので困っています。

Delphiでは何を送ればいいのですか?
>>572
> Delphiでiniファイルを作ったり読み込んだりするのは何を使うのが一番良いですか?
> VBでは簡単に出来たと思うのですが。

ぼくはBuilder使いだけど、TIniFileっての、ない?
>>573
「定数が範囲を超えました」 は たぶん -1をHWND(-1)と書けばいいと思うけど
そこは ,HWND_TOPMOST と定義済みの定数があるよ

でも、常に前面に表示したいなら、
http://www.borland.co.jp/qanda/delphi/d0000128.html
>571
違うよ。RADツール以外を回収だよ。
>>574
Tinifileでいけました。

最初動かなかったんですけどusesにinifilesを追加したら無事iniファイルの読み書きが出来ました。

IniFile: TIniFile;

って言う宣言も必要でした。
勝手にセクションやファイルを生成してくれるので便利。
TIniFileよりTMenIniFileの方が良くないですか?
TMenIniFile 無いんですけど・・・どこかのフリーのコンポですか?
580デフォルトの名無しさん:02/03/12 12:03
Delphi6proで”使用許諾未完了”って出てるんですけどちゃんと登録しないとなんか有るんですか?
買った物なので別に登録しても良いのですが。
そもそもBorlandで買ったので登録された状態で出荷れてたはず・・・。

急に使えなくなったりとか?
>>576
だから、エンタープライズ系に突入したのは Inprise に名前を変えてからだろ?
VisiGenic や OpenEnvironment の製品は、どちらにしろ名前を変えなきゃいけないわけだし。
おもしろい妄想だけど、時系列的にあわない。後知恵的発想。
Editにて編集前の値をプロパティに持たせたいと考えて
OldTextプロパティを追加して、EnterイベントとCreate時に
Old:=Text のようにプログラムした。
一見してこれで正しく使えているのだが、問題があった。

それは、

xxxxx.text:='代入';

のようにプログラムにて値を代入すると EnterとCreateでは
上手く編集前の値が保存できないのです。
Changeイベントを使うと、一見できそうだったのですが、
どーやら、同じ値が入った場合にはイベントが発生しない
みたいで、失敗しました。
なんとか、単純に値が代入された事をしるすべはありませんか?
>>582
そんな時はkeypressを使うのだYO!
584582:02/03/12 12:14
>>583
すみません、よく解らないのですが、キーボードからの入力
じゃないのでkeypressは使えないでしょ?
なにか、擬似的にkeypressを発生させるような事が出来る
のでしょうか?詳しくお願い致します。m(。。)m
>>584
俺の勘違いだったYO!
>>580
製品のユーザー登録と、個々のインストールイメージのアクティベーションは別。
Windows XP もそうでしょ?

使用許諾をとらなくても特に問題はないはず。
>>579
578のtypoか。TMemIniFileだな。
TIniFileは制限が多いのでTMemIniFileがよいかと。
>581
違う。Delphi/400とか、AppCenterとかイパーイ出てた。
時系列的にあってた。
>>582
たぶんCustomEditのソース眺めてTextが無いから
そんなこと言ってんだろっ!な!そーだよなっ!
もう少し上のクラスを見てみろ、TControlとかね。
だから、570 の「本当の理由」ってやつの
>店頭に余った製品を回収しなければならないが、
>その費用の損失で株が下がると困るから社名を変えて回収した、
「店頭」で売るようなものじゃなかったんだってばYO.

Delphi/400 は Delphi のまま売り続けたし、もともとフランスの物。
アメリカでは大して売れていなかった。

AppCenter なんか、それこそ店先で買うものでなかろ?

店頭から回収すると被害が起きる、ってのはショップで売ってる RAD ツールに
のみ当てはまることで、そいつらの名前が変わらなかったことをどう説明すんだ。

誰からそんな説明を受けたんだい?
591デフォルトの名無しさん:02/03/12 13:01
TEditって↓キー押すと右に行くじゃないですか。
それをなくしたいのでKeyDownでkey:=0;ってやったのに
キャンセルされないのですが、どうやると
keyDownを無効にできますか
>590
記憶ではZDNN。
>>591

EditのKeydownでできますが?
 if (Key=VK_DOWN) then Key:=0;
>>589
ありがとうございます。おっしゃる通りでした。
application.messageboxで表示したメッセージを
一定時間したら自動で閉じるようにしたいがどーするよ。
>595
実態はメッセージボックスコールなんだから無理だろ。
そこにWindowsメッセージをPostするなんて、
汚いことはしない方が時間の無駄をしないと思う。
つまり、自前でメッセージフォームを作った方が良いってことだね。
>597
そうです。
Windowsのメッセージをイジリだすと、VCLの処理とブツかって、把握が大変。
へたすると、そんな大した処理じゃないのに、Case文のネスト。
>>598
もう出来ました。
まぁ作ってもすぐ出来るんだからこっちの方が楽でした。

あとは、今までのメッセージを全て変更する必要がある
が、IDEのエディタにプロジェクト内の全ユニットを串刺
しして変更する方法が無いのが寂しいですね。
600デフォルトの名無しさん:02/03/12 13:46
>>593
あ、すみません。↑↓キーはできたのですが、
スペースキーがアウトみたいです。
何故文字の時はダメなのでしょうか

case key of
vk_up :
begin
ll.ItemIndex :=ll.ItemIndex +1;
key:=0;
end;
vk_down:
begin
ll.ItemIndex :=ll.ItemIndex +1;
key:=0;
end;
vk_space:
begin
e.Text := ll.Items.Strings[ll.ItemIndex];
key:=0;
Sender:=nil;
end;

end;
>>600
俺はオマエのデバッガーじゃねーぞ。

case key of
vk_space:
begin
edit1.Text := 'あああ';
key:=0;
end;
end;

これも問題ないようだが?
>>600
そんなことより、

vk_up:
 begin
  ll.ItemIndex :=ll.ItemIndex +1;
                  ~~~
アップで+1はおかしくないか?
>599
>あとは、今までのメッセージを全て変更する必要がある

・メッセージ画面出力関数を用意しといて、
 1箇所で処理が変わるようになっといた方が良かったのでは?
・もしこのメッセージがエラーメッセージなら、
 Application.OnExceptionイベントハンドラ1ヶ所にしといて、
 エラーをトラップしなければ良いのではないでしょうか?
 エラーメッセージを出力したいときは、Exception.Createすれば良いし
604600:02/03/12 15:59
>>601-602
重ね重ねありがとうございます。

どうもkeydownでkeyを殺しても、
keypressにスペースが飛んでくるようなので、
そっちに#0を入れて対処しました。
605デフォルトの名無しさん:02/03/12 16:20
スレ違いかも知れませんが教えてほしいことがあります。
「オフコン」とはなんですか?
具体的に分かりやすく教えてください。
605 はマルチポストなので放置よろしく。
607デフォルトの名無しさん:02/03/12 16:30

      ∧∧  ミ  _ ドスッ
     (   ,,)┌─┴┴─┐
    /    つ 糸冬 了│
  〜′  /´  └─┬┬─┘
   ∪ ∪      ││ _ε3
            ゛゛'゛'゛
>>608
さらになぜか DirectX 相談室にも。
単なるコピペ荒らしという可能性もあるが。
http://pc.2ch.net/test/read.cgi/tech/991795568/866
初心者厨房はココで質問でしたか・・・・すいません
>>609の場所でも一応質問してたんですが・・・・
さっき
スパロボA DLしたんですけども・・・・・
対応アプリが無くて起動できないんですが・・・・・
どういうアプリなんでしょうか・・・・・
すいません。ホント知らないんです。
僕はアプリ無しでDLした真性の馬鹿です。
611デフォルトの名無しさん:02/03/12 17:33
Spinコントロールで質問です。
スピンコントロールで数値が入力された際に4の倍数以外は無効にしたいのですが、どうしたらいいのでしょうか?

4、8、12、16、20、24 etc・・・・

今はKeyDownが起こったら即座にValueを元の数字に戻すようにしてます。
出来ればカーソルの↑↓や数値入力からも入力したいので。
TMemIniFileはDelphi4で追加されたクラスです.

TIniFileはWindows 9x/NTにあるiniファイルを処理する機能を使って制御しています.
TMemIniFileはこれを使わずに普通のファイルのように読み書きしています.
>>612
「お前って本当に馬鹿だねに該当するページが見つかりませんでした。」
あらかじめお知らせします。
関係ない人がクリックするとなんだかいやな気持ちになるな。
>>611
その Spin コントロールで、Edit 領域に 3 とか入れた場合の、期待する動作を
教えてくれ。
616611:02/03/12 18:38
>>615
3とか4の倍数以外が入ったら無理矢理4とかに書き直しちゃうのが一番簡単な回避方法だと。

今はどんなキー入力でも強制的に4になるようにしてます。
質問です。
だいぶ前にインプレスのサイトでDelphiとC++の速度比較を行ってた記事があったんですが見つかりません。
誰か知ってる方教えて下さい。
KeyDownで3が入ったとき4にしちゃうと
32とか36はどうするの?>611
620611:02/03/12 18:49
>>619
ああ・・どうしよう

MAXValueは24だからいいけど

>>610
氏ね
622610:02/03/12 19:01
遅レスすいません
一応それ乏しきサイトは見つけたのですが・・・・
gbaemu.www7.wnj11.jp/
どれをDLしたか解らないんです。
どうか教えてください。
>>ALL
すいませんでした。
>>611
かならずしもキーボードから数値を入力する必要がないなら
EditorEnabled = Falseが一番楽かと。
過去に罵倒されてる人がいるところを見ると
他スレとさほど変わらないんじゃ・・・・・
625デフォルトの名無しさん:02/03/12 19:13
>>620
 それなら KeyDown じゃなくて、OnExit で処理すれば?
 入力が確定するのは OnExit でフォーカスが失われるときなんだから。

 俺なら OnExit で値が 4の倍数かどうか調べて、違ったらエラーメッセー
ジ出してフォーカス戻すけどな。
626625:02/03/12 19:16
って、spin コントロールって言っているけど、TUpDown コンポーネントのことだよね?
もしかして俺勘違いしてる?
DELモナーがどんな厨房疑問でもやさしく答えます。
DELモナは時に私であり、時には別の人。
他のスレに書き込んで罵倒される前に、まずここで質問しよう。




あきらかに嘘だろう。
元に1は不在だ。
628625:02/03/12 19:18
って、TSpinEdit か……でも OnExit で処理するって方法は使えるな。

鬱だ帰ろう……
あのね、フォントのサイズとか指定するでしょ、
それで文字数からピクセル数で幅とか自動設定したいのですが
どーやって計算すればいいの?
MS P ゴシックとかだと計算で求められない?それとも、最大の
幅とかで求められるかなあ・・・。
>最大の幅とかで求められるかなあ・・・。
ドンピシャです。

>>629
質問には関係ないけど、「〜でしょ」はぜひやめて欲しい。
「指定するでしょ」「指定しません」って思ってしまう。
まあ捉え方は人それぞれだけど。

TCanvas.TextExtentで求められます。
632630:02/03/12 19:53
GetTextExtentExPoint
でドンですよ、奥さん。
Autosize=trueのラベルに字を入れてその幅で…これは邪道か。
634デフォルトの名無しさん:02/03/12 22:55
>>629
 ∧ ∧   |TCanvas.TextExtent
( ´∀`)< TCanvas.TextWidth
(    ) |TCanvas.TextHeight モナ
635デフォルトの名無しさん:02/03/12 23:25

  __________
 |目指せ USO800 認証|
   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ∧_∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ( ・∀・)< おー、ワシの Word が dj ぞ!
  ( 部長)  \ ワー、ドーしよう ... なんちゃったりして♪
  | | |    \_______________________
  (__)_)


―――――――――――――――――――
 (無視)
___________________
    ∨
    ∧ ∧   ∧_∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   (   ;)  (#    .)<  (無視)
   /PG|    ( 平SE ) \
 \(__.ノ    | | |    \___________________
         (__)_)
まずはここを読もう!

http://www.2ch.net/guide/faq.html#B0

>>627
じゃあ次スレはこんな感じで

DELモナーがどんな厨房疑問でもやさしく答えます。
DELモナは時に私であり、時には別の人。
他のスレに書き込んで罵倒される前に、まずここで質問しよう。
罵倒されますが。
638デフォルトの名無しさん:02/03/13 00:23
ちょっときいてよ!!!!
驚いた。

FormatDateTime で、形式文字列を 'yy/mm/dd hh:mm.ss'に指定したとしよう。いままで、月は m で、分も m だと、無意識のうちに思っていた。
ナンの疑いも無く、 yy/mm/dd hh:mm.ss としていたわけだ。
ヘルプによると、分は n なので、本当は
yy/mm/dd hh:nn.ss としなければならない。

ところがなんと!
ちゃんと月と分で分けて表示されている…
なんて親切なんだろう!

みんなも試してみよう。
>>638
ヘルプに書いてあるじゃん。
>h 指定子または hh 指定子の直後に mm 指定子を指定すると,月ではなく分が表示される
まずはここを読もう!

http://www.2ch.net/guide/faq.html#B0

Delphiのヘルプ
>>635
なつかしいねそれ。
642デフォルトの名無しさん:02/03/13 01:29
    
  ∧     |/|    ∧
      / 丶    |/|   /:::::丶
      /   、__|/|_ , :::::::::ヽ    
    /        |/| ::::::::::::::::::::::\
    |         |/| ::::::::::::::::::::::: |  ヽ丶
   |        _|/|__:::::::::::::::::: |  | |
    |      /____ \::::::::: |  / /
    ヽ   //    ::::::::\.\: /
     丶//      :::::::::::::::\\
    /   ̄|       :::::::::::::::::::|: ̄::ヽ    ぷらーん
        |       ::::::::::::::::::|::::::::::::
//  |   |       ::::::::::::::::::|:::::::::::|        ぷらーん
| |  |   |       ::::::::::::::::::|::::::::::::|
ヽヽ |   |       ::::::::::::::::::|::::::::::::|
    |   |       ::::::::::::::::::|:::::::::::|
   |    |       ::::::::::::::::::|:::::::::::|
   ヽ   /      |:::::::::::::::::::::ヽ:::::::/
      ̄  |      |::::::::::::::::::::::::| ̄   ヽヽ
       |     |:::::::::::::::::::::::::|     | |
        |      |:::::::::::::::::::::::::|     / /
        |      |:::::::::::::::::::::::::|
        |      |::::::::::::::::::::::::|
        |      |::::::::::::::::::::::::|
        |      |:::::::::::::::::::::::|
        ヽ____丿ヽ::::::::::::::::::/
          ;;;;;;;;;;;;;;;;;;; ̄ ̄ ̄
      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;




643629:02/03/13 02:38
>>630-634
ありがと、能力がひくいので色々調べてたりしたら
すごーく時間がかかりましたけど、なんとなくできたわ。
Delphiのソースエディタを外部エディタに変更してしまうような
ツールとかありませんか?
今日のエラー

モジュール'ntdll.dll'のアドレス77fca1f9でアドレス006e0059に対する書き込み違反が起きました
モジュ−ル'rtl60.bpl'のアドレス40005883でアドレス00000022に対する書き込み違反が起きました
モジュール'ntdll.dll'のアドレス77fca30cでアドレス03534385に対する書き込み違反が起きました
0番目のタブの参照に失敗しました
メモリストリームの拡大中にメモリが足りなくなりました
>645
要するに
「どういうエラーかさっぱりわからんぞゴルァ!」
ってことでよろしいですか?
>>644 うーん それをして何になるの?
必要なら他のエディタで同じファイルを開けばいいんじゃないの?
エディタ間でフォーカスが移動したら、 「再読込しますか?」 って設定にすればいいだけじゃん
648デフォルトの名無しさん:02/03/13 13:34
教えて下さい。
Delphiで出来てC++ビルダーで出来ないことって有りますか?
あったらどんどん列挙していって下さい。

今自分が作ってるソフト(仕事)がDelphi製なんですが、親分がビルダーに移植しろと言うのです。
移植が無理な理由を見つけ出して反論出来たらと思ってます。

>>.648
残念ながら BCB++で出来ない事は 殆どありません。
なぜならBCB++にはパスカルコンパイラが付属するからです。

唯一の例外はObject型のアンサポートです。
また、コンパイル実行時間が遅いくらいでしょうか
>>648
Delphiのフリーコンポーネントを使いまくってるから移植するのは困難です!
って言えば?
>>650
できるんでは?って断るためのネタか。
正直ObjectPascalメインでC++もコンパイルできるDelphi出してほすぃ。
C++ -> Delphi のトランスレータ単独で売ってくれたら 1万円で買うな

正直メンドクサイんだよなあ
>>648
その親分は、賢くないね。
どーせ賢くないなら、性能的にはDelphiの方が高性能ですが?
とかって言ってみたら?コロっと騙されるかもよ。(w
つーか、処理によってはDelphiの方が速かったりすると思う
が気のせいか?(俺がCに慣れてないだけか)
>>645
D6が来た頃はよく出てたけど、UPDATE#1あててから
rtl60関連のエラー出なくなったが、おれだけ?
>>654
>つーか、処理によってはDelphiの方が速かったりすると思う
どっかのアマチュアベンチ測定ではDelphiの方が上だったような。

少なくともBorlandはDelphiに本腰入れてるのは間違いない。
移植は
でも簡単だよ .DPR だけ C++に移植して 他のフォームはそのままDelphiのを使えばいいんだから
658648:02/03/13 14:24
>>657
C++ビルダーでpasファイルそのまま読めるんですか?
>>658 そう 編集機能は殆ど無いけどね。
 pasはもちろんフォームファイルも 読めるし見えるしコンパイルしてリンク出来るよ。
 だからDelphiのフォームをそのまま使うならとても簡単。
 一部修正するなら、フォームを継承して変更すればいい
>>659
 修正作業がたくさん入るとワケワカになる罠
661デフォルトの名無しさん:02/03/13 15:10
Listにclassを追加していって
classからListの情報を得ることはできるのですか?

今は下記のようにListが指定してるclassをclassに書き込んでるのですが、
子が親を参照できれば、いちいち親の情報を子に渡す必要が無いので、
いろいろ出来て助かるのですが・・・

func( class )
begin
edit.text := class.count;
end;

class := Tclass.create;
class.func := func;
class.count := List.count;
List.add(class);
class.func( class );

662デフォルトの名無しさん:02/03/13 15:11
逆に今の現状ではDelphiをC++に移植しても何のメリットも無いことを上司に伝えてみては?

移植作業で無駄な人件費がかかるだけ。

1日1万円として5日で5万円。
Delphi6pro買えちゃうぞ。
>>661
クラスに リストの プロパティを追加して、クラス作成時にリストを参照させればいいだけでは?
コンポーネントなら必ずParentプロパティをリストにする約束にしてもいいし
664デフォルトの名無しさん:02/03/13 15:42
DelphiでVBのMeに相当するものってありますか?
C++で言うthisみたいなのです。
>>664
Self
>>663
ありがとうございます。 そのとおりですね。
何でこんな単純なことに気が付かないんだろう・・・ 
ObjectPascalでできてC++でできないこと…。

・クラス参照型とそれにまつわるクラスメソッドの多態
・使い方によっては便利なimplements
・コンパイル時にチェックしてくれる部分範囲型
・finally (VC++/C++Builderなら拡張構文であるけど)
・文字列定数に#0を含めること、また、長さの取得がフィールドで持ってるので高速
・initialization/finalizationの順番がusesの依存関係に従って行われ安全
・ルーチンがネストできる
・Variantが言語サポート(あまり嬉しくない)
・safecall

・直接関係ないがDelphiのPascal埋めこみインラインアセンブラは
 Pascalで宣言した変数や型を持ち込めて便利
・コンパイル速度が爆速

逆にC++でできてObjectPascalでできないこと…

・使い方しだいでは譲れないメリットとなるtemplate(とSTL
・変数が途中でも宣言できる。for(int I = ...なんてのは便利
・デストラクタが自動で呼ばれる
・多重継承
・インライン関数

・直接関係ないが万一Borlandが潰れても救いがある(クラスライブラリは交換になるけど
・C++Builderにはメモリー系のバグを調べるツールが付いているらしい

…ぐらいですかね。他にもあれば/間違いがあれば、突っ込んでください
668667:02/03/13 16:17
補足…

ObjectPascal側

・メソッドとオブジェクトをひとまとめにしたポインタ (C++Builderには拡張構文として存在
・threadvar (意外に便利なんだ…
・オープン配列パラメータ/Slice
・プロパティ (C++Builderには拡張構文として存在
・スーパークラスとサブクラスの間でoverloadできる

・Delphiの方がSysUtilsを使わない時は*.exeサイズが小さい

C++側

・メンバ関数へのポインタ
・#define (なんだかんだであれば便利に使うし…
・Obj.SuperClass::Methodのようにいつでも任意の上位クラスのメソッドが呼べる

・コンパイラの最適化が賢い (Delphiは爆速と引き換えに最適化が甘い気がする
・(悔しいことに)世の中に多々ある各種SDKをそのまま使える唯一の言語

…まあ、大まかに見て殆ど同じだからこそ同じVCLを両方で扱えるわけで。
私は648ではないけど、
>>667-668はすごく参考になった。
for中で変数を宣言できるとは目からうろこ。初めて知った。
670477:02/03/13 17:47
FastnetのSMTPコントロール使ってんだけどさ、
メールの件名とかに2バイト文字使うときは
==?=iso-2002-jp=kjheiu......
みたいなエンコードつかうじゃん。
これに変換してくれるライブラリあったら教えて!
IKEDA氏のjconvert.pasだと、なんかメーラに
依ってはうまくいかないんです。
ネスケはOKだけどOutlookや、Yahooメールで表示させた時に
NG。
>>670
こんなんでよければどうぞ。1年以上ほったらかしですが。
http://www.mars.dti.ne.jp/~b-guild/mailnews.html
String(AnsiString)を多用する場合、Builderだと不利な気がする。

C++だと、静的にAnsiStringを確保出来ないので
VCLのCaptionやTextにconstな文字列を設定するだけでも
コンストラクタやデストラクタが呼ばれる。
また、デストラクタがあるオブジェクトをスタックに確保すると
例外処理ルーチンが作られるけど、暗黙のAnsiStringも当然同じ。
引数にconst AnsiStringを取る変換関数などにconstなAnsiStringを渡す時も。
Form1.Caption := 'あ'; と Form1->Caption = "あ"; の差は大きい。

このへんが肥大化と速度低下の原因になっていると思う。
それに、AnsiStringのoperator[]が効率悪かったような(BCB4の場合)。
この点はstd::string使えば良いんだけど、VCLに直接渡せないし。
VCLとの親和性ではDelphiのほうが上田と思う。
昔べたなVCLでDB(Paradox)操作するアプリを完全におなじ実装で
(数千行のテーブルをLocateで検索するやつ)
BCBとDelで作ったが、Delのほうがかなり速かった。

まあ一例ということで。
675名無し募集中。。。:02/03/13 22:33
コードの書き方とか、処理によって差が出ることはあるだろうけど、
トータル的にはどうなんだろうね?
漏れはDelphiもBCBもVCも大差ないと思ってる。
JavaとVBはやっぱり遅いと思うけどね。
出来上がるものは(ほぼ)一緒なんだろうけど
マーケ的にもDel > BCBなんだろーな。

漏れはBCBからDelに移行した派なんだが
BCBと比べると、やなところは「Object Pascalが気に食わない」っていうくらい。
逆にBCBは「C++だから」っていう部分にしかアドバンテージがないような・・・
677667:02/03/14 00:39
便乗質問しますが、C++Builderには
initialization/finalization/implements/threadvarに対応する拡張構文ありますか?
(実はC++Builderはver.1の頃の試用版をいじったことぐらいしかありません)
ObjectPascalはよく知らないのだけど、
initialization/finalizationは、staticなオブジェクトの
コンストラクタ/デストラクタで代用かな。
threadvarってのは__threadのことだと思う。
implementsってOLEのproperty関係?
だとしたら、直接Base::get_xxx,Base::set_xxxかも。

って、よく知らないなら口を挟まなければいいのに>俺
679デフォルトの名無しさん:02/03/14 01:06
燃える男の〜あ〜か〜い〜コンストラクタ〜♪
680デフォルトの名無しさん :02/03/14 01:21
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| で、このスレは何をしたい訳?
\_   _____________
   | /
    ∨
日 ▽ U [] V
≡≡≡≡≡≡≡  ∧ ∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 V ∩ [] ∨目 (゚ω゚;)  <  イヤ、酒飲んで愚痴ってくれればと・・・
__ ∧∧______|つ∽__. \____________________
  (  ,,)日
― /   つ―――――――
\(__.ノ
 ━┳━   ━┳━

飲み屋にいるような感じで、マタ〜リしましょう
681終わってる?:02/03/14 04:09
ちまたのTIPSにある「wininetのオンラインかどうか調べる」ってヤツ、
ワシの素晴らしい環境(win95)だと全然調べられないんだけど、
win95だとダメで、それ以上だったら使えるってことなのかな?
nternetGetConnectedStateってヤツ。どなたか教えてくだされ。
あるPanelの上に乗っけてあるコンポーネントを全てをEnabled:=False;したくて

procedure CompoFalse(PanelName:String);

  for idx:=0 to Screen.ActiveControl.ComponentCount -1 do
  begin
    if (Screen.ActiveControl.Components[idx].Owner.Name = PanelName) then
    TWinControl(Screen.ActiveControl.Components[idx]).Enabled:=False;
  end;
end;

こんな感じでやると、Owner.Nameの部分でフォーム名しか取り出せない、
このパネルの上に乗ってる!ってのは何処で知れば良いのでしょうか?
Parent.Name使えば出来るかな?と思ったけど、Components[nn]じゃ
駄目みたいなんでよくわかりませんでした。
>>681
IE3 を入れれば動くんでない?
もしかしたら、IE4 かもしれないけど。
Win95 デフォルトにはその関数が含まれる DLL は存在しないよ。
>>682
Form1 上にあるコンポーネントの Owner はすべて Form1 だよ

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
Comp:TComponent;
begin
for i := 0 to ComponentCount-1 do begin
Comp := Components[i];
if (Comp is TControl) then
if (Comp as TControl).Parent = Panel1 then
(Comp as TControl).Enabled := false;
end;
end;
>>682
俺ならば、
パネルの上に貼ってあるなら、そのパネルのEnabledをFalseにするけど。
そんなんじゃ駄目?
686667:02/03/14 11:54
>>678回答サンクスです。
長文ごめんなさい。
implementsは、委譲を一括して行えます。(委任というらしい)

type
 IObserver = interface //interfaceは全メソッドが virtual = 0なクラス
  procedure Notify;
 end;
 
 IObservable = interface
  procedure AddObserver(const A: IObserver);
  procedure RemoveObserver(const A: IObserver);
 end;

で、IObservableのメソッドを実装したクラスTObservableImplがあるとします。
TWinControlから派生してなおかつIObservableを実装したい時、

type
 TMyControl = class(TWinControl, IObservable)
  FObservable: IObservable;
  property AsObservable: IObservable read FObservable implements IObservable;
 end;

ってな具合に実装を全て他のオブジェクトに押しつけることができます。
要はvirtual継承無しで、全てがTObjectからの派生というルールを守ったまま、多重継承する仕掛けですが、
実行時にFObservableの示す先を取り替えるなんて真似もできます。

最大のメリットとしては、委譲用メソッドをいちいち書く手間を省けることです。
( 恐らく直接関数ポインタで呼ばれるのでしょうから委譲用メソッドかますより効率いいかも?←これは未調査 )
687667:02/03/14 11:58
書き漏らし。FObservableにはTObservableImplをCreateして代入します。

で、この機能はC#にも無いみたいなので、
きっとC++Builderなら対応する拡張構文があるのでは?と思った次第。
>>684
有難うございました、出来ました。
今更なのですが、Enabledを変更した場合はcolorを自前で変更
しないと変わらないのですね、今まで知りませんでした。(汗)

>>685
それでも良いのですが、実際にはPanelの上に乗っている物で
も例外的にEnabledを変更したくない物もあったりするので、
あのような事を試みておりました。
(例えば、Panelの上に乗っているPanelの中身はEnabledを変更
しないとか)

689デフォルトの名無しさん:02/03/14 12:39
>>686
割り込み失礼。
implementsの利用法が未だによくわからない者です。
これが無い場合のつまりいちいち「委譲用メソッドをいちいち書く」場合の例を
教えてくらはい。
690477:02/03/14 14:39
>>671
サンクスです。
作成者の方ですか?
私は、VCから呼び出せるSMTP用のDLLを、課題代わりに
作成しています。
要望が多ければ、私も公開しようと考えてます。
691デフォルトの名無しさん:02/03/14 14:42
質問です。

C++などで作ったDLLをDelphiで使う事って出来るでしょうか?
友人とプログラムを作ることになったのですが、自分がDelphiで友人がC++(VC)何です。
>>691 C++の方で型保証名を避けて 貰えば Delphiから使う事が出来ますよ

具体的には C++側で extern "C"{ の中でexportしてもらうといいでしょう
Delphiで作った物をビルダーに組み込んだ方が早くない?
ってVCなのか。
Cのソースを BCC55でコンパイルして obj を 直接Delphiにリンクって出来なかったっけ?
695667:02/03/14 16:57
>>686 先の例で言えば、implementsを使わなければこーなります。

type
 TMyControl = class(TWinControl, IObservable)
  FObservable: IObservable;
  procedure AddObserver(const A: IObserver);
  procedure RemoveObserver(const A: IObserver);
 end;

procedure TMyControl.AddObserver(const A: IObserver);
begin
 FObservable.AddObserver(A)
end;
procedure TMyControl.RemoveObserver(const A: IObserver);
begin
 FObservable.RemoveObserver(A)
end;

インターフェースを使わなければ、TMyControl.AsObservableのようなプロパティを公開して、
「使う側の箇所で XXX . AsObservable と書いて使ってもらう」ことになると思いますが、
インターフェースを使いだすと、何でもかんでも機能はasで問い合わせればいいようになるので、
覚えることが減りますし、多態もやりやすくなります。
で、その時implementsが無ければ、このような横流しだけのメソッドを大量に書く羽目になり、数が増えてくると面倒である、というわけ。
はじめから多重継承できればこんなまどろっこしい事しなくていいんですが、
先に述べた様に全てをTObjectから継承するモデルと多重継承は噛み合いませんし、委任先を後で交換できるメリットも。

…以上わたくしの理解なんですが、絶対の自信があるわけでもなく、いい機会なので突っ込みを入れてもらう事にしましょう(^_^
696デフォルトの名無しさん:02/03/14 16:57
不躾な質問すいません。
VBとDelphiってどっちが早いんでしょうか?
697667:02/03/14 16:58
686じゃない、689さんへだ、間違えてごめんなさい
698667:02/03/14 17:01
>>696
VB.NET >= Delphi >>> VB6以前 かな?(VB.NETはランタイムがロード時にMSの最適化技術でもって最適化するので
699デフォルトの名無しさん:02/03/14 17:14
KeyPress時にTabを取りたいのですが、(メモコントロール)
文字コード取得関数てかは無いのでしょうか?
>>698 へえ VB.NET ってそんなにコンパイル早いの?
701デフォルトの名無しさん:02/03/14 17:27
>>698
処理の速さ、コンパイルの早さを含めてもDelphiより早いとは思えないけど

Delphiより早いVB.NETはC++より早いって事になっちゃうんだけど・・・。
>>696
コンパイル速度なら Delphiの方が体感出来る程早い VBのインタプリタ実行で走り始めるより速い
熟練者がアプリを作る速度は 同じ程度  ただし熟練者の技量に依存
初心者が慣れるまでの早さは VBが最初の1歩は有利 2歩目からは同等 3歩目は逆転かな

作られたアプリの速度なら、どのコンパイラ型ツールを使っても体感出来る程の差は無い。
ただし、ヘタな作り方をすればどっちも遅くなる。
703デフォルトの名無しさん:02/03/14 17:35
いくら.NETと言えどもDelphiより速いって事は無いぞ
>>703 インターネット周りは VB.NETが早く作れるかも
705タブの取り方教えて下さい:02/03/14 17:43
procedure TMDIChild.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
showmessage(ascii(key));
end;

end.
706667:02/03/14 17:56
>>694
面白そうだと思い、実験したところCではできました。C側でDelphiの関数をプロトタイプ宣言して呼ぶこともできました。
ただし、何故かC++ではできません。extern "C"しても、__stdcallや__pascalや__fastcall付けても駄目です。
何故だろう。
707667:02/03/14 18:03
>>701 >>703 Delphiの最適化は甘いので、最適化の度合で負けます。
VC++の吐いた機械語見てると、Delphiのそれと雲泥の差ですもん。
勿論.NETといえどもC++よりは速くなりませんし、
Delphiでも意識したコードを書いたりインラインアセンブラを駆使したりすると追いつき追い越せるので
その意味で「>=」を使いました。
708デフォルトの名無しさん:02/03/14 18:05
>>707
最適化=速さじゃ無いって事は分かってるよね?
相談室の方でも丁度今 速いコード論やってるけど
配列のコードをポインタに書き換えても速くならなかった例があるように

アセンブラコードを見て 短かったり、速そうに思えても、実際、そんな速度差
は出ない。 なにせ、メモリ1回読み書きしてる間に数百命令実行出来るんだから

>>706 TDUMP 使って .obj を見てみよう どんな名前になってる?
711デフォルトの名無しさん:02/03/14 18:27
>>698
VB.NETがDelphiより速いわけねーだろ。
ここでも読んでなさいってこった。
http://homepage2.nifty.com/Fujimaki/download/Comparison/
712667:02/03/14 18:35
以前実験した時はVB.NETの方がほんの僅かに速かったことがあったのですが
気になったので改めて試したところ、整数ではDelphiが、実数ではVB.NETが速い結果が出ました。

VB.NETで配列を逆順にソートするテスト。Delphiでも同じアルゴリズムで試してみてください。
その後型をDouble→Integerにしてもう一度。
Option Explicit On: Option Strict On: Imports System
Class VBNET
 Const Count As Integer = 1024 * 16
 Public Shared Sub Main(Args() As String)
  Dim Start As DateTime = DateTime.Now
  Dim A(Count - 1) As Double: Dim T As Double: Dim I, J As Integer
  For I = 0 To Count - 1: A(I) = I: Next
  For I = 0 To Count - 2: For J = I + 1 To Count - 1
   If A(I) < A(J) Then T = A(I): A(I) = A(J): A(J) = T: End If
  Next: Next
  Dim Period As DateTime = DateTime.Now
  Dim Time As TimeSpan = DateTime.op_Subtraction(Period, Start)
  Console.WriteLine("{0}", Time.TotalSeconds)
 End Sub
End Class
>>712 ソートなんて処理は メモリへの入出力が壁になるから
    2割3割の差は全く意味がない

  単にキャッシュや、データ境界の偶然の差と思った方がいいぞ
>>667さっきから必死じゃない?
71521:02/03/14 18:39
>>712
Delphiは実数型を何にするかによって実行速度がかなり変わるよ

Del5の場合は Double>Extended>>Real だったけど
Del6になると Real>Double>Extended になった(と思う)
>>712
所詮インタープリタの派生言語なんだって・・・
717667:02/03/14 18:45
>>710
TDUMPした結果、関数が、CではPUBDEF、C++ではCOMDEFになってます。名前は一緒です。
何故CとC++でこんな違いが?
ということはDelphiの$L指令はPUBDEFしかリンクできないのでしょうか?
DelphiはデフォルトではDoubleもExtendedの精度で計算するらしいから、そのせいもあるかも。
とにかく今までのVBの遅さはDispatch呼び出しによるところが大きかった筈だから、VB.NETでは速くなってんじゃない?
719デフォルトの名無しさん:02/03/14 19:07
文字コード定数一覧下さい
>DelphiはデフォルトではDoubleもExtendedの精度で計算するらしいから
勘違い。スマソ。
721デフォルトの名無しさん:02/03/14 19:23
文字コード定数一覧下さい。
戦闘ニ文字でいいから
>>717
 よく判らないけど出来ないのかも・・できたとしても、 .OBJ は独立していなければならないから
C++だとスタートアップ無しには難しいんじゃないの? 素直に DLLにした方がいいかも
>>721 何のこと?
724デフォルトの名無しさん:02/03/14 19:33
>>723
Keypressイベントの時にchar型の引数でKeyが飛んでくるじゃないですか、
あれでTab文字とかを検出したいのだけれども、定数が見当たらないんです。
>>724

http://www.st.rim.or.jp/~phinloda/proto1.html
こういう表か?

しかし、単にそこでブレークポイントで止めて コード見ればいいんじゃないか?
72621:02/03/14 19:43
>>719
>>720
Pro版以上なら「ルークよソースを使え!」だけど・・・
Delphヘルプのキーワード「仮想キーコード」じゃ不足かな〜
727デフォルトの名無しさん:02/03/14 19:44
>>725
あ、多分アスキーコードとかそんなんだと思います。

F5で止めて見ても'   '←こんなのが入ってきてるので、
できれば文字コードで比較したいんです。
おっと、漏れはこのスレの21じゃなかった
×>>720
>>721 失礼
730デフォルトの名無しさん:02/03/14 20:07
>>726
VK_TABとかですよね?
あれだとKeyDownイベント時のKeyコードが帰ってきちゃうような
気がしました。
さっきキャストして比較しようと思ったけどうまくいかないし、、
>>730
KeyPressはそのキーの表す文字しか返さないから
KeyDownを使うしかないのでは?
なるほど、TABはうまくいかないわけね

それなら、対象となるコントロールの
procedure WndProc(var Message: TMessage);
をオーバーライドしてメッセージを処理するんじゃないかなぁ
tips1 文字コードは #付けた数字で表現出来る HTabなら #$09 と書ける
tips2 ord(変数名) とすれば文字コードが判る
734デフォルトの名無しさん:02/03/14 21:11
>>733
それです!
ありがとうございました。

>>731-732
色々とありがとうございました。
winprocのオーバライドはやった事がないので、
いい機会なので勉強してみようと思います。
ありがとうございました。
735デフォルトの名無しさん:02/03/14 21:29
Delphiのデバイスコンテキスト(HDC)ってどのプロパティ?
そんなの無え
737デフォルトの名無しさん:02/03/14 21:39
>>736
冷たいねぇ。さっきさ、VBでこんなコード拾ってきたのよ。↓

Case 1 '波形表示−縦
'10 * Sin((Temp * 5 + Jotai) * 3.1415926535 / 180)の部分について、
'10は振幅、10は波長に関係します(10は大きくするほど激しくなる)
'また、下のJotai=Jotai+5もいじってみましょう
For TempS = 0 To 49 Step 0.3
Call BitBlt(DestDC, width2, Height + TempS + 10 * Sin((TempS * 10 + Jotai) * 3.1415926535 / 180), width, 1, SrcDC, 0, TempS, SrcCopy)
Next
Jotai = Jotai + 5
Case 2 '滝型表示
'伸びない部分の描画
Call BitBlt(DestDC, width2, Height + (49 - Jotai), width, Jotai + 1, SrcDC, 0, 49 - Jotai, SrcCopy)
'伸びる部分の描画
Call StretchBlt(DestDC, width2, 0, width, 100 - Jotai, SrcDC, 0, Height - Jotai, width, 1, SrcCopy)
Jotai = Jotai + 1
If Jotai >= Height Then NowBlting = -1

んで、BitBltとStretchBltを使いたいのだけれども、HDCがワカランと
焼き直しのやりようが無い訳でして、ハイ。
コレってHandleでもいいのかなぁ
>735
それだけじゃ「整数ってどのプロパティ?」と聞かれてるのと同じで答えようがない。
まあ、当てずっぽうだが TControl.Canvas あたりから調べてみ。
描画したいのならTCanvasのHandleがHDCだよ
740デフォルトの名無しさん:02/03/14 22:19
>>738-739
サンクス。
焼き直し終わったらココにあげてもいい?
迷惑なら辞めるけど。
741681:02/03/14 23:18
>>683
当方、IE5.5入れてるんですが…。ダメなんですかね?
うーむ…。レスありがとうございました。
他に「オンラインかどうか」を調べる方法無いもんかなー…。
検索したけど、うまくヒットしない…。
>>695
なるヘソリンコ。サンクソ。
743667:02/03/15 02:28
気になったので起き出してきちまった…
丁度暇だったし、自分で試しもせず名前で判断する奴が多そうだったからコードまで提示したのに。
処理によってはVB.NETというか.NETが速い場合もある。これは事実。
挙げられた名前がVB.NETじゃなくC#ならどうだったのだろう(同じ速度)。

わたくしも普段VB馬鹿にしててショックを受けてる人間なんですから…。

>>722 面白そうと思って実験してただけなんで、できないならできないで問題ないです。
>>743
俺も試してみようと思うけど、VB.NETってのは何処からダウンロード
すりゃいいんだい?
MSのサイト探してんだけど何処にもアップされてないなぁ。
745デフォルトの名無しさん:02/03/15 07:53
すいません。
Del3には「オブジェクトブラウザ」なる便利なツールがあったと思うのですが
Del6personalには付属してないのですか?
>>745
オブジェクトツリーならあるけどな
日記ソフトを作ってみています。年月日はそれぞれComboBox
に表示し、文はMemoに入れます。保存する形式を以下のよう
にしようと思っています。(区切りは " から変更の可能性あ
り)

"年/月/日"
"文章
.
.
"

と、このように文が複数行になる場合に、読込の範囲を指定
するにはどのような方法を使うのがいいんでしょうか?


今のところ、"年/月/日" "文***文***文" というふうに、
改行文字を***に置換して一日分を一行になるようにした後
ソート・保存し、その日のデータを読み込む時には***を改
行文字に置き換えて読込という方法でごまかしています。
>>747
文中に***という文字を入力したい場合はどうしますか?
749DELモナ:02/03/15 10:33
TStringList.CommaText をつかえば、
複数行の文字列←→1行の文字列
の相互変換が出来るナ。
>>747
 そういう場合は エンコード・デコードするといいよ
 たとえば \n を改行に \\ を \ ひとつ という約束にするとか

自分で作るのが嫌ならメーラとかの文字コード変換を探して %エンコードを使えばいい
>>747
テキストファイルルーチンでガーと読みながら目的の日付を探していくってのは駄目なの?
どうせプログラムを組むならdelphiよりも、汎用性の
あるcで組むべきだと考えるがなぜ皆さんはdelphi
で組むのですか?delphiで組んだプログラムを他の
osに移植するのは難しいと聞きましたが。
>>752
最初からDelphiの使えない環境にも移植したいと思ってれば別の両方で使える言語使うでしょ。
つまり、移植なんて考えてないってこと。
それにたとえCでも移植考えずに作ればやっぱり移植は大変だよ。

そして、普通のアプリ開発者は、必要に迫られたことがある人以外(つまりかなり多くの割合)
移植なんて考えない。
>>752
どうせCだってOSごとに必要なライブラリはぜんぜん違うだろ。
# 標準ライブラリ関数は別として。
UNIXやMACにだってPascalコンパイラはあるから
UIが絡まなければ汎用性に大差はないはずだ。
>>752
最近友人にメールで似たような事を言われたけど、それはDelphi(Pascal)が好きか
C/C++が好きかってだけの問題な気がするけど?
俺だけの事かもしれんが、俺にとってプログラムを組みやすいと感じるのがPascal
だったってだけで、プログラムを組む前から移植云々だけを気にしていては、
プログラムなんて組めないだろ。Winで言えば取り合えずAPIは避けた作りにして
とかって考えないよな普通。
それに、多くの人がC/C++じゃないと駄目な時はC/C++使って組んでると思うけど?
それじゃ駄目なの?
>>752
やっぱり Windows アプリを開発する時にかかるコストが、
C と Delphi とでは比較にならないからねぇ
>>752
汎用性のある C では ある程度の規模のWindowsアプリを作るのは実際無理です
C++ではライブラリ移植性に悩まされるでしょう

それに pascal<->C の相互変換は難しくはありませんよ
>>752
どうせ言葉を喋るなら日本語よりも、汎用性の
ある英語で組むべきだと考えるがなぜ皆さんは日本語
で喋りますか? 日本語で喋った言葉を他の
言語に移植するのは難しいと聞きましたが。
いいかげん毎回いちいち>>752みたいなのに反応しまくるのはヤメレ。
まぁ C が汎用性のある言語、ってところからして間違いだし。
道具は問題を解決するためにあるのであって、それ自体を使うための物ではないし。
>>758
それおもしろい!
752みたのがCを汎用性のある言語にしてきたわけです。
実際にCが汎用性あるかどうかなど問題ではありません。
不思議なんだがDQNに限って変な心配するんだよな、どうせdelphiでもcでも
プログラムなんて組めないんじゃないの?
764デフォルトの名無しさん:02/03/15 17:10
>>763
vb
>>764
汎用性云々を言うならVBなんて使えないだろ。
>>765
なにやら活気付いておりますなあ、
私が思うに、将来携帯電話にもWindows(・NET)が搭載されて、V-アプリとか出てくる
と思います、そしたらVBは十分汎用性のある言語ですな!
delphiも・NETに対応するらしいから、それはそれで汎用的かと。
言語の将来性なんか心配無用だね

いろんな言語を使っていれば、新しい言語にもすぐ対応できるようになるよ
768デフォルトの名無しさん:02/03/15 18:02
>>752
Delphiが汎用性無いなんて初めて聞いた。
769デフォルトの名無しさん:02/03/15 18:10
DELPHIに比較して
だいたいVBはもともとは遊びで作られたbasicが基となっているため
システマティクにできていないし、信頼性も低い、上位互換もあまり考慮
されていない。
こんな言語で企業のシステムを作成しているところ多いみたいだが
これはシステムのことがぜんぜん知らない素人がソフト会社に開発言語に
注文をつけていることが原因。
VBでシステム作ったら、原因不明でトラブルやバージョンアップの
とき難儀するなど業務システムを開発する言語としては欠点だらけ



770デフォルトの名無しさん:02/03/15 18:16
>>769
まあそれと生産性だね。
会社って言うのは人件費を月計算でするから開発が少しでも遅れたらダメ。
だから同じ物が出来るならVBで十分と。

それにデータ管理とかはVBでも十分だし。

ただDelphiが上層部に浸透してしまうとVBの立場危ういね。
家の会社は今そうでVBを廃止してDelphiに切り替えた。
理由はそれだけじゃ無いんだけどね。 kylixが一番の理由かな。
質問です

ラインを雨のように降らせたいのですがどうしたら良いんでしょうか?

真っ直ぐ下に降らせる、斜めに降らせるなどがやりたいのですが。
772デフォルトの名無しさん:02/03/15 18:53
>>769に追加して言うと
VBの命令とかVCのクラスを見るとマイクロソフトて
システムを開発するときに全体を俯瞰して統合してもの作りすることが
できない会社と思える。
delphiなんかにくらべてクラスの作り方が必要に応じて思いつきで作られている
ように見える。
osでも98と2000、xpでは同じ設定が異なっている。
例えばレジストリの中身をみるとipアドレスなんか98では普通の数字だが、2000などでは
アスキーコードになっている。
なんか98と2000はばらばらで開発していたみたい。
こんな会社の作る開発言語なんか使うのものすごく苦労すると思う。

>>772
VBの開発者にはハッカーが居たらしいが・・・。
今は居ないけど。

かなり前にZDNetに載ってたよ。
>>769
上がMS謹製の開発ツールでないと使わせてくれないという理由も付け足しといて。
素人が注文うんぬんって意味では顧客だろうが上司だろうが一緒だけどね。
775747:02/03/15 19:15
今帰ってきました。

>>748 はい、その可能性を考えて、複数行のデータはその
まま保存したいのです。

>>750 すみません、初心者なのでよくわかってません。制
御文字・通常の文字間の置き換えは使わないということで
しょうか。

>>751 それはできそうなのですが、次の日付(毎日書くとは
限らない)の前の行までを切り取ってくる方法と、新たにデ
ータが加わった際の挿入(数日前の分を書いた場合とか)で悩
んでます。

日付、文を括る記号を変えておいて、目的の日付を見つけた
直後から、文の終わりにある括り記号を再度検索し、その行
までをReadlnで読み込む、でしょうか?
776デフォルトの名無しさん:02/03/15 19:24
ちょっと確認したいことがあるのですが。

メインフォームの OnShow で、アプリケーションで利用する
100個近くのプロパティを読みこむのは、なにかアレな気がするのです
タイミングが問題なのではなく、フォームのイベントに何百行もかくのが
アレだと思うのです。

Form にいろんな処理内容を大量に書くのは効率が悪く、美しくないと思うのですが、ふつーはどうするのでしょう。
アプリケーションを管理する MyApp(例)などというクラスを作っておき、
フォームの各イベント内容は MyApp のメソッドを呼び出すだけにしておく
といった形でしょうか。

それはそれで疑問が。

アプリケーションで利用するフォームは MyApp が持っていること
になると思うのだけど、各フォームのuses にも MyApp を持ってこないと逝けないから、相互参照になっちゃいません?

MyApp のプロパティとして各フォームにアクセスし、
フォームのプロパティとしてMyAppにアクセスすると。



>>747
ちょっと、よく分からないのですが、なぜ、改行文字だけ特別扱いにする必要が
あるのでしょうか? ファイルに保存する時に、改行コードを特別扱いする理由
が分かりません。改行は、たんに表示する時に解釈されるための制御コードで
あって、一行か複数行かは、 string 型の変数に保持する時には、なんの意
味もありません。改行コードを複数含んでいても、ひとつの string 型の変数に
保持できます。
>>776
>フォームのイベントに何百行もかくのがアレだと思うのです。

別になんの問題もありません。
わけのわからない MyApp などというクラス(なんでクラスなのか?)
をつくるより、よっぽどましです。
779776:02/03/15 19:38
>>778

そのほうが、UIを変える羽目になっても
変更が楽になるかと思って。
>>776=778

そういうことなら、「何百行」のコードを、機能を切り分けて、複数の
メソッドにしてしまえばよいと思うのですが。
Delphi本体はこんな感じで処理してますね。↓

unit MyFormUnit;
interface
type TMyForm = class end;
var MyForm: TMyForm
implementation
uses MyAppUnit;

unit MyAppUnit;
interface
type TMyApp = class end;
var MyApp: TMyApp;
implementation
uses MyFormUnit;

まあ778にも同意だけどね。
>>771
>ラインを雨のように降らせたいのですがどうしたら良いんでしょうか?

俺は昔雨の波紋を作ろうとして挫折した。
783デフォルトの名無しさん:02/03/15 20:11
>>771
ヒント。

TRain=class
 x,y:Real;
 vx,vy:Real;
 procedure Process;
end;

TRainList = class
private
 FList:TList;
public
 property Count:Integer ...;
 function Add:TRain;
end;

TRain.Process;
begin
 vy := vy + 0.1; //重力加速度
 x := x + vx;
 y := y + vy;
end;
雨って空気抵抗のせいで
地表付近ではほぼ一定速度で落ちてくるんじゃなかったっけ
>>784
空気抵抗の大きさは速さに比例する。
ある一定の速さに達すると以後等速になる。
・・・だよね。

雨の運動をシミュレートするわけでないなら
ここまで計算する必要はないけど。
適当にそれっぽく見えれば十分だと思う。
786747:02/03/15 22:28
>>777
私も改行コードを置き換えてというのは邪道だとは思っています。
問題はテキストデータから複数行にわたる必要な部分を抜き出し
てくる方法が分からないという点でして。

テキストファイルから直接、TStringList経由と試してみたのですが
どうもうまく行かなかったので現状のような誤魔化しになってます。
すみません、ヒントください。
787初心者:02/03/15 23:12
>>786
テキストファイルを1行ずつ読みとって目的の日付と一致したら、
そこから次の日付か、テキストファイルの終わりまでをTStringListにAddってやってみるのは?
初心者だからいい方法かはわからないけど。
788777:02/03/15 23:44
>>747=786
>すみません、ヒントください。

新規で以下のコードを試してみてください。

1)Form1 のうえに Memo1、Memo2、Button1、Button2 を配置する
2)以下のコードを各イベントハンドラにコピペする。
3)実行時に
Memo1 に
2002/3/14
あいうえお
かきくけこ
と入力する
4)実行時に
Memo2 に
2002/3/15
さしすせそ
たちつてと
と入力する
4)Button1 を押す
5)Button2 を押す

データの日付境界を #2 で区切ってみました。参考になると思います。

procedure TForm1.Button1Click(Sender: TObject);
var
MS:TMemoryStream;
s:string;
begin
s := Memo1.Text+#2+Memo2.Text;
MS := TMemoryStream.Create;
try
MS.Write(PChar(s)^,Length(s));
MS.SaveToFile('C:\Test.nki');
finally
MS.Free;
end;
Memo1.Lines.Clear;
Memo2.Lines.Clear;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
MS:TMemoryStream;
s:string;
begin
MS := TMemoryStream.Create;
try
MS.LoadFromFile('C:\Test.nki');
SetString(s,PChar(MS.Memory),MS.Size);
finally
MS.Free;
end;
Memo1.Text := Copy(s,0,Pos(#2,s)-1);
Memo2.Text := Copy(s,Pos(#2,s)+1,Length(s));
end;
789777:02/03/15 23:50
Pos じゃなく AnsiPos のほうがよかったかも
790デフォルトの名無しさん:02/03/16 00:09
お前等アクションリスト使ってますか?
791さる高貴な出の人:02/03/16 00:16
>>790
下民などに答える舌を持たぬな。
792777:02/03/16 00:30
あっ、やはり、区切りを #2 ではなく #2#3 などとして Pos(#2#3,s) と
した方が、検索が速そうです。
>>790
何それ?
 ∧ ∧
( ´∀`)(    )  < ここも遂に糞スレに成り下がっちまったか
ActionListっていつのバージョンからあるの?
796デフォルトの名無しさん:02/03/16 00:45
うう〜ん
W2KにDEL5入れています。
INTERBASEをインストールしようとすると、SETUPAPI.DLLがありません
ってでるんだけど、どうしましょうか?
あるのになぁ〜あるのになぁ〜

あと、ボタン押したら、ちっちゃいフォーム開きたいんだけど、どうしたら
いいのですかっ!?

どなたか、教えてください(ヒントでもいいっす)
797素数2:02/03/16 00:52
新規フォームを作って置いて

form2.show;
はたしてこのスレの*やさしいと*はどういう意味なのか。
質問のレベルがやさしいということなのか、回答者がやさしいと言うことなのか。
799796:02/03/16 01:12
>>797
どうもっす。確かに表に出てきますね。
だけども、最初っから出ていては、困るんです。
Hideしたら、エラでした。
ん〜難しいっす
>>798
勝手に後者かと思ってました。ごめんなさい。
>>799
form2のvisibleをfalse
あと、一回フォームについてヘルプ等をよく見てね。
次から
「モララーの *厳しい* Delphi質問スレ」になります。

1 名前:モララー
  ∧_∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ( ・∀・)< ネタには レスしないからな!!
 (    )  \__________
 | | |
 (__)_)
802796:02/03/16 01:20
>>800
あ〜ありがとうございます。上手くいきました。
どうも、ヘルプは難しくって・・・
でも、頑張って読んでみます。どうもでした!

>>801
それは困る
>>783
俺も雨知りたいかも
もう少しヒントキボンヌ!
804デフォルトの名無しさん:02/03/16 04:18
>>796
Delphiのヘルプってちょっと不出来だけど、
うまく使うとすごく便利だよ。
あと、Delphiサイトにあるチュートリアルを
こなしてみる事をお勧めしてみる。
コンポーネントを追加すると自動的にuses の部分にライブラリが追加されますよね?
でもコンポーネントを削除しても勝手には削除されないようですが、
使ってない物がusesにあると、実行形式を作成した時に処理速度が遅くなったりするの?
それとも、コンパイルする時に無視されてるの?
>>805
usesに記述してあるだけならリンクされてないと思うけど?
こんなのは自分で試せるでしょ、他人に聞くようなものじゃないね。
initialization, finalization を含んでるとリンクされるんじゃなかった?
>807
そんな当たり前な事わざわざ言わなくてもいいと思うのだけれども。
805さんと806さんだって、そんな事とっくに知っていると思います。
809805:02/03/16 08:19
>>806
まだDelphi初めて間が無いのでよく解らないことばかりなもので、何がなんだか迷ってしまって・・・、
しかし、おっしゃる通りです、色々と試してみますです。

>>807-808
恥ずかしい話なのですが、initialization, finalizationが含まれたコンポーネントはリンクされるって
のは全然知りませんでした。
810デフォルトの名無しさん:02/03/16 08:22
delphi で大量データ(数百万件)のデータを扱うシステムを
開発していますが、データベースにparadoxを使用しています。
よくインデックスが壊れて、検索がおかしくなったり、ブルー画面がでて
アボートします。
reindexすればなんとか修復できるのですが、paradoxで大量
データを扱うのはムリがあるのでしょうか
しかしスタンドアローンのみの使用なので有料の高いデータベースは
使いたくないのですが
811デフォルトの名無しさん:02/03/16 08:27
>790
アクションリスト使ってない人いるの?
使い捨ての超小型アプリ開発以外で
使わない理由がまるで思いつかない。
>>810
MySQLでも使ったら?
813デフォルトの名無しさん:02/03/16 08:47
>>812
情報ありがとうございます。さっそくチェックしましたが
MySQLは現在pradoxをしようして開発したプログラムで
環境設定の変更とデータの以降でけで使用できるのでしょうか
それとも名前からしてデータベースのアクセス部分を全て
SQL文で記述しなおす必要があるのでしょうか
もしご存知でしたらお教え下さい。

>>811
特別に使ったから便利!ってのも感じないけど
>>813
どのような作りで構築されているのか解らないので
なんともいえませんが、SQL文でってのはある意味
その通りです。しかし、レコードセットは使えます、
DBを変更すると、DBの仕様により使えないSQL文
等もありますので注意は必要かと思います。
>>810
MySQLも良いのですが、PostgreSQLは如何でしょうか?
私はWindows版は使ったことないんですが、ネイティブのPostgreSQLってのも
あるみたいです、ODBC経由で使ったら普通に使えると思うのですが如何でしょう。

ttp://hp.vector.co.jp/authors/VA023283/
>>810
 インデックスが壊れるのは普通は
1、終了処理をせずに電源を切った
2、アプリの暴走
3、リソース不足の発生
です。

 件数が多くて壊れるというのは、件数が多い為にリソースを多く取るため
 2,3がよく起きるという事なのかな?

データベースを別サーバーにすれば緩和されると思いますが、同じパソコンで
実行したのでは 意味がないかも
818デフォルトの名無しさん:02/03/16 09:35
const
DisplayWidth = 600;
DisplayHeight = 600;
RainCount = 100;

type
TRain = class
public
X,Y,,VX,VY:Double;
Spattered:Boolean;
constructor Create;
procedure Initialize;
end;

TRainList = class
private
FList:TList;
public
constructor Create;
destructor Destroy; override;
procedure Process;
procedure Draw(ACanvas:TCanvas);
end;

{ TRain }

constructor TRain.Create;
begin
Self.Initialize;
end;

procedure TRain.Initialize;
begin
X := Random( DisplayWidth );
Y := 0;
VX := 1 +Random(9-4)/2;
VY := 10+Random(9-4)/2;
Spattered := False;
end;


{ TRainList }

constructor TRainList.Create;
var
I:Integer;
Rain:TRain;
begin
FList:=TList.Create;
for I:=0 to RainCount-1 do
begin
Rain := TRain.Create;
Rain.Y := Random( DisplayHeight );
FList.Add( Rain );
end;
end;
819デフォルトの名無しさん:02/03/16 09:36
destructor TRainList.Destroy;
begin
FList.Free;
inherited;
end;

procedure TRainList.Draw(ACanvas: TCanvas);
var
I:Integer;
Rain:TRain;
begin
for I := 0 to FList.Count-1 do
with ACanvas do begin
Rain := TRain( FList[I] );
MoveTo( Trunc( Rain.X ), Trunc( Rain.Y ) );
LineTo( Trunc( Rain.X + Rain.VX ), Trunc( Rain.Y + Rain.VY ) );
end;
end;

procedure TRainList.Process;
var
I:Integer;
Rain:TRain;
begin
for I:=0 to FList.Count-1 do
begin
Rain := TRain( FList[I] );
Rain.X := Rain.X + Rain.VX;
Rain.Y := Rain.Y + Rain.VY;
Rain.VY := Rain.VY + 1;

if Rain.Y >= DisplayHeight then
if Rain.Spattered then
Rain.Initialize
else
begin
Rain.Spattered := True;
//Rain.Y := Rain.Y - Rain.VY;
Rain.VY := -Rain.VY*(Random(20)+1)/100;
end;
end;
end;
820818-819:02/03/16 09:38
818-819のコードをフォーム Form1 のimplementation部にペースト
フォームには Interval を 1 に設定した TTimer を配置.
フォームの OnCreate と タイマーの OnTimer 部分に以下のコードを
はりつけてから、実行するべし。


var
RainList:TRainList;


procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
RainList := TRainList.Create;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Canvas.FillRect(ClientRect);

RainList.Process;
RainList.Draw( Canvas );
end;
おー降ってる降ってる
凄い凄い!
下の方で雨が跳ねてるのもなかなか。

よーしこのソースに雨の波紋を追加しちゃうぞー!

むずそう・・・
823デフォルトの名無しさん:02/03/16 13:22
const
DisplayWidth = 600;
DisplayHeight = 600;
RainCount = 100;
RSpeed = 20;

type
TDrawItem = class
private
X, Y:Double;
FList:TList;
constructor Create( OwnerList:TList ); dynamic;
procedure Draw(ACanvas:TCanvas); dynamic; abstract;
procedure Process; dynamic; abstract;
end;

TRain = class( TDrawItem )
private
VX,VY:Double;
Spattered:Boolean;
constructor Create( OwnerList:TList ); override;
procedure Initialize;
procedure Draw(ACanvas:TCanvas); override;
procedure Process; override;
end;

TWave = class( TDrawItem )
private
X,Y,R,VR:Double;
procedure Draw(ACanvas:TCanvas); override;
procedure Process; override;
end;

TRainList = class
private
FList:TList;
public
constructor Create;
destructor Destroy; override;
procedure Process;
procedure Draw(ACanvas:TCanvas);
end;

{ TDrawItem }

constructor TDrawItem.Create(OwnerList: TList);
begin
FList := OwnerList;
end;
824デフォルトの名無しさん:02/03/16 13:23
{ TRain }

constructor TRain.Create(OwnerList: TList);
begin
inherited;
Initialize;
end;

procedure TRain.Draw(ACanvas: TCanvas);
begin
with ACanvas do begin
Pen.Color := clBlack;
MoveTo( Trunc( X ), Trunc( Y ) );
LineTo( Trunc( X + VX ), Trunc( Y + VY ) );
end;
end;

procedure TRain.Initialize;
begin
X := Random( DisplayWidth );
Y := 0;
VX := 1 +Random(9-4)/2;
VY := 10+Random(9-4)/2;
Spattered := False;
end;


procedure TRain.Process;
var
Wave:TWave;
begin
X := X + VX;
Y := Y + VY;
VY := VY + 1;

if Y >= DisplayHeight then
if Spattered then
Self.Initialize
else begin
Spattered := True;
VY := -VY*(Random(20)+1)/100;

//波紋を追加
Wave:=TWave.Create(Self.FList);
Wave.X := X;
Wave.Y := Y;
Wave.R := 10;
Wave.VR := RSpeed;
Self.FList.Add( Wave );
end;
end;
825デフォルトの名無しさん:02/03/16 13:26
{ TWave }
procedure TWave.Draw(ACanvas: TCanvas);
var
C:Integer;
begin
with ACanvas do begin
Brush.Style := bsClear;
C := 255-Trunc(VR/RSpeed*255);
Pen.Color := RGB( C, C, C);
Ellipse( Trunc(X-R), Trunc(Y-R*0.4), Trunc(X+R), Trunc(Y+R*0.6) );
end;
end;

procedure TWave.Process;
var I:Integer;
begin
R := R + VR;
VR := VR *0.8;// 波紋の広がる速度の減衰
if VR<1 then begin
I := Self.FList.IndexOf( Self );
Self.FList[I] := nil;
Self.Free;
end;
end;

{ TRainList }
constructor TRainList.Create;
var I:Integer; Rain:TRain;
begin
FList:=TList.Create;
for I:=0 to RainCount-1 do begin
Rain := TRain.Create( Self.FList );
Rain.Initialize;
Rain.Y := Random( DisplayHeight );
FList.Add( Rain );
end;
end;

destructor TRainList.Destroy;
begin FList.Free; inherited; end;

procedure TRainList.Draw(ACanvas: TCanvas);
var I:Integer;
begin
for I := 0 to FList.Count-1 do TDrawItem( FList[I] ).Draw( ACanvas );
end;

procedure TRainList.Process;
var I:Integer;
begin
for I := 0 to FList.Count-1 do TDrawItem( FList[I] ).Process;
FList.Pack;
end;
826実はDELモナ:02/03/16 13:28
>>823-825をform1 imprementation に貼りつけ、以下のコードを
イベント部に記述。クラスのポリモフィズムの勉強にもなると思ふ。

var
RainList:TRainList;


procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
RainList := TRainList.Create;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Canvas.Brush.Color := clWhite;
Canvas.Brush.Style := bsSolid;
Canvas.FillRect(ClientRect);

RainList.Process;
RainList.Draw( Canvas );
end;
>>776
データモジュールを作ってプログラム全体レベルでの内部情報と動作をここに置きます.

私の場合はさらに
このデータモジュールは表示と操作(ユーザーインターフェイス.UI)には関知せず
またフォームは逆にUIに専念するようにしています.
ユニット参照はこんな感じです.

メインフォーム→サブフォーム
    ↓       ↓
   データモジュール,その他ユニット

データモジュールがフォームを参照していない点に注意してください.
これはリストボックス,リストビュー,文字列グリッドを
アプリの(一時的ではない)情報置き場にしていないことを意味します.
たとえばグリッドならオーナー描画機能を,リストビューならオーナーデータ機能を使い,
データモジュールにある情報を描画します.

もっともこれだけだとメインフォームのOnShow(あるいはOnCreate)の長〜いコードの
おそらく大半がデータモジュールのOnCreateに移ってくるだけなので,
これだけではあんまり綺麗にはならないかもしれません.
(本当は必要な情報ごとにクラスにまとめるのがよいのですが…)
が,これだけでも効果はあるはずです.

フォームにのっかっているビジュアルコンポーネントの初期化に
たくさんのコードを書かれているのでしたら
フレームを使うことも検討してみて下さい.

ちなみに私は'97年にメインフォームのOnCreateが死ぬほど長いプログラムを書きましたが
今でも苦しめられています(笑).
今は百数十行程度で収まってます.
>>808
素朴な質問って大事だと思いますよ.
不特定多数の人が居る中での質問のいいところは
質問する人以外の第三者が
「へぇーそーだったのかぁ」と,
いろいろ学べるところじゃぁないかと思うわけです.

          ☆          ☆

>795
アクションリストはDelphi4からです.
>811
使わない理由.私の場合はヘルプを見てもよくわからなかったからです.
普通に使うだけなら決して難しいモノじゃないのに,難しそうな説明で使う気をなくしました.
今は愛用していますが.

メニューとツールバーの両方があるアプリなら
同じコマンドに対してメニューアイテムとツールボタン(またはスピードボタン)で
同じCaption, Hint, OnClick(さらにはEnabled, Checked) を
それぞれ指定しなければならなかったのが,
『アクション』という形でまとまっているのでここを操作するだけで両方を一度に変えられる.
思った以上に便利.
フレームに自作やフリーのコンポーネント乗せたら挙動がオカシイ時が
あるのだが、そんな経験ないか?
例えば、フリーで公開されてるコンポで名前は忘れたがComboBoxの
複数列表示可能で色指定できる奴なんかも色が出なかったりした。
折れのマシンだけの問題なら良いのだが、何が原因なのか全然わからん。
>>829
具体的な名前、よろしく。URL でも良いよ。
831Delフサギコ ◆zE1iiRdQ :02/03/16 17:14

  ,,,,,,,,,,,,,,,,∧,,∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′,,,,,,,,,,ミ,,゚Д゚彡 < ビデヲボード>>829
  UU"""" U U    \_______________
832デフォルトの名無しさん:02/03/16 17:22
>>830
例えばこれとか、
ttp://www2s.biglobe.ne.jp/~t_harada/
>>831
まじすか!
そんなんあり?
「複数列コンボボックス ver 1.2 」
で良いのかな?
Delphi6 / XP-pro で見てみるけど。

過去に再現した環境を教えてくれると吉。
>>829
「色が出なかったりした」
現象確認。
>>831
ビデオボードのせいではないぞ。検証せずに適当なことをいうな。

>>834

D6pro / Win2000
D6pro / XP-home

で再現してます。

普通に貼ったら使えるんですが、どーも、おいらの実力じゃ
フレームの場合に何処で何がどーなってるのか追えてない
です。
フレームが悪いのではなくて、
フォームデザイナが正しく情報を記録できないのですね。
各カラムのプロパティ設定を、フレーム側ではなく
フレームを貼り付けたフォーム側で指定してください。
とりあえず、色に関しては対応可能。

IDE のバグの可能性が高い。
>>826
波紋凄い綺麗に出来てるナー。
感心した。

>>837
てっきり、フレームだからだ!とばかり思い込んでいました。m(..)m

IDEのバグの可能性ですか・・・。
840837 ◆xDd9P2XM :02/03/16 17:58
ちがうな。
コンポーネント側の ParentColor が後から影響を与えているんだな。
Width プロパティは問題ない。
もし、今すぐ修正したいなら、TCBColumn の ParentColor 関係をばっさり
取っ払えば直るだろう。
841837 ◆xDd9P2XM :02/03/16 18:03
..なんか大はずししたみたい..

IDE のバグでもフレームのバグでも無いようだぞ。
>>840 割り込んで申し訳ないが、フレームに張った場合には過去のコンポで無事に使えていた物でも
使えなくなる場合もあるってことかい?
俺はフレーム自体はフォームと大差ないものと認識していたのだが間違いだったようだな。
843842:02/03/16 18:09
>>841 つーか、フレームに張ったコンボの幅とか変更しても元に戻ってるようだが?(w
設計時から挙動へんだぞ
844837 ◆xDd9P2XM :02/03/16 18:10
>>842 の質問に対しては「んなこたーない」というのが答え。かな。
Frame は、.DFM の定義に対する介入でのみ行われているから、
インスタンスが実体化された後は原則違いはない。

逆に、仮想プロパティを作ったりとか、.dfm の値を積極的に変更している
コンポだとめんどくさいことがおきる可能性がある。
845837 ◆xDd9P2XM :02/03/16 18:13
なんか、フレームそのものと、フレームを貼ったフォームを同時に IDE で
表示していると各種プロパティが初期値に戻ってしまうようだ。
こまめに保存、かつ同時に一つのフォーム/フレームを開くようにすると
ちゃんと編集できる。

他のコンポーネントではこんなことおきないんで、もう少し見てみよう。
846842:02/03/16 18:16
>>844 なる。
割り込み序にコンポを見ているのだが、フレームに張ったやつじゃない方のフォームにフレーム
から張った方(Frames)を作ったら、フレーム側のColumnsの値が変更できなくなるようだが気のせいか?
847829:02/03/16 18:21
お騒がせして申し訳ない。(^^;
こっちも見てるけど、やっぱり俺のレベルじゃ解析不能です。
848837 ◆xDd9P2XM :02/03/16 18:25
>>847
いいんです。仕事だから
849837 ◆xDd9P2XM :02/03/16 18:27
>>846
特定の条件がそろうと、コンポーネントのデフォルト値以外に変更できないようですね。
わざとやっているのかどうか。
どちらにしろ(RAD ツールとしては)直感的ではない動作だからなぁ
>>849
うむ・・・、妙な動きだなぁ・・・。
しかし、故意にやってるんじゃないだろ、さっきまでデフォルト値以外に設定できたのに
今はまた出来なくなった。これってタイミングで初期化してるの?
851デフォルトの名無しさん:02/03/16 18:33
Column.Createか
つーか、なんも直してないのに普通に使えるようになったが・・・。どーよ。
853デフォルトの名無しさん:02/03/16 19:48
あんのう、 TFrame に OnShowイベントつけられないでしょうか。
TControlのSetVisibleメソッドをオーバーライドしようとおもったら
性的メソッドになってるし…
854795:02/03/16 19:51
>>828
ありがと。
>>838
それをチョット買えれば>>503の言ってる雪も可能。
sin使う必要あるけど。
856デフォルトの名無しさん:02/03/16 20:01
AA作成ツールを作ってるんだけど、
エディタのアンドゥ、リドゥってどやって実装したらよいの?
OnChangeイベソトを拾ってやるとめんどくさそう。
>>856
面倒くさそうでもやる。
>856
TMemoのUndo/Redoは一回のみ。
この制限を回避するのは難しい。
なのでTEditorなどの高性能メモコンポを使うか
外部エディタで編集させて結果を取り込むしかない。
RichEdit 使えば?
860デフォルトの名無しさん:02/03/16 21:02
Height - ClientHeight。
Formの枠の部分のサイズが
知りたいです。(´Д`;)
>860
普通はGetSystemMetricsでSM_CYEDGE等を見る。
けど、この手の質問だと、実はAdjustWindowRectで解決する
問題であることも多いな。
Listboxの文字列が複数行かどうか調べるのはどうするの?
クリップボードの複数行の文字列をListboxに表示すると一行で表示されるじゃない
でも、それが実は複数行なんだよっての・・・
文字列中の改行文字の個数
>>856
TMemoは限界があるのでエディタ部分は自作する。
Undo, Redoに関しては「Commandパターン」あたりでwebを検索すると、
デザインパターンの一例が載っているので参考に。
おっす!おら見えてきた!みんな、力をありがとう!
866860:02/03/16 22:25
>>861 様、感謝。m(_ _)m
867デフォルトの名無しさん:02/03/16 23:33
ボスケテー
ボスケテー

あるツールダイアログ属性のフォームに PageControl が1つ貼りつけてあります。PageControl には複数の TabSheet があります。 全ての TabSheet には
、ただ一つの Panel があり、その Panel のなかにさまざまなコントロールが
含まれています。

さて、あるタブシートを表示した際に、そのシートに含まれる
Panel の大きさにあうようにタブシート、つまりPageControl のサイズを
自動変更し、それに伴ってツールダイアログのフォームサイズも自動変更したいのです。 Adobe Photoshop や Adobe Illustrator のツールダイアログのように。

そこで、タブシート切り替えイベントで

Panel := TabSheet(Sender).Components[0] as TPanel; //シートには1つの Panel しか含まれていない

Panel.LEft := 0; Panel.Top := 0;
PageControl1.ClientWidth := Panel.Width;
PageControl1.ClientHeight := Panel.Height;
Form1.AutoSize := True;

としたのですが、TabSheet(Sender).Components[0]でエラーが
起きてしまいます。なぜでしょう。そして、どうすれば上手く行くのでしょう。
  ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (,,゚ー゚)< そりゃダメだにゃ〜
 @_)  \________
869デフォルトの名無しさん:02/03/16 23:49
>>867
 タブシート切り替えイベント、って、
  TPageControl.OnChange か OnChanging だろ?
 その Sender だから、TabSheet じゃないだろ。

 つーか、この時点で TabIndex 見れば、どのタブか分かるんだから、
そこから Panel 引っ張り出せるようにしとけば?
>>864
CommandじゃなくてMementoパターンでは?
871デフォルトの名無しさん:02/03/17 01:00
>>826
ミサイルコマンド

        .,. ‐''¨¨^^ ̄  ̄^'.'ー 、       
     ._,-'.´`_‐'¨`¨'‐、 ,-'.¨´¨'-_ ::^'     
    ./::::::::::::.!     ! !     !::::::: ` 、   
   ^:::::::::::::::::.|    へi iへ   . .|:::::::::::.:::::^、  ボスケテー
  .,′ :::::,.-.''¨'、     i_._i_    ,:'¨''-::::::::::::::_'、 
 ..゙::::::.,/ __   `'''‐‐'''!::::::::!'''‐‐'''´  .__^、::::::::::.!
 !:::::,/    ^^''''‐‐   '--.'   ‐‐'''''^^  ゙、::::::::!
 !:::::,!  .```````¨    .|    ¨``````` !:::::::!
 !:::::!  ‐‐‐'''''''^^^    |   ^^^''''''‐‐‐  !:::::!
 !:::::!    \,.      |      _./   !::::.!
  'i::!    、 ‐^''- ,,._  |  _,,.-'''´     /:::::i
  ゙、:\  ノ    .゙、 `゙^''''''^´        ノ:::: ′ 
   ゙:、::' 、:\   ,./            ./:::ノ  
     >,:::::::゙¨'.゙「            ..'',::::. ′  
    ノ::::::::::::::::::ノ'''''''''>'''''''<'''''''''''''''''l゙ r'′   
   i゙:::::::::::::::::::ノ゙゙゙゙゙゙゙゙(、、、、、、)¨¨^、¨¨^'\    
   :::::::::::::::./    \┴ ノ   .i.:::::::::::`、   
   .゙!::::::::::::|    、、、、、、、.、、、、、、、 .i:::::、:::::: '、 
    !::::::::::|    i         i  .!:::::゙i ノ:.′゙':
    .|::::::::::|    \      ,ノ′.,!::::::ト_   ..!
     |::::::::::\._  `' ─--ー'′ ._,‐::::::::| `'‐''′
     .|::::::::::::::.゙.'' -、、., _  __,,._,‐::::::::::::::::|     
     |::::::::::::::::::::::::::::::::::.;::::::::::::::::::::::::::::::::|     
    ノ''''''''''.'' '''  ─‐ト------ :.、、:.、、.|     
     |          |          ^:   
     ´''ー‐-ー‐ー.‐  ⌒´゙.ーー.─‐.‐‐‐‐′━━━━━──
ボスケテワロタ

>>870
大抵同時に紹介されてるし、MementoよりむしろCommandといっしょにUndo, Redoが
扱われることが多いようなので、Commandの方を出しといたのでは。
ボスケテ

ボスタスケテ

ボス助けて…!

ボス急いで来て
早く僕らを助けて…!

ボス決して走らず急いで歩いてきて
そして早く僕らを助けて…!



…スレどころか板違い逝って来ます
>874
おおいにワラタ。
元ネタはなんですか?
876867:02/03/17 12:08
すごいマサルさん

以下のようにコードを変えました。たしかにエラーは無くなり、意図した
動きをするようになったのですが、幅と高さが微妙に足りないのです。
正しい幅と高さを取得するにはどうすれば良いでしょうか

{ TForm1上に PageControl1を配置、PageControl1上のTabSheet1にはPanel1を、
TabSheet2にはPanel2を適当な大きさで配置しておく}
procedure TForm1.PageControl1Change(Sender: TObject);
var
Tab:TTabSheet;
Panel:TPanel;
begin
case PageControl1.TabIndex of
0: Panel := Panel1;
1: Panel := Panel2;
end;
Tab := PageControl1.ActivePage;
Panel.Top := 0;
Panel.Left:= 0;
PageControl1.ClientWidth := Panel.Width ;
PageControl1.ClientHeight:= Panel.Height+PageControl1.TabHeight;

Self.AutoSize:=True;
end;
877デフォルトの名無しさん:02/03/17 12:12
みなさんヘボい質問ですみません。
TstringList に格納されている文字列を BYTE型の配列に移したいのですが
方法が全くわかりません。 型変換が必要なんだろうな とは思うのですが
馬鹿な私に御知恵を授けて下さい!!


procedure TForm1.Button1Click(Sender: TObject);
var
testList : TStringList;
IniFile : TIniFile;
testBYTE : Array[0..255] of BYTE;
begin
test := TstringList.Create;
IniFile := TIniFile.Create('xxxx.ini'); // INIファイル開く
testList := TStringList.Create; // TStringList型のインスタンス作成

IniFile.ReadSectionValues('Section', testList); // セクションにあるすべてのキーを取得

testBYTE := test[0]; // ← これが駄目

end;
end.
>testBYTE := test[0]; // ← これが駄目
StrPCopy(@testBYTE, test[0]);
でどう?
安全に行くなら
StrPCopy(@testBYTE, Copy(test[0], 1, 255));
かな
>>873
なるほど。最近デザパタ勉強し始めたところで、字面しか追ってませんでした。
勉強になりますです。
881デフォルトの名無しさん:02/03/17 12:32
>>878
>>879
 くだらない質問に答えて頂き、本当にありがとうございました。
まじめに助かりました(昨日の夜からずっと悩んでました) 
882デフォルトの名無しさん:02/03/17 12:41
Delphiで、文字列を検索するにはどうしたらよいでしょうか?
検索ダイアログ使え
>>882
関数は
「Delphiヘルプ」-「VCL リファレンス」-「ルーチン一覧(カテゴリ別)」
で調べるようにしましょう
>>867
原因:タブシートはパネルを『所有』していないから.
対策:Components[0]の代わりにControls[0]を使う(Del5で確認)

このすれだか他のすれだかに出てきましたが
フォーム上のコンポーネントを『所有』しているのは基本的にフォームです.
(例外はフレーム上のコンポーネントでこれはそのフレームが所有しています)
ページコントロールもタブシートもその上のパネルもみんな
フォーム(またはフレーム)が所有しているのです.

>>827
修正
フレームはOnCreateがないのでコントロールの初期化は使えなかったです.ごめんなさい.

補足
>今は百数十行程度で収まってます.
これはユニットの行数です.
OnCreate(またはOnShow)イベントハンドラの行数ではありません.
887デフォルトの名無しさん:02/03/17 13:58
でも、フレームのCreateメソッドをオーバーライドすれば OnCreate の変わりになりますよね
888デフォルトの名無しさん:02/03/17 16:29
ソースコードを打ってる途中に出てくる、コードを補完する機能なんですけど、
簡単に実現する方法はありますか?
コンボボックス付きのポップアップウィンドウを自分で作れ
フォーカス移動を制御すべく

FormのKeyDownにて、

  //【↑】でフォーカス戻る
  if (Key = VK_UP) then
  begin
  SendMessage(self.Handle, WM_NEXTDLGCTL, -1, 0); //戻る
  Key := 0;
  end;

  //【↓】でフォーカス移動
  if (Key = VK_DOWN) then
  begin
  SendMessage(self.Handle, WM_NEXTDLGCTL, 0, 0); //進む
  Key := 0;
  end;

こんな事をしています。

しかし、画面上にパネルを2つ張って、それぞれのパネルの中に
Editコンポを1つづつ置いてもちゃんと上の処理でフォーカスが
移動してくれんんですが、これに3つ目のパネルを作って、
その中にボタンを貼ると、一旦ボタンにフォーカスが移動すると
その次へ移動できなくなります。

これが、パネルで分かれていない状態だと上手く行くのですが、
何が悪さをしているのでしょうか。
891デフォルトの名無しさん:02/03/17 22:07
\(^▽^)/これわかるかなぁ♪♪
http://www.ts-music.com/machigai.html
892!!注意!!:02/03/17 23:02
>>891
注意しましょう。

以下、勇気が無くて見れない画像解説スレPart69(ラウンジ)より

23 名前:名無しさん? 投稿日:02/03/16 02:33 ID:???
http://www.TS-music.com/machigai.html
おながい

24 名前:ぼの ◆BONOIBYE 投稿日:02/03/16 02:35 ID:???
>>23
ガイシュツのドッキリ画像かと思われ。
一見普通の部屋の画像に見えるが、数十秒後
悲鳴と共に女性の顔が浮かび上がる。

わかっていれば何とも無い度★★

53 名前:名無しさん? 投稿日:02/03/16 03:46 ID:aInde9V.
>>23-24
死ぬほどビクーリした。
893デフォルトの名無しさん:02/03/17 23:09
>>892
 気になってソースを表示させたら、ちょうどその画面に切り替わるところだったので、
ソースで隠されて顔見なかった(笑)
 画像かと思ったら Flash だったというだけ。
>>890
矢印キーで移動させるとTabStopがFalseでも、密かにフォーカスがそこに移動して
しまうんですよ。
PanelのEnterイベントに
ActiveControl := FindNextControl(ActiveControl as TWinControl, True, True, False);
を書いて下さい、なんとなく上手く動作するようになるはずです。
895デフォルトの名無しさん:02/03/17 23:25
自作コンポーネントを使おうとしたら、設計中に

モジュール DCLUSR60.BPL のアドレス 510109B0 でアドレス FFFFFFFF に対する
読みこみ違反がおきました

というエラーがダイアログが無限表示されます
どういうことですか???
読み込みを違反しないでください
>>895
インスタンスを生成する前にアクセスしてるとか
逆にFreeした後にアクセスしてるとか
898デフォルトの名無しさん:02/03/17 23:53
>>855
雨より雪の方が難しいぞ。
雪なんて真下に降るんじゃないの?
900デフォルトの名無しさん:02/03/17 23:57
ゆきなんて簡単ですよ。
GetTickCount で、時間を変数にして sin 関数を使い、
本来あるべき位置から水平方向に +sin( t ) だけずらせばそれっぽくなる。
901デフォルトの名無しさん:02/03/18 00:08
>>900
900おめー!

それだけで雪になるかな?
902デフォルトの名無しさん:02/03/18 00:16
初心者なのですが、クラス関係で質問です。
多いので項目分けして整理しました。

1.オーバーライドという概念がよく分かりません。
これは例えば、自分で新たにAというクラスを作っているときに、
Aの派生元のクラスのメソッドを、Aのために
カスタマイズするためのものと考えていいのでしょうか。

2.また、仮想メソッドという概念が理解できません。
静的、仮想、動的メソッドはどういう違いがあって、
どういうときに使うのでしょうか。

3.1,2に関連して、
例えばAでオーバーライドされるメソッドは
Aの派生元で仮想メソッドとして定義されるのですが、
Aでオーバーライドされないときは
そのメソッドはどういう扱いとなるのでしょうか。
そのメソッドが呼び出されるとAの派生元で
処理されるということでいいのですか?

4-1.Create,DestroyはAで必ず定義しなければならないのでしょうか。
4-2.また、オブジェクト破棄時には
ヘルプによると「Freeを使え」と書かれているのですが、
Destroyをなぜ使ってはいけないのでしょうか。
4-3.またDestroyを使ってはいけないということは
Destroyはなぜ存在するのですか。

ヘルプを読んだり、ネット上を検索したりしてみましたが
初心者の自分には理解が至りませんでした。
項目がたくさんあるのですが、どなたかお願いします。
903デフォルトの名無しさん:02/03/18 00:24
オブジェクト指向について本でも買った方が
こう一度に質問すると、面倒くさがられると思うな〜
>1.Yes
>2.静的≠仮想≒動的 静的以外はオーバーライド可能
 (仮想と動的の違いは初心者が気にしなくてもいい、普通は仮想virtualを使う)
>3.Yes
>4-1.No 変更点がなければ定義する必要は無い
>4-2.Freeはインスタンスが作成されているかを確認してからDestroyを呼び出す
>4-3.TObjectで定義されているFreeがオーバーライドされたDestroyを呼び出すから
905ことり:02/03/18 00:29
>>902
http://pc.2ch.net/test/read.cgi/tech/1013298748/l10
長くなりそうだから、↑のスレに行ったらどう?

義男。
906DELモナ:02/03/18 00:31
1)オーバーライド
例えば、以下のような2つのクラスがあったとします。

TParent = class
 procedure Show;
end;

TChild = class( TParent )
 procedure Show;
end;

上の宣言の意味はわかっているものとして話を進めます。
TChild は TPraent から派生しているので、当然親のメソッドである
Show も継承しているのですが、それを「上書き=再定義」していますね。
つまり、ここにある TChild.Show は、TParent.Show とは何の関係もありません。単に、「名前が同じである」だけです。

ここまでは良いですよね。ところで、クラスには
親クラスと、その派生クラスには代入互換性があります。
そこで、以下のコードを実行してみましょう。

var
 P: TParnet;
 C: TChild;
begin
 C := TChild;
 P := C;
 P.Show;
end;

ここで、 P.Show で実行されるメソッドは、TParnet.Show と
TChild.Show のどちらなのか? P は元々 TParent として宣言されていますが、実際に P に入っているのは TChild のほうですよね。

結論から言うと、この場合は TParent.Show が実行されます。当然です。
なんせ、P.Show の P は TParent ですからね

では、TChild の宣言を次のように変えてみます。

TParnet = class
 procedure Show; virtual;
end;

TChild = class( TParent )
 procedure Show; override;
end;

これで、もういちど先ほどのコードを実行しましょう。すると、
P.Show で呼び出されるのは、TChild.Show になります。
つまり、Pに「実際に入っているクラスによって、動的に呼び出される
メソッドが変化する」のです。これが、動的メソッドです。
907DELモナ:02/03/18 00:40
TClient.Show を以下のように実装したとしましょう。

procedure TClient.Show;
begin
 WriteLn('I AM TCLIENT CLASS.');
end;

これは、TClient.Show の処理内容が、親(=継承元)の
Showとは関係無く、独立していることを表わします。
もしも、親の Show を使いたい(=再利用)のであれば、

procedure TClient.Show;
begin
 inherited Show;
 WriteLn('I AM TCLIENT CLASS.');
end;

とします。 inherited Show で、TParent の Show を実行します。
そのあと、TClient 独自の内容を実行しています。
908902:02/03/18 00:46
皆さんありがとうございます。
私のために(同じ疑問を持って見ている人のためでもありますが)
レスを下さって感謝しています。
>>903 いちいち聞いていたら効率悪いですよね。
>>904 ひとつひとつ答えてくださってありがとうございます。
>>905 次質問するときは逝ってきます。
>>906 例も用意してくださってありがとうございます。おかげで理解できました。
>>907 これはTClient=TChildですか?
やはり自分がそういうシチュエーションに出会うまでは
本当の理解は得られないってことだ。

多態の例はTBitmapやTIcon,TMetafileがTGraphicの共通ネソッドを、
TQueryやTTable,TStoredProcがTDataSetの共通ネソッドを
相手を正確に知ること無く呼び出せるってことでいいんじゃないか。

代入互換性は応用が広い。
ネソッド×
メソッド○

激鬱
911親切な人:02/03/18 00:49
>>909
さぁ、煽られる前に誤字修正誤字修正。
912親切な人 :02/03/18 00:51
早かったか(藁
913デフォルトの名無しさん:02/03/18 01:50
ただのメッセージは
ShowMessage();
じゃあ、はい か いいえ の選択肢を表示するにはどうしたら?
検索してから質問しないと電流流れるルール
915DELモナ:02/03/18 02:01
>>913
MessageDlg 関数を使いなさい。
同じプロジェクト内のフォームを再利用する為にAフォームからA’フォームを継承して作りました。
次にBフォームを作ろうとした時に、継承元としてはAフォームが妥当なのですが、
機能的にA’フォームと酷似しており、A’をコピーしてBフォームを作成しようと思っています。
この時にA’フォームをコピーする方法はコピペで貼り付ける以外に無いのでしょうか?

期待していたのは、[新規作成]->[その他]で表示される自分のプロジェクトの中の該当フォーム
から「コピー」で作成すればいいや、と思っていたのですが、リポジトリに登録していない為か
「継承」しか出てきません、ここでコピーが出来れば楽だと思うのですが・・・。
917747:02/03/18 09:19
>>788
あげてもらったコードを参考にしながら基本部分を書き直し
てます。土日にあまり時間がとれなくて進んでないんですが。
どうもありがとう。
918デフォルトの名無しさん:02/03/18 09:22
A.pas, A.dfmをコピーして B.pas, B.dfm に変更
B.pas 中にあるフォーム名 TA を TB に置換。おわり。
919デフォルトの名無しさん:02/03/18 09:32
ファイルを1行単位で読み込むにはどうしたらいいですか?

Helpを見ても指定バイト数読み込むとかそんなのしかないので
困っています。

LineReadとかあればいいのだけれども...
920DELモナ:02/03/18 09:40
ファイルが文字列であれば

with TStringList.Create do
try
 LoadFromFile( 'ファイル名' );
 文字変数 := Strings[0]; //0番目=1行目を取得
finally
 Free;
end;

で、任意の行をよみとる。
921DELモナ:02/03/18 09:41
( ´∀`) <たまには仕事するモナ
>>916
>>918
素直にリポジトリへ追加した方が楽ができると思うが?
923デフォルトの名無しさん:02/03/18 10:36
フォームの[X]ボタン(閉じるボタン)押したときにそのまま閉じないで、「終了しますか?」って問い合わせるように
してるんですよ。
closeイベントで。
でも"いいえ"を押しても終了しちゃうのは何故ですか?
"はい"を押したときは Application.Terminate; で終わらせてます。
これってフォームのcloseがそのまま流れて行ってるんですかね?
Xボタンだから。

ちなみに「閉じる」って言うボタンを作って同じ事をやった場合はいいえを押してもちゃんと抜け出しました。
>>923
closequery使えよ・・・。
925DELモナ:02/03/18 10:53
Form の OnClose イベントで確認ダイアログを表示し、もしも
[とじる] が選択されたならば、 Action := caFree
それ以外が選択されたならば Action := caNone
とすればよいのでふ

ヘルプの TCustomForm.OnClose を見れ。
926デフォルトの名無しさん:02/03/18 11:05
Helpよりコピペ

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin
if MessageDlg('Close the form?', mtConfirmation,
[mbOk, mbCancel], 0) = mrCancel then
CanClose := False;
end;
927デフォルトの名無しさん:02/03/18 11:13
>>926
そのままだとまずいんで無い?
アドレスエラーが出る予感・・・

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 if MessageDlg('Close the form?', mtConfirmation,
  [mbOk, mbCancel], 0) = mrCancel then
   CanClose := False;
 else
  *.free;
end;
>>927
926で問題なし
> *.free;
これの方が意味不明
929927:02/03/18 11:27
>>928
俺がやりたかったのはこうだった

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin
 if MessageDlg('Close application ?', mtConfirmation,
  [mbYes, mbNo], 0) = mrYes then
  Action := caFree
 else
  Action := caNone;
end;
930デフォルトの名無しさん:02/03/18 11:27
>>919
そのファイルがテキストファイルなら、
var
 F: TextFile;
 linebuf: string;
として、
AssignFile( F, filename );
Reset( F );
ReadLn( F, linebuf );

でよいんじゃないのか?

任意の行を一行読む、なら >>920 のように TStringList 使った方が楽だが。
>>915
遅レスだが、MessageDlgはあまり使わないで欲しい。
MessageBox API経由(含む Application.MessageBox)なら、
メッセージがその手のツールでコピーできる。
業務用ツールならまだしも、もし人に配布する(特にオンラインソフト)なら、
MessageBoxを積極的に利用してほしい。
(´-`)。oO(…>>867は解決したのだろうか…)
933919:02/03/18 13:25
>>920,930

ありがとうございます。教えてもらった方法で解決しました。

※withって便利ですね
934デフォルトの名無しさん:02/03/18 14:11
コントロールValueに文字列000を付け足すにはどうしたらいいでしょうか?

たとえばTspineditのValueに20と入ってたとします。
これに000をくっつけて20000にしたいんですが出来ないんです。
普通に + を使っても000が足されるだけで変化無しです・・・。

結合って何かありましたっけ?
>>934
000って付けたいだけなら*1000するだけで出来るよ。
936早理菜:02/03/18 14:18
この問題解けてもらえませんか。

次のデータを格納するためのテータ型について考える。

クラブの情報を格納する変数のデータ型club: このデータは次の内容を保存する
i.クラブ名称 (文字例型、最大20文字)
ii.クラブの種別 (体育系(taiiku),文科系(bunka), サークル(circle)を区別する列挙型)
iii.クラブの人数 (整数型)
iv.クラブメンバーの名簿を格納する線形リスト、その要素にかくメンバーの
  (a) 氏名 (文字列型、最大20文字) (b)年齢(整数型)

1. 上のii. に必要な列挙型をclubtypeとして、iv.の線形リストの要素型をmemberとして定義せよ。
2. データクラブを定義せよ。
3. クラブに新しいメンバーを追加する次の手続きjoinを与えよ。
   Procedure join(var c:club; n:member)
{クラブcにメンバーnに追加 する}
   追加したので、人数も増えることに注意。
4. 2つのクラブを合併して新しいクラブを作る手続きmergeを与えよ。 
   Procedure merge (c1, c2;club; var c3:club)
{c1とc2のメンバーと合併せた新しいクラブc3つくる。名称等はc1を引き継ぐ}

 
>936
宿題スレへ逝け

宿題、手伝おっか?
http://pc.2ch.net/test/read.cgi/tech/1011722640/
>>934
TSpineditのValueはInteger(整数型:LongInt)
数値に文字列を加えるということはDelphi(というよりもPascalつうか大抵の言語)
ではできないよ
(VBができるのは親切ともいえるし、いいかげんともいえる)
>>936
(´∀`)<実際の開発ではデータベースを使う!と書けばアホな宿題は終了
940デフォルトの名無しさん:02/03/18 14:39
StringGridで中に文字を存在させたまま文字を見えなくする方法ってありますか?
文字の大きさを1にしても微妙に見えてしまうんです。

セルの色と文字の色を同じにすると見えないようになるんですが、選択箇所(反転箇所)だけが見えちゃいます。
941デフォルトの名無しさん:02/03/18 16:41
StringGridで便乗質問させて下さい。

Clearメソッドが存在しないのですが、表をクリアする
メソッドって無いのですか?
942デフォルトの名無しさん:02/03/18 16:54
var
 i,j : Integer;
Begin
for i := 0 to Grid1.ColCount do begin
 for j := 0 to Grid1.RowCount do begin
  Form1.Grid1.Cells[i,j] := ''; //全消去
 end;
end;
end;
943デフォルトの名無しさん:02/03/18 17:25
0001001100101001
と言う0と1の文字列が有るのですがこれを4つずつに区切って16進数に変換したいんです。

どうしやったら良いでしょうか?

上の例で言うと
0001、0011、0010、1001
 ↓
1329
にしたいんです。
何か良い方法は有るでしょうか?
944デフォルトの名無しさん:02/03/18 17:37
駄目だぁ。原因不明の読み込み違反続出。
StringGrid使えねぇ
>>943

function BinaryStrToInt(s:string):integer;
var
i,c:integer;
begin
result := 0;
c := 1;
for i := Length(s) downto 1 do begin
if s[i] = '1' then result := result + c;
c := c*2;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
begin
s := '0001001100101001';
Label1.Caption := IntToHex(BinaryStrToInt(s),1);
end;
>>944
var
 i,j : Integer;
Begin
for i := 0 to Grid1.ColCount-1 do begin
 for j := 0 to Grid1.RowCount-1 do begin
  Form1.Grid1.Cells[i,j] := ''; //全消去
 end;
end;
end;

ループが1回多いと思ったよ〜
947デフォルトの名無しさん:02/03/18 19:19
>>946
あ、ありがとうございます。
貰ったサンプルじゃなくて、今ファイルの内容をStringGridに書き出して
内容の比較をしようとしたんですけど、TStringのFreeがうまく行ってないみたいで
読み込み違反が起きるんです。
Freeしないと動くんですけど、なんか不安で..。
今はMemoに吐いてからStringGridに入れてます。

StringGridってセルごとに色の変更ってできないのですか?
948デフォルトの名無しさん:02/03/18 19:31
>>947
DrawCell使う
>>947
OnDrawCellで
 Grid1.Canvas.Brush.Color:=clなんたら;
 Grid1.Canvas.FillRect(Rect);
これじゃ、ちょっと鈍くさいかな
株太
ファイルをメモリーに読み込んで、ファイルとして扱うのはどうしたら良いのでしょう?
下記のようにやってみたのですが、上手くいきませんでした。

Wav := TMemoryStream.Create;
Wav.LoadFromFile( 'FileName' );
sndPlaySound(wav.Memory,SND_ASYNC);

952デフォルトの名無しさん:02/03/18 19:45
>>945
うまく変換出来ました。
ですが桁数が多いせいか全部表示されません。
最大で4096桁あるもので。

でもってその4096桁の01の2進数を16進数に置き換えてるのですが、
桁数を多くすると最後の方しか表示してくれないです。

何故でしょうか?
953デフォルトの名無しさん:02/03/18 19:57
>>9498,949
ありがとうございます。ただ、Tstringの内容を比較してから書き込みたかったので
関数内に処理を移したのですがうまくいきませんでした。
ブラシは赤に設定して、以下のようにOnDrawではない場所に書いたのですが..
どの場所で考え違いをしたのかわからないのですが、描画はOnDraw内でないと
実行できないのでしょうか?

for j:=0 to tedi.Lines.Count -1 do
begin
sg.cells[i+1,j+1]:=tedi.Lines[j];
if edi.Lines[j] <> tedi.Lines[j] then
sg.Canvas.FillRect(sg.CellRect(i+1,j+1));
end;
954デフォルトの名無しさん:02/03/18 19:59
それと 0000111111111111 と有った場合に16進数最初の0が省かれてしまうのですが、
0付けで変換する方法無いでしょうか?

上を変換すると今は FFF となっています
0FFF にしたいんです。

質問ばかりですいません。
>>954
IntToHexの代わりにFormatを使うといいよ
使い方はヘルプで調べるとFormatで何ができるのかが分かるのでGood
と思ったら IntToHex(BinaryStrToInt(s),4)でも良かった
・・・おいらも勉強になったよ
>>955
と、言うかsprintfとにてぇ〜る。
958945:02/03/18 20:34
>>954=952

function ABinaryToInt(s:string):integer;
var
i,c:integer;
begin
result := 0;
c := 1;
for i := 4 downto 1 do begin
if s[i] = '1' then result := result + c;
c := c*2;
end;
end;

function BCDStrtoHexStr(s:string):string;
var
i:integer;
b:string;
begin
result := '';
for i := 0 to (Length(s) div 4)-1 do begin
b := Copy(s,i*4+1,4);
result := result + IntToHex(ABinaryToInt(b),1);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
begin
s := '000011111111111100001111111111110000111111111111000011111111111100001111111111110000111111111111000011111111111100001111111111110000111111111111000011111111111100001111111111110000111111111111';
Label1.Caption := BCDStrToHexStr(s);
end;
959DELモナー:02/03/18 20:51
 ∧ ∧  1ヶ月近く続いて来たこのスレも、
( ´∀`)  いよいよ次スレを立てる時期だね。
960Delフサギコ ◆zE1iiRdQ :02/03/18 21:06
   ∧,,∧   />>931さん
(,,,,,,,ミ,,゚Д゚彡 < App.MessageBoxなら 
⊂,,,,,,,,,つつ.   \ Ctrl+Cでメセジコピーできますね

  最近のOSだからかしら
961デフォルトの名無しさん:02/03/18 21:27
>>958
そんな方法があるなんて俺も知らなかった勉強になった。
962デフォルトの名無しさん:02/03/18 22:25
テキストからhttpアドレスだけを抜き出すにはどうしたらよいでしょうか?
>>962
そんなに難しくはないから、自分でコードを書いてみれば?
AnsiPosとかCopyとかのヘルプを見ながら
964962:02/03/18 22:33
>>963
いや〜一応解説本とか見て頭の中で書いてみたんですが、どうもうまくいかないんです。
Perlでいう &_ =~ s//;  のDelphi版みたいなのとかないですよね
965 :02/03/18 22:39
>>964
文字列の扱いではPerlには敵いません(C/C++よりはうんとまし)
 TStringListを用意して
 LoadFromFileで読み込んで
 ループを回してシコシコと
こんな感じですね〜
966945:02/03/18 22:47
>>965
TStringStream というのもなかなか使いでがあります。
>ループを回してシコシコと
たしかに(^^!
>>964
自分でできないなら、ttp://www.hi-ho.ne.jp/~babaq/
そろそろ、新しいスレ建ってるのか?
969 :02/03/18 22:57
>>966
なるほど TStringStream ですか
TStream系はコンポーネントの保存くらいにしか使ったことは無かったのですが
研究してみる価値がありそうですね


970デフォルトの名無しさん:02/03/18 23:09
MSDNでInternet Client SDKを検索してみよ。
inet.dllでhtml解析のAPIが用意されてたりする。
しかしIEのバージョンが違うと不孝を招くかもしれない諸刃の剣。
素人には(以下略)

awk/grepコンポを使うって手もある。

だからお前ら、素のDelphiだけでなんとかしようとするのは
最後の手段にしてください、お願い。
バグったとき引き継いだヤシが困ると思うのよ。
>>970
変なサードパーティ製とかどこの外人が作ったかわからないコンポーネント使われるよりまし。
たとえば、「Memo1にフォーカスがある状態でCtrl+Zを押すとMemo1のアンドゥになり
ListView1にフォーカスがある状態でCtrl+Zを押すとリストの更新になる」
というように、フォーカスがあるオブジェクトによってショートカットキーの動作を変更したいんです。

このようなキー設定をユーザーが自由自在に設定できるようにしたいんですが、
どうにかしてスマートに実現させる方法は無いでしょうか?
>>972
OnShortCut使う?
>>971
そんなクソなコンポ選ぶのがまず間違っとる。
まずフリーでソース公開されてて安定動作するものを探せばいい話だよ。
クソじゃないコードを書けるのなら素で書きゃいいがネ。

折れは、複数行に別れてたりコメントを考慮したり文字列中の
httpナントカを無視したりするコードを素のDelphiで書き起こすのは
ダルイからヤだ。
975 :02/03/18 23:38
>>974
このスレは「お勉強」的意味合いが強いから素のやり方でいいんだと思うよ

実務となれば話は別だろうけど
>>974
だからさぁ。人にコード渡すときにその得体の知れないコンポーネントも同封しないといけない。

その人は嫌々ながらその得体の(略をインストールしなければならない。

途中で消失した場合は最悪。
977Delフサギコ ◆zE1iiRdQ :02/03/18 23:48
     ∧,,∧   / ̄ ̄ ̄ ̄ ̄
     ミ,,゚Д゚彡< XPのテストファストで作れば
     ./つ=||||  \速くてかなり正確だと思う
   〜ミ \_/

アドレス抽出に正規表現って
逆にしんどくないの?

>inet.dllでhtml解析のAPIが用意されてたりする。
萎え。

http://で始まって
半角英数字に収まる範囲までアドレスとして
抜き取るなんて、それこそ、朝ご飯前にでも出来そう

…面倒だからやらんけど。
もうすぐ1000ゲットォォォォ!! ズザーーーーーッ 厨が現れそうな予感。
新スレ立てようかな。
ところで>>1
 ∧ ∧
( ´∀`)(    )
>>3の言うとおり
 ∧ ∧
( ´∀`)
(    )
でいいの?
979 :02/03/18 23:59
以前に
「Delphiはコードを書くのが好きな人に向いている」
という紹介記事があったけど、本当にそう思うね

やっぱ自分でできることくらいは自分で書いたほうが
人の書いたDLLやコンポーネントを使うよりも楽しいし
どうしても人が書いたものは自分の欲しい機能とは違う部分が出てくるんだよね
980デフォルトの名無しさん:02/03/19 00:24
>>975
Delphiでソフトウェアの勉強をってのなら同意だけど、
探せば再利用可能なものが転がっているかもしれないことも
念頭に置いて欲しいと切に願ったり。

>>976
その辺の嫌さ加減は確かにあるね。
だから「フリーでソース公開されてて安定動作するもの」つーて書いたんだが。
ソースがあればコンポじゃなくて自前のプロジェクトに落すのも簡単だろ?

コンポーネントがらみで酷い目にあったのか?
もしそうなら、激しく参考にするからその辺書いてくれ。

  ∧ ∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ( ´∀`)< 新スレ立てたよ。
 (    )  \__________
 | | |
 (__)_)

質問、回答が一段落したらこちらへどうぞ。

モナーの *やさしい* Delphi質問スレ Ver4
http://pc.2ch.net/test/read.cgi/tech/1016467137/
982デフォルトの名無しさん:02/03/19 01:15
こっちで書いとくか。
>>981
お疲れ〜。

ベクターさんって、どの程度のヤツは拒否すんのかね?誰か拒否されたことのある
人いる?
>>982

  ∧ ∧   / ̄ ̄ ̄ ̄ ̄
 ( ´∀`)< ありがとう。
 (    )  \_____
 | | |
 (__)_)

ベクターに登録してるけど、自分は拒否されていないよ。
真面目にやっている限りは大丈夫そう。

2ゲット早かったな。
あらかじめテキストエディタに内容を書いておいて
コピペして一気に書き込んだのがよかった。
984982:02/03/19 01:41
>>983
いやいや。

つーか、「どんだけヒドイ(いろんな意味で)」とつっぱねられるのかな?
ってこと。某スレで「文字だけ表示するヤツ登録してみれ」とか言ってたりした
ヤツもいたが(藁
かの有名な「常駐Super」でさえも拒否されないのかな?
985983(DELモナー):02/03/19 01:53
>>984
「常駐Super」 初耳だけど、これ?
ttp://syoyunext.xoasis.com/joutyu/
ベクター側では内容に関しては
問わないということになっているけど、
これはどうだろ(w
>>887
その通りです(いま確かめました).うわーん,ずっと勘違いしてました.
987982:02/03/19 01:57
>>985
そう。それ(藁

マジでソースネクスト逝ってよし!この、初心者キラーめ!
988デフォルトの名無しさん:02/03/19 01:57
>>985
激しくワラタ
>>985
わざわざドメインまで取得して・・・
ワラタ
>>985
常駐Superは2ch物だったはずだから、hはずさなくても大丈夫でしょ。
>>989
フリーホスティングじゃ無いの?
よーわからんけど
って言うか常駐Superをモナジラに登録させよーぜ
Superがつくのは排出の方で常駐はそのまま「常駐」と思われ。
もう作者居ないのかな?
あの頃はソースネクストのスレッドで作者が頻繁にレス返してくれたが・・・

もの凄い速さで作ってたし。
30分くらいでアップしてた

静かだ・・・
       v
     <(゚ω゚) <うっ!
      ()\        
      /'>
       v
      (゚ω゚)> <はっ!
     /()        
       <'\
       v
     <(゚ω゚) <うっ!
      ()\        
      /'>
       v
      (゚ω゚)> <はっ!
     /()        
       <'\
     v       w
    (゚ω゚)/ \(゚δ゚)<ジーンギスカーン!
   /()    (戟jゝ
     <'\    / >
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。