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

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

レス数が1000を超えています。これ以上書き込みはできません。
0001DELモナーNGNG
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/
0002ヲッチャーNGNG
お疲れー>>1
で、誰なんだ?全くその通りだとは思うが厳しいな<Hotkeyちゃんの掲示板
2ちゃんねらじゃないのか?
0003デフォルトの名無しさんNGNG
毎回思うのだが、>>1よ

 ∧ ∧
( ´∀`)(    )

を

 ∧ ∧
( ´∀`)
(    )

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

 ∧ ∧  ∧ ∧
( ´∀`)(    )

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

VBから移行してDelphiを使っているのですが、
こういったトグルボタンってVBだけなのでしょうか・・・
0037デフォルトの名無しさんNGNG
>>36
TToolBar を使ってみるとか
003842NGNG
>>36
 色んな方法があります。
 一つの方法は、パネルを貼り付けて
ダブルクリックして

procedure TForm1.Panel1Click(Sender: TObject);
begin
with Sender as TPanel do BevelOuter:=TBevelCut(ord(BevelOuter) xor 3);
end;
0039デフォルトの名無しさんNGNG
>>36
SpeedButtonとか
0040名無しさんですNGNG
IEなどの検索のようなモーダル表示のフォームはDelでは
どうやるのでしょうか?
0041デフォルトの名無しさんNGNG
>>40
死ぬほど検索して質問してるのだろうな?マジで。
0042デフォルトの名無しさんNGNG
>40
IEの検索はモードレスだわさ。
だからShowModalせずにShowすれ。
0043デフォルトの名無しさんNGNG
なんで「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=
好きなだけ死ぬまで検索してこい。
00449NGNG
>>43
飛び先がグロ画像だったら笑える。
004543NGNG
即興でデコードするツール作って調べてみやがれ(藁
004640NGNG
showにすると親ウインドウにフォーカスが移せないですが…。
例えばVBだと 「show 0」とすると呼び出し側を操作できるように
なるのですが。
0047デフォルトの名無しさんNGNG
>>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 のような
プロパティーを持つようなコンポーネントを作るのは簡単です。
0048デフォルトの名無しさんNGNG
>>46
VBやってろ。
0049デフォルトの名無しさんNGNG
アプリケーションのタイトルを表示後、
3秒後にCloseしてメニュー画面を表示させたいのですが、
タイトルフォームがメインフォームに設定されているため、
タイトルのCloseの段階でアプリケーションが終了してしまいます。

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

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

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

005040NGNG
>>48
Delではできないと言うことですか?

Del製のエディタなどの検索フォームは一回一回閉じるのが
多かったのでもしかして特殊なことをしないとできないのかと
なんとなく思いました。
ただ単にDelではこのやり方が流行ってるの?
0051デフォルトの名無しさんNGNG
>>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;
0052デフォルトの名無しさんNGNG
>>40
放置決定

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

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

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

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

Delphi では、デフォルトですべての Form は、Application ウィンドウに
所有されています。Form2 をつねに Form1 より手前に表示させるために、
CreateParams() を override して、Form2 のオーナーを Form1 にしている
わけです。
0058デフォルトの名無しさんNGNG
>>常に手前に表示
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;
0059デフォルトの名無しさんNGNG


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

みなさん、ありがとうございました。
 
0062デフォルトの名無しさんNGNG
>>61  >>47 も無視してやるなよ

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

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

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

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

以上の課題を解いて、Button1Click ハンドラをここに示せ
0078HotKey!NGNG
HotKey!
007967NGNG
すいません、1.しかできません。
本当に情けないです。
008067NGNG
又明日出直してきます。
0081Button1Click ハンドラNGNG
10 print "オマンコ"
20 goto 10
008268NGNG
>>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?


008368NGNG
>>67

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

どれかであろう。2じゃねーのか(藁
0087デフォルトの名無しさんNGNG
16進数とか文字型とか言ってるから、まだボタン配置とかまで
行ってないんじゃ?

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

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

ぱちぱちぱち....

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

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

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

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

えっと、「Delphi」
読み方はデルファイですか?デルフィですか?
あんまりな質問ですがなにとぞよろしくお願いします。
0102デフォルトの名無しさんNGNG
正解:デルポイ
0103質問!NGNG
>>101です。

>>102さん。どもです。

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

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

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

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

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

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

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

ありがとうございます。
011461NGNG
亀レスですいません。
>>47

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

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

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

マス目などはどのような物で作成したら良いでしょうか?
0116デフォルトの名無しさんNGNG
 ∧ ∧
( ´∀`)< >>107 逝って良し

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

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

業界用語では、データをフォーマットせずにドサっと出力する事
というか検索しろよ
0128デフォルトの名無しさんNGNG
>>126
生のデータを印刷する時にダンプリストでチェックしたか!とかっ
て言ってるだろ、印刷だけじゃなくて、バックアップとかでも
テープへデータベースのダンプ取っておいてくれ!とかあるだろ。
0129ダンプ松本NGNG
ダンプ松本
0130クレーンユウNGNG
クレーンユウ
0131モンスターロシモフNGNG
モンスターロシモフ
0132プログラム初心者NGNG
商品名 , 在庫数
商品名 , 在庫数
...

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

procedure TSyohin.add(商品名, x)

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

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

ZaikoFuyasu、ZaikoHerasu がいい。


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

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

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

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

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

>133-135
叩かれるかとビクビクしてましたが
こんなマヌケな質問にやさしく答えていただいてありがとうございました。
0137デフォルトの名無しさんNGNG
下手に省略したりせずに delete でいいと思う。
0138デフォルトの名無しさんNGNG
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
...
0139デフォルトの名無しNGNG
DBgridがクリックされたときに、
クリックされたセルのデータを取得したいのですが、
どうやったらよ いのでしょうか?
0140デフォルトの名無しさんNGNG
セーブダイアログでセーブるとき
同じフォルダに同名のファイル名のファイルがあっても
そのまま上書きされてしまいます。
「〜はすでに存在します。上書きしますか?」みたいな
ダイアログを表示して確認させるにはどうしたら良いのでしょうか?
0141デフォルトの名無しさんNGNG
>140
セーブするときに同名のファイルがあるかどうか確認し、
同名のファイルが有るときは上書き確認のダイアログを出す
と言うようにすれば良いんじゃないですか?
0142デフォルトの名無しさんNGNG
>>140
TSaveDialog.Options の ofOverwritePrompt
0143デフォルトの名無しさんNGNG
ListView の横スクロールバーを常に非表示にしたいのですが、
どうすればいいのでしょうか。

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

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

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

TtableのIndexDefsは設定しているのですが、まだ他に設定・書き忘れ
をしているのだと思うのですが確認すべき点を御教授ください。
0146145NGNG
言葉が足らなかったです。
インデックスを持っていません。"と蹴られてしまいます。
0147デフォルトの名無しさんNGNG
>>132
addならsubtractじゃねぇ?subとかでどうよ。
0148141NGNG
>140
すいません。142のような方法があるって知らなかったから
自分で実装するしかないって思ってました。
0149デフォルトの名無しさんNGNG
>>145
フィールド名日本語にしてない?
0150145NGNG
>>149
いえ、日本語では無いです。
0151◇のんちゃんNGNG
Delphi無いけど、1から教えてYO!
0152◇のんちゃんNGNG
んじゃ、2から教えてYO!
0153デフォルトの名無しさんNGNG
長文すみません。

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

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

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

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

どうでしょうか?
迷っています。
0154デフォルトの名無しさんNGNG
WinMeは不安定なものです。
それが問題なら、Windows2000 か XP にしましょう。

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

ODBCの場合、サーバ名、データベース名、ログインID,PWで大丈夫なのですが・・・
0157デフォルトの名無しさんNGNG
>>153です。

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

