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

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

■ このスレッドは過去ログ倉庫に格納されています
0001DELモナNGNG
DELモナーがどんな厨房疑問でもやさしく答えます。
DELモナは時に私であり、時には別の人。
他のスレに書き込んで罵倒される前に、まずここで質問しよう。
 ∧ ∧
( ´∀`)(    )
0083デフォルトの名無しさんNGNG
全 SKU 対応
0084DELモナNGNG
 ∧ ∧
( ´∀`)( ここは、モナー専用なのれす  )
0085デフォルトの名無しさんNGNG
>>84
いいじゃん別に。
君がこのスレ立てたとしても、持ち主になったわけじゃないんだからね。
0086デフォルトの名無しさんNGNG
>>82
さんきゅ。うっかりミス。今直します。
0087デフォルトの名無しさんNGNG
>>86
うわっっっ!!!直ってる!!!!!びびったよ(´д`;)
関係者ですか?
0088デフォルトの名無しさんNGNG
>>87
天網恢恢疎にして漏らさず
0089デフォルトの名無しさんNGNG
>>86
えぇっ!
0090デフォルトの名無しさんNGNG
Delphi 6 Update Pack 1
Whistler serverで動かすと画面が出てこないです
俺だけ?
0091デフォルトの名無しさんNGNG
XP Pro での動作は確認していますが? >>90
Server のビルド番号は?
0092デフォルトの名無しさんNGNG
>>90
Update1 当てる前だと問題なかった?
009390NGNG
サンクス
今手元にないのでわからないのですがMSDNについてきたベータ版です
Delphi6使うのは普通に使えてます
おかしいのはアップデートのプログラムの方です
起動するとSetup.exeが裏(タスクマネージャ)で実行して表に画面が出てこないです
0094デフォルトの名無しさんNGNG
MSDN ベータだとだいぶ古いですね。
普通の InstallShield アプリですから、問題が出るとしたら OS の
問題でしょうか。
009590NGNG
OSは標準インストールです
Setupが途中で止まってるのか画面がShowしてないだけかもしれません
どっちにしてもこの環境は今週までなので他の環境にセットします

ちなみに
ComCtrls.pasのTSubItemsは
procedure TSubItems.Clear;
begin
inherited Clear;
FImageIndices.Clear;
end;
が治ってないようです
追加しないとFImageIndicesがクリアされません
0096デフォルトの名無しさんNGNG
( ´V`)
良い書き方を思いついたのれす。
変数宣言を見なくても、変数の型が一発で分かるのれす。
全変数の初期化なんぞも簡単にできるのれす。

例)

type
 TInt = (Age);
 TDbl = (Height, Weight);
 TStr = (LastName, FirstName);

var
 int:array [TInt] of Integer;
 dbl:array [TDbl] of Double;
 str:array [TStr] of string;
begin
 Write( 'LastName > ' );
 ReadLn( Str[ LastName ] );

 Write( 'FirstName > ' );
 ReadLn( Str[ FirstName ] );

 Write( 'Age > ' );
 ReadLn( Int[ Age ] );

 Write( 'Height(cm) > ' );
 ReadLn( Dbl[ Height ] );

 Write( 'Weight(kg) > ' );
 ReadLn( Dbl[ Weight ] );

 WriteLn( Format('%s %s %d Years old. %f kg, %f cm',[
  Str[LastName],
  Str[FirstName],
  Int[Age],
  Dbl[Weight],
  Dbl[Height]
 ]));

end.
 
00971NGNG
スレ立てたの私。ちなみに、1以外のモナーは全部私以外の人ですよ。
モナーと書いたのは、単にギコは既出だからという理由であって、
真意は「AA容認スレ」及び、たとえ厨房でも「罵倒はしない、やさしく諭す」という方針にしたかったから。

いや、それだけ。



さらば。DELギコ降臨を望む。
0098デフォルトの名無しさんNGNG
>>96
ハンガリアン表記をより凶悪に推し進めただけのトリッキーコードにしか見えない…。
0099デフォルトの名無しさんNGNG
全ての変数に接頭辞つけるやつは変数宣言を読むのがそんなに辛いんだろうか。
Delphiならフィールドに F 付ければ十分だと思う。
0100デフォルトの名無しさんNGNG
ひゃくばんげっちゅ
0101Del初心者NGNG
DelphiとVC++って、どう違うんですか?
あと、コンパイラ型ですか?記述はCに近いのですか?
0102デフォルトの名無しさんNGNG
>>101
Delphiはコンパイラ型です。
  記述は C や Basicと同じ種類の方式です。  LISPと比べるならばですが

