1 :
Delphi1 から使ってます :
02/09/21 11:45
あと適当に貼っておいてください。
∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( ´∀`)<. Delモナーがどんな厨房疑問でもやさしく答えます。 ( ) .| Delモナーは時に私であり、時には別の人。 | | | | 他のスレに書き込んで罵倒される前に、まずここで質問しよう。 (__)_) \_________________________
Del7が26日発送ってことは、金曜日か土曜に届くから、 週末はDel7で遊べっていう個人ユーザへの配慮ですか?
なんだこの廃れ具合は・・・
久しぶりに Delphi Direct を起動してみたが Delphi7 の情報がまったく無いのはどういうわけだ Borland
>>7 ゲー製作のノベルゲームスレにでも行ってるんじゃないの?
11 :
デフォルトの名無しさん :02/09/23 01:17
やっぱ、やさしいスレと統合した方がいいのかな…
>>11 おう、いつでも引き受けるぞ。
もちろんベースは俺らだからスレタイは俺らのがそんぞくだがな
ミ,,゚Д゚ミ WideStringのUnicodeで カタカナ⇔ひらがな 全角⇔半角 変換など、行うのは、どうするのでしたでしょうか。。
サンクスコ ミ,,゚Д゚彡ノ [Delphi:41843] Re: 半角の数字を全角に( 遅レス+解決したので)
昨日Delphi 6 Personalをダウンロードしてユーザ登録して メールで ライセンスキーとインストールキー届いたんだけど インストール時に「キーが正しくありません」って跳ね返されてます(T_T どうしてでしょうか? のっけからつまずいてます・・・・
あ でけた♪
,,,,,,,,,,,,,,,∧,,∧ /こんな感じで 〜′,,,,,,,,,,ミ,,゚Д゚彡< 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;
,,,,,,,,,,,,,,,∧,,∧ /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;
,,,,,,,,,,,,,,,∧,,∧ /
〜′,,,,,,,,,,ミ,,゚Д゚彡< あってるのん?
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
? ∧,,∧,,,,,,,,,,,,,,, /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の出来のみを云々するのは あまりにも近視眼的ではないだろうか?
社員だから
☆★☆★☆ アンチに朗報! ☆★☆★☆ VS.NET 7.0と.NET 1.1は連携できません! .NET 1.1を導入すると、VS.NET 2003を買わされる羽目になります!
今、テキストエディターを作っている(作ろうとしている)のですが、 メモ帳と同じフォントにしたいのです。 しかし行間が大きくて、同じにならないのですが、どうすればいいのでしょうか? あと、RichEditで作っているのですが、Memoの方が良いのでしょうか? どなたかお願いします。
フォントと行間って関係あるの?
そうです
>>26 Delphiは6?
6より前のは使ったことないから知らないけど、
6ならHelpのチュートリアルでテキストエディタ説明してるよ。
それ辿っていけば?
それと、メモ帳と同じフォントにして、
サイズもそれと合わせたら同じようになるはずだけど…?
あと異なる書式を混在させるようなことをしなければ
TMemoで十分だと思うけど。
(RichEdit使ったことないんでよく分からんが…)
行間を指定したいんでしょ TMemoもTRichEditも無理
オナニードローでできるよん
メモ帳のフォントとTMemoのフォントとサイズ合わせたら行間も同じになったよ。
とりあえず
>>28 を使ってみようと思います。
シェアウェア(カンパウェア)なのがちとあれですが…。
レス下さった方、ありがとうございました。
40 :
デフォルトの名無しさん :02/09/29 00:45
richeditの何がそんなに気にくわないんだか…? 別に構わないと思うけどなぁ…。 読み込める量からすっとMemoは非推奨だとは思うけど。
43 :
デフォルトの名無しさん :02/09/29 01:48
imageの上に透明のimageを置き 上のimageにCanvasで図形を描くときにちらつきます。 delphi5ではちらつかなかったのですが、 delphi6にしてからちらつくようになりました。 DoubleBuffered や WM_ERASEBKGNDを無視するように もしましたがちらつきます。 どなたかご教授をお願いします。
なんでDoubleBufferedを無視するの?
なんでオフスクリーンにしないの?
>>44 DoubleBuffered := True
です
で、imageを2つも重ねて何がしたいの?
16bitの画像データをテキストに変換したいのですが、 VBでやるとデータ型がない上に遅すぎて使い物になりません。 やっぱりdelphiでやるのがいいのでしょうか? データサイズは512*512または128*128*128です。
コンパイラなら何でもいいよ。 速度で言うとVCのが速い。
うーん、やっぱりCですか。 本職じゃないのでお手軽にやりたかったのですが・・・。 ちょっと勉強してみます。
DelphiならTBitmapに画像を読み込ませてコンポーネント リソース形式(16進)でストリームに吐かせるだけだからほんの数行 書くだけ。
こんな感じかな? 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;
>>55 了解した。ちらつきの件がむばってくれ。
2枚の画像を重ねる理由が判らないけど、
合成処理をさせたいだけならオフスクリーンを
使った処理でいいのでは?
> 128*128*128
もしかして研究でボクセルやってらっしゃいますか?
CTスキャンみたいなの?
これだとTBitmapは無理だろうから、自作しないといけないからがんばって
>>43 OffScreenを使うに一票。
目に見えないBitmapの上にDraw系の命令で一旦書いておいて、
最後に目に見えるところに一括転送。するとちらつかない。
>56だす。 オフスクリーンに追加しておくと。。。 TImageをいじくるよりも、むしろTControlを使って 表示用のみのTBitmap、オフスクリーン用のTBitmapを 用意しておき、合成はオフスクリーンで行い 合成の結果を表示用へ書き込む。 そしてTControlへの常時描画は表示用を使用する。 この時、WM_ERASEBKGNDを調整するように・・・ まあ、DoubleBufferを自分でやるような感じですが・・・
>>56 >>57 >>58 ありがとうございます。
なんとDoubleBufferでいけてました。お手数かけました。
メッセージを捕まえたり、ポートを調べたりしてたのが何だったんだ!
これで土日潰しました。勉強になったけど・・・
DoubleBuffer恐るべし。 学校なんでおやすみなさい。
なんだポートって?DoubleBufferにポートってなんだー?謎だ・・・
ごめん、俺マジでわからん
海に向かって叫んでたんだろ
65 :
デフォルトの名無しさん :02/09/30 13:06
TRichEditを右クリックしたとき TMemoを右クリックしたときと同じように ポップアップを表示させるのにはどうしたらよいのでしょうか? TPopupMenuで作成するしかないのでしょうか?
67 :
デフォルトの名無しさん :02/09/30 19:22
D5 -> D7のバージョンアップで悩んでいます。 いったい DsgnIntf はどう処理したらいいんだろ? TDefaultEditor を継承してダブルクリック時のデフォルトイベントを変更してたんだけど DsgnIntf はtoolAPIの DsgnIntf.pasを使っていいのかな? TDefaultEditorがDesignEditors に変わってるし、 EditProperty の引数の型が変わってるから変更したら、今度は IProperty が定義されてないと出る
ごめん 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;
75 :
Indyのことでお尋ねします。 :02/09/30 21:20
ファイルを転送するプログラムを組みたいのですが、 どうしたらよいでしょうか?教えてください。
少しは調べろ
77 :
Indyのことでお尋ねします。 :02/09/30 21:33
>>76 調べましたがアフォなので探せないし、わかりませんでした。
Indyはソース公開されてるんだからソース読め。
79 :
Indyのことでお尋ねします。 :02/09/30 21:38
どこでしか?
モナーに聞いて来い
インストールしたらついてくる。
83 :
Indyのことでお尋ねします。 :02/09/30 21:43
84 :
Indyのことでお尋ねします。 :02/09/30 21:44
アフォだからソース見ても分かりません。 消えろと言うのならば、消えますがいかがいたしましょう。
FTPクライアントを作りたいということですか? FTPサーバを作りたいということですか? その両方ですか? それともまったく別のものを作りたいんですか?
86 :
Indyのことでお尋ねします。 :02/09/30 21:52
FTTPみたいなものを。
FTTPとは?
FTTP ( ̄ー ̄;)。。。ん?
89 :
Indyのことでお尋ねします。(俺って厨房?) :02/09/30 21:57
・・・。 とにかくサーバーにファイルを転送するファイルです。
まぁ間違いなく厨房でしょう。 とりあえずFTPクライアントを作りたいということでいうわけだね。 んで、IndyのFTPクライアントは使ってみたのかい?
>>89 FTPサーバはサーバのサービスを起動するだけだから
(NT系なら付いてるよ WinXP Homeはどうかしらんけど)
FTPクライアントアプリを作ればOK
フォームにIdFTPを貼り付けてヘルプを読むべし
92 :
Indyのことでお尋ねします。(俺って厨房?) :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
>>96-98 スマソ、VBでいう「VbCrLf」みたいなのはなかったっけ?
折れの勘違いだったかな?
# 煽りじゃないので念のため
あんまり検証してないけどVCL全体で#13がハードコーディングされてるのに 部分的にsLineBreak使うとおかしくならない? クロス開発のときにね。
>>100 サンクス 助かったよ
・・・と言いたい所だったけど、
折れのD5では存在しないみたいだ(鬱
Del7買うかな・・。
sLineBreak = {$IFDEF LINUX} #10 {$ENDIF} {$IFDEF MSWINDOWS} #13#10 {$ENDIF}; むしろクロス用と思われるけど・・・
>>101 VCLでもそう書かれてたのか。
どうも折れの勘違いか何かだったような気がしてきた。
スレ汚しスマソ
つか、なんでsLineBreakってヘルプに載ってないんだろ。 …載ってないよな? 少なくとも、キーワード検索しても出ない。
>>103 sLineBreakが両対応で
VCLが#13#10ハードコーディングで
CLXが#13ハードコーディングになってるのが
なんかイヤだってだけなんだけどね。
>>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; > ↑揃いも揃って無駄な空行・・・
108 は寝てしまったかぁ
>>110 おお、何て簡潔に・・・
ココに書き込む1時間前は
もっと長々書いてた自分が恥ずかしい。。
>>111 >>112 >>113 AutoExpand、初めて聞くブロパティーです。。
ほんと俺は何も知らない小僧だわ・・
みなさん、ほんとありがとうございます!
早速2つとも試してみます。
123 :
デフォルトの名無しさん :02/10/02 12:40
Delphiはじめたばかりで手元に書物もないのでヘルプファイルのチュートリアルの テキストエディタをつくってみようとおもったのですが いきなりAddtionalにある(らしい)ActionManagerってコンポーネントってのが のが見つからなく詰まりました。 一番最初のほうの説明書き読んだら 「ここで取り上げている機能の一部は Delphi の Personal 版では使用できません。」 と、書いてあるし(T^T) プログラム経験の無い方でDelphiから入った人はどうやってDelphi勉強しましたか?
125 :
デフォルトの名無しさん :02/10/02 13:22
D7でXPManifestを貼り付けてXPスタイルのフォームに変更してみました、 ところが、時々ラベルが再描画されない事があります。 しかたなくRepaint等を試してみましたが駄目でした。 WindowsXP側の設定で「視覚テーマを無効にする」としてプログラムを 実行すると旧来通りの画面だと正常に動作します(当然か・・・) XPManifestを使って問題があった方はいらっしゃいますか?
126 :
デフォルトの名無しさん :02/10/02 13:42
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
133 :
デフォルトの名無しさん :02/10/03 00:43
・データ名 Edit1.Text ・データ番号 Edit2.Text ・データの内容(改行有り) Memo1.Text これらをひとくくりに 何個もこのようなデータを1つのテキストファイルに保存したいのですが 何かいい方法あったら教えてください。 テキストファイルでなくても保存できて読み込めればどんなファイルでも いいのでこういう方法がいいとかあったらおながいします。
ミ,,゚Д゚彡普通にIniファイルでいいのでは...
135 :
デフォルトの名無しさん :02/10/03 01:05
>>133 InterbaseとかMySQLで管理するのはどう?
まっ… まだアクソンジャーマネのネタが来るのかよ!
>>133 TMemoryStream のインスタンスをつくって、TWriter のインスタンスを使って
・先頭にデータの数を書き込み
・DataName(string)
・DataNo(integer)
・Data(string)
を TWriter の WriteString と WriteInteger メソッドで書き込む
これをデータ数分くりかえして、最後に SaveToFile() する。
読み込みは、TReader のインスタンスを使って、RaedInteger と ReadString
メソッドを使って、データ数を読み込み、その数分だけ、上記のデータの読み
込みを繰り返す
138 :
デフォルトの名無しさん :02/10/03 01:14
>>133 少量であれば、TCollectionItem派生のクラスに持たせてストリーミングという手もあります。
でも、量が多ければ
>>135 氏の言うようにデータベースの方がいいと思います。
(改行があるので*.iniは没)
あ、最後の行、読んでなかった…。 量が多いとiniはちょっとナニだしな。 138は忘れてくで。
>>134 >>138 iniは32kbまでしか扱えないって何かで見たんですけど
大丈夫でしょうか?
データは結構でかくなると思います。
>>135 データーベースは
勉強しないと。ググルで調べてみます。
おすすめの解説サイトとかありますか?
>>137 >>139 なるほど、いつぺんやってみます。
みなさんレスサンクスです。
あ、書いてたらレスが、、
うんこ
(´-`)。o ○ (とうとうH○Pスレみたいなレスが…)
>>141 TMemINIFile使えば何メガでもOKだし、OSの違いによって動作も変わらない。
146 :
デフォルトの名無しさん :02/10/03 02:06
つーか、検索して自分でやってみるがヨロシ。
148 :
デフォルトの名無しさん :02/10/03 03:17
●●●●●●●●「オセロさえ納期内に作れない=OO役立たず 」祭り●●●●●●● /| | |_____ΦΦΦΦΦΦΦΦΦΦΦ||ΦΦΦ | | | ̄ ̄ ̄ /| || | | | / /|TTTTTT TTTTTTTTTT||TTTTT | /\ | /|/|/|^^^^^^ |三三| ^^^^^^^^^^^||^^^^^^^ | / / |// / /| | / / |_|/|/|/|/| | / / |文|/ // / |/ /. _.| ̄|/|/|/ Λ_Λ /|\/ / / |/ / (___) /| / / /ヽ /〔 非OO 〕〕つ | | ̄| | |ヽ/l `/二二ヽ | | |/| |__|/ Λ_Λ / /(_) | |/| |/ ( ´∀`) (_) Λ_Λ | | |/ // / ^ ̄]゚ (` ) | |/ ゚/ ̄ ̄_ヽ ⊂〔〔 非OO 〕
ミ;゚Д゚彡改行だめみたいだ・・・知らなかった
改行とか特殊コード入れたければ 自前で%エンコードか \エンコードいれるといいよ
151 :
デフォルトの名無しさん :02/10/03 10:04
>>150 で、読み込みの時はデコードの手間が増えるわけ?
>>151 そうだよ。どうせファイルアクセスするんだから、その時間は隠れてしまうよ
手間ったって TMyMemINIFile を継承して WriteEscString ReadEscString を一度作るだけだろ
なぜそうまでして ini にこだわる?
もともと *.ini を使うのが簡単、という文脈の流れで
レジストリじゃなくてiniに拘る理由? そりゃ、windowsフォルダに入れるなら糞だけどローカルに作ると 1、速い 2、実行ファイルを別のディレクトリに入れれば相互に独立する 3、環境を移す時にディレクトリを丸ごとコピーするだけでいい 4、アンインストールも楽
レジストリのほうが動作は速いんじゃないの?
160 :
デフォルトの名無しさん :02/10/03 12:22
>>159 サイズによると思うよ。
巨大な iniファイルを作ると1文字の追加削除でも全件読まなければならない iniより
木構造で管理されてるレジストリが速いだろうね
それでもアプリ起動時に全件読んで、終了時に全件書き込むような使い方なら iniの方が速いんじゃない?
162 :
デフォルトの名無しさん :02/10/03 13:13
なんで
>>133 の質問で「INIファイルかレジストリか」って
議論になるのかわからん。
各項目のサイズ。レコード数。更新の頻度。とかを考えないと
テキストのまま保存されるINIファイルは論外になる可能性が
あるでしょ。
それに、こんなことでレジストリを使っていていいのかって
問題もある。たとえばNT系列でAdministrator以外でも
きちんとつかえるのかしら。
163 :
デフォルトの名無しさん :02/10/03 13:16
>>158 >レジストリじゃなくてiniに拘る理由?
ちゃんと133からの流れを読んでいるのか?
データだよ、保存したいのは。前に出てた Stream 系かデータベースを
使うのが普通だろ。
>>164 ああじゃ追加
5、気にせずに巨大データも書き込める
レコードが大量だとRDBとかも選択肢に入れておかなきゃ だめじゃないの?最初から除外する意図がわからん。 プログラムが使い捨てか、長く使うかでも変わるし データのサイズが数KBか数百MBかでもかわりますから そこらへんがわからないうちからINIだのレジストリだの いうのは意味がないでしょ。
167 :
デフォルトの名無しさん :02/10/03 14:46
>>165 巨大データをINIになんて入れると時間がかかるよ。
君の言いたいことは、気にせず「巨大データを書き
込むプログラムが作れる」だろ。
ああなるほど、2個のEDITと1個のMemoと思ってたから iniファイルを持ち出したんだけど、
>>133 を読み返すと データ番号 とかデータ名となってるから1件じゃなくて
複数のこういうペアを作りたいのかもしれないね。
だとすると、単純にデータ名でディレクトリ掘って、
データ番号をファイル名にして
データの内容=ファイル内容 なんて解法が一番スマートで楽じゃないかな
可変長のテキストをRDBで扱うとRDBによっては効率悪いし
>>133 まずは各データの最大長とデータの最大個数書かないと。
わからないならおおよそのサイズ(数バイト,KB,MB,無制限)でもいいから。
あのねぇ、ini がどうとか言ってる奴を除けば133は解決済み
>> 複数のこういうペアを作りたいのかもしれないね。 >何個もこのようなデータを1つのテキストファイルに保存したいのですが これ、読めないのか?
>テキストファイルでなくても保存できて読み込めればどんなファイルでも >いいのでこういう方法がいいとかあったらおながいします。 これ、読めないのか?
>>172 =168=158
いいかげんにしろよ。168では、データ数分だけファイルつくるってんだから
仕様を満たさないのは明らかだろ。
じゃ、結局 TMemIniFileでエンコードして格納するのが一番適当って事だね
>>174 君の住所録は TMemIniFile でエンコードして作ってろよ。
おもしろい奴だね。もっと日本語の読解力をつけろよ!
177 :
デフォルトの名無しさん :02/10/03 17:43
>>132 僕も半年だけど、全然だめぽ。。。
Delの前にも違う言語やってたんですか?
うん、Hエスパーだったよ。
ミ,,゚Д゚彡 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
某に聞け
^sankusuko
そういや、ヘルプのキーボードショートカット一覧って、 キーワード検索で探すしかないの? 目次からではどうやってもたどり着けなかった気がするのだが。
ヘルプファイルをテキストにコンバートすれば一発だよ>195
なんか荒れ気味だけど、本人どーした?<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
LISTBOX等で Listbox1.DeleteSelected; をおこなうとフォーカスが線だけの囲み状態になって、例えば DELキーにレスポンスして連続削除のようなことができないです。 どのようにすれば、プログラム側から動的にリストの項目をセレクト 状態にできるでしょうか? ----------------------------------------------- ListBox1.TopIndex:=i;//リスト画面のスクロール この関数でリスト表示位置を移動した時に連動して、 オーナー描画をしたいんですが。 onオーナー描画で描くと、描画後にリストのスクロールがおこなわれ描画画面が消えてしまいます。 このような場合正しいタイミングにするためには、どのような設計が必要なのでしょうか?
Delphi7で、dcuのみでpasファイルがないユニットをコンパイラが認識しないようなのですが、 同様の症状が出る方はいますか?
>>207 確かめてないけど、他バージョンのdcuを認識しないのは伝統的な仕様だったと思う。
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 フリーのコンポーネントの中にはソースの付かないものがあるけど
バージョンが古いともうだめってこと?
だとするとフリーでもソースの付かないコンポーネントは逝ってよしかな
>>209 普通に考えれば、ツールメニューに$EDNAMEなどを使って登録しておくか、
OpenToolsAPIでIDEの機能として全てを組み込んでしまうか、でしょうね。
後者の場合深くやろうとすればそちらへ労力を割かれそう。
やっと昨日、ずっと引っかかっていた新規プロジェクトをOpenToolsAPIで作る方法を発見…。
>>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すればいいのでは?
そういう話ではない?
>>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
解決しました。
>>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() な(笑)
>>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 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 未だに隅をつつくなよ。某がかわいそう
リストビューのアイテムをドラッグアンドドロップでデスクトップに持っていって ファイルを作成したいんですが、どうすればいいでしょうか?
(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の神託 シェルプログラミング入門」という本がお薦めです。
>>255 それのどこに DropSource があるのですか?
ちょっと皮肉っぽかったかな,ごめんなさい. 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 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標準でなかったでしたでしょうか?
>>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 で色を元に戻す
>>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;
>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 無い場合、例外飛ばしてもいいけど、使い勝手が悪そう。
BOM無い場合デフォルトでLittleでいいでしょう
>>287 >本質的に、自分以外のフォーカスのないコントロールをクリックした場合を
>検出するのはできるのかな?
この方法激しく知りたい
ここでザロゲートは関係ないな
>>292 >>本質的に、自分以外のフォーカスのないコントロールをクリックした場合を
>>検出するのはできるのかな?
>この方法激しく知りたい
お手軽方法としては、目的のコンポーネントで TApplicationEvents のインスタンス
を抱え込んで、
>>285 と同じことをする、というのは?
297 :
デフォルトの名無しさん :02/10/08 22:31
TreeViewでD&DするにはOnDragDropを弄ればいいんですよね?
/⌒\
γ彡・ω)ミ /
>>290 さん ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
|ミ,, ゚Д゚彡 < きっと満足して板だける、仕様に
| つ_|| ̄ ̄ ̄ | \__なったのではナカ?ですか__
〜ミ,,, ,,|\||Letsノ-ト|
'\||.======.| 読みはLittleとBigは常に指定して
 ̄ ̄ ̄ BOM優先/無視スイッチ