そうですか。

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

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

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

ありがとうございました。
0158デフォルトの名無しさんNGNG
>でもLinux使ってみたい・・・。
何のために?

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

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

ちょっと質問変えて。

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

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

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

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

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

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

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

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

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

>>166さん。

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

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

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

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

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

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

良くも悪くもLinuxってフリーソフトのレベルが高いから、それが障壁になってるのかな。
GPLだし。
0180デフォルトの名無しさんNGNG
ttp://www.sakaki.keiaikai.or.jp/Library/webconv/compile.html
を参考にして indy のインストールをしようと思ったんですが、
setenv.batには何を書けばいいんでしょうか。
0181デフォルトの名無しさんNGNG
>>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みたいな物も作ってみたいと思って
います。

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

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

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

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

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

命令は、例えば

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

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

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

TClient = class
 procedure DoCommand1( Cmd:TCommand1 );
 procedure DoCommand2( Cmd:TCommand2 );
 ...
end;
0201200NGNG
■そこで質問です。

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

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

{ 各 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;

■なにかこう、無駄なような気がしてならず…
なにかスマートな方法はありませんか?
0202200NGNG
■一応、

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

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

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

というふうに、各コマンドクラスに実行メソッドを持たせ、
クライアントやサーバクラスの対応するメソッドを呼び出すという方法も考えたのですが、
循環参照になりそうで不安です。煩雑になるので、
クライアント/サーバクラスと、コマンドクラスは、
出来れば別々のユニットにしたいのです。
0203デフォルトの名無しさんNGNG
無料版のDelphiで、SysUtils.pasがないっていわれるんですけど、無料版にはついてないんですか?
0204デフォルトの名無しさんNGNG
>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;
0205デフォルトの名無しさんNGNG
cmd := CommandList.Create(メッセージID);
↓
cmd := CommandList.CreateCommand(メッセージID);
だった。
毎回生成するのは遅そうなんでCommandListでTCommandのインスタンス保持しとくのがいいとは思うけど。
0206デフォルトの名無しさんNGNG
>>203
何も言わずに、Update1 当てろ。
0207デフォルトの名無しさんNGNG
以前どこかのDelのスレで、Delphi6のHelpのあるファイルのある部分を修正すれば、
Helpの検索対象からCLXが外れるというのがあったと思うのですが、
そのことについてご存知の方いらっしゃいませんか?
0208デフォルトの名無しさんNGNG
>>207 Delphi6 をお持ちなら、ご自分のハードディスクのインストール先からreadme を読みましょう
0209200NGNG
クラス指定子ってこういうふうに使うんですね…
一つ賢くなりました。

ところで、コマンドを実行するときは
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 ) ってやると互換性が無いといわれるんですね.

なんか二度手間な気が…
0210デフォルトの名無しさんNGNG
>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);
0211デフォルトの名無しさんNGNG
>>206
もちろん当ててますがなにか?
0212デフォルトの名無しさんNGNG
>211
ツール→環境オプション→ライブラリ→ライブラリパスには何が入ってますか?
0213デフォルトの名無しさんNGNG
>>212

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

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

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



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


(一部)
0221デフォルトの名無しさんNGNG
あのう…もしかするとですね、

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

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

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

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

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

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

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

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

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

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

1階層ごとに下のフォルダを調べて作るしかないのかなぁ・・・。
0234デフォルトの名無しさんNGNG
>>233
それ以外に、どんな方法があるというのだ?
0235233NGNG
>>234 思いつかないから聞いてみたのだが・・・

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

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

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

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

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

interface
function Msg(strMsg: String):boolean;

<省略>

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

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


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

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

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

どうしたらいいんでしょうか?
0249246NGNG
>>247
>interfaceとusersの間に宣言書いてしまったんじゃない?
その通りです。

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

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

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


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

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

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

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

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

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

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

0257デフォルトの名無しさんNGNG
DrawCellをオーバーライドして、自分で上書きする。
0258デフォルトの名無しさんNGNG
Drawcellは使用してるんですがどのようにしてフォントを上書きするんですか?
ASCIIコードか何かを取得出来るのでしょうか。
0259デフォルトの名無しさんNGNG
DIBに描画して自力で色を取得するんじゃ?
0260デフォルトの名無しさんNGNG
>>256
難しいことしてますな
0261デフォルトの名無しさんNGNG
>>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で保存してそれを読み込むとか

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

それか、Canvasに自分で描画してもよいし。
0263デフォルトの名無しさんNGNG
>258
Drawcellメソッドと、OnDrawcellイベントハンドラは別だから間違えないでね。

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

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

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

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

このようにデータが表示されていたとき
Button1を押したら
括弧内の値段順にソートしてMemo1に表示したいときは
どのようなコードを書けばよいのでしょうか?
0267デフォルトの名無しさんNGNG
>>265
アイコンのドットエディタとかでありがちだけどどうやるのかわからん
StringGridを使って出来るのか?
0268デフォルトの名無しさんNGNG
>>256
なんで StringGrid なんだ??
独自コンポ作った方が遙かにスマートに出来そうだけど・・
0269デフォルトの名無しさんNGNG
>>266
TStringListのCustomSort使えば?
数字を抽出して比較する関数作ってさ
0270256NGNG
>>268
>>269
参考になります。ありがとうございます。
0271名無し募集中。。。NGNG
>>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が言ってるのと同じ
0272256NGNG
256です。
やっぱりStringGridでは無理がありますか。
アイコンドットエディタとかはどうやって文字をグリッドに持ってきてるのか気になって・・・

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

そんなことよりうちのdelphiでQRepのHelp出てこないんだけど何で?
みんなもそうなの?
0275266NGNG
>>269
>>271
ありがとうございます。
271さんには例まで示していただいて、とても感謝してます。
まだdelphi、消防レベルにもいってない自分にはすごく勉強になります。
0276デフォルトの名無しさんNGNG
検索用フォームの戻り値用に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;

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

何か、いい方法はないでしょうか?
0277名無し募集中。。。NGNG
>>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にしました。
0278デフォルトの名無しさんNGNG
遅いからラインで持ってきたほうが良いと中村師に指摘される可能性120%
0279デフォルトの名無しさんNGNG
>>276
そんな事はできないと思われる
0280デフォルトの名無しさんNGNG
>>276
フォームにプロパティを追加して値を渡すなんて聞いたこともありません、
そもそもそれが間違いなのでは?
私はいつもグローバル変数で値を受け渡ししています、そうするのが
一番正しいやり方だと思いますがどうでしょうか?
0281デフォルトの名無しさんNGNG
>>278
ラインキャッシュ付き Pixels の実装、ほしい人。手あげて。
0282デフォルトの名無しさんNGNG
>>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の反転文字の例)


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

共通の関数としてどこの何に問題が??
0286デフォルトの名無しさんNGNG
DIBSectionってなんだったっけ?

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

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

つーことで、グローバル変数で処理するのが一番楽かと。
0290276NGNG
>>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に入って来るって感じです。

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

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

ユーザーに使いやすくするためには、
コンボボックスに大量のテキストを用意しておかないとなりません。
なんか、ショートカットの組み合わせ文字列が定義された定数配列とか
ないですか?
0292デフォルトの名無しさんNGNG
>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;
0293291NGNG
>>292
おおおお
メカラウロコ
0294デフォルトの名無しさんNGNG
ヒントを得て、これで解決しました。

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

OnExecute には

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

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

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

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

