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

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

■ このスレッドは過去ログ倉庫に格納されています
0001DELモナーNGNG
01/10/15 11:36
DELモナーがどんな厨房疑問でもやさしく答えます。
DELモナは時に私であり、時には別の人。
他のスレに書き込んで罵倒される前に、まずここで質問しよう。
 ∧ ∧
( ´∀`)(    )

0153デフォルトの名無しさんNGNG
149の馬鹿っぷりにワラタ
0154デフォルトの名無しさんNGNG
>>152
全部買って12万程度だよ 全部買ったら?


DelphiによるWindowsプログラミング入門 綿貫 啓一 (著) <1995/12/1< 日刊工業新聞社 :¥1,845
Delphiプログラミング大全 Programmer’s SELECTION ジェフ ダンテマン (著),<1995/12/1< 翔泳社 :¥5,631
Delphiパーフェクトマニュアル―ボーランド公式 チャールズ カルバート (著),<1996/3/1< インプレス :¥5,631
やさしいDelphi 村上 宣寛 (著) <1997/6/1< 日刊工業新聞社 :¥2,200
Delphiで作る高速CGI 田原 孝 (著) <1998/12/1< エーアイ出版 :¥3,200
ここまでできる Borland Delphi4パワーガイド 小出 俊夫 (著),<1999/4/1< 秀和システム :¥2,800
Delphi Win32 APIリファレンス Ascii books John Ayres (著), 光田 秀 (翻訳) <1999/5/1< アスキー :¥8,800
使いながら覚える Borland Delphi4プログラミング入門 やさしいWindowsプログラミング 竹田 英雄 (著) <1999/5/1< エーアイ出版 :¥2,500
Delphi 4プログラミングバイブル マルコ カントウ (著),<1999/6/1< インプレス :¥5,680
Borland Delphi4オフィシャルコースウェア クライアントサーバシステム構築編 Inprise公式コースウェアシリーズ 真木 保 (著) <1999/7/1< アスキー :¥5,200
DelphiでWindowsゲームを作ろう! 青山 学 (著) <1999/7/1< ピアソン・エデュケーション :¥3,400
Delphi4プログラミング技法〈Vol.2〉コンポーネントとDBの実践テクニック Borland Press ザビエル パチェコ (著),<1999/8/1< ピアソン・エデュケーション :¥5,700
これで完璧!Delphi5裏技170選 金井 利美男 (著) <1999/10/1< エーアイ出版 :¥2,800
基礎からわかるDelphi5 三原 幸一 (著) <1999/10/1< 秀和システム :¥2,400
Delphi Object Pascalリファレンスブック アンク (著) <1999/11/1< 技術評論社 :¥2,480
Delphi5実践データベースプログラミング―DBコンポーネントとQuickReportの活用 田中 和明 (著) <2000/6/1< カットシステム :¥3,800
Delphiデータベースアプリケーション開発ガイド―データベースフレームワークから帳票作成、Oracle8i入門まで 三原 幸一 (著) <2000/6/1< 秀和システム :¥2,800
Delphi & C++Builder即戦力コンポーネントライブラリ―Windowsプログラミングの効率アップ 中島 信行 (著) <2001/1/1< CQ出版 :¥3,000
Delphi Win32 Graphics APIリファレンス ジョン アイレス (著),<2001/3/1< アスキー :¥8,800
Delphiクイックリファレンス レイ リシュナー (著),<2001/5/1< オライリー・ジャパン :¥4,500
Delphi 魔法のTIPS 500 Programmer's Bible Series EXPERTGIG開発室 <2001/8/31< エキスパートギグ :¥8,500
Delphi6プログラミングテクニック裏技180選+新機能20選 金井 利美男 (著) <2001/9/1< エーアイ出版 :¥2,980
VBユーザーのためのDelphi6プログラミング 佐藤 親一 (著) <2001/12/1< オーム社 :¥2,600
Delphi DB&Webプログラミング 松浦 健一郎 (著), 司 ゆき (著) <2001/12/1< ソフトバンクパブリッシング :¥3,200
Borland Delphi 6オフィシャルコースウェア (応用編) Borland official courseware series 井上 勉 (著) <2002/1/1< アスキー :¥4,800
Borland Delphi 6オフィシャルコースウェア (基礎編) Borland official courseware series 服部 誠 (著) <2002/1/1< アスキー :¥2,800
Delphiゲームプログラミングのエッセンス 日高 徹 (著) <2002/1/1< ソフトバンクパブリッシング :¥3,400
0155デフォルトの名無しさんNGNG
>DelphiプログラマのためのCGI入門―WebBrokerでらくらくプログラミング TRY COMPUTING BOOKS
>山本 秀樹 (著)

この本廃刊だけど良い本だと思ってるの自分だけかな?
0156デフォルトの名無しさんNGNG
>>155 それも持ってるよ。 
 良い本だと思うけど、 お勧め出来るかどうかはその人の経験とか色々で違うからな
0157デフォルトの名無しさんNGNG
>Delphiパーフェクトマニュアル―ボーランド公式 チャールズ カルバート (著),<1996/3/1< インプレス :¥5,631
これ、Delphi1用。

続編がDelphi2.0J 32ビットパワープログラミング。
いい本だけど、枕になる可能性もある諸刃の剣。初心者にはお薦めできない。

それ以降のは邦訳は出てないけど、原書の方はあるらしい。
0158デフォルトの名無しさんNGNG
Delphiって関数の戻り値とかはどうなってるの?
そもそも戻り値っていう概念が有るのだろうか・・・
0159147NGNG
>>154- >>157
ありがとうございます。
こんなにあるんですね・・・
とりあえずインプレスは対象からハズすことにします。
0160DelフサギコNGNG
  ∧,,∧     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ミ ゚Д゚ミ  < 何がいいたいん?>>158
 (ミ  ミつ)ビシッ\_________
〜ミ  ミ
  ∪ ∪ カオアラッテ デナオセ

function AAA: Integer;
begin
 Resutl := 666;
 //AAA := 666;
end;
0161デフォルトの名無しさんNGNG
とりあえず>>158には戻り値の無い関数を教えてもらいたい…
0162158NGNG
>>160
出直します・・・

>>161
Pascalって古いイメージ有るから
Basicみたいにサブルーチンしか無かったらなぁと思ったり
0163デフォルトの名無しさんNGNG
>>162
Cも古いですけど。
0164161NGNG
なるほど…確かにPascalは1623年生まれだからな…(とボケてみる)
0165デフォルトの名無しさんNGNG
C(hrist)は紀元前4年頃だっけ
0166デフォルトの名無しさんNGNG
TStringGrid では、一つのCellに表示できるのは1行だけですよね。
Borlandのサイトには複数行表示できる物が載っていますが、
WordWrapできる複数行 TStringGrid はどこかにないでしょうか。

今は TDrawGrid を継承して、自力で描画しています。ところが、
TStringGrid のように、各セルに文字列を関連付ける方法がわからなかったため、
OnDrawString というイベントを作って、その都度書きこむ文字列やフォントを
指定しています。
0167デフォルトの名無しさんNGNG
>>162
多子化Cの一年先輩だった気がする。
アセンブラマンセーのリッチーらにオモチャってコケにされたんだっけ?
0168Delphi初心者NGNG
すいません クラスメンバーの可視性で質問なのですが…
疑問�@
type
TForm2 = class(TForm)
Button1: TButton;
この場合Button1はパブリッシュメンバーになるのですよね?
疑問�A
type
TMyClass = class(TObject)
0169168=Delphi初心者NGNG
すみません 途中で投稿しました…(鬱
疑問�A
type
TMyClass = class(TObject)
 hoge : TList;
この場合hogeは何になるのでしょう?
{$M+}の時はバブリッシュ? それともいつでもパブリック?

特に問題は無いのですが気になって…
0170デフォルトの名無しさんNGNG
>>166
>OnDrawString というイベントを作って、その都度書きこむ文字列やフォントを
>指定しています。

そこまでできるならコンポーネントにできるだろうに。
抽象化能力が足りないのかな?でも自分で作って自分で使うのなら
それでも良いと思うよ。
0171デフォルトの名無しさんNGNG
ちょっとお聞きしたいのですが
タブを利用したプログラム(同じタブを沢山)で
オブジェクト(ボタンとかリストとか)を動的に作成したいのですが
その場合は
タブに含まれるオブジェクトを格納するクラスを作って
新しいタブを作るときに動的配列にそのクラスを生成すればいいのですか?
0172デフォルトの名無しさんNGNG
まずやって、それでダメなら聞いてみてください
0173DelフサギコNGNG
  ∧,,∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ミ,,゚Д゚彡 < 今日は冷えるね
  ,;゙  ミ     \_____________
 ミ.  ミ
/゛゛゛゛
>>168-169
�@publishというよりpublicですが
あまりButtonの属性は気にせずにどぞ。

DelphiIDEが管理する部分なので
自分でコード書くときはprivateとかpublicとか
に書くようにしませう。

�Aちゃんとprivateとかpublicのトコに移動
させて、くださいな。

publicとpublishってオブジェインスペクタに現れる
かどうかだけだからButtonやhogeは
public族生だと思われ。
0174168=Delphi初心者NGNG
>>172
あわわ、すみません とりあえずRTTIが有るのか調べてみます。
0175デフォルトの名無しさんNGNG
>>172
各オブジェクトのparentをTABページにすること。
0176168=Delphi初心者 NGNG
>>173 Delフサギコさん
すみません 寒い質問ばかりで…(汗

色々調べたのですがやはり{$M}に左右される様です。
{$M+}だとパブリッシュ で{$M-}でパブリックのようです。

>publicとpublishってオブジェインスペクタに現れる
>かどうかだけだからButtonやhogeは
>public族生だと思われ。

これはpublishedだとメンバが呼び出されていなくても
実行コードに埋め込まれる点を除いて同じようです。
#RTTIに載るメンバのコードは必ず実行コードに含まれるようです。

HELPには{$M-}の状態で{$M+}でコンパイルされたクラスの
派生クラス以外はPublishedメンバを作れませんと書いてあるし…
(Del5)

うーん TP3→TP5→Del1→Del5 と某社の使ってますが
HELPの難解度は変わりませんね(w
0177DelフサギコNGNG
 いや、そうではなくて
 ホントに気温が低いって言いたいだけです。

  . ̄ ̄∨ ̄ ̄ ̄
    . ∧,,∧  質問内容はスッキシして
     ミ ゚Д゚ ミ  いいと思うです
     (ミ  ミ)  というか、凄い事追求されてますのね。
    〜ミ  ミ
      ∪''∪ ゴメンヨ マギラワシイ コメントデ

 俺の部屋、1Fなので
 床下から冷えがね。結構、くるのよ
 ああ、寒い寒いわ〜
0178名無しヘタぐらま ◆B18Bks.Y NGNG
>>166
ボーランドのサイトにあるTipsってこれですよね.
http://www.borland.co.jp/tips/delphi/dh011/sgrid_1.html
ワードラップは壱カ所いぢるだけで出来ます.

Options := DT_EDITCONTROL;

これを

Options := DT_NOPREFIX or DT_WORDBRAK;

に変えればOK(のはず).

        ☆        ☆

DT_WORDBRAK がワードラップ指定で改行コードの処理もやってくれます.
DT_NOPREFIX はワードラップには全く関係ありませんが,
これを入れないとたとえば
"Tom&Jerry"は"TomJerry"となってJに下線がつきます(メニューの表示みたいになる).

DrawCellEx については詳しくはここをご覧になるとよいでしょう.
http://www.microsoft.com/JAPAN/developer/library/jpgdipf/_win32_drawtextex.htm
ワードラップのほかに位置合わせもできるAPIなので覚えておいて損はないでしょう.
0179168=Delphi初心者NGNG
>>177 Delフサギコ さん
うう。。深読みしすぎました すみません(汗

ブランクが長かったのとWinベース(Del)になってからちゃんとクラス型のことを
調べずにやってたandちょっと暇が出来たので最上位クラスから見直そうかと思い
色々やってます。

ってか HELPを読み直すと「クラスメンバーの可視性」でちゃんと書いて有りました(鬱
でも「パブリッシュメンバー」の最後の説明はよくわからない(w

TP5やってたからなんとなくわかるけどDelからいきなり始めた人はOOPを覚えるの
大変じゃないのかな?OOP周りのHELPが殆ど無い&ボロボロのような気が…

俺がアフォなだけという可能性が高いですが(鬱
0180166NGNG
>>177
うう、わざわざありがとうございます。
でもごめんなさい、超重要なことを忘れてました。
どうして悩んでるかといえば、WORDWRAP 自体には、それほどの問題はないのです。
問題は、
「WordWrapされた文章が常に全部表示されるように、その行の Height を自動調整したい」

ことなんです。Drawイベント時に、その行に含まれるセルの中で、最も
Height を必要としているセルを割りだし、そのHeight値を得て、その行のHeightを設定しています。
でも、すごく処理が重くなってしまうのです。たまに再描画されないときもあるし、
最後の1行(セルの行ではなく、セルに含まれる文字列)が表示されないときもあるしで…

最終的に何がしたいのかというと、

(1) Gridコントロールの横幅にあわせ、一番右側のセル列の幅を自動調整する(横スクロールバーを出さないように)
(2) 各セルに表示された文字列を、セル内での横スクロールをしなくても読めるように、WordWrapしておく。
(3) 各セルに表示された文字列を、セル内での縦スクロールをしなくても読めるように、セルの高さを自動調整する。
(4) 各セルにフォント情報を埋め込めるようにする(Cells[x,y].Fontみたいに)

こういう事をしたいのです。
いや、「なら、つくれよ」といわれれば確かにその通りですし、
作ったのですが、どうにも効率が悪いような気がして…
018143ですNGNG
前スレからずっとテキストエディタ作ってます。ヽ(;´Д`)ノ
今は参考書なども購入してなんとか調べつつ作っている状況でございます。
完成度はだいたい90%くらいでもうすぐ終わりそうなんですが、
結局今日も懲りずに質問に参った次第でして…。