書きはLittleとBig指定と
BOMON/OFFスイッチ漬けます太
フサギコさんに聞きたいんですけど あなた本当に給料もらってるプログラマなんですか?
__________ ∧,,∧ / まあ仕事中に ミ ,,゚Д゚ミ < 2チャンしてる不良サラリーマソではあるですよ、 ∬ (し, ミ_と)_ \君ほど、無礼な人じゃないから /且 /|| 普通に社会生活は営んでるけど。 || ̄ ̄ ̄ ̄ ̄|| とか青ってみるです。が、どうでしょうか。
カエリマツ ,,,,,,,,,,,,,,,∧,,∧ / す・・すまそん。 〜′,,,,,,,,,,ミ゚Д゚;彡< 電話で元カノと UU"""" U ⊃ \ 最悪県下厨だったので ______ レス即煽り返してしまたです。 /且 /|| ごめんなさい。ごめんなさい。見逃してください。 || ̄ ̄ ̄ ̄ ̄|| タイーホしないでください。たった今、個人的に吐き気がするほど 気分が悪い時刻でした.... はい、残業代でそこそこ、お金もらってるかもーな エセヨみたいな雑用係仕事してますです。最近。が何か? そういえばテストコードを書いていないっすね。
>>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 設計中です
>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 ちょっと尻逮鴨.
途中に別なクラスを挟んだときとかに
(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 するような
ことはできるの?
>>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.
>>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とは関係ないような・・・
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、かな?
>>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 にしとく。
>>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#の方が小籠包ですか?
97 名前:仕様書無しさん 投稿日:02/10/10 20:42 Delは某スレでベンチ対決やってC#にコテンパン
>>422 えらく古い話題だな。
過去ログいろいろ見てみ。ことの顛末がわかるから。
424 :
デフォルトの名無しさん :02/10/10 21:45
Del厨がいかさまやった挙句負けてたシーンは圧巻であった。
そういうことにしたいんですね:-)
426 :
デフォルトの名無しさん :02/10/10 21:52
きのせいか .∧∧ 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外に出たときのように ドロップ不可のカーソルに変えるには どうしたらいいのですか?
自己解決しますた。 OnDragOverのAccept := False;ですね・・・ スレの無駄使いスマソ・・・
del7はどーなったんか知らないけど、どーして 標準でDirectXが使えるよーにしないのかなぁ? あとPNG。
ということにしなきゃやってられません。
ということにしなきゃやってられません。
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
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
プロジェクト→オプション→パッケージ→パッケージ再構築 じゃないかな。
>>442 ありがとうございます!!!
「パッケージの再構築」の欄の「実行時パッケージを使って構築」の
チェックを外してからコンパイルしたら正常に起動しました!
感謝してもしきれないくらい感謝です、ありがとうございました!m(^^)m
444 :
デフォルトの名無しさん :02/10/12 04:53
しかし、サイズが大きくなる罠。
>>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なのでパスが通っていればどこでもよい。
∧,,∧ /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;
>>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
あげ
$(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' ユニットはコンパイルできませんでした
。・゚・(ノД`)・゚・。
> $(DELPHI)\Lib;$(DELPHI)\Bin;$(DELPHI)\Imports;$(DELPHI)\Projects\Bpl こんなにあったっけか (w >[致命的エラー] IdA ... Indy はデフォルトじゃないからでしょう IdCoderMIME.pas のあるパスを追加すればよいのです.
あ,じゃないのか. Indy 使ってないからパスです.
[エラー] 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をつかてます。 これで鯖に繋いで文字を受信したら文字が化けてるのですが どうしたらよいでつか?
>>479 ありがとうございます。
しかしこの行で
Style := Style or TVS_NOTOOLTIPS;
未定義の識別子: TVS_NOTOOLTIPS
符号付型と符号無し型の演算により,オペランドが拡張されました
とエラーが出てしまいます。。
482 :
デフォルトの名無しさん :02/10/13 23:06
>481 確認はしてないけど、uses commctrl.pasすればいいのでは?
ちょっとIndyがこのスレで流行ってるみたいだから、Indy9落としてきて入れますた。 すごい数のコンポ群ですね、これ。 で、特定のIPアドレスのマシンにファイルを転送したいんだけど、こんな場合は ServerとClient側でそれぞれどんなIndyコンポ使うのがいいんでしょうか?
Indy というよりも Threadに絡んだ問題で少し悩んでいる。 接続中にキャンセルした場合や、アプリが終了する場合などの 通信終了待ちはどう書くのが定型なのだろか?(TIdFtp) 今はQuit呼んで、即Freeしている。 なんとなーく動いているようだが行儀が悪い記述である気がして すげえ気になってる。誰かアドバイスplz
486 :
デフォルトの名無しさん :02/10/14 02:40
>>483 そりゃFTPでしょ。File Transfer Protocolってなもんだから。
>>486 まぁ妥当ではあるけど、コマンドの実装が面倒だから
独自プロトコル使ってもいいんでない?
既存アプリではなく何故自分でファイル転送する必要があるか
483を問い詰めないことには結論は出なさそう
489 :
timerコンポーネントについて :02/10/14 04:40
Timerコンポーネントのカウントを0から数えなおさせる ようにするにはどうしたらいいのでしょうか? こうゆうメソッドがあるのかと思いヘルプを見たり検索 したんですが見当たりません。 例、1分ごとにイベントを発生するTimerがあったとします。 前回のイベントが今から30秒前に起こっていたとします。 この瞬間にButton1を押すと、この時間から1分後に Timerのイベントを起こすようにしたいです。 →イベントの発生を30秒ずつズラす。 解る方がいらっしゃいましたらお願いします。m(__)m
Enabled := False; Enabled := True;
491 :
timerコンポーネントについて :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 := 'あいうえお'; とすると、 ちゃんと両方とも 'あい'を返してきます。
それで何が納得いかないのかといいますと、 Copyの挙動が引数の型によって変わるのは分かるのですが、 LeftStrのほうがstringを引数に取っているのに日本語のときにもちゃんと文字数を返すのが 気持ち悪いというか、便利なんだけどどうしてなんだかよく分からないのです。 文字コードを見てちゃんと判別でもしているのでしょうか?
function LeftStr(const AText: string; const ACount: Integer): string; begin Result := Copy(AText, 1, ACount); end;
>>495 Σ(゚Д゚)
てことは・・・あれ?なんで
>str = 'あいうえお'; とすると
>Copy(str, 1, 2)は あ を返す。 LeftStr(str, 2 )は あい を返す。
ってなるんだろう・・・?
ほんとにそんな結果出るか? ShowMessage(LeftStr('あいうえお',2)); の実行結果はどうなる?
ShowMessage(StrUtils.LeftStr('あいうえお',2)); こっちのが確実か。
>>497 やっぱりなります。
StrUtils.LeftStrだと 'あい' , Copy('あいうえお', 1, 2) だと 'あ'
なんでなんでしょうか・・・?
>>493 CopyのCountは文字数というか配列数
>>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) だと 'あい'
俺のはパッチなしのソースだった。すまん。 UP2当てたら確かに>502のソースになった。 しかしUPで関数の挙動を変えてくるとはね。 Borlandの文字列に対するポリシーがよく分からない・・・
504 :
デフォルトの名無しさん :02/10/14 15:14
作成できるEXEの実行速度の高速性は C++(VC++)>Delphi でよろしいですか?
>>492 さん
|,,∧ レスあんがと
|Д゚彡 D6ProUp2で
|⊂ミ 付属のIndyです。
| ミ
|''U 何度やってもうまくいきません
IndyVerあげなきゃいけないのかな..ウツ
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;
わざわざ MakeStr で作った文字列を繋げている所がクソです. 左寄せしたければ SetLength, FillChar & Move で良いのです. Rx Library は全体がバブリーで,昔から大嫌いです. "required RX Library"なんて書いてあるコンポーネントは軽蔑します. Irvine で使われているのが信じられません.はっきしいってガッカリしました. もちろん既に排除しました.
> もちろん既に排除しました Irvine から RxLib を排除したって事ね.
>>513 あ、D7で試しました 問題ないと思います
スクリーン上に、指定したフォントサイズで文字を表示したいのですが、 文字をスクリーンに描画するにはどうしたらいいんでしょうか?
>>517 スクリーンってなに?
広い意味では、ラベルの文字列だってスクリーン出力だよ。
デスクトップの意味なら、google でコード例がたくさん見つかる
>>518 あ、言葉足らずですみません。デスクトップの意味です。
ググってみたのですが、私の検索条件の設定が悪いためか、
いまいち引っかかりませんでした。コード例があるところ
ご存じでしたら教えていただけませんでしょうか?
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;
523 :
Delフサギコ ◆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フォルダに何をいれればいいんだろうか。
すいません。出来ました end.を不覚にも書き忘れてました。 タイトルバーに表示されますけど、ウィンドウで表示はできませんか
525 :
Delフサギコ ◆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のものに変更するだけではだめなのでしょうか?
526 :
Delフサギコ ◆A6VzDeLphI :02/10/14 18:34
∧,,∧ /ところで、 ミ゚Д゚,,彡 < Indyコンポーネントはたぶん全部 ⊂ミ ⊂ミ \ TIdBaseComponentを継承してるから 読み出し専用のVersionプロパティで Versionを確認することができます。
他板のネタをこっちに持ってくるなよ。 あっちで教えてやればいいだろ。
どうもです。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 Transparentというプロパティのあるコンポーネントならできるはず
535 :
デフォルトの名無しさん :02/10/15 05:44
popup Menuコンポーネントについてお聞きしたいのですが popup MenuのCaptionに名前を登録すると勝手にショート カットキーらしき表示が追加されてしまいますよね。 例、「 名前(Z) 」 これを「 名前 」だけにするにはどうしたらいいのでしょうか、 どなたか教えて下さい。m(__;)m
(´-`)。o ○ (これは「ヘルプ嫁」だなぁ…)
>>536 ヘルプ読んでも検索しても解らなかったから聞いたのに・・(TT
私には理解出来ない書き方してあるのかな・・
ヒントだけやる TPopupMenu のプロパティの最初の方にある
>>538 ありがとうございます、もう一度調べ直してみます。 m(__;)m
>>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とかに流し込んで変換テーブルを作成するけどね。
>>543 是非うpお願いしたいです。
>>544 やっぱり自作するしかないですかね・・・
せめて列挙型で定義されてればとか思ってみるテスト
547 :
デフォルトの名無しさん :02/10/15 14:16
>>545 をを!ありがもう(´ー`)
ちょっくら変換テーブル作ってみよ
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の仕様なんでしょうかね?
なんでわざわざ列挙型にするのか?です.
FIELD = VALUE; が連続しているだけなので,AWK かなんかで VALUE: Result := 'FIELD'; と変換してしまえば case 文のボディができあがりますがそれではダメなんですか?
>>549 すいません書き忘れてました。
最初の質問に関してはもう解決済みです。
ただ列挙型にしたのはテーブル作る他に何かよい方法がないかなーとか
模索してたのです。
そしたら
>>548 のようなエラーになったのです。
仕事で英語版Windowsで動作するアプリばかり作らされるから、 英語版のDelphi7買おうと思うんだが、日本語版Windowsで 英語版Delphiってちゃんと動く??
553 :
デフォルトの名無しさん :02/10/15 18:25
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しろ
>>555 解決したような気がします、ありがとうございました。
>> 正確に動く なんじゃ?!
英語版より1〜2ヶ月遅れででてくるので、英語版に存在する初期不良が 直ってでてくる。BCB6 Sp1 は日本語出荷版に含まれているのだよ > 中村タン
561 :
デフォルトの名無しさん :02/10/17 13:49
アプリケーション外のキャレットの位置(例えばブラウザなどで掲示板に 書きこっんでいるときのキャレットの位置)を取得するにはどうしたら 良いのでしょうか?
Delphiでファイルを開くときにバイナリエディタで開いたように 表示するにはどうしたらいいですか?
∫,,,,,,,,,∧,,∧ ノビー
⊂,,,,,,,,,つ,,゚Д゚ミつ
FileStreamで読み出して、バイトごとにみて
16進数で書き出せばいいのかな?
>>562
>>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までの配列をもち、乱数で出た数字と次の乱数で
出た数字の位置の内容を入れ替える。
>>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 リストボックス−>ドロップダウンメニューです。すまそ。
努力を放棄している。 情報を開示していない。 答える人間のことを考えていない。
環境依存かな?
私の所では、RichEditデモのツールバーを
Customizable:=Trueにして試してみると
一度消してしまったツールボタンを二度と見る事が
出来なかったりして
VCL標準のコーディング一切無しでは
アプリ上使い物にはならないのですが…
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∧,,∧ VCLアプリのBugBrowserでも
__ミ,,゚Д゚彡,,,,,___. ∀ Toolbarカスタマイズは。
∩,,,,,,,,,,,,,,⊃⊃ | ┷┳━ 独自実装ですね
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| ┃
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ┻ ListBox部分がListViewだし
>>580 、何のこと?
>>577 簡単には出来ないと思います。
自分でComboBoxを貼り付けるようにしたら
どうにか出来るのですが。
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ってとこで常に手前を指定してるのが分かるだろ。
そこでコード保管して想像しろ。
>>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
>>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);
.。○(目インフォ無って書いてあった・・・) ∧,,∧ ミ,,, ,彡⊃``;⊃ ダメダメ デ ゴミンナサイ... ∩;,,,,,,,,,,,,,,,,,,,;⊃
フサギコ最近どうしたんだ?
∧,,∧フー ミ,,゚Д゚彡 ∫ と ,,ミつ━ ━┳━━┳━┓  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| 以前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
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でビジーループ書くなっつーの。
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 :次のイベント
ってなるって事でしょ。
他の方法だと 時間内に同じボタンを押すとややこしい事になる
>>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
あげ
追加
>>619 のコードで Time0r5SecEventのリターン先が 解放した TTimerオブジェクトなんで気持ちが悪い人は
リターン直前に Abortを投げるといいでしょう
>>627 色々方法はあります。検索 TEDIT + 右寄せで googleで検索するとよいでしょう
>>632 MEMOは一番簡単で
Win95でも使えて
Edit中も右寄せできるから
結構便利
Win95使ってるところもまだ結構あるし
TEDIT も TMEMOも どっちも同じコントロールなんだし
_____________ ∧,,∧ / Ctrl+EntやCtrl+J ミ,,゚Д゚彡 < でも改行は入力できたり ,;゙ ミ \ するですよ。 @ミ,,,UUミ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ あと、コピペしたらってのも 某のQAでは対応できてないです。
>> リターン先が 解放した TTimerオブジェクトなんで気持ちが悪い人は 非常に気持ち悪い。なぜエラーにならないのか教えてください。
ソース嫁
嫁にもらってもわかんねー
誰もわかんねぇー、みたいね。 テイドひくー >オレモナー
Free したオブジェクトのソースってどこにありますか?
お前らほんとに屑ばっかだな なんで検証しないの?
で、Delphi7ってどうよ?何か「7こんなに(・∀・)イイ!!機能あるぞ!」って のがあれば教えれ!
>>644 とりあえず.NETに対応したらしい。
つーか、知らんし要らんしDel6でいーじゃん。
解放するのは TTimerの Selfなので、返った先でSelfに触らない事が判っていれば問題ありません 直感的にTTimerでイベントを呼んだ後何か仕事があるようには思えないので、 普通は大丈夫だろうと
>>646 一般的に言って、自分が読んだイベントハンドラの中で自分を Free した場合
例えば
procedure TForm1.Button1Click(Sender: TObject);
begin
Button1.Free;
end;
エラーにならないのは同じ理由ですか?
なぜ、TForm には Release メソッドがあるのかな?
違いまふ
わけわかんね
土日はカキコのレベルが著しく低下するようだね
日本語も分からないようだね
D6Personal版を使用しながら勉強中です 同じ処理のTOOLを作ったときに、実行速度に云倍を差が出るのに驚き、 VBからDelphiへの乗換えを検討しています。 Delphi購入にあたって、ひとつ質問があります。 Delphi7日本語版はHELP(Documents)が(6と比較して)弱いと どっか(関連スレ)で見たんですけど、実際どうなのでしょうか。
>>653 翻訳が出荷に間に合わなかったみたいで、わずか数日後、
日本語訳されたヘルプがBorlandのHPで公開されました。
だから今は大丈夫ですよ。
確認してまいりました。ついでに中身も確認しました。 おっしゃる通りのようですね。 丁寧なご回答、ありがとうございます。
657 :
整数から桁の取り出し :02/10/20 06:10
整数から任意の桁を取り出したいのですがこうゆう関数は 用意されてるのでしょうか? 一応ヘルプで関数1つ1つ 見て回ったのですが見当たりませんでした。 代わりの方法としてRightStrを使ってコードを書いたん ですが体裁が悪いです。 ご存じの方がいらっしゃいましたら宜しくお願いいたします。
x桁目 = y / (10 の x-1 穣) mod 10 では?
小学生の気持ちで… 123 という かず から 10 の くらい を とりだすには どうしたら いいのだろう? 1 の くらい は いらない ので 10 でわると 12 がのこる。 あとは この かず の ひとけため を とりだせば いいんだ。 ひとけため は 10 で わった あまりが こたえだ! お粗末でした(汗
か、書いているうちに…先を越された…猛烈に恥ずかしいです(顔真っ赤)
662 :
657 整数から桁の・・ :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
無理。 New ← 273 <-ここ解析して整数273を取得するしかない。
さっそくダウソしてヘルプにそって テキストエディタを作ろうとしてるんだが、 ActionManagerってコンポーネントが見つからん。 [Additional]ページにあるらしいんだが無い。 超初心者でスマソ。
某よいい加減チュートリアル直してくれよ・・・
>>673 PersonalでコンパイルできるようにActionManagerつけるか
ActionManagerを使用しないチュートリアル作れって事じゃないかと。
チュートリアルという性格上、入門者が困るような構成は問題あると
思う。 Delphi1の頃はちゃんとしたチュートリアルのマニュアルすら
ついてたのに、バージョンアップするたびに入門者には辛い内容
になってきてるもんなぁ・・
M$の VC++ Standardみたいに、入門版には市販の入門書みたい
のを付属して売るとかすればいいかも
PersonalじゃActionManager使えないって事か?
>>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
>>677 フサギコさんありがとうございますm(__)m
>HTMLファイルを解析する方法
実はこの方法で取得するアプリを先日作ったのですが、
これをプロのプログラマさんに見せたところ、
「ディレクトリ数を数えるようにすれば重いHTMLソースを
ダウンロードする必要が無くなる」
と言われてしまったんです。 それでこちらでdelphiでの
詳しい作り方を伺ったわけなんですが・・(^^;A
このプロさんはC言語やperlなどを使ってるようなので
もしかしたら他の言語でしか出来ないことなのかも
知れません。 もしくはいい加減なことを言われて
しまったのか・・(真面目な方なのでまずないとは思いますが..)
ともかくdelphiでは無理と解っただけでも良かったです、
>>670 さん共々、本当にありがとうございました。m(_ _)m
言語の問題じゃなくってディレクトリリストを公開しているかどうかという WEBサイト側の問題なんだけどね。 で、件のサイトは公開していないからHTMLのリンクを辿るしかないって事。 いっそあるかないかはとりあえず取得してから判断するってのもありかも。
>>666 私は D5 しかしらないんでアレですけど,
HashList って当然イタレートはできるんですよね?
全然面倒くさくもないような気がする……
……気がするぐらい……うそ情報の可能性もアリ
>>677 サンクス
delphi扱ってるサイト探すか…
>>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がダウンロード出来るところを探しているのですが、誰か知りませんか?
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
(´-`)。o ○ (
>>1 に「『オナニードロドロ』禁止」も追加。なんで
それで「閃いた━━━━(゚∀゚)━━━━!!!!!!」って思っちゃうんだか?)
>>688 win9xシリーズでフォームが開かけないで落ちる現象としては、フレームとか
使ってた場合によくあります。
あと、オブジェクト数が無謀なほど多いとかでもありえるかも。
いづれにせよ、win9xシリーズは既にMSもサポートしてないんで諦めたら?って
のは無謀かな・・・。(でも、winMeもあるし、まだ現役なOSですよね・・・。)
>>709 Win98は来年サポートが切れる。
WinMEはまだ。
それまでの辛抱。
サポート切ったソフトは 自由に使えるみたいな法律出来ないかなあ
712 :
デフォルトの名無しさん :02/10/22 12:35
アプリケーションが非アクティブになったときに マウスカーソルを乗せてもヒントは表示されませんが 非アクティブ時でもヒントを表示させる方法は無いでしょうか? ヒントになるようなことだけでもいいので教えていただけないでしょうか。
>>712 FormMouseMove&HintWindow
Melander 氏はどこいっちゃったんだろうね プログラムやめちゃったのかな?
715 :
デフォルトの名無しさん :02/10/22 14:07
Delphi6でDirectXを使いたいのですが、どうすれば使えるでしょうか
>>715 ・DirectXSDKのヘッダーをDelphi用にコンバートしたユニットを使う
海外行けば、最新のヘッダーもそろえられる。
・DelphiXを使う
Delphi6で使うには工夫が必要。
日本語のサイトでは使えないという表記を見るが嘘(その人がへたれなだけ
・Quadruple Dを使う
>>716 それらの方法について調べてみました。
へたれの私には一番下の方法しか無理そうですね・・・。
レスありがとうございました
>>688 usesで参照しているユニットの初期化節(initialization)で例外が発生しているかも.
Runtime Error 216 のダイアログボックスが出たら多分そうです.
>>709 うちもフレームを多用するのですが
(今のプロジェクトでは数十種類以上のフレームを使っています)
一度もこういうエラーになったことがないのは
インスタンスの総数が少ないからでしょうか.
721 :
PopupMenuコンポ :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に持って行った時に
駄目でした。
723 :
721 PopupMenuコンポ :02/10/22 18:55
↑ 大切なことを書き忘れました(汗 これはタスクにアイコン化してる状態での話です。 delphiは 6 personal です、宜しくお願いします。(^^;
あれ、コテハンが被ってますね…まあ誰でも思いつくか(苦笑 それはさておき、PopupMenuですが、うちでは再現しないなーと思いつつ、前に同じような事があった気も… おぼろげな記憶で申し訳ありませんが、タスクトレイからPopupMenuを出す前に、 SetForegroundWindow(Application.Handle)を実行してみてください。
GUI周りでよく使う処理をカスタムアクションと してどんどん登録していくとめっちゃ便利そうじゃない? 誰かそういうのたくさん作った人うpしてよ。
>>722 本当だ!うちでも再現しました、
これってボーランドにバグ報告するべき?
727 :
デフォルトの名無しさん :02/10/22 20:21
RubyとVBの話は飽きた、関係ないんだよ折れには。
自爆?
あうあう
>>703 おお!
ミラーサイトが一つ残ってた━━━━(゚∀゚)━━━━!!!!!
Thx!
>>722 うちはD5なのですがそういう経験はないです.
コンボボックスは滅多に使わないので気が付かなかっただけかも知れませんが.
いま,コンボボックスを置いたフレームをフォームに5つ置いたプログラムを
XPでコンパイル,Win95で実行したのですが不具合は発生しませんでした.
#ただ,設計時にしばしばCPU使用率が100%になりますね.
一度プロジェクトを閉じるまで直らない.
732 :
デフォルトの名無しさん :02/10/22 22:31
Double型を文字列型にしたいのですが、 どうすればできますか?
実数型はFloatToStr、FloatToStrFで変換できるよ
でけた! ありがとうございました! チョビチョビわかってきたぁぁぁヒャオウ
>>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にて実行で再現しました某に密告してください
マジかよDelphiってテストしてあるのか?ポンコ2
>>737 ハァ?
バグが1つ見つかっただけでポンコツですか?
貴方の作るプログラムが如何にバグの無いプログラムか知りませんが、
貴方の使っているWindowsはポンコ1000ですか?
本当は95系のバグだたーりして ・・・って書くとM$厨に噛みつかれそう(w
気を悪くさせてしまったようですねゴメンなさいです 随分単純なバグのように見えたものでつい酷いこと書いてしまいました
>>739 通りすがりな者で、実はdelphiは持っていませんが、VCでもVBでも
そのようなバグが無いことを考えると、95系のバグではないと思いますが
そもそも、以前からのdelphiのバグなのですか?
だとすれば、やはり・・・、いえ言いません(^^;;
>>736 もう日本の某にはバグをバグだと判断し、英語に直しアメリカ本社に伝えるような
部署はないんじゃないの?
オレもいろいろバグ見つけた。
ん?そーいや、バグの報告とかって出来るの? 何処にメールすりゃいいのさ、態々電話したりするの面倒だな。
サポートでもnews groupでもMLでも何でもいいんじゃないの。
そーいや、news groupがあったね忘れてた・・・。 ここは見てないのかな?
そういえば昔間違いであることを認めたのに 匿名サイト(2chのことね)からの指摘であることを理由に 修正を拒否したアフォ会社あったよ。 もちろん某ではないよ。
749 :
721 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を使ってます 切替のタイミングを外したのでずっとそのままです
751 :
721 PopupMenuコンポ :02/10/23 03:53
(
>>749 に追加)
SetForegroundWindowの問題の解決法が載ってる
ページを見つけたので貼っておきます。
techtips.belution.com/ja/vc/0012/
言語はdelphiでなくSDKとMFCで書いてあります。(^^;
752 :
721 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;
755 :
721 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 激しく尿意
今時は、言語として C/C++,C#,Java程度は理解してないと仕事にならん
OSも、Windowsの他にもFreeBSDやLinux,Sunの知識は最低限あってほしいし、
IIS/Apache,SendMail/Postfixについても最低限知ってないと苦労するね
DBならMS-SQLserver/Oracle/MySQL/PostgreSQLは必須
うちじゃ、中途採用者はこの条件をクリアしてないと受け入れません。
eximも必要だろうとかおもふ
>>759 いや、VBとCOBOL知っていれば何とかなります。
関係ない話ばかり
なんでこの記事読んで、 「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段が最低ラインじゃないかな
THintWindowに画像を表示させたいんですがやっぱり無理ですか?
777 :
デフォルトの名無しさん :02/10/27 13:13
>>776 それ面白そうだね。
動的にTImage生成してくっつけてみたら?
テストコード 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
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前に設定
引数のMemStrmでエラーになったらTStreamでキャストしてくれ。
開放したほうがよろし?
>>788 >Http1.Request.ProxyServer
>Http1.Request.ProxyPort
ちなみにIndy9の場合は
Http1.ProxyParams.ProxyServer
Http1.ProxyParams.ProxyPort
キャッシュ無しにすることって出来る?
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'); //常に最新データを取得
797 :
788=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
仮想フォルダを作りたいんですが、どうしたらいいんでしょう? 色々調べて、シェルネームスペースエクステンションなどという技術を 使えば出来るのではないかという結論に達したのですが、結局実際に どうソースを書けばいいのかサッパリです。 どなたかご存知でしたら教えてください。
>>798 「仮想フォルダ」ってなんやねん?と思ってググってみたら、1000円の
シェアウェアがヒットしたが、それのことけ?
たぶんコントロールパネルとかのことかと。
標準入力に入力を戻す方法は、API使うやり方以外に何かないかな? ungetcみたいな関数もないし、全然見当がつかないよ。
コンボボックスで選んだ対象のリストボックスにアイテム追加するのに以下のようなコード書いた。 ヘルプには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 >標準入力に入力を戻す方法
入力を戻すって、? エコーバックのこと?
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
最近の某はバグ多いが
基本的に初心者は他人を疑う前に自分を疑いましょう
これぐらいのソースならもう一度一から作成するのも手
>>809 809さんの環境ではちゃんと動くんですか、確認ありがとう
ございます〜!
ううむ、一体原因はなんだろう、もちろん書き込む前に簡単な
アプリを作って確認したんですが結果は同じでした。
何か私に手落ちがあるのかなぁ・・・
コンパイルの設定もデフォルトのままだし・・
DELPHIパソナルもSP2にしてあるんですが・・
811 :
デフォルトの名無しさん :02/10/29 17:25
IndyでHTMLソスGETするときに読み出し開始位置の設定出来るけど 読み込み終了位置の設定は出来ないでしょうか。 ContentLength-1000バイトまで読み込むとか。
2ちゃんのどっかで「C++なんてDelphiとあんま変わらん」って書いてあったけど 確かにちょっと似てるね 初めてみたけど半分くらい意味がわかる
えらい人には(委員長には)それがわからんのですよ。
>>808 アイコンの色数が問題なだけだったりして。
16色より多いものはつぶされるけど、そこんところはどうなんでしょう?
>>811 終了位置の設定はIdHTTP.Request.ContentRangeEnd // IdHTTP: TIdHTTP;
ただし先頭からの位置なので、後ろからの位置を設定したいなら
IdHTTP.Head(URL);
Len := IdHTTP.Response.ContentLength;
とかで対象のContentLengthを取得してからじゃないと無理かも。
あんまり詳しく知らない。
816 :
808 (解決) :02/10/29 18:51
>>814 ありがとうございます!
早速DELPHI付属のイメージエディタで16色のアイコンを作って
試してみたところ正常に動作しました! 念のため同じエディタで
32色のアイコンを作って試してみたところこれでも動作しました。
私が使ってたアイコンはPIXAで作った32×32の画像を.ico形式で
保存したモノだったんですが、どうやらこのアイコンが原因だった
みたいです。 →タスクトレイにアイコン化したときだけ使えない。
>>809 さんのおっしゃる通り私に落ち度があったようです、
お騒がせしてすみません〜
>>815 どうやら「後ろから何文字まで」と指定してリクエストすることは
出来ないようですね。 これが出来ればダウンロードする時間の
短縮になるんですが。(^^; HTTP1.2から導入してくれないかな。
仕方ないのでcopy関数とContentLengthを使って後ろをカットして
使うことにします、どうもありがとうございました。
コンポーネントの追加について教えて頂きたいのですが。 まず、ABそれぞれのコンポーネントがあったとして、最初にAのコンポをインストールします。 次にBのコンポをインストールすると、Aのコンポがメニューから消えてしまうのです。 パッケージファイルの保存場所が悪いのでしょうか? 追加していく形でコンポをインストールできないものでしょうか? どうすればいいのか、どなたかご教授ください。
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 になったのですが、
実体がないから参照のしようがないという意味だったんですね。
ありがとうございます、オブジェクト指向ってわかってくると面白いですね。
あ、実体がない・・・じゃない、中身がないんですね。ちょっと混乱してました(汗
X30って発売後、ヨドバシでその場で買えますか?予約必要?
>>818 あー。あるある。オレも不思議に思ってた。
embeddedwbコンポーネントで、それなる。
なんでだろう?
なったこと無いなぁ EmbededWB でもならない
>>818 同梱されてusesされてるファイルの名前がインストール済みのコンポーネントのと
同じだったりとかは?
同じ名前のファイルが有ると上手くいかなかった気がする。
>まず、ABそれぞれのコンポーネントがあったとして、最初にAのコンポをインストールします。 >次にBのコンポをインストールすると、Aのコンポがメニューから消えてしまうのです。 パッケージを追加するごとに、追加および削除されるコンポーネント名が 表示されるはずだけど、そこに出てくる名前は、意図している物かな?
>>828 それはないです。どんなコンポでも
>>818 のような症状が出るんです。
>>829 はい。
Aをインストールしたら「Aがインストールされました」
その後Bをインストールすると「Aが削除されました」「Bをインストールしました」
とダイアログが出ます。
毎回新規パッケージを作って登録してるとか?
Delphi は糞!
834 :
デフォルトの名無しさん :02/10/31 01:29
StringReplaceって処理遅い?
メチャ重いよ。特に長い文字列でより長い文字列に何度も置き換える場合が。
836 :
デフォルトの名無しさん :02/10/31 02:28
>>836 TogetherCCをJBuilderに統合するつもりかな?
談話室に書いたつもりだったんだが、相談室だった。 それに、JBuilder の方に書いたほうが良かったかな。
>>831 一回一回パッケージファイルの保存場所を聞かれて、そのたび別の所に保存しているのですが…
なにか間違っているのでしょうか?
840 :
デフォルトの名無しさん :02/10/31 08:02
>Aをインストールしたら「Aがインストールされました」 >その後Bをインストールすると「Aが削除されました」「Bをインストールしました」 >とダイアログが出ます。 「Aが削除されました」って出ているんだからそのとおりのことが起きたんだな。 コンポーネントAを含むパッケージとコンポーネントBを含むパッケージの名前が 同じと見た。 一つのパッケージに複数のコンポーネントを収めることができるのだよ。 逆に一つの環境には同一の名前のパッケージは一つしかインストールできない。 コンポーネントではなくパッケージの名前を再確認してみて。 なんだったらパッケージの名前(なんとか.dpk または .bpl)を教えて。
>>841 dpkの拡張子のファイルは、すべてPackage1.dpkという名前でした。
bplは見つかりませんでした。
>>842 ひとつひとつ追加していくと追加していった順にコンポが消えていってしまうんです…。
>>841 やっぱり同じ 名前の DPK だったんだね。
ファイル名を替えてパッケージ名もそれにあわせて変えていったらいいと思うよ
Delphiで開いて保存する時に名前を変えたら自動的にパッケージ名も変わる
あるいは、そのファイルは、テキストエディタで編集出来るしね。
>>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プログラミングバイブルは、素人にはおすすめできない。
>>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); 宿題だろうから、この程度で止めとく。
>>860 それをヒントになんとかやってみます。
>>861 はい、文字です。
使ってみます。ありがとうございました。
863 :
デフォルトの名無しさん :02/11/01 18:19
>>852 本から入ろうとする奴はたいていものにならない。
やる気があったら本なんて必要ないもん。
本なんて壁にぶちあたったときに調べればいい。
とにかくWebでも参考にしながら、がむしゃらに何か
作ってみる。これが最短コース。
月曜までにDelphiを極めないといけないらしいので、 私の場合は本で覚えています。Webサイトは持ち歩けないからな!
そうか? 俺はいつも持ち歩いてるぞ。
みなさんサンクス
869 :
デフォルトの名無しさん :02/11/01 23:00
Bitmapの描画を行うコンポーネントがあるのですが、これをFormに配置してその中で ガンガン描画させると当然のようにちらつきました(連続して描画する必要があるんです)。 そこで、バッファ(裏画面?)を用意して描画しようと思ったのですが・・・。 幸い、このコンポーネントにはCanvasを指定して自分の中身を転送するというメソッドがあったのですが、 隠れて1回描画を行うごとに→Form上のCanvasに転送する、を繰り返せばいいのでしょうか?
座右の銘を間違って使ってるような。 座右の書?
>>869 パネルの上にそのコンポを置いて、パネルのDoubleBuffer:=True;ではダメ?
>>871 そ、そんな便利なモノがっ・・・。(゚Д゚)
パネルを透明にしてその上に乗せるだけで良いのでしょうか・・・試してみます。
また一人アルゴリズムを知らない奴が増えたっと。
>>868 Delphi 久しぶりだ。
謎の全知師は健在なんだね。懐かすい。
NiftyForumでボコボコにされて追い出された伊藤は元気かな。
いまいち構造体とかクラスとかオブジェクトの使い道が分からないです。 どういうとき使用すれば効率よくなるかが検討つきません。 delphiを覚えるために簡単なリネームソフトとか作製してみたのですが 今の処理の流れは 1.フォルダ内のファイルパスをTStringListにいれてソート 2.ユーザが設定した新しいファイル名を取得 3.新しいファイル名に置換え です。 リネームソフトなどでは、どういう処理時に使用したらいいのでしょうか?
継承も再利用性も必要ない部分にはクラスは必要ない。 データをまとめて管理する必要が無いところに構造体の出番は無い。 まず、動くコードを書けるようにすること。 次第に効率よくかけるようになるよ。 最初から、うまい人と同じにかけると思っちゃいけない。
何回も更新してやっとレスがついた。うれしい^
>>876 ははぁリネームソフトには使うべきところが無いということですね
では、このまま進んでいきます
勉強用にいろんな物どんどん作って行きたいのだけど、なかなか作りたくなる
目標になるソフトって見つからないものですね
リネームソフトをとことん効率よいコードにしていきます
ところでmp3プレイヤーとかは構造体必要ないですか?必要なさげですね
中学生かな?高校生かな? リネームソフト。といっても、Delphi RTL/VCL の中では構造体もクラスも 腐るほど使われているわけで。 再利用性を前提としたクラスの継承への考慮と、関連データの集中管理を目的と した構造体の利用がおこなわれている。 だから、おまえさんのアプリケーションがクラスも構造体も使っていない。と思っちゃいけないわけだ。 ってことで、元質問は、自分でクラス/構造体を定義するべきですか?って質問なんだろうけど、 答えは「そんなの自分で決めろ」なんだな。 mp3 の物理ファイル名と楽曲名を同時に管理しようと考えたときに、何かひらめくかもね。
男子高校生です 嘘ですすまない >>答えは「そんなの自分で決めろ」なんだな。 そうですその通りです 後で読み返すと私もそう思います ただ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 自動でやるのは無理。
オブジェクトや文字列は単純には比較できないし
メンバ以外のゴミが入ってることもあるし
表現が違うけど意味的に同じこともありうるし。
なので自前でメソッド書いて全部比較。
メンバにクラスや構造体があれば再帰的にそれも比較。
890 :
デフォルトの名無しさん :02/11/04 02:15
DelphiスレでVC++用語使うなよ。
>>889 に同じく。宣言部の = record 〜 → = class に変更して
Equal メソッドを付けて、20メンバ分ゴリゴリ比較。
ていうか。Assiginや Equal を実装すると、いつも単純作業に辟易する
(そしてメンバを追加したときよく忘れる)んだが
お前ら、解決方法があるなら教えて下さい。タノム
クラスの内部情報からメンバを取得できるらしい事を聞いた事が
あるんだが、あるいはその方法で楽ができる、のか?
>>891 published propertyを列挙して個々の型情報を取得できるから
比較・代入の自動化は可能だとは思うけど
オブジェクトを保持するプロパティをdeep・shallowのどちらで
扱うべきかという判断が毎回必要なので汎用化は難しいのでは。
どこまで同じなら同値と見なすかはそのクラス次第だしね。
Recordにメソッドが欲しい 季節ですね。  ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ∧,,∧ ミ,, ゚Д゚彡 〃つ旦O 〜ミ,,[ ̄ ̄ ̄.]  ̄ ̄ ̄
もしかして、 Delphi7でobjectはなくなったの? まじかよ・・・
なんだ、フサギコが変なこというから勘違いしたじゃねーか
D8.NET対応で・・・ いや、俺もよく知らんし・・・  ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ∧,,∧ ミ;゚Д゚彡 〃つ旦O 〜ミ,,[ ̄ ̄ ̄.]  ̄ ̄ ̄
Delphiと関係ないのでsageで。 大抵のアプリのメインメニューやポップアップメニューのキャプションには、 「...」が後ろにくっついてるやつが混じってるけど、これって何の意味? なんとなく、ダイアログが表示されるやつかな?とか思うんだけど、 デスクトップでの右クリックのプロパティにはついてないし・・・。 むかーし、どっかでその話を読んだ記憶があるんだけどまったく思い出せず、 小一時間調べたけど全くわかりませんでした.誰か教えてください・・・. ソースもあるとトテモ嬉しいです.
>>899 一度でその機能に到達しない場合は..じゃなかったけ?
例えば「印刷」なら即印刷が始まって、「印刷...」なら何か
プロパティ画面が出てきてから印刷とか…
漏れはそう解釈してるけど。
確かそうだったと思う
>900, 901 なるほど、サンクス! しかし、手元のフリーソフトとかみると全部ちゃんとついてる。 これってもしかして知ってないと恥ずかしいようなこと? うちの会社の同僚2人は気づきもしなかったと言っていた・・・鬱 でも、バージョン情報についてる奴とついてない奴とあるあたり、 微妙に解釈が間違ってるのもあるなあ・・・。
>>899 モーダルダイアログ出るやつじゃなかったっけ?
>903 M$製のアプリは全部バージョン情報にはついてないから違うっぽい
905 :
デフォルトの名無しさん :02/11/06 09:04
*.zip内部のファイル名を列挙して特定のファイルのみを ストリームとしてメモリ上に読み出すことはできますか? WindowsXPだと*.zip;*.cabを仮想フォルダのように扱ってますが こっちの方法は可能ですか?
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スレに
そんなに減らせって言うなら統一スレ立てろよ。 過去ログへのリンクもちゃんと書けな。
Indyを使いGETメソッドでHTMLソースを取得するアプリを作ったのですが 何故か取得先のページが存在しないにも関わらずEIdHTTPProtocolExceptionの 例外が発生しません。 この原因が解る方いらっしゃらないでしょうか.. <詳細> ・ 簡単なアプリを作って試してみるとちゃんと例外が発生します。 ・ 本命のアプリはデバック時でも例外が出ません。 ・ IdHTTP1がデフォルトの状態でも例外は出ません。 ・ EIdHTTPProtocolException発生時の例外処理は書いてありますが まったく実行されません。(例外が発生しないので) ・ 取得先のページが無いことは確認済みです、URLも再確認しました。 簡単なアプリにも同じURLを使いましたが例外は出ました。 ・ 簡単なアプリと本命アプリには同じIdHTTP.PASを使いました。 ・ 環境 : DELPHI 6 PERSONAL SP2 & Indy9 もし原因に心当たりがあるという方はよろしければお聞かせ下さい(^^; 例外が出ないようにするプロパティでもあるのでしょうか..(汗
924 :
デフォルトの名無しさん :02/11/07 11:19
TTreeViewでAutoExpandをTrueにしているとき OnMouseDownで展開縮小するのではなく OnMouseUpで展開縮小するようにしたいのですが どうすれば良いのでしょうか?
925 :
デフォルトの名無しさん :02/11/07 11:26
くだらない言い争いしてなんか得るもんありますか? 長い歴史の末に3つのスレで落ち着いてるんだからこの状態が 最善に近いと考えて良いのではないでしょうか。 (100%(・∀・)イイ!とは言いませんが)
>>925 そして今3つもスレがあるのは多すぎるという意見がでた。
つまり最善ではないということだ。
この状態は落ち着いているとはいえない。
さらに良くなるきっかけである。
立てなくてももうすぐこのスレ終わるから 次スレのタイトルに「統一」とか入れたらいいんじゃないの? 「モナーとかフサギコは使わないで」と書くとかこのスレに誘導するとか。
>>926 さらに良くしてくれるのは大歓迎です。 しかしその話題で
このスレを占領状態にされると困りますので新スレを立てて
そこで話し合ったらいかがでしょう。 他の2スレの方々
の目にも止まりますしここを汚さなくて済みますし。
>>922 とりあえず、Indy はソースがあるんだから、デバッガで追っかけてみたら?
例外が出るソースを使って、期待する例外を送出している場所を特定し、
そこにブレークポイントを貼って、ターゲットアプリを実行。
>>931 ありがとうございます、時間をかけてじっくりと試してみようと
思います。
∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( ´Д` )< Delphiの質問はここで! /, / \___________ (ぃ9 |ヽ(`Д´)ノ< 質問待ってるよウワァン / ∧_二二つ
ギコでもモナーでもいいぞ。 どうせ回答する人は全部見て回っているからな。 スレッド内は一次元の構造だから、正直、複数スレがあるほうがコメントしやすいし 読みやすいと思うぞ
>>912 後者については
文字列変数に直接丸ごと読み込むと速くなります.
目的のデータが何行目にあるかを知りたい場合は
自分で解析しなければなりませんが,
それでも文字列リストに読み込むよりかなり速いです.
(自宅と職場のPCでしか試していませんが.
この方法は昔,パソコン通信のログビューワーを作ったときに使いました)
最大30MB程度ということなので
かなりメモリが多くないと一度にすべてを読み込めないかもしれません.
一気読みがだめなら部分的に読み込みながら検索することになると思います.
936 :
デフォルトの名無しさん :02/11/07 17:29
delphiのTQueryコンポーネントを使って パラドックスのテーブルのバイナリ型のフィールドにバイナリデータを書き込むにはどうしたら良いでしょうか? 宜しくおながいします。 delphi6を使っています。
937 :
デフォルトの名無しさん :02/11/07 17:38
>>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使え
>>944 Delphiにはファイルについていくつかの扱い方があるから困るんだよね。
途中から読む方法は
TStreamならPositionプロパティ
system.入出力ルーチン なら Seek/FilePos
APIならSetFilePointer
>>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
>954 いろんなところに貼り付けているようだが 意図は何だ?
・宣伝のため ・荒らさせるため ・Delphiを陥れるため
957 :
デフォルトの名無しさん :02/11/09 03:15
日本語版のDelphi7パッチってまだ出ないの?
おそらく怨恨
960 :
デフォルトの名無しさん :02/11/09 10:08
Delphiってフリーなのでしゅか? どこへ行けば手に入るのでしょうか? ソフマップでやたら高い金額がついていたのはどうしてなのでせうか? いい本があったらいただきたいのですが?
912っす。 メモリマップファイルとTFileStream、両方試してみたら 後者が速かった。 みんな、ありがとね。
>>960 プログラミングのソフトはそんなもん。
安いのはダンピングしているM$の学割だけ。
964 :
デフォルトの名無しさん :02/11/11 00:41
タイトルバー非表示ってどうやればできますか?
>>964 CreateParams メソッドでスタイルを変更する。
>>965 時に、964はネタなのだろうか(藁
ネタなら、そのレスが一番だけど。
967 :
デフォルトの名無しさん :02/11/11 01:01
ネタじゃないっす
ネタじゃないコース→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ヘルプ嫁
ネタじゃないコース→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ヘルプ嫁
一応、まじめに答えたつもりなんだけど・・・。
>>970 procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.Style := WS_POPUP or WS_THICKFRAME;
end;
これやるとウィンドウが左上に固定したりして動かせない…
>971 WM_MOVEを自前処理はキホソ。
うっ… 出ちゃいました…。
こんなにたくさん
978 :
デフォルトの名無しさん :02/11/12 03:49
D7にて ListViewからドラッグを行う場合に、スタイルがvsReportだと ドラッグ中に該当する1行が丸ごとドラッグされるアイコンの横に 表示されてしまいますが、ドラッグ中は先頭の1項目目だけを 表示させる方法が解りません、良い方法があれば教えて下さいませ。 (エクスプローラでフォルダを一覧表示させてドラッグした場合には ファイル名だけがドラッグ中に表示されているのと同じイメージ)
OLE DD
フォームのBorderStyleをbsDialogにする以外で、左上のアイコンを 表示しないようにする方法ってあるんでしょうか? サイズ変更可能で、左上にアイコンは表示せず、でも右のXボタンは 表示したいんですけど、CreateParamsをオーバーライドしていろいろいじくっても うまくいかないんです.
981 :
デフォルトの名無しさん :02/11/12 23:40
次すれ(屮゚Д゚)屮 カモーン
982 :
デフォルトの名無しさん :02/11/12 23:41
記念パピコV(^o^)V
記念熊ん子V(^o^)V
>>980 >フォームのBorderStyleをbsDialogにする以外で
↑これの理由次第だと思うのだが。
なんでそれじゃダメなのか。
988 :
デフォルトの名無しさん :02/11/13 09:20
>>987 Tips とは移り変わるもの。過去ログに縛られないよう。
あなめあなめ
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | 閑散としてきたな。 \___ _____________ |/ ∧ ∧ ∧,,∧ (,,゚Д゚) .目.ミ゚Д゚ ミ (| |) || (ミ ミ) 〜| | || ミ ミ〜 ∪ ∪ .|| ∪ ∪ /| / ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | そろそろ埋めなかなわん。 \__________________
991
992
993
994
995
そろそろ誰かこないか?
まだこないみたいだな
どうよ、埋めないの?
999
1000ゲト
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。