>>310
フック…とつぶやいてみる予行演習。
0313デフォルトの名無しさんNGNG
>>269>>271
こういう時にサクっと使える正規表現ライブラリって在りませんかね?
0314>>313NGNG
http://www.google.co.jp/search?q=%90%B3%8BK%95%5C%8C%BB%83%89%83C%83u%83%89%83%8A%82%F0%8C%9F%8D%F5%82%B5%82%EB%82%C1%82%C4%81%5B%82%CC%81I&hl=ja&btnG=Google+%8C%9F%8D%F5&lr=
0315デフォルトの名無しさんNGNG
>>313-314
洋物、和物含めてイロイロあるけど、一番評判がいいのって、どれだ?
0316デフォルトの名無しさんNGNG
>>315
洋物…トレイシーローズ
和物…長瀬愛
0317デフォルトの名無しさんNGNG
>310
GetAsyncKeyState
0318デフォルトの名無しさんNGNG
>>314
手が込んでるな…
メール入力欄に書きこむの、最近見かけないが
あれは速報版だけの慣習なのか?
0319デフォルトの名無しさんNGNG
>>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使うな。
0320デフォルトの名無しさんNGNG
なにやってるかさっぱり解らん。
0321デフォルトの名無しさんNGNG
結局>>319本人は自分で書いてて解らなかったのか?
Delphi使わんのは>>319の勝手だが。
文末がサッパリわからん。
0322デフォルトの名無しさんNGNG
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から直接渡す方法が分からないです。
0323デフォルトの名無しさんNGNG
>>314 ワラタ
0324名無しヘタぐらま ◆B18Bks.Y NGNG
>>288
α)文字以外の物を表示する場合
β)内部処理とユーザーインターフェイスを分離したい場合

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

0326デフォルトの名無しさんNGNG
みなさま、ちょっと知恵を貸してください。

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

・実行することの出来る最も小さい仕事を 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;
0327デフォルトの名無しさんNGNG
で、それを処理する部分は

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 で分岐させるのはどうも…
0328デフォルトの名無しさんNGNG
>>326
>200から始まる一連のやり取りが参考になるかも
TCommandってやつね
0329デフォルトの名無しさんNGNG
>>325
ありがとう御座います
早速試してみます
0330デフォルトの名無しさんNGNG
>>329
>>325のコードそのままだとおかしくないか?

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

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

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

あ
い
う

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Integerのデータをどんどん追加したいのです。
TListだとポインターじゃないと怒られてしまいました。
配列だと最初に大きさを決めないといけないので応用が利きません。
0372名無し募集中。。。NGNG
>>371
動的配列
0373デフォルトの名無しさんNGNG
>>371
IntToStrしてTStringListに格納してみるってのはどーよ。
0374デフォルトの名無しさんNGNG
DelphiってAPIをどういう風に書けばいいの?
0375デフォルトの名無しさんNGNG
>>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;
0376添削NGNG
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;
0377デフォルトの名無しさんNGNG
>>376
動作しました! ありがとうございます。
0378332NGNG
いろいろやってるのですがまだ解決出来ません。
グリッドの中身を一度カンマテキストに落として列の追加をやろうとしたのですが、どうしても追加しようとしてる列から
後ろが消えてしまいます。
一度別で確保して待避させてるのに・・・。

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

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

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

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

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

最後から最初に戻るには

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

じゃないの?
フォーカスってなんのこと?
0393デフォルトの名無しさんNGNG
delphi6 Personalです。
ttp://member.nifty.ne.jp/m-and-i/tips/wildmatch.htm
このページのコンポーネントをインストールしようとしたら、
masks.pasがないと怒られました。
HDDをいくら検索してもないので、delphi自体を再セットアップして、
masks.pasを探してみたのですが、やはり見つかりませんでした。
Personal版にはないものなのでしょうか?
0394デフォルトの名無しさんNGNG
>>392
レスどもです。
最初に戻るのは、そのやり方でやってるんですが、最後の行に行ったらって言う条件が
上手く書けないです。
ちなみに、フォーカスとは、選択した時に青くなるアレです。
普通はそう言わないのかな?
ちなみに、こんな感じでやってみたんだけど
if RichEdit1.Lines.Count-1=SendMessage(RichEdit.Handle,EM_LINEFROMCHAR,-1,0)
then change.selstart :=0;
よくよく考えたら、検索なんで、キャレットが最後の行に行く前に、終ってしまう・・・
0395デフォルトの名無しさんNGNG
>>393
Masks.Pasとは、そのコンポーネントのソースのことでは?
どういう配布方法か知らないけど、ライブラリパスはちゃんと、きってますか?
全然違うこと言っていたら、ごめんね。
0396Delフサギコ ◆zE1iiRdQ NGNG
 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 | 過去ログ見ーってのは、勉強になるよって意味で
 \_ _誰かさんみたいに、回答が面倒だから
    |/   っていう意味じゃないんだが…
   ∧,,∧
  ミ,,゚Д゚ミ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;
0397395NGNG
>>393
あ〜
ごめんなさい。
まったく、違う事いってました。
こんなクラスあったんだすねぇ・・・スマソ
ちなみに、家のにはあったよ。DEL5のPROだよ。
パーソナルにはないみたいね。
0398Delフサギコ ◆zE1iiRdQ NGNG

   ∧,,∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ミ,,゚Д゚彡 < ここまではいらんだろうけどね。
  (ミ  ミ)   \_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;
0399デフォルトの名無しさんNGNG
>>393
気持ちは分からんでもないが、作者に聞けっちゅーの。

つーか、usesにあるぞ<masks
よく見れ。
0400デフォルトの名無しさんNGNG
>>394
全体的に意味不明
・検索なら検索のアルゴリズムを書けよ
・フォーカスじゃなくて、文字を選択して「反転」してるんだろ?
0401399NGNG
ちょーっと勘違い。でも作者に聞けれ!
0402デフォルトの名無しさんNGNG
>>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;
こんなんです。ボタン押していって、最後にきたら最初に戻るってやりたいんです。
どうでしょか?
0403デフォルトの名無しさんNGNG
>402
最初のFindTextの結果が-1だったら、もう一回先頭からStartPosまで検索、
でいいんじゃないの。
0404デフォルトの名無しさんNGNG
>>402

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

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

じゃないですかね?
0405デフォルトの名無しさんNGNG
>>403
>>404

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

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

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

何れにしろ解決しました、ありがとうございました。
0408332NGNG
Delフサギコさんありがとう!
MoveColumnがあるなんて気づかなかった・・・

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

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

質問ばっかりですいません。
0410332NGNG
もしかして
var
 Form1: TForm1;
みたいに宣言しないと駄目とか?

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

自分で作成したカーソルアイコンを読み込ませたいのですが。
0412デフォルトの名無しさんNGNG
>>411
FormのCreateにて

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

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

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

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

 TStrGridInsert(StringGrid1).InsertColumn(○)

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

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

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

0421Delフサギコ ◆zE1iiRdQ NGNG
   ∧,,∧   / ̄
