Delphi相談室その7

このエントリーをはてなブックマークに追加
1Delphi1 から使ってます
Borland Delphiに関する質問・相談などを扱っています。

ボーランド
http://www.borland.co.jp/

<関連スレッド>
モナーの *やさしい* Delphi質問スレ Ver.8
http://pc3.2ch.net/test/read.cgi/tech/1027873869/l50

・雑談はこちら
ミ,,゚Д゚彡フサギコのフサフサDelphi談話室E
http://pc3.2ch.net/test/read.cgi/tech/1031668744/l50
2Delphi1 から使ってます:02/09/21 11:46
3Delphi1 から使ってます:02/09/21 11:46
あと適当に貼っておいてください。
  ∧_∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ( ´∀`)<. Delモナーがどんな厨房疑問でもやさしく答えます。
 (    ) .| Delモナーは時に私であり、時には別の人。
 | | |  | 他のスレに書き込んで罵倒される前に、まずここで質問しよう。
 (__)_)  \_________________________
>>4
適当すぎるわヴォケ
Del7が26日発送ってことは、金曜日か土曜に届くから、
週末はDel7で遊べっていう個人ユーザへの配慮ですか?
なんだこの廃れ具合は・・・
久しぶりに Delphi Direct を起動してみたが
Delphi7 の情報がまったく無いのはどういうわけだ Borland
>>7
ゲー製作のノベルゲームスレにでも行ってるんじゃないの?
>>9
あそこってさりげに人気スレなのか?
11デフォルトの名無しさん:02/09/23 01:17
やっぱ、やさしいスレと統合した方がいいのかな…
12やさスレ:02/09/23 01:23
>>11
おう、いつでも引き受けるぞ。
もちろんベースは俺らだからスレタイは俺らのがそんぞくだがな
13Delフサギコ ◆VzDeLphI :02/09/24 17:17
 ミ,,゚Д゚ミ WideStringのUnicodeで
       カタカナ⇔ひらがな
       全角⇔半角
変換など、行うのは、どうするのでしたでしょうか。。
>>13
LCMapString
15Delフサギコ ◆VzDeLphI :02/09/24 18:44
サンクスコ ミ,,゚Д゚彡ノ
[Delphi:41843] Re: 半角の数字を全角に( 遅レス+解決したので)
16 :02/09/26 02:26
昨日Delphi 6 Personalをダウンロードしてユーザ登録して
メールで ライセンスキーとインストールキー届いたんだけど
インストール時に「キーが正しくありません」って跳ね返されてます(T_T
どうしてでしょうか?
のっけからつまずいてます・・・・
あ でけた♪
18Delフサギコ ◆VzDeLphI :02/09/26 04:48
    ,,,,,,,,,,,,,,,∧,,∧   /こんな感じで
  〜′,,,,,,,,,,ミ,,゚Д゚彡< 
   UU"""" U  ⊃  \

function KanaToHira(const Source: WideString): WideString;
var
 Len: Integer;
begin
 Result := '';
 Len := Length(Source);
 SetLength(Result, Len);
 Windows.LCMapStringW(
  GetUserDefaultLCID(),
  LCMAP_HIRAGANA,
  PWideChar(Source),
  Len + 1,
  PWideChar(Result),
  Len + 1
  );
end;
19Delフサギコ ◆VzDeLphI :02/09/26 04:48
    ,,,,,,,,,,,,,,,∧,,∧   /API使うので
  〜′,,,,,,,,,,ミ,,゚Д゚彡< 
   UU"""" U  ⊃  \

function HiraToKana(const Source: WideString): WideString;
var
 Len: Integer;
begin
 Result := '';
 Len := Length(Source);
 SetLength(Result, Len);
 Windows.LCMapStringW(
  GetUserDefaultLCID(),
  LCMAP_KATAKANA,
  PWideChar(Source),
  Len + 1,
  PWideChar(Result),
  Len + 1
  );
end;
20Delフサギコ ◆VzDeLphI :02/09/26 04:49
    ,,,,,,,,,,,,,,,∧,,∧   /
  〜′,,,,,,,,,,ミ,,゚Д゚彡<  あってるのん?
   UU"""" U  ⊃  \ 

   ML検索してもLCMapStringW全然載ってない
   誰もUNICODEとかキにしてないんか...ゴルァ

procedure TForm1.Button1Click(Sender: TObject);
begin
 Check('あああ', KanaToHira('アあア'));
 Check('あかさたなはまやらわをん', KanaToHira('アカサタナハマヤラワヲン'));
 Check('アアア', HiraToKana('あアあ'));
 Check('アカサタナハマヤラワヲン', HiraToKana('あかさたなはまやらわをん'));

 Check('アアア', KanaToHira('アアア'));
end;

参考にはAcidFloor
http://www.wwlnk.com/boheme/delphi/vbtodel/vbfaq/vbd0050.htm
Delphi工房
http://www.din.or.jp/~egawa-n/delphi/tips/convert_mbcs.html
21Delフサギコ ◆VzDeLphI :02/09/26 05:38
   ?
  ∧,,∧,,,,,,,,,,,,,,,      /LOCALE_USER_DEFAULTとGetUserDefaultLCID()の
 ミ゚Д゚,,彡,,,,,,,,,,,,ヾ〜  <  使い分けと、文字列長の指定が正しいかどうか、イマ二つほど
   U U """"UU     \わかないけど、これでいいのかな?
function MapStringW(const Source: WideString; dwMapFlags: DWORD): WideString;
var Len: Integer;
begin
Result := '';
Len := LCMapStringW(LOCALE_USER_DEFAULT, dwMapFlags, PWideChar(Source), -1, nil, 0);
SetLength(Result, Len-1);
LCMapStringW(LOCALE_USER_DEFAULT, dwMapFlags, PWideChar(Source), Length(Source)+1, PWideChar(Result), Len);
end;
function KanaToHira(const Source: WideString): WideString;
begin Result := MapStringW(Source, LCMAP_HIRAGANA);end;
function HiraToKana(const Source: WideString): WideString;
begin Result := MapStringW(Source, LCMAP_KATAKANA);end;
function ZenkakuToHankaku(const Source: WideString): WideString;
begin Result := MapStringW(Source, LCMAP_HALFWIDTH);end;
function HankakuToZenkaku(const Source: WideString): WideString;
begin Result := MapStringW(Source, LCMAP_FULLWIDTH);end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Check('あああ', KanaToHira('アあア'));
Check('あかさたなはまやらわをん', KanaToHira('アカサタナハマヤラワヲン'));
Check('アアア', HiraToKana('あアあ'));
Check('アカサタナハマヤラワヲン', HiraToKana('あかさたなはまやらわをん'));
Check('アアア', KanaToHira('アアア'));
Check('abc', ZenkakuToHankaku('abc'));
Check('アアア', ZenkakuToHankaku('アアア'));
Check('abc', HankakuToZenkaku('abc'));
Check('アアア', HankakuToZenkaku('アアア'));
end;
22デフォルトの名無しさん:02/09/28 13:31
外の比較的マイナーな文学作品を翻訳出版する
小さな出版社がある。そして文学ファンはこういった出版社を
潰さないため、今後も翻訳を続けてもらうために
1人で同じ本を2・3冊買うことが良くある。

我々もこういう時だからこそDelphi7を買って
ボーランドを支えるべきなんじゃないだろうか。
Delphi7の売り上げはDelphi8以降の開発資金となるし、
ボーランドジャパンの今後に大きな影響をもたらすだろう。

Delphi7の出来のみを云々するのは
あまりにも近視眼的ではないだろうか?
なぜ 22 はこんなスレをつけるのか。

その謎は以下のスレに…
http://pc3.2ch.net/test/read.cgi/tech/1031668744/536-538

ここにかかれている内容を信じるかどうかはあなた次第。
Delphi7 を注文してしまった人は、すぐに答えが出るでしょう。
社員だから
☆★☆★☆ アンチに朗報! ☆★☆★☆

VS.NET 7.0と.NET 1.1は連携できません!
.NET 1.1を導入すると、VS.NET 2003を買わされる羽目になります!
今、テキストエディターを作っている(作ろうとしている)のですが、
メモ帳と同じフォントにしたいのです。
しかし行間が大きくて、同じにならないのですが、どうすればいいのでしょうか?

あと、RichEditで作っているのですが、Memoの方が良いのでしょうか?

どなたかお願いします。
>>26
TEditor
フォントと行間って関係あるの?
>>29
ないよ…
>>30
うんこするの?
>>28
http://www.vector.co.jp/soft/win95/prog/se114384.html
これですか?
>>29
あ、関係ないですね…。すいません。
そうです
>>26
Delphiは6?
6より前のは使ったことないから知らないけど、
6ならHelpのチュートリアルでテキストエディタ説明してるよ。
それ辿っていけば?

それと、メモ帳と同じフォントにして、
サイズもそれと合わせたら同じようになるはずだけど…?

あと異なる書式を混在させるようなことをしなければ
TMemoで十分だと思うけど。
(RichEdit使ったことないんでよく分からんが…)
行間を指定したいんでしょ
TMemoもTRichEditも無理
オナニードローでできるよん
メモ帳のフォントとTMemoのフォントとサイズ合わせたら行間も同じになったよ。
>>36
がいしゅつ
とりあえず>>28を使ってみようと思います。
シェアウェア(カンパウェア)なのがちとあれですが…。
レス下さった方、ありがとうございました。
40デフォルトの名無しさん:02/09/29 00:45
richeditの何がそんなに気にくわないんだか…?
別に構わないと思うけどなぁ…。
読み込める量からすっとMemoは非推奨だとは思うけど。
>>40
まだ9xなんだ
4240 ◆W9uCUQvg :02/09/29 00:48
>>41
そおそお(藁
95!95!(藁
43デフォルトの名無しさん:02/09/29 01:48
imageの上に透明のimageを置き
上のimageにCanvasで図形を描くときにちらつきます。

delphi5ではちらつかなかったのですが、
delphi6にしてからちらつくようになりました。

DoubleBuffered や WM_ERASEBKGNDを無視するように
もしましたがちらつきます。
どなたかご教授をお願いします。
なんでDoubleBufferedを無視するの?
なんでオフスクリーンにしないの?
4643:02/09/29 01:51
>>44
DoubleBuffered := True
です
で、imageを2つも重ねて何がしたいの?
4843:02/09/29 02:01
>>47
知ったことか
16bitの画像データをテキストに変換したいのですが、
VBでやるとデータ型がない上に遅すぎて使い物になりません。
やっぱりdelphiでやるのがいいのでしょうか?
データサイズは512*512または128*128*128です。
コンパイラなら何でもいいよ。
速度で言うとVCのが速い。
>>48
まあガムバッテちらつきを無くしてくれ。
うーん、やっぱりCですか。
本職じゃないのでお手軽にやりたかったのですが・・・。
ちょっと勉強してみます。
DelphiならTBitmapに画像を読み込ませてコンポーネント
リソース形式(16進)でストリームに吐かせるだけだからほんの数行
書くだけ。
5453:02/09/29 03:25
こんな感じかな?
procedure TForm1.Button1Click(Sender: TObject);
var
 ws: TFileStream;
 ms: TMemoryStream;
 img: TImage;
begin
 if not OpenDialog1.Execute then Exit;
 if not SaveDialog1.Execute then Exit;
 img := TImage.Create(Self);
 ws := TFileStream.Create(SaveDialog1.FileName, fmCreate);
 ms := TMemoryStream.Create;
 try
  img.Picture.LoadFromFile(OpenDialog1.FileName);
  ms.WriteComponent(img);
  ms.Seek(0, soFromBeginning);
  ObjectBinaryToText(ms, ws);
 finally
  img.Free;
  ws.Free;
 end;
end;
5543:02/09/29 03:29
>>51
>>48は騙りです
>>55
了解した。ちらつきの件がむばってくれ。
2枚の画像を重ねる理由が判らないけど、
合成処理をさせたいだけならオフスクリーンを
使った処理でいいのでは?
> 128*128*128
もしかして研究でボクセルやってらっしゃいますか?
CTスキャンみたいなの?
これだとTBitmapは無理だろうから、自作しないといけないからがんばって

>>43
OffScreenを使うに一票。
目に見えないBitmapの上にDraw系の命令で一旦書いておいて、
最後に目に見えるところに一括転送。するとちらつかない。
>56だす。
オフスクリーンに追加しておくと。。。
TImageをいじくるよりも、むしろTControlを使って
表示用のみのTBitmap、オフスクリーン用のTBitmapを
用意しておき、合成はオフスクリーンで行い
合成の結果を表示用へ書き込む。
そしてTControlへの常時描画は表示用を使用する。
この時、WM_ERASEBKGNDを調整するように・・・
まあ、DoubleBufferを自分でやるような感じですが・・・
5943:02/09/30 04:38
>>56>>57>>58
ありがとうございます。
なんとDoubleBufferでいけてました。お手数かけました。
メッセージを捕まえたり、ポートを調べたりしてたのが何だったんだ!
これで土日潰しました。勉強になったけど・・・
6043:02/09/30 05:04
DoubleBuffer恐るべし。
学校なんでおやすみなさい。
なんだポートって?DoubleBufferにポートってなんだー?謎だ・・・
>>61
ネタだよな?
ごめん、俺マジでわからん
海に向かって叫んでたんだろ
65デフォルトの名無しさん:02/09/30 13:06
TRichEditを右クリックしたとき
TMemoを右クリックしたときと同じように
ポップアップを表示させるのにはどうしたらよいのでしょうか?
TPopupMenuで作成するしかないのでしょうか?
>>65
他に方法があるなら教えてくれ。
67デフォルトの名無しさん:02/09/30 19:22
D5 -> D7のバージョンアップで悩んでいます。
いったい DsgnIntf はどう処理したらいいんだろ?
TDefaultEditor を継承してダブルクリック時のデフォルトイベントを変更してたんだけど
DsgnIntf はtoolAPIの DsgnIntf.pasを使っていいのかな?

TDefaultEditorがDesignEditors に変わってるし、
EditProperty の引数の型が変わってるから変更したら、今度は
IProperty が定義されてないと出る
6867:02/09/30 20:34
ごめん DsgnIntf -> DesignIntf って事みたいね
69デフォルトの名無しさん:02/09/30 20:51
THoge = class(TCustomControl)
private
FHeader: THeaderControl;
と宣言してあるFHeaderが、
THogeのprocedure WMHScroll(var msg: TWMHScroll); message WM_HSCROLL;の中で、
ScrollWindowEx(Handle, -HScrollInc, 0, nil, @CR, 0, @R, SW_SCROLLCHILDREN);
InvalidateRect(Handle, @R, False); //R,CR:TRect; HScrollInc: integer;
としても、ちゃんと再描画してくれません。
どのようにすれば、
このFHeaderはちゃんとスクロールして再描画もしてくれるのでしょうか?
70デフォルトの名無しさん:02/09/30 21:02
フォームを表示したとき、マウスポインタが
OKボタンの真ん中に来るように
http://www.borland.co.jp/qanda/delphi/d0002284.html
ココを参考に以下のソースを書いたのですが
●の所に「演算子またはセミコロン (;) が必要です」とエラーが出ます。
上記のページに
該当するバージョン:Delphi 1.0,Delphi 2.0,Delphi 3.0/Delphi3.1,Delphi4
と書いてあったのですがDelphi6だとダメなのでしょうか?

procedure TOptionDlg.FormShow(Sender: TObject);
var
Point: TPoint;
begin
Point := Point(OKBtn.Width div 2, OKBtn.Height div 2);//●
Point := OKBtn.ClientToScreen(Point);
SetCursorPos(Point.X, Point.Y);
end;
Qと書け
>70
たぶん変数の名前をPointにしたせいで、
関数のPointを変数のPointと認識しちゃってるんだんと思う。
だから変数の名前を変えればたぶんOK
var
Q : TPoint;
7470:02/09/30 21:13
>>71
>>72
>>73
ああ、そこでしたか・・・
助かりましたありがとうございます。
75Indyのことでお尋ねします。:02/09/30 21:20
ファイルを転送するプログラムを組みたいのですが、
どうしたらよいでしょうか?教えてください。
少しは調べろ
77Indyのことでお尋ねします。:02/09/30 21:33
>>76
調べましたがアフォなので探せないし、わかりませんでした。
Indyはソース公開されてるんだからソース読め。
79Indyのことでお尋ねします。:02/09/30 21:38
どこでしか?
モナーに聞いて来い
インストールしたらついてくる。
ウザいよ>>76,78,80
83Indyのことでお尋ねします。:02/09/30 21:43
>>82 感謝!!
84Indyのことでお尋ねします。:02/09/30 21:44
アフォだからソース見ても分かりません。
消えろと言うのならば、消えますがいかがいたしましょう。
FTPクライアントを作りたいということですか?

FTPサーバを作りたいということですか?

その両方ですか?

それともまったく別のものを作りたいんですか?
86Indyのことでお尋ねします。:02/09/30 21:52
FTTPみたいなものを。
FTTPとは?
FTTP

( ̄ー ̄;)。。。ん?
89Indyのことでお尋ねします。(俺って厨房?):02/09/30 21:57
・・・。
とにかくサーバーにファイルを転送するファイルです。
まぁ間違いなく厨房でしょう。

とりあえずFTPクライアントを作りたいということでいうわけだね。
んで、IndyのFTPクライアントは使ってみたのかい?
>>89
FTPサーバはサーバのサービスを起動するだけだから
(NT系なら付いてるよ WinXP Homeはどうかしらんけど)
FTPクライアントアプリを作ればOK

フォームにIdFTPを貼り付けてヘルプを読むべし
92Indyのことでお尋ねします。(俺って厨房?):02/09/30 22:05
IdHTTPをターゲットにしてやってますが・・・。
おまえプロトコルについてまず勉強しろ。
ネットワークアプリは今のおまえには無理。
( ´,_ゝ`)プッ
Delphiが馬鹿にされるわけだな
95デフォルトの名無しさん:02/09/30 22:15
>>93
ハゲシクドウイ

ちと質問。
改行コードの定数ってどんなんだっけ?
ド忘れしてしもた。
\r\n -> #13#10
#13#10
CRLF #13#10
CR #13
LF #10
9995:02/09/30 22:24
>>96-98
スマソ、VBでいう「VbCrLf」みたいなのはなかったっけ?
折れの勘違いだったかな?

# 煽りじゃないので念のため
>>95
sLineBreak
あんまり検証してないけどVCL全体で#13がハードコーディングされてるのに
部分的にsLineBreak使うとおかしくならない?
クロス開発のときにね。
10295:02/09/30 22:39
>>100
サンクス 助かったよ

・・・と言いたい所だったけど、
折れのD5では存在しないみたいだ(鬱
Del7買うかな・・。
sLineBreak = {$IFDEF LINUX} #10 {$ENDIF} {$IFDEF MSWINDOWS} #13#10 {$ENDIF};

むしろクロス用と思われるけど・・・
10495:02/09/30 22:40
>>101
VCLでもそう書かれてたのか。
どうも折れの勘違いか何かだったような気がしてきた。
スレ汚しスマソ
つか、なんでsLineBreakってヘルプに載ってないんだろ。
…載ってないよな? 少なくとも、キーワード検索しても出ない。
106101:02/09/30 22:51
>>103
sLineBreakが両対応で
VCLが#13#10ハードコーディングで
CLXが#13ハードコーディングになってるのが
なんかイヤだってだけなんだけどね。
107100=103:02/09/30 22:56
>>106
今調べたけど、その通りみたいだね

ヘルプにも載ってないし
Del6出荷直前に気が付いて慌てて用意したって感じかも
TreeViewのノードをシングルクリックで展開、収縮
しかも前まで展開してたノード収縮させるにはどうすればいいのでしょうか?
例・sleipnilのブックマークみたいの
こゆのは書いてみたのですが
これだと現在選択されているノードを
ワンクリックしても展開、収縮されない・・・
private
{ Private 宣言 }
FlagNode: TTreeNode;



procedure TMainForm.TreeViewChange(Sender: TObject; Node: TTreeNode);
begin
if Node.Expanded = True then
Node.Expanded := False
else
Node.Expanded := True;
FlagNode := Node;
end;
procedure TMainForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
var AllowChange: Boolean);
begin
if FlagNode = nil then Exit;
if (FlagNode.Expanded = True) and (FlagNode <> Node) then
begin
FlagNode.Expanded := False;
end;
end;
procedure TMainForm.TreeViewEditing(Sender: TObject; Node: TTreeNode;
var AllowEdit: Boolean);
begin
AllowEdit := False;
end;
>>108

これだけ

procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Node:TTreeNode;
begin
Node := TreeView1.GetNodeAt(X,Y);
if Assigned(Node) then
Node.Expanded := not Node.Expanded;
end;
プロパティで制御しろ
>>108
AutoExpand=true でいいんじゃないの?
名前からじゃ効果が想像しづらいが。
>>111

AutoExpand := true;

のときと、false で 110 のときとでは動作が違うね。
114デフォルトの名無しさん:02/10/02 01:48
どう違うの?
>>114

ためしてごらん。

AutoExpand := true;

では、該当ノードの拡張・折りたたみの影響が、兄弟ノードのそれに
影響を与える
AutoExpand := true;

では、複数のレベルの同じノードがある場合、そのひとつだけが拡張できる
AutoExpand := true;

の挙動はバグ。ぜんぜん標準的じゃない。
> AutoExpand := true;
>
  ↑揃いも揃って無駄な空行・・・
>>118

お前のカキコが一番無駄>オレモナー
108 は寝てしまったかぁ
>>110
おお、何て簡潔に・・・
ココに書き込む1時間前は
もっと長々書いてた自分が恥ずかしい。。
>>111
>>112
>>113
AutoExpand、初めて聞くブロパティーです。。
ほんと俺は何も知らない小僧だわ・・

みなさん、ほんとありがとうございます!
早速2つとも試してみます。
122108:02/10/02 03:23
123デフォルトの名無しさん:02/10/02 12:40
Delphiはじめたばかりで手元に書物もないのでヘルプファイルのチュートリアルの
テキストエディタをつくってみようとおもったのですが
いきなりAddtionalにある(らしい)ActionManagerってコンポーネントってのが
のが見つからなく詰まりました。
一番最初のほうの説明書き読んだら
「ここで取り上げている機能の一部は Delphi の Personal 版では使用できません。」
と、書いてあるし(T^T)
プログラム経験の無い方でDelphiから入った人はどうやってDelphi勉強しましたか?
>>123
モナーの *やさしい* Delphi質問スレ
http://pc.2ch.net/test/read.cgi/tech/1003113413/

このすれの731付近を参考に
125デフォルトの名無しさん:02/10/02 13:22
D7でXPManifestを貼り付けてXPスタイルのフォームに変更してみました、
ところが、時々ラベルが再描画されない事があります。
しかたなくRepaint等を試してみましたが駄目でした。
WindowsXP側の設定で「視覚テーマを無効にする」としてプログラムを
実行すると旧来通りの画面だと正常に動作します(当然か・・・)

XPManifestを使って問題があった方はいらっしゃいますか?
126デフォルトの名無しさん:02/10/02 13:42
>>124
いくつのですか?
127ねこま:02/10/02 15:16
XPManifest? XPManager の typo ですよね.
私は XP も D7 も持っていないのでわかりませんけど,
Manifest リソースをアタッチしないとだめなんではなかったっけ?
XPManager といってもそこは自動ではなかったような.
128デフォルトの名無しさん:02/10/02 15:32
さっそくD7にアップデートしたのですが、生成されるEXEファイルに付く
デフォルトのアイコンのデータ *.ICO がどこにあるのか、わかりません。
どこにあるのでしょうか?
129デフォルトの名無しさん:02/10/02 15:47
res
>>127
えっ、そーなのかぁ、知りませんでした、
ちゃんと調べなおして出直して来ます。ありがとう
131デフォルトの名無しさん:02/10/02 15:53
>>123
俺が持ってる本は
http://www.amazon.co.jp/exec/obidos/ASIN/4822216888/ref=sr_aps_d_1_1/249-9304172-6892345
これだけ。
詰ったらネット検索か図書館。

今で約半年だが、
まぁ自分の身の回りのツール位ならすぐに作れる。
たまにJaneの改造に参加。
133デフォルトの名無しさん:02/10/03 00:43
・データ名 Edit1.Text
・データ番号 Edit2.Text
・データの内容(改行有り) Memo1.Text

これらをひとくくりに
何個もこのようなデータを1つのテキストファイルに保存したいのですが
何かいい方法あったら教えてください。
テキストファイルでなくても保存できて読み込めればどんなファイルでも
いいのでこういう方法がいいとかあったらおながいします。
134Delフサギコ ◆VzDeLphI :02/10/03 00:57
 ミ,,゚Д゚彡普通にIniファイルでいいのでは...
135デフォルトの名無しさん:02/10/03 01:05
>>133
InterbaseとかMySQLで管理するのはどう?
136 :02/10/03 01:11
まっ… まだアクソンジャーマネのネタが来るのかよ!
>>133

TMemoryStream のインスタンスをつくって、TWriter のインスタンスを使って

・先頭にデータの数を書き込み

・DataName(string)
・DataNo(integer)
・Data(string)

を TWriter の WriteString と WriteInteger メソッドで書き込む
これをデータ数分くりかえして、最後に SaveToFile() する。

読み込みは、TReader のインスタンスを使って、RaedInteger と ReadString
メソッドを使って、データ数を読み込み、その数分だけ、上記のデータの読み
込みを繰り返す
138デフォルトの名無しさん:02/10/03 01:14
>>133
iniでいいと思う。一番簡単だ。
>>133
少量であれば、TCollectionItem派生のクラスに持たせてストリーミングという手もあります。
でも、量が多ければ>>135氏の言うようにデータベースの方がいいと思います。
(改行があるので*.iniは没)
140138 ◆hw.YwvrE :02/10/03 01:18
あ、最後の行、読んでなかった…。
量が多いとiniはちょっとナニだしな。
138は忘れてくで。
141133:02/10/03 01:23
>>134
>>138
iniは32kbまでしか扱えないって何かで見たんですけど
大丈夫でしょうか?
データは結構でかくなると思います。
>>135
データーベースは
勉強しないと。ググルで調べてみます。
おすすめの解説サイトとかありますか?
>>137
>>139
なるほど、いつぺんやってみます。