Delphi と VC++は似てるのは、単に Windows用のネイテブコンパイラである
事くらいで、違う事の方が多く違いはあげられません
0103Del初心者NGNG
>>102
ありがとうございます。
0104Delあめ猫にゃNGNG
>>96 面白いかも

 実行時型情報に入るようにプロパティに登録して、変数名=値をファイルに書き出す
ようにしたら便利かも・・・・

でも、それローカル変数でやると最適化が効かないかもしれない
0105デフォルトの名無しさんNGNG
Rar形式で圧縮かましたいです。
Rar用の圧縮・展開ルーチンを収めたDLLあるかとぞんじます。
使い方を教えれ。エレ。エレ。エレ。

おねがいします。
0106デフォルトの名無しさんNGNG
ここで調べたら?
http://www.csdinc.co.jp/archiver/index.html

圧縮ルーチンは優良だと思ったけど。
0107デフォルトの名無しさんNGNG
質問です。
下の様なコード実行するとnew()でエラーが出るんですが
ヘルプ見る限り問題ないように思うんですが何処がおかしいのでしょうか?
サパーリ分かりません‥‥鬱だ‥‥

pFILE_DATA = ^FILE_DATA;
FILE_DATA = record
FileName: String;
Size: Integer;
Date: String;
end;

function AddFileList( const fileName: String): Integer;
var
NewItem: pFILE_DATA;
begin
new(NewItem);
NewItem^.FileName := fileName;
{ 以下略 }
end;

それとファイルのリストを保持する場合、TListに格納して変更があった時にUI側のListViewを更新するのと
直接ListViewに格納してそこから値を取り出すのとでは(Delphiでは)どちらが一般的なんでしょうか?
0108デフォルトの名無しさんNGNG
>↑
どんなエラーば出るの?
0109107NGNG
「Variants.pasが見つからねぇぞゴルァ(゚Д゚)」
です。。