@,,,ミ,,゚Д゚彡 < >>420無理。TEtitor使え
⊂,,,,,,,,,つつ.   \_
0422デフォルトの名無しさんNGNG
array [0..260 +1] と array [0..Pred(260)] は別物なのでしょうか?
0423デフォルトの名無しさんNGNG
>422
(a) -1の間違い
(b) Succの間違い
どっちだ。
0424422NGNG
>>423
失礼しました、"(a) -1の間違い "です。
0425デフォルトの名無しさんNGNG
TEtitorってナニ?
0426デフォルトの名無しさんNGNG
http://www.inkando.com/cgi-rankingplus/rankin.cgi?id=0511030508
0427デフォルトの名無しさんNGNG
Delフサよ。
お前かわいいな(*´▽`*)
0428デフォルトの名無しさんNGNG
>424
だったら内容としては同じもの。
ただし、コンパイラから見ると両者は「同一の型」ではない(これは
字面が違うせいではなく、両方とも array[0..260-1] のように同じ
字面にしてもやっぱりダメ)。
Object Pascal 言語ガイドの中に「型の互換性と同一性」っていう
トピックがあるから、そこを見てみるといいよ。
0429デフォルトの名無しさんNGNG
http://www.google.co.jp/search?q=TEtitor&hl=ja&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
0430Delフザコギ ■zE1iiRdQ NGNG
    ∧,,∧   / ̄
 @,,,ミ,゚Д゚彡 < 下らん事で揚げ足とるのが楽しい人間の気が知れん。
 ⊂,,,,,,,,,づ,つ.   \_ TEditorの間違いでした!ス・ミ・マ・セ・ン!!!
0431デフォルトの名無しさんNGNG
今日Delphi(Personal)使い始めました。
早速質問ですが、Imageで、実行時にサイズを大きくすると、
大きくした部分に線など描画ができないのですが、なぜですか?
(散々悩んだのちPaintBoxなるものをハケーンして代わりに使ってますが。)
ちなみに今はVBユーザーです。Delphiに乗り換えてもいいかも。
0432デフォルトの名無しさんNGNG
>>431
君はVBやってなさい。
0433デフォルトの名無しさんNGNG
DateTimePickerでTDateTime型の初期値としてnilを入れた
いのだが入りません。
ゼロを入れると当然のように日付として扱われるしどーすりゃ
いいの?
0434デフォルトの名無しさんNGNG
>>431
PaintBoxで駄目な理由がわかりません。
PaintBoxでいいじゃん、つーか、その為にPaintBoxあるんだけど。
0435デフォルトの名無しさんNGNG
>>433
TEdit使えばいいじゃん、つーか、その為にTEditあるんだけど。
0436433NGNG
>>435
それは、なんか違うと思いますが・・・。
0437デフォルトの名無しさんNGNG
俺に逆らうな!ハゲ!
0438Delフサギコ ◆zE1iiRdQ NGNG

  カワリニ アヤマッテクレルンダ.......
      ∧,,∧___   / ̄ ̄ ̄ ̄ ̄
    /ミ*゚Д゚ミ/\<  トリ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あたりで
別メモリに持っておくべきか。
0439Delフサギコ ◆zE1iiRdQ NGNG

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

  どうでしょ
0440デフォルトの名無しさんNGNG
>>438

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

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

0445デフォルトの名無しさんNGNG
どうしてモナーが出てこないんですか?
0446DELモナ一NGNG
 ∧ ∧         / ̄
( ´∀`)(    )  < 体が切れてる体よ!
              \_
0447DelフサコギNGNG
      ∧,,∧___   / ̄ ̄ ̄ ̄ ̄
    /ミ*゚Д゚ミ/\<  諸君等の愛してくれたモナ一は死んだ!
  /| ̄∪∪ ̄|\/  \ なぜだ!
    |____|/     \____
     ,,,,∪∪,,, ,,

次からフサコギの*やさしい* Delphi質問スレになる
0448デフォルトの名無しさんNGNG
坊やだからさ
0449初めてのDelphiNGNG
var A : TStringList ;
だとして

A := TStringList.Create ;

と書くべき所を、未だに

A.Create ;

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

ちなみになんで下の書き方だとエラーになるのかわからん。
var節で型は明らかになってるはずなのに・・・
0450デフォルトの名無しさんNGNG
>>449
AはTStringListだ
何でTStringListを作る?
それはTStringListで作る
0451デフォルトの名無しさんNGNG
>何でTStringListを作る?
この1行がわからんよなぁ
0452デフォルトの名無しさんNGNG
>>449
自分で簡単なクラスを設計してみればわかるかも
0453451NGNG
解った・・・

確かにこの方が読解しやすいね。
0454デフォルトの名無しさんNGNG
・インスタンス.コンストラクタ
・型.コンストラクタ
の違いですか
0455問題ですNGNG
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の値は何でしょう?
0456デフォルトの名無しさんNGNG
>>449
var A : TStrings ; でも

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

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

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

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

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

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

はふぅ。
0469デフォルトの名無しさんNGNG
>>468
金がないなら技術を磨けYO!
0470デフォルトの名無しさんNGNG
>>468
自力で実装すると言う考えはないのですか?
0471467NGNG
>>469
>>421でdelフサが「無理」って言ってるから
不可能なんじゃないの?
0472デフォルトの名無しさんNGNG
>delフサが「無理」って言ってるから
>不可能なんじゃないの?
この瞬間delフサは神になりました。

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

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

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

       -モナーの *やさしい* Delphi質問スレ Ver3 -
*)
0483デフォルトの名無しさんNGNG
>>482 なんか見てると自分もマターリするな・・・

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

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

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

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

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

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

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

と

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

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

end else begin

と

end
else begin

や

end
else
begin

って書き方もあるけど、どれが読みやすい?
0488デフォルトの名無しさんNGNG
>>486
if c in ['A'..'Z', 'a'..'z', '0'..'9'] then

>>487
http://community.borland.com/soapbox/techvoyage/article/1,1795,10280,00.html
0489ネタでなければいいが…NGNG
>>486
StrToIntDef
0490488NGNG
>if c in ['A'..'Z', 'a'..'z', '0'..'9'] then
これは文字cが半角英数かどうかって事ね。
文字列全体ならループまわして判定。
0491489NGNG
ああ、アルファベットもってことか。
0492486NGNG
>>488
>>489
>>490
ホント厨な質問してしまってすいません。。
こんな漏れに答えてくださってありがとうございます。
0493 ◆l1kFOeLY NGNG
>>490
それでいいのかなぁ〜。
0494Delフサギコ ◆zE1iiRdQ NGNG
  ,,,,,,,,,,,,,,,,∧,,∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′,,,,,,,,,,ミ,,゚Д゚彡 < なんでも判定するよろし。
  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;
0495Delフサギコ ◆zE1iiRdQ NGNG
  ,,,,,,,,,,,,,,,,∧,,∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′,,,,,,,,,,ミ,,゚Д゚彡 < こんなんして使います。
  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;
0496デフォルトの名無しさんNGNG
begin;

この文は妥当か?
0497デフォルトの名無しさんNGNG
コンパイルは出来た。
0498DelフサギコNGNG

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


0499名無しヘタぐらま ◆B18Bks.Y NGNG
>>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] := '#';
0500デフォルトの名無しさんNGNG
>>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に代入して回したほうがコードはシンプルになるね。
0501500NGNG
for->whileにして中でiいじったら?
0502501!=500NGNG
500->>500だった
0503デフォルトの名無しさんNGNG
変な質問ですいません。
画面があったとします。
その画面の左上から雪みたいなのがフワフワ降ってくるのを作ろうとしてるのですがうまくいきません。
直線にビューーーー!って飛んでいくんです。

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

どうすれば上手く行くでしょうか。
0507デフォルトの名無しさんNGNG
ay = 9.8
ax = 0.0

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

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

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

ttp://member.nifty.ne.jp/~katsuhiko/
0513509NGNG
DELモナーさ〜ん!
0514デフォルトの名無しさんNGNG
>>513
  _____        ______