最後にGUIアプリによくある「実行ファイルにファイルをドラッグ&ドロップすると
ファイルを読み込む」と言うのを実装しようと思ってます。
んで自分なりに調べた所、前にやってたVBだと
command.comから引数を取ってなんちゃら…と言うのがあったと思ったので、
Delphiでもそれを応用してみようと思ったのですが、
…いかんせんまだ初心者なんでどうにも調べようがなく…(;´Д`)
(Memoコンポーネントにドラッグ&ドロップするのは出来たんですが)

厨房的な質問ではございますが、ご教授頂ければ幸いです。

>>52さん
私も学校の課題で自分しか学んでないのでかなり孤独です。
VBに詳しい友達となんとか手取り足取りやってますが、
やっぱり噛み合わない部分も多かったりでいろいろ疲れますな(笑
0182デフォルトの名無しさんNGNG
>>181 ParamStr をヘルプで 
0183デフォルトの名無しさんNGNG
でも、ParamStrだと、スペースの入ったパスが分割される問題が。

Name1 := ParamStr(1);
Name2 := Name1 + ' ' + ParamStr(2);
if FileExists( Name2 ) then FileName := Name2 else
if FileExists( Name1 ) then FileName := Name1 else
FileName := '';

とか?
0184デフォルトの名無しさんNGNG
>180
>(4) 各セルにフォント情報を埋め込めるようにする(Cells[x,y].Fontみたいに)
StringGridならObjectsプロパティを利用するのがいいのだろうけど、DrawGridにはないのか・・・。

Grid系って妙に重いような気がするので、1から作っちゃった方がいいかもしれない。
昔、マインスイーパーをDrawGridで作ったらゲームにならなかったのでPaintBoxで
描画するように作り直した覚えがある。
0185デフォルトの名無しさんNGNG
>>179 RTTIを利用したいかどうかだけなので、あんまり考えなくていい所のように思います

フォームを継承するような場面で、そのユニットには.DFMを持たせずに
 下位クラスの別.DFM で初期化させたい時とかには手動で書いたりしますけど

後、RTTIを使って 列挙型の文字列を取りたい時くらいかな
0186デフォルトの名無しさんNGNG
>>183 Drag&Dropなら ""が付いて自動的にParamStrが解釈して ""を取り外してくれるよ
0187186NGNG
コマンドライン入力がそのまま欲しい場合は GetCommandLine というAPIを使うといいよ
018843NGNG


沢山の回答ありがとうございます。
やはりParamStrを使うのですな。(182,183さん)
187さんのGetCommandLineと言うのも良さそうなので、
とりあえず自分なりに解釈して頑張ってみます…。

ハマったらまたお世話になるかもしれません(;´Д`)(ぉ
018943@ハマリ中NGNG
すいません、ParamStrについて質問させてください(;´Д`)

Param関数において、
ParamStr(0)が実行ファイルのパス、
ParamStr(1)がその後に続く値、
ParamStr(2)がその後…と言う感じに続くのであれば、
Windowsの[ファイル名を指定して実行]で行うコマンド…
つまりはメモ帳にパラメータを追加して実行するみたいに

 notepad testfile.txt
   ↑     ↑
 ParamStr(0) ParamStr(1)

と解釈して良いのでしょうか?
それだとParamStr(1)に対する処理を書けば良いのかな?
と思っているのですが…。
0190デフォルトの名無しさんNGNG
>>189 その通りです。ParamCountで数がわかります
IDEの実行メニューの実行時引数に色々入れて試してみては?
0191デフォルトの名無しさんNGNG
>>189 うろ覚えだけど ParamStr(0)はフルパスじゃなかったかな
0192デフォルトの名無しさんNGNG
notepad testfile.txt "this is a pen.txt"
なら
ParamStr(0) = c:\windows\notepad.exe のようにフルパス
ParamStr(1) = testfile.txt
ParamStr(2) = this is a pen.txt のように " は除かれる
019343@ハマリ中NGNG
>192さん
では、空白の入るファイル名に関して特に懸念することは無いのでしょうか?
0194デフォルトの名無しさんNGNG
>>193 無い
ためしにやってみれば判るが 複数ファイルを同時にD&Dしても自動的に""が付いて
Delphi側で除かれるから
019543@ハマリ中NGNG
ありがとうございます。
しばらく作業してみます。
0196名無しヘタぐらま ◆B18Bks.Y NGNG
>>178
×→DrawCellEx
○→DrawTextEx

×→Options := DT_NOPREFIX or DT_WORDBRAK;
○→Options := DT_NOPREFIX or DT_WORDBREAK or DT_EDITCONTROL;

>>180
文字列グリッド(TStringGrid)で作ってみました.Delphi4以降専用です.
(セルごとのフォント指定は実装していません)

フォームに文字列グリッドを貼り,グリッドのAlignプロパティをalClientにして,
フォームのOnCreate,OnResize,グリッドのOnDrawCellイベントハンドラ
およびUpdateCellHeightsメソッドを以下のように書きます.

const
cDefaultDrawTextOptions = DT_NOPREFIX or DT_WORDBREAK or DT_EDITCONTROL;

procedure TForm1.FormCreate(Sender: TObject);
var
aRow, aCol: integer;
begin
for aRow := 0 to StringGrid1.RowCount - 1 do
if not (aRow in [1, 4]) then
for aCol := 0 to StringGrid1.ColCount - 1 do
StringGrid1.Cells[aCol, aRow] := format('This cell is %s 行 %s 列', [
StringOfChar('R', aRow), StringOfChar('C', aCol)]);
end;

procedure TForm1.FormResize(Sender: TObject);
begin
// グリッドのセルの幅の変更…(1)
StringGrid1.DefaultColWidth :=
StringGrid1.ClientWidth div StringGrid1.ColCount - StringGrid1.GridLineWidth;
// グリッドのセルの高さの変更…(3)
UpdateCellHeights;
end;

(つづく)
0197名無しヘタぐらま ◆B18Bks.Y NGNG
(つづき)

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
StringGrid1.Canvas.FillRect(Rect);
// ワードラップして描画…(2)
DrawText(StringGrid1.Canvas.Handle, PChar(StringGrid1.Cells[ACol, ARow]),
-1, Rect, cDefaultDrawTextOptions);
end;

// グリッドのセルの高さの変更…(3)
// フォントやセルの文字列を変えたときにはこのメソッドを実行してください.
procedure TForm1.UpdateCellHeights;
var
aRow, aCol, MaxHeight, aHeight, MinHeight: integer;
aRect: TRect;
begin
MinHeight := StringGrid1.Canvas.TextHeight('gM');
for aRow := 0 to StringGrid1.RowCount - 1 do
begin
MaxHeight := MinHeight;
for aCol := 0 to StringGrid1.ColCount - 1 do
begin
aRect := Bounds(0, 0, StringGrid1.ColWidths[aCol], 1);
// ワードラップして描画したときの高さを求める
aHeight := DrawText(StringGrid1.Canvas.Handle,
PChar(StringGrid1.Cells[aCol, aRow]), -1,
aRect, DT_CALCRECT or cDefaultDrawTextOptions);
if aHeight > MaxHeight then
MaxHeight := aHeight;
end;
StringGrid1.RowHeights[aRow] := MaxHeight;
end;
end;

0198デフォルトの名無しさんNGNG
TWebBrowserでActiveXのビデオ表示した場合、
音が出ない形で表示されちゃうんだけど、
これはなぜでしょう?
一応、検索してみたけどヒットしないみたい…。
0199198NGNG
「<OBJECT>のタグで」が抜けました。同じ物をIEで見ると、
普通に表示されます。不思議…?
0200デフォルトの名無しさんNGNG
Windowsのボタンやメニューで標準で使われているフォントを調べるのって、
直接レジストリを見に行かないとできないんでしょうか?
0201誰か教えてくれよぉ〜NGNG
D6で自作コンポ作ったのだが、都合で他の奴がAccessからそのコンポを使いたい
とケチつけやがった、そこで、ActiveX版も作ってやろうとした、
ActiveXなんて初めての挑戦だったのだが、Borlandのホームページ見ると
VCLコンポから簡単にActiveXが作れるような事が書いてあった。で、
新規作成の所でActiveXコントロールを選択しても、VCLの欄に俺のコンポが
出てこないのだがなぜ?(他のは出てくるし、俺のもEditから派生させた
のは出てる)非ビジュアルコンポってActiveXにできないのか?
0202デフォルトの名無しさんNGNG
>>201 非ビジュアルは出ない
継承元をTComponentからTWinControlかTCustomControlに
0203誰か教えてくれよぉ〜NGNG
>>202
やぱし、そーなの?助かったよ、ありがと。これでAccess野郎も喜ぶだろう。
でも、継承元がTComponentなコンポはなぜ出てこないの?継承元が単純すぎるから?
0204デフォルトの名無しさんNGNG
TServerSocket使ってたものです。挙動が異なり困っています。具体的には…

クライアントがサーバに接続している際、クライアントプログラムを一方的に強制終了すると、サーバ側ではエラーにならず、切断イベントが発生していました。が、

自作サーバクラス内に TServerSocket を組み込んで使用したところ、
クライアント側が強制終了するとエラーが発生するようになってしまいました。どこがいけないのでしょう?

type
TReportEvent = procedure (Sender:TObject; AText:string) of object;

TChatServer = class( TComponent )
private
 { サーバソケット }
 Server: TServerSocket;
 FOnReport:TReportEvent;
 procedure SetPort(const Value: Integer);
protected
 { TServerSocketのイベントに関連付けるイベント手続き }
 procedure OnClientConnect(Sender:TObject;Socket: TCustomWinSocket); virtual;
 procedure OnClientDisconnect(Sender:TObject;Socket: TCustomWinSocket); virtual;
 procedure OnClientError(Sender: TObject; Socket: TCustomWinSocket;
  ErrorEvent: TErrorEvent; var ErrorCode: Integer);virtual;
 { ステータスやログ等を出力 }
 procedure Report(AText:string);
public
 constructor Create( AComponent: TComponent ); override;
 destructor Destroy; override;
 procedure Open;
 procedure Close;
 property Port:Integer write SetPort;
published
 property OnReport:TReportEvent read FOnReport write FOnReport;
end;

const
 SocketErrorMessage:array [TErrorEvent] of string = (
  {eeGeneral} 'ソケットは,どのカテゴリにも属さないエラーメッセージを受け取った',
  {eeSend} 'ソケット接続に書き込もうとしたときにエラーが発生した',
  {eeReceive} 'ソケット接続から読み出そうとしたときにエラーが発生した',
  {eeConnect} '接続要求が完了できなかった',
  {eeDisconnect} '接続を閉じようとしたときにエラーが発生した',
  {eeAccept} 'クライアント接続要求を受け付けようとしたときに問題が発生した',
  {eeLookup} 'LOCKUP ERROR'
 );

0205デフォルトの名無しさんNGNG
implementation

{ TChatServer }

procedure TChatServer.Close;
begin
 Server.Close;
end;

constructor TChatServer.Create(AComponent: TComponent);
begin
 inherited;

 { Server の生成と設定 }
 Server := TServerSocket.Create( Self );
 Server.ServerType := stNonBlocking;

 { イベントの関連付け }
 Server.OnClientConnect := Self.OnClientConnect;
 Server.OnClientDisconnect := Self.OnClientDisconnect;
 Server.OnClientError := Self.OnClientError;
end;

destructor TChatServer.Destroy;
begin
 Server.Free;
 inherited;
end;
0206デフォルトの名無しさんNGNG
{ クライアントが接続した際に発生(TServerSocketに関連付けられるイベント) }
procedure TChatServer.OnClientConnect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
 Self.Report('[接続] /アドレス:'+Socket.RemoteAddress);
end;

{ クライアントが切断した際に発生(TServerSocketに関連付けられるイベント) }
procedure TChatServer.OnClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
 Self.Report('[切断] /アドレス:'+ Socket.RemoteAddress );
end;

procedure TChatServer.Open;
begin
 Self.Server.Open;
end;

procedure TChatServer.Report(AText: string);
begin
 if Assigned( Self.OnReport ) then
  Self.OnReport( Self, AText );
end;

procedure TChatServer.SetPort(const Value: Integer);
begin
 Server.Port := Value;
end;

procedure TChatServer.OnClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
 Self.Report( '[エラー] '+ SocketErrorMessage[ ErrorEvent ] );
end;
0207デフォルトの名無しさんNGNG
>>204
ちょっと漠然としてる感じがします。

1.「サーバ側ではエラーにならず、切断イベントが発生していました」というのは
  どういう条件だったんですか?
2.どんなエラーが発生するんですか?
3.エラーをトラップして切断イベントの代わりにはできないんですか?
0208デフォルトの名無しさんNGNG
Delphi6 Personalを使ってます。

FormよりForm内のコンポーネントが大きい場合にす小ロールバーが出ますよね。
そのスクロールバーのサイズってどう取得すれば良いんでしょうか?
ButtonSizeもSizeも0なので困っています。

後、タスクバーのWindowクラス名ってなんになるんでしょうか?
0209デフォルトの名無しさんNGNG
保守age
0210デフォルトの名無しさんNGNG
Delphi初心者です。
TMemoでファイルから読み込み表示するときに、
特定キーワードのみ文字色を変えたいのですが、
どうすればよいでしょうか。ヒントだけでも教えてください。
0211デフォルトの名無しさんNGNG
>>210 TMemoでなければダメですか?
シェアウエアとかのエディターコンポを使うのが簡単なように思うんですが?
0212デフォルトの名無しさんNGNG
>>210
TRichEdit使えば。
0213デフォルトの名無しさんNGNG
フリーのAFEditも色分けできるよん
俺はTEditor使いだが。
0214デフォルトの名無しさんNGNG
kylixでも動くようにしたいので、TMemoの方法が知りたいです
あと(いつか)できたらソース付きで公開したいので、
シェアウェアとかフリーウェアを使わないでやりたいと思ってます
0215デフォルトの名無しさんNGNG
TMemoにコダワルと、とても難しい。
 自分でビュアー作った方がマシなくらい難しい
0216デフォルトの名無しさんNGNG
>>215
と、言うかテキストボックスってオーナードローできるの?
0217デフォルトの名無しさんNGNG
まだ見てますので>>208わかる方おられたらお願いします。
0218デフォルトの名無しさんNGNG
>>215
エディタ部分が分離可能な設計にしましょう

CLXベースで一から自作するんならそうでなくてもいいが。
0219ねこまNGNG
「スクロールバーのサイズ」って漠然と言われてもねぇ……

GetSystemMetrics ?
0220デフォルトの名無しさんNGNG
>>219
試してみます。
0221デフォルトの名無しさんNGNG
>>219
できました。助かりました。
0222デフォルトの名無しさんNGNG
OCXをDELPHIで作って、VBから使おうとすると文字列が帰ってこないがなぜ?

function TTestOCX.REC(var fpRec:WideString):Integer;
begin
fpRec:='2ちゃんねる';
result:=0;
end;

-------------- vb -----------------
dim tmp_rec as string
dim rc as integer
rc=TestOCX.rec(tmp_rec) <--- tmp_recの中身は空になってる
0223デフォルトの名無しさんNGNG
>>222 WideString を使うなら 
 ええとど忘れした・・・とにかく VBから読める使える型にしてやっておくれ
0224 NGNG
WinSightってどこかでDL出来ません?
Delphi6に入ってないんです・・
0225224NGNG
解決しました・・・
スレ汚しスマソです・・・
0226222NGNG
>>223
StringToWideChar使えって事かな?
0227198NGNG
レス無かったか…。
どなたかTWebBrowserでobjectタグのメディアプレーヤ埋め込み型で
音が出ないことについて知ってる人はいないですかね?
自分だけなのかな?
TWebBrowserでは音声不可になる…ってことはあり得るのかな?
0228名無しNGNG
他のアプリの、MainFormから3階層目のハンドル(TTabControlのハンドル)を得たいのですが、
 hHWND := FindWindow('TMainForm', nil);
 hHWND := FindWindowEx(hHWND, 0, 'TPanel', nil);
 hHWND := FindWindowEx(hHWND, 0, 'TPanel', nil);
 hHWND := FindWindowEx(hHWND, 0, 'TTabControl', nil);
としたところ、0が返ってきてしまい上手くいきません。
どこらへんがマズイでしょうか?

メインフォームにパネルが幾つか貼ってあり、その中の一つにまたパネルが貼ってあり、
そのパネルにタブコントロールが貼ってあるという状況です。
0229デフォルトの名無しさんNGNG
>>222
ActiveXでVBに渡すなら、WideStringじゃなくて普通にStringでいいだろ
0230ねこまNGNG
TWebBrowser を貼り付けたアプリと IE とで code="〜" のパスの介錯に違いがあるのではないかと予測するがどうか?
0231198NGNG
>>230
おっ!レスあるとウレシイですねー。
えーと、「音声のみ」不可となって表示されるんですよ。
動画(メディアプレーヤ自体も)は出るんです。
が、「音出ないよ」のマークになっちゃってるんですよねー?
もちろん、その動画(mpeg)は音あるし、IEで見るとちゃんと
音出るんです。不思議…??
0232222NGNG
>>222 で書いた者です
>>223 VBで使える文字列の型がいまだに探し出せません(;;)
>>229 ocxの場合、DELPHIのStringは駄目だと思いますが、WideStringだから
駄目ってのはアリですか?単にプロパティで設定された条件により文字列を
返したいだけなのですが・・・。
0233貧乏人NGNG
「delphiで作られた有名ソフトって何がある?」ってスレ
すごく短命でしたな。それほど浸透してない(?)ってことだろうか?

あの4800円くらいするデカイ本を本屋で見た。デカかった・・・。
欲しかったけど、高いなー。基礎編の方は割と必要なさげだった。
アレはエロゲーパッケージに通ずるデカさだ(藁
0234デフォルトの名無しさんNGNG
>>228
> どこらへんがマズイでしょうか?
たぶん、複数のパネルのうち TTabControl がのっかっているのと
ちがうのが最初に見つかるためでしょう。

以下の FindClassInChilds( ) 関数では、直接の子のほかに
孫、ひ孫...も検索して、指定のクラス名のウィンドウハンドルを
返します。見つからなかったらゼロを返します。

type
pFindData = ^TFindData;
TFindData = record
ClassName:string;
FindHandle:HWND;
end;

function GetClassNameString(hWindow:HWND):string;
var
p:PChar;
ret:integer;
begin
GetMem(p,100);
ret := GetClassName(hWindow,p,100);
SetString(result,p,ret);
FreeMem(p);
end;

function EnumCldProc(hWindow:HWND;Data:LParam):Boolean; stdcall;
begin
result := true;
if GetClassNameString(hWindow) = pFindData(Data)^.ClassName then
begin
pFindData(Data)^.FindHandle := hWindow;
result := false;
end;
end;

function FindClassInChilds(hParent:HWND;ClassName:string):HWND;
var
FindData:TFindData;
begin
FindData.ClassName := ClassName;
FindData.FindHandle := 0;
EnumChildWindows(hParent,@EnumCldProc,integer(@FindData));
result := FindData.FindHandle;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
hParent:HWND;
begin
hParent := FindWindow('TMainForm', nil);
Label1.Caption := IntToStr(FindClassInChilds(hParent,'TTabControl'));
end;

0235誰か教えとくれぇ〜 NGNG
>>232
VCLからActiveXを作成したのであれば、自動で変換できなかった部分もある
かもしれない、もう一度ActiveX変換後のソースを眺めてみれ。
と、人の蝿おってる場合じゃない、折れもActiveXに挑戦中(^^;

折れが作った非ビジュアルActiveXだが、貼り付けた時にアイコンが表示さ
れないのだが、何処にアイコンを設定すりゃいいのさ、誰か知ってる?
0236171NGNG
>>172
ほかの人はどうやっているのか気になったんです
ただDelphiでのクラスの作り方がよく解らなかったんで
クラス化するのは後にすることにしました。
今はタブ、ツリー、リスト、スプリッターの動的配列を確保して
インスタンスを生成してます

>>175
Borlandのページにタブとボタンを動的生成するページが有ったんで参考にしました。
取りあえず動作するようになり前に進みました。


今困ってるのは新規タブを作成した場合
一番左はしに出来てしまうのです。
右側に作りたい場合などはどうすればいいのか解る方がいたら
アドバイス欲しいです。

0237デフォルトの名無しさんNGNG
>>200
//メニューのフォント
var
 lf: LOGFONT;
 nm: NONCLIENTMETRICS;
begin
 nm.cbSize := sizeof(NONCLIENTMETRICS);
 SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, @nm, 0);
 lf := nm.lfMenuFont;
//
 lf.lfFaceName//フォント名
 lf.lfHeight//フォント高さ
 lf.lfWeight//700以上でBold
 lf.lfItalic//1の場合はitalic
0238デフォルトの名無しさんNGNG
>>228
最後だけ0を返すの?
0239デフォルトの名無しさんNGNG
Shift-JIS ←→ EUC-JP 相互コンバートなコードを書ことしています。
String でデータがある時は ByteType を使って if 文を簡略化してますが、
文字コードしか無い場合には、すべて if 文で総当りしてコンバートするくらいしか
方法を思いつきません。その手しか無いのでしょうか???
もっと賢いやり方があるような気はしているのですが・・・・・
0240239NGNG
ちなみに漢字は対象外にしています。
1バイト文字と2バイト文字が混ざっていますが
2バイト文字の方は英数字記号ひらカナなどの
合計500文字程度なので、少々おバカで無駄の多いコードでも
何とかなりそうではあるのですが・・・
0241ムッチムチの名無しさん NGNG
ハイ!質問です。

IEを取り込んで、ボタンでIE上のフォームに記入するのはどのようにすればいいでしょうか?
パスワードとかIDとかを自動入力させるみたいな・・・
0242デフォルトの名無しさんNGNG
あの方はどちらへ逝かれたのでしょうか・・・。
0243デフォルトの名無しさんNGNG
>>239-240
素直に既存のライブラリ(jconvert.pasとか)を使うわけにはいかないの?
0244 ◆iWks40y. NGNG
 Delphi初心者です。
Delphi6.0PersonalとDelphi2.0を使っています。

ユーザーがキーボードを入力したのを、感知するにはどうしたらいいでしょうか?
フォーム上でなら感知することは出来ますが、フォームが非アクティブになると、
感知できません。TForm.OnMessageでも反応しないようです…。
どうかよろしくお願いします。
0245デフォルトの名無しさんNGNG
>>242
pちゃん?
0246名無しNGNG
>>234
出来ました!
完璧ッス。
ありがとうございました!
0247デフォルトの名無しさんNGNG
メニューアイテムの座標を知りたいのですが、なにか良い方法はありませんか?具体的には、メインフォームからの相対座標を取得したいのです。
そこで以下の関数を作ったのですが、3階層目あたりの
サブメニューになると、正確な値が取得できず困っています。

{ フォーム AForm からのメニュー AMenu の相対座標を得る }
function GetMenuRect(AForm:TForm;AMenu:TMenuItem):TRect;
 function ShiftRect(ARect:TRect;dx,dy:integer):TRect;
 begin
  Result:=Rect( ARect.Left+dx, ARect.Top+dy, ARect.Right+dx, ARect.Bottom+dy );
 end;
var
 DRect: TRect;
 IMenu: TMenuItem;
begin
 { その位置のスクリーンでの座標取得 }
 GetMenuItemRect( AForm.Handle, AMenu.Parent.Handle, AMenu.MenuIndex, Result );
 { フォームからの相対座標に変換 }
 Result:=ShiftRect( Result, -AForm.Left, -AForm.Top-24 );

 IMenu:=AMenu.Parent;
 while IMenu.Parent is TMenuItem do
 begin
  { その位置のスクリーンでの座標取得 }
  GetMenuItemRect( AForm.Handle, IMenu.Parent.Handle, IMenu.MenuIndex, DRect );
  { フォームからの相対座標に変換 }
  DRect := ShiftRect( DRect, -AForm.Left, -AForm.Top-24 );
  Result := ShiftRect( Result, DRect.Left, DRect.Top );
  IMenu := IMenu.Parent;
 end;
end;
0248デフォルトの名無しさんNGNG
クラスのメンバー関数を呼び出したとき
そのクラスの先頭ポインタはどこにあるのですか?
Bレジスタかと思っていたのだけれどはっきりしない。
0249239NGNG
>>243
なんと!こんな素晴らしいものが!
これで十分。全然オッケィです。
この前検索した時は見つけられなくて・・・
情報サンクスでした!
0250デフォルトの名無しさんNGNG
>>235
おっしゃる通りでした、有難うございました。
但し、私も非ビジュアルActiveXだが、貼り付けた時にアイコンが表示さ
れないです、非ビジュアルなocxだからそんなものなのではないでしょうか?
0251 NGNG
別のアプリにF3押しを伝えるには↓でいいんですよね?
SendMessage(Form1.Handle,WM_KEYDOWN,VK_F3,0);

上手くいかないんですが・・・
0252デフォルトの名無しさんNGNG
別のアプリだったら、別のアプリのHANDLEなんじゃないの?
■ このスレッドは過去ログ倉庫に格納されています