みなさんレスサンクスです。
142133:02/10/03 01:25
あ、書いてたらレスが、、
うんこ
(´-`)。o ○ (とうとうH○Pスレみたいなレスが…)
>>141
TMemINIFile使えば何メガでもOKだし、OSの違いによって動作も変わらない。
146デフォルトの名無しさん:02/10/03 02:06
>>145
TMemINIFileは改行OK?
147 :02/10/03 02:08
つーか、検索して自分でやってみるがヨロシ。
148デフォルトの名無しさん:02/10/03 03:17

●●●●●●●●「オセロさえ納期内に作れない=OO役立たず 」祭り●●●●●●●
/|         |  |_____ΦΦΦΦΦΦΦΦΦΦΦ||ΦΦΦ
  |         |  | ̄ ̄ ̄ /|                    ||
  |         |  |   / /|TTTTTT   TTTTTTTTTT||TTTTT
  |        /\ |  /|/|/|^^^^^^ |三三| ^^^^^^^^^^^||^^^^^^^
  |      /  / |// / /|
  |   /  / |_|/|/|/|/|
  |  /  /  |文|/ // /
  |/  /.  _.| ̄|/|/|/         Λ_Λ
/|\/  / /  |/ /           (___)
/|    / /  /ヽ            /〔 非OO 〕〕つ
  |   | ̄|  | |ヽ/l            `/二二ヽ
  |   |  |/| |__|/   Λ_Λ     / /(_)
  |   |/|  |/      ( ´∀`)   (_)    Λ_Λ
  |   |  |/      // /  ^ ̄]゚        (`   )
  |   |/        ゚/ ̄ ̄_ヽ         ⊂〔〔 非OO 〕
149Delフサギコ ◆VzDeLphI :02/10/03 03:27
 ミ;゚Д゚彡改行だめみたいだ・・・知らなかった
改行とか特殊コード入れたければ 自前で%エンコードか \エンコードいれるといいよ
151デフォルトの名無しさん:02/10/03 10:04
>>150

で、読み込みの時はデコードの手間が増えるわけ?
>>151
 そうだよ。どうせファイルアクセスするんだから、その時間は隠れてしまうよ
>>152
でも手間が増えるんだろ。だめじゃん。
手間ったって
TMyMemINIFile を継承して
WriteEscString ReadEscString を一度作るだけだろ
>>151,153
痛すぎる・・・
なぜそうまでして ini にこだわる?
もともと *.ini を使うのが簡単、という文脈の流れで
レジストリじゃなくてiniに拘る理由?
そりゃ、windowsフォルダに入れるなら糞だけどローカルに作ると
1、速い
2、実行ファイルを別のディレクトリに入れれば相互に独立する
3、環境を移す時にディレクトリを丸ごとコピーするだけでいい
4、アンインストールも楽
レジストリのほうが動作は速いんじゃないの?
160デフォルトの名無しさん:02/10/03 12:22
>>158
>>159
俺もそうおもうけどINIの方が使い捨てプログラムには楽かと
>>159
 サイズによると思うよ。
 巨大な iniファイルを作ると1文字の追加削除でも全件読まなければならない iniより
 木構造で管理されてるレジストリが速いだろうね

それでもアプリ起動時に全件読んで、終了時に全件書き込むような使い方なら iniの方が速いんじゃない?
162デフォルトの名無しさん:02/10/03 13:13
なんで >>133 の質問で「INIファイルかレジストリか」って
議論になるのかわからん。
各項目のサイズ。レコード数。更新の頻度。とかを考えないと
テキストのまま保存されるINIファイルは論外になる可能性が
あるでしょ。
それに、こんなことでレジストリを使っていていいのかって
問題もある。たとえばNT系列でAdministrator以外でも
きちんとつかえるのかしら。
163デフォルトの名無しさん:02/10/03 13:16
>>162
じゃぁ何をつかったらいいか提示して
>>158
>レジストリじゃなくてiniに拘る理由?

ちゃんと133からの流れを読んでいるのか?
データだよ、保存したいのは。前に出てた Stream 系かデータベースを
使うのが普通だろ。
165158:02/10/03 13:39
>>164
 ああじゃ追加
5、気にせずに巨大データも書き込める
166162:02/10/03 14:44
レコードが大量だとRDBとかも選択肢に入れておかなきゃ
だめじゃないの?最初から除外する意図がわからん。

プログラムが使い捨てか、長く使うかでも変わるし
データのサイズが数KBか数百MBかでもかわりますから
そこらへんがわからないうちからINIだのレジストリだの
いうのは意味がないでしょ。
167デフォルトの名無しさん:02/10/03 14:46
>>165
巨大データをINIになんて入れると時間がかかるよ。
君の言いたいことは、気にせず「巨大データを書き
込むプログラムが作れる」だろ。

168158:02/10/03 15:18
ああなるほど、2個のEDITと1個のMemoと思ってたから iniファイルを持ち出したんだけど、
>>133 を読み返すと データ番号 とかデータ名となってるから1件じゃなくて
複数のこういうペアを作りたいのかもしれないね。
だとすると、単純にデータ名でディレクトリ掘って、
  データ番号をファイル名にして
  データの内容=ファイル内容 なんて解法が一番スマートで楽じゃないかな

可変長のテキストをRDBで扱うとRDBによっては効率悪いし
>>133
まずは各データの最大長とデータの最大個数書かないと。
わからないならおおよそのサイズ(数バイト,KB,MB,無制限)でもいいから。
あのねぇ、ini がどうとか言ってる奴を除けば133は解決済み
>> 複数のこういうペアを作りたいのかもしれないね。

>何個もこのようなデータを1つのテキストファイルに保存したいのですが

これ、読めないのか?
>テキストファイルでなくても保存できて読み込めればどんなファイルでも
>いいのでこういう方法がいいとかあったらおながいします。

これ、読めないのか?
>>172=168=158

いいかげんにしろよ。168では、データ数分だけファイルつくるってんだから
仕様を満たさないのは明らかだろ。
じゃ、結局 TMemIniFileでエンコードして格納するのが一番適当って事だね
>>174

君の住所録は TMemIniFile でエンコードして作ってろよ。
おもしろい奴だね。もっと日本語の読解力をつけろよ!
>>175
住所録ならCSVだろ
177デフォルトの名無しさん:02/10/03 17:43
>>132
僕も半年だけど、全然だめぽ。。。
Delの前にも違う言語やってたんですか?
うん、Hエスパーだったよ。
 ミ,,゚Д゚彡
初心者の場合、作りたいものと、作れるもののギャップに
激しく差があって、なかなかプログラミング意欲が沸きにくいと思うです。

とりあえず、何を作りたいか、のネタ探しからはじめて
たくさん、プログラム/ソフトウェアを作っていくしか
ないと思いますよ。

ライフゲームとか、作ったことがあるんですが
ネタとしては面白かった yo.
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1022733594
いろんなネタが見つかるといいですね。
 ミ,,゚Д゚彡
XPの本では、とりあえずDBやるときでも
最初にファイルでやっといて、後から
データアクセスを担う1関数だけを
ファイルアクセスからDBアクセスに
切り替えたら、いいよね

ってアプローチがいいと紹介されてました。
>>180
その方法だと、Delphiのデータベースコンポーネント使えないんじゃ…
初めからDBでテストすればいいと思います。
ローカルかリモートか程度なら後で変えても苦労しないでしょうが。
 ミ゚Д゚;彡・・・3Stringの入出力でラップすれば…
         コンポもクラスなんだし。
 ミ;;゚Д゚彡トリップの桁が・・・・・・
トランザクションとかTDBGridとの連携とか色々考えたら、
>データアクセスを担う1関数だけ
なんてわけにはとてもいかず、データベースとの中継を行なうコンポーネントひとつ
作る労力が要るのでは無かろうか?
素直にMyBaseでも使ってればいいじゃん…。
 ミ゚Д゚;彡構造化って外捻はあるですか?

ファイルアクセス用に1関数つくるのと
 同じような入出力で
 DataModuleに1メソッド作って
相互置き換えすると、いいだけなんだけど。

トラザクとかはそれからでもいいし。
たかが、3Stringにしょっぱから、DB導入ナノ?
ま。どうでも。
そっちこそOOPの概念ありますか?
DBの代わりにファイルアクセスするものを作るにしても、
既存のDBコンポと連携させようとしたら、
TDataSetから派生させて、全メソッドサポートしないと動かないじゃん…。
(まさか、本番も、全データをメモリに読み込んで、書く時も一斉に…ってわけじゃあるまいし)
で、ローカルファイルでテストしたければ、
BDE経由でCSVでも、MyBaseでXMLでも、似たような事はできるので、
わざわざ手間かけて回り道することは無いでしょ?
あふぉやね
あの程度の質問をする人にいきなりDBだなんだを持ち出さなくてよろしい

ムキになるなよ
そうそう。
絶対ドラゴンボールと勘違いしてる。
190デフォルトの名無しさん:02/10/03 23:25
マウスで選択した範囲を
インデントまたは元に戻すショートカットキーって
なんでしたっけ?
^ku
^ki
某に聞け
194190:02/10/03 23:33
^sankusuko
そういや、ヘルプのキーボードショートカット一覧って、
キーワード検索で探すしかないの?
目次からではどうやってもたどり着けなかった気がするのだが。
ヘルプファイルをテキストにコンバートすれば一発だよ>195
197 :02/10/04 00:11
なんか荒れ気味だけど、本人どーした?<ini話の張本人
荒れてるのは不明確な部分を勝手に想像力で埋めちゃってる
おっちょこちょいだけだろ。
199デフォルトの名無しさん:02/10/04 00:18
オッチョコチョィ萌え〜
●●●●●●●●恒例・「オセロさえ納期内に作れない=OO役立たず 」祭り●●●●●●●
http://pc3.2ch.net/test/read.cgi/tech/1032985885/l50
/|         |  |_____ΦΦΦΦΦΦΦΦΦΦΦ||ΦΦΦ
  |         |  | ̄ ̄ ̄ /|                    ||
  |         |  |   / /|TTTTTT   TTTTTTTTTT||TTTTT
  |        /\ |  /|/|/|^^^^^^ |三三| ^^^^^^^^^^^||^^^^^^^
  |      /  / |// / /|
  |   /  / |_|/|/|/|/|
  |  /  /  |文|/ // /
  |/  /.  _.| ̄|/|/|/         Λ_Λ
/|\/  / /  |/ /           (___)
/|    / /  /ヽ            /〔 非OO 〕〕つ
  |   | ̄|  | |ヽ/l            `/二二ヽ
  |   |  |/| |__|/   Λ_Λ     / /(_)
  |   |/|  |/      ( ´∀`)   (_)    Λ_Λ
  |   |  |/      // /  ^ ̄]゚        (`   )
(省略されました・・全てを読むにはここを押してください)

201デフォルトの名無しさん:02/10/04 02:08
procedure TForm1.FormCreate(Sender: TObject);
var
FS1 : TFileStream;
begin
FS1 := TFileStream.Create(FILENAME, fmOpenRead);
try
while FS1.Position <> FS1.Size do
begin
//ファイルを読み込んでいく処理
end;
finally
FS1.Free;
end;
end;

こういうのって成立しますか?
するよ
203デフォルトの名無しさん:02/10/04 03:22
( ^▽^)
>>190
それぞれ
Ctrl+Shift+I
Ctrl+Shift+U
です.
205デフォルトの名無しさん:02/10/04 09:03
>>189
ワラタ
LISTBOX等で
Listbox1.DeleteSelected;
をおこなうとフォーカスが線だけの囲み状態になって、例えば
DELキーにレスポンスして連続削除のようなことができないです。
どのようにすれば、プログラム側から動的にリストの項目をセレクト
状態にできるでしょうか?
-----------------------------------------------

ListBox1.TopIndex:=i;//リスト画面のスクロール

この関数でリスト表示位置を移動した時に連動して、
オーナー描画をしたいんですが。
onオーナー描画で描くと、描画後にリストのスクロールがおこなわれ描画画面が消えてしまいます。
このような場合正しいタイミングにするためには、どのような設計が必要なのでしょうか?

Delphi7で、dcuのみでpasファイルがないユニットをコンパイラが認識しないようなのですが、
同様の症状が出る方はいますか?
>>207
確かめてないけど、他バージョンのdcuを認識しないのは伝統的な仕様だったと思う。
209無責任だが:02/10/04 18:54
makeファイルもどきがDelphiIDEで出来ないかな?

いま、逆アセみたいなのを作ってるんだけど
1、元になるテキストデータを作って
2、それをDelphiでDelphiソースに変換
3、2のソースを
function Cvt(dt:Integer):string;
begin
{$INCLUDE CODE.INC}
end;
みたいに取り込んで利用

で、問題は、1,2,3を調整の為に頻繁に行き来するんで DelphiのIDE上で全て作業出来ないかなと 

複数プロジェクトを作っても2のアプリを実行までは自動で出来ないんで
どうやると効率良いかなというご相談です。
>>208
フリーのコンポーネントの中にはソースの付かないものがあるけど
バージョンが古いともうだめってこと?

だとするとフリーでもソースの付かないコンポーネントは逝ってよしかな
>>210
その通り
>>209
普通に考えれば、ツールメニューに$EDNAMEなどを使って登録しておくか、
OpenToolsAPIでIDEの機能として全てを組み込んでしまうか、でしょうね。

後者の場合深くやろうとすればそちらへ労力を割かれそう。
やっと昨日、ずっと引っかかっていた新規プロジェクトをOpenToolsAPIで作る方法を発見…。
213207:02/10/04 20:37
>>208
回答ありがとうございます。
仕様だったんですか。不便ですね…
>>206
たとえばこういうのとか
var
  Index: Integer;
begin
  Index:=ListBox1.ItemIndex;
  ListBox1.DeleteSelected;
  if not(Index<ListBox1.Items.Count) then
    Index:=ListBox1.Count-1;
  if 0<=Index then
  begin
    ListBox1.Selected[Index]:=true;
  end;
end;
------------------------------------------------
TopIndex:=i;の後にRepaintすればいいのでは?
そういう話ではない?

215無責任だが:02/10/04 21:21
>>212
 そうですね。 やっぱりそれしかないかな。

今、3で作るアプリ内で日付を比較して更新する方法を考えました。
更新があったらソースを書き換えて勝手に終了させるようにしてと
カレントプロジェクトのディレクトリの
makefileをmakeするツール登録してるよ。

makeしたけりゃmakeすりゃいいのさ。
217デフォルトの名無しさん:02/10/05 06:12
初歩的な質問ですが、TActionMainMenuBar にサブメニューを追加する方法がわかりません。
どうすればいいのでしょうか?ヘルプを見ても載っていませんでした。
218デフォルトの名無しさん:02/10/05 06:18
解決しました。
219デフォルトの名無しさん:02/10/05 07:22
メモリー上の画像データ(RGB24)を画面に描画するには
どうすればいいんでしょうか?
画像データを1dotづつRGB(R, G, B)からTColorへの変換
して、点を打っていくしかないんでしょうか?
220デフォルトの名無しさん:02/10/05 07:41
解決しました。
221無責任だが:02/10/05 08:18
>>216 それもそうですね。 ただついF9押してしまうんで

>>217 メインのメニューが作れたなら Itemsの所から[・・・] をクリックして追加

>>219 同じサイズのTBitmapを作って、作ったイメージデータをBitmap.ScanLine先にコピー
 Bitmapは、Imageコンポを画面に貼り付けて Image.Pictureに設定するだけで表示出来るし
 OnPaintイベントで Canvas.Drawメソッドでも表示可能
222デフォルトの名無しさん:02/10/05 10:16
イベントハンドラ内で長時間ブロックしているとき、
スレッド作ってSynchronizeでApplication.ProcessMessages呼んで
フォームが固まるのを防ぐのって有りかな?
>>222
というか Synchronize って そのProcessMessageで呼ばれるのじゃなかったっけ?
時間がかかる作業のほうをスレッドにするのが定石だと思うが。
スレッド内の処理が完了しないと
他を処理出来ないケースとかって結構あるから、
スレッドにする事で処理速度が落ちる可能性を考えると
スレッドって有効な手段なんだろうか?
とか、昼飯を買いに行きながらよく考える。
226デフォルトの名無しさん:02/10/05 12:38
型なしファイルでRewrite 手続きを使おうと思い
ヘルプで調べたのですが
procedure Rewrite(var F: File [; Recsize: Word ] );
のRecsizeのところが分かりません。
ヘルプではデータ転送に使われるレコードサイズを指定と書いてあるのですが
これは通常どれくらいの数にすればよいのでしょうか?
デフォルトでは(何も書かなければ)128となっていますが
この設定基準ってなんなんでしょう?
多く取れば転送高速になるかもしれないが、無駄かもしれない
少なければ無駄は無いが、遅くなるかもしれない。

デフォルトでよいのでは?

数メガ書き込むときなどは、大きめにとればいいんじゃ

こんなコトに悩むより、自分で実験してみたらいいと思う
Pascal 覚えはじめは、AsssignFile()/CloseFile() 使ってたけど
いまはほとんど、TStream 系や TStrings 系の LoadFromFile()
や SaveToFile() ですましてる。
AsssignFile() -> AssignFile() な(笑)
230226:02/10/05 12:57
>>227
インターネットのパケットに似てるのかな?
凄く参考になりました。
そうですね実験してみます。ありがとう。
ガンダムSEED
ドラえもん祭り
サップvsホースト
ゴールデンシアター[マトリックス]
>>226
RewriteのRecSizeは書き込みバッファのサイズではなくて,
何バイト単位で書き込むかを指定する値です.
RecSizeには1を指定します.

128という値は昔のOSが128バイト単位でファイルを読み書きしていたのと
関係があるかも知れません.

#私も今はRewriteは使わずストリームを使っています.
>>232
>何バイト単位で書き込むかを指定する値です.

あ、そうなんすか。
で、たとえばデフォルトの128バイトの場合、
3バイト書き込んだ時点で、ディスク上のファイルはどうなるの?
>>233
確認してないのであてずっぽうですが、バッファが128byteで
書き込みが3byteの状態って単にバッファにたまっていて
書き込まれていないでしょうね。

そしてバッファがいっぱいになったときとかクローズするときに
全部を書き込むようになっっているはずです。
俺の記憶が正しければ、一回の書き込みでも指定したバイト数書き込んじゃって
いやーんなことになります

ま、やってみりゃわかる。
まあ便利な時もあるよね
最近AssignFile使わないけど
237デフォルトの名無しさん:02/10/05 23:44
Delphiでマトリックスは作れますか?
238デフォルトの名無しさん:02/10/05 23:53
>>237
m×n行列なら2次元配列でいいんじゃないですか。
http://www.users.gr.jp/ml/archive/delphi/41901.asp
より

多次元配列は配列の配列です。次に例を示します。

type TMatrix = array[1..10] of array[1..50] of Real;

これは次と同じです。

type TMatrix = array[1..10, 1..50] of Real;

どちらの方法で宣言しても,TMatrix は 500 個の実数値の配列を表します。


>>237
Code Centralに逝きたまえ。それが全てだ。
240デフォルトの名無しさん:02/10/06 00:01
delphiで初めてデータベースを作ろうと思っています。

いろいろとチャレンジしているのですが教科書が無いのでInpriseのマニュアルだけでは進展しません。
データベース対応アプリを作るのに参考になる良いサイトあるいは書籍があったら教えてください。

手元にDelphi2.0テクニックマスター集中講義があるのですが、データベースに関する部分は
説明が少なくてなかなか理解出来ないでした。

私のレベルはなんとか脱初心者レベルではないかと自分では思っています。
脱初心者レベルなら自己解決できます。
良かったですね。
242デフォルトの名無しさん:02/10/06 00:14
>>221
ありがとうございます。
最初、Bitmap.ScanLine := pDataとか間抜けなことして、読み出し専用
だっつーてんだろ!というコンパイラのツッコミにかなり悩みましたが
やっとこなんとか解決できました。
243デフォルトの名無しさん:02/10/06 00:20
>>241
脱初心者出来ていなかったようなので初心者に戻ります。
どうかよろしくお願いします。
244デフォルトの名無しさん:02/10/06 00:30
>>240
Delphi2.0のころの本だとしんどいと思います。そのころじゃBDE(BorlandDatabaseEngine)の
説明しかないんじゃないでしょうか。現在ではDatabaseへのアクセス方法が

BDE ボーランド独自
ADO MS(というかWindows)の流儀
dbExpress Kylixとの互換性を考えた新しい方法

あとInterbaseへのダイレクトなアクセスとかローカルにXML形式でファイルを作るMybaseなど
いろいろな方法が用意されていますから、そのころの本だけで勉強しても無駄骨に終わる
という可能性が大いにあります。

DelphiでDBとかいうテーマの本だとOracle oo4oを扱ったものまでありますから、とりあえず
大きな本屋さんへ行って気に入った本を買いなさいってこと。

脱初心者なら自分にあった本くらい探せるでしょ。
245デフォルトの名無しさん:02/10/06 00:40
Delphi7.0のアカデミックを買いたいのですが、学生証を要求されるものなのでしょうか?
>>240
データベースの場合、基本の概念を理解していれば応用が楽(と言
うより基本ができていないと何をやってもだめ)なので、本当に身
に着けたいならそこからやるべき。
>> 基本ができていないと何をやってもだめ

なんでもそうかと思うふ
糞詰まんない一般論吐いてる暇があったら
Del&DB本の一冊でも紹介してやりゃいいのに。
> Inprise
未だに隅をつつくなよ。某がかわいそう
>>238-239
ネタニマジレスカコワルイ
251apone:02/10/07 14:39
リストビューのアイテムをドラッグアンドドロップでデスクトップに持っていって
ファイルを作成したいんですが、どうすればいいでしょうか?

    (V)∧,,∧(V)
    ヽミ・ω・ノ  フォッフォッフォッ
.     .ミ,,,,,,, ミ
    ノ  ゝ  

>>251むずかすぃかも
とりあえず有名なDragDropコンポーネントをインスコ汁汁汁
逆のエクスプローラからドラッグアンドドロップでリストビューに登録することはできます。
つまりOLEドラッグアンドドロップというものについてなにかポインタを示してほしいわけで。。
254デフォルトの名無しさん:02/10/07 16:01
>>248
デル厨には一般常識すらないやつが多いのでそこから説かねばなるまい。

    (V)∧,,∧(V)
    ヽミ・ω・ノ  フォッフォッフォッ
.     .ミ,,,,,,, ミ
    ノ  ゝ   そのOLED&Dというののポインタが
         そのコンポーネントなわけで....

>[Delphi:66170] Re: 教えて下さい
ココみるヨロシ。
>>255
Googleで検索ワードをいろいろ変えてもそのML?の記事が見つからない。。鬱だ。
既にあるファイルを扱うのであれば、楽なのはIShellFolder::GetUIObjectOfなのですが…
それにしてもちょっとややこしいです。→PItemIDList周辺
とりあえず「Delphiの神託 シェルプログラミング入門」という本がお薦めです。
259ねこま:02/10/07 16:43
>>255
それのどこに DropSource があるのですか?
260ねこま:02/10/07 16:54
ちょっと皮肉っぽかったかな,ごめんなさい.
DropSource delphi で検索かけると見つかるんじゃないかな?
ものすごーく簡単に書けば、
SHGetDesktopFolder→ParseDisplayName→GetUIObjectOfでIDataObject取得。
(SHGetMalloc経由で使い終わったPItemIDListは解放)
それと、IDropSourceを実装してDoDragDrop、です。
D&DそのものよりPItemIDList/IDataObjectを得るまでの方がややこしいです。

IDropSourceはたった2メソッド、中身も1行づつかそこらなので
TForm1にでもついでで実装させれば済みます。
(コンポーネントのインストールの方が手間な気がして
その手のコンポーネントを使ったことがない私)
FileName := FileOpen1.Dialog.FileName;
if (FileName = 'aaaaa.txt') then
 (ある動作)

FileNameに「aaaaa.txt」が含まれている時のみに(ある動作)をしたいのですが、
どう書けば良いのでしょうか?
263デフォルトの名無しさん:02/10/07 20:44
age
264デフォルトの名無しさん:02/10/07 20:57
>>262
Pos(str1, str2)
>>262
if (FileName = 'aaaaa.txt') then
 (ある動作)
266デフォルトの名無しさん:02/10/07 21:08
6のpersonalのCD手に入れたんだけど、
ライセンスナンバーを取ろうとして、ログインしても
半分くらいまで読み込んだあと止まってしまって
真っ白なままなんですが、どうしたらいいでしょう。

>>262
if CompareText(ExtractFileName(FileName), 'aaaaa.txt')=0 then
(ある動作)
含まれているという表現から、この中では264がいちばん正しいと思う。
267は aaaaa.txt.txt とかでだめ。
262が正しいと思う
なんか説明しづらいんですが、たとえばフライトシミュレータがあったとします。
タイトル画面(Form1)で機体を選択すると、その機体の操縦席を再現したフォーム(Form2)に切り替わります。

このとき、機体の数だけ操縦席画面を作らないといけません。
もちろん、操縦席のフォームは一つで機体選択後に計器類を動的に配置してもいいんですが、
一個一個 Left Top Width Height とかやってると発狂しそうなので・・・。
機体ごとにForm2に貼り付ける計器(TImageとかその他パーツ類)を丸ごと保存し、機体選択後に
呼び出してForm2上に展開する、そんな変なことって可能ですか?