/\   Λ_Λ     /
\  \(;´Д`)\  <   ハーイ?
 |\/| ̄ ̄ ̄ ̄|\  \______
 \.  | DELモナ . |
   \.|.____|
0515デフォルトの名無しさんNGNG
a〜Zまでのアルファベットをランダムにだすようにはどうすればよいですか?
0516>515NGNG
1. 0..25の乱数を生成
2. 1.の数値をa..zのアルファベットに変換
0517デフォルトの名無しさんNGNG
0〜51までの乱数を生成するとか?
0518デフォルトの名無しさんNGNG
s := 'ABC';
c := s[Random(Length(s))+1];
0519デフォルトの名無しさんNGNG
>>503
適当な横軸足しながら、sinで揺らせば?
複数のsinを足すとそれっぽい。
0520509NGNG
Delフサギコさ〜ん!
0521デフォルトの名無しさんNGNG
クリップボードに貼り付けしたりするにはどうるすんですか?
0522デフォルトの名無しさんNGNG
http://www.google.com/search?q=%82%C2%81%5B%82%A9%82%B3%82%9F%8D%C5%92%E1%8C%C0%83%7D%83i%81%5B%82%C6%82%B5%82%C4%8C%9F%8D%F5%82%AE%82%E7%82%A2%82%B5%82%C4%82%AD%82%EA%82%C8%82%A2%82%A9%82%C8%82%9F&btnG=Google+%8C%9F%8D%F5&hl=ja
0523デフォルトの名無しさんNGNG
>>521
ClipBoard.Assign;
0524デフォルトの名無しさんNGNG
PDFヘルプのクイックスタートの4-6に書いてあることをやろうと思うのですが、
コンポーネントパレットの[Additional]ページにあるという
ActionManager が見当たりません…。

何か特別なことをしないといけないんでしょうか?
0525506NGNG
オネガイ >>506 オシエテ…
0526デフォルトの名無しさんNGNG
>>524
面白くない。
0527デフォルトの名無しさんNGNG
>>524 
>>1にあるこのスレの過去ログを調べなさい


http://paming.s7.xrea.com/ykwk166_kai/yukiwiki.cgi?mycmd=read&mypage=%5B%5BD6%83%60%83%85%81%5B%83g%83%8A%83A%83%8B%82%CC%93%C7%82%DD%91%D6%82%A6%5D%5D
0528デフォルトの名無しさんNGNG
>>526
?
>>527
すみません、よく読んでませんでした。
逝ってきます
0529デフォルトの名無しさんNGNG
アクソンジャーマネが無いのネ♥ってのは正直、見飽きた。
0530デフォルトの名無しさんNGNG
見飽きたというかなぜBorlandがそれに対処しないのか謎だよ。
0531デフォルトの名無しさんNGNG
>>530
確かに。
0532デフォルトの名無しさんNGNG
>>530
めんどくさいだけだろ。
0533デフォルトの名無しさんNGNG
ある文字列から、該当文字列を検索して
Hitしたらその文字が何番目か返す関数ってあります?

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

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

constructor THoge.Create;
beign
 :
end;

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

0539デフォルトの名無しさんNGNG
StringGridで縦に文字を抜き取る方法って無いですか?

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

ってあったら

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

0540539NGNG
あ、これってfor文でyに変数持たせて回すだけか・・・。
0541デフォルトの名無しさんNGNG
>>537
むしろform2.showで何がうまくいかないのかわからん
0542537NGNG
>>541
その別フォームってのはTOKBottomDlgでして、
OK押したらそのフォームの設定を保存するようにしてまして、
そんでshowmodalでやってるんです。
でもこのフォーム、ホットキーでも呼べるようになってまして、
そうすると二重起動できちゃうんです。これを阻止したいのです。
showだと、OK押したら保存、キャンセルなら保存しないっていうのは
どうやるんでしょうか?初歩的な質問で申し訳ないっす・・・
0543537NGNG
あ、showで設定保存するのは簡単でしたな・・・
メモリ開放はcaFree使えばよいのかしら?
それは置いといて、やっぱり二重起動防止がわかりません・・・うぐっ
0544デフォルトの名無しさんNGNG
フォーム表示時にHotKey設定を消せば?
閉じたら再設定すけば?
0545デフォルトの名無しさんNGNG
ヘルプのように、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;
0546デフォルトの名無しさんNGNG
>>545
Posの引数が逆なんじゃないの?
0547DELモナNGNG
 ∧ ∧
( ´∀`)< >>545 pos の引数は pos(検索文字列, 検索対象文字列) モナ。

>>539 わざわざ for 使わなくても、
s := StringGrid.Cols[0].Text; でいいんだナ。
0548545NGNG
>>546,547

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

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

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

begin

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

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

>TMemo(ActiveEditor).

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


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

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;
0561デフォルトの名無しさんNGNG
>>560
集合型の実体は 256 bit / 32 byte のデータでしかないから, byte[0..31] に
強制キャストしてしまえば終わり。
0562デフォルトの名無しさんNGNG
>>561
そうか。
0563デフォルトの名無しさんNGNG
>>561
喜び勇んでコピペした俺の立場わ
0564デフォルトの名無しさんNGNG
フリーにするくらいなんだから、もーーーーーーー少し、ヘルプを「いい感じ」にするのと、
詳細なリファレンスを作ってくれたなら、もっと売り上げに貢献…するような
気がするようなしないような。
あくまで希望っちゅーか、展望っちゅーか、未来予想図っちゅーか…。
ま、感謝してますが>ボーランドさん
0565デフォルトの名無しさんNGNG
個人的には過去のバージョンの最下位エディションも公開して欲しい…。
0566デフォルトの名無しさんNGNG
>>564
>もー(略)ー少し、ヘルプを「いい感じ」にするのと、 詳細なリファレンスを
胴衣。

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

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

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

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

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

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

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

でも、常に前面に表示したいなら、
http://www.borland.co.jp/qanda/delphi/d0000128.html
0576デフォルトの名無しさんNGNG
>571
違うよ。RADツール以外を回収だよ。
0577デフォルトの名無しさんNGNG
>>574
Tinifileでいけました。

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

IniFile: TIniFile;

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

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

それは、

xxxxx.text:='代入';

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

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

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

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

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

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

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

あとは、今までのメッセージを全て変更する必要がある
が、IDEのエディタにプロジェクト内の全ユニットを串刺
しして変更する方法が無いのが寂しいですね。
0600デフォルトの名無しさんNGNG
>>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;
0601デフォルトの名無しさんNGNG
>>600
俺はオマエのデバッガーじゃねーぞ。

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

これも問題ないようだが?
0602デフォルトの名無しさんNGNG
>>600
そんなことより、

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

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

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

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

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

今はKeyDownが起こったら即座にValueを元の数字に戻すようにしてます。
出来ればカーソルの↑↓や数値入力からも入力したいので。
0612デフォルトの名無しさんNGNG
>>610
googleの検索ぐらい覚えてくれよ
ホレ検索結果だ
http://www.google.co.jp/search?hl=ja&q=%82%A8%91O%82%C1%82%C4%96%7B%93%96%82%C9%94n%8E%AD%82%BE%82%CB&lr=lang_ja
0613名無しヘタぐらま ◆B18Bks.Y NGNG
TMemIniFileはDelphi4で追加されたクラスです.

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

今はどんなキー入力でも強制的に4になるようにしてます。
0617デフォルトの名無しさんNGNG
質問です。
だいぶ前にインプレスのサイトでDelphiとC++の速度比較を行ってた記事があったんですが見つかりません。
誰か知ってる方教えて下さい。
0618デフォルトの名無しさんNGNG
http://homepage2.nifty.com/Fujimaki/download/Comparison/

こんなんあったけど…
0619デフォルトの名無しさんNGNG
KeyDownで3が入ったとき4にしちゃうと
32とか36はどうするの?>611
0620611NGNG
>>619
ああ・・どうしよう

MAXValueは24だからいいけど

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

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




あきらかに嘘だろう。
元に1は不在だ。
0628625NGNG
って、TSpinEdit か……でも OnExit で処理するって方法は使えるな。

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

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

TCanvas.TextExtentで求められます。
0632630NGNG
GetTextExtentExPoint
でドンですよ、奥さん。
0633デフォルトの名無しさんNGNG
Autosize=trueのラベルに字を入れてその幅で…これは邪道か。
0634デフォルトの名無しさんNGNG
>>629
 ∧ ∧   |TCanvas.TextExtent