Personalなんで手も足も尻尾も出ません。(泣
0110デフォルトの名無しさんNGNG
とりあえずパッチ当てたら?
0111デフォルトの名無しさんNGNG
>107
ん〜、そのエラーが new(NewItem); の行で発生するのかな?
0112デフォルトの名無しさんNGNG
>>109
ソースがないのでソースコードを追ってのデバッグができないというだけ。
さっくり無視(I)すれ。
0113DelフサギコNGNG

  ∧,,∧     / usesにVariantを追加するのかな?
 ミ,,゚Д゚彡  <
  U  U    \
〜ミ  ミ
  ∪∪

某NewsGroupeでこんな投稿があります、"Delphi6 の ライブラリが全てデバッグ版!?"
デバッグ版だとVCLソースをトレースしようとするので
ソスなしのPersonalはUp1のインストは必須です
0114107NGNG
>>111
さいです。
上下にMessageBox()はさんで確認(藁してます。

>>113
現在40%(泣)メタル線返せ〜<みかか
0115デフォルトの名無しさんNGNG
>>114
ン?実行時に出るのか?
レスを読む限りコンパイルエラーになりそうだが。
0116107NGNG
とりあえずアップデートして解決。
エラーの原因はむしろMessageBoxのhwndにCの感覚でNULLを入れてたのが不味かった模様‥‥

‥‥逝ってきます‥‥
0117デフォルトの名無しさんNGNG
>99
つーか、『識別子定義の表示』があるからなあ。型わかるし。
まあ、マウスでしかポップアップされないから、それがイヤなんだろうけど
# ていうか、この機能はキーボードからも出来てほしい・・・
0118デフォルトの名無しさんNGNG
>>117
キーボードからできるとして、どのキーに割り当てればよいと思う?
もうほとんどの組み合わせが使われてしまっているしね。
0119デフォルトの名無しさんNGNG
質問です。

デバッグの際、特定のコードで発生する例外では止めないようにするには
どうしたらよいのでしょうか?
意図的に例外を発生させていて、例外を発生する状態の方がむしろ正常なのです。

調べてもよく分からないので・・・よろしくお願いします。
0120デフォルトの名無しさんNGNG
>>119 ツール -> デバッカオプション で止めないように出来ます

興味があるのですが、
常に例外を発生させるようなコードというのはどういうものでしょう?
0121デフォルトの名無しさんNGNG
オプション設定で無視する例外を設定出来るYO!
0122( ´∀`)さん ◆Monar0j6 NGNG
>>119
まず常に例外を発生させるコーディングスタイルは
見直すべきと思われ。
どういうコードか書けばここに居る人が教えてくれるかもよ。
0123( ´∀`)さん ◆Monar0j6 NGNG
あ、もし例外が発生したときをシミュレートしてコードから
意図的に例外を発生させ、耐障害性とかエラー処理を
テストしてるんだったらごめん。
0124119NGNG
>>120-121 ありがとうございます

>常に例外を発生させるようなコードというのはどういうものでしょう?
オフコンにFTPでファイルを送るのですが
オフコン側ではそのファイルを処理してから消去します。
オフコンがそのファイルを未処理の場合はファイルを送ってはいけません。

そこで
「FTPで前に送ったファイルをGETしてみて
 失敗した場合(ファイルがない場合)にのみ処理を続ける」
という具合にしてみたわけです。
0125デフォルトの名無しさんNGNG
例外ってスピード速いし、普通に使って問題無いんだYO!

例外じゃなく、戻り値でエラー判断なんかやってるコードが問題だと思われ。
0126119NGNG
>>122-123 レスありがとうございます
>>125 フォローしていただきありがとうございます
0127デフォルトの名無しさんNGNG
>>124 それは 失敗した場合に例外を自分で出してるんだよね?
   そういう用途ならAbort でいいんじゃない

Abortならデバッカにひっかからないし
0128( ´∀`)さん ◆Monar0j6 NGNG
>>125
>例外ってスピード速いし、普通に使って問題無いんだYO!
そんなに早いもんだったのか、知らんかったよ。
>>119サソ、スマソ。

なんかどっかで実行中のプログラムの例外を補足して
ログとるツールがあったような記憶があって(曖昧でゴメソ)、
それで気持ち悪いなぁとか思ってね。

>例外じゃなく、戻り値でエラー判断なんかやってるコードが問題だと思われ。
だけど、Win32APIとかは戻り値でしかエラーの有無を判定できないと思われ…
0129119NGNG
>>127
サイレント例外は気がつきませんでした。
ありがとうございます。早速やってみます。
0130DelフサギコNGNG
 自分で例外発生させているなら
 継承した例外を発生させてIDEにそれを無視させるとか

 VCLが発生させる例外なら
 ブレークポイント2つで上下はさみ
 その間だけ例外ムシさせる方法があるぞよ

 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
   ∧,,∧   
  ミ,,゚Д゚彡∬
   〃  つ旦O
 〜ミ,,,n,,n[ ̄ ̄ ̄.]
        ̄ ̄ ̄
0131デフォルトの名無しさんNGNG
>それとファイルのリストを保持する場合、TListに格納して変更があった時
>にUI側のListViewを更新するのと
>直接ListViewに格納してそこから値を取り出すのとでは(Delphiでは)
>どちらが一般的なんでしょうか?

俺ならば、UpdateFileList みたいなメソッドつくっておいて、
リスト内容を更新するたびにそれを呼び出す。
0132デフォルトの名無しさんNGNG
ちゃうちゃう。
IDE内から実行しているから、例外でややこしいことになるのよ。
コンパイルして、エクスプローラから直接実行ファイルを
実行するようにすれば、何の問題もない。
0133Delphi6 Enterprise の自慢NGNG
いやあ、多機能っていいね!
コンポーネントいろいろついてくるし!
0134DelフサギコNGNG
         _________
  ∧,,∧   / >>131
 ミ,,゚Д゚彡<  TListなどにて内部データ構造を格納しつつ、
  ミつ つ  \ そのItemをListViewのTListItem.Dataと関連付けるのがいいかも
〜ミ  ミ.     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  U U  チョット手間かニャ
0135119NGNG
>>130
Indyが出す例外なので
> VCLが発生させる例外なら
> ブレークポイント2つで上下はさみ
> その間だけ例外ムシさせる方法があるぞよ
これを試してみます。
ありがとうございました。
0136デフォルトの名無しさんNGNG
256色のBMPファイルを使いたいです。
1.256色のBMPファイルからパレットを取得する方法(pal[256]という変数に取得したい。)
2.他のBMP画像を読み込み、上記1で取得したpal[256]のパレットにする方法。
が、知りたいです。
ご存知の方がいたら教えてください!
0137デフォルトの名無しさんNGNG
procedure ParettoWoToru(var Paretto:array [0..255] of TColor; ABitmap:TBitmap);
var
 p:PByteArray;
 x,y:Integer;
begin
 for y:=0 to ABitmap.Height-1 do
 begin
  p := ABitmap.ScanLine[y];
  for x:=0 to ABitmap.Width-1 do
   Paretto[x] := p[x];
 end;
end;
0138デフォルトの名無しさんNGNG
>>135
Indy が出す例外は、原則 IdException.pas で定義されている EIdException から
継承された例外クラスを使っている。だから「言語固有の例外 - 無視する例外の種類」
に EIdException を追加すれば、Indy 固有の例外で IDE が停止することは無くなる。
0139デフォルトの名無しさんNGNG
>>137
パレットってなんだか知っている?
Paretto -> Palette
0140デフォルトの名無しさんNGNG
パレット。256色モード時に色情報を格納。
各ピクセルにはパレット番号を格納。

それがなにか。
0141119NGNG
>>138
ありがとうございます。うまく行きました。
0142デフォルトの名無しさんNGNG
137 はネタのつもりだろうか?
0143デフォルトの名無しさんNGNG
136です。

>>137
ネタですか?ネタですよね!?
ネタでなければ、プログラムがバグっている&やろうとしていることが
違うと思います。

自分としては、>>140と同じ意味でパレットという言葉を使っています。

で、フルカラーモードで、256色ビットマップを扱うときに、
1.256色のBMPファイルからパレットを取得する方法(pal[256]という変数に取得したい。)
->BMPのファイルを読んで画面に表示して、その画像のパレットを変数palに代入したい。
というのをどうやるのかが、知りたいです。
よろしくおねがいします。
0144ねこまNGNG
GetPaletteEntries

あとは TNkDIB のソースでも見れ.
0145117NGNG
>>118
識別子の上でCtrl+Space。
関数の引数を見る(=補助情報を得る)のと同じ感覚で使いたい。
0146117NGNG
メンゴ。Ctrl+Shift+Spaceだ。
0147デフォルトの名無しさんNGNG
つーかさ、ならば256色時に
Scanlineを使って得られる値はなんなのさ。
0148デフォルトの名無しさんNGNG
それよりちょっと聞いてくれよ。
入力支援に1行ヒントってないものかね。

THoge = class
 ....
 procedure Hoge(x:Integer);{$HINT '引数 x をつかって〜する'}

てな風に書くと、
入力支援時、リストに

procedure THoge.Hoge(x:Integer) 引数 x をつかって〜する

つーふうにでてくると。
0149デフォルトの名無しさんNGNG
やるなら普通にコメントでいいんでは。
VCだと
struct foo{
 int bar; // hoge ←hogeがTIPヘルプで表示
}
ってできる
0150デフォルトの名無しさんNGNG
>>149
DELでそれできる?
0151ねこまNGNG
>>147
パレット番号

「ならば」とは何に対して言っているのか?
0152デフォルトの名無しさんNGNG
>>151
>ネタでなければ、プログラムがバグっている&やろうとしていることが
>違うと思います。
0153117NGNG
>>149
すごく(・∀・)イイ!
0154デフォルトの名無しさんNGNG
それなら変数名とか関数名だけで判るようにしとく方がいいと思うのは・・・俺が年寄りなった証拠?
0155デフォルトの名無しさんNGNG
>>154
いや、それでも分かりにくい場合ってあるでしょ?
0156 ◆YxrNykuM NGNG
>154
ライブラリとかにあると嬉しいかも。
0157デフォルトの名無しさんNGNG
>>144
GetPaletteEntries調べてみたのですがVBの解説しか
みつからなかったです。Delphiのヘルプにもないところをみると
APIか何かなのでしょうか?
パレット詳しい方いたら、教えてほしいです。
0158デフォルトの名無しさんNGNG
http://www2.big.or.jp/~osamu/Delphi/Tips/key.cgi?key=3

// パレットの色を取得
GetPaletteEntries(bm.Palette, 0, PalSize-1, pal.palPalEntry);

ってところか?

GetPaletteEntries に関しては
http://www.microsoft.com/japan/developer/library/jpgdipf/_win32_getpaletteentries.htm
ここを。
0159117NGNG
>>154
本末転倒なの
0160デフォルトの名無しさんNGNG
D6パーソナルって DsgnIntf 無いの?

自作のコンポD6で使いたいんだけど ヘルプにあるWinEditors ユニットも無いし
DesignEditors.ini なんてのがdocディレクトリにあるけど??

D5Proの時からDsgnIntfが変な所にあるなと思ってたけど、
なんかコンポーネントはコンパイル済みにしないとダメって事になったのかな?
それともD6パーソナル無料化の為に わざと不便にしてるのかな?
0161デフォルトの名無しさんNGNG
インターフェイスが分かってるようで理解できてないような、そんな
気がする今日この頃。

凡庸画像フォーマットを実現するには、

TCustomImage = interface
public
 procedure LoadFromFile(〜);
 procedure SaveToFile(〜);
 procedure CopyFrom(〜);
 property Pixels[x,y]:Integer 〜;
end;
みたいなインターフェイスを作ってやれば、
内部でどのような画像の表現方法を取っていても、
呼び出して利用するほうのコードを変更する必要はないということですか。

たとえば、これまでビットマップだったものを
処理速度の向上を理由に、配列にいろ情報を格納するように変更した
TPixelArrayImage なんて形式に変えても、利用するほうの
コードは変更する必要がないと。
0162デフォルトの名無しさんNGNG
>>160
Delphi4 の時から、デザイン時ライブラリを分割してね。って書かれているのに
いまだにこういう質問が出てくるとは..

Help 読みなさい
0163DelフサギコNGNG
   ∧,,∧      / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ミ,,゚Д゚彡  <  自分で体感しないと知らないものです
  ミ つ且~~   \___________
〜ミ,,,,,, ,,ミ キビシイッス>>162さん

プロパチエヂタまでこだわって作っている人は少なそう。
こだわらなくてテキトに作っている人はD6になったとたんつまづーきますね。
フサも2週間前くらいに思いっきりツマヅイタ

>>160さん、とりあえず、Personalはつらそう……
ご検討を祈ります。

プロパティエディタ系コード(uses Designなんとか)
は実行時コンポーネントコードとは別ユニットにしましょう。


あと、TEditorの作者さま...
プロパティエディタ問題なんとかしてください。
フサの勘違いかもしれないけど、
思いっきりD6DsgnIntf問題にひっかかってません?
0164160NGNG
>>162 スマン。奇数時しかバージョンアップしない不良ユーザなもんで

ヘルプってこれだよな?
>DSGNINTF.DCU は Delphi に付属しなくなりました。したがって,コンポーネント開発者は
>設計時コードを実行時コードとは別のユニットに分離することを考える必要があります。
>実行時コードでは,それらのユニットを参照しないようにしてください。
>それが不可能な場合は,\source\toolsapi\ ディレクトリにある DSGNINTF.PAS をコンパイル
>することが可能です。ただし,この方法は一時の間に合わせとして提供されるもので,
>将来のリリースでは提供されない可能性があります。
>また,ライセンス契約の条項により,インプライズ社が所有するソースコードに基づく DCU
>を配布することは,そのコードがどのように提供されたかに関係なく,
>許可されないことに注意してください。
設計時ユニットと別けるってのは、単にプロパティエディとかを別ユニットに別けろって事だよな?
てことは、どっちにしたって、コンポソースがプロパティエディタを使う場合はパーソナルだ
けじゃ使えないって事だな・・・まあそんな制限無いと無料で配れないか・・・

 使ってみて便利だったらバージョンアップしようかと思ったけど、俺はVer7まで待つわ
0165デフォルトの名無しさんNGNG
>>コンポソースがプロパティエディタを使う場合はパーソナルだ
けじゃ使えないって事だな

どうしてそういう結論になる?設計時パケージに分離してそっちで
designide60.bpl を必須パッケージとして指定すればおわり。

Personal でもコンポ作成/インストールできるって。
0166160NGNG
>>165
うーん。方法があるのか?
DSGNINTFで使ってるのは RegisterPropertyEditor だけだから
 これを別ユニットにして、別に設計時パッケージに入れろって事だよな?

 自分のコンポーネントをuses して、RegisterPropertyEditorしてる
だけのソースを作ってみてプロジェクトファイルを弄ってみたけど、
やっぱりコンパイル出来ない。

 スマン。どうやってコンパイルしたらいいか教えてくれ
0167デフォルトの名無しさんNGNG
最近VCLってつかわないよ。だからEXEサイズ60kbyteいかだ
D6personalよりD5learningのほうが使用権が自由でよいなぁ
0168デフォルトの名無しさんNGNG
perl使えよ
0169デフォルトの名無しさんNGNG
IndyってフリーなのにどうしてD6personalに入れないかなぁ?
Windowsの場合非同期ソケットのほうがいいのわかってるのに
今非同期ソケットやってるのってICSとFastnetだけ、SynapseもIndyも
スレッド使いすぎだ

というよりなんか似たようなコンポーネントがごちゃごちゃしすぎだD6
0170デフォルトの名無しさんNGNG
>>166
>やっぱりコンパイル出来ない。
エラーはなんと?
0171160NGNG
あ!
 もしかして、設計時コンポ無くても実行ファイルは作れるだろうという意味か?
  そういう意味なら確かに作れたよ。
0172160NGNG
エラーは当然 DSGNINTF が無い。
 で、これを消せば
RegisterPropertyEditor が無いが出るよ
0173デフォルトの名無しさんNGNG
>>171
そうだね。多分すでに正解を手にしていると思う。
「設計時コンポ」ではなく「設計時パッケージ」ね。

設計時パッケージは IDE のみが使う。プロパティエディタも IDE のみ。
実行時パッケージおよびコンポーネントのユニットは設計時パッケージやデザイン用
ツールとは分離できる。
0174デフォルトの名無しさんNGNG
>>173
そこまでできているのなら、分離した設計時パッケージに
designide を追加すれば designide60.bpl が DSGNINTF を
提供してくれる。

デザインパッケージの実コード。
登録やプロパティエディタを定義。

unit x;

interface

implementation

uses DesignIntf, MyComp;

begin
 RegisterPropertyEditor( TypeInfo(TMyComp), TMyComp, 'Caption', nil); // nil にはプロパティエディタのコードが入るはず。
end.


Package1.dpk の部分

requires
 rtl,
 designide;

contains
 x in 'x.pas';
end.
0175160NGNG
>.174 ありがとう! 出来たよ。

dpkを開いて requires の下に
 rtl,
 designide,
 vcl:
と挟んで入れたらコンパイル出来た。 いやホントありがとう
0176160NGNG
しかし、今度はD5でコンパイルできなくなった

DsgnIntf/DsgnIntfを切り替えるのは {$IFDEF }でいいとして

  designide と dsnide50  はどうやったらいいんだろ?
まあ別名で作ればいいか
0177デフォルトの名無しさんNGNG
*.dpk だけはコンパイラバージョンごとに分けることを勧める。
幸い今後は DLL 名とパッケージ名が分離しパッケージ名には
バージョン番号が含まれなくなったから、今回だけですむ。はずだ。
0178デフォルトの名無しさんNGNG
>>169
Synapse のどこにスレッドが使われてる?
0179デフォルトの名無しさんNGNG
>>169
Indy は「スレッドが使えるんだ。ブロッキングで何が悪い?」という思想だから
スレッド使いすぎという批判は筋違い。
0180デフォルトの名無しさんNGNG
[666]
スマソ、誤送信
0181デフォルトの名無しさんNGNG
見る見るうちにモナー下がっちゃった。
やっぱり踊って歌える ギコのほうが人気高いんね。
0182デフォルトの名無しさんNGNG
しかし >>174 の情報は重要だからアゲ 
■ このスレッドは過去ログ倉庫に格納されています