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

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

■ このスレッドは過去ログ倉庫に格納されています
0001DELモナNGNG
DELモナーがどんな厨房疑問でもやさしく答えます。
DELモナは時に私であり、時には別の人。
他のスレに書き込んで罵倒される前に、まずここで質問しよう。
 ∧ ∧
( ´∀`)(    )
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 の情報は重要だからアゲ 
0183sNGNG
sage
0184デフォルトの名無しさんNGNG
あげ
0185デフォルトの名無しさんNGNG
Delphi5か6安売りしてるところはありますか?イクラですか?
0186デフォルトの名無しさんNGNG
>>185
Delphi6 は www.borland.co.jp からタダでDLできま。
0187デフォルトの名無しさんNGNG
ビジュアルスタジオエンタープライズエディションロクテンレイの
アカデミックばんはさんまんごせんほどでかえるからマイクロソ
フトマンセー
ボーランドはくがくせいにはきびしい成り
0188185NGNG
データベースコンポが無いよう>>186
学生であの膨大なVisualStudioは酷だよ。学生は根気が無いんだから>>187
0189通りすがりNGNG
>>187
Professionalが3万で買えるだろ。
BorlandのEnterpriseと比較するならMSDNじゃないと。
単純比較はできんが。
0190デフォルトの名無しさんNGNG
D6 Shell コントロール修正版発表記念上げ。

http://codecentral.borland.com/codecentral/ccweb.exe/listing?id=16739
0191デフォルトの名無しさんNGNG
アクティブデスクトップのように、
ウィンドウの位置を

←手前  奥→
タスクバー>デスクトップのアイコン>ウィンドウ>壁紙
の位置に持っていくことは出来ませんか。
0192デフォルトの名無しさんNGNG
スレッドを使っているのですが、スレッドからVCLを触る場合はSynchronizeをつかいますよね。
逆にVCL側からスレッドを触るにはどうすればよいのでしょうか。
スレッド側からSynchronizeでポーリングしなければならないのでしょうか。
それとも、ふつうにスレッド(のメンバ)を使っていい、、、わけないですよね。
0193192NGNG
Indyのソケットを使っているのですがスレッドに渡したソケットをメインスレッド側からも使ってイイ
のかなということです。Indyの実装によるのかな
0194デフォルトの名無しさんNGNG
まったくの初心者なものでつかぬことをお伺いしますが、
あるレコード型の中のフィールドに、
そのレコード型自身を指すポインタを指定するにはどうしたら良いんでしょうか?
Cで言えば、

struct CELL{
  int     value;
  struct CELL *before;
  struct CELL *next;
};

みたいなことをやりたいんですが、これをそのままやろうとすると
「〜型の宣言が完了していません」とコンパイラに怒られてしまいます。
まさか「汎用のpointer型を使うしかない」なんてことはないと思うんですが…
0195デフォルトの名無しさんNGNG
>>194
CELL = record; // コレ
PCELL = ^CELL;
CELL = record
value: integer;
before: PCELL;
next: PCELL;
end;

こんな感じ?
0196デフォルトの名無しさんNGNG
あるいは最初からクラスにするとか
type
  TCell = class
  public
    Value: Integer;
    Prev, Next: TCell;
  end;
0197デフォルトの名無しさんNGNG
>>195、>>196
早速のお答え、ありがとうございます。
レコード型で >>195 のようなforward宣言をしようとしても
コンパイラが受け付けてくれないので、
どうやらforward宣言が効くのはクラスだけみたいです。
ボーランドとしては、レコード型なんか使わずにクラスを使えってことなのかな…
とにかく、どうもありがとうございました。
0198デフォルトの名無しさんNGNG
CELL = record; // コレ
それいらない。

>PCELL = ^CELL;
>CELL = record
forward しなくてもこれでコンパイルできるでしょ?
Borland 以前、原典の Pascal から、^でポインタ型を定義するときだけ
未定義の型に対する参照が許されるんです。
0199デフォルトの名無しさんNGNG
PCell = ^TCell;
TCell = record
 ・・・
がDelphiらしいかな・・・クラスとレコードの区別がつかんけど
0200デフォルトの名無しさんNGNG
おねがいです、以下の仕様で最速の実装をしてください。
なお、宿題とは関係ありません。自分で書いたコードもあります。
要望があれば公開します。
私が作ったコードでは、1024*786*24BITで
15−20秒ほどかかります

{ Source で指定された画像を Scale 倍したものを
Dest に描画する。Dest のサイズも同時に設定される。
拡大縮小時には線形補完を用いて、そこそこ高画質にする。
Source は 24Bit カラーである事を前提とする }

function Zoom(Source,Dest:TBItmap; Scale:Extended);begin
 if Scale = 1 then
  Dest.Assign( Source );
  Exit;
 end;

 Dest.Width := Floor( Source.Width * Scale );
 Dest.Height := Floor( Source.Height * Scale );

 { なんたらかんたら }

end;
0201デフォルトの名無しさんNGNG
>>200
>最速の実装をしてください
が、ちと気に入らないが・・・。
>自分で書いたコードもあります。
とのことなので、まず自分のソースをあげてみよう。
そこから悪いところを直していけば勉強にもなる。
0202デフォルトの名無しさんNGNG
始めまして、私、Delphi3を使用しているのですが、
Delphi5 と Delphi6 にアップグレードしようしているのですが、

Delphi3→Delphi5

Delphi5→Delphi6

以上のように移行するにあたって、それぞれのメリット、
追加されたものがあれば、教えてください。
0203200NGNG
ウプしてみました。
もともと TBitmapEx というクラスのメソッドだったのですが、
関係有るメソッド、関数だけを取り出して一つのユニットに
まとめました。

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1004364661&res=1
0204デフォルトの名無しさんNGNG
>>200
ブロックに分けて、テーブルを使うのはどぉ?
0205デフォルトの名無しさんNGNG
テーブルというと、ピクセルの重なり具合というか、
ピクセルの色がどの程度影響しているかという指数というか、
そういう奴をテーブルにするという事ですか?
0206デフォルトの名無しさんNGNG
例えば、
1,2,3,4
5,6,7,8
って分けて、1で計算したのを2以降で使うようにするの。
0207デフォルトの名無しさんNGNG
>>203
揚げ足とり敵に細かいところを責めてみるか
・SetPixels、GetPixels、ComplementedBrightRGB等のループ内
 各関数をインライン展開して、オーバーヘッドを抑える
・Canvas.Pixels[x,y]やScanLine[y];は重いので使わずに、
 bit列へのポインタもらって自力で描いたり書いたり読んだりする
 # Canvas.Pixels[]など、速度が必要なときに使うのは論外中の論外!!
・浮動小数点は比較的重いので、固定小数点にする
 # 最近はあまり意味ないかもな
0208デフォルトの名無しさんNGNG
>>207
おお、どうもありがとう
早速修正したいとおもいます。

ところで…

>ScanLine[y];は重いので使わずに、
>bit列へのポインタもらって

今まで ScanLine[y] っていうのは y 行の
ピクセルデータへのポインタを得るものだと思っていたのですが、
そうではないという事ですか?
0209デフォルトの名無しさんNGNG
>207
自分で読み書きってことはCreateDIBSectionを使うってことなのかな?
ttp://www.sm.rim.or.jp/~shishido/dibsec.html

俺、Scanline使って遅いなあとか思ってたけど、これ使えばもっと速くなるかな。
(でも、ScanLineでもかなり速かったような気もするんだが。)
どのくらい速くなるのか解説きぼん
0210デフォルトの名無しさんNGNG
あの混線時にダウソしたけどになやっていいかわかりません。

とりあえず5もくならべのつくりかた教えて。

いままでエディタ+コマンドラインでコンパイルという
ことしかやってません。
0211デフォルトの名無しさんNGNG
さ、三目並べにしておけ・・・
というかまずはTmemoを使ってメモ帳作るところから始めた方が良いようなー

3目並べならTlabel のCaption使うだけで作っても良いかも。
0212デフォルトの名無しさんNGNG
Delphi4 or 5を叩き売りしてる店無いかな?age
0213デフォルトの名無しさんNGNG
5目並べは、画面にTStringGridを貼り付けて
 ○●を入れて貰って
後はなんとか頑張る
0214デフォルトの名無しさんNGNG
五目並べについては↓で丁度やってる

おまえら、五目並べ作ってみろよ!!!
http://pc.2ch.net/test/read.cgi/prog/1004278856/l50
0215Sock2に挑戦NGNG
すいませんサーバサービスで質問です。

WSAEventSelect()によって非同期によるクライアント待ちをする場合、
accept()実行後、
WSAEnumNetworkEvents()でFD_ACCEPTが成功したかどうか調べたいんですが、
その際、本来accept()の戻り値であるsocketハンドルは
どうやって取得すればいいのでしょう?

それとも
WSAEnumNetworkEvents()によってFD_ACCEPTを確認してから
accept()を実行するのでしょうか?
0216デフォルトの名無しさんNGNG
>>209
TBitmap自体、内部的にDIB使ってるけどScanLineの連続呼び出しはやっぱ重い。
検証用に、無理やりTBitmap継承してScanline使わないようにしたクラスが手元にあるんだが、
不完全だしさらすのいやだからなあ(笑
どうしてもっていうなら、さらし用のつくってみるけど。
いや、でも確実に速くなるよ。
02172000NGNG
ピクセルへ書き込み及び情報取得部分だけでも公開してくれませんか?
最低限のことさえ教えていただければ、自力でなんとかします。
0218216NGNG
ありゃ。さらし用のTBitmap派生クラスを作ってみたが、速度はちっとも変わらんだ。
おかしいな・・・。
0219209NGNG
>216
ScanLineをキャッシュすれば、多少は速くなる。
ttp://homepage1.nifty.com/beny/tips/dib02.html

まあ、ScanLineの方が分かりやすいし・・・。
0220216NGNG
あ、できたできた。
と思ったら>>219とほぼおなじじゃーん。
ガーソ。

一応あげとく。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1004364661&res=2
0221デフォルトの名無しさんNGNG
 ∧  ∧
( ◎_◎)
(    )
24bitではなく32BITにしてあるのは、ダブルワードの
インクリメントでちょうど1ピクセル分移動できるようにするためですか。
0222デフォルトの名無しさんNGNG
>>219-220
左上からなめるようにスキャンする場合は
効率が良いかもしれないけど、ランダムに
アクセスするような場合ってどうよ?
0223209NGNG
>222
それも、キャッシュするだけでちょいっと速くなるけど
やっぱ遅くなるね。ぼかしで広い範囲指定した日には地獄。
0224216NGNG
上げたコード、メモリ解放してないや。最悪ヽ(`Д´)ノ