( ´∀`)< TCanvas.TextWidth
(    ) |TCanvas.TextHeight モナ
0635デフォルトの名無しさんNGNG

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


―――――――――――――――――――
 (無視)
___________________
    ∨
    ∧ ∧   ∧_∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   (   ;)  (#    .)<  (無視)
   /PG|    ( 平SE ) \
 \(__.ノ    | | |    \___________________
         (__)_)
0636デフォルトの名無しさんNGNG
まずはここを読もう!

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

0637デフォルトの名無しさんNGNG
>>627
じゃあ次スレはこんな感じで

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

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

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

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

http://www.2ch.net/guide/faq.html#B0
と
Delphiのヘルプ
0641デフォルトの名無しさんNGNG
>>635
なつかしいねそれ。
0642デフォルトの名無しさんNGNG
    
  ∧     |/|    ∧
      / 丶    |/|   /:::::丶
      /   、__|/|_ , :::::::::ヽ    
    /        |/| ::::::::::::::::::::::\
    |         |/| ::::::::::::::::::::::: |  ヽ丶
   |        _|/|__:::::::::::::::::: |  | |
    |      /____ \::::::::: |  / /
    ヽ   //    ::::::::\.\: /
     丶//      :::::::::::::::\\
    /   ̄|       :::::::::::::::::::|: ̄::ヽ    ぷらーん
        |       ::::::::::::::::::|::::::::::::
//  |   |       ::::::::::::::::::|:::::::::::|        ぷらーん
| |  |   |       ::::::::::::::::::|::::::::::::|
ヽヽ |   |       ::::::::::::::::::|::::::::::::|
    |   |       ::::::::::::::::::|:::::::::::|
   |    |       ::::::::::::::::::|:::::::::::|
   ヽ   /      |:::::::::::::::::::::ヽ:::::::/
      ̄  |      |::::::::::::::::::::::::| ̄   ヽヽ
       |     |:::::::::::::::::::::::::|     | |
        |      |:::::::::::::::::::::::::|     / /
        |      |:::::::::::::::::::::::::|
        |      |::::::::::::::::::::::::|
        |      |::::::::::::::::::::::::|
        |      |:::::::::::::::::::::::|
        ヽ____丿ヽ::::::::::::::::::/
          ;;;;;;;;;;;;;;;;;;; ̄ ̄ ̄
      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;




0643629NGNG
>>630-634
ありがと、能力がひくいので色々調べてたりしたら
すごーく時間がかかりましたけど、なんとなくできたわ。
0644デフォルトの名無しさんNGNG
Delphiのソースエディタを外部エディタに変更してしまうような
ツールとかありませんか?
0645デフォルトの名無しさんNGNG
今日のエラー

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

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

0649デフォルトの名無しさんNGNG
>>.648
残念ながら BCB++で出来ない事は 殆どありません。
なぜならBCB++にはパスカルコンパイラが付属するからです。

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

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

少なくともBorlandはDelphiに本腰入れてるのは間違いない。
0657デフォルトの名無しさんNGNG
移植は
でも簡単だよ .DPR だけ C++に移植して 他のフォームはそのままDelphiのを使えばいいんだから
0658648NGNG
>>657
C++ビルダーでpasファイルそのまま読めるんですか?
0659デフォルトの名無しさんNGNG
>>658 そう 編集機能は殆ど無いけどね。
 pasはもちろんフォームファイルも 読めるし見えるしコンパイルしてリンク出来るよ。
 だからDelphiのフォームをそのまま使うならとても簡単。
 一部修正するなら、フォームを継承して変更すればいい
0660デフォルトの名無しさんNGNG
>>659
 修正作業がたくさん入るとワケワカになる罠
0661デフォルトの名無しさんNGNG
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 );

0662デフォルトの名無しさんNGNG
逆に今の現状ではDelphiをC++に移植しても何のメリットも無いことを上司に伝えてみては?

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

1日1万円として5日で5万円。
Delphi6pro買えちゃうぞ。
0663デフォルトの名無しさんNGNG
>>661
クラスに リストの プロパティを追加して、クラス作成時にリストを参照させればいいだけでは?
コンポーネントなら必ずParentプロパティをリストにする約束にしてもいいし
0664デフォルトの名無しさんNGNG
DelphiでVBのMeに相当するものってありますか?
C++で言うthisみたいなのです。
0665デフォルトの名無しさんNGNG
>>664
Self
0666デフォルトの名無しさんNGNG
>>663
ありがとうございます。 そのとおりですね。
何でこんな単純なことに気が付かないんだろう・・・ 
0667デフォルトの名無しさんNGNG
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にはメモリー系のバグを調べるツールが付いているらしい

…ぐらいですかね。他にもあれば/間違いがあれば、突っ込んでください
0668667NGNG
補足…

ObjectPascal側

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

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

C++側

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

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

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

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

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

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

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

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

飲み屋にいるような感じで、マタ〜リしましょう
0681終わってる?NGNG
ちまたのTIPSにある「wininetのオンラインかどうか調べる」ってヤツ、
ワシの素晴らしい環境(win95)だと全然調べられないんだけど、
win95だとダメで、それ以上だったら使えるってことなのかな?
nternetGetConnectedStateってヤツ。どなたか教えてくだされ。
0682デフォルトの名無しさんNGNG
ある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]じゃ
駄目みたいなんでよくわかりませんでした。
0683デフォルトの名無しさんNGNG
>>681
IE3 を入れれば動くんでない?
もしかしたら、IE4 かもしれないけど。
Win95 デフォルトにはその関数が含まれる DLL は存在しないよ。
0684デフォルトの名無しさんNGNG
>>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;
0685デフォルトの名無しさんNGNG
>>682
俺ならば、
パネルの上に貼ってあるなら、そのパネルのEnabledをFalseにするけど。
そんなんじゃ駄目?
0686667NGNG
>>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の示す先を取り替えるなんて真似もできます。

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

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

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

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

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

具体的には C++側で extern "C"{ の中でexportしてもらうといいでしょう
0693デフォルトの名無しさんNGNG
Delphiで作った物をビルダーに組み込んだ方が早くない?
ってVCなのか。
0694デフォルトの名無しさんNGNG
Cのソースを BCC55でコンパイルして obj を 直接Delphiにリンクって出来なかったっけ?
0695667NGNG
>>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から継承するモデルと多重継承は噛み合いませんし、委任先を後で交換できるメリットも。

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

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

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

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

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

0710デフォルトの名無しさんNGNG
>>706 TDUMP 使って .obj を見てみよう どんな名前になってる?
0711デフォルトの名無しさんNGNG
>>698
VB.NETがDelphiより速いわけねーだろ。
ここでも読んでなさいってこった。
http://homepage2.nifty.com/Fujimaki/download/Comparison/
0712667NGNG
以前実験した時は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
0713デフォルトの名無しさんNGNG
>>712 ソートなんて処理は メモリへの入出力が壁になるから
    2割3割の差は全く意味がない

  単にキャッシュや、データ境界の偶然の差と思った方がいいぞ
0714デフォルトの名無しさんNGNG
>>667さっきから必死じゃない?
071521NGNG
>>712
Delphiは実数型を何にするかによって実行速度がかなり変わるよ

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

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

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

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

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

>>731-732
色々とありがとうございました。
winprocのオーバライドはやった事がないので、
いい機会なので勉強してみようと思います。
ありがとうございました。
0735デフォルトの名無しさんNGNG
Delphiのデバイスコンテキスト(HDC)ってどのプロパティ?
0736デフォルトの名無しさんNGNG
そんなの無え
0737デフォルトの名無しさんNGNG
>>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でもいいのかなぁ
0738デフォルトの名無しさんNGNG
>735
それだけじゃ「整数ってどのプロパティ?」と聞かれてるのと同じで答えようがない。
まあ、当てずっぽうだが TControl.Canvas あたりから調べてみ。
0739デフォルトの名無しさんNGNG
描画したいのならTCanvasのHandleがHDCだよ
0740デフォルトの名無しさんNGNG
>>738-739
サンクス。
焼き直し終わったらココにあげてもいい?
迷惑なら辞めるけど。
0741681NGNG
>>683
当方、IE5.5入れてるんですが…。ダメなんですかね?
うーむ…。レスありがとうございました。
他に「オンラインかどうか」を調べる方法無いもんかなー…。
検索したけど、うまくヒットしない…。
0742デフォルトの名無しさんNGNG
>>695
なるヘソリンコ。サンクソ。
0743667NGNG
気になったので起き出してきちまった…
丁度暇だったし、自分で試しもせず名前で判断する奴が多そうだったからコードまで提示したのに。
処理によってはVB.NETというか.NETが速い場合もある。これは事実。
挙げられた名前がVB.NETじゃなくC#ならどうだったのだろう(同じ速度)。

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

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

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

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


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

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

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

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

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



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

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

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

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

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

0773デフォルトの名無しさんNGNG
>>772
VBの開発者にはハッカーが居たらしいが・・・。
今は居ないけど。

かなり前にZDNetに載ってたよ。
0774デフォルトの名無しさんNGNG
>>769
上がMS謹製の開発ツールでないと使わせてくれないという理由も付け足しといて。
素人が注文うんぬんって意味では顧客だろうが上司だろうが一緒だけどね。
0775747NGNG
今帰ってきました。

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

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

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

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

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

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

それはそれで疑問が。

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

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



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

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

そのほうが、UIを変える羽目になっても
変更が楽になるかと思って。
0780デフォルトの名無しさんNGNG
>>776=778

そういうことなら、「何百行」のコードを、機能を切り分けて、複数の
メソッドにしてしまえばよいと思うのですが。
0781デフォルトの名無しさんNGNG
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にも同意だけどね。
0782デフォルトの名無しさんNGNG
>>771
>ラインを雨のように降らせたいのですがどうしたら良いんでしょうか?

俺は昔雨の波紋を作ろうとして挫折した。
0783デフォルトの名無しさんNGNG
>>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;
0784デフォルトの名無しさんNGNG
雨って空気抵抗のせいで
地表付近ではほぼ一定速度で落ちてくるんじゃなかったっけ
0785デフォルトの名無しさんNGNG
>>784
空気抵抗の大きさは速さに比例する。
ある一定の速さに達すると以後等速になる。
・・・だよね。

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

テキストファイルから直接、TStringList経由と試してみたのですが
どうもうまく行かなかったので現状のような誤魔化しになってます。
すみません、ヒントください。
0787初心者NGNG
>>786
テキストファイルを1行ずつ読みとって目的の日付と一致したら、
そこから次の日付か、テキストファイルの終わりまでをTStringListにAddってやってみるのは?
初心者だからいい方法かはわからないけど。
0788777NGNG
>>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;
0789777NGNG
Pos じゃなく AnsiPos のほうがよかったかも
0790デフォルトの名無しさんNGNG
お前等アクションリスト使ってますか?
0791さる高貴な出の人NGNG
>>790
下民などに答える舌を持たぬな。
0792777NGNG
あっ、やはり、区切りを #2 ではなく #2#3 などとして Pos(#2#3,s) と
した方が、検索が速そうです。
0793デフォルトの名無しさんNGNG
>>790
何それ?
0794デフォルトの名無しさんNGNG
 ∧ ∧
( ´∀`)(    )  < ここも遂に糞スレに成り下がっちまったか
0795デフォルトの名無しさんNGNG
ActionListっていつのバージョンからあるの?
0796デフォルトの名無しさんNGNG
うう〜ん
W2KにDEL5入れています。
INTERBASEをインストールしようとすると、SETUPAPI.DLLがありません
ってでるんだけど、どうしましょうか?
あるのになぁ〜あるのになぁ〜

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