・・・というか、もっとスマートな方法があったら教えてください⊃Д`)
      /⌒\
     γ彡・ω)ミ
      |ミ,,゚Д゚彡   Form2/Form3/Form4...を
      |(ノ  |つ   各機体にするので
     ヾ|    |     何か問題あるでし?
      ヽ _ノ     
       U"U 
    東京オシャレさん
>>271
unit2.dfmに設計された操縦席が、unit2.pasにプログラムが書いてあるので、
ソースはそのままでフォーム内容だけ自由に置き換えができたらなと思ったんです。
(Form上のパーツの名前は共通にします)

フォームとソースが1:1で対応してるものしか作ったことがないんです・・・。(´・ω・`)
      /⌒\
     γ彡・ω)ミ  Formを動的に生成したことはあるでしか?
      |ミ,,゚Д゚彡   
      |(ノ  |つ  Form上に部品のない(最低減必要な部品のある)
     ヾ|    |    TKitaiFormを作って必要なメソッドやフィールドを記述
      ヽ _ノ    
       U"U    で、TKitaiForm1/TKitaiForm2/TKitaiForm3
             などを継承して実装してみらた、どうでかしら。
>>273
助言サンクス・・・Delphiみたいなビジュアルな環境でクラスを作ったことがないので
頭が炸裂してきましたが、頑張ってみますヽ(TДT)ノ
新規作成ダイアログで
[Project1]タブのForm1を選んで
Form1から継承したForm2を作ってみるとイイっす
           _____________
   ∧,,∧    /
  ミ,,゚Д゚彡 < 今、試してみたらずいぶん簡単
   U  つ   \
 @ミ  ミ       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ∪''∪ 
>>233
レスが遅くなってごめんなさい.

デフォルトの場合3バイトだけ書き込むことはできません.
必ず128バイト単位になります.

たとえば以下の例だと(イベントハンドラだけ書きます)

procedure TForm1.Button1Click(Sender: TObject);
var
F: File;
i: longint;
aFileName: string;
begin
aFileName := ChangeFileExt(Application.ExeName, '.dat');
AssignFile(F, aFileName);
try
Rewrite(F);
for i := 1 to 10 do
BlockWrite(F, i, sizeof(i));
finally
CloseFile(F);
end;
end;

sizeof(i)の値は4なので一見40バイト書き出されるように見えますが
実際には5120バイト書き出されます.
(レコードサイズが128で1回につき4レコード=512バイト書き出しています)
>>240
DelphiにはDB専門の書籍もあるので
その中から良さそうなのを選んでみると良いかも知れません.

私が買ったのは『Delphi5 実践データベースプログラミング』という本です.
(InterBaseにふれていたのはこの本しかなかったので
 これを薦めるわけではありません)

( )
 ( )   ( )
   ∧=∧ ポゎ〜
   ミ*゚Д゚彡 
| ̄ ̄∪∪ ̄|   誰かUnicode文字列のファイル保存と
|  ┼─┼ .|   ファイルカキコ処理
|   /\ .|   LittleとBigのエイドリアン両方の方法
|  / ホ \|   知ってたら教えてくださいませ
\____/
  └─┘   検索して
http://member.nifty.ne.jp/m-and-i/tips/unicode.htm
とか
[Delphi:45937] Re: Unicode でのファイル保存
みましたが、ちょっと改造しなければいけなさそうなので..

WideStringとやり取りしたいと思ってます
VCL標準でなかったでしたでしょうか?
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1015084410
      /⌒\    
     γ彡・ω)ミ  書評書いてヨシ
      |ミ,,゚Д゚彡   
      |(ノ  |つ   
     ヾ|    |
      ヽ _ノ     
       U"U     
>>276

レス、ありがとう。

> デフォルトの場合3バイトだけ書き込むことはできません.
> 必ず128バイト単位になります.

実験結果をみると、このデフォルト値は意味なしですね、いまや。
任意のバイト列を書き込むときは、RecordSizeは1に設定して
BlockWrite()にするといいのですね。  


 ∫,,,,,,,,,∧,,∧  とりあえずリトルエンヂアだけ
⊂,,,,,,,,,つ,,゚Д゚ミつ ならこんな感じだと思うのですが...ビッグは面倒っす
type TUnicodeEndian = (ueLittle, ueBig);
const UNICODE_Little_Endian = $FEFF;
const UNICODE_Big_Endian = $FFFE;
function LoadWideStringFromFile(const FileName: WideString;
Endian: TUnicodeEndian = ueLittle): WideString;
var FileStream: TFileStream; StreamSize: Integer;
begin
Result :='';
FileStream := TFileStream.Create(FileName, fmOpenRead); try
FileStream.Position := 0;
StreamSize := FileStream.Size;
SetLength(Result, (StreamSize - 1) div 2);
FileStream.Seek(1, soFromBeginning);
FileStream.ReadBuffer(Result, StreamSize);
finally Fs.Free; end;
end;
procedure SaveWideStringToFile(const FileName, Str: WideString;
Endian: TUnicodeEndian = ueLittle);
var FileStream: TFileStream; EndianWord: WORD;
begin
case Endian of
ueLittle: EndianWord := UNICODE_Little_Endian;
ueBig: EndianWord := UNICODE_Big_Endian;
else Assert(False, '正しくない引数');
end;
FileStream := TFileStream.Create(FileName, fmCreate); try
FileStream.Write(EndianWord, SizeOf(EndianWord));
FileStream.Write(Str[1], Length(Str) * 2);
finally FileStream.Free; end;
end;
こんなPanel欲しいです。
Clickされたら色が指定した色に変わり
他のオブジェクトがClickされたらデフォルトの
色に戻る
OnEnter、OnExitとかいろいろ試したんですけど
パネルだとEditとか子に持ってないとイベントが
こないんですよね・・・
どうしたらいいでしょうか?
>>282

OnClick で Panel1.SetFocus;
OnEnter で色を変え
OnExit で色を元に戻す
284282:02/10/08 16:08
>>283
ありがとうございます
できました。

あとパネル下にフォーカスのないコンポーネント(TSpeedButton)
が貼り付けれていた場合、そのコンポーネントを選択した時にも
パネルの色を変えたいのですがなにかよい方法はありますでしょうか?
>>284

うーむ、これだと OnExit が起きないね。いっそ、WM_LBUTTONDOWN
メッセージを監視したらよいのでは。

{ Private 宣言 }
public
procedure AppMessage(var Msg:TMsg; var Handled:Boolean);
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage := AppMessage;
end;

procedure TForm1.AppMessage(var Msg:TMsg; var Handled:Boolean);
begin
if Msg.message = WM_LBUTTONDOWN then begin
if Msg.hwnd = Panel1.Handle then
Panel1.Color := clRed
else
Panel1.Color := clBtnFace;
end;
end;
286282:02/10/08 18:14
>285
ありがとうございます。できました。

何を作りたいかというと、パネル自身及びパネル下のコンポーネント
を選択した場合にパネルの色を変えて、パネル以外のコンポーネント
を選択したら色を元に戻すという単純なパネルコンポーネントを
作りたいのです。
現在、メッセージ処理の絡みで苦戦してまつ(´Д`;)
もし似たようなコンポーネントがありましたら教えてくださいませんか?
>>286

コンポーネントで >>286 のようなコードを含ませるのは難しいね。
>>283 のコードのように、自分の中だけで解決できれば簡単なんだけど。
本質的に、自分以外のフォーカスのないコントロールをクリックした場合を
検出するのはできるのかな?
>>287

× >>286 のようなコードを含ませるのは
○ >>285 のようなコードを含ませるのは

コンポーネントにすると、あらかじめいくつインスタンスが作られるか予想でき
ないので、Application.OnMessage() のようなイベントをフックするのは
適当でないよね。一つだけ、ローカルフックを最初のインスタンスが作られる
ときにインストールして、インスタンスの管理をするとよいのかも。

    l||l∧,,∧       / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     .ミ,,   彡    < 無視されてる…
     ∪ _|| ̄ ̄ ̄ | \_____________
     (ミ,,,|\||Letsノ-ト|  たかがUnicodeされどUnicode
       '\||.======.|
           ̄ ̄ ̄ 
LittleもBigも読みカキできるようになったんだけど、

BOMで自動判別あり/なし
BOM読み取りあり/なし
Little/Big

の関数仕様がきまらない...

Readの場合は(自動/Little強制/Big強制)
Writeの場合は(BomOn/OffとLittle/Big)
こういうフラグでいいだろうか...
>>289
Read で自動っても BOM 無い場合に困るから、Little/Big の指定ができた方がいいんじゃないかなぁ。
BOM 無い場合、例外飛ばしてもいいけど、使い勝手が悪そう。
>>289
ザロゲートって知ってる?
BOM無い場合デフォルトでLittleでいいでしょう
>>287
>本質的に、自分以外のフォーカスのないコントロールをクリックした場合を
>検出するのはできるのかな?
この方法激しく知りたい
ここでザロゲートは関係ないな
>>292
>>本質的に、自分以外のフォーカスのないコントロールをクリックした場合を
>>検出するのはできるのかな?
>この方法激しく知りたい

お手軽方法としては、目的のコンポーネントで TApplicationEvents のインスタンス
を抱え込んで、>>285 と同じことをする、というのは?
>>295

マチガイタ、>>293 ね。
297デフォルトの名無しさん:02/10/08 22:31
TreeViewでD&DするにはOnDragDropを弄ればいいんですよね?
     /⌒\
    γ彡・ω)ミ      / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     |ミ,, ゚Д゚彡     < できますた。ぷにこーどファイルIO
     | つ_|| ̄ ̄ ̄ | \_____________
   〜ミ,,, ,,|\||Letsノ-ト|
       '\||.======.|  ちょっとがんがったよ。
           ̄ ̄ ̄   もっといいソースが書けたら続けてみてね
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1034090664

ソース置き場では、1に ちょうヴんカキコしちゃだめなの、忘れてた・・・・
     /⌒\
    γ彡・ω)ミ      />>290さん ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     |ミ,, ゚Д゚彡     < きっと満足して板だける、仕様に
     | つ_|| ̄ ̄ ̄ | \__なったのではナカ?ですか__
   〜ミ,,, ,,|\||Letsノ-ト|
       '\||.======.|  読みはLittleとBigは常に指定して
           ̄ ̄ ̄    BOM優先/無視スイッチ
                書きはLittleとBig指定と
                  BOMON/OFFスイッチ漬けます太
フサギコさんに聞きたいんですけど
あなた本当に給料もらってるプログラマなんですか?
               __________
       ∧,,∧   / まあ仕事中に
      ミ ,,゚Д゚ミ <  2チャンしてる不良サラリーマソではあるですよ、
    ∬ (し, ミ_と)_ \君ほど、無礼な人じゃないから
   /且       /||   普通に社会生活は営んでるけど。
   || ̄ ̄ ̄ ̄ ̄||
       とか青ってみるです。が、どうでしょうか。
            カエリマツ
           ,,,,,,,,,,,,,,,∧,,∧   / す・・すまそん。
         〜′,,,,,,,,,,ミ゚Д゚;彡<  電話で元カノと
          UU"""" U  ⊃  \ 最悪県下厨だったので
    ______      レス即煽り返してしまたです。
   /且       /||     ごめんなさい。ごめんなさい。見逃してください。
   || ̄ ̄ ̄ ̄ ̄||       タイーホしないでください。たった今、個人的に吐き気がするほど
               気分が悪い時刻でした....
            はい、残業代でそこそこ、お金もらってるかもーな
               エセヨみたいな雑用係仕事してますです。最近。が何か?

      そういえばテストコードを書いていないっすね。
303300:02/10/09 03:50
>>301
ありがとうございました。
生きる勇気がわいてきました。
304デフォルトの名無しさん:02/10/09 10:27
property hoge: THoge read FHoge write SetHoge;
ってのがあったとして、Create内でhogeを設定する場合
1.SetHoge(lhoge);
2.hoge := lhoge;
どっちが美しいと思います?

私的には2のが美しいと思うんですが、私の周りの人達
に言わせると、1のが美しいそうで・・・・・・
このスレの人達的には、どっちが美しいと思いますか?
>>304

それは明らかに1.
プロパティーは外部向けのインタフェースなので、自分からそれを
設定するのは変。アクセスメソッドを直接よぶのがオーバーヘッド
(わずかですが)がない感じがしてgood
306デフォルトの名無しさん:02/10/09 11:13
>>305
レスサンクス。
なんとか賛同者を募ろうと画策したんですが、やっぱ駄目ですか?
う〜ん、1の方がやっぱ美しいのかな・・・・・・・
2のが簡素に見えるし、タイプ量も少なくて美しいと思ったんですが

ズレてるのは私の方だったのか・・・・・ショック〜
1派に鞍替えすることにします(´д`;)
   ∧,,∧    /おれも(1.)
  ミ,,゚Д゚彡 < (2.)はクラス内でプロパティ代入している
   ミつ つ   \っすよね。それはちょっときれいくないかと。
 @ミ  ミ      
   ∪''∪    
   ∧,,∧     /
  ミ;゚Д゚彡  < むしろ、こうすべきかと。
  ミつ  つ   \
AAAは定型処理を手続き化してるとミナシテください

procedure SetHoge(Value: THoge);
begin
 AAA;
 FHoge := Value;
end;

construct Create(HogeValue: THoge);
begin
 AAA;
 FHoge := HogeValue;
end;
>>308
関数呼び出しが一つ減って、効率が良いのは分かるんですが・・・・
Createの中にSetHogeの内容が丸々入ってるのは、感覚的には
受け入れ難いんですが・・・・・・
でも、AAAをprotectedに置いて、継承先でoverrideできたりする
と、便利なのかな?
でもでも、だったら寧ろSetHoge自体をoverrideできれば済む様
な気もするし?だんだん深みに嵌っていくなり〜
今、設計時なのか実行時なのか取得できる
メソッドみたいなのってありますか?
>>310
if csDesigning in ComponentState then 設計中です
>>311
おお!ありがd
>Createの中にSetHogeの内容が丸々入ってるのは

   ∧,,∧     / 説明が足りなかったかも
  ミ;゚Д゚彡  < あと、理想は理想で現実は
  ミつ  つ   \ 楽するために>>304の(1.)のケースは
            よく書くと思われ
procedure THage.AAA(Value: THoge);
begin
処理; 処理; 処理;
 FHoge := Value;
処理; 処理; 処理;
end;
procedure THage.SetHoge(Value: THoge);
begin
AAA(Value);
end;
constru(a?)ctor THage.Create(HogeValue: THoge);
begin
AAA(HogeValue);
end;

こうすると、他メソッドを作る時に
FHogeに何か付属処理あるときはAAAを呼ぶし
直接必要なときはFHogeを直接扱う
ことが出来るのではないでしょうか。

Createでの値代入と、Setでの値代入が
微妙に異なる処理になることに即対応できるやすいかな。

SetとかCreateがクラス外部とのインターフェースで
AAAが内部ロジックと考えて、そこを分離してるです。
>>304
断然2.だよ。
FHoge := Value; // 副作用なし
Hoge := Value; // 副作用あり(期待したい)
でいいじゃん。2.はwrite FHoge/SetHogeでコーディングが変わってくるし、
継承したかどうかでも変わってきて無駄な判断を強いられる。
実装の変更にも弱い。

1.派は気分以外で具体的なメリット・デメリットを論じてもらいたい。
>>308は論外。
>>314

なんだか日本語が変。きみの論旨だと1のような
>>314
> メリット・デメリットを論じてもらいたい。

どちらが美しいか、という質問です。
>>314
Hoge := ValueでもSetHoge(Value)でも副作用に関しては変わらない。
寧ろSetHoge(Value)の方が、副作用を期待しているということが明確
になるので、より良いと思うが、どうか?
2。
setter/getter メソッドは明示的に使ってはいけない。としておくと
良いこと有り。
>> 良いこと有り。

たとえば?
>>318 たとえば?2!
>>318
ちょっと尻逮鴨.

途中に別なクラスを挟んだときとかに
(VCLでいえばTCustomIniFileとか)
ソースをいじらなくて済みそうですけど….
322デフォルトの名無しさん:02/10/09 12:55
type
 Class1 = class
 public
  property A: Integer write FA;
 end;

 Class2 = class
 public
  property B: Integer write SetB;
  property C: Integer write FC;
  constructor Create;
 end;
 
constructor Class2.Create;
begin
 // ここでプロパティA,B,Cを副作用付きで初期化する最も美しい書き方は?
 // Aの初期化をはinheritedに任せないものとする。
end;

つーかC#ではアクセサへのアクセスは禁止されてるので
いまさら議論の余地はないんだけどね。
>>322

C# でなくて Delphi についてです。>>304 をよく読むように。
Class2 は Class1 を継承してないので A というプロパティーは
ないし、初期化できるはずもない
>>305
オーバーヘッドは皆無。
hoge:=lhogeはコンパイル時にSetHoge(lhoge)に置き換えられる。
>>320

結論の論拠がその結論であると? 
めちゃくちゃですね。論拠なしってことですね。
それはそれでいいけど。
>>322
う〜ん、なるほど。
それだと、A := 0; B := 0; C := 0;の方が美しいって事なのかな?

て言うか、「C#ではアクセサへのアクセスは禁止されてる」の
理由が気になる。もし、知ってたら教えてお願い。
>>323
そこを揚足とるのは、ちょっと大人気ないと思うぞ(笑
>> hoge:=lhogeはコンパイル時にSetHoge(lhoge)に置き換えられる。

ははぁ、そうですか。ありがとう。

では、美しいかどうか、という美的議論だけですね。
はじめからそうですけど。
>>326
というか何のためのプロパティなのかと小一時間問いつめたい。
privateにアクセスできない理由を考えてみよう。それと同じ。
>> privateにアクセスできない理由を考えてみよう。

自分自身はアクセスできますが。
継承した上位クラスが別ユニットになっているときは、プロパティーを
通してしか初期化できませんね。たしかに。
>>329
Delphiでは privateが禁止してるのは同じユニット(同じソースファイル)にあるかどうか
だから
type  Class1 = class ;
type  Class2 = class(Class1);
の2つが同じユニットにあるなら、 privateの意味はなくて裸と同じ
             _______________
  ,,,,,,,,,,,,,∧,,∧   /
〜′,,,,,,,ミ,,゚Д゚彡< ヘイルスバーグたんはよく見てるなー
  UU""" U U   \
              ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>C#ではアクセサへのアクセスは禁止されてるので
>いまさら議論の余地はないんだけどね。
よくここが不要だと見抜けるもんだわさ。

>>323 偽コードだから継承してるつもりでしょ..

>>314 何が論外だよ、頃すぞゴルァ
>> つーかC#ではアクセサへのアクセスは禁止されてるので

じゃ、どうやってプロパティーを定義できるの。アクセサを呼ばずに。
C# しらないんで教えてください。
326>>329
何を言わんとしてるかは、なんとなく理解できたと思う。
要するに、例え内部的に完結してても、極力公開されてる
手段を用いてアクセスする方が好ましいって事かな?
いろいろな意味で低レベルな奴が多いってことだな。Del使いには。
>>333
プロパティの アクセサは
public string Name
{
  get
  {
   return name;
  }
  set
  {
   name = value;
  }
}

のように、書きます。 これでは外部から get/setにアクセス出来ませんね?
>>334
>要するに、例え内部的に完結してても、極力公開されてる
>手段を用いてアクセスする方が好ましいって事かな?

そうか。おれは、コンポーネントがそれ自体で完結している
方が好ましい
>>336
が、が、外部?
いや、そうじゃなくて、今話してるのは、内部的にhoge := lhogeするか
SetHoge(lhoge);するか、どっち美しい?って話なんだけど・・・・・・
君は何処へ行きたいんだ?
>>336

ありがとう。では C# では選択の余地なし、ってことですか。
継承した下位クラスで setter/getter を override するような
ことはできるの?
>>337-338
ダメダコリャ
>>338
 だから、C#のプロパティのアクセサはDelphiと違って メソッドじゃないから呼び出せないんだよ
334>>337
hoge := lhogeだと完結してなくて、SetHoge(lhoge);だと完結してると
言うのも、おかしな話だと思うが?

でも、これって
void hoge(void) {
}
void hoge(void)
{
}
どっちが美しい?って話と同じで、実際はどっちでもいーじゃんて
話かもな(w
>> 実際はどっちでもいーじゃんて話かもな(w

それは質問者 >>304 も知っていて、だから、どっちが美しい、ときているんでは
>>339
下位クラスで
public new string Name // Notice the use of the new modifier

のように newを付けると基本クラスの Nameプロパティは隠蔽出来ます

隠蔽されたプロパティにアクセスするにはキャストを付けます
inherited に相当するのは、これで実現可
>>341
うげっ!マジで知らんかった。
>>336の表記はそういう意味だったのか、C#全然わからんちん(泣
>> メソッドじゃないから呼び出せないんだよ

なんだ、じゃ、禁止されてる、とかの問題じゃないじゃない
>>344
なんだかエレガントかも?とか思ってしまった俺は洗脳されかけてる?
>>344

再度、ありがとう。C# はまだ文法のところでクラスまでいってない。
継承では、プロパティーごと置き換える(上書きする)感じなのね。
アクセサを override するのとはずいぶん違うんだね
どっちが美しい、とか聞かれてもな。
宗教論争の始まりなんで、>>304は質問を撤回しる。

美しさでなく実際の運用であれば、>>314に同意。
>> 美しさでなく実際の運用であれば、>>314に同意。

美しさであれば?
現時点ではSetメソッドは無く直接write FHoge指定しているけど
そのうちSetメソッド追加するかもなあ、って状況に対応できるので、
メリット・デメリットだと2.
>>351

>>304 の質問内容が理解できないみたいだね。
>>336
- Delphi -
 property Name: string read=getName write=setName;

- C# -
public string Name{
 get{
  return getName();
 }
 set{
  setName(value);
 }
}

C# の get/set にアクセスできないってのは、Delphi の read/write に
アクセスできないと一緒。
違いは、C# の get/set が無名のメソッドなところと、set で value が暗黙の
引数でちょっと気持ち悪いところ。
>>352
お前頭悪いね。小学生並みの読解力だな。
>304を字面通りに判断すればどっちでもいいということになるけど、
どっちでもいいのであれば他の面で2の方がメリットが多いといっている。
>354
>304を字面通りに判断すればどっちでもいいということになるけど

いいとか悪いとかを質問してるのではない、ということが分からないのか
議論の流れはもう>304とは関係ないような・・・
>>354 >>355
他でやってくれ。
358デフォルトの名無しさん:02/10/09 14:11
TClass.hoge と
Class.hoge が別物として扱われるからだと思ってた。
フサギコスレでやったら?

あと、352とか355みたいな見え見えの煽りに引っかかるなよ。
 ∫,,,,,,,,,∧,,∧   ノビー
⊂,,,,,,,,,つ,,゚Д゚ミつ 
           
Delは property ... write FHour とかもかけちゃう自由度あるので
いったん、Propertyの宣言を見なければ
本当に、この関数(SetHoge)を呼び出しているのかどうか分かりにくいから
Setの方がお勧めだけどなー。

property宣言書き換えたら、
全メソッドの内容チェックするのも嫌だし...
>>360
それは逆。
property宣言が書き換えられた時に対応できるのは2.
…って、今までのレス読めよ…。>>314氏が可哀想だ。
> 352とか355みたいな見え見えの煽りに引っかかるなよ。

352だが。煽ってるつもりはないんだけどね。これで最後にする。

えーとね、>>304 はどっちだって機能的には等価である、ことは知ってて
どっちが美しい、と質問してる。

質問自体の是非はおいといて、この質問にまともに答えてるのは 305 と
307 だけだよ。314 以降は、何を勘違いしたのか、メリット/デメリットとか
C# との関係とかで、全く見当はずれでしょ。それでそのことを指摘したら
小学生なみの読解力っだてさ。どっちが、と思うのも当然だと思うんだけど。
だからスレの流れを読(略
プログラマの言う美しいは、単なる見た目だけの話ではなく
所謂、機能美までをも含む訳で、メリットやデメリットについ
て語ったとしても、それが的外れって事はないと思うのであ
ります。どうでがんしょ?
このネタ振った奴はさっさと収拾させろ。
 ∫,,,,,,,,,∧,,∧  読んだ上で言ってるんだけど… 
⊂,,,,,,,,,つ,,゚Д゚ミつ よく考えてみなよ。>>361

>>314
> FHoge := Value; // 副作用なし
> Hoge := Value; // 副作用あり(期待したい)

実際には、クラス内部を書いている視点では
FHoge := Value: //副作用なし
SetHoge(Value); //副作用あり
Hoge := Value; //副作用あるのかないのかPropertyみないとわかんない

という事。
Setメソッドを作るか作らないかで迷うなら
作っておくのが、普通のOO志向だし。
(writeでSetなしでフィールド直書きというのは
 readでGetなしフィールド直読みよりも、少ない)
それに対応したいのなら、Setメソッド内部のコードを変更すべき。かと。

クラス内部のメソッド呼び出しと
クラス外部からの副作用を期待したいという
プロパティアクセスとは
区別しておくほうがいいと思うよ。


C#は、アクセスメソトなくしで呼び出し禁止し
やり方を、一方に限定したという点では美しいとは思う。
C#では、Createとアクセスメソッドで
ちょっとだけ異なった処理を行いたい場合には
>>313の形にもっていかざるおえなくなるから、
美しい形にもっていきやすくもなるんだけど
C#のやり方をDelでやるのは、ちょっと違う。
継承したクラスで
SetHogeやプロパティを変えたりするのは
どう考えればいいの?
>>366
…。


ツッコミは他の人に期待するとして、VBの場合Property Letだから
Setメソッド必須に近いなー、分離したければAAAみたいなのを用意するしかないなー
…ってのは想像がついた。
で、今回は機能的に等価なものを選ぶという趣味の問題なので、
Delフサギコ氏のセンスはどうでもいいのだけれど、

>作っておくのが、普通のOO志向だし。

自分の普通を一般の普通と思うのはあなたの悪い癖だ。(SJISの時もそう)
私はwrite FHogeは普通に使う。
>>365
ごめんなさい。もう私には収拾不能です。
だって、みんな私より遥かに多くの事を考えてるんだもの。

私的には、もっと軽い気持ちで、どっちのスタイル?くらいに
思ってたんですが、まさかこれほど色んな意見が出てくると
は思わなかったですよ(:´Д`)

>>367
継承元クラスがどちらを使ってても、継承したクラスからは
何も変わらないと思う。
どちらを選択しても、出てくるコードに変わりはないはずだ
から。
>FHoge := Value: //副作用なし
>SetHoge(Value); //副作用あり
>Hoge := Value; //副作用あるのかないのかPropertyみないとわかんない

FHoge := Value: //副作用なし
SetHoge(Value); //SetメソッドあるのかないのかPropertyみないとわかんない
Hoge := Value; //副作用が必要な時は副作用あり
SetHogeで代入できるかも
Propertyみないとわかんないのでは。
HogeがあるのかないのかもPropertyみないとわかんない。
>Setメソッドを作るか作らないかで迷うなら
>作っておくのが、普通のOO志向だし。

なんでそれが普通なんだ? 作るのが推奨されるのは言語仕様にプロパティが含まれてない言語じゃないのか? ただ代入するだけのときにわざわざsetter書くのがオブジェクト指向か? 手段と目的を取り違えてないか?

setterを使うのはカプセル化のため。
だが、delphiはカプセル化をpropertyで実現できるので、setterが必要ない場合もある。
必要になってから作るのがdelphiの「普通」。
Hoge := Value; でいいでしょ。
外部から呼ばれる時もこうなんだし。
>>371-372
マジレスなのかネタなのか、その辺からハッキリしようじゃないか(w

あるプライベート変数にアクセス可能な関数は、どんな場合も例
外なく1以下である。という俺様ルールの元では、Hoge := Value;
としておいた方が、後でSetHogeやGetHogeを追加する時には便
利。
歴史は繰り返す。
過去に学びたまえ、諸君。
それはセットしたらゲットできないということ?
SetHogeを呼び出したいときにSetHogeを呼び出す。
SetHogeを呼び出したいときにHogeを使ってはいけない。
Hogeは機能を表現しているのであり、どのメソッドで機能を実現するかは隠蔽されている。
「Hogeがどのメソッドで機能を実現するか」に依存したコードは抽象化に問題がある。

繰り返すが、SetHogeを呼び出したいときにHogeを使ってはいけない。

1.SetHoge(lhoge);
2.hoge := lhoge;

この2つのコードが将来に渡って同じ意味であることは、普通は保証されない。
hoge := lhoge; を使った方が中傷化ができてるんでしょ。
>>378
Hogeにアクセスして問題になるケースを具体的にageて下さい。
>>375
そのルール自体に無理があるだろ?
リードオンリのプライベート変数にアクセスする手段がなくなるぞ。
リードオンリのプライベート変数だけは別ルールなら、それは決
して美しくない。

もっとも、リードオンリのプライベート変数には、プライベート関数
を使ってアクセスする手がある。
この場合、SetHogeに統一しておく方が、全てをSet〜で
統一できるから、君の言う俺様ルールを適用した場合でも
美しいということになる。
コンストラクタでセットするんだから 初期化の為だろ?
なら SetHogeを陰に陽にも呼ばないのが普通では?

たとえばビジュアルなコンポーネントだと SetHogeで大抵Invalidateとか 呼ぶだろ?
コンストラクタでいちいち呼んでたらなんか処理時間が勿体ない気がするしな
副作用が不要な場合のアクセス手段は議論からはずれてるよ。
>>375だってそれは理解しているはず。
FHoge使え。
>>384
 構造化言語的には副作用は別のメソッドを用意しておくべきだな
>>382
それを考えると、>>308は受け入れ易いかも?

>>380
最初はリード&ライトを許可してたが、後で
リードオンリーに変更した場合とか、かな?
>>378は正論だが、誤解を受けやすいと思う。
で、その上で補足しておくと、

SetHogeというひとつのメソッド(アクセサであることは関係なしに)を呼び出したい時は SetHoge
FHogeフィールド(プロパティの実体であることは関係なしに)の内容を書き換えたい時は FHoge :=
Hogeプロパティの内容を書き換えたい時は、Hoge := (この際SetHogeかFHogeか考慮することは無意味)

俺が誤解してたらごめん。
>> たとえばビジュアルなコンポーネントだと SetHogeで大抵Invalidateとか 呼ぶだろ?

プロパティーを通しても SetHoge() 呼ばれますけど。
議論の観点がずれてるような
>>388
だから陰にも陽にも SetHoge()を呼びたくないんだろ?

FHoge := xx; とか初期化したいのを並べておいて
最後に副作用を一挙に呼ぶのが普通では?
>>382
自分的にも賛成なんだけど、
csLoadingやHandleAllocatedで切り分ける、
つまり初期化中かどうかのフラグを用意するのがVCL流っぽい気もする。

自分は、コンストラクタではFHoge、
それ以外は何も考えない時はHoge、副作用があったら困る時のみFHoge、
極希にメソッドとしての一面を利用したい時(多態やindex付きなど)はSetHoge、かな?
391378:02/10/09 15:40
>>380
「このクラスはHogeプロパティを持っていましたが、クラスのバージョンアップに伴い削除することになりました」
というケース。
SetHoge呼び出しのつもりで使ってると、修正しなくて良かったところまで修正するハメになる。
プロパティは使うなと言ってるわけではない。使い分けが必要だということ。

>>387
補足ありがとう。その通り。

さらに補足しておくと、
メソッド呼び出し、フィールドの変更、プロパティの変更はそれぞれ意味を持っている。
同じ意味であることが多いが、同じ意味であることが保証されるとは限らない。
>>390 csLoading をコンストラクタで使うのはどうだろうか?
 実際のプロパティの設定はコンストラクタの後なんだし
FHoge を初期化したいのと、
SetHoge() を実行すべきか、プロパティーに代入すべきか、
というのは全然別の議論です。

private フィールドの FHoge は、Hoge と同じ型を持っているとは限らないし、
Setter/Getter を持っているプロパティーは、対応するフィールドを持ってな
いこともある。
>>393

ようするに,設問は、 Hoge=xx とSetHoge(xx) が等価な時に、どちらが
美しいかという問題だから、それ以外の話は禁止という事?

本来Pascalは同じアルゴリズムが出来るだけ同じコードになるように設計されてたんだから
こういうのは困るね。
>>391
publicなものをそう簡単に変えられては困る。

>>391
プロパティの削除やreadonlyへの変更はコンパイラが全て検出できるけど
# あるいはpropertyのスコープをprotectedにするだけで済むかもしれない
FHoge->SetHogeの変更は機械的にはできない。

プロパティの導入でする必要のなくなった区別をまた持ち込むという愚を犯している。

>メソッド呼び出し、フィールドの変更、プロパティの変更はそれぞれ意味を持っている。
>同じ意味であることが多いが、同じ意味であることが保証されるとは限らない。
え、propertyってprotectedにできるの?
public propertyに外からアクセスされたくなくなったら
protected propertyにクラスを書き換えればいいってだけの話。
SetHogeを使いたくない奴がひとりだけいるのか?
俺はHogeを使うことにする。
Hogeはやめとけ







Foo, Bar, Bazにしとけ
じゃあ、俺は Wakame にしとく。
403378:02/10/09 16:46
>>395
あくまでも一例なので。
というより、例が良くなかった。

>>396
前半の意味がよく分からない。
スコープを変更する、というのは盲点だったが、外部からアクセスできないプロパティを持つことが
正しい解決策とは思えない。
また、区別する必要がないのは、求める結果が実現方法に影響されない場合だけ。
Hogeのwriteメソッドは将来変更される可能性があるが、求めるのが結果だけで、
変更されても問題がないならHogeを使っていいし、むしろ使うべき。
SetHogeを使うと実現方法が固定されるので、SetHogeの方法で結果を出さないといけない場合は
こちらを使う。
恥ずかしい議論だ・・・
賢いってどういうことだろう・・・
ある会社(TMyClass)のある部門(Hoge)に頼むとアメリカに連れて行ってくれるとする。
外部の人はHoge部しか知らないので、Hoge部に頼む。
TMyClass社内部の人は、実際に業務を行う課(SetHoge)を知っているので、SetHoge課に直接頼むこともできる。外部の人と同じようにHoge部に頼むことも可能(どちらでも料金は変わらないとする)。

Hoge部では今までアメリカに連れていくのに飛行機を使っていたが、今度から船を使うことにした。それに伴い、業務を行う課も変わる。
外部の人は「アメリカに行く」のが目的なのでどちらでも気にしない。そもそも、変更されたことにすら気づかない。内部の人でも、目的が「アメリカに行く」ことなら問題はない。
内部の人で、Hoge部に頼んで「アメリカに『飛行機で』行く」のが目的の人は、Hoge部への申し込みをキャンセルしてSetHoge課に頼み直さなければならない。
Hoge部は飛行機で行くなどとは一言も言っていないので、アメリカに『飛行機で』行きたいなら最初からSetHoge課に頼むべきだった。


というたとえ話はどうだろう。
それはSetHogeを変えないということか?
Hoge:=x とSetHoge(x) は等価という条件なら、どっち書いても美しさに代わりなし

ただし、コンストラクタにそんなもん書くなという結論で
Delphian World でDLしたフリーの複数列コンボボックス(MCCBox12.lzh)
がD7で使えなくなってる、で、現在修正中ですが、
既に俺も使ってるから既に修正したよ!って人がいれば教えてください。
(作者にメールしても良いのかも知れないけど、D3までしか正式に対応して
ないみたいなんで、修正箇所を洗い出してから連絡したいと思います。)
>>409
ちょっと見てみた、無効なポインタってエラーかな?
itemsの部分で出てるみたいだけど、よくわからんね。
411デフォルトの名無しさん:02/10/09 19:50
Indyを勉強したいのですが、ver9のdemoってどこにあるのですか?
>>411
Indyのdemoのフォルダのにテキストファイルが1つ入ってなかったか?
その中にダウンロード場所が書いてある
413デフォルトの名無しさん:02/10/09 21:01
VCLでは当然のようにHogeスタイル。
そうか? VCLでは コンストラクタは殆ど FHoge:=xx スタイルのような気がするが?
誰もコンストラクタの話しなんてしてないんだけど?
416デフォルトの名無しさん:02/10/09 22:16
でるぽいってなんででるぽいっていうの?
>>412
そのテキストファイルに書いてあったところに逝ったんですけど
demoは古いバージョンしか見つかりませんでした。
418デフォルトの名無しさん:02/10/10 21:09
DelphiよりC#の方が速いって、本当ですか?
DelphiよりC#の方が早漏って、本当ですか?
DelphiよりC#の方が小籠包ですか?
>>418
うそだぴょーん


97 名前:仕様書無しさん 投稿日:02/10/10 20:42
Delは某スレでベンチ対決やってC#にコテンパン

>>422
えらく古い話題だな。
過去ログいろいろ見てみ。ことの顛末がわかるから。
424デフォルトの名無しさん:02/10/10 21:45
Del厨がいかさまやった挙句負けてたシーンは圧巻であった。
そういうことにしたいんですね:-)
426デフォルトの名無しさん:02/10/10 21:52
>>424
ショウキ
         きのせいか
    .∧∧  C#が早いようですが、なぜ?
  ,.、ミ,,゚Д゚彡     /i
 ;'`;、. :,.:∪`゙:゙:`''':,'.´ -‐i
 '、;:.: .、.:',.: .:: _;.;. :.‐'゙゙~  ̄
  `` U U    いや、煽りぬきでさ。
          汗で比較できる方とか、教えてきぼんぬ

procedure TForm1.Button1Click(Sender: TObject);
var
 i: Integer;
 d: Double;
begin
 for i := Low(integer) div 5 to High(integer) div 5 do
 begin
  d := d + i;
 end;
 Button1.Caption := FloatToStr(d);
end;

private void button1_Click(object sender, System.EventArgs e)
{
  int i = 0;
  double d = 0;
  for (i = Int32.MinValue/5; i <= Int32.MaxValue/5; i++) {
   d = d + i;
  }
  button1.Text = d.ToString();
}
428デフォルトの名無しさん:02/10/11 00:21

TTreeViewでドラッグしているとき、マウスカーソルが
ドロップできないところ(たとえばノードのないところ)に
来たときマウスカーソルがTTreeView外に出たときのように
ドロップ不可のカーソルに変えるには
どうしたらいいのですか?
C# 仲良し Delphi Round 2
http://pc3.2ch.net/test/read.cgi/tech/1022662451/l50

    .∧∧    スマんソン
  ,.、ミ,,゚Д゚彡     /i   
 ;'`;、. :,.:∪`゙:゙:`''':,'.´ -‐i
 '、;:.: .、.:',.: .:: _;.;. :.‐'゙゙~  ̄
  `` U U    スレ違い嫌だったので
         移動しますた。教えて?!

       単にぉぃのコードが悪いでしたか??
430428:02/10/11 02:01
自己解決しますた。
OnDragOverのAccept := False;ですね・・・
スレの無駄使いスマソ・・・
431 :02/10/11 23:43
del7はどーなったんか知らないけど、どーして
標準でDirectXが使えるよーにしないのかなぁ?
あとPNG。
>>431
Microsoftが邪魔してるから
ということにしなきゃやってられません。
ということにしなきゃやってられません。
DirectXはDelphiでは需要が少ないからでしょ
Borland C++用のインポートライブラリすら付いて来なくなりましたしねえ→DirectX SDK
以前社名変更した辺りから業務系の開発環境としてのDelphi/BCBを前面に
押し出してるからでしょう。
あと、DirectXってC/C++から使う方が楽ですよね、BCBはどーなる?って
話もありますが、.NETが今後拡張されたら、将来追加されるであろう、
DirectX.NET 的なライブラリがDelphi.NETからもスムーズに
使えるようになるかもしれませんね。
438デフォルトの名無しさん:02/10/12 03:00
プログラミングが始めての人でも、一から無理なく学べるサイトってありますか?
あります。
440デフォルトの名無しさん:02/10/12 04:09
>>439
キボンヌ
441デフォルトの名無しさん:02/10/12 04:20
indyを使ってアプリを作ったんですが、他の人にテスト
してもらったところ・・

「Indy60.bplが見つからないため、このアプリケーションを開始できませんでした。
アプリケーションをインストールしなおすとこの問題は解決される場合があります。」

・・と出てしまって起動出来なかったそうです。

おそらく「プロジェクト」「オプション」「リンカ」の設定が
間違っているのではないかと思うのですが・・(^^;A

現在の設定はこうなっています。

EXE/DLL オプション → 3つともチェック無し
リンク結果      → DUCファイルを作成にチェック

原因が解る方がおられましたらご教授お願いします。m(__;)m
windows98 & delphi 6 personal sp2
442デフォルトの名無しさん:02/10/12 04:26
プロジェクト→オプション→パッケージ→パッケージ再構築
じゃないかな。
443441:02/10/12 04:49
>>442

ありがとうございます!!!

「パッケージの再構築」の欄の「実行時パッケージを使って構築」の
チェックを外してからコンパイルしたら正常に起動しました!

感謝してもしきれないくらい感謝です、ありがとうございました!m(^^)m
444デフォルトの名無しさん:02/10/12 04:53
しかし、サイズが大きくなる罠。
445441:02/10/12 04:57
>>444

んん〜、それは仕方が無いですね(^^;A
ユーザーさん一人一人にIndyをインストしてもらうよりは
マシとゆうことで・・(汗
446デフォルトの名無しさん:02/10/12 05:01
Delphiをインストールするとsystemフォルダに
vclとか入るんだよな。いらんのに。消しても大丈夫かな。
447デフォルトの名無しさん:02/10/12 05:06
初心者向けのサイト
www2s.biglobe.ne.jp/~hatena/delphi/delfrm.html

私はこれを見て勉強しました。
他のどのサイトよりも格段に解りやすいっす。

HATENAさんありがとうございました〜!
>>446
IDEが使うので、Delphi32.exeと同じとこに移動すればいいかも?(当てずっぽう)
449デフォルトの名無しさん:02/10/12 08:37
フォーム上に動的にTimageを生成しようと練習してるのですが、
このコードで何も出てきてくれません・・・。どこか豪快に間違えているのでしょうか?

img := Timage.Create(Application);
img.AutoSize := true;
img.Left := Panel_Left;
img.Top := Panel_Top;
img.Name := 'Panel';
try; img.picture.loadfromfile(img_name); except; Panel:=nil; end;
img.Show;
img.parent := self;
>>446
パケジは特殊なDLLなのでパスが通っていればどこでもよい。
>>450-451
サンクス! parentが必要だったんですね。(´・ω・`)
   ∧,,∧     /Indyで
  ミ,,゚Д゚彡  <  時刻同期クライアントを
  ミつ  つ   \作ろうと思いましたがどうやるのでしょうか?
 〜ミ  ミ       
   ∪''∪
Time鯖を動かし
TimeDemoを127.0.0.1指定なら
うまく動くのですが、ほかのサーバーを指定すると
全部えらーになるのです。
設定の仕方とか、わかる方教えてくださいませ。
   ∧,,∧     /忘れてました
  ミ,,゚Д゚彡  <  環境はD6ProUp2で
  ミつ  つ   \Time鯖/TimeデモなどはDelphi付属のdemoを
            使っています。
ポート塞いでるとかそういうオチじゃないだろうな?
    ∧,,∧  どうでしょう??どこで確認するのでしょうか?
   ミ,,゚Д゚彡   B2AdjustTimePluginは
    ミ つ旦)~~   ちゃんと、
  〜と,,,~),,~) clock.nc.fukuoka-u.ac.jp (Japan/Pacific area)
          ここにつながっているみたいです
ファイアウォールのことだよ。
    ∧,,∧    おうちは
   ミ*゚Д゚彡   普通にプロバイダにつなげてる
    ミ つ旦)~~  だけです。
  〜と,,,~),,~)   
他の時刻合わせソフトは使えてる?
桜時計に登録されてる
time-nw.nist.gov
   ∧,,∧      / ̄
  ミ*゚∀゚彡  <  ここに設定したらいけました!!
  ミ つ且~~   \鯖指定が悪かったんかな
〜ミ,,,,,, ,,ミ
    ∧,,∧∩   / ̄
   ミ*゚∀゚彡 <  ありがとございます。
   ミつ旦 ミ   \
 〜ミ,,,,,, ,,ミ  こんなんで、時刻同期できた。

object IdTime1: TIdTime
 Host = 'time-nw.nist.gov'
 Port = 37
 BaseDate = 2
end

procedure TForm1.Button2Click(Sender: TObject);
begin //鯖のDateTimeを表示
 Button2.Caption := DateTimeToStr( IdTime1.DateTime );
end;

procedure TForm1.Button3Click(Sender: TObject);
begin //自マシンのDateTimeを鯖と同期
 Button3.Caption := BoolToStr( IdTime1.SyncTime , True );
end;
462サンクス:02/10/12 23:49
>>447
(・∀・)イイ!
>>456
そこはSNTPの方じゃ?
何でIndyにSNTPServerが無いの?
|,,∧   スイマセン、私がわかってなかったようです。
|Д゚彡  
|⊂ミ インディには
| ミ  TIdSNTPはあり
|''U  デモはTIdTimeServer/TIdTimeとか使っていたので
   そのままTIdTime使ってしまいました。

TIdTimeの次のようにHELPに書いてあった・・・
>Time は,ローカルネットワークで時刻を同期させるための
>シンプルなプロトコルです。
>複数のネットワークでさらに精度の高い時刻用プロトコルを
>実現するには,TIdSNTP オブジェクトを使います。
こっちで実装してみます。
|,,∧   TIdSNTP動かない・・・
|Д゚彡 clock.nc.fukuoka-u.ac.jpと通信してもTDateTime値が0しか
|⊂ミ   戻らないの・・・・
| ミ    TIdUDPBase継承のActiveぷろぱは
|''U     BroadcastEnabledぷろぱと絡みで
    一度TrueからFalseに戻らない事が多いみたいなんだけど、、、

なんでかな,,,,,誰か動かして見てほしいっす,,,
0以外の値が出るものなんでしょうか?

object IdSNTP1: TIdSNTP
 Host = 'clock.nc.fukuoka-u.ac.jp'
 Port = 123
 Left = 8
 Top = 8
end
procedure TForm1.Button1Click(Sender: TObject);
begin
 Button1.Caption := FloatToStr( IdSNTP1.DateTime );
 //0と表示される
 //DateTimeToStrだと1899/12/30と表示される
end;
環境オプションのライブラリパスのところを誤って全て消してしまいました。
コンパイルしようとしたらめちゃくちゃエラーが出てしまいます。

誰かデフォルトで入っているを教えてください。
467デフォルトの名無しさん:02/10/13 15:49
あげ
468ねこま:02/10/13 15:53
$(DELPHI)\LIB
デフォルトはこれだけだと思ったけど.
これ?
$(DELPHI)\Lib;$(DELPHI)\Bin;$(DELPHI)\Imports;$(DELPHI)\Projects\Bpl

コンボボックスのドロップダウン部分に残ってそうな気もするけど。
470デフォルトの名無しさん:02/10/13 15:56
TTreeViewのコントロール内に
TTreeNode.Textが収まりきらないとヒントみたいな感じで表示されるけど
あれを表示させないようにするにはどうしたらよいのでしょうか?
ノードごとにヒントを出そうとしたら、ヒントが2つ出てしまう・・・
 ミ,,゚Д゚ミつ ほいな>>466さん
$(DELPHI)\Lib;$(DELPHI)\Bin;$(DELPHI)\Imports;$(DELPHI)\Projects\Bpl
472デフォルトの名無しさん:02/10/13 16:03
>>468-469,471
助かりました、さんくすです。

でもなぜか

[致命的エラー] IdAuthentication.pas(81): 'IdCoderMIME.pas' ユニットはコンパイルできませんでした

。・゚・(ノД`)・゚・。
473ねこま:02/10/13 16:26
> $(DELPHI)\Lib;$(DELPHI)\Bin;$(DELPHI)\Imports;$(DELPHI)\Projects\Bpl
こんなにあったっけか (w

>[致命的エラー] IdA ...
Indy はデフォルトじゃないからでしょう
IdCoderMIME.pas のあるパスを追加すればよいのです.
474ねこま:02/10/13 16:28
あ,じゃないのか.
Indy 使ってないからパスです.
475エラー全文:02/10/13 16:33
[エラー] IdCoderMIME.pas(10): 未定義の識別子 : 'TIdEncoder3to4'
[エラー] IdCoderMIME.pas(10): クラス型が必要です
[エラー] IdCoderMIME.pas(12): 静的メソッドはオーバーライドできません
[エラー] IdCoderMIME.pas(15): 未定義の識別子 : 'TIdDecoder4to3'
[エラー] IdCoderMIME.pas(15): クラス型が必要です
[エラー] IdCoderMIME.pas(17): 静的メソッドはオーバーライドできません
[エラー] IdCoderMIME.pas(24): 未定義の識別子 : 'TIdDecodeTable'
[エラー] IdCoderMIME.pas(36): 互換性の無い型です
[エラー] IdCoderMIME.pas(37): 未定義の識別子 : 'FDecodeTable'
[エラー] IdCoderMIME.pas(38): 未定義の識別子 : 'FFillChar'
[エラー] IdCoderMIME.pas(45): 互換性の無い型です
[エラー] IdCoderMIME.pas(46): 未定義の識別子 : 'FCodingTable'
[エラー] IdCoderMIME.pas(47): 未定義の識別子 : 'FFillChar'
[エラー] IdCoderMIME.pas(51): 演算子またはセミコロン (';') が必要です
[致命的エラー] IdAuthentication.pas(86): 'IdCoderMIME.pas' ユニットはコンパイルできませんでした
.dcuがあるディレクトリにもライブラリパスを通すか、
思い切ってIndyの全.dcuを\Libにコピーするかすればいいのでは。
>>でもなぜか

>>未定義の識別子

未定義の識別子がどうして出るか分からないの?
なんだかなぁ...
>>476-477
良く分からないんですが解決しました。色々さんくすです。

>>477
それは分かるんですが、 Indyに詳しくないもので'TIdEncoder3to4'とかがく分かりませんでした。
(まだ他人のソースを弄ってる程度なので…)
IdEncoder3to4でファイル検索してみたりもしたんですが見つからず…
>>470
var
Style: DWORD;
begin
Style := GetWindowLong(TreeView1.Handle, GWL_STYLE);
Style := Style or TVS_NOTOOLTIPS;
SetWindowLong(TreeView1.Handle, GWL_STYLE, Style);
480デフォルトの名無しさん:02/10/13 22:43
IndyのTIdIRCをつかてます。
これで鯖に繋いで文字を受信したら文字が化けてるのですが
どうしたらよいでつか?
481470:02/10/13 22:51
>>479
ありがとうございます。
しかしこの行で
Style := Style or TVS_NOTOOLTIPS;

未定義の識別子: TVS_NOTOOLTIPS

符号付型と符号無し型の演算により,オペランドが拡張されました

とエラーが出てしまいます。。
482デフォルトの名無しさん:02/10/13 23:06
>481
確認はしてないけど、uses commctrl.pasすればいいのでは?
ちょっとIndyがこのスレで流行ってるみたいだから、Indy9落としてきて入れますた。
すごい数のコンポ群ですね、これ。
で、特定のIPアドレスのマシンにファイルを転送したいんだけど、こんな場合は
ServerとClient側でそれぞれどんなIndyコンポ使うのがいいんでしょうか?
484470:02/10/13 23:31
>>479
>>482
うおーうまくいった!
ありがとう!ほんとにありがとう。
Indy というよりも Threadに絡んだ問題で少し悩んでいる。
接続中にキャンセルした場合や、アプリが終了する場合などの
通信終了待ちはどう書くのが定型なのだろか?(TIdFtp)
今はQuit呼んで、即Freeしている。
なんとなーく動いているようだが行儀が悪い記述である気がして
すげえ気になってる。誰かアドバイスplz
486デフォルトの名無しさん:02/10/14 02:40
>>483
そりゃFTPでしょ。File Transfer Protocolってなもんだから。
>>486
単純な脳味噌してるな(藁
>>486
まぁ妥当ではあるけど、コマンドの実装が面倒だから
独自プロトコル使ってもいいんでない?
既存アプリではなく何故自分でファイル転送する必要があるか
483を問い詰めないことには結論は出なさそう
489timerコンポーネントについて:02/10/14 04:40
Timerコンポーネントのカウントを0から数えなおさせる
ようにするにはどうしたらいいのでしょうか?
こうゆうメソッドがあるのかと思いヘルプを見たり検索
したんですが見当たりません。

例、1分ごとにイベントを発生するTimerがあったとします。
  前回のイベントが今から30秒前に起こっていたとします。

  この瞬間にButton1を押すと、この時間から1分後に
  Timerのイベントを起こすようにしたいです。

  →イベントの発生を30秒ずつズラす。

解る方がいらっしゃいましたらお願いします。m(__)m
Enabled := False; Enabled := True;
491timerコンポーネントについて:02/10/14 05:00
>>490

出来ました!!

インターバルの数字を入れ直したりと色々試してたのですが
これを見落としてました。 こんなに簡単に出来るとは・・・(汗 

どうもありがとうございました〜m(__)m
>>465
ちゃんとサーバーに接続されてたら取得できるはず
24時間サーバーの時刻調整しているが動いてる
Indyのバージョンが古いとか
Delphiを勉強し始めて日が浅いので、どなたか教えてくださいな。

Del6Pesonalしかもってないのでソースを見れないのですが、
string処理の CopyとLeftStrの挙動が納得いきません。
ヘルプにはCopyのほうはCount個の文字、 LeftStrのほうは文字数と書いてあります。
文字 = char = バイト なのか 文字数なのかよく分からんのが困る・・・。
var str : string;
str := 'abcdefg'; があったとして、
Copy(str, 1, 2)は abを返す。 LeftStr(str, 2 )も ab を返す。

str = 'あいうえお'; とすると
Copy(str, 1, 2)は あ を返す。 LeftStr(str, 2 )は あい を返す。

それならCopyのCountはバイト数で LeftStrの方は文字数なのかなと思ってみたら、

widestr : WideString;
widestr := 'あいうえお'; とすると、
ちゃんと両方とも 'あい'を返してきます。
494493:02/10/14 11:26
それで何が納得いかないのかといいますと、

Copyの挙動が引数の型によって変わるのは分かるのですが、
LeftStrのほうがstringを引数に取っているのに日本語のときにもちゃんと文字数を返すのが
気持ち悪いというか、便利なんだけどどうしてなんだかよく分からないのです。

文字コードを見てちゃんと判別でもしているのでしょうか?
function LeftStr(const AText: string; const ACount: Integer): string;
begin
Result := Copy(AText, 1, ACount);
end;
496493:02/10/14 11:39
>>495
Σ(゚Д゚)

てことは・・・あれ?なんで
>str = 'あいうえお'; とすると
>Copy(str, 1, 2)は あ を返す。 LeftStr(str, 2 )は あい を返す。

ってなるんだろう・・・?
ほんとにそんな結果出るか?
ShowMessage(LeftStr('あいうえお',2));
の実行結果はどうなる?
ShowMessage(StrUtils.LeftStr('あいうえお',2));
こっちのが確実か。
499493:02/10/14 11:49
>>497
やっぱりなります。
StrUtils.LeftStrだと 'あい' , Copy('あいうえお', 1, 2) だと 'あ'

なんでなんでしょうか・・・?
>>493
CopyのCountは文字数というか配列数
501493:02/10/14 12:50
>>500 なるほど、だからCopyの引数がwidestringの時は挙動が変わるみたいに見えるんですね。

にしても何でCopyを呼ぶだけのLeftStrは違うのやら。
             ___________
    ∧,,∧     /
   ミ,,゚Д゚彡 <  VCLはこうだよ。
   ミ つ日   \___________
 .@ミ,,,,,, ,,ミ CopyはStringとWideString、渡す型によって
        動作が変わるようですね。

function LeftStr(const AText: string; const ACount: Integer): string;
begin
 Result := Copy(WideString(AText), 1, ACount);
end;

function RightStr(const AText: string; const ACount: Integer): string;
begin
 Result := Copy(WideString(AText), Length(WideString(AText)) + 1 - ACount, ACount);
end;

function MidStr(const AText: string; const AStart, ACount: Integer): string;
begin
 Result := Copy(WideString(AText), AStart, ACount);
end;

Copy('あいうえお', 1, 2) だと 'あ'
Copy(WideString('あいうえお'), 1, 2) だと 'あい'
503495:02/10/14 13:33
俺のはパッチなしのソースだった。すまん。
UP2当てたら確かに>502のソースになった。

しかしUPで関数の挙動を変えてくるとはね。
Borlandの文字列に対するポリシーがよく分からない・・・
504デフォルトの名無しさん:02/10/14 15:14
作成できるEXEの実行速度の高速性は
C++(VC++)>Delphi
でよろしいですか?
>>492さん
|,,∧  レスあんがと
|Д゚彡 D6ProUp2で
|⊂ミ   付属のIndyです。
| ミ    
|''U  何度やってもうまくいきません  
   IndyVerあげなきゃいけないのかな..ウツ
506ねこま:02/10/14 15:43
StrUtils って,元は Rx Library の rxStrUtils だよね?
なんでこんなクソなもの標準として取り入れたんだろうか……

LeftStr の機能が違うけど
507デフォルトの名無しさん:02/10/14 16:07
Delphiを0から学べる良いサイト無いですか?
> RX Library 2.75 official conversion to Delphi 6, v1.0 (by SGB Software)
   ∧,,∧    /手元にあったRX
  ミ,,゚Д゚彡 < みてみました
   U  つ   \
function MakeStr(C: Char; N: Integer): string;
begin
if N < 1 then Result := ''
else begin
{$IFNDEF WIN32}
if N > 255 then N := 255;
{$ENDIF WIN32}
SetLength(Result, N);
FillChar(Result[1], Length(Result), C);
end;
end;
function AddCharR(C: Char; const S: string; N: Integer): string;
begin
if Length(S) < N then
Result := S + MakeStr(C, N - Length(S))
else Result := S;
end;
function LeftStr(const S: string; N: Integer): string;
begin
Result := AddCharR(' ', S, N);
end;
   ∧,,∧    /
  ミ;゚Д゚彡 <  ・・・なんだこりゃ??
   U  つ   \
procedure TForm1.Button2Click(Sender: TObject);
begin
 Check('ABCDEFG' , rxStrUtils.LeftStr('ABCDEFG', 1) );
 Check('ABCDEFG' , rxStrUtils.LeftStr('ABCDEFG', 5) );
 Check('ABCDEFG' , rxStrUtils.LeftStr('ABCDEFG', 7) );

 Check('ABCDEFG ' , rxStrUtils.LeftStr('ABCDEFG', 8) );
 Check('ABCDEFG ' , rxStrUtils.LeftStr('ABCDEFG', 10) );
end;
510デフォルトの名無しさん:02/10/14 16:16
なんだごりゃー
   ∧,,∧    / あ、インデントやスペース消えてる...
  ミ;゚Д゚彡 <  すまそ。
   U  つ   \
RxのLeftStrは、文字列とIndexを渡して
Indexが文字列長より小さかったら
そのまま文字列を戻し
Indexが文字列長より大きかったら
文字列に必要な数のスペースを付属してIndexの長さにして
戻すという関数なんだけど・・・

VCL標準とは全然違うですね・・・なんか不思議な挙動の関数っす。
こんなの役に立つの?でも必要な人もいるのかな?
と、思って、Rx全体を検索したら、どのUnitからもrx.LeftStr使ってない....(w
MakeStrに至っては,,,255って,,,,まあいいや。

ねこまさんには、どの辺りがクソなんでしょうか。
512デフォルトの名無しさん:02/10/14 16:44
procedure TForm1.Button1Click(Sender: TObject);
Var
 hFile : Integer;
 Dos : Integer;
 FileData :TDateTime;
begin

 
 hFile :=FileOpen('C:\Windows\nanka.exe',0);

 
 Dos :=FileGetDate(hFile) ;

  FileClose(hFile);

 
 FileData :=FileDateToDateTime(Dos);

 
 ShowMessage(DateTostr(FileData));

end;

最終更新日時を取得する、プログラムなんですが、操作者側が
取得するプログラムのローカルアドレスを指定できるようにしたいです。
uses IdSNTP;

procedure TForm1.Button1Click(Sender: TObject);
begin
 with TidSNTP.Create(Self) do try
   Host:='clock.nc.fukuoka-u.ac.jp';//'time-nw.nist.gov';
   Port:=123;
   Self.Caption:=
   FormatDateTime('YY/MM/DD HH:MM:SS',DateTime);
  finally free;end;
end;
514ねこま:02/10/14 17:01
わざわざ MakeStr で作った文字列を繋げている所がクソです.
左寄せしたければ SetLength, FillChar & Move で良いのです.

Rx Library は全体がバブリーで,昔から大嫌いです.
"required RX Library"なんて書いてあるコンポーネントは軽蔑します.
Irvine で使われているのが信じられません.はっきしいってガッカリしました.
もちろん既に排除しました.
515ねこま:02/10/14 17:02
> もちろん既に排除しました
Irvine から RxLib を排除したって事ね.
>>513  あ、D7で試しました 問題ないと思います
スクリーン上に、指定したフォントサイズで文字を表示したいのですが、
文字をスクリーンに描画するにはどうしたらいいんでしょうか?
>>517

スクリーンってなに?
広い意味では、ラベルの文字列だってスクリーン出力だよ。
デスクトップの意味なら、google でコード例がたくさん見つかる
>>518
あ、言葉足らずですみません。デスクトップの意味です。
ググってみたのですが、私の検索条件の設定が悪いためか、
いまいち引っかかりませんでした。コード例があるところ
ご存じでしたら教えていただけませんでしょうか?
520>>512 Openしなくても:02/10/14 18:06
procedure TForm1.Button2Click(Sender: TObject);
function FileTimeToDateTime(const ft:TFileTime):TDateTime;
var lt:TFileTime;
var st:TSystemTime;
begin
FileTimeToLocalFileTime(ft,lt);
FileTimeToSystemTime(lt,st);
Result:=SystemTimeToDateTime(st);
end;
function GetFileTime(fname:string ;var tCreation,tLastAccess, tLastWrite:TdateTime):boolean;
var F: TWin32FindData;
var h:THandle;
begin
h:=FindFirstFile(PChar(fname),F);
if h<>INVALID_HANDLE_VALUE then
begin
tCreation := FileTimeToDateTime( F. ftCreationTime );
tLastAccess := FileTimeToDateTime( F. ftLastAccessTime );
tLastWrite := FileTimeToDateTime( F. ftLastWriteTime );
Result:=True;
Windows.FindClose(h);
end;
Result:=false;
end;
var tCreation,tLastAccess, tLastWrite:TdateTime;
begin
with TOpenDialog.Create(Self) do try
if Execute then begin
GetFileTime(FileName,tCreation,tLastAccess, tLastWrite);  Caption:=DateTostr(tLastWrite);
end;
finally free; end;
end;
522512:02/10/14 18:21
>>520
うまく行かないのですが、、
523Delフサギコ ◆A6VzDeLphI :02/10/14 18:22
           _____________
   ∧,,∧∩  /
  ミ,,゚Д゚彡 < さんくしこ>>513>>516さん!
   U  ミ   \
 @ミ  ミ       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ∪''∪
わかった!、今、Indy9(9.00.10)に変更したらちゃんと日付とれました

D6Up2のIndy,8.0.25のTIdSNTP.GetDateTimeってバグありじゃないか?
ばっちり確信もてるってわけじゃないんだけど、トレース
実行しても、なんか0が戻ってくるし。

それにしても、Indy9の差込方の正しいやりかたが
いまいちわかんない・・・

ソースごっそり置き換えて
ライブラリパスに$(DELPHI)\Source\Indy
こんなん入れないと、実行時ライブラリの方が
Ver9になってくれない...設計時のは簡単に入れれたのに,,,

Del標準にするにはBinとかLibフォルダに何をいれればいいんだろうか。
524512:02/10/14 18:23
すいません。出来ました
end.を不覚にも書き忘れてました。
タイトルバーに表示されますけど、ウィンドウで表示はできませんか
525Delフサギコ ◆A6VzDeLphI :02/10/14 18:30
ちょっとage進行   _____________
   ∧,,∧    /
  ミ,,゚Д゚彡 < 教えてくらさいな
  ミ⊃  ミ⊃  \____________
 〜ミ  ミ
   ∪''∪ ということでお聞きします。
Indy8からIndy9にUpしたいと思いました。

で、D6のデフォルトでIndyにかかわるファイルって
  $(DELPHI)\Source\Indy
の一式と
  $(DELPHI)\Bin\dclIndy60.bpl
  $(DELPHI)\Lib\indy.dcp
  $(DELPHI)\Lib\indy.dcu
この3ファイルだと考えたのですが

これらをIndy9のものに変更するだけではだめなのでしょうか?
526Delフサギコ ◆A6VzDeLphI :02/10/14 18:34
   ∧,,∧    /ところで、
  ミ゚Д゚,,彡 < Indyコンポーネントはたぶん全部
 ⊂ミ ⊂ミ   \ TIdBaseComponentを継承してるから
  読み出し専用のVersionプロパティで
   Versionを確認することができます。
  ∧,,∧
 ミ;゚Д゚ミつ
某マニの
http://www.ba.wakwak.com/~h-kova/cgi-bin/bbs/cyclamen.cgi?log=vcl
ここの
http://www.ba.wakwak.com/~h-kova/cgi-bin/bbs/cyclamen.cgi?log=vcl&tree=r793
これって、さっきのLeftStrの問題では?
他板のネタをこっちに持ってくるなよ。
あっちで教えてやればいいだろ。
529493:02/10/14 19:53
どうもです。495さんやミ,,゚Д゚彡さんやその他の皆さんのおかげで納得が行きました。
LeftStrはWideStringにキャストしてからCopyに渡しているんですね。

>>527のほうにも返答を書き込んでみようかと思ったのですが、
BCB6ってまだUpdatePackありませんよね・・・。
なんで環境によって違うんでしょうね。謎だ。
>>525
You should remove Indy 8.0 with Borland's MSI installer by using the Add/Remove
control panel applet.

In Delphi 6.0 and C++Builder 6.0, Indy should be listed in your path before the
standard Borland RTL Paths. This is important because Borland does include an
older version of Indy in their distributions and this old distribution can
conflict with our distribution. In earlier installations, we used to delete
some files from your lib\debug directory but this is not workable in C++Builder
6.0 because the old Indy distribution was placed in several paths. This was
occurring even though you removed Indy with Borland's MSI installer or
specifically chose not to delete Indy 9.0. We did not feel comfortable deleting
those Indy files because there are so many files in several paths because that
would increase the chance that we would make an error and delete something we
should not have deleted causing some other problems.
531デフォルトの名無しさん:02/10/14 21:36
Delphiで透明レイヤーって作れますか?
>>531
おまえにはVBがお似合い
>>532
うるさい。ボケ。教えろ。
>>531
Transparentというプロパティのあるコンポーネントならできるはず
535デフォルトの名無しさん:02/10/15 05:44
popup Menuコンポーネントについてお聞きしたいのですが
popup MenuのCaptionに名前を登録すると勝手にショート
カットキーらしき表示が追加されてしまいますよね。

例、「 名前(Z) 」

これを「 名前 」だけにするにはどうしたらいいのでしょうか、
どなたか教えて下さい。m(__;)m
536 :02/10/15 06:35
(´-`)。o ○ (これは「ヘルプ嫁」だなぁ…)
537535:02/10/15 07:01
>>536

ヘルプ読んでも検索しても解らなかったから聞いたのに・・(TT
私には理解出来ない書き方してあるのかな・・
538sage:02/10/15 07:15
ヒントだけやる
TPopupMenu のプロパティの最初の方にある
539535:02/10/15 07:50
>>538

ありがとうございます、もう一度調べ直してみます。 m(__;)m
540535:02/10/15 08:12
>>538

解決しました!!

読み直してもやっぱり解らなかったのでプロパティを上から
1ずつ試してようやく発見出来ました。(^^;A

AutoHotkeysのヘルプは私にはさっぱり理解出来ませんでした、
これから少しづつ勉強していきます。

ご指導ありがとうございました!m(__)m
 ミ,,゚Д゚ミつ
D5かD6か忘れたけどVerUp時
AutoHotkeyが増設されてデフォでTrueだったとき
熟練のDel使いでも何人もが>>535現象に混乱してたので
ヘルプ嫁では通じないです。きっとKitto。

どうでもいいけど、透明レイヤーってなんの事だろかしら。
542デフォルトの名無しさん:02/10/15 13:49
Msg.messageを文字列に変換する方法がありましたら
教えてくれませんでしょうか?
例えば
Msg.messageがWM_ACTIVATEだったら'WM_ACTIVATE'に
変換するなど・・・
>542
泥臭い方法しかないかと。
windowメッセージだけなら、前に作ったのが家にあるので、帰宅後でいいならアプしますが。
>>542
俺ならヘッダなりヘルプなりからawkとかに流し込んで変換テーブルを作成するけどね。
逆引テーブルみつけた
ttp://www.infoeddy.ne.jp/~tensyo/prog/message.txt
546542:02/10/15 14:13
>>543
是非うpお願いしたいです。

>>544
やっぱり自作するしかないですかね・・・
せめて列挙型で定義されてればとか思ってみるテスト
547デフォルトの名無しさん:02/10/15 14:16
>>545
をを!ありがもう(´ー`)
ちょっくら変換テーブル作ってみよ
548542:02/10/15 15:48
Messagesのユニットをコピペして強引にConstから列挙型にしたんですが
うまくいきませんでした。
GetEnumNameで文字列を取得しようとしたんですが、
↓みたいになるとエラーになるみたいです。

識別子が一致しないようにWM_ACTIVATE → _WM_ACTIVATE
type TWindowMessages = (
_WM_NULL = $0000,
_WM_CREATE = $0001,
_WM_DESTROY = $0002,
_WM_MOVE = $0003,
_WM_SIZE = $0005, ← 値が飛ぶとTypeInfoでエラー

これってDelphiというかTypeInfoの仕様なんでしょうかね?
549ねこま:02/10/15 16:18
なんでわざわざ列挙型にするのか?です.

550ねこま:02/10/15 16:25
FIELD = VALUE;
が連続しているだけなので,AWK かなんかで
VALUE: Result := 'FIELD';
と変換してしまえば case 文のボディができあがりますがそれではダメなんですか?
551542:02/10/15 16:28
>>549
すいません書き忘れてました。
最初の質問に関してはもう解決済みです。
ただ列挙型にしたのはテーブル作る他に何かよい方法がないかなーとか
模索してたのです。
そしたら>>548のようなエラーになったのです。
仕事で英語版Windowsで動作するアプリばかり作らされるから、
英語版のDelphi7買おうと思うんだが、日本語版Windowsで
英語版Delphiってちゃんと動く??
553デフォルトの名無しさん:02/10/15 18:25
>>535
オーナードローでどうぞ。
0.txtが既に存在しているならそこに書き込み、
存在しない場合は新たに作成して書き込むというコードを書いてみたんですが
既にファイルが存在している時に書き込もうとするとI/Oエラーが出てしまうんです。

var
F :TextFile;
FileData :String;

begin
AssignFile(F,'0.txt') ;
if FileExists('0.txt') then
begin
FileData := Edit1.Text ;
Writeln(F,FileData)
end else

begin
Rewrite(F);
FileData := Edit1.Text ;
Writeln(F,FileData)
end;

CloseFile(F);

end;
end.

新しくファイルを作って書き込むのは正常に動くのですが…どこがおかしいのでしょうか?
どなたか教えて下さい。
Resetしろ
556554:02/10/15 22:33
>>555
解決したような気がします、ありがとうございました。
>>552
むしろ日本語版より正確に動く
>> 正確に動く

なんじゃ?!
>>552
Patchが早い
英語版より1〜2ヶ月遅れででてくるので、英語版に存在する初期不良が
直ってでてくる。BCB6 Sp1 は日本語出荷版に含まれているのだよ > 中村タン
561デフォルトの名無しさん:02/10/17 13:49
アプリケーション外のキャレットの位置(例えばブラウザなどで掲示板に
書きこっんでいるときのキャレットの位置)を取得するにはどうしたら
良いのでしょうか?
Delphiでファイルを開くときにバイナリエディタで開いたように
表示するにはどうしたらいいですか?
 ∫,,,,,,,,,∧,,∧  ノビー
⊂,,,,,,,,,つ,,゚Д゚ミつ
FileStreamで読み出して、バイトごとにみて
16進数で書き出せばいいのかな?>>562
564562:02/10/17 15:37
>>563
ゲームのセーブデータを編集するようなアプリケーションを
作ろうと思っているのですが、
バイナリエディタのあるアドレスの部分の16進数を
10進数に変換してウィンドウに表示するようなことっていうのは可能ですか?
>564

IntToStr
StrToInt
IntToHex

とか調べればわかるんじゃない?
 ∫,,,,,,,,,∧,,∧  マルチポス(しかも2chスレ内で..)やめようね(w
⊂,,,,,,,,,つ,,゚Д゚ミつ
で、もうちょっと他の人に分かるような内容で書いてっ。

そのバイナリエディタ自体を自分で作るの?
それともどっかのバイナリエディタを
改造したいってこと?

簡単なのなら、
クリップボードに入っている16進数表現文字列を
10進に変換すればいいだけじゃない?
567デフォルトの名無しさん:02/10/17 16:27
ネットワークで、今、接続しているマシンのIPを調べるには どうしたらいいのでしょうか?
また、それを切断するには、どうしたらいいのでしょうか?
568デフォルトの名無しさん:02/10/17 16:27
1〜10の数を乱数でかぶらないように出すにはどうすればいいの?
569デフォルトの名無しさん:02/10/17 16:45
配列に入れて一つ抜いて、詰めていってを繰り返す。
570デフォルトの名無しさん:02/10/17 16:47
>>568
既出したものを配列に保存しておいて、かぶったやつは 無視すればいい。

1から10の並び替えを行うならば、10までの配列をもち、乱数で出た数字と次の乱数で
出た数字の位置の内容を入れ替える。
>>568
列挙はこれかな
http://www.wwlnk.com/boheme/delphi/tips/tec0920.htm

切断は判らない
>>570
それじゃ一様に混ざらない

for i := Low(arr) to High(arr) do
swap(arr[i], arr[random(Low(arr), High(arr))]);
573デフォルトの名無しさん:02/10/17 19:01
TToolBar.Customizable プロパティを True にすると
ツールバーがカスタマイズ可能になるらしいのですが、
具体的なコーディングが全然わかりません。
別の所で聞いたら、かなり高度な内容らしくどなたからも回答いただけませんでした。
どうかよろしくお願いします。
574デフォルトの名無しさん:02/10/17 19:11
>>573
高度も何も、ヘルプに書いてある通りにすればできるよ。
コーディング一切なしで。

それとも他に何かしたいのかな?
575デフォルトの名無しさん:02/10/17 19:15
ドロップを受付るようにするとか?
576デフォルトの名無しさん:02/10/17 19:38
>>574
カスタマイズ後のツールバーの状態を保存して、次回の起動時に復元したいのですが。
577デフォルトの名無しさん:02/10/17 19:58
リストビューのレポート表示時に、あるカラムにリストボックスを貼り付けたりとか出来ませんか?
>>577
リストボックス−>ドロップダウンメニューです。すまそ。
質問する前に、ここくらい嫁
http://www.geocities.co.jp/SiliconValley/3657/oshiete.html
努力を放棄している。
情報を開示していない。
答える人間のことを考えていない。
環境依存かな?

私の所では、RichEditデモのツールバーを
Customizable:=Trueにして試してみると
一度消してしまったツールボタンを二度と見る事が
出来なかったりして
VCL標準のコーディング一切無しでは
アプリ上使い物にはならないのですが…

 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    ∧,,∧               VCLアプリのBugBrowserでも
__ミ,,゚Д゚彡,,,,,___.   ∀    Toolbarカスタマイズは。
    ∩,,,,,,,,,,,,,,⊃⊃  |   ┷┳━ 独自実装ですね
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|  ┃
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄   ┻  ListBox部分がListViewだし

>>580、何のこと?

>>577簡単には出来ないと思います。
自分でComboBoxを貼り付けるようにしたら
どうにか出来るのですが。
582580:02/10/17 21:36
>>581
579の言いたいこと
583デフォルトの名無しさん:02/10/17 23:30
目インフォ無を常に手前にしたり元に戻したりするのに
最初はFormStyleのfsStayOnTopとfsNormalを使っていたのですが
コレだとプロパティーを変えると画面がちらつくので
検索して下のコードのような常に手前に表示は分かったのですが
元に戻し方が分かりません。。
どなたか元に戻し方を教えて頂けないでしょうか?

SetWindowPos(MainForm.Handle, HWND_TOPMOST, 0, 0, 0, 0,
SWP_NOMOVE or SWP_NOSIZE)
ヘルプ嫁
585デフォルトの名無しさん:02/10/17 23:33
スマソ・・・
目インフォ無×
メインフォーム○
>>583
英語嫁。
TOPMOSTってとこで常に手前を指定してるのが分かるだろ。
そこでコード保管して想像しろ。
587583:02/10/17 23:54
>>586
wndNoTopMostにすればいいのでしょうか?
これにしてもうまくいかなかった。。
それとも別の?いちお全部試してみたのですが・・・
(´-`)。o ○ (「初心者ですが」「○○は出来ますか」ってのは
歓迎されないことくらい予想付きそうだけどなぁ…)

    ∧,,∧ 。o ○(なら答えなきゃいいのになぁ・・・)
__ミ=(´-`),,,,,___.   ∀
    ∩,,,,,,,,,,,,,,⊃⊃  |   ┷┳━
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|  ┃
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄   ┻
>>574>>579>>584>>586
MLに変えれば、どうかと小一時間
>>587
なにがうまくいかねーんだよ
procedure TForm1.Button1Click(Sender: TObject);
begin
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0,
SWP_NOMOVE or SWP_NOSIZE)
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0,
SWP_NOMOVE or SWP_NOSIZE)
end;
      /⌒\
     γ彡・ω)ミ Form2でやったら・・・
      |ミ,,゚Д゚彡 
      |(ノ  |つ うまくいかねーんでは?
     ヾ|    |
      ヽ _ノ 
       U"U オレ ハ ヤッタ
           ウマク イカネーン...YO
592583:02/10/18 00:58
>>590
ありがとうこざいます。
ほんとだこれだとうまくいく。

fofm2にあるCheckBoxのチェックによって判別しようとこのように
したのですがうまくいかなかったのです。ごめんなさい。

if CheckBox.Checked then
SetWindowPos(MainForm.Handle, HWND_TOPMOST, 0, 0, 0, 0,
SWP_NOMOVE or SWP_NOSIZE)
else
SetWindowPos(MainForm.Handle, HWND_NOTOPMOST, 0, 0, 0, 0,
SWP_NOMOVE or SWP_NOSIZE);
593583:02/10/18 00:59
>>591
ソーナノ・・・
   .。○(目インフォ無って書いてあった・・・)
  ∧,,∧ 
 ミ,,, ,彡⊃``;⊃  ダメダメ デ ゴミンナサイ...
  ∩;,,,,,,,,,,,,,,,,,,,;⊃ 
フサギコ最近どうしたんだ?
   ∧,,∧フー
  ミ,,゚Д゚彡 ∫
  と  ,,ミつ━
━┳━━┳━┓
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
以前Form2のfsStayOnTopの件で調べてて
それやると、Form1のFormStyleや最大/最小化と
非常に相性の悪い挙動をするということが
わかっていたんだけど

今回のSetWindowのやり方でも
同じようになるのかどうか、検証したいけど
・・・・・・この時間に家かえってきたら
         そんな時間ないでつ・・・・・・ハァ....
(´-`)。o ○ (グチは控えめに)
>>597
お前もDelスレにスカスカなうんこをなすり付けるのはやめてくれ。
相性の悪いってどういう動き?
598=スカスカなうんこ
 ∫,,,,,,,,,∧,,∧  600ゲツ  しそこね
⊂,,,,,,,,,つ,,゚Д゚ミつ

Form2ノfsStayOnTopのOn/Offで最前面に出るためには

procedure TForm2.CreateParams(var params: TCreateParams);
begin
 inherited CreateParams(params);
 if Self.FormStyle = fsStayOnTop then
  params.WndParent := Application.MainForm.Handle;
end;
これする必要があるけど。これすると
Form1もfsStayOnTop
Form2もfsStayOnTopすると、Form2が行方不明になったかと。
602デフォルトの名無しさん:02/10/18 01:44
598=601?
( )
 ( )   ( )
   ∧=∧ ポゎ〜
   ミ*゚Д゚彡 
| ̄ ̄∪∪ ̄| ちゃうよ>>602

昔のことなので、思い出しながら書いてみたです。
procedure TForm1.Button2Click(Sender: TObject);
begin FormStyle := fsStayOnTop;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin FormStyle := fsNormal;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin Form2.Show;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin FormStyle := fsStayOnTop;
end;
procedure TForm2.Button2Click(Sender: TObject);
begin FormStyle := fsNormal;
end;
procedure TForm2.CreateParams(var params: TCreateParams);
begin //overrideしておくれ
inherited CreateParams(params);
if Self.FormStyle = fsStayOnTop then params.WndParent := Application.MainForm.Handle;
end;

これで、form2も最善面可だけど、form1の最大化最小化や
form1の最前面に対応しなかったりするよ。
fsStayOnTop; って、どんなときに使いたいと思うのかなぁ。
なんか、初心者質問みたいで、ほんとにそんなことが必要なのか
よく考えたほうがいいと思うんだけど。
モーダルでフォーム作るときに使う。
これやっておかないと後ろに隠れちゃったりして面倒くさい
逆だったかもしれん・・・
実はメインフォームを最前面に居座らせたい時以外は要らないんだ…
Windows的には、WS_POPUPスタイルでオーナーウィンドウを指定しておけば、
常に特定ウィンドウの前に置いておけるから…
ただ、VCLのフォームはオーナーウィンドウは総てApplication.Handleなので、
Windows標準の動作を利用できず、対策的にダイアログでも最前面表示を使ってるだけなんだ…
>> VCLのフォームはオーナーウィンドウは総てApplication.Handleなので、

デフォルトではそうだね。603 みたいに CreateParams を override すると
オーナーも変更できて、特定の Form の必ず手前には表示できるよ。
609デフォルトの名無しさん:02/10/19 02:59
OnKeyPressで、キーが押されたら呼び出されるイベントを発生させているのですが、
キーを押してから0.5秒後にイベントを発動させる、もしくはイベント内で
処理を0.5秒待つといったことはできるのでしょうか?

一旦停止するのはそのイベント内の処理だけで、他には影響させたくないのですが・・・。
TTimer使え
>>609
SleepとかいうAPIがあった気がする
612デフォルトの名無しさん:02/10/19 08:39
>>609
TimeSetEvent
Delphi使いはみんな良いやつだなぁ(しみじみ)
614デフォルトの名無しさん:02/10/19 09:31
>>613
皮肉ですか?
皮肉ですか?
皮肉ですか?
皮肉ですか?

皮  肉  で  す  か  ー  ?
レスサンクス〜。
>>610 それはちょいと;
>>611 Sleepだとまるごと止まっちゃうんですよね・・・。
>>612 小難しいですが、頑張ってみます。
>615
わけもわからずTimeSetEvent使うと破綻するぞ。素直にTTimerにしとけ。
     ∧,,∧        / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     ミ,, ゚Д゚彡     <  連続で呼び出すと変になるけど...
     〃つ_つ/  ̄ ̄ ̄/\_____________
   〜ミ,,, ,,|\ ./ レ ッ シ /
       '\/.======./
           ̄ ̄ ̄
procedure SleepProcessMessages(Milliseconds: Cardinal);
var
 StartTime, NowTime: Cardinal;
begin
 StartTime := GetTickCount;
 while true do
 begin
  NowTime := GetTickCount;
  if Milliseconds <= (NowTime - StartTime) then
   Break;
  Application.ProcessMessages;
 end;
end;
>>617
だからDelでビジーループ書くなっつーの。
619無責任だが:02/10/19 11:42
TTimerの方が簡単。 動的に作成して、動的に消去すると 時間待ち中に次のクリックがあっても大丈夫

procedure TForm1.Time0r5SecEvent(Sender: TObject);
begin
  if Sender is TTimer then Sender.Free; //タイマーイベントなら消去
  Caption:=FormatDateTime('hh:nn:ss zzz',now); //動作確認例
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  with TTimer.Create(Self) do begin
   Interval:=Round(0.5*1000);
   Enabled:=True;
   OnTimer:= Time0r5SecEvent;
  end;
end;
0.5 秒ぐらいなら Sleep() で充分

>>618 「ビジーループ」の意味が間違ってる
どっちにしろ、>>617のコードは、ProcessMessagesの直前に
MsgWaitForMultipleObjectsを入れといた方がいい。
>>619
>動的に作成して、動的に消去すると 時間待ち中に次のクリックが
>あっても大丈夫

これの意味がわかりません。動的に作成するとどんないいことがあるの?
>>622
書いてくれてるじゃん。連打されてもちゃんと全部対応できる。
>>622
 そりゃ 最初のボタンを押して 0.2秒後にもう一度ボタンを押したら

t+0  : ボタンon
t+0.3 :次の ボタンon
t+0.5 :最初のイベント
t+0.8 :次のイベント

ってなるって事でしょ。

他の方法だと 時間内に同じボタンを押すとややこしい事になる
>>616 >>619
あ、なるほど、そうやるのか(゚д゚)!! 参考になります。
>>624

619 コードで TMemo に書き込んでみるとわかるが、動的に作成しても
複数のイベントは起こるよ。時間内に複数イベントを起動するのを防ぐ
には、動的に作成するとかは関係なく

procedure TForm1.Button2Click(Sender: TObject);
begin
if not Timer1.Enabled then Timer1.Enabled := true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := false;
Memo1.Lines.Add(FormatDateTime('hh:nn:ss zzz',now));
end;

とするとよいのでは?
TEditコントロールの文字の配置を
右揃えにしたいのですが、
できますか?
626 だが
>>書いてくれてるじゃん。連打されてもちゃんと全部対応できる。

あっ、そうか、むしろ全部対応することが重要なのね。なるほど。
>> むしろ全部対応することが重要なのね。

でも、よく考えてみたら

>>619 の質問
> イベント内で
> 処理を0.5秒待つといったことはできるのでしょうか?

とは、関係ないことですね。
630デフォルトの名無しさん:02/10/19 12:52
あげ
631無責任だが:02/10/19 13:12
追加
>>619のコードで Time0r5SecEventのリターン先が 解放した TTimerオブジェクトなんで気持ちが悪い人は
 リターン直前に Abortを投げるといいでしょう

>>627
色々方法はあります。検索 TEDIT + 右寄せで googleで検索するとよいでしょう


Edit ボックスに入力した文字を右寄せにして表示したい
http://www.borland.co.jp/qanda/delphi/d0000090.html
            _____________
   ∧,,∧    /
   ミ゚Д゚,,彡 <  某の回答がコレか...ホトトホ
   ,;゙   ミ     \ 
 @ミ,,,UUミ       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

Win95初期Versionじゃシステム関係の処理から
無理なんだけど、TEditを継承したものを作った方がいいよね

[Delphi:41622] Re: Edit のスタイル変更について
http://www2.big.or.jp/~osamu/Delphi/browse.cgi?index=41622
>>631-632
ありがとうございました。
できますた!
>>632
MEMOは一番簡単で
Win95でも使えて
Edit中も右寄せできるから
結構便利
Win95使ってるところもまだ結構あるし
TEDIT も TMEMOも どっちも同じコントロールなんだし
            _____________
   ∧,,∧    / Ctrl+EntやCtrl+J
   ミ,,゚Д゚彡 <  でも改行は入力できたり
   ,;゙   ミ     \ するですよ。
 @ミ,,,UUミ       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
あと、コピペしたらってのも
某のQAでは対応できてないです。
>> リターン先が 解放した TTimerオブジェクトなんで気持ちが悪い人は

非常に気持ち悪い。なぜエラーにならないのか教えてください。
ソース嫁
嫁にもらってもわかんねー
誰もわかんねぇー、みたいね。
テイドひくー >オレモナー
Free したオブジェクトのソースってどこにありますか?
>>641
638 は知っていると思う
お前らほんとに屑ばっかだな
なんで検証しないの?
で、Delphi7ってどうよ?何か「7こんなに(・∀・)イイ!!機能あるぞ!」って
のがあれば教えれ!
>>644
とりあえず.NETに対応したらしい。
つーか、知らんし要らんしDel6でいーじゃん。
646無責任だが:02/10/19 23:48
解放するのは TTimerの Selfなので、返った先でSelfに触らない事が判っていれば問題ありません
直感的にTTimerでイベントを呼んだ後何か仕事があるようには思えないので、
普通は大丈夫だろうと
>>646

一般的に言って、自分が読んだイベントハンドラの中で自分を Free した場合
例えば

procedure TForm1.Button1Click(Sender: TObject);
begin
Button1.Free;
end;

エラーにならないのは同じ理由ですか?
なぜ、TForm には Release メソッドがあるのかな?
違いまふ
わけわかんね
土日はカキコのレベルが著しく低下するようだね
>>650
わかりやすく説明しろよ
日本語も分からないようだね
D6Personal版を使用しながら勉強中です
同じ処理のTOOLを作ったときに、実行速度に云倍を差が出るのに驚き、
VBからDelphiへの乗換えを検討しています。

Delphi購入にあたって、ひとつ質問があります。
Delphi7日本語版はHELP(Documents)が(6と比較して)弱いと
どっか(関連スレ)で見たんですけど、実際どうなのでしょうか。
>>652
いいから説明しやがれ
>>653
翻訳が出荷に間に合わなかったみたいで、わずか数日後、
日本語訳されたヘルプがBorlandのHPで公開されました。
だから今は大丈夫ですよ。
656653:02/10/20 03:48
確認してまいりました。ついでに中身も確認しました。
おっしゃる通りのようですね。
丁寧なご回答、ありがとうございます。
657整数から桁の取り出し:02/10/20 06:10
整数から任意の桁を取り出したいのですがこうゆう関数は
用意されてるのでしょうか? 一応ヘルプで関数1つ1つ
見て回ったのですが見当たりませんでした。

代わりの方法としてRightStrを使ってコードを書いたん
ですが体裁が悪いです。

ご存じの方がいらっしゃいましたら宜しくお願いいたします。
x桁目 = y / (10 の x-1 穣) mod 10 では?
小学生の気持ちで…

123 という かず から 10 の くらい を とりだすには どうしたら いいのだろう?
1 の くらい は いらない ので 10 でわると 12 がのこる。
あとは この かず の ひとけため を とりだせば いいんだ。
ひとけため は 10 で わった あまりが こたえだ!

お粗末でした(汗
660659:02/10/20 06:30
か、書いているうちに…先を越された…猛烈に恥ずかしいです(顔真っ赤)
>>660
きにすんな
662657 整数から桁の・・:02/10/20 06:52
>>658-659

お二方とも即レスありがとうございました。
こんな簡単なことだったとは・・・

童心にまで帰らせていただきまして誠に感謝に絶えません。
ご迷惑をおかけしました。

では失礼します。
>>647
イベントの作り方によってはエラーになるよ。
664デフォルトの名無しさん:02/10/20 12:23
>>659

var
i, i2 : string;
I : Integer;
begin
I := 123;
i := IntToStr(I);
i2 := Copy(i, 2, 1);
end;

こんなかんじ?
665デフォルトの名無しさん:02/10/20 12:25
TMyAction = class(TAction)作って標準アクションとして登録するのってどうやるの?
666デフォルトの名無しさん:02/10/20 12:49
多分きっと100万回くらい既出だと思うけど、連想配列のお勧め
コンポーネントってない?
PerlのKeys、Valuesに相当する関数があって、テーブルサイズ
不定のが欲しいんだけど、探すと連想配列自体はちらほら見付
かるんだけど、Valuesに相当する関数がことごとくない。なぜ?
>>666
ない。
Inifiles.THashedStringListとvalues用のTStringList組み合わせて作るしかない。
668デフォルトの名無しさん:02/10/20 13:07
>>667
やっぱそこら辺へ行きつくしかないのか・・・・・
TStringHashを継承して、Add時に適当なキー値を保存
FindでPPHashItemを取得してNextで手繰っていけば
とりあえず実装自体は可能だけど、なんでこんな面倒
なこと・・・・・
既に完成させてる人は居ないのかな?きっと居るはず
だと思うんだけど、誰か居ませんか〜〜〜〜〜〜?
669デフォルトの名無しさん:02/10/20 13:49
http://www2.sega.co.jp/bbs/article/d/dcq/273/
このURLの下位ディレクトリの数を取得するアプリを
作りたいのですが、これを取得する方法が解りません。

(動作例)
 http://www2.sega.co.jp/bbs/article/d/dcq/273/aaaaaa/
 http://www2.sega.co.jp/bbs/article/d/dcq/273/bbbbbb/
 http://www2.sega.co.jp/bbs/article/d/dcq/273/cccccc/
 この3つのディレクトリが存在していたら 3 を返す。

解る方がいらっしゃいましたらどうかヒント下さい、
宜しくお願いします。m(__)m
(環境:windows98SE DELPHI6 PERSONAL SP2 + Indy9)

http://〜 なのでIdHTTPを使うのかなと思うのですが・・・
無理。
New ← 273 <-ここ解析して整数273を取得するしかない。
さっそくダウソしてヘルプにそって
テキストエディタを作ろうとしてるんだが、
ActionManagerってコンポーネントが見つからん。
[Additional]ページにあるらしいんだが無い。
超初心者でスマソ。
某よいい加減チュートリアル直してくれよ・・・
673671:02/10/20 14:57
>>672
何か違ってる所あるのか?
>>673
PersonalでコンパイルできるようにActionManagerつけるか
ActionManagerを使用しないチュートリアル作れって事じゃないかと。

チュートリアルという性格上、入門者が困るような構成は問題あると
思う。 Delphi1の頃はちゃんとしたチュートリアルのマニュアルすら
ついてたのに、バージョンアップするたびに入門者には辛い内容
になってきてるもんなぁ・・

M$の VC++ Standardみたいに、入門版には市販の入門書みたい
のを付属して売るとかすればいいかも
675671:02/10/20 15:12
PersonalじゃActionManager使えないって事か?
676669:02/10/20 15:36
>>670

レスありがとうございます。
無理なんですか・・(涙

>整数273を取得するしかない

これは一体??
273を取得すると何か解るのでしょうか?
この数字なら最初から解ってるのですが・・(汗
    ∧,,∧  このようにするようです>>665
   ミ,,゚Д゚彡   yes>>675
    ミ つ旦)~~  >>669 HTMLファイルを解析して<a href=を取り出して
  〜と,,,~),,~)    273以下にリンクファイルやディレクトリがいくつあるか
            自分で解析しなければいけないのでは?
procedure Register;
begin
 RegisterActions('', [TMyAction], nil);
end;

[Delphi:42552] Re: TAction を継承したい
http://www2.big.or.jp/~osamu/Delphi/browse.cgi?index=42552
678669:02/10/20 16:27
>>677

フサギコさんありがとうございますm(__)m

>HTMLファイルを解析する方法

実はこの方法で取得するアプリを先日作ったのですが、
これをプロのプログラマさんに見せたところ、

「ディレクトリ数を数えるようにすれば重いHTMLソースを
 ダウンロードする必要が無くなる」

と言われてしまったんです。 それでこちらでdelphiでの
詳しい作り方を伺ったわけなんですが・・(^^;A

このプロさんはC言語やperlなどを使ってるようなので
もしかしたら他の言語でしか出来ないことなのかも
知れません。 もしくはいい加減なことを言われて
しまったのか・・(真面目な方なのでまずないとは思いますが..)

ともかくdelphiでは無理と解っただけでも良かったです、
>>670 さん共々、本当にありがとうございました。m(_ _)m
言語の問題じゃなくってディレクトリリストを公開しているかどうかという
WEBサイト側の問題なんだけどね。
で、件のサイトは公開していないからHTMLのリンクを辿るしかないって事。
いっそあるかないかはとりあえず取得してから判断するってのもありかも。
680ねこま:02/10/20 16:53
>>666
私は D5 しかしらないんでアレですけど,
HashList って当然イタレートはできるんですよね?
全然面倒くさくもないような気がする……
……気がするぐらい……うそ情報の可能性もアリ
681671:02/10/20 17:05
>>677
サンクス

delphi扱ってるサイト探すか…
682669:02/10/20 17:24
>>679

ぅは・・ どの言語でもダメってことですか、こりゃ文句
言わなきゃいけませんね!(爆

どうもありがとうございました。(^^;
>>674
私もDelphi1から使ってますが
VB2からすんなり移行できた理由の一つに
あのチュートリアルがあったのかもしれません.
最近、delphiでプログラミングを始めました。
何かおすすめの本やサイトはあるでしょうか?
特にネットワークプログラム等に興味があるので、それについてのものが良いです。
(´-`)。o ○ (次スレのタイトルには「パソナル6にはアクションマネージャは
付いて無いよ〜ん」って付けるのはどうか?
そうすれば「>>1 嫁」で済む…)
逆に言うといかにいままで何も蓄積してこなかったかって事だな。
ソースうp版にリンク張ってFAQでもまとめたらどうよ?
>>682
逆にフォルダの一覧が取得できたらセキュリティ上問題がある場合もある
から見せないようにしてるサイトが多いんじゃない?
688デフォルトの名無しさん:02/10/21 17:22
D7で作成したプログラムがWinXP/2000だと正常に動作するのですが、
Win9x/Meで実行すると落ちてしまいます、
Form自体が表示されないようなので、メッセージボックスを表示する
ようにしてみましたが、フォームのCreateイベントより前に落ちるみたい
です。

Win9x/ME環境にD7の開発環境をインストールしないでデバッグする良い
方法はなにかありませんか?
逐次ログ吐くとか
>>688 D7ならリモートデバッグサーバが附属してるんじゃないの?
691デフォルトの名無しさん:02/10/21 17:41
そもそもWin9x/Meには非対応です。
692デフォルトの名無しさん:02/10/21 18:18
>>689-690
今まで使ったことが無かったんで知りませんでした、
教えて頂いたリモートデバッガーを使ってみます。

>>691
Windows98には対応してるみたいですが、
Windows95/MEが非対応ってこと?
TGIFImageがダウンロード出来るところを探しているのですが、誰か知りませんか?
694693:02/10/21 19:42
補足

Anders Melanderタンが作ったものを探しています。
サイトが消えてるようなので…

http://www.melander.dk/delphi/gifimage/
695デフォルトの名無しさん:02/10/21 20:13
GIFはユニシスのせいで使用禁止になりますた
697デフォルトの名無しさん:02/10/21 20:29
Delphiはボーランドのせいで使用禁止になりますた(;_;)
698デフォルトの名無しさん:02/10/21 20:32
SEX
699デフォルトの名無しさん:02/10/21 20:33
まんこ
700デフォルトの名無しさん:02/10/21 20:36
まなちゃん・かなちゃんがぬるぬる。ハァハァ
701デフォルトの名無しさん:02/10/21 20:41
シコシコシコシコシコシコシコシコシコシコシコシコシコシコシコ・・・
ハァハァハァハァハァハァハァハァハァハァハァハァ・・・
デ、デルーーーーーー!!!!
ドピュッピュドピュッピュドックンドックン・・・アー デルーデルデルデルデル アー
ドッピューン ドッピューン
                         フゥ〜

               キモチエダッタ マンゾクマンゾク
>>693
キーワードは揃ってるじゃないか 検索しる
Anders Melander TGIFImage
>>694
URLわかってるならWayBackMachineでいけそうな予感。
704デフォルトの名無しさん:02/10/21 23:29
ホットゾヌの板一覧にあるような、一行ごとに色をつけれるListViewってどうやるんですか?
od
>>704
ヘルプのオナニードロー見るべし
>>704
マジレスすると、自前で描画する。
(´-`)。o ○ (>>1に「『オナニードロドロ』禁止」も追加。なんで
それで「閃いた━━━━(゚∀゚)━━━━!!!!!!」って思っちゃうんだか?)
>>688
win9xシリーズでフォームが開かけないで落ちる現象としては、フレームとか
使ってた場合によくあります。
あと、オブジェクト数が無謀なほど多いとかでもありえるかも。
いづれにせよ、win9xシリーズは既にMSもサポートしてないんで諦めたら?って
のは無謀かな・・・。(でも、winMeもあるし、まだ現役なOSですよね・・・。)
>>709
Win98は来年サポートが切れる。
WinMEはまだ。
それまでの辛抱。
サポート切ったソフトは 自由に使えるみたいな法律出来ないかなあ
712デフォルトの名無しさん:02/10/22 12:35
アプリケーションが非アクティブになったときに
マウスカーソルを乗せてもヒントは表示されませんが
非アクティブ時でもヒントを表示させる方法は無いでしょうか?
ヒントになるようなことだけでもいいので教えていただけないでしょうか。
>>712
FormMouseMove&HintWindow
714ねこま:02/10/22 13:51
Melander 氏はどこいっちゃったんだろうね
プログラムやめちゃったのかな?
715デフォルトの名無しさん:02/10/22 14:07
Delphi6でDirectXを使いたいのですが、どうすれば使えるでしょうか
>>715
・DirectXSDKのヘッダーをDelphi用にコンバートしたユニットを使う
 海外行けば、最新のヘッダーもそろえられる。

・DelphiXを使う
 Delphi6で使うには工夫が必要。
 日本語のサイトでは使えないという表記を見るが嘘(その人がへたれなだけ

・Quadruple Dを使う
 
717715:02/10/22 14:58
>>716
それらの方法について調べてみました。
へたれの私には一番下の方法しか無理そうですね・・・。
レスありがとうございました
>>708
そんなくだらないの追加するな
>>688
usesで参照しているユニットの初期化節(initialization)で例外が発生しているかも.
Runtime Error 216 のダイアログボックスが出たら多分そうです.

>>709
うちもフレームを多用するのですが
(今のプロジェクトでは数十種類以上のフレームを使っています)
一度もこういうエラーになったことがないのは
インスタンスの総数が少ないからでしょうか.
720712:02/10/22 18:46
>>713
早速検索してみます。ありがとです。
721PopupMenuコンポ:02/10/22 18:51
PopupMenuのメニューを表示してるときに他のアプリを
アクティブにするとメニューが開いた状態で画面に残っ
てしまいます。 他のアプリをもう1クリックすれば
消えるのですが、最初のクリックで消したいです。

ApplicationEventsコンポを使い、アプリが非アクティブに
なったときにPopupMenuを消そうと思ったのですが、popupmenu
を消すメソッドが見当たりません、どうすればいいでしょうか。
>>719
D6up2の頃に気が付いたのですが、
フレーム上にComboBox系のコンポーネントを置くと win95/98/Meでは
挙動不審になりませんか?
厳密には、ComboBoxと言うよりItemsが原因な気がします。

で、D7だとプログラムが起動すらしないはず、
フレーム上にコンボボックスを置いて、Itemsに適当に値をセットし
win95/98/Meに持っていくと落ちる。
他にも色々とフレームは危険な予感が・・・・。

たぶん、>>688 もそれが原因だと思われるが、winXPでコンパイルしたexeを
win95/98/Meに持って行った時だけか、それとも、win95/98/Meでコンパイル
しても同様の結果なのかの再現テストしてないのではっきり断言できません
が、私が試したのは winXPでコンパイルしたexeをwin98に持って行った時に
駄目でした。
723721 PopupMenuコンポ:02/10/22 18:55
↑ 大切なことを書き忘れました(汗
  これはタスクにアイコン化してる状態での話です。

  delphiは 6 personal です、宜しくお願いします。(^^;
あれ、コテハンが被ってますね…まあ誰でも思いつくか(苦笑

それはさておき、PopupMenuですが、うちでは再現しないなーと思いつつ、前に同じような事があった気も…
おぼろげな記憶で申し訳ありませんが、タスクトレイからPopupMenuを出す前に、
SetForegroundWindow(Application.Handle)を実行してみてください。
725665:02/10/22 19:35
GUI周りでよく使う処理をカスタムアクションと
してどんどん登録していくとめっちゃ便利そうじゃない?
誰かそういうのたくさん作った人うpしてよ。
>>722
本当だ!うちでも再現しました、
これってボーランドにバグ報告するべき?
727デフォルトの名無しさん:02/10/22 20:21
RubyとVBの話は飽きた、関係ないんだよ折れには。
自爆?
729727:02/10/22 20:23
あうあう
>>703
おお!
ミラーサイトが一つ残ってた━━━━(゚∀゚)━━━━!!!!!
Thx!
>>722
うちはD5なのですがそういう経験はないです.
コンボボックスは滅多に使わないので気が付かなかっただけかも知れませんが.

いま,コンボボックスを置いたフレームをフォームに5つ置いたプログラムを
XPでコンパイル,Win95で実行したのですが不具合は発生しませんでした.

#ただ,設計時にしばしばCPU使用率が100%になりますね.
 一度プロジェクトを閉じるまで直らない.
732デフォルトの名無しさん:02/10/22 22:31
Double型を文字列型にしたいのですが、
どうすればできますか?
実数型はFloatToStr、FloatToStrFで変換できるよ
でけた!
ありがとうございました!
チョビチョビわかってきたぁぁぁヒャオウ
735688:02/10/23 00:37
>>731
えーと、私は >>722 じゃないんですが、
丁度同じ部分で昨日ハマッてたんで、
少し書いときます。

D7のバグみたいで、D6では正常です。
あと、フレームは関係ありません、ComboBoxです。

再現するには、ComboBoxを1つ配置して

ComboBox1.Items.Clear;
ComboBox1.Items.Add('');
ComboBox1.Items.Add('A');
ComboBox1.Items.Add('B');

みたいにします、で、WinXPのD7でコンパイルして
Win95/98/MEで実行して、空白の部分を選択したら
プログラムは落ちてしまいます。
私の場合は、ComboBox1を設計時にプロパティに
直接値を設定してあって、最初が''だったので
即落ちてたみたいです。
実行時に動的にComboBox1.Itemsに値を入れても
その中に''があると、その後ComboBoxのリスト
から選択した瞬間に落ちてしまいます。
但し、WinXPで実行した場合は正常に動作して
います。

誰か再現するかテストできませんか?
再現するようであれば某に報告しますが?
736デフォルトの名無しさん:02/10/23 00:57
XP+D7にてコンパイル,98にて実行で再現しました某に密告してください
737通りすがり:02/10/23 01:03
マジかよDelphiってテストしてあるのか?ポンコ2
>>737 ハァ?
バグが1つ見つかっただけでポンコツですか?
貴方の作るプログラムが如何にバグの無いプログラムか知りませんが、
貴方の使っているWindowsはポンコ1000ですか?
本当は95系のバグだたーりして
・・・って書くとM$厨に噛みつかれそう(w
740通りすがり(737):02/10/23 01:15
気を悪くさせてしまったようですねゴメンなさいです
随分単純なバグのように見えたものでつい酷いこと書いてしまいました
741通りすがり(737):02/10/23 01:19
>>739
通りすがりな者で、実はdelphiは持っていませんが、VCでもVBでも
そのようなバグが無いことを考えると、95系のバグではないと思いますが
そもそも、以前からのdelphiのバグなのですか?
だとすれば、やはり・・・、いえ言いません(^^;;
>>736
もう日本の某にはバグをバグだと判断し、英語に直しアメリカ本社に伝えるような
部署はないんじゃないの?
オレもいろいろバグ見つけた。
ん?そーいや、バグの報告とかって出来るの?
何処にメールすりゃいいのさ、態々電話したりするの面倒だな。
サポートでもnews groupでもMLでも何でもいいんじゃないの。
そーいや、news groupがあったね忘れてた・・・。
ここは見てないのかな?
そういえば昔間違いであることを認めたのに
匿名サイト(2chのことね)からの指摘であることを理由に
修正を拒否したアフォ会社あったよ。
もちろん某ではないよ。
749721 PopupMenuコンポ:02/10/23 03:18
>>724

コテハン被ってましたか、安直な付け方しすぎでしょうか?(笑

早速コードを加えて実行してみたのですが、タスクにあるアイコンを
右クリックするとPopupMenuが一瞬表示されたあとすぐに消えてしま
いました。(汗

 そこでSetForegroundWindowについて調べたところ、このAPIはOS
ごとに動作が異なるそうです。 ですので複数のOSで実行出来るよう
にするにはかなり苦労することになりそうです。

↓このサイトを参照させて頂きました。
www.systemyou.co.jp/tips/vb/tips3.htm

残念ながら私はプログラムを始めて1年弱の初心者なのでこれを
実現させるスキルがありません。 せっかく教えていただいたの
ですが、アイコン状態でのPopupMenuは使わないようにするしか
ありません、申し訳ないっす。m(__;)m

でもいろいろと勉強させて頂きました、ありがとうございました〜!
Del5使ってますが
ComboBoxもフレームもたくさん使ってますが
Win9x/NTともに動いています
項目に''はやったこと無いかも
CLXがらみでVCLが大幅に変わったのでSOAP以外は未だにDel5を使ってます
切替のタイミングを外したのでずっとそのままです
751721 PopupMenuコンポ:02/10/23 03:53
>>749 に追加)

SetForegroundWindowの問題の解決法が載ってる
ページを見つけたので貼っておきます。
techtips.belution.com/ja/vc/0012/

言語はdelphiでなくSDKとMFCで書いてあります。(^^;
752721 PopupMenuコンポ:02/10/23 05:05
C言語が解る方でどなたか
techtips.belution.com/ja/vc/0012/
↑ これをdelphiに直してくださいませんでしょうか(汗

変数の宣言くらいなら簡単に直せるのですが・・(^^;
>>752
おらよ。動作確認はしてない。

procedure SetAbsoluteForegroundWindow(hWindow: HWND);
var
nTargetID, nForegroundID : Integer;
sp_time : DWORD;
begin
// フォアグラウンドウィンドウを作成したスレッドのIDを取得
nForegroundID := GetWindowThreadProcessId(GetForegroundWindow(), nil);
// 目的のウィンドウを作成したスレッドのIDを取得
nTargetID := GetWindowThreadProcessId(hWindow, nil );

// スレッドのインプット状態を結び付ける
AttachThreadInput(nTargetID, nForegroundID, TRUE ); // TRUE で結び付け

// 現在の設定を sp_time に保存
SystemParametersInfo( SPI_GETFOREGROUNDLOCKTIMEOUT,0,@sp_time,0);
// ウィンドウの切り替え時間を 0ms にする
SystemParametersInfo( SPI_SETFOREGROUNDLOCKTIMEOUT,0,Pointer(0),0);

// ウィンドウをフォアグラウンドに持ってくる
SetForegroundWindow(hWindow);

// 設定を元に戻す
SystemParametersInfo( SPI_SETFOREGROUNDLOCKTIMEOUT,0,Pointer(sp_time),0);

// スレッドのインプット状態を切り離す
AttachThreadInput(nTargetID, nForegroundID, FALSE ); // FALSE で切り離し

end;
755721 PopupMenuコンポ:02/10/23 08:09
>>754

ありがとうございます! 大感謝です。m(^^)m
C言語もdelphiも使えるなんてすごすぎです!!

Cの「 & 」はポインタ関連のマークだったんですね、
なるほど〜 φ(・o・;

早速これから色々いじくってみます、
本当にありがとうございました!m(_ _)m
>C言語もdelphiも使えるなんてすごすぎです!!
DelphiをやるならC/C++をある程度読めないとつらい。
>>749 あ、コテハンの件はあなたじゃないです。紛らわしくてすみません。

で、PopupMenuですが、メニューの親となるウィンドウが、表示状態かつアクティブでないと
上手く動作しないようです。
前に書いたコードを見直してみたら、次の流れでした。

 ShowWindow(Window, SW_SHOW);
 SetForegroundWindow(Window);
 TrackPopupMenu(..., Window, ...);
 ShowWindow(Window, SW_HIDE);

ここでWindowは、枠線ナシ、サイズゼロで、表示しても実際にはみえないウィンドウハンドルです。
VCLの場合、PopupMenuの親はApplication.Handleだったと思ったので、
先の提案になったのですが、Application.Handleも風変わりな動作をしますから、
自前でAPIを並べてメニューを表示した方が確実かも知れません。
>>756
禿同
>>756 激しく尿意
今時は、言語として C/C++,C#,Java程度は理解してないと仕事にならん
OSも、Windowsの他にもFreeBSDやLinux,Sunの知識は最低限あってほしいし、
IIS/Apache,SendMail/Postfixについても最低限知ってないと苦労するね
DBならMS-SQLserver/Oracle/MySQL/PostgreSQLは必須
うちじゃ、中途採用者はこの条件をクリアしてないと受け入れません。
>>759
分かったから少しもちつけ
>>759
で、qmailは知らないわけだ。
eximも必要だろうとかおもふ
>>762
そこまではいらんだろw
>>759

いや、VBとCOBOL知っていれば何とかなります。
関係ない話ばかり
>>764
君の会社は多分危ない。
767753:02/10/24 02:13
なんでこの記事読んで、
「Windows, IE, Office がびみょーに関係している」と思うのかねぇ。

>>766
案外そうでもないよ。
地方の企業は単価が信じられないくらい安い。
都内で受けた120/月の仕事を地方に40/月位で丸投げするのは当たり前。
VB屋がいないと大手の半分以上は赤字に転落すると思うよ、マジで。
769デフォルトの名無しさん:02/10/25 06:13
あなたの身近な特殊例を一般論のように書かれても...

地方の企業の単価が安いことと VB 屋の問題は別だし。
770デフォルトの名無しさん:02/10/26 07:30
FTPのソフトは、Delphiを買うと サンプルについてるからそれ使えば、便利だぞ。

無理に VBを使う必要なしっ!
771デフォルトの名無しさん:02/10/26 09:31
この業界入って、何の資格も取らずに40歳までいっちゃうとリストラ対象になるってホントですか?
772デフォルトの名無しさん:02/10/26 10:03
>>771
だから今、必死で珠算6級にチャレンジしてます!
773デフォルトの名無しさん:02/10/26 10:05
空手初段とか将棋二段とかではだめですか?
774デフォルトの名無しさん:02/10/26 10:08
>>773
生活するには4段が最低ラインじゃないかな
Del厨の皆さん、技術スレ荒らさないでこっちでやってください
Delphiって死滅しちゃうの????
http://pc3.2ch.net/test/read.cgi/tech/1035539926/
THintWindowに画像を表示させたいんですがやっぱり無理ですか?
777デフォルトの名無しさん:02/10/27 13:13
>>776
それ面白そうだね。
動的にTImage生成してくっつけてみたら?
779無責任だが:02/10/27 13:28
テストコード
TForm1 = class(TForm)
Image1: TImage;
procedure FormCreate(Sender: TObject);
end;
var Form1: TForm1;

・・・略・・・
var bitmap:TBitmap;

type TMyHintWindow = class(THintWindow)
  protected
procedure Paint; override;
end;
procedure TMyHintWindow.Paint;
begin
  inherited;
  Canvas.Draw(0,0,bitmap);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  bitmap:=Image1.Picture.Bitmap;
  HintWindowClass:=TMyHintWindow;
end;
キャンバスに直に描き込めばいいやん。
781デフォルトの名無しさん:02/10/27 14:22
>>778-779
Thxです、やってみます
Indyの解説サイトってある?
783デフォルトの名無しさん:02/10/27 15:36
俺一度も見かけたこと無いんだけど
>>782 ちょっとした使い方程度ならともかく解説サイトはないな。
indyはVER毎に結構いろいろ変わっているから難しいのだと思われ
後ソースとサンプルとHELPがあれば十分だろ、とかな。
785デフォルトの名無しさん:02/10/27 21:03
ヘルプってあったっけ?
画像をダウンするコードを書いてみたいんだけど。
最近どっかのDelスレでみたよ。
787デフォルトの名無しさん:02/10/28 01:09
788デフォルトの名無しさん:02/10/28 01:19
>>785
こんな感じかな。

var
MemStrm: TMemoryStream;
begin
HTTP1.Get('http://www.borland.co.jp/image/logo.gif', MemStrm);
MemStrm.SaveToFile('c:\logo.gif');
end;

プロキシ経由の場合は、
Http1.Request.ProxyServer
Http1.Request.ProxyPort
をGet前に設定
789788:02/10/28 01:20
引数のMemStrmでエラーになったらTStreamでキャストしてくれ。
開放したほうがよろし?
>>788
>Http1.Request.ProxyServer
>Http1.Request.ProxyPort

ちなみにIndy9の場合は

Http1.ProxyParams.ProxyServer
Http1.ProxyParams.ProxyPort


キャッシュ無しにすることって出来る?
ごめん、↑は便乗質問。>>785とは関係ないよ。
794デフォルトの名無しさん:02/10/28 21:23
>>790
MemStreamのCreateとFreeは省略してますので、try..finallyでくくって
解放してください。
795デフォルトの名無しさん:02/10/28 21:24
>>792
できます。

HTTP1.Request.ExtraHeaders.Clear;
HTTP1.Request.ExtraHeaders.Add('Pragma: no-cache'); //常に最新データを取得
>>795
おお、さんくす!
797788=794:02/10/28 21:35
>>790
酔っぱらって書いたからちと不親切になってしまいましたね。
これできちんと動きます。

procedure TForm1.Button1Click(Sender: TObject);
var
MemStream: TMemoryStream;
begin
MemStream := TMemoryStream.Create;
try
IdHTTP1.Get('http://www.borland.co.jp/image/logo.gif', MemStream);
MemStream.Position := 0;
MemStream.SaveToFile('C:\logo.gif');
finally
MemStream.Free;
end;
end;
798デフォルトの名無しさん:02/10/28 22:10
仮想フォルダを作りたいんですが、どうしたらいいんでしょう?
色々調べて、シェルネームスペースエクステンションなどという技術を
使えば出来るのではないかという結論に達したのですが、結局実際に
どうソースを書けばいいのかサッパリです。
どなたかご存知でしたら教えてください。
799 :02/10/29 00:51
>>798
「仮想フォルダ」ってなんやねん?と思ってググってみたら、1000円の
シェアウェアがヒットしたが、それのことけ?
たぶんコントロールパネルとかのことかと。
801798:02/10/29 01:50
>>800
その通りです。
デスクトップとか。
標準入力に入力を戻す方法は、API使うやり方以外に何かないかな?
ungetcみたいな関数もないし、全然見当がつかないよ。
803質問:02/10/29 03:16
コンボボックスで選んだ対象のリストボックスにアイテム追加するのに以下のようなコード書いた。
ヘルプにはnew したら disposeしろと書いてあったのですが
disposeのところで 「無効なポインタ操作」というエラーが出てしまいます。
何がいけないのでしょうか。

procedure TForm1.Button1Click(Sender: TObject);
type Plistbox=^Tlistbox;
var target:Plistbox;
begin
new(target);
case ComboBox1.ItemIndex of
0: target:=@listbox1;
1: target:=@listbox2;
end;

target^.items.add('ああ');

dispose(target);
end;
>>803

オブジェクト参照ははじめからポインタです。
参照するだけでしたら、New() と Dispose() はいりません。ポインタを
受けとる変数だからです。

procedure TForm1.Button1Click(Sender: TObject);
var
LS:TListBox;
begin
LS := nil;
case ComboBox1.ItemIndex of
0: LS := ListBox1;
1: LS := ListBox2;
end;
if Assigned (LS) then LS.Items.Add('AAA');
end;
>>802
>標準入力に入力を戻す方法

入力を戻すって、? エコーバックのこと?
806 :02/10/29 03:42
>>804 激しくありがとうございました
>>805
>>802に出ている通り、Cで言うungetcのようなことができないかと言うことだろ。
808デフォルトの名無しさん:02/10/29 14:02
http://www.borland.co.jp/qanda/delphi/d0009410.html
このページを参考にタスクトレイにアイコンを登録する動作を
作ってみたんですが、

「プロジェクト」「オプション」「アプリケーション」「アイコンの読み込み」

からアイコンを自分が用意したものに変更して実行してみると
意味不明な黄色いアイコンが表示されてしまいます。
これはDELPHIのバグなんでしょうか?

Form1のIconプロパティやプロジェクトの再構築など考えられる
ことはすべて試してみましたが正常にアイコンが表示されません。

おそらく hIcon := Application.Icon.Handle; この行が
うまく動作してないんだと思うんですがどうでしょうか。
Application.Icon.Handle に自前のアイコンが認識されないのかな?

DELPHI6 PERSONAL + WINDOWS98SE 

>>808
アイコンを変更するだけならそのまま動くはず
D6+Update2+W2kではOK
最近の某はバグ多いが
基本的に初心者は他人を疑う前に自分を疑いましょう
これぐらいのソースならもう一度一から作成するのも手

810808:02/10/29 16:28
>>809

809さんの環境ではちゃんと動くんですか、確認ありがとう
ございます〜!

ううむ、一体原因はなんだろう、もちろん書き込む前に簡単な
アプリを作って確認したんですが結果は同じでした。

何か私に手落ちがあるのかなぁ・・・
コンパイルの設定もデフォルトのままだし・・
DELPHIパソナルもSP2にしてあるんですが・・
811デフォルトの名無しさん:02/10/29 17:25
IndyでHTMLソスGETするときに読み出し開始位置の設定出来るけど
読み込み終了位置の設定は出来ないでしょうか。
ContentLength-1000バイトまで読み込むとか。
812C++使ってます:02/10/29 17:32
2ちゃんのどっかで「C++なんてDelphiとあんま変わらん」って書いてあったけど
確かにちょっと似てるね
初めてみたけど半分くらい意味がわかる
えらい人には(委員長には)それがわからんのですよ。
>>808
アイコンの色数が問題なだけだったりして。
16色より多いものはつぶされるけど、そこんところはどうなんでしょう?
>>811
終了位置の設定はIdHTTP.Request.ContentRangeEnd // IdHTTP: TIdHTTP;
ただし先頭からの位置なので、後ろからの位置を設定したいなら
IdHTTP.Head(URL);
Len := IdHTTP.Response.ContentLength;
とかで対象のContentLengthを取得してからじゃないと無理かも。
あんまり詳しく知らない。
816808 (解決):02/10/29 18:51
>>814

ありがとうございます!

早速DELPHI付属のイメージエディタで16色のアイコンを作って
試してみたところ正常に動作しました! 念のため同じエディタで
32色のアイコンを作って試してみたところこれでも動作しました。

私が使ってたアイコンはPIXAで作った32×32の画像を.ico形式で
保存したモノだったんですが、どうやらこのアイコンが原因だった
みたいです。 →タスクトレイにアイコン化したときだけ使えない。

>>809さんのおっしゃる通り私に落ち度があったようです、
お騒がせしてすみません〜
817811:02/10/29 20:03
>>815

どうやら「後ろから何文字まで」と指定してリクエストすることは
出来ないようですね。 これが出来ればダウンロードする時間の
短縮になるんですが。(^^; HTTP1.2から導入してくれないかな。

仕方ないのでcopy関数とContentLengthを使って後ろをカットして
使うことにします、どうもありがとうございました。
コンポーネントの追加について教えて頂きたいのですが。
まず、ABそれぞれのコンポーネントがあったとして、最初にAのコンポをインストールします。
次にBのコンポをインストールすると、Aのコンポがメニューから消えてしまうのです。
パッケージファイルの保存場所が悪いのでしょうか?
追加していく形でコンポをインストールできないものでしょうか?
どうすればいいのか、どなたかご教授ください。
>>818
A,Bは同じ名前?
820デフォルトの名無しさん:02/10/29 22:20
たとえば、hoge := Timage.createとかでTimageを作るとします。

このとき、Timageが何もPictureを持っていないときは hoge = nil と思いこんでいたのですが(間違い)、
そもそも Object = nil とは何を意味するのでしょうか。

createしたモノを無で指定するということは、消えてしまうということ・・・?
それとも、そのオブジェクトは何もデータを保持していませんYOということなんでしょうか。
>>820
TImageはPictureの実体そのものではなく入れ物だと考えればいいでしょう。
つまり、中身が無くても入れ物があるという事です。

それと同じようにObject型も 実体ではなく 実体の位置を記録したものです。
実体のことをインスタンスと言います。
Createは実体を作り、それをどこに作ったかを教えてくれます。それを記録するのがObject型です。

つまり Object=nil とは その記録が空だという事で、実体があるかどうかに無関係です。
>>821
なるほど、hoge = nil の状態でプロパティを読んだら AccessViolation になったのですが、
実体がないから参照のしようがないという意味だったんですね。

ありがとうございます、オブジェクト指向ってわかってくると面白いですね。
823822:02/10/29 22:39
あ、実体がない・・・じゃない、中身がないんですね。ちょっと混乱してました(汗
824818:02/10/29 22:40
>>819
いえ、まったく違うコンポです
X30って発売後、ヨドバシでその場で買えますか?予約必要?
826 :02/10/30 02:03
>>818
あー。あるある。オレも不思議に思ってた。
embeddedwbコンポーネントで、それなる。
なんでだろう?
なったこと無いなぁ
EmbededWB でもならない
>>818
同梱されてusesされてるファイルの名前がインストール済みのコンポーネントのと
同じだったりとかは?
同じ名前のファイルが有ると上手くいかなかった気がする。
>まず、ABそれぞれのコンポーネントがあったとして、最初にAのコンポをインストールします。
>次にBのコンポをインストールすると、Aのコンポがメニューから消えてしまうのです。

パッケージを追加するごとに、追加および削除されるコンポーネント名が
表示されるはずだけど、そこに出てくる名前は、意図している物かな?
830818:02/10/30 19:07
>>828
それはないです。どんなコンポでも>>818のような症状が出るんです。

>>829
はい。
Aをインストールしたら「Aがインストールされました」
その後Bをインストールすると「Aが削除されました」「Bをインストールしました」
とダイアログが出ます。
毎回新規パッケージを作って登録してるとか?
Delphi は糞!
>>832
なにをいまさら。
834デフォルトの名無しさん:02/10/31 01:29
StringReplaceって処理遅い?
メチャ重いよ。特に長い文字列でより長い文字列に何度も置き換える場合が。
836デフォルトの名無しさん:02/10/31 02:28
ふーん。
Borland, TogetherSoft 買収だって。
(http://www.togethersoft.com/news/archive/2002/press_releases/103002.jsp)
金はあまり余っているからなぁ。
>>836
TogetherCCをJBuilderに統合するつもりかな?
談話室に書いたつもりだったんだが、相談室だった。
それに、JBuilder の方に書いたほうが良かったかな。
839818:02/10/31 07:47
>>831
一回一回パッケージファイルの保存場所を聞かれて、そのたび別の所に保存しているのですが…
なにか間違っているのでしょうか?
840デフォルトの名無しさん:02/10/31 08:02
Delphi6/CBuilder6 Professional 版で TXMLDocument を使う方法

http://codecentral.borland.com/codecentral/ccweb.exe/listing?id=18939
841829:02/10/31 08:04
>Aをインストールしたら「Aがインストールされました」
>その後Bをインストールすると「Aが削除されました」「Bをインストールしました」
>とダイアログが出ます。

「Aが削除されました」って出ているんだからそのとおりのことが起きたんだな。

コンポーネントAを含むパッケージとコンポーネントBを含むパッケージの名前が
同じと見た。

一つのパッケージに複数のコンポーネントを収めることができるのだよ。
逆に一つの環境には同一の名前のパッケージは一つしかインストールできない。

コンポーネントではなくパッケージの名前を再確認してみて。
なんだったらパッケージの名前(なんとか.dpk または .bpl)を教えて。
 ミ,,゚Д゚ミつ
  ドゾ
Seventh Delphi
http://kakinotane.s7.xrea.com/Download/dl_pack.html
843818:02/10/31 17:55
>>841
dpkの拡張子のファイルは、すべてPackage1.dpkという名前でした。
bplは見つかりませんでした。

>>842
ひとつひとつ追加していくと追加していった順にコンポが消えていってしまうんです…。
>>841
やっぱり同じ 名前の DPK だったんだね。
ファイル名を替えてパッケージ名もそれにあわせて変えていったらいいと思うよ
Delphiで開いて保存する時に名前を変えたら自動的にパッケージ名も変わる
あるいは、そのファイルは、テキストエディタで編集出来るしね。

845818:02/10/31 20:53
>>844
変えてみました。
これからはコンポを追加するたびこうやってみます。
みなさんありがとうございました。
>>845
コンポを一つ追加する都度 DPKを作ってると、管理が大変だと思う。
一つの DPKに複数入るから、せめて一つのプロジェクト毎にするとか
まぁ、こういったライブラリ管理の問題は正解ないし。
自分で失敗して覚えていかなきゃいけないところかな。

ただ、異なるものに同じ名前を付けて問題を起こして、その原因を類推できない。
ってのはデバッグ能力(推論能力)に大きな問題があると思う。

もしプログラマを目指しているのなら、もう少し論理的に推論する癖をつけたほうが
良いかと。論理だけでもダメなんだけどね。
コンポーネントを複数含んでこその「パッケージ」だと思うが・・・
849デフォルトの名無しさん:02/11/01 13:04
Delphiってなんか見てるだけで素晴らしいものってオーラを感じますよね。
Delphi再インストールで解決!!
851デフォルトの名無しさん:02/11/01 13:24
Delphiはテンプレートが無いから糞
852デフォルトの名無しさん:02/11/01 16:50
delphiでプログラミング始めようと思うんですけど、入門書はどれがいいですかね。
http://www.amazon.co.jp/exec/obidos/search-handle-form/250-3051098-3293062
教えてください
Delphiプログラミングバイブルは、素人にはおすすめできない。
>>852
入門書は、入門って言っても個人差があるから、見てから買うのが一番いいよ。
近所に書店が無いなら、アマゾンで注文して、必要無ければ1ヶ月以内に返品すればいい。
あ、ただ、高価な本はビニルパックされるかもしれない。
これされると返品し辛いんだよね。
856デフォルトの名無しさん:02/11/01 17:35
テキストファイルの中で始まりと終わりを変数に代入して
そのふたつの変数の間にある文字列を全て取得する、ということがやりたいんですがどうすればいいでしょうか?
わけわかめ
>>846
始まりと終わりは 位置? 位置ならn1,n2として copy( s ,n1,n2-n1);   もしバイト単位でなく
 文字単位 ならWideStringに代入して

そうでないなら もっと詳しく
>>857-858
すいません、書き方が足らなかったです

例えば
0123456789
と書いているテキストファイルの中で
Start := 2
end := 7
と代入し、その変数の間の数字…「234567」を取得したいんです。
どう書けばいいんでしょうか?
copy(s, start, end - start +1);

宿題だろうから、この程度で止めとく。
>>859
もしかして Start,Endは 文字なの? 

文字なら、

function hoge(s,s1,s2:string):string;
  with TStringSpliter(s) do try
   GetSplitStr(s1);
   Result:=GetSplitStr(s2);
  finally free;end;
end;

を作って hoge('2','7');

TStringSpliter は
http://www.geocities.co.jp/SiliconValley-Oakland/8522/data/uSpliter.txt
これを拡張子.pas で保存して プロジェクトに追加
>>860
それをヒントになんとかやってみます。

>>861
はい、文字です。
使ってみます。ありがとうございました。
863デフォルトの名無しさん:02/11/01 18:19
>>852
近所に大きな書店があるなら>>854が言うとおり実物を見て選ぶ。

近所に書店がないならとりあえずこれ勧めとく。
http://www.shuwasystem.co.jp/cgi-bin/detail.cgi?isbn=4-7980-0251-8
>>852
本から入ろうとする奴はたいていものにならない。
やる気があったら本なんて必要ないもん。
本なんて壁にぶちあたったときに調べればいい。
とにかくWebでも参考にしながら、がむしゃらに何か
作ってみる。これが最短コース。
月曜までにDelphiを極めないといけないらしいので、
私の場合は本で覚えています。Webサイトは持ち歩けないからな!
そうか?
俺はいつも持ち歩いてるぞ。
867852:02/11/01 19:39
みなさんサンクス
>>867
俺の座右の銘

まずコレ。
別のスレで紹介されたけど入門としてかなり良かった。
コレとネットでとりあえず
身の回りの簡単なアプリは作れるようになるよ。
http://www.amazon.co.jp/exec/obidos/ASIN/4822216888/qid%3D1036157445/250-0008569-6039430

コレは結構親切。
http://www.amazon.co.jp/exec/obidos/ASIN/4839907161/qid=1036157512/sr=1-2/ref=sr_1_2_2/250-0008569-6039430
ただし丁寧すぎて鬱陶しいと思うこともある。

余裕があればこれも
http://www.amazon.co.jp/exec/obidos/ASIN/4756140025/qid=1036157512/sr=1-3/ref=sr_1_2_3/250-0008569-6039430
とりあえず一通りのコンポーネントの説明と
基本的なPascalが覚えられる。
余裕がなければ2つ目とどっちがいいかは自分で選んで。

ただ上でも言ってるけど、
一冊目買って後はネットで検索しながら
覚えるってのが一番の近道だよ。
限界が来た時に中級者以上の2冊目を買うってね。
俺は学校に置いてたから色々読みながらできたけど。
869デフォルトの名無しさん:02/11/01 23:00
Bitmapの描画を行うコンポーネントがあるのですが、これをFormに配置してその中で
ガンガン描画させると当然のようにちらつきました(連続して描画する必要があるんです)。
そこで、バッファ(裏画面?)を用意して描画しようと思ったのですが・・・。

幸い、このコンポーネントにはCanvasを指定して自分の中身を転送するというメソッドがあったのですが、
隠れて1回描画を行うごとに→Form上のCanvasに転送する、を繰り返せばいいのでしょうか?

座右の銘を間違って使ってるような。
座右の書?
>>869
 パネルの上にそのコンポを置いて、パネルのDoubleBuffer:=True;ではダメ?
>>871 そ、そんな便利なモノがっ・・・。(゚Д゚)
パネルを透明にしてその上に乗せるだけで良いのでしょうか・・・試してみます。
また一人アルゴリズムを知らない奴が増えたっと。
>>868
Delphi 久しぶりだ。
謎の全知師は健在なんだね。懐かすい。

NiftyForumでボコボコにされて追い出された伊藤は元気かな。
いまいち構造体とかクラスとかオブジェクトの使い道が分からないです。
どういうとき使用すれば効率よくなるかが検討つきません。
delphiを覚えるために簡単なリネームソフトとか作製してみたのですが
今の処理の流れは
1.フォルダ内のファイルパスをTStringListにいれてソート
2.ユーザが設定した新しいファイル名を取得
3.新しいファイル名に置換え
です。
リネームソフトなどでは、どういう処理時に使用したらいいのでしょうか?
継承も再利用性も必要ない部分にはクラスは必要ない。
データをまとめて管理する必要が無いところに構造体の出番は無い。

まず、動くコードを書けるようにすること。
次第に効率よくかけるようになるよ。
最初から、うまい人と同じにかけると思っちゃいけない。
877875:02/11/02 12:04
何回も更新してやっとレスがついた。うれしい^

>>876 ははぁリネームソフトには使うべきところが無いということですね
では、このまま進んでいきます

勉強用にいろんな物どんどん作って行きたいのだけど、なかなか作りたくなる
目標になるソフトって見つからないものですね
リネームソフトをとことん効率よいコードにしていきます

ところでmp3プレイヤーとかは構造体必要ないですか?必要なさげですね
中学生かな?高校生かな?

リネームソフト。といっても、Delphi RTL/VCL の中では構造体もクラスも
腐るほど使われているわけで。
再利用性を前提としたクラスの継承への考慮と、関連データの集中管理を目的と
した構造体の利用がおこなわれている。

だから、おまえさんのアプリケーションがクラスも構造体も使っていない。と思っちゃいけないわけだ。

ってことで、元質問は、自分でクラス/構造体を定義するべきですか?って質問なんだろうけど、
答えは「そんなの自分で決めろ」なんだな。

mp3 の物理ファイル名と楽曲名を同時に管理しようと考えたときに、何かひらめくかもね。
879875:02/11/02 13:14
男子高校生です 嘘ですすまない

>>答えは「そんなの自分で決めろ」なんだな。
そうですその通りです 後で読み返すと私もそう思います

ただwebの解説等を読んでると「構造体」という文字が異様に出てきて
こりゃぁ構造体をつかわないけねえ、と少し焦りフライングです

あせるな。マイペース。
>>879
とりあえず、メソッドとか関数くらいは使うでしょ?
その引数とかをそのまま構造体にしてみる所から使ってみたら?

構造体なら関数の帰り値にも出来るから、関数で結果を返す時とかに使ってみるとかさ
882デフォルトの名無しさん:02/11/02 19:41
>>879
構造体は、Delphiでは「レコード」と言います。
883デフォルトの名無しさん:02/11/02 19:43
ついでにヘルプより。
----
レコードは,ほかの言語では構造体とも呼ばれ,複数の型を持つ要素の集合を表します。
各要素はフィールドと呼ばれ,レコード型の宣言では各フィールドの名前と型を指定します。
objectを実質廃止したのが某の敗因だな。
C#ではしっかり復活してるし。
885デフォルトの名無しさん:02/11/02 19:55
TWebBrowserで、
JavaScript使ってScrollBar無しの設定で開こうとしているページに、
その設定を無視してScrollBarを付けたいのですが、上手くいきません。
ページの読み込みが完了した後に、
下記のような事をすれば一応ScrollBarが現れるのですが、
キャスト出来ない場合の例外処理とかが俺には分からないのと、
もっとスマートな方法が有る気がしてならないので、
別の方法を知りたいのですが、どなたかご存じないですか?
Invokeメソッドの中とかで、なんとか出来そうな気もするんですが、
実際には何処でどういう値を使って
ScrollBarの設定をされているかが分からなくて困ってます。
var
 D: IHTMLDocument2;
 E: IHTMLElement;
 B: IHTMLBodyElement;
begin
 D := WebBrowser1.Document as IHTMLDocument2;
 E := D.body;
 B := E as IHTMLBodyElement;
 B.scroll := 'yes';
end;
886デフォルトの名無しさん:02/11/03 07:28
同じ型の二つの構造体A,Bがある時、
この二つが同じかどうかを比較するにはどうすればいいでしょう?
この構造体には20個以上のメンバがあります。
CompareMem で比較するか 型をVariantにするか
888デフォルトの名無しさん:02/11/03 10:02
>>886
stringがないことを祈る
>>886
自動でやるのは無理。
オブジェクトや文字列は単純には比較できないし
メンバ以外のゴミが入ってることもあるし
表現が違うけど意味的に同じこともありうるし。
なので自前でメソッド書いて全部比較。
メンバにクラスや構造体があれば再帰的にそれも比較。
890デフォルトの名無しさん:02/11/04 02:15
DelphiスレでVC++用語使うなよ。
>>889 に同じく。宣言部の = record 〜 → = class に変更して
Equal メソッドを付けて、20メンバ分ゴリゴリ比較。

ていうか。Assiginや Equal を実装すると、いつも単純作業に辟易する
(そしてメンバを追加したときよく忘れる)んだが
お前ら、解決方法があるなら教えて下さい。タノム
クラスの内部情報からメンバを取得できるらしい事を聞いた事が
あるんだが、あるいはその方法で楽ができる、のか?
>>891
published propertyを列挙して個々の型情報を取得できるから
比較・代入の自動化は可能だとは思うけど
オブジェクトを保持するプロパティをdeep・shallowのどちらで
扱うべきかという判断が毎回必要なので汎用化は難しいのでは。
どこまで同じなら同値と見なすかはそのクラス次第だしね。
Recordにメソッドが欲しい
季節ですね。

 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
   ∧,,∧   
  ミ,, ゚Д゚彡 
   〃つ旦O
 〜ミ,,[ ̄ ̄ ̄.]
      ̄ ̄ ̄
もしかして、 Delphi7でobjectはなくなったの?
まじかよ・・・
>>895 無くなってないようだけど?
なんだ、フサギコが変なこというから勘違いしたじゃねーか
D8.NET対応で・・・

いや、俺もよく知らんし・・・

 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
   ∧,,∧   
  ミ;゚Д゚彡 
   〃つ旦O
 〜ミ,,[ ̄ ̄ ̄.]
      ̄ ̄ ̄
Delphiと関係ないのでsageで。

大抵のアプリのメインメニューやポップアップメニューのキャプションには、
「...」が後ろにくっついてるやつが混じってるけど、これって何の意味?

なんとなく、ダイアログが表示されるやつかな?とか思うんだけど、
デスクトップでの右クリックのプロパティにはついてないし・・・。

むかーし、どっかでその話を読んだ記憶があるんだけどまったく思い出せず、
小一時間調べたけど全くわかりませんでした.誰か教えてください・・・.
ソースもあるとトテモ嬉しいです.
>>899
一度でその機能に到達しない場合は..じゃなかったけ?
例えば「印刷」なら即印刷が始まって、「印刷...」なら何か
プロパティ画面が出てきてから印刷とか…
漏れはそう解釈してるけど。
確かそうだったと思う
902899:02/11/05 22:36
>900, 901

なるほど、サンクス!
しかし、手元のフリーソフトとかみると全部ちゃんとついてる。
これってもしかして知ってないと恥ずかしいようなこと?

うちの会社の同僚2人は気づきもしなかったと言っていた・・・鬱

でも、バージョン情報についてる奴とついてない奴とあるあたり、
微妙に解釈が間違ってるのもあるなあ・・・。
>>899
モーダルダイアログ出るやつじゃなかったっけ?
>903

M$製のアプリは全部バージョン情報にはついてないから違うっぽい
905デフォルトの名無しさん:02/11/06 09:04
*.zip内部のファイル名を列挙して特定のファイルのみを
ストリームとしてメモリ上に読み出すことはできますか?

WindowsXPだと*.zip;*.cabを仮想フォルダのように扱ってますが
こっちの方法は可能ですか?
>>905
一度ファイルに落とさないといけないかもしれないけど、これどうよ?
ttp://home1.infonia.ne.jp/~delphian/delphi/compo/miscella.html#MI0001
907デフォルトの名無しさん:02/11/06 22:50
900超えたから次スレ立てようかな
>>907
DelphiスレとC++スレ多すぎるんだからちょっとは統合考えてくれよな。
どうせフサギコが性懲りも無く立てちまうからこちらはいらないんじゃない?
住み分けも明確でないし。
910デフォルトの名無しさん:02/11/06 23:24
モナーやらフサギコやらは、その意味不明な名前からして、
一般人(非2ちゃんネラ)には敷居が高いかと。

実際は、モナーの方はこっちのスレのスタンスに非常に近いようですが。
911デフォルトの名無しさん:02/11/06 23:51
こっちが本刷れなんだがなぁ。
相談室と談話室の2つだけあればいいんだけど。
912デフォルトの名無しさん:02/11/07 08:40
あるソフトが吐き出し続けている巨大なログファイルを横から覗き見して
特定のキーワードだけを抜き出すプログラムを作りたいのですが、
他のプログラムが使用中のファイルなので簡単に開けないのと、
他のプログラムが停止している状態でも、ログファイルが5M〜30Mと
大きすぎて開くのに時間がかかりすぎて悩んでます。

何か良い回避策は無いでしょうか。
>>912
Cygwin+grep

>他のプログラムが使用中のファイルなので簡単に開けないのと、
読み取りすら禁止してるんなら無理。
>>912
ログファイルのファイル名は指定出来るの? 出来るなら名前付パイプを作って
相手にそのパイプに吐かせる方法が使えるかもしれない。
>>912
そのあるソフトにパッチをあてて、読込禁止を外してしまえばどう?
そのプログラムが排他アクセスを指定しているんでしょ?

ログファイル名を変更可能なら、別プロセスにリダイレクトすることは簡単だけど。
ほとんどの場合、プログラムが自分で吐き出しているものをトラップするのは「容易」ではない。


ただし、裏技として、ダミーデバイスドライバを押し込む技法に近いものが存在する。
けど、ゴミも拾ったりするからめんどいよ?
原則匿名なんだし、使う人が価値を決めるシステムなんだから
「こっちが本スレ」とか言うのって馬鹿みたいだよ。

Delphi スレは(実質)3スレしかないんだし。中傷スレまでいちいち気にしていられんでしょ?
>>917
そんなことはみんなわかってるんだから、いちいちイワンでよろしい
3スレもあんのかよ。減らせって。
じゃあ、0.3スレに
そんなに減らせって言うなら統一スレ立てろよ。
過去ログへのリンクもちゃんと書けな。
922922:02/11/07 11:13
Indyを使いGETメソッドでHTMLソースを取得するアプリを作ったのですが
何故か取得先のページが存在しないにも関わらずEIdHTTPProtocolExceptionの
例外が発生しません。 この原因が解る方いらっしゃらないでしょうか..

<詳細>
・ 簡単なアプリを作って試してみるとちゃんと例外が発生します。
・ 本命のアプリはデバック時でも例外が出ません。
・ IdHTTP1がデフォルトの状態でも例外は出ません。
・ EIdHTTPProtocolException発生時の例外処理は書いてありますが
   まったく実行されません。(例外が発生しないので)
・ 取得先のページが無いことは確認済みです、URLも再確認しました。
   簡単なアプリにも同じURLを使いましたが例外は出ました。
・ 簡単なアプリと本命アプリには同じIdHTTP.PASを使いました。
・ 環境 : DELPHI 6 PERSONAL SP2 & Indy9

もし原因に心当たりがあるという方はよろしければお聞かせ下さい(^^;
例外が出ないようにするプロパティでもあるのでしょうか..(汗
>>921
お前が立てろ。
924デフォルトの名無しさん:02/11/07 11:19
TTreeViewでAutoExpandをTrueにしているとき
OnMouseDownで展開縮小するのではなく
OnMouseUpで展開縮小するようにしたいのですが
どうすれば良いのでしょうか?
925デフォルトの名無しさん:02/11/07 11:26
くだらない言い争いしてなんか得るもんありますか?
長い歴史の末に3つのスレで落ち着いてるんだからこの状態が
最善に近いと考えて良いのではないでしょうか。
(100%(・∀・)イイ!とは言いませんが)
>>925
そして今3つもスレがあるのは多すぎるという意見がでた。
つまり最善ではないということだ。
この状態は落ち着いているとはいえない。
さらに良くなるきっかけである。
>>926
いいから立てたいなら立てろよ。
立てなくてももうすぐこのスレ終わるから
次スレのタイトルに「統一」とか入れたらいいんじゃないの?
「モナーとかフサギコは使わないで」と書くとかこのスレに誘導するとか。
929925:02/11/07 11:39
>>926

さらに良くしてくれるのは大歓迎です。 しかしその話題で
このスレを占領状態にされると困りますので新スレを立てて
そこで話し合ったらいかがでしょう。 他の2スレの方々
の目にも止まりますしここを汚さなくて済みますし。
>>929
糞スレ立てさせるなよ。
>>922
とりあえず、Indy はソースがあるんだから、デバッガで追っかけてみたら?
例外が出るソースを使って、期待する例外を送出している場所を特定し、
そこにブレークポイントを貼って、ターゲットアプリを実行。
932922:02/11/07 12:16
>>931

ありがとうございます、時間をかけてじっくりと試してみようと
思います。
   ∧_∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ( ´Д` )< Delphiの質問はここで!
 /,  /    \___________
(ぃ9  |ヽ(`Д´)ノ< 質問待ってるよウワァン
/   ∧_二二つ
ギコでもモナーでもいいぞ。
どうせ回答する人は全部見て回っているからな。
スレッド内は一次元の構造だから、正直、複数スレがあるほうがコメントしやすいし
読みやすいと思うぞ
>>912
後者については
文字列変数に直接丸ごと読み込むと速くなります.

目的のデータが何行目にあるかを知りたい場合は
自分で解析しなければなりませんが,
それでも文字列リストに読み込むよりかなり速いです.
(自宅と職場のPCでしか試していませんが.
 この方法は昔,パソコン通信のログビューワーを作ったときに使いました)

最大30MB程度ということなので
かなりメモリが多くないと一度にすべてを読み込めないかもしれません.
一気読みがだめなら部分的に読み込みながら検索することになると思います.
936デフォルトの名無しさん:02/11/07 17:29
delphiのTQueryコンポーネントを使って
パラドックスのテーブルのバイナリ型のフィールドにバイナリデータを書き込むにはどうしたら良いでしょうか?
宜しくおながいします。

delphi6を使っています。
937デフォルトの名無しさん:02/11/07 17:38
>>894
object使え。
938936:02/11/07 17:54
>>936の質問はちょっと違うかも・・。

Query1.ParamByName('blob_data').Asblob := UCHAR_data;

この式の右辺はUCHAR型なのでエラーになります。
かと言ってinttostr(UCHAR_data)とやっても
実行すると”式中の型が一致しません”となります。

どうすれば良いのでしょうか?
SetDataめそっど。
>>935
全部メモリに読み込む必要ないだろ。
while not Eof(f) do Readln(f, s)
で十分
942デフォルトの名無しさん:02/11/07 23:49
912っす。レスありがとうっす。

>>913
ごめん、CygwinはUnix使えないもんで分かんない。

>>914
名前付きパイプってどうやってやるんでしょ?

>>935
えっ?Stringsにこんな巨大なサイズのファイル開けるのでしょうか?
もう一つですが、でかいファイルの部分読みはどのようにやるのでしょう?

今まではログファイルの更新をトリガにしてログファイルを開いて目的のキーワードを探す、
あるいは最後の行まで移動する間にログの更新が入って・・・
の無限ループが多いでした。
ファイルサイズが小さいと問題ないのですが。
メモリマップファイル使え
912っす。気付いていなかった。

>>940
肝心な巨大ファイルの途中からの開き方を知らないのでちょっと訳ワカメなのですが
ファイルのsから最後までを読込めって意味でしょか。
tail使え
946ねこま:02/11/08 02:11
>>943 に1票
>>944
Delphiにはファイルについていくつかの扱い方があるから困るんだよね。
途中から読む方法は
 TStreamならPositionプロパティ
 system.入出力ルーチン なら Seek/FilePos
 APIならSetFilePointer
948914:02/11/08 08:04
名前つきパイプは 95では使えないが、
http://www.google.co.jp/search?q=CreateNamedPipe&lr=lang_ja

使う側はファイル名として
\\.\pipe\pipename
という感じのファイル名を渡せないといけない。
949936:02/11/08 16:13
>>939
Query1.ParamByName('data').SetBlobData( p, size );
としても
'式中の型が一致しません'
になりますた。
>>942
ログファイルの更新というのはたいてい行の追加だと思うので
更新のたびにログの先頭から読み込むのは効率が悪そうですね.
以下は実際に試していないのですが….

ログファイルの更新時には位置から読み込み・解析を始めるのではなくて
「さらに読み込む必要があるぞ」というフラグを立てるだけにして,
作業中の読み込み・解析が終わったら
続きの読み込み・解析をするようにすればよいかもしれません.

文字列リストのLoadFromFileだと途中から読み込むことができないので
ファイルストリーム(TFileStream)で開いて
文字列リストのLoadFromStreamで読み込むようにしてはどうでしょうか.
ファイルストリームは読み込み位置を覚えているので
追加の読み込みも同じようにLoadFromStreamでできると思います.
だ か ら いいかげんスレッド切るのやめてよみにくいったらありゃしない
952デフォルトの名無しさん:02/11/08 18:43
951はネットニュースからですか?
MLの話だろ
954デフォルトの名無しさん:02/11/08 22:34
Delphi6でこんな面白いソフトができちゃった!

 http://hp.vector.co.jp/authors/VA031513/
>954
いろんなところに貼り付けているようだが
意図は何だ?
・宣伝のため
・荒らさせるため
・Delphiを陥れるため
957デフォルトの名無しさん:02/11/09 03:15
日本語版のDelphi7パッチってまだ出ないの?
おそらく怨恨
>>957
もうでてるけど?
960デフォルトの名無しさん:02/11/09 10:08
Delphiってフリーなのでしゅか?
どこへ行けば手に入るのでしょうか?
ソフマップでやたら高い金額がついていたのはどうしてなのでせうか?
いい本があったらいただきたいのですが?
Personalがフリーで入手できます
以下のサイトへどうぞ
http://www.borland.co.jp/
912っす。
メモリマップファイルとTFileStream、両方試してみたら
後者が速かった。
みんな、ありがとね。
>>960
プログラミングのソフトはそんなもん。
安いのはダンピングしているM$の学割だけ。
964デフォルトの名無しさん:02/11/11 00:41
タイトルバー非表示ってどうやればできますか?
>>964
CreateParams メソッドでスタイルを変更する。
>>965
時に、964はネタなのだろうか(藁
ネタなら、そのレスが一番だけど。
967デフォルトの名無しさん:02/11/11 01:01
ネタじゃないっす
ネタじゃないコース→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→↓
                                       ↓
                                       ↓
                                       ↓
                                       ↓
                                       ↓
                                       ↓
                                       ↓
                                       ↓
                                       ヘルプ嫁  
969修正(藁:02/11/11 01:07
ネタじゃないコース→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→↓
                                                       ↓
                                                       ↓
                                                       ↓
                                                       ↓
                                                       ↓
                                                       ↓
                                                       ↓
                                                       ↓
                                                      ヘルプ嫁  
970965:02/11/11 01:13
一応、まじめに答えたつもりなんだけど・・・。
>>970
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.Style := WS_POPUP or WS_THICKFRAME;
end;

これやるとウィンドウが左上に固定したりして動かせない…
>971 WM_MOVEを自前処理はキホソ。
>>972
う…、出なおしてきます
974検索しような。:02/11/11 23:30
975972:02/11/11 23:31
>>974
う…、出なおしてきます
うっ… 出ちゃいました…。
こんなにたくさん
978デフォルトの名無しさん:02/11/12 03:49
D7にて
ListViewからドラッグを行う場合に、スタイルがvsReportだと
ドラッグ中に該当する1行が丸ごとドラッグされるアイコンの横に
表示されてしまいますが、ドラッグ中は先頭の1項目目だけを
表示させる方法が解りません、良い方法があれば教えて下さいませ。

(エクスプローラでフォルダを一覧表示させてドラッグした場合には
ファイル名だけがドラッグ中に表示されているのと同じイメージ)
979ねこま:02/11/12 07:44
OLE DD
フォームのBorderStyleをbsDialogにする以外で、左上のアイコンを
表示しないようにする方法ってあるんでしょうか?

サイズ変更可能で、左上にアイコンは表示せず、でも右のXボタンは
表示したいんですけど、CreateParamsをオーバーライドしていろいろいじくっても
うまくいかないんです.
981デフォルトの名無しさん:02/11/12 23:40
次すれ(屮゚Д゚)屮 カモーン
982デフォルトの名無しさん:02/11/12 23:41
そこのけ、そこのけ。 愉快なソフトのお通りだ〜い! by Delphi

 http://hp.vector.co.jp/authors/VA031513/
>>980
透明なアイコンを作t
記念パピコV(^o^)V
記念熊ん子V(^o^)V
>>980
>フォームのBorderStyleをbsDialogにする以外で
↑これの理由次第だと思うのだが。
なんでそれじゃダメなのか。
http://webpro.jp/tips/detail.php3?arg_tcd=1&arg_tno=14
これやって フォームの「エディタで表示」(ALT+F12)すると
日本語文字が化けて元に戻すと文字が消えてしまいませんか?

俺だけ?
988デフォルトの名無しさん:02/11/13 09:20
新スレです

Delphi相談室その8
http://pc3.2ch.net/test/read.cgi/tech/1037146781/
>>987
Tips とは移り変わるもの。過去ログに縛られないよう。
あなめあなめ
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| 閑散としてきたな。
\___ _____________
      |/
      ∧ ∧    ∧,,∧
      (,,゚Д゚) .目.ミ゚Д゚ ミ
     (|   |)  || (ミ  ミ)
    〜|   |   ||  ミ  ミ〜
      ∪ ∪  .||  ∪ ∪
           /|
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| そろそろ埋めなかなわん。
\__________________
991
992
993

994


995




そろそろ誰かこないか?
まだこないみたいだな
どうよ、埋めないの?


999
1000ゲト
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。