>>221
そんなところで。

>>222
気持ちほど速くなる(藁
つーことは、今回の件ではあまり高速化には貢献できないことになりますか。
0225デフォルトの名無しさんNGNG
完全に2次元配列に入れてから処理をすれば…
0226デフォルトの名無しさんNGNG
★解決した問題はこちらへ★

2chで解決したDelphi質問をFAQ収集するスレ
http://pc.2ch.net/test/read.cgi/tech/1004501183/
0227デフォルトの名無しさんNGNG

DHCPサーバーからDNSサーバーのアドレスを取得したいんですけど、
出来ればサンプルが欲しい…。どなたか情報お持ちでないでしょうか?
0228デフォルトの名無しさんNGNG
Scanline プロパティが遅いのは、GDIFlush API を呼び出したりと
いろいろコストがかかる処理しているからだね。

俺は ScanLine から次のラインへのオフセットを計算して
以後それを使って高速化している。

var
 ScanLinePtr0: Pointer;
 ScanLineOffset: Longint;
 Y: Longint;
 P: Pointer;
begin
 { 画像の任意のラインのポインタを計算するための準備 }
 ScanLinePtr0 := Bitmap.ScanLine[0];
 if Bitmap.Height>1 then
  ScanLineOffset := Integer(Bitmap.ScanLine[1])-Integer(Bitmap.ScanLine[0])
 else
  ScanLineOffset := 0;

{ 各ラインのポインタを求める }
 for Y:=0 to Bitmap.Height-1 do
 begin
  P := Pointer(Integer(ScanLinePtr0)+ScanLineOffset*Y);
  // 取得したポインタPを使ってとりあえず何かしよう
 end;
end;
0229デフォルトの名無しさんNGNG
>>228
これはいいこと聞いた。感謝上げ。

…したいんだが荒らし、批判その他避けで下げ。
0230デフォルトの名無しさんNGNG
ネットワーク関係に困ったらIndyを使え。
何でも入ってるしソースから盗むこともできる
0231デフォルトの名無しさんNGNG
>228
ポインタの使い方が分からん。参考例全文をきぼん。
Delphi向けのポインタの詳しい解説サイトってないのかな。
0232デフォルトの名無しさんNGNG
>>231
http://user3.allnet.ne.jp/tadnakam/Delphi/delphi4/pascal/Pointer.htm
多分Cのポインタが分かっていれば、それと同程度に理解できるのでしょうが。
というわけでCのポインタ
http://member.nifty.ne.jp/maebashi/programmer/pointer.html
0233デフォルトの名無しさんNGNG
>232
ありがと
0234デフォルトの名無しさんNGNG
Delphi6 Enterprise 60日トライアル版を入手できるWebサイトはありませんか?
0235デフォルトの名無しさんNGNG
自分で作ったプログラムから、
他のアプリ(たとえば、かちゅ〜しゃ)を終了させるのってどうしたらいいの?
0236デフォルトの名無しさんNGNG
WM_CLOSE
0237デフォルトの名無しさんNGNG
>>235
Windows終了時にかちゅーしゃ終了させるアプリ作ってる?
需要あるから公開キボンヌ。
0238デフォルトの名無しさんNGNG
kill@cygwin
0239デフォルトの名無しさんNGNG
んーぐらい自分で作れドアホウ
0240235NGNG
>>236
    |うぇーん、どうしたらいいかわからないモナー
     ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      ∧_∧
     ( ´Д⊂ヽ
    ⊂    ノ
     人  Y
    し (_)
Googleで調べたら、
 PostMessage(Self.Handle, WM_CLOSE, 0, 0);
ってすると、自分自身を終了できるけど、
Self.Handleのとこの変え方(?)がわかんない・・・。
こういうのの使い方ってどうやって調べるの?

>>237
2ch依存しすぎてるんで、
一定時間したら強制終了させられたらいいかな、と。

>>238
cygwin(?)だと、一定時間後とかってできないですよね?

>>239
できたら代わりに作ってください。お願いします。
0241デフォルトの名無しさんNGNG
>>240
EnumProcessとかFindWindowとか
0242235NGNG
できましたー。
FindWindowを使って、
 FindWindow(nil,'かちゅ〜しゃ');
ってしたらできました。
(こんな方法で良いのか、わからないけど・・・)

あとはタイマーつけて頑張ります。
この度はありがとうございました。
0243デフォルトの名無しさんNGNG
「かちゅ〜しゃ」フォルダも引っかかるかも
0244デフォルトの名無しさんNGNG
      ,−-、
     / ̄ l |   / ̄ ̄ ̄ ̄ ̄
    ■■-っ < んなこたーない
    ´∀`/    \_____
   __/|Y/\.
 Ё|__ | /  |
     | У..  |
0245デフォルトの名無しさんNGNG
>>242
むしろ、
FindWindow('TKatjushaMainForm', nil);
のほうがいいかも…
0246235NGNG
皆様のおかげで無事完成いたしました。
かちゅ〜しゃ起動・終了の代わりに、
このソフトで起動・終了をさせなくちゃいけなかったり、
色々と使いづらいところもありますが、満足なできになりました。
ありがとうございました。
0247235NGNG
ちゃんとできたような気もするのでageてみました
http://members.tripod.co.jp/RtFchs/KatjuClose_1113.lzh
0248DelフサギコNGNG
   ∧,,∧   / ̄
\,,,,ミ,,゚Д゚彡 < sageでゴメンなさい。
⊂,,,,,,,,,つつ.   \_

かちゅのパスが取得できていないみたいですので
http://homepage1.nifty.com/beny/tips/other10.html
これみて、かちゅ起動時には
フルパスを自動取得できたらいいなあ。
0249デフォルトの名無しさんNGNG
>>248
NTだとそれじゃフルパスが取得できないんだよねw
0250DelフサギコNGNG
    ∧ ∧  ソデシタカ
    ミ ゚Д゚彡  ジョウホウ サンクスコ
  〜ミ,,,,uuミ
0251249NGNG
>>250
EnumProcesses
EnumProcessModules
GetModuleFileNameExA

を組み合わせて作る。
たしかこれ併用して9x/NTどちらでも
プロセスをフルパスで列挙可能な非VCLがあったんだが…

コンポのソースに書いてあったURLに飛ぼうとしたら404、
MSDNの検索でも結果に飛ぼうとしたら、んなページねぇぞゴルァ言われた…
具体的なURLは出せないスマソ。
0252デフォルトの名無しさんNGNG
>>251
BorlandのQ&Aで見た記憶がある。
C++用だったかも。
0253235NGNG
あぁ、サパーリわからん( ; ´д`)
(>>248で上げられてるのを、どう使ったらいいのかわからないレベル・・・)
レベル的に無理そうだし、OpenDialogでの取得で落ち着きます。
http://members.tripod.co.jp/RtFchs/KatjuClose_1119.lzh
0254デフォルトの名無しさんNGNG
http://pc.2ch.net/test/read.cgi/tech/995950803/l50
0255デフォルトの名無しさんNGNG
初心者質問なのですが、よろしくお願いします。
フォームを表示させる場合に、自動的に画面の中央に
表示させたいのですが、コーディングしないとダメなのでしょうか?
0256デフォルトの名無しさんNGNG
>>255
Form の Position プロパティのヘルプを読め!
0257255NGNG
>>256
Positionプロパティだったんですね、了解です。
0258デフォルトの名無しさんNGNG
ListViewコントロールをレポート形式で表示させているのですが、
データを追加するにはどうすればよいのでしょうか?
ヘルプにはAddItemにリンクが張られてなかったのですが・・・
0259デフォルトの名無しさんNGNG
>>258
VCL ソースを読んだら?
0260デフォルトの名無しさんNGNG
>>258
質問者がどこで引っかかっているのかがわからないが...

ListView1.AddItem(Item: String; AObject: TObject);
または
 with ListView1.Items.Add do
 begin
  Caption := 'XX';
 end;
こんな書き方は? Items.AddItem は第一引数の扱いが難しいから
あまり勧めない。
0261_NGNG
素直にこうすれば?

Item: TListItem;

Item := ListView1.Items.Add;
Item.プロパティ := 値;
0262デフォルトの名無しさんNGNG
>>261
おなじじゃん...
0263デフォルトの名無しさんNGNG
最近Delphi6Parsonalをダウンロードしました。
そこで、環境変数のPathを変更する機能を作ろうと思ったんですが、
読込方法しかわからず、書き込み方法がわかりません。
DelphiMLとか、WebでWin32APIとか検索したんですが、どうにも見つかりません。
知っている方、教えていただけませんか?
0264DelフサギコNGNG
>そこで、環境変数のPathを変更する機能を作ろうと思ったんですが、

   ∧,,∧   /
(,,,,,,,ミ,,゚Д゚彡 < 実は、かなり調べたけどフサにはわからなかったんだな。
⊂,,,,,,,,,つつ.   \
 もしかしてBATファイルで設定できないでしょうか?

 そしたら、テキストファイルとしてBATを作成して実行して削除すれば
 いいのかも....
0265DelフサギコNGNG
拾得
#define ENV_MAX 256 //特に根拠のない数字
char EnvOfTmp[ ENV_MAX ];
GetEnvironmentValiable( "TMP" , EnvOfTmp, ENV_MAX );

設定
SetEnvironmentValiable( "TMP", "C:\Windows\Temp" );

   ∧,∧     ,::  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ミ,,゚Д゚彡っ━'~  | 改めて調べたらいきなりわかった。
  ミ∪  ~,ノ    < BCBコードは訳しておくれ。
   ミ  '' ミ       \____________
   し'~し'

今は亡き、BCBサイト[ARAHIQS]のTipsですす。

試してないので、動作確認よろしう。
0266258NGNG
>>260
サンプルソースで理解できました。
ありがとうございます。
0267デフォルトの名無しさんNGNG
>>265
ありがとうございます!
早速試してみたんですが、未定義の識別子:'SetEnvironmentValiable'
と言われてしまいました。
現在GetEnvironmentValiableの方は動いております。
何か、Usesに加えたりすれば解決するのでしょうか?
0268名無しヘタぐらま ◆B18Bks.Y NGNG
>>258
文字列リストのObjectsプロパティのような
関連するデータへの参照ということでしたら
>>261さんの方法でもできますです.
レポート形式ということなので蛇足ながら
2つ目以降の列の設定のコードの例もあげるです.

procedure TForm1.Button1Click(Sender: TObject);
var
NewItem: TListItem;
begin
NewItem := ListView1.Items.Add;
NewItem.Caption := 'なんとか';
NewItem.Data := FMyNantokaObject; // データへの参照.
NewItem.SubItems.Add('さぶ1');
NewItem.SubItems.Add('さぶ2');
NewItem.SubItems.Add('さぶ3');
end;
0269DelフサギコNGNG
  ∧⊂ヽ, /
  ミ゚Д゚,ミ,ノ< ハニャーン
  ミ⊃ ,ミ  \
  ミ,  ,,ミ    >>267、あら、見つからないですね。ガセかしら。
  ⊂,,,ノ
    ∪
Windows.pasにはこんな風にかかれてるけど。
function SetEnvironmentVariable(lpName, lpValue: PChar): BOOL; stdcall;
0270デフォルトの名無しさんNGNG
>>265
ValiableじゃなくてVariable。lとr間違ってる
0271デフォルトの名無しさんNGNG
>>270
間違っていました(汗
修正したら動くようになりました!
フサギコさん、270さんありがとうございました。
0272デフォルトの名無しさんNGNG
初めて書き込みます。

現在テキストエディタを製作中なのですが、
作業中にTabを押してもメモ帳のようにカーソルが移動しません。
これはやはりOnKeyPressでそれ相応の処理をさせないと
いけないのでしょうか?(空白を入れる、など)
一通りTipsを探し回ってみたのですが、それに近い答えが見つからなかったもので…。

お願い致します。
0273DelフサギコNGNG

  ,,,,,,,,,,,,,∧,,∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′,,,,,,,ミ,,゚Д゚彡 < WantTabs
  UU""" U U   \_______________
0274デフォルトの名無しさんNGNG
フサギコさん有難うございます。解決致しました。
まさかプロパティだったとは…。

もう少し勉強してからお邪魔致します。
厨な質問申し訳ございませんでした。
■ このスレッドは過去ログ倉庫に格納されています