どなたか、教えてください(ヒントでもいいっす)
0797素数2NGNG
新規フォームを作って置いて

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

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

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

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

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

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

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

データベースを別サーバーにすれば緩和されると思いますが、同じパソコンで
実行したのでは 意味がないかも
0818デフォルトの名無しさんNGNG
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;
0819デフォルトの名無しさんNGNG
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;
0820818-819NGNG
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;
0821デフォルトの名無しさんNGNG
おー降ってる降ってる
0822デフォルトの名無しさんNGNG
凄い凄い!
下の方で雨が跳ねてるのもなかなか。

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

むずそう・・・
0823デフォルトの名無しさんNGNG
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;
0824デフォルトの名無しさんNGNG
{ 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;
0825デフォルトの名無しさんNGNG
{ 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;
0826実はDELモナNGNG
>>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;
0827名無しヘタぐらま ◆B18Bks.Y NGNG
>>776
データモジュールを作ってプログラム全体レベルでの内部情報と動作をここに置きます.

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

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

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

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

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

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

          ☆          ☆

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

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

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

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

0836デフォルトの名無しさんNGNG
>>834

D6pro / Win2000
D6pro / XP-home

で再現してます。

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

IDE のバグの可能性が高い。
0838デフォルトの名無しさんNGNG
>>826
波紋凄い綺麗に出来てるナー。
感心した。

0839デフォルトの名無しさんNGNG
>>837
てっきり、フレームだからだ!とばかり思い込んでいました。m(..)m

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

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

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

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

あるツールダイアログ属性のフォームに 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]でエラーが
起きてしまいます。なぜでしょう。そして、どうすれば上手く行くのでしょう。
0868デフォルトの名無しさんNGNG
  ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (,,゚ー゚)< そりゃダメだにゃ〜
 @_)  \________
0869デフォルトの名無しさんNGNG
>>867
 タブシート切り替えイベント、って、
  TPageControl.OnChange か OnChanging だろ?
 その Sender だから、TabSheet じゃないだろ。

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

        .,. ‐''¨¨^^ ̄  ̄^'.'ー 、       
     ._,-'.´`_‐'¨`¨'‐、 ,-'.¨´¨'-_ ::^'     
    ./::::::::::::.!     ! !     !::::::: ` 、   
   ^:::::::::::::::::.|    へi iへ   . .|:::::::::::.:::::^、  ボスケテー
  .,′ :::::,.-.''¨'、     i_._i_    ,:'¨''-::::::::::::::_'、 
 ..゙::::::.,/ __   `'''‐‐'''!::::::::!'''‐‐'''´  .__^、::::::::::.!
 !:::::,/    ^^''''‐‐   '--.'   ‐‐'''''^^  ゙、::::::::!
 !:::::,!  .```````¨    .|    ¨``````` !:::::::!
 !:::::!  ‐‐‐'''''''^^^    |   ^^^''''''‐‐‐  !:::::!
 !:::::!    \,.      |      _./   !::::.!
  'i::!    、 ‐^''- ,,._  |  _,,.-'''´     /:::::i
  ゙、:\  ノ    .゙、 `゙^''''''^´        ノ:::: ′ 
   ゙:、::' 、:\   ,./            ./:::ノ  
     >,:::::::゙¨'.゙「            ..'',::::. ′  
    ノ::::::::::::::::::ノ'''''''''>'''''''<'''''''''''''''''l゙ r'′   
   i゙:::::::::::::::::::ノ゙゙゙゙゙゙゙゙(、、、、、、)¨¨^、¨¨^'\    
   :::::::::::::::./    \┴ ノ   .i.:::::::::::`、   
   .゙!::::::::::::|    、、、、、、、.、、、、、、、 .i:::::、:::::: '、 
    !::::::::::|    i         i  .!:::::゙i ノ:.′゙':
    .|::::::::::|    \      ,ノ′.,!::::::ト_   ..!
     |::::::::::\._  `' ─--ー'′ ._,‐::::::::| `'‐''′
     .|::::::::::::::.゙.'' -、、., _  __,,._,‐::::::::::::::::|     
     |::::::::::::::::::::::::::::::::::.;::::::::::::::::::::::::::::::::|     
    ノ''''''''''.'' '''  ─‐ト------ :.、、:.、、.|     
     |          |          ^:   
     ´''ー‐-ー‐ー.‐  ⌒´゙.ーー.─‐.‐‐‐‐′━━━━━──
0873デフォルトの名無しさんNGNG
ボスケテワロタ

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

ボスタスケテ

ボス助けて…!

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

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



…スレどころか板違い逝って来ます
0875デフォルトの名無しさんNGNG
>874
おおいにワラタ。
元ネタはなんですか?
0876867NGNG
すごいマサルさん

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

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

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

0886名無しヘタぐらま ◆B18Bks.Y NGNG
>>827
修正
フレームはOnCreateがないのでコントロールの初期化は使えなかったです.ごめんなさい.

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

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つ目のパネルを作って、
その中にボタンを貼ると、一旦ボタンにフォーカスが移動すると
その次へ移動できなくなります。

これが、パネルで分かれていない状態だと上手く行くのですが、
何が悪さをしているのでしょうか。
0891デフォルトの名無しさんNGNG
\(^▽^)/これわかるかなぁ♪♪
http://www.ts-music.com/machigai.html
0892!!注意!!NGNG
>>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
死ぬほどビクーリした。
0893デフォルトの名無しさんNGNG
>>892
 気になってソースを表示させたら、ちょうどその画面に切り替わるところだったので、
ソースで隠されて顔見なかった(笑)
 画像かと思ったら Flash だったというだけ。
0894デフォルトの名無しさんNGNG
>>890
矢印キーで移動させるとTabStopがFalseでも、密かにフォーカスがそこに移動して
しまうんですよ。
PanelのEnterイベントに
ActiveControl := FindNextControl(ActiveControl as TWinControl, True, True, False);
を書いて下さい、なんとなく上手く動作するようになるはずです。
0895デフォルトの名無しさんNGNG
自作コンポーネントを使おうとしたら、設計中に

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

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

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

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はなぜ存在するのですか。

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

義男。
0906DELモナNGNG
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に「実際に入っているクラスによって、動的に呼び出される
メソッドが変化する」のです。これが、動的メソッドです。
0907DELモナNGNG
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 独自の内容を実行しています。
0908902NGNG
皆さんありがとうございます。
私のために(同じ疑問を持って見ている人のためでもありますが)
レスを下さって感謝しています。
>>903 いちいち聞いていたら効率悪いですよね。
>>904 ひとつひとつ答えてくださってありがとうございます。
>>905 次質問するときは逝ってきます。
>>906 例も用意してくださってありがとうございます。おかげで理解できました。
>>907 これはTClient=TChildですか?
0909デフォルトの名無しさんNGNG
やはり自分がそういうシチュエーションに出会うまでは
本当の理解は得られないってことだ。

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

代入互換性は応用が広い。
0910デフォルトの名無しさんNGNG
ネソッド×
メソッド○

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

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

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

LineReadとかあればいいのだけれども...
0920DELモナNGNG
ファイルが文字列であれば

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

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

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

ヘルプの TCustomForm.OnClose を見れ。
0926デフォルトの名無しさんNGNG
Helpよりコピペ

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

begin
if MessageDlg('Close the form?', mtConfirmation,
[mbOk, mbCancel], 0) = mrCancel then
CanClose := False;
end;
0927デフォルトの名無しさんNGNG
>>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;
0928デフォルトの名無しさんNGNG
>>927
926で問題なし
> *.free;
これの方が意味不明
0929927NGNG
>>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;
0930デフォルトの名無しさんNGNG
>>919
そのファイルがテキストファイルなら、
var
 F: TextFile;
 linebuf: string;
として、
AssignFile( F, filename );
Reset( F );
ReadLn( F, linebuf );

でよいんじゃないのか?

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

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

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

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

結合って何かありましたっけ?
0935デフォルトの名無しさんNGNG
>>934
000って付けたいだけなら*1000するだけで出来るよ。
0936早理菜NGNG
この問題解けてもらえませんか。

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

クラブの情報を格納する変数のデータ型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を引き継ぐ}

 
0937デフォルトの名無しさんNGNG
>936
宿題スレへ逝け

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

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

Clearメソッドが存在しないのですが、表をクリアする
メソッドって無いのですか?
0942デフォルトの名無しさんNGNG
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;
0943デフォルトの名無しさんNGNG
0001001100101001
と言う0と1の文字列が有るのですがこれを4つずつに区切って16進数に変換したいんです。

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

上の例で言うと
0001、0011、0010、1001
 ↓
1329
にしたいんです。
何か良い方法は有るでしょうか?
0944デフォルトの名無しさんNGNG
駄目だぁ。原因不明の読み込み違反続出。
StringGrid使えねぇ
0945デフォルトの名無しさんNGNG
>>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;
0946デフォルトの名無しさんNGNG
>>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回多いと思ったよ〜
0947デフォルトの名無しさんNGNG
>>946
あ、ありがとうございます。
貰ったサンプルじゃなくて、今ファイルの内容をStringGridに書き出して
内容の比較をしようとしたんですけど、TStringのFreeがうまく行ってないみたいで
読み込み違反が起きるんです。
Freeしないと動くんですけど、なんか不安で..。
今はMemoに吐いてからStringGridに入れてます。

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

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

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

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

何故でしょうか?
0953デフォルトの名無しさんNGNG
>>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;
0954デフォルトの名無しさんNGNG
それと 0000111111111111 と有った場合に16進数最初の0が省かれてしまうのですが、
0付けで変換する方法無いでしょうか?

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

質問ばかりですいません。
0955デフォルトの名無しさんNGNG
>>954
IntToHexの代わりにFormatを使うといいよ
使い方はヘルプで調べるとFormatで何ができるのかが分かるのでGood
0956デフォルトの名無しさんNGNG
と思ったら IntToHex(BinaryStrToInt(s),4)でも良かった
・・・おいらも勉強になったよ
0957デフォルトの名無しさんNGNG
>>955
と、言うかsprintfとにてぇ〜る。
0958945NGNG
>>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;
0959DELモナーNGNG
 ∧ ∧  1ヶ月近く続いて来たこのスレも、
( ´∀`)  いよいよ次スレを立てる時期だね。
0960Delフサギコ ◆zE1iiRdQ NGNG
   ∧,,∧   />>931さん
(,,,,,,,ミ,,゚Д゚彡 < App.MessageBoxなら 
⊂,,,,,,,,,つつ.   \ Ctrl+Cでメセジコピーできますね

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

コンポーネントがらみで酷い目にあったのか?
もしそうなら、激しく参考にするからその辺書いてくれ。
0981デフォルトの名無しさんNGNG

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

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

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

ベクターさんって、どの程度のヤツは拒否すんのかね?誰か拒否されたことのある
人いる?
0983新スレ立てたDELモナーNGNG
>>982

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

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

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

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

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

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

0995デフォルトの名無しさんNGNG
静かだ・・・
0996デフォルトの名無しさんNGNG
       v
     <(゚ω゚) <うっ!
      (��)\        
      /'>
0997デフォルトの名無しさんNGNG
       v
      (゚ω゚)> <はっ!
     /(��)        
       <'\
0998デフォルトの名無しさんNGNG
       v
     <(゚ω゚) <うっ!
      (��)\        
      /'>
0999デフォルトの名無しさんNGNG
       v
      (゚ω゚)> <はっ!
     /(��)        
       <'\
1000デフォルトの名無しさんNGNG
     v       w
    (゚ω゚)/ \(゚δ゚)<ジーンギスカーン!
   /(��)    (�戟jゝ
     <'\    / >
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。