1 :
デフォルトの名無しさん :
2006/01/27(金) 22:55:50
2 :
デフォルトの名無しさん :2006/01/27(金) 22:56:21
3 :
デフォルトの名無しさん :2006/01/27(金) 22:57:14
4 :
デフォルトの名無しさん :2006/01/27(金) 23:00:04
Delphiの文法って、Perlなんかでいうヒアドキュメントって使えますか? '' + #13#10って入力しまくるの疲れる・・・
ない
だいたいソースにリテラルでながぁーい文字列打ち込むのは変だろ。 リソース使うとか resourcestring 使うとか。
そうなところにスクリプト言語とコンパイル言語の差みたいなもんがあるよね。
やっぱり無いですね。
HTML形式で出力するプログラムを書いてますが、
既存のHTMLソースから貼り付けてそのまま使えたらと思ったのですが・・
>>8 アドバイスありがとうございます。
リソース使うのがやはり作法ですかね
Delphi 6 PersonalでTheme Managerをインストールする方法を教えてください。
12 :
デフォルトの名無しさん :2006/01/29(日) 01:57:33
あと今鍵取得するときにいる登録をしてもなかなか鍵が送られてこなかったりする
ごめん書く場所みすった
14 :
デフォルトの名無しさん :2006/01/29(日) 17:08:20
質問です。Delphi7pro WinXpです。 ValueListEditor で IDE のオブジェクトインスペクタにあるような キーの階層化(左側に + や - を表示)というのは出来るものなの でしょうか。ご存知の方がいましたらお願いします。
どこかでfor文のカウンタに使った変数はfor文を抜けた後、中身が保証されなくなる みたいな事を聞いたんですけど、例えばStringListの中に文字列'hoge'が何行目にあるか調べる処理で、 for Line := 0 to StrtingList.Count-1 do begin if StrtingList.Strings[Line] = 'hoge' then Break; end; ShowMessage(IntToStr(Line) + '行目にあるよ'); と書くのは間違いですか?
>>14 昔できなくてあきらめた記憶がある。
>>15 hogeが見つからなかった場合に誤った行番号が表示される。
>>15 Delphi 6 のヘルプの「for 文」には
> for 文の終了後,カウンタの値は未定義になります。
と書いてあるね。
だからそこは、while とか repeat~until を使うところなんじゃない?例えば
Line := 0;
while Line < StrtingList.Count do begin
if StrtingList.Strings[Line] = 'hoge' then Break;
Inc(Line);
end;
if Line < StrtingList.Count then
ShowMessage(IntToStr(Line + 1) + '行目にあるよ') // 行数は1から始まる
else
ShowMessage('どこにもなかたーよ(´・ω・`)');
とか。
18 :
デフォルトの名無しさん :2006/01/29(日) 18:33:56
BDS2006のヘルプではこうなってるから問題なさそう。 >for 文の終了後(Break または Exit によって強制終了したのではない場合), >counter の値は未定義になります。
>BDS2006のヘルプではこうなってるから問題なさそう。 間違えた、breakしたときは問題なさそうだった。。。
どうしてもfor文で作りたいんなら変数の中にでもいれとけ
21 :
デフォルトの名無しさん :2006/01/29(日) 19:42:50
配列を返す関数を作成したいのですけど、 どのようにすればいいでしょうか?
type ThogeArray: array of Integer function GetHogeArray: ThogeArray objectPascalは型に厳しいから function GetHogeArray: array of Integerなんてやるとエラーになる 自分で予め型を定義しておくこと
それかポインタしてキャストしてやりとりするか。 これはおすすめしないが。
24 :
デフォルトの名無しさん :2006/01/29(日) 19:56:04
>>21 普通にvarなりoutな引数じゃだめなの?。
26 :
21 :2006/01/29(日) 20:00:12
>>22 できました。
ありがとうございました。
>>25 戻り値として取得できる方が関数らしいので
そうしたかったのです。
exeファイルから、どのようなコンポーネントが使用されているか 調べるツールない?
28 :
15 :2006/01/29(日) 20:46:47
答えてくれた人ありがとう 全部書き直しか・・・ショボン
Delphi 6 PersonalでTheme Managerをインストールする方法を教えてください。
>>29 エラーが出るDB関係の部分をひたすらコメントアウトしていけばOK。
>>28 全部ってこともないでしょ
処理を抜ける際にループカウンタを別の変数へ代入しておけば大丈夫
32 :
デフォルトの名無しさん :2006/01/30(月) 02:35:54
ShellTreeView1.Path := 'C:\Windows' とやっても指定したパスが選択状態にならないんですが どうすればいいんでしょうか?
dosプロンプトを使用せずにpingのtimeを取得するにはどうやればできるのか教えて下さい
ICMP echoを自前で撃つ
>>32 D6ならバグってるのでShellCtrlsの修正が必要
TTimerで1秒ずつ処理をさせているのですが、 新しいフォームをShowなどで表示してから閉じると TTimerの挙動がおかしくなります(時々0.5秒間隔になったりする)。 なぜこんなことが起こるのでしょうか?
タイマーは優先度が低い、要は精度が凄く悪いんだよ 何か処理要求があると、それだけでズレが生じる 確かMMSystemのtimeSetEventが精度的に多少良かったはず
そうですか・・ではそのtimeSetEventとやらを使ってみます。 ありがとうございました。
間にApplication.ProcessMessageを挟めば直るかも (Application.ProcessMessageのご利用は自己責任で)
精度が悪いのはそういう仕様だからで、直りはしないと思うよ
溜まったメッセージが処理されるからイケると思ったけどやっぱりダメか
>>36 timeSetEventは別スレッドだから排他制御しないとバグるぞ。
VCL触るとなると結構面倒。
TTimerのインターバルを10ms位にして(実際は55ms位で呼ばれる)
イベントハンドラ内で1秒経過したかどうかを判定するコード書いたほうが楽だ。
TMMTimer、TZTimerといったコンポーネントを使うと楽
StringReplaceにWideString突っ込んでも大丈夫なんですか? var S: WideString; begin S:= 'あばDelphiばば'; S:= StringReplace(S, 'Del', 'HOGE', [rfReplaceAll]); end; これで普通に'あばHOGEphiばば'がSに入るので一見大丈夫に見えるのですが…
45 :
デフォルトの名無しさん :2006/01/30(月) 11:06:17
BorlandDeveropar2006に入っているDelphiはDelphi7とDeiphi8なのかな? でもそれだったら2005と同じなんだけど。 Win32APIに対応したDelphiだけ欲しいんだけど、Dephi7ProとDeve~2006Proの値段が1万円ちょっとしか変わらないから、どっち買うか迷っている。
>>44 StringReplaceに突っ込んだ時点で文字コードがSJISにされるから
SJISにない文字は化けるよりしゃこヲタ
なるほど、Delphiの中の人が出来る範囲で良きに計らってたのですか どうもありがとうございました
てか、StringReplace の第一パラメータは string なんだから、代入するとき たんに自動で変換されただけ、なんだが
>>37-38 TApplication.OnIdleを使うという手もあるね。
50 :
デフォルトの名無しさん :2006/01/30(月) 18:46:31
TComponent直径のコンポーネントを作っているのですが、 Target: TWinControlなプロパティで他のコントロールを指定して このTargetにMouseOverが発生を検出したい(できれば座標も)のですが どうやればいいでしょうか? できればTargetのイベントハンドラ等はいじらずに済ませたいです。
>>50 Windowをサブクラス化してメッセージを横取りとか。
質問です。何と呼べばよいのかわからないのですが、ListViewをベースにTree表示もできるコントロール のソース付きフリーコンポーネントってないでしょうか? ExpressQuantumTreeListほどの機能は必要ないのですが・・・。
Virtual Treeviewは?
54 :
52 :2006/01/30(月) 21:47:35
>>53 ありがとうございます。まさに求めていたものでした。
このコンポはDelphiのIDEにも使われているのですね。
ライセンスもMPLが選べるので、個人的には問題なしですが、
IDEはライセンスどうしているのかな。。。
リストに100行ほどデータがあるとして、 1~10行を1.txtに保存、11~20行を2.txtに保存・・・ としたいのですが、何か効率の良い方法はないでしょうか?
100行程度なら効率はまったく問題にならないので 開発効率を優先してください。 あなたが真っ先に思いついた方法でOKです。
いえ、実際は2000万行ほどあるので、困っています。
今やっている方法は、最初の6万行を別のリストに移動し、移動された リストをファイルに保存して・・・といったことを元のリストが空に なるまで繰り返していますが、ものすごく時間がかかってしまいます。
リストを移動させずにやるだけでだいぶ早くならないか?
200万個ファイル作るだけで相当な時間かかるだろうから それ以外の処理なんかよほどアホなことしない限りどうでもいいだろ 言い換えればどうしようもない
>>60 ありがとうございました。
リスト項目を削除しなければかなり(約110倍)速くなりました!!
63 :
質問 :2006/01/31(火) 19:11:47
EInvalidPointerクラスの例外が発生しました。 無効なポインタ操作… といったエラーが発生したのですが、これはどういった時に発生するエラーなのでしょうか?
無効なポインタ操作をした時に発生します。
微妙にスレ違いかもしれませんが、DelWiki避難所ってファイルの添付はできないのでしょうか? 画像が張れないのはかなり厳しいと思うのですが・・・。
階層化できないのも辛いな
PageControlを置く。 PageControl1にTabSheetを3個新規作成する。 procedure TForm1.FormCreate(Sender: TObject); var i: integer; TS: TTabSheet; begin TS := TTabSheet.Create(Self); try for i := 1 to 3 do begin TS := TTabSheet(FindComponent('TabSheet'+IntToStr(i))); TS.Caption := 'Page'+IntToStr(i); end; finally TS.Free; end; end; なんでTabSheet3が消えてるの?あまり俺を怒らせるなよ?
>TS := TTabSheet.Create(Self); これ何の意味があるの?
あと消えてるのはTabSheet3解放してるからに決まってるジャン
>>27 XN Resource Editor で使用しているUnitを調べる
Delphi 2006+WinXPです TListViewをおいて、適当にアイテムを追加します。 つぎにOnCustomDrawItemイベントに以下を割り当てます。 procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); begin ShowMessage(IntToStr(Word(State))); //ブレークポイント end; デバッガで起動してブレークポイントのところでStateの値をみてみると [(out of bound) 9] ってなってます。 TCustomDrawStateの宣言は TCustomDrawState = set of (cdsSelected, cdsGrayed, cdsDisabled, cdsChecked, cdsFocused, cdsDefault, cdsHot, cdsMarked, cdsIndeterminate) 他の有効な要素が含まれる場合もありますが、そのときでも「9」が入っていました。 どういうことか分かるかたいますか?
(On)CustomDrawItemに渡されるTCustomDrawStateの値は NMCUSTOMDRAW.uItemStateからキャストされた値だからじゃないの? NMCUSTOMDRAW.uItemStateはXPで拡張されたのにTCustomDrawStateが そのままだから……
それでは XP に対応してるとは言い難いな。
>>74 なるほど。
QCに登録しておいた方がいいかな?
数値を123,456,789のように表示するのに Format('%.0n',[n*1.0]) 以外の書き方ありますか?
FormatFloat
FormatFloat(',0', n);
Win32のみやるとして、Delphi7とDelphi2006、買うとしたらどっちですか?
どっちもVistaでは動かなくなっちゃうからC#にしといたほうがいいよ。
82 :
デフォルトの名無しさん :2006/02/01(水) 20:13:14
文字列を文字数分の * (アスタリスク)に変換したいのですが、 どうすればスマートかつエレガントでしょうか? Delphi7です。
StringOfChar('*', Length(s))
84 :
デフォルトの名無しさん :2006/02/01(水) 20:29:04
>>83 う、こんな関数あったんでつか…
Format とか、ずっとヘルプで調べてたのに…
どもありがとうござましたです。
ms := TMemoryStream.Create; ms.WriteComponent(Form1); してこれをdfmのようなテキストファイルに落とすのってどうやってるんですか?
>85 ObjectTextToBinary() ObjectBinaryToText() あたりを調べてみては
>>80 そりゃ2006でしょ。ただ、開発機がかなりのくロースペックだったら7の方がサクサク動いていいかもしれないが。
ハイスペックだと7のほうが遅くなるのか?
なんでそういう解釈になるのか謎なんだが
何で専用スレでやらないのかと
>>87 D6のIDEに慣れてるのと、2006のIDEはバグだらけって話聞いて迷ってたんですが、
そうでもないんですか?
D6よりよっぽどIDEは安定してると思うけど。
そーなの? D6を4年つかって不安定と思ったことは一度もない。 どこがBDS2006より不安定だと?具体的に。
D6,7は起動時、フォームデザイン時、終了時にvclxx.bplかrtlxx.bplで落ちることが時々あったな。
4年間、ほぼ毎日起動していちどもない。BDS は起動時、フォームデザイン時、終了時には安定してる?
2006は安定してるけど、箱形選択使いにはお勧めしない。
98 :
デフォルトの名無しさん :2006/02/02(木) 09:44:18
グラデーション表示させるTooBarにテキストを置く方法を教えてください。 Panelを使っていたのですが、グラデーション表示させるとPanelには反映されないので苦労しています。
Panel + PaintBox でいかようにも描けるだろうに
Del7を毎日使ってるが、終了時にエンドレスエラーになったり、別のプロジェクト開くときに エラーでたりする。2日に1回はエラーを見る。
組み込んだコンポーネントはIDEと同じプロセスで動くようになるから 開発中のとかどっかで拾った怪しげなコンポを安易に入れるとおかしくなる。
オレのDel6は去年マシン買い換えてから デバッグ中のメッセージループ開始直後?あたりで IDEが超高確率で固まるようになった タスクマネジャーで強制終了する必要があるから、全然デバッグ出来ないんだなコレが 何度再インスコしても駄目だったから、相性の問題なのだろうが、 別に必要でもないのにDel2005買わされて泣いた去年の初冬
VS2005 はそんなことは一度もないな。まだ2ヶ月しか使ってないが。 D6 から見ると、コードエディタの IntelliSense とアシスト機能が超便利。
D6はWinXPでマルチスレッドのアプリケーションをデバッガで走らすとOSごと落ちるね。 固まったDelphi6をホットキーで殺せるアプリケーションがあるからそれを導入しとくと便利
ほんと糞だね。XPって
突っ込むところはそこなのか
だって2000じゃ落ちないし
俺今200個近くスレッド使うアプリ作ってるけど落ちないぞ?
.dpr:プロジェクト全体の構成を記述してる .dfm:フォーム自身やそれに付随するコンポーネントに関する設定 .pas:ソースコード .~系:バックアップ? ここまではなんとなく予想がついたんだけど、.dcuって何なの? Delphi Cooperation United ?
delphi compiled unitでないのと調べずにかきこ
.rc : コンパイル前のリソースユニット .res : コンパイル済みリソースユニット .dof : プロジェクトの設定ファイル .cfg : よくわからん .dcuはコンパイル済みのソースユニットだ。.pasがコンパイルされた物でこれがオブジェクトにリンクされるんだとおも
あんた詳しいな .dofなんて存在すら知らなかったよ
cfgはConfigじゃね?
114 :
デフォルトの名無しさん :2006/02/02(木) 22:41:42
Del6 Personalです。 RichEditコントロールで、マウスを右クリックしたときに ただのTEditコントロールで出てくるようなポップアップメニュー 元に戻す(U) ---------------- 切り取り(T) コピー(C) ・・・ のようなやつを表示させるにはどうしたらよいでしょうか。 TPopupMenuを貼り付けて自力でガリガリ実装する以外の方法は ないでしょうか?
ない。ガリガリってほどでもないよ。
アクション結びつけるだけじゃないの 表示させるだけなら
聞かれたことに黙って答えろ
黙って、尚且つ答えないといけないのか。 難しいな。
VCLアプリで、TEditなんかでCtrl+Aをおしても「すべてを選択」されない (ビープ音が鳴る)のですが、これは自分でショートカットを 割り当てないといけないということですか? (コピーやペーストはWindowsが勝手にやってくれてるんでしょうか?) また、自分で実装しなければいけない場合、どうするのがスマートですか?
>>119 ActionListかActionManagerで標準アクションの追加でTEditSelectAll を追加する。
cfgはコマンドラインコンパイラが使う。
GetAsyncKeyStateでテンキーではない1~0が押されているか検知したいのですが VK_で始まるものが定義されていません。 どのように指定すればよいのでしょうか?
>>123 { VK_0 thru VK_9 are the same as ASCII '0' thru '9' ($30 - $39) }
{ VK_A thru VK_Z are the same as ASCII 'A' thru 'Z' ($41 - $5A) }
$00000030-$00000039って事ですね。 ありがとうございました。
126 :
114 :2006/02/03(金) 19:47:38
>>115 即レスありがとうございます。
幸い、そのものズバリのサンプルを見つけましたので参考にして実装してみます。
UTF8なURL encodeってどうやるの?
RFC読むかIndyかなんかで手抜き
フォームにTMemoを乗せました MemoのPopupMenuが空っぽの状態でも、 フォームにPopupMenuが設定してあるとMemo上で右クリックしたときに 標準の「切り取り、コピー、貼り付け」のポップアップが出ずにフォームに設定してあるポップアップが出てしまいます フォームに設定してあるポップアップを出さずに標準のポップアップメニューを出すようにするにはどうすればいいのでしょうか 「親コントロールの設定は引き継がない」「ParentPopup := false」のような設定はありませんか?
あ、本当だ。 仕様なのかな。 フォームにPopupMenuを設定せず、手動で表示してはどうでしょう?
サブフォームにvsReportにしたListView置いて、メインフォームからShowで表示させた途端にKernel32.dllの書き込み違反だかって言うエラーダイアログが断続的に出るんだけどどうすればいい? ちなみにWinXP HOME SP1のDelphi6 Personal。
>>129 PopupMenuのAutoPopupをfalseにしておいて、FormのOnMouseDownでtrueにして、
OnMouseUpでfalseにするというのはどう?
MouseEnter/Leaveを使ったほうがいいと思うけど、2006じゃないと駄目かな。
132 に一票。
何でOnMouseDown?どうせならOnContextPopup使えよ
136 :
129 :2006/02/04(土) 15:54:35
レスどうもです 残念ながら MouseEnter/Leave は使えません OnMouseDown/OnMouseUp/OnContextPopupをヘルプで調べながらやってみます
137 :
129 :2006/02/04(土) 17:14:37
OnContextPopupを使うとAutoPopupをfalseに戻す方法がわからなかったので OnMouseDown/OnMouseUpで対処しました どうもありがとうございました
OnMouseDown/OnMouseUpだとフォームからmemoに右ドラッグしたときに、 MouseUpがおきないからおかしくなるよね。 MouseUpの代わりにPopupMenuのOnPopupのほうがマシとおもわれ。
139 :
129 :2006/02/04(土) 20:32:09
>>138 全く気づきませんでした。その通りですね
さっそく修正します
すみません・・質問です irvineのソースを実行させてるんですが・・ 読み込み中のエラーとか出まして、 irvineのソースのあるフォルダの.pasのファイルが認識されず、 仕方なくLIBフォルダに.pasを移動させて、 登録して行くんですが・・ この場合(irvineのフォルダにある.pasのファイルを) まとめて、登録することが出来るんでしょうか? それとも、もっと別の良い方法があるでしょうか? 教えてくださいませm(_ _)m
えー、標準以外のコンポをインストールしたことないの? 同じディレクトリにコピーするとそこの pas ファイルは uses するだけで つかえるようになる。要は、Delphi IDE からみてパスと通ったところに 置く、と。
TWebBrowserの拡張版であるTEmbeddedWBを使っています。
HTMLドキュメントをロードした後に、アンカー(<a name="hoge">)に
ジャンプする方法が分かりません。
Navigate('
http://example.com/index.html#hoge ')は当然できるんですが、
メモリストリームから読み込んだドキュメント内で移動したい場合は
どうしたらいいでしょうか?
(ロードした後で、Navigate('#hoge')とかやってみたけどだめでした。)
MSDNのWeb Devlopment以下を必死でみてるんですが、
MSDNの読み方に習熟してないのと、COMの基礎が分かってないので苦戦しております。
よろしくお願いします。
>>141 レス感謝です
早速、教えて頂いたように試してみます
プログラムフォルダのBorland Delphi Personal Installerが、146MB もあるのでけど、CD-Rに焼いて、使用しているかたいません?
>>147 お前は次に「それってどうやってやるんですか?」と言うッ!!
150 :
デフォルトの名無しさん :2006/02/05(日) 21:18:51
メディアプレイヤーコンポーネントでMIDIを再生しているのですが、 MIDIファイルを途中で変えるにはどうしたらよいですか?
いったん止めてもう一度普通に再生しようとした時と同じ処理をすれば良い
>>151 最初のファイルの指定はオブジェクトインスペクタでファイルネームを指定したんですが
もう一度再生するときに
mediaplayer1.filename := 'another.mid'としても、最初に指定したMIDIが流れてしまうんです。
フォームにbutton1、button2、button3を置いてbutton1のonclickに button2.assign(button3); としてhbutton3のプロパティ全部をbutton2にコピーしようとしたんですが エラーが出てしまいました。 解説本によるとassignはオブジェクトのコピーに使う と書いてあったので これが出来ると考えてしまったのですがどうして駄目なのでしょうか。 よろしくお願いしますm(___)m
コンポーネントは Assign メソッドは実装されていない。 多分 Name の衝突とか、そんな理由カナ?
155 :
153 :2006/02/05(日) 22:08:58
>>154 なるほど、コンポートだと駄目なんですか。
どうもありがとうございましたm(_ _)m
156 :
デフォルトの名無しさん :2006/02/05(日) 22:11:26
コンポート
どうして button2. と打つと Assign が候補にあがるのは何故? コンポートだと使えないのに意味ないすきゃっち。
>>157 メソッドが存在しないわけではない。
メソッド自体は TPersistent から public に存在している。
TButton などのコンポーネントのクラスで「オブジェクトのコピー」という動作が実装されていないだけ。
まず一旦Assignのヘルプを嫁 メソッドは呼べるけどButton用の実装にはなってないってこと
なるほど! overrideして自分で処理を書いて使うものなんですね? なんとなく分かりました、どうもありがとうー!
改めて伺いますが、メディアプレイヤーコンポーネントで 複数のMIDIファイルを扱うにはどうすればよいでしょうか
「複数のMIDIファイルを扱う」ってなんやねん
もうめんどくさいからMIDIの数だけコンポーネント置けばいいんじゃね?
TListView.ItemsでTStrings.Exchangeのように項目を入れ替えるにはセコセコと値を コピーしていくしかないんでしょうか?
ほかにどんな方法があると考えられますか?
つCustomSort
>>162 ひとつのメディアプレイヤーコンポーネントで、任意のmidi,fileを鳴らせるようにしたいということです。
ファイルの拡張子を直接変えるにはどうすればよいのでしょうか?
>>169 RenameFile
ChangeFileExt
質問です・・ コンポーネントをいろいろインストールしていくと、 ある時、コンポーネントの表示が出なくなったりして、 再起動しても、コンポーネントが表示されず・・ コンポーネント→パッケージのインストール・・を表示すると、 (省略)\Borland\Delphi6\Projects\Bpl\dclusr.bpl この部分のチェックマークがOFFになっていて・・ チェックを入れるとファイルが足らないとかエラー表示・・^^; dclusr.bplを削除して、再度コンポーネントを登録しても、 次回起動で、やはりコンポーネントが表示されてない・・ こんな問題に何回か直面してますが、 皆様はこんな体験してるんでしょうか? DELPHI6のパーソナル版です この状態になったら、再インストール以外での改善の仕方 ありますでしょうか・・?
>>81 それはDelphi2006にしとけという意味ですか?
質問です。 BDS2006のようなメニュースタイルにするにはどうすれば良いのでしょうか? オンカーソル時はライトブルーになり、プルダウン時にアイコンとメニューテキストが色分けされるやつです。
>>174 標準のコンポーネントでやるなら、ActionMainMenuだね。
>>173 それネタだから気にしない方がいいよ。
結局VistaでもWin32/64がネイティブみたいだし。
178 :
174 :2006/02/06(月) 13:46:05
>>176 ActionMainMenuですかぁ。途中まで調べて却下していました;;
やってみます、ありがとうございました!
>>175 VCLでの話でした。説明が足らずにすいまっせん。
Delphiでプログラムを組めてる方に質問です 最初はどのサイトを見てどのようなプログラムをつくりました
最初は公式サイトを見て入門向けのようなプログラムをつくりましたか?
先輩からオラクル使ったデータベースアプリのソース渡されて後は独学
俺も
>>181 と同じだ
当時はまじで全然わからんかった
俺はちょっと違う。 先生からミラクルもらった。
184 :
デフォルトの名無しさん :2006/02/06(月) 19:08:41
185 :
デフォルトの名無しさん :2006/02/06(月) 19:09:20
はじめてのDelphiって本を買った。 いちおう本の通りにやってみたけど、その時はぜんぜんあたまにはいらんかった。 それでけっきょくDelphi1はほとんど使いこなせず。
187 :
184 :2006/02/06(月) 20:29:33
>>180 ・クイックスタートガイドのチュートリアル見ながらメモ帳もどき
・TActionManagerがPerに無かったから標準アクション相当のコード書いてみる
・テキストの一括置換ソフト書いてみる(全部Unit1.pasに実装)
・スパゲッティコード完成
・begin/endが気に入らないのでBCBに以降
・憂鬱本とかデザパタ本読む
・自分でクラス書いてみる
(以下略)
DelWiki by PukiWikiマダー
>>180 1.適当なサンプル
2.15パズル(ゲーム)
3.パックマン(ゲーム)
4.ちょっとしたツール ← 今ここ
5.もう少し便利なソフト ←いまここ
0.IrvineをコンパイルしようとしてD6のあまりの不安定さにブチ切れ ← 今ここ
>>179 付属のマニュアル類。
サイトなんて気軽に見られる時代ではなかったが、紙のマニュアルは充実してた。
最初に書いたのはマンデルブロ集合を描画するソフト。
当時は、言語を習得する最初に必ず書いてた。
1.作りたいソフトを考える 2.考えたソフトをコーディングし始める 3.当然行き詰る 4.調べる 5.新知識を4.の過程で入手しつつコーディングする 6.完成する 7.レベルがアップしている
アクセスキーを非表示にする方法を教えてくだされ。
メニュー項目の AutoHotkeys プロパティを maManual に設定します。
198 :
デフォルトの名無しさん :2006/02/07(火) 14:59:55
ValueListEditor で EditStyle を esPickList にすると、ドロップダウン リストを表示させることができます。ここに、ComboBox の OnDrawItem で 描けるような絵を表示させたいのですが、ご存知の方がいましたらお願い します。
割り方教えて下さい。
まともな質問文書く事すら面倒なら今すぐ息の根を止めてみましょう。 すべてが解決するはずです。
201 :
デフォルトの名無しさん :2006/02/07(火) 16:36:17
ADSI使ってパスワードの有効期限を7日後にしようとしています。 下のように書くとFullNameは更新されるのに PasswordExpirationDateは変わらないんですが、 変数dtの型が間違ってます? ちなみにTDateTime型なんですが。 Server := 'WinNT://Server'; User := 'Test'; PassWord := 'test'; HR := ADsOpenObject(PWideChar(Server), PWideChar(User), PWideChar(PassWord), ADS_SECURE_AUTHENTICATION, IID_IADsContainer, unknownObj ); conObj := unknownObj as IADsContainer; userObj := conObj.GetObject('user', 'Test'); userObj := unknownObj as IADsUser userObj.GetInfo; userObj.Put('FullName','Name'); dt := Now() + 7; userObj.Put('PasswordExpirationDate', dt); userObj.SetInfo;
質問は、簡潔に。普遍的に。特化しない。
>199 両手で持って力をいれる。割れたときに破片が飛び散るので怪我をしないように気をつけて
MDIの親フォームにスクロールバーを付けないいっちゃん簡単でエレガントな 方法を教えていだだけますでしょうか。
TUIWebBrowserを使ってソフト作っているんだけど、 何故かショートカットと、マウスジェスチャーが効かなくなる。 おそらく、TUIWebBrowserがイベント(メッセージ?)を堰き止めちゃっているんだと思うんだけど、 なんとかして、ショートカットとマウスジェスチャーを作動させる方法ないですかね?
imagelistでdrawメソッドつかったらなぜかグレー一色になったんだけど 透過したイメージだけして描くのってどうしたらいいの?
>>205 Form2.Parent := Form1;
Form1からForm2を作成して表示する際、Form2のFormCreate中で ある変数フラグに従って処理を分岐させたいです。 この変数フラグをForm1から設定したいのですが、 Form2をCreateしてから設定するのでは遅すぎてだめです。 どうすればいいでしょうか?
211 :
202 :2006/02/08(水) 09:34:27
>202 スマソ。 簡潔に言うと > userObj.Put('PasswordExpirationDate', DateTime); でPasswordExpirationDateが変えられるか? ということが聞きたいんですが。
>>210 Form2を生成する前に設定すればいいじゃん
>>211 TDateTime型の宣言を見なさい
その後にdt := Now() + 7;の意味を考えなさい
それで分からないなら諦めなさい
>>210 Form2に変数フラグを引数とするコンストラクタを追加する。
215 :
210 :2006/02/08(水) 11:01:03
>>212 とりあえず Form1 で変数フラグを Public で宣言し、
Form2 の中で Form1.hoge などとしました。
が、スマートでないというか・・・
>>214 できれば具体的にお願いしたいのですが・・・
プロジェクトオプションの「自動作成の対象」からTForm2を外す。 TForm2のPublicに追加。 constructor Create(AOwner: TComponent; hoge: integer); implementationに記述。 TForm2.Create(AOwner: TComponent; hoge: integer); begin inherited Create(AOwner) //hogeの処理? end; TForm1から Form2 := TForm2.Create(Self, hogehoge); Form2.Show; こんな感じ.。(おかしい点があったら指摘してください) 個人的にはこんなことせず、 >Form2をCreateしてから設定するのでは遅すぎてだめです の条件を回避する努力をするけど。
217 :
210 :2006/02/08(水) 11:55:54
>>216 ばっちりでした。ありがとうございました。
コードもすっきりしました。
218 :
201 :2006/02/08(水) 13:30:18
>213 ヘルプによると type TDateTime = type Double; で、整数部が経過日数を表すんだから dt := Now() + 7; だと今日から7日後でいいんじゃないですか? 前の書き込み、スレ番まちがえて書いてたわ…。
今日から7日後ですね var dt: TDateTime; begin dt := Now() + 7; showmessage(FormatDateTime('yyyy/mm/dd', Now)); showmessage(FormatDateTime('yyyy/mm/dd', dt)); showmessage(FormatDateTime('yyyy/mm/dd', Now + 7));
220 :
デフォルトの名無しさん :2006/02/08(水) 14:48:38
斜めの直線を描画してそいつをドラッグアンドドロップしたいです。 水平な線や垂直な線はShapeを使って無理やりやっています。 斜めの線は長方形のパネルかShapeのキャンバスに斜めの線を描いてやるしかないんでしょうか?
そう思うならまずはやってみなさい
222 :
デフォルトの名無しさん :2006/02/08(水) 15:27:36
それだと出来るんですけどそれだとフォーカスを取る範囲が無駄に広くなったり、重なったりします。 コンポーネントの形状を斜めにすることは出来ないのでしょうか?
すみません・・質問があります irvine をビルドしようとして出てしまう、 WallPaperListview・・・・このクラス(コンポーネント?) について知ってる方いますか? WallPaperListviewで検索しても、全くヒットしません・・ もしファイルがあるならば誰か場所を知ってる方しますか? 教えてくださいまでm(_ _)m
いまさらOpenIrvineかよ あれも結局作者がJWORDに走って、ないがしろにされたな
× 教えてくださいまで ○ 教えてくださいませ 誤字・・情けない^^; ・・Irvineのビルドをかなえたくて・・すみません。 ここにIrvineのビルドされた方いますでしょうか・・?
m(_ _)mとか^^;とかウザイのですが
ActionMangerのカテゴリを追加・変更するにはどうすればいいのでしょう?
>>228 Actionのプロパティで存在しないカテゴリを設定すれば勝手にできるよ。
230 :
228 :2006/02/08(水) 18:46:01
StringGridで1セルに二行以上の文字を表示させる 要するに改行なんですが 可能であればやり方を教えてください。
delphiインストールしてみたいんだけども、米ボーランドからライセンスの取得 のところで激しく行き詰ってしまいました 誰かたすけてくだしあ
>>234 お前には二つの選択肢がある
1 英語を勉強する
2 日本語を勉強する
>>235 とりあえず米のところでダウンロードはしたんだけども
keyが載ってないんだ…
MP3ファイルを2曲同時に再生していますが、TrackBarなどで 個別にボリュームを制御するにはどうすれば良いでしょうか。
お前さんがどうやってMP3を再生してるか分からないのにその情報なしで答えろと?
240 :
240 :2006/02/09(木) 09:30:27
ボタンなどの上で左のマウスボタンを押し、 そのままドラッグしてボタン以外の領域へカーソルを移動させ、 そこでマウスボタンを離すとMouseUpイベントが発生しますが、 右のマウスボタンの場合発生しません。 左と同じようにMouseUpイベントを発生させられないでしょうか? やりたいことは、MouseDownした位置とMouseUpした位置との 差を調べ、その値によって色々と処理を変えていきたいのです。 で、この処理を左右のマウスボタンで分けようとしたのですが、 左しかMouseUpが反応しないので困っています。
241 :
240 :2006/02/09(木) 10:38:37
自己解決しました。 SetCaptureControlでできました。
Delphi 、 終わったな
お手軽に暗号化を実装したいのだけど・・ 暗号化するコンポーネントとかあるんですか? できれはMD5とかでしたいっす。
RC4とかメジャーなやつならいくつかコンポーネントある。 そこにMD5なんかのハッシュ関数も入ってるよ
一応指摘しておくけど、MD5で暗号化なんてできないよ。
つかWin32APIにある。 .pasファイルがあるかどうかは知らんけど
システムのプロパティを表示するコードをお願いします
>>250 sysdm.cplをShellExecuteする。
さすがにコード例はいらんでしょ?
252 :
238 :2006/02/09(木) 22:48:04
>>239 すんません。
現状は鳴らすだけの状態でTMEdiaPlayer2つを使ってます。
ただこれだと音量調整が出来ないしWaveOutSetVolumeを使ったら
両方音量が下がるし…という状態です。
MD5はハッシュ関数でしょ。 暗号化はCRC。
ここは笑うところですか?
>>253 パネルのサイズが変わるとそれに応じて伸縮して全体を表示しようとしてしまう。
画面が切れてもいいから伸縮しないようにしたい。
という質問だと承りました。
であればフロントバッファのサイズをパネルのサイズに合わせる必要があります。
具体的には以下の通りです。
パネルのサイズが変わるときに
FLastPP.BackBufferWidth:=Panel1.Width;
FLastPP.BackBufferHeight:=Panel1.Height;
http://gamdev.org/up/img/4608.zip
>>256 うまく行きました。ありがとうございます!!
258 :
245 :2006/02/10(金) 18:17:56
>>247 ありがとす。
Blowfish でやってみます。
解放忘れたオブジェクトの型とかでないの?
>>260 出ないですし、変数もTForm1だけなんで解放忘れでもないので、
何なのか困り果ててますorz
デバッガで追いかけたらDestroyに入ったので異常終了でもないですし
リークしてるメモリ領域ダンプしてVMT読めばクラス名がわかる
DLLを読み込んでる関係でメモリマネージャが勘違いしてるのかな DLL内でリークしててもそれは検出できないと思うんだが
>>259 そのサンプルではメモリリークは出ないけど。
>>265 わざわざ検証してくれたのか。
ありがとう
267 :
デフォルトの名無しさん :2006/02/11(土) 14:41:03
何か良い本ない? 皆どうやって知識を増やしているの?
試した。
で…別に何ともない。
そもそもEXEとDLLではメモリマネージャが別なので…
ということはだ。ShareMemかなんか使って無いか?
>>259
Free; と FreeAndNil(); ってどう違うの? どっち使ったほうがいいの?
>>270 Free。
後々nilにしておく必要がある時も、a.Free; a := nil; と明示的に書いた方がいいと思う。
FreeAndNilの引数は形無しで、class型を後々recordに直したような修正に弱い。
ただ、解放しないといけないものがいっぱいあってめんどくさいときはFreeAndNil並べた方がいいかも。
マウスカーソルを変える場合、 デフォルトで用意されている カーソルであるならば、 Screen.Cursor := crHourGlass; Screen.Cursor := crDefault; という感じで指定ができるのですが、 フリーのマウスカーソルやアニメーションアイコンにしたい場合には どうすればよいでしょうか? よろしくお願いします。
>>271 FreeAndNilもかなり明示的だと思うが。
>>270 nil突っ込みたかったらFreeAndNil推奨。
nil突っ込む必要がなければFreeを呼ぶだけでよい。
なぜnilを突っ込むかといえばpが無効であることを明示できるから。
if Assigned(p) then // pが初期化済みならFooを呼ぶ
p.Foo;
みたいなコードが書ける。
おまけ
p.Free; p := nil;と手書きした場合の問題点
・Free(内部のDestroy)で例外吐いたらnilがセットされない
・Freeした直後に別スレッドでpにアクセスした場合pはdestructされた参照を保持していておかしくなる。
でもrecordがメソッドをもてるようになったから、classからrecordに変更したくなることも確かにあるね。 なんで引数がTObjectじゃないんでしょうね?
>>275 ・デストラクタで例外なんてのは回復不可能と見なされる類のものじゃないか?
・異なるスレッドから同じ変数にアクセスする時は同期しろよ
バージョン管理システムのJVCSを使ってる方いますか? 使用感などを教えていただきたいのですが。
>>273 ヘルプに書いてない?
Screen.Cursors にLoadCursor APIで返ってきたハンドルを格納。
>>277 1オブジェクトのデストラクタが例外吐いても
動き続けるかどうかはアプリが決めることだし
assignedチェック程度は同期取らずに行うかもしれない。
そういったケースでもなるべく正しく動くようにするささやかな試みってだけ。
FreeAndNil使うか手書きでnilぶち込むかは最早好みの領域だろ オレはnilぶち込みの方が好きだが
>>282 渡された型が何だろうと、上で言われてるようにデストラクタで例外出ようと
FreeAndNilは確実に対象をnilにするという点ではそっちの方が優れてる
手書きで毎回FreeAndNilと同じ動作させるのはめんどくさすぎるし
284 :
281 :2006/02/11(土) 20:03:10
普通に好みの問題だと思うし両方の問題点も出たし 本題のFree/FreeAndNilの使い分けとも外れるし これ以上伸ばしても意味ないと思うが。 # 何でいちいち白黒つけるために噛み付き合わないと気がすまないのかね。疲れる。
285 :
273 :2006/02/11(土) 20:05:26
>>284 そう思うならスルーしろよ
あんたが一番しつこい
287 :
281 :2006/02/11(土) 20:57:18
はぁ?消えろよカス
288 :
281 :2006/02/11(土) 22:19:26
289 :
281 :2006/02/11(土) 22:40:28
偽者も含めて281は消えろ 上でも書かれてるが君が一番しつこいと思う
>>280 VSSは使ったことがないのでどんなものか分からないのですが、とりあえず入れてみました。
結構使いやすいみたいなんですが、日本語を使うとちょっと問題ありますね。
293 :
281 :2006/02/12(日) 02:30:29
偽者いい加減にしてくれよ。ほんと。
TMyClass = class private FHoge: Integer; end; --別ユニット-- TMyHogeClass = class(TMyClass) private FHoge: Integer; end; 以上の宣言が別のユニットに書かれている場合、それぞれの FHoge は 名前は同じでも全く別の変数ですよね?
そうだよ
>>294 何をもってして「全く別の」とするかがよく分からんが、
動作自体は同じユニットでも別ユニットでも変わらないと思うが?
>>295 ありがとうございます
>>296 説明不足でしたが、継承したクラスから継承元のprivateにアクセスできるか?
っていう質問です。
>>297 > メンバーは,それが定義されているクラス内だけで使えるようにする場合は private として宣言します。
> 定義されているクラスとその下位クラスだけで使えるようにする場合は,protected として宣言します。
と、Delphi6のヘルプ
(カスタムコンポーネントの作成 - コンポーネント開発者のためのオブジェクト指向プログラミング - アクセスの制御)
に書いてあるね。
ただし、同一ファイル内に限るなら、private でもアクセスできてしまう。
まあ、
>>294 のようなコードは書かない方がいいというのは間違いない。
300
301 :
デフォルトの名無しさん :2006/02/14(火) 03:53:00
ラベルのフォントの高さをセンチメートル単位で指定して、 どの解像度でも同じ高さにするにはどうすればよいのでしょうか。
302 :
デフォルトの名無しさん :2006/02/14(火) 04:04:06
303 :
デフォルトの名無しさん :2006/02/14(火) 04:22:03
なんか匂う
>>301 同じ解像度でも物理的に同じ長さになるなんて保証ないんですが
初回起動時にでも四角形とトラックバー2本表示して、 「この四角形がディスプレイ上で1cm x 1cmに表示されるようにサイズを調整してください」 とかやればよくね 倍率がわかったら後は自前でゴリゴリ描くだけ
そんな糞UI使う気にならないけどなw
ちょっと本がでてこないからうろ覚えだけど windowsって長さに仮想単位使ってて ピクセルやmmに変換できるはず VB4やってるときに組んだんだけど…… 局面菅と平面菅でちょっと差が出るという程度に抑えられたはず
DPI取ってスケーリング
>>308 ユーザーがモニタを調整できるので精密なことは、やっぱりユーザーまかせにしないといけないね
ディスプレイを17インチから21インチに変えたけど 「モニタの種類」はプラグアンドプレイモニタのまま。 こんな環境の人には対応できなさそう。
TListViewのvsReportでカラムヘッダーがクリックされた時にソートしようと考えているのですが 自分で退避領域を確保しなきゃいけないんですか? もっとスマートに処理する方法があれば教えて下さい。
退避領域?
プロジェクトファイルをダブルクリックで開こうとすると「ファイルが見つかりません」と 出ます。メニューからは普通にみられます。何ででしょう?
パスが長すぎとか日本語とか
>>313 データベースから値を取得してるんであれば
クリックされたカラムでORDER BYかけるとか
そうでないならCompareイベントにソート処理書いてそれを呼ぶとか
>>313 なんとなくこんな感じ。
TForm1 = class
SortIndex: Integer;
SortAscending: Boolean;
end;
procedure TForm1.ListView1ColumnClick(Sender: TObject; Column: TListColumn);
begin
if Column.Index = SortIndex then
begin // 同じカラムがクリックされたらソート順を逆にする
SortAscending := not SortAscending;
end
else
begin // 別のカラムがクリックされたら昇順でソート
SortIndex := Column.Index;
SortAscending := True;
end;
// 左端の空欄をクリックした場合ソートしない
if SortIndex = 0 then Exit;
ListView1.SortType := stNone;
ListView1.SortType := stData;
end;
procedure TForm1.ListView1Compare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer);
begin
if SortIndex = -1 then begin
Compare := 0;
Exit;
end;
Compare := // todo: SortIndexに応じて比較
if not SortAscending then
Compare := -Compare;
end;
319 :
313 :2006/02/14(火) 20:05:42
>>317 ,318
よくわかりました。ありがとうございました。
Delphi7入れたのですが、起動してデスクトップが後ろに見えていますが 見えないモードみたいなのに出来ませんか?
VB.NETなら見えないよ
>>320 状況がよく分からん。デスクトップを見えないようにすると言うことか???
IDEを最小化したいなら「環境オプション」-「実行時に最小化」をチェックすればOK。
はずしてたらごめん。
壁紙が見えてしまっているってことだろ?VBとかだと灰色だったような。 俺もVBからDelphiに移行したときは驚いた。
>>320 BDS2006をご購入くださいませ
Delphi7まではMDIではありません。
>>325 いや、どっちにしろMDIではないけど。
確かに、初めてDelphi起動した時はウィンドウがバラバラで驚いたな 今じゃ慣れてどってこたぁないが
とにかく何のアプリを使う場合でも、最大化表示やフルスクリーン表示が嫌いな俺には D7までの形がしっくりくる
2005辺りから選べるようになってるんじゃなかったっけ?
330 :
323 :2006/02/15(水) 15:31:49
ああ、そういうことか。 Visual Studioのようなのがいいのか。 おれはSDIのすかすか画面が好みだな。
Delphi7ですが、 d:double; d:=StrToFloat('-INF'); で、エラーが出るの、どうにかなりませんか。 NegInfinityが返って欲しいのですが・・。
こんなんじゃ駄目なのか function GetNum(AStr: String): double; begin if AnsiCompareStr(AStr, '-INF') = 0 then Result := NegInfinity; end;
elseが無いっすね。 そしてじゃあ、'INF'はどうしようかという・・。 参ったのは、TIniFile.ReadFloat メソッドで、その内部でStrToFloatしてくれてるので、 iniにInfinity,NegInfinityが書き込めないんですよね。
>elseが無いっすね。 >そしてじゃあ、'INF'はどうしようかという・・。 それ位自分で書けんのか
応用力0だな くだすれにふさわしい
>>332 に文字列で扱う方法あるんだから
ReadStringで読み込めばいいだろ
mainmanuをcontrolbar内に取り込めませんか? buttonやtoolbarなら普通にできるのにmainmanuだけは試行錯誤して数時間・・
>>337 MainMenuとToolBarを追加して、FormのMenuプロパティを空にして
ToolBarのMenuプロパティにMainMenuを指定する。
339 :
333 :2006/02/16(木) 15:13:04
そうっすね。 仕方ないので、TIniFileの下位クラスを作って、INF対応しました。 infinityの取り扱いがmathユニットにあるってことは、Floatでの 演算において、Infinityは通常ありえないって事なんすかね。 納得行かないのは、FloatToStrでは、INF,-INFをはき出すくせに、 StrToFloatでは戻せないってとこだけで、一時的な解決自体は 問題なくできました。 BDS2006とかだと、正常に動作するんすかね。
比較ができないって点で察しろ
listbox.items.objectsの関連付けについてなんですが、 var pstr:Pstring;i:integer; begin new(Pstr); pstr^:='戦闘中...'; i:= ListBox1.Items.Add('16:15現在の状況 '); Listbox1.items.objects[i]:= Tobject(pstr); この行に関連付けられている文字列などを変更したい場合、 Pstring(listbox1.Items.Objects [0])^ :='転進中...' ; としていいんでしょうか?だめでしょうか?
しょぼい質問すみません。 D7でScreenToClient APIを使いたいのですが、メインフォームのイベント内で 次のように記述すると、 var b:boolean; hw:hWND; begin b:=ScreenToClient(hw,p); end; コンパイルエラーで「 'TPoint' と 'HWND' には互換性がありません」と出て、通りません。 恐らくFormのScreenToClientに引っかかってるのだと思いますが、APIを呼ぶにはどうしたら良いでしょうか。
そーゆー場合は、ユニット名を明示する Windowsユニットだっけ? だったら、Windows.ScreenToClietってな感じ
よく目にするオークションの価格情報などを表示してくれるソフトのように、 (たとえばAuctionListReader Yahoo!のように) WEB上から該当する情報を引っぱってきて ソフトウェアに取り込むのって、どのようにするのが一般的ですか? WEB BROWSERコンポーネントを使っても、二進も三進もいかなくて困ってます。
WinInet、IndyとかのGetじゃだめなの?
347 :
345 :2006/02/16(木) 19:00:37
>>346 それでできそうです!
ありがとうございます。
TButtonとかTMemoとかの最初のTは、何を意味するのでしょうか?
Type
350 :
345 :2006/02/16(木) 20:35:53
IndyのGetで通常のWEBページからの取得に成功しました。 ありがとうございます! しかし、SSL認証でつまづいてしまいました。 これは初心者には手が出ない○| ̄|_
352 :
343 :2006/02/17(金) 01:32:04
>>344 ありがとうございます、助かりました。こういう指定方法があるとは知りませんでした。
ところで、別のアプリケーションのTMainMenuのMenuItemを実行させたいのですが、
WindowFromPoint等ではメニューアイテムのhWNDが取得できず、メッセージの
送信先がわからず、行き詰まっています。
一般的にはこういう場合、どのように処理をするのでしょうか。
Win2000以降は他プロセスのハンドルは取得出来ない
delphiなくなっちゃうの?
いいえ
>>352 Menuはウィンドウでないので、ウィンドウハンドルはない。
Menuを持ったウィンドウから辿っていく。
>>353 そんなわけないでしょ・・・。
>>354 DelphiはGoogleが買い取って、フリーウェアにして、
全世界に広めて、VBとCを殲滅します(かも)。
>Menuはウィンドウでないので、ウィンドウハンドルはない。 いやいや、あるでしょ・・・。 正すのはいいけど、間違った知識教え込まないでね。
>Menuはウィンドウでないので、 ここからして違う。 標準コントロールとは、ただの出来合いウィンドウ。
>>357 Googleが買い取るのはまずありえないだろ
言語なんて採算全然取れないんだから、
昔のGoogleならともかく、儲けに走った今は無理
他所でやれ
そういうコメントこそチラシの裏にでも書けw
みんな、止めて! 私の為に争わないで!
364 :
356 :2006/02/17(金) 12:07:01
>>358 ,359
TMainMenuってメニューを開かなくても
ウィンドウハンドル持ってるんですか?
WindowHandleプロパティは自身のハンドルでないし、Handleプロパティは、GetMenu APIなどで取得できるメニューハンドルですよね?
Googleの内側はPythonで出来ていて中の人もPython好き 今さらDelphiに宗旨替えするなんて考えにくい
別にDelphiでGoogleを作るわけじゃない
>>364 GetMenuの戻り値はhWndですが何か
369 :
356 :2006/02/17(金) 12:35:51
>>367 つまり、HMENUとHWNDは同じ物ってことなんでしょうか?
メニューハンドルをたとえばIsWindowVisibleに渡してみると、ウィンドウハンドルが無効です、となりますが。。。
353といい、何か変なこと言う奴が出現してるな HWNDとHMENUは共にCardinalという点では同じでも、 扱う上では全く異なるからこそ別の型として定義されているんだろ
371 :
356 :2006/02/17(金) 12:48:08
>>370 私はもちろんそう思ってるのですが、
GetMenuで得られるメニューハンドルがHWNDだというので一応確認してみました。
いちいち噛み付くお前らも同罪 スルーしろ
>>352 findwindow->getmenu->GetMenuItemID
375 :
デフォルトの名無しさん :2006/02/17(金) 14:46:09
質問があります。 どうしても FreeOnTerminate = True を使わずにスレッド を解放したいのですけど、以下のように OnTerminate で Free するとフリーズしてしまいます。 どういう風にプログラムするのが正しいのでしょうか? var DrawThred: TDrawThred; procedure TForm1.DrawTerminate(Sender: TObject); begin DrawThred.Free; end; procedure TForm1.Button1Click(Sender: TObject); begin DrawThred := TDrawThred.Create(False); DrawThred.OnTerminate := DrawTerminate; end;
>>375 素直にFreeOnTerminate使わない理由は?
377 :
デフォルトの名無しさん :2006/02/17(金) 15:33:37
>>376 プログラムが終了する OnDestroy で WaitFor を使って
スレッドの実行が完全に終了するまで待機したいからです。
FreeOnTerminate = True にしたら Execute が終了した段階
でハンドルが無効になっているみたいで WaitFor を実行する
と例外が発生しますし。
>>342 なのですが、下のように変更する場合、
Pstring(listbox1.Items.Objects [i])^ :='転進中...' ;
Pstring(listbox1.Items.Objects [i])^ :='作戦完了' ;
のようにしちゃっていいのですか?
本当に教えてください。
>>377 プログラム終了するのになんで待つ必要があるわけ?
381 :
デフォルトの名無しさん :2006/02/17(金) 15:56:51
>>379 スレッドでファイル処理をしているので、
それらの処理が完全に終わるまで途中
でプログラムが終了されたくないわけです
>>380 本当ですか。よくわかりませんが、ありがとうございます!!
>>375 Terminate
(Resume)
WaitFor
Free
の順ではダメなのかな?
SSL認証で情報を取得したいのですが、 IdHTTPとTIdSSLIOHandlerSocketOpenSSLを使用したサンプルの 文献ってほとんどないですね…。 SSL認証はIndyではあまり行わないのでしょうか? DelphiでSSL認証をするサンプルがあるところに 誘導願います。
385 :
デフォルトの名無しさん :2006/02/17(金) 16:21:13
387 :
384 :2006/02/17(金) 17:00:19
おうおう!さっきから何回も 「シンボル 'FindData' はプラットフォームに依存すると宣言されています」 ってでるんだけど、コイツを表示しないようにするにはどうすればいい? エディタが狭くなるっつーの!
{$WARN SYMBOL_PLATFORM OFF}
おめえ、やるなー おかげですっきりしたもんだ! ありがとよっ
Win32API以外録にサポートしてないんだからプラットフォーム依存も糞もないだろっつうの
ほんとに。Kylix の弊害がここにも。ヘルプにもたっぷり。
>>375 DrawThreadがOnTerminateを呼び出すんだから、その中で
DrawThreadを破棄したらおかしくなるのは当然でしょ。
FreeOnTerminateをTrueにして、OnTerminate内で
DrawThread := nilにして、Assignでチェックしてループって
手もあるけど、>383が確実だと思う。
D7のヘルプから、CLX関連を全部消せないですかね。 ヘルプ引く際にいちいち選択が鬱陶しい。
7は知らんけど CLXヘルプの解除 † readme.txt l258を読んで解除しておく 2.DELPHI6.OHL,DELPHI6.OHI,および DELPHI6.OHC をテキストエディタで開きます。 3.それぞれのファイルの中で,"DLX1CLX" という文字列を含む行の先頭にセミコロンを入力してその行をコメントアウトします。 4.各ファイルを保存します。 5.Delphi\Help フォルダを開き,拡張子が "GID" の隠しファイルをすべて削除します。同様に,拡張子が "F" で始まるすべてのファイルを削除します。
396 :
394 :2006/02/20(月) 15:21:10
>>395 ありがとう、できました。若干手順が違ったので参考に。
2.D7.OHL,D7.OHI,および D7.OHC をテキストエディタで開きます。
3.それぞれのファイルの中で,"CLX" という文字列を含む行の先頭にセミコロンを入力してその行をコメントアウトします。
4.各ファイルを保存します。
5.Delphi\Help フォルダを開き,拡張子が "GID" の隠しファイルをすべて削除します。
こんな感じでいけました。
どもです。
何やってるんだお前ら カスタマイズでCLX関連のヘルプのリンクを切ればいいだけじゃん
解決しようがしまいが俺様以外のやり方は一切認めず指が折れるまで毎日ケチ付けまくる君乙
CLXっていうファイルを削除するだけでOK。
必死だな。文字通り
>>395 394ではないが、超助かった。ナイスな情報ありがとう
procedure ListSort(Param: Integer); function DoSort(ItemA, ItemB: Pointer): Integer; begin Result:= CompareValue(PInteger(ItemA), PInteger(ItemB)) * Param; end; begin List.QuickSort(@DoSort); end; TListでQuickSortするにあたり引数Paramに1とか-1を入れて エレガントに昇順と降順を入れ替えようとしたら結果が常に降順になったけど何で? グローバルな変数に一旦Paramの値を入れ、DoSort内ではそのグローバル変数を参照させたら巧くいったのも何で?
関数内関数を渡しちゃいかん
テキストへの書き込みについてなのですが、 var F: TextFile; begin AssignFile(F, txtName); try Append(F) Writeln(F, src); finally CloseFile(F); end; とするとテキストの最終行に書き込めるのですが、 先頭行に書き込むにはどうすればよいのでしょうか? 一度テキストファイルを全部読み込んで、 先頭行に今回の文字列を書き込んでから、 既存の文字を書き込むではスマートではないと思いまして よろしくお願いします。
>>403 そうなんだ。でも何で?スタックがズタズタになるの?
>>404 つまり追記ではなく、挿入が行いたいと言うことだね。もちろんできないと思う。
それと、簡単なテキストファイルIOならTStringListを使った方が楽だね。
メモリに入れても問題ないサイズでなければならないけど。
>>407 リンク先の内容全然わかんないけど、
とりあえず呼び出し規約違うからNGって覚えてみる
ありがと
409 :
404 :2006/02/20(月) 20:57:23
>>406 つまり、TextFileならメモリに入れないから大容量ファイルも扱えるけど不便、
Stなら簡単だけどメモリを使うと覚えておけばよいわけですね。
イメージ通りにできました。ありがとうございました。
var
St: TStringList;
begin
St := TStringList.Create;
St.LoadFromFile(txtName);
St.Insert(0, '先頭に追加');
St.SaveToFile(txtName);
St.Free;
>>404 TFileStreamで開いてSeekでもしとけ
>>404 関数内関数を渡す事は出来るけど、
そこから外のローカル変数(Paramの事)にアクセスできないじゃなかった?
413 :
デフォルトの名無しさん :2006/02/21(火) 11:42:55
Delphi7ですがエディタの言語がいろいろ選べるけど 結局それだけだよね? 最初見たときどんな言語でも自動移植してくれるのかと思った。
以下のコードを実行するたびにメモリが4KBくらい減っていきます。 なぜでしょう?(Win2k SP4, D5) var hLib: THandle; begin hLib := LoadLibrary(PChar(ExtractFilePath(Application.Exename) + 'Tools.dll')); FreeLibrary(hLib); end;
Delphi FAQに、あんまりDLLをリンクしたり解放すると、メモリリーク起こすって書いてあったな Cの開発環境でも試してみなよ
4KBってのが何か怪しい DLL内でString型を使ってるとか
>>417 情報が古すぎる(1999/02/08)けど、今はどうなんだろ?
>>414 は、何もしないDLLを作ってそれで試してみなよ
それで同じ事が起きるなら、開発環境側の問題かな
D6も増えるけど、増えてるのIDEのメモリ使用量だから別にいいやって感じ。
IDE IDE IDE
423 :
414 :2006/02/21(火) 16:50:15
>>417-419 この情報はD5の時代っぽいから、OKとしました。
>>420 これはやってみましたが、やはり増えました。
なんででしょ;;
>>421 いや~でも、ユーザーにもよるでしょうけど、常時PC起動で、
何度も関数を発行すると、いつかは大変なことに・・・
とりあえず、DLL無しの方向で検討してみます。
つまりIDEからじゃなくて、アプリ単独で起動してもどんどん増えてくのかっちゅう事ね。
426 :
414 :2006/02/21(火) 17:15:22
それはまずいね
StringGridで特定のセルだけ色を変える方法ってありますか
あります
onDrawCellイベント内でCanvasの色を変えればいいのです 右寄せ左寄せ均等割りなどもできます
431 :
428 :2006/02/21(火) 23:51:32
以下を実行すると、アプリのメモリ使用量(タスクマネージャで見えるもの)が激減します。 なぜでしょう? ShellExecute(Handle, nil, PChar(ExtractFilePath(Application.Exename) + 'hoge.lnk'), nil, nil, SW_SHOW);
起動されたアプリがメモリを喰うからでしょ
デバッグ用のメッセージを出力する事ってできませんか? デバッグ時にログを吐くような関数をMLで見た覚えがあるのですが、ご存じ無いでしょうか。
>>434 WindowsAPIにOutputDebugStringがある。
出力内容はイベントログに表示。
ただしPerはそのイベントログウィンドウがない上に統合デバッガはしっかり吐かれたメッセージ持って行くから統合デバッガ切らないと見れない。
切ればPSDKのDbgMon他の外部ビュアーで見れる。
>>435 統合デバッガを切るなんてできるんだっけ?
単にIDEから起動しないってこと?
437 :
デフォルトの名無しさん :2006/02/22(水) 19:25:04
このクソったれにActionManagerの使い方を教えてください。 メインメニューを TEST (これメインメニュー) | +--TESTES (メニューのアイテム) と、したいんです。 var Ac: TAction; begin // アクション作成 Ac := TAction.Create(Self); Ac.Category := 'TEST'; Ac.Caption := 'TESTES'; Ac.ActionList := ActMng; Ac.OnExecute := OnFunc; // TESTというカテゴリを追加 ActMng.AddCategory('TEST', MainMenu.ActionClient.Items[0]); // TESTというカテゴリ内にアクション追加 ActMng.AddAction(Ac, MainMenu.ActionClient.Items[2]); end; procedure TForm1.OnFunc; begin ; end; これだとTESTの右側とTESTの中、計2カ所にTESTESが出ちゃいます。 TESTの中だけにしたいんですが、どうするのでしょう?
TImageをフォーム上に生成すると先に生成されたものほど下に表示されるんですが、 この順番をTimageを破棄せずに変えたいです。 プロパティなども見ましたが、表示順を扱う様なものはなかったので、どうすればいいかなやんでます ご教示願います
>>438 BringToFront
SendToBack
441 :
デフォルトの名無しさん :2006/02/22(水) 19:55:58
>>440 いやそれ俺だし!
あっち、レスポンス遅いからついこっちで・・・
>>437 こう?
procedure TForm1.Button1Click(Sender: TObject);
var
Ac: TAction;
Acc,Acc2: TActionClient;
begin
// アクション作成
Ac := TAction.Create(Self);
Ac.Category := 'TEST';
Ac.Caption := 'TESTES';
Ac.ActionList := ActMng;
Ac.OnExecute := OnFunc;
Acc := MainMenu.ActionClient.Items.Add;
Acc2 := Acc.Items.Add;
// TESTというカテゴリを追加
ActMng.AddCategory('TEST', acc);
// TESTというカテゴリ内にアクション追加
ActMng.AddAction(Ac, Acc2);
end;
443 :
デフォルトの名無しさん :2006/02/22(水) 20:09:00
>>422 うおーーー!かんどーした!これこれ!スゴス!
感謝です!ありがとうごじゃりやした!
あとは自分でなんとかします!
444 :
デフォルトの名無しさん :2006/02/22(水) 20:09:52
↑あれ?422って誰すか? 442でお願いします!
>>439 ありがとうございます
はじめからZオーダーで調べて置けばよかったんですね・・・
お手数おかけしました
>>441 お前は返事を数時間も待てないのか
それと解決したんなら向こうの掲示板自己レスしろよ
このクソったれが
447 :
441 :2006/02/22(水) 21:00:01
マルチ視ね
一体マルチのどこが悪いのかわからない。 複数のスレに質問することでレイテンシが最小に抑えられるし 複数のレスが得られれば情報の確度も飛躍的に向上する。 忌むべきはレスをもらった後に放置することでありマルチ自体ではないはずだ
450 :
441 :2006/02/22(水) 21:14:53
>>449 ご教授頂いたやつは問題なしです。
で、便利なように関数を作っていたら、メインメニューをクリックすると例外が出るようになりました。
で、今はこれを調査してます。解決したことはしたんだけど、もうちょっと待ってやってください。
そしたら向こうのスレ、自己レスします。
446のクソったれさん、そういう事でおながいします。
>>449 お前質問に答えた事ある?
せっかく苦労して答えてあげたのに
「別の掲示板で解決したからもういいよ」とか言われたり、
同じような回答が複数の場所で同時にされるのがどれだけ無駄かわかってるのか?
サーバーの容量も無限じゃないし、マルチは無意味な情報が増えるだけだろ
今回も向こうの掲示板放置したままだし、今、向こうの掲示板で回答を考えてる人のことどう思う?
一般的に言って質問する側は緊急度が高く 答える側はたいてい暇なことが多い。 また答えが重複したところでコミュニティの大きさが十分大きければ その無駄も相対的に0に等しい。 よってマルチの価値は高く、反面実害はほぼ0であることが証明された。
あれだな 教えて君と答えたがりサンの問題と似てるところがあるな まぁ、これ以上はスレ違いだからやめようぜ
これに懲りたら今後難癖つけるのはやめような。
>>452 >一般的に言って質問する側は緊急度が高く
>答える側はたいてい暇なことが多い。
それはそうかも知れんけど、今回の話とは関係なくない?
>また答えが重複したところでコミュニティの大きさが十分大きければ
>その無駄も相対的に0に等しい。
すまん、意味がよくわからん。
同じような回答が何件も寄せられたら、重複した物は無駄な情報だと思うが。
>よってマルチの価値は高く、反面実害はほぼ0であることが証明された。
マルチの価値の高さが伝わらない。
実害も0じゃなくて少しはあるんだろ?トータルでマイナスなんじゃないの?
ま、マルチだと知ったら放置することにしてるし。 答える側には答えるかどうか決める権利があるんだよ。 マルチすると質問者にとって不利になるようにしむけることが大事
457 :
デフォルトの名無しさん :2006/02/22(水) 21:45:26
>>441 解決したんなら向こうの掲示板にレスしろよ、このクソったれが
例外と今回の事は関係ないだろうが、このクソったれが
覚えたての2ch語連発して毎回ageるなよ、このクソったれが
>>452 中二病全開なオレ様理屈乙
飯喰って糞して寝てろ
459 :
デフォルトの名無しさん :2006/02/22(水) 23:11:44
自身を再起動するにはどうすれば良いの?
バッチファイルでも吐いとけ
command.com に何かパラメータを渡すんじゃなかった?
>>436 ツール>デバッガオプション>一般>統合開発環境を使うのチェックを外す
>>463 こんなオプションあったのか。ホントに単に実行するだけになるんだね。
使い道はなさそうだけど、サンクス。
>>460 ShellExecute(0, "open", PChar(ParamStr(0)), ...
end.
必要ならmutexで終了待ち
タスクマネージャのタスクに登録されないようにするにはどうすればいいですか?
>>466 回線切って首吊って氏んでおけ(#^ω^)
>>466 プロセス列挙系のAPIを片っ端から横取りして書き換えればいい
そのやり方は自分で調べて下さい
>>466 つ rootkit
お問い合わせはSONY BMGへ
>>470 プロセス一覧でなくて、タスクに表示させたくないだけであれば、Application.handleをHideするぐらいでできなかったっけ?
いずれにしてもスレ違いだ。ネタじゃないならWin32APIスレ池
474 :
466 :2006/02/23(木) 13:38:22
>>472 それをヒントに出来ました。ありがとうございました。
475 :
460 :2006/02/23(木) 14:23:31
散々悩んだあげく、とりあえずMutexとCommandLine引数とWaitForSingleObject使うことにした 答えてくれた人ありがと
>>475 簡単なのは、
WinExec(自分を起動するアプリ, SW_HIDE);
Close;
SMART情報取得するのって難しい?というか出来る? CPU、HDDの温度とか取得したい・・・
Delphi7で、FormにTCoolBar、その中に TToolBar+TToolButtonを配置してます。 設計画面ではW2kのスタイルで無問題なのですが、 実行時のXPスタイルでは、ボタンなど、どうも 垂直方向の位置がズレているような気がします。 これはDelphiのバージョンに起因する問題? なんか既知の問題のような気がしますが、 解決策があったら、よろしくお願いします。
TToolBar のボタンのXPスタイルがどうの、って3ヶ月おきに質問があるような・・・
481 :
デフォルトの名無しさん :2006/02/24(金) 18:16:57
作成したプログラムのメモリリークのチェックってどうすればできますか?
フリーでMemCheckっていうライブラリがあるよ
>>483 ありがとうございます。
ダウンロードしてきます。
485 :
デフォルトの名無しさん :2006/02/24(金) 19:59:39
DelphiのTWebBrowserにて、指定のURLに移動し、フォームに情報を入力し 送信ボタンを押す、というプログラムを作っています。 ですが、type=fileのフォームにはValueを変更しても反映されません。 セキュリティの問題だと思うのですが、なんとか入力する方法はありませんでしょうか。
486 :
デフォルトの名無しさん :2006/02/24(金) 22:13:49
TPanelってフォーカス捕まえられないの(´・ω・`)?
>>485 表示してから入力せずに、HTMLを取得してタグの初期値を書き換えてから表示させれば?
>>486 ウィンドウハンドルは有るので、捕まえられる。
継承して、関連イベントの可視性広げて、MouseDown で SetFocus すればおk。
>>488 OnEnter OnExitじゃダメなんですかね、、
WndProcの中でもWM_SETFOCUSもWM_KILLFOCUSも拾えないみたいで、、 @D6
試してないんでわからんが、 DefaultHandlerをoverrideするかmessage指令使えば捉まるんじゃないの?
>>489 OnEnter OnExit はアプリケーション内でのフォーカスの移動に応答するイベント。
WM_SETFOCUSもWM_KILLFOCUS はフォーカスの移動が完了したときに受け取るメッセージ。
フォーカスは自動的に与えられるものではない。欲しいときに奪い取るものだ。
よって MouseDown などで SetFocus する必要がある。
WM_ACTIVATEなんかも拾わないしもうだめぽ
>>486 (1) フォームにチェックボックスを一つ置く
(2) その下にTPanelを置く
(3) 実行する
(4) チェックボックスにフォーカスがある状態で、↓キーを押すとあら不思議
下と言うのはY座標上の下って事ね。 フォーカス移っちゃうね。
コンパイル中に スタックオーバーフロー、Delphiを再起動して下さい。 とでてコンパイルできません。再起動しても同じエラーが出ます。 どのような問題があると思われますか?
IDE,コンパイラのバグ パッチあてたか?
>スタックオーバーフロー プロジェクトグループにパッケージが含まれているなら、 構築順序の見直し。非依存のものを先にに構築。 .dcu ファイルの出力ディレクトリの確認。 パッケージのオプション {$IMPLICITBUILD OFF} にする。 それでも無理か?
499 :
496 :2006/02/25(土) 22:07:51
>>497 最新のパッチを当てても解決しませんでした。最新verの評価版でコンパイル
しても同様のエラーが出ます。
>>498 複数のパッケージを利用してコンパイルしてますが、それらの構築は問題ない
です。構築順序も特に異常なし。
.dcuの出力ディレクトリはデフォルトのままです。使用するパッケージの
オプションは全て{$IMPLICITBUILD OFF}になってます 。
ソースコードをエラーの出る前まで復元し原因を分析した所、新規に作成
したユニットを別のユニットで参照すると発生しました。コンパイル対象
のプログラムは特異なユニット間の参照を行ってるのでそれが原因かも
しれません。レスで指摘された点を考慮しても解決しませんし、コードの
量もかなり多いので原因を完全にはっきりさせるのは難しいです。とりあ
えず問題の参照を無くせばエラーは発生しないので、適当に回避してこの
問題に対処する事にします。レス有難うございました。
500 :
デフォルトの名無しさん :2006/02/25(土) 22:27:40
delphi7です プロジェクトに別のプロジェクトのunitを引っ張ってくるのってどうやるんですか? 「ファイル」「開く」で別タグで取り込めるけどコンパイル対象にならないしプロジェクトマネージャーにもぶら下がらない。 それからプロジェクトファイルのないpasだけ開いた後にプロジェクトファイルを登録も出来ないからコンパイルも出来ない。 いろいろやって結局空unitに全部コピーして貼り付け直ししてる・・・いらいらする。
プロジェクトに追加、とか無いか? ライブラリパス通してusesに追加、でもいいけど。
>>500 そのプロジェクトのあるディレクトリに、使うファイルをコピーするのはどう?一番簡単な方法。
ファイルがあっちこっちに分散するのが嫌なら、パスを通しておくとか。
パスは
「ツール(T)」→「環境オプション(O)...」→「ライブラリ」タブ→「ライブラリパス(B)」
で指定できる。(Delphi6の場合)
503 :
500 :2006/02/25(土) 23:05:38
「プロジェクトに追加」で出来ました・・・何やってんだ俺。
for i:=1 to 10 でi=1ならframe1 i=2ならframe2 を参照するような 処理で今は if i = 1 then showMessage(frame1.edit1.text); if i = 2 then showMessage(frame2.edit1.text); : : : if i = 10 then showMessage(frame10.edit1.text); とif文を列挙しています。 もっとスマートに書く方法はないでしょうか?
findcomponent
配列に入れるとかな TListとか派生クラスに入れるとかな
試してないけどこんなので上手くいくかな for i := 1 to 10 do begin ShowMessage( (FindComponent('frame' + IntToStr(i) ) as TFrame). (FindComponent('edit' + IntToStr(i) ) as TEdit).Text) end;
nilチェックぐらいしようぜ
レジストリへの書き込みについての質問です。 TRegistryIniFileクラスを使用してHKLMに書き込むにはどうしたらよいのでしょうか? RegIniFileプロパティからRootKeyを指定することはできるのですが、 TRegIniFileクラスのコンストラクタで、HKCUにキーを生成されてしまいます。 何かうまい方法はないでしょうか?
hoge := TRegistryIniFile.Create('');
511 :
504 :2006/02/27(月) 02:20:22
507の方法で試したみたけど TFrame). から後ろのEDITが未知の識別しってエラーにまりました。 とりあえずframeを辞めて直でeditを貼り付けて やってみようと思います。 レスありがとうございました。
512 :
504 :2006/02/27(月) 02:38:30
507の方法で試したみたけど TFrame). から後ろのEDITが未知の識別しってエラーにまりました。 とりあえずframeを辞めて直でeditを貼り付けて やってみようと思います。 レスありがとうございました。
513 :
デフォルトの名無しさん :2006/02/27(月) 04:06:59
514 :
509 :2006/02/27(月) 07:54:20
>>510 FileNameはインスタンス生成後に変更することができないので、
それだと結局使えません。。。
質問させてください HINT表示を複数行表示にするにはどうすればいいですか よろしくおねがいします
517 :
515 :2006/02/27(月) 09:00:12
\n入れてみましたけど無理でした
オブジェクトインスペクタでは設定できないよ フォームのOnCreateイベントで Edit1.Hint := 'hoge' + #13#10 + 'hoge'などと書くか あるいはdfmファイルに直接書いちゃうか
519 :
515 :2006/02/27(月) 09:25:41
>>518 出来ました
ありがとうございます
本当に助かったですw
>>513 Strm := TFileStream.Create('D:\test\testfile.txt', fmOpenRead or fmShareDenyWrite);
が抜けてるよ?
IdHTTP.Getってアドレス先の内容をStreamに保存するんじゃないのかな。
procedure TForm1.Button1Click(Sender: TObject); begin Form2.Show; end; procedure TForm1.FormActivate(Sender: TObject); begin if Form2.Visible then SetForegroundWindow(Form2.Handle); end; Form1で作業中もForm2が手前に表示されて、でもForm1で作業続ける見たいな、 メモ帳の検索ウィンドウ見たにしたくて考えてやってるんだけど、 どうにかなりませんかね?
Form2のFormStyle弄れ
オブジェクトインスペクタでForm2のFormStyleをfsStayOnTopに
TIdHTTPServerですが、OnCommandGetイベントの引数、 TIdContextは、何をUsesすればいいのでしょうか。 D2005です。
>>520 レスありがとうございます
レスするときに省いただけでソースには入ってました
改めて、ひととおり貼り付けておきます
------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
Strm := TFileStream.Create('C:\test\testfile.txt',fmOpenRead or fmShareDenyWrite); //ここのパスを変えた
try
IdHTTP1.Head('
http://pc8.2ch.net/tech/subject.txt '); //ここのURLを変えた
ProgressBar1.Max := IdHTTP1.Response.ContentLength;
IdHTTP1.Get('
http://pc8.2ch.net/tech/subject.txt ',Strm); //ここのURLを変えた ここでとまる
finally
Strm.Free;
end;
end;
--------------------------------------------------------------
ちなみにこんな感じで、subject.txtをとってきてhogeに入れることは出来るんです
--------------------------------------------------------------
var hoge : AnsiString ;
hoge := IdHTTP1.Get('
http://pc8.2ch.net/tech/subject.txt ');
ShowMessage(hoge);
--------------------------------------------------------------
メモリ上?の変数には書き込めるのに、Strmには書き込めない?
まさかfmOpenCreateにしたらおk何ちゅうギャグは勿論ないよな?
イカン、間違えた TFileStreamの引数のfmCreateな
528 :
デフォルトの名無しさん :2006/02/27(月) 15:46:04
>>527 レスありがとうございます
これで出来ました
Strm := TFileStream.Create('C:\test\testfile.txt',fmCreate);
できたはいいけど、fmCreateとかfmOpenReadとか
よくわかってないんで勉強してきます
ありがとうございました
529 :
デフォルトの名無しさん :2006/02/27(月) 17:16:01
パネルのキャプションやステータスバーのパネルにファイル名をフルパスで表示する際、 ファイル名が長い時に、ファイル名を表示領域に合わせて途中を省略する方法があったと思って 探してるのですが見つかりません。ご存知の方教えてくだされ。
>>529 MinimizeName
PathCompactPath
532 :
529 :2006/02/27(月) 18:01:05
>>531 超サンクス!
PathCompactPathまでは見つけたのですが、MinimizeNameが見つけられませんでした。
ListViewでonClickなんかに処理書いてて クリックされた行にデータがない場合に落ちてしまうのを回避するうまい手段を教えて下さい
何がしたいのか分からんがとりあえず例外捕まえとけ
onClickの中に下の1文書いとけ 意味はヘルプで調べておくんだぞ if Listview1.ItemIndex = -1 then exit;
536 :
533 :2006/02/27(月) 22:21:39
集合型の変数が要素をいくつ含んでいるか数えるには ループつかって一個一個 in で数えていくしかないですか?
ないです。
539 :
537 :2006/02/28(火) 00:44:21
ありがとう。でも残念(´・ω・`)ショボーン
541 :
537 :2006/02/28(火) 01:30:32
>>540 ありがとう。
K&Rの高速なbitcountとか初めて利用できそうな感じで嬉しげです。
質問いいですか フォームの1番左上にあるXボタン(押すと閉じるやつ)を 表示させない、又は反応しなくする事は出来ますか 解かる方お願いします
>>542 h_Menu : HMenu;
h_Menu := GetSystemMenu(Handle, False);
DeleteMenu(h_Menu, 6, MF_BYPOSITION);
DrawMenuBar(Handle);
InsertMenuItemとかってDelphiのTMenuItemのハンドル登録してもちゃんと動く?
>>543 出来ました
ありがとうございます
凄く嬉しいです、感謝してますw
お礼にwをつけるのはナウなヤングの間で流行ってんだぞ!
548 :
545 :2006/02/28(火) 16:47:46
549 :
デフォルトの名無しさん :2006/02/28(火) 17:12:22
バイナリファイルを二つ読み込んで、それぞれ内容を書き換えた後に 一つに繋げてファイルに保存したいです どんな関数(クラス)を使えばいいですか? まだファイル操作はTMemoのSaveToFileぐらいしかわかりませんorz
TFileStream
Streamで出来そうだが、TMemoのSaveToFileしか理解していないのでは苦しいだろうな
ストリームってアレですか? ネビュラストr
>>550 似たような機能が多くてどのメソッドを使うべきなのか迷いますが
まさに探していたクラスです。ありがとうございます。
>>551 今から猛勉強です。Streamと名前の付くクラスがたくさんあったので
便乗して覚えておきます。
>>552 私も好きなキャラはアンドロメダ瞬でした
本当にありがとうございました。
DelWikiに逆引きが欲しい
7のIDEで、プロシージャの一覧って無かったでしたっけ? プロシージャの並べ替えとか区切りとかの表示も出来ないんですか?
・・質問です var F : TFileStream; S : string; begin F := TFileStream.Create('text.txt',fmOpenRead); ・・このような TFileStreamであるFの中身を、 string型の変数Sに、代入するには、 どうすればいいのですか? すみません・・教えてくださいm(_ _)m
TStringStream
>>556 コードエクスプローラーはCtrl+Shift+Eだったっけ?
それ以上はGExpert
>>557 変数に
Size: Integer;
を追加して、
Size := F.Size - F.Position;
SetString(S, nil, Size);
F.Read(Pointer(S)^, Size);
質問いいですか var BT: TBitmap; ListItem: TListItem; FT: Textfile; BT := TBitmap.Create; BT.LoadFromFile('111.bmp'); ImageList1.add(BT,nil); BT.Free; ListItem := ListView1.Items.Add; ListViewとImageListに画像を読み込む前は AssignFile(FT,'222.INI'); rewrite(FT); writeln(FT,Form1.Top); closefile(FT); でちゃんと書き込めるんですけど、画像をび込むと書き込めなくなるんです と言うか 222.INI 自体作ってくれなくなります 解かる方お願いします
563 :
562 :2006/03/01(水) 06:09:10
すいません、自分の間違いでした 開いたファイルのフォルダにちゃんと有りました
564 :
509 :2006/03/01(水) 08:58:11
どうも無理そうなので、TCustumIniFileを継承してTRegIniFileに委譲するクラスを作って回避しました。抽象メソッドしか実装しなかったので結構楽でした。 しかし、TRegistryIniFileの実装は不可解ですね。TRegIniFileで実装している処理を再実装してたりするし。
565 :
556 :2006/03/01(水) 12:34:21
>>559 HELPにバージョンにより云々と書いてある・・・orz
Timageコンポーネントに表示した画像をクリアーする方法って Form1.Image1.Free; で良いんですか、試したら次に表示する事が出来ないんです Form7.Image1.Canvas.Free; これだとエラーが出ます、教えてください
>>566 Image1.Picture.Assign(nil);
Form1.Image1.Picture := nil; むやみにFreeすると天罰が下ります
569 :
566 :2006/03/01(水) 15:00:04
>>567 >>568 出来ましたありがとうございます
どちらかと言うと Form1.Image1.Picture := nil; の方が良いんですね
感謝していますw
またお前か
意味もなく準コテハン叩くな
TListViewのカラムはCustomDrawできないの? Explorerのカラムみたいに、ソート順を表す 淡い三角形を描きたいんだけど...
自前で書かなくてもできる方法があったと思うんだけど、どこで解説してたか忘れたorz 外国のサイトだったと思うんだけど、どなたかご存知ありません?
コピペも面倒なんか?
577 :
573 :2006/03/02(木) 00:39:52
せっかく探してきてくれた人に礼も言わずに無視かよ
おっと、はずれだった
>>575 HDF_SORTUP/HDF_SORTDOWNかな?
>>580 あー、それですそれ。どうもです。
確かコモンコントロールのバージョンの関係上XP以降のみでしたっけ。
ちなみに573≠575ですんで。
コードの中からListViewの行を選択したいのですが良い方法ないでしょうか 自分で色変えてみたりしたのですがスクロールバーが動かせないorz クリックした時と同じように色が反転してListView1.selectedから拾えると嬉しいのですが・・・。
ListView1.ItemIndex := 任意の行数 ListView1.SetForcus;
ListView1.Items[Pred(gyou)].Selected:= True;
>>582 ListView1.ClearSelection;
ListView1.Items[XX].Selected:=True;
ListView1.Items[XX].Focused:=True;
ListView.MakeVisible(XX,False);
586 :
585 :2006/03/02(木) 15:03:10
>>582 間違えた・・・
ListView1.ClearSelection;
ListView1.Items[XX].Selected:=True;
ListView1.Items[XX].Focused:=True;
ListView.Items[XX].MakeVisible(False);
587 :
582 :2006/03/02(木) 15:18:20
>>583-586 思い通りに動くようになりました。
助かりました、ありがとうございました。
588 :
デフォルトの名無しさん :2006/03/02(木) 16:40:46
TTimerイベント内でループを回して重い処理をしてるのですが タイマーイベントを抜けるまでCPU使用率が100%近くになってしまいます。 どうすればよいのでしょうか? procedure TForm1.Timer1Timer(Sender: TObject); var i: Integer; begin Timer1.Enabled := False; for i := 0 to 100 do begin //重い処理 //Application.ProcessMessageやSleep入れてもダメでした end; Timer1.Enabled := True; end;
つ TApplication.ProcessMessages
ProcessMessages がダメなら、 TApplication.OnIdle イベントでどうだ?
>>588 ProcessMessagesやSleepは別に重たい処理を軽くしてくれるわけではない。
重たい処理は重たい処理のまま。
重たい処理で時間がかかるのはいいとしても Application.ProcessMessagesを入れてループ中も 他のイベントに応答出来る様にしたり Sleepを入れてスレッドの処理を止めて他に制御を渡してるのに 使用率が100%のままになってしまうのがわかりません
Sleep(0)とかやってるならどこでも寝ないから100%使うし Application.ProcessMessagesもメッセージを処理しまくるからやはり100%使う。 寝たいならSleep(1)にしとけ
>>592 そりゃ、ProcessMessagesでWinに制御を返しても、
Winのタスクリスト(登録されてるコールバック関数)で他処理が終ったら、
アプリに制御戻ってくるんだから100%だお。
>>935 Sleepすると自アプリは寝ると思うお。
つか100%になったら困るのか? 困るなら別スレッドに汁。
スレッド関係ないだろ
OnTimer で Application.ProcessMessages よんだら再入しまくりだろうなぁ
いや Timer1.Enabled := False; でだいじょうぶ
600 :
588 :2006/03/02(木) 17:45:27
原因はリンクしている別のDLLでした そのDLLを外したらCPU使用率が下がりました CPU使用率が100%でも別に問題はないのですが 最近のPCはCPU使用率が上がると CPUファンがウィーンと鳴り出すのでそれが気に食わなかったのです あと、スレッドはローカルデータベース処理なのでメリットがないこと そもそもDAO経由なので使えないです・・・ とりあえずそのDLLを作ったボンクラを叩きのめしておきました 回答してくださった皆様、申し訳ありません
ボンクラカワイソス
リンクしただけで100%行くDLLってどんなん
ビジーループなスレッドでも建ててたんじゃね?
教えてください。 TTreeViewで、ノード作成時に、子ノードの有無に関係なく HasChildrenをtrueにしてノードの左に[+]を表示させています。 で、[+]をクリックした段階で、(もしあれば)子ノードを追加 しようと思っているのですが、この[+]のクリックに対応した イベントが分かりません。 どのイベントを使うといいのでしょうか?
606 :
デフォルトの名無しさん :2006/03/02(木) 22:40:28
設定ファイルを読み込むにはどうしたら良いでしょうか。 例えばhoge.txtというファイルに age = "17" name = "hoge" とあるとしたらEditAgeに17、EditNameにhogeを読み込みたいです。
INIファイル、TInifileクラスを使え。 というのは置いといて function removedq(s: string): string; begin result := copy(s, 2, length(s)-2); end; var sl: TStringList; begin sl := TStringList.Create; sl.LoadFromFile('hoge.txt'); ShowMessage(removedq(sl.Values['age'])+':'+removedq(sl.Values['name'])); ""は
Iniファイル形式にしてTIniFileクラス AssignFileしてベタにReadlnで取得する 何でも出来るTFileStreamクラス
かぶった TStringListが一番楽でよさげだね 注意すべき点としてはデカいファイルだと メモリ食いつぶす可能性があることぐらいか
611 :
607 :2006/03/02(木) 23:39:33
612 :
604 :2006/03/03(金) 01:12:54
>>605 ありがとうございます。
早速やってみます。
ボーランドに見捨てたらた言語はあきらめて、未来永劫安泰なVBに 移行したお
おいおい、ド素人どもが Iniを扱うのは普通APIだろうが GetPrivateProfileString、WritePrivateProfileStringだよ
TIniFileは多分そのAPIのラッパーだろ
WritePrivateProfileString等はNT系だとやたら遅いから、 そのラッパーであるTIniFileも使わない方がいいよ。 代わりにTMemIniFileを使用する。
でも微妙に挙動が違う罠があるから注意だ!
TMemIniFileがあるのにTIniFileを使う意味が分からない。 TMemIniFileなら64KB制限もないからいいよ!
方法は1個に統一してくんねーかな
INIファイルに64kb以上書き込むような超上級者の超高度な議論は他所でやってくれ
64KB制限関係なしにTMemIniFile推奨だな
TMemIniFileは適当に整形もしてくれるんだよね だからオレも64kb関係なしでTMemIniFileを推すな ただTIniFileと違ってUpdateFileが必要な点が要注意だ
EXEファイルやDLLファイルのバージョンを調べる関数みたいなものはありませんでしょうか? 宜しくお願いします。
VerQueryValueでググレ
↑これで愛着のあったDelphiに見切りをつけてVB.NETに完全移行する決心が付いたよ。 せいせいした。
買い手が無かったことに安心するほどの馬鹿がいるスレですか、ここ?
626=627=もう必死杉。 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ハライテ- ゲラゲラ ( ´∀`) < わははは ∧_∧ 〃´⌒ヽ モウ カンベン . ( つ ⊂ ) \_______ (´∀` ,,)、 ( _ ;) シテクダサイ .) ) ) ○ ∧_∧ ,, へ,, へ⊂), _(∨ ∨ )_ ∧_∧ ○, (__)_) ⊂ ´⌒つ´∀`)つ (_(__)_丿 し ̄ ̄し ⊂(´∀`⊂ ⌒ヽつ タッテ ラレネーヨ
>>625 JBuilderは,よりシンプルにJavaプログラミングができるツールとして
クライアントサイド,サーバーサイドともにサポートを続けていく。
「Peloton」というコード名で開発している次期版はJBuilderの使い勝手を
Eclipse上に実現したものになる。
これって何気にスゴス
JBuilderってとにかく重いっていうイメージしかないんだが、今は違うの?
ジャバコさん談義はすれ違い
632 :
デフォルトの名無しさん :2006/03/03(金) 18:41:03
すみません教えてください。 TMotorMoveEx2=record MortorNo:Integer; ABSorINC:Boolean; Kakudo:Single; MotorSpeedSelect:Integer; MotorSpeed:Integer; WaitMotorStop:Integer; Direction:Integer; end; この型をdelphi5でsozeof(TMotorMoveEx2)とやると28 になりますが、BDS2006で同じようにやると25になります。 Integer 4byte Single 4byte Boolean 1byte というのは 5でも2006でも同じなんですが rcordにBoolean型が入るとどうも不思議な3バイトが Ver.5では追加されるようなんですけど ご存知の方いらっしゃいますか?
ウルトラ初心者なんですが、 あるプログラムを読み込んだときに全て文字化けしてるのですが、これは一体どういうわけでしょうか?
「買い手がつかなかった」事実をいろいろ言い換えたり、言い訳したり、もうたいへん・・・ ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ハライテ- ゲラゲラ ( ´∀`) < わははは ∧_∧ 〃´⌒ヽ モウ カンベン . ( つ ⊂ ) \_______ (´∀` ,,)、 ( _ ;) シテクダサイ .) ) ) ○ ∧_∧ ,, へ,, へ⊂), _(∨ ∨ )_ ∧_∧ ○, (__)_) ⊂ ´⌒つ´∀`)つ (_(__)_丿 し ̄ ̄し ⊂(´∀`⊂ ⌒ヽつ タッテ ラレネーヨ
636 :
デフォルトの名無しさん :2006/03/03(金) 19:23:49
632です。
>>634 ありがとうございます。
自力でコンパイラ指令の項を探していて見つたところでした。
書き込む前に自力でまず探せと。
del5がデフォルトで{$A4}で2006が{$A1}なわけですね。
>>632 2006でもデフォルトでは28になるはずだけど、
{$A-}使ってる?
638 :
デフォルトの名無しさん :2006/03/03(金) 19:42:30
>>637 コードに{$A-}と書いておくしかアライメントを制御する方法があるんですか?
コードに{$A-}とは書いていないので2006のデフォルトかと思いました。
今まで、Delphi5でコンパイルしていたものを2006でコンパイルしたら
おかしかったのでコードはいじってないので2006のデフォルトかと・・・。
たしかに2006で新規プロジェクトでこのrecord型のサイズを調べると28になってました。
>>638 プロジェクトオプションのコンパイルページにある構造体データの配置はどうなってる?
すみません質問させてください 1)ボタンを押す→重たい処理をする(5~10秒かかる)→結果表示 この流れの中で重たい処理をしてる最中にボタンをもう一回押すとエラーが出てしまいます。 そこで、処理に入ったら入力を受け付けなくしたいんですが、どうやればいいのかわかりません。 簡単に言うと、ボタンの連打を禁止したいんです。 2)WINAMP等のように画面の隅にドッキングさせるのはどうすればいいのでしょうか? 調べるためのヒントかキーワードでも教えていただきたいです。 よろしくお願いします。
Button1.Enabled := false; じゃダメなん?
よく聞けクソ虫。 1)ボタンが押された瞬間にボタンのEnabledをFalseにしろ 2)ドッキングなんて機能は実装されていない。見せ掛けでそのように見せているだけ。 ウインドウの大きさや位置を監視して、 端に近づいたら端にくっついたように見えるようLeft,Topを調節。
スクリーンの隅に吸い付くようにするのは、FormのScreenSnapプロパティでできるよ。
Del6にはないなそのプロパティは
>>646 レスどうもです
delphi6では、そのプロパティは確認できませんでした
まあ、いろいろ試してみようと思います
改めてありがとうございました
649 :
デフォルトの名無しさん :2006/03/04(土) 08:29:21
>>639 構造体の境界配置という項目がコンパイラの設定の箇所に在ったことに
気が付きませんでした。ありがとうございます。
delphi5のでは構造体を境界配置にチェックが入っているプロジェクトを
2006で読み込むと構造体データの配置が1({$A-})になるんですね。
勉強になりました。
popupmenuでmenuItemを7つ以上作ると実行時エラーでるんですが 仕様ですか? del7で製作してます。
完全な新規プロジェクトでやっても出るか?
652 :
650 :2006/03/04(土) 10:52:12
>>651 新規だと問題ないです。
七つ目を消すと無事動作します。
別にpopupmenuを作ってmenuitemを作ってもエラーがでます。
新規で無問題ならおまいのプロジェクトに問題があると思うんだが
そんな深い階層のメニュー自体に問題が有るような気が。 リソースの使いすぎかもしれん。
655 :
654 :2006/03/04(土) 12:25:35
勘違いorz
657 :
652 :2006/03/04(土) 16:03:08
なるほどプロジェクトが問題なのですか ん~~ん、 どうやって解決すればいいですか?
エラーの内容くらい欠け
どうせアクセス違反だろ
661 :
657 :2006/03/04(土) 18:05:23
関係ありそうなところ少しずつ削っていって原因を特定しろ
>>661 [検索(S)] → [エラーの検索(E...)] で出てくるコンボボックスみたいなやつに
そのエラーのアドレス($00449669)を入れてみるとか。
何をしたときにエラーになるのかくらい賭け
解決する気があるとは思えない
666
関係ないがわざわざキャプチャしなくても、普通のダイアログならCtrl+Cでテキストをコピーできる。
>>661 お前はまずもうちょっと基礎知識増やして来い
素人に毛の生えたやつほど、先輩面したがる。
デバッガでどこまで追ってみたとか書いてもらわないと
vipperは巣に戻れ。その為に隔離スレをわざわざム板に立てたんだろ。
673 :
661 :2006/03/05(日) 04:33:33
なんか皆さん荒れ気味ですねw ところでpopupmenuとは、まったく関係ない処理 ある構造体の変数に値を入れている処理をコメント化したら なぜか直りました。(エラーが出なくなりました。) 一応報告までに
675 :
デフォルトの名無しさん :2006/03/05(日) 06:06:29
>作りなおしはキッツイなぁw >なんか皆さん荒れ気味ですねw どっちも笑うところじゃない
678 :
デフォルトの名無しさん :2006/03/05(日) 14:49:24
Edit1で何も入力されなかった時にbuttonを押されるとエラーを出す処理を書きたいのですが、 良い講座が見つかりません。 ヒントを教えてもらえますか?
sage忘れ申し訳ないです
エラーって何だ? ダイアログとかで「何か書けよ」とか表示したいのか? それとも例外吐いて落ちて欲しいのか? もっと具体的に書け
>678 procedure TForm1.Button1Click(Sender:TObject) begin if Edit1.Text="" then begin //エラーを出す処理 break; end; //残りの処理 end;
>>680 Edit1とEdit2が配置してあり、
Edit1もしくはEdit2のテキストに何も入力がなされていなかった場合にbutton1を押されると、
エラーダイアログを出す、という感じです。
何か入力がされていればそのまま、、、といった感じです。
>>682 結局エラーダイアログなるものが意味不明だが、
要はShowMessageでおkということなのか?
procedure TForm1.button1Click(Sender: TObject)
begin
if Length(Edit1.Text) = 0 then
ShowMessage('何か書け');
end;
あと681の例だとbreakのとこをExitに変えないとコンパイル出来ないはずだな
684 :
681 :2006/03/05(日) 15:34:27
スイマセン他の言語と勘違いorz
>>683 具体例を有難うございます!
Edit1.TextとEdit2.Text両方が書かれていない場合にShowMessageの場合だとどうなりますかね?
これは答えたくないのでしたら答えなくてもいいです。本当に有難うございます
andで結合すればいい if (Length(Edit1.Text) = 0) and (Length(Edit2.Text) = 0) then ShowMessage('えらー'); 括弧が無いと駄目だぞ
もしくは if (Edit1.Text = '') or (Edit2.Text = '') then ShowMessage('えらー'); orで囲めば、Edit1が未記入の時点でエラー。Edit1が記入されていてEdit2が未記入でもエラー。両方記入済みでShowMessageは飛ばされる。 ついでにエラーダイアログとはWindowsのアプリでポピュラーなばってんマークの奴かな? もしそれならAPIのMessageBox関数を調べてみると良い。例外はいて手続きから抜けたい場合はExceptionを調べて見て。 #分かりづらい説明でごめんね。
どこでも笑えるしね、あれじゃ
ExplorerとのDag&Dropについて教えてください。 Explorerからファイル(名)をDag&Dropする方法や コンポーネントはいろいろあったんですが、 Explorer方向にDag&Dropする方法ってあるんでしょうか? 基本的には、DropしたExplorer側のフォルダ名が 分かるだけでOKなんですが・・・ よろしくお願いします。
おっと・・・DragがDagになってた・・・
692 :
デフォルトの名無しさん :2006/03/05(日) 22:29:30
失礼します。今Delphi6で電卓作ってるんですけど ユーザーにEditコンポーネントに値を入力させて計算させるスタイルなのですが 入力する段階で¥+カンマ区切り表示させる事は可能ですか? 例えば 10000が \1,0000 みたいな感じなってくれると良いんですがどうも煮詰まってます。 どなたか分かる方教えてください。
MaskEditというものを調べてみれ
VCLってデータと表示が直結しすぎていてたまに困る。 TEdit.Textの表示方法をイベントハンドラとかで簡単にカスタマイズできれば MaskEditなんていらないのに。
695 :
デフォルトの名無しさん :2006/03/05(日) 23:02:05
文句があるなら自分で作れ。
>>694 基本の面倒な部分は全部作ったから、
残りの簡単な部分は自分で作れってスタイルがVCL(というかDelphi)だと思うが
GUI だけだろ。正規表現もないのに。GUI 以外はサードパーティーだのみ。
>>690 さん
そっち方向は難しいんですよ。
まつたく、VCLの不出来さをこういう所で嘆くんだよな~~。
新生Delphiは、こういうマトモな機能実装に励んでもらいたいよ。
オプソソースのIDE取り込みとかも、励んでやってくれないかしら。
DropSourceってので
検索したらどっかでみつかるかもしれない。
昔、有名なのが
http://www.melander.dk/delphi/dragdrop/ にあったんですが
どこにいったやら,,,DropSource.pas,,,
どうしても欲しかったらメアドさらしてくれたら送ります。
>>699 OLE Drag&Dropの勉強になりそうなサイトですね。
COMはむかし一度だけやったことがあるんですが・・・
702 :
692 :2006/03/06(月) 03:39:02
マスクエディット使ってみたんですけど 入力された時に右から左に値を入力させる過程で,を出したいんすよね・・。 時系列で表すと ← ← ← ← 10,000 1,000 100 10 1 見たいな感じなんですけどMaskEditでカンマを表現するとなるとやっぱ最初からカンマは見えてなきゃ駄目なんでしょうか?
procedure SetMaskInEdit(TargetEdit: TEdit; Value: Integer); begin TargetEdit.Text := FormatFloat('\,0', Value); end; これじゃーだめ?
>>697 すべて1社が用意しろというあなたのそういうとこがビルさんぽくって好きよ
そうそう、Delphi はもともとデータベースのフォントエンドだから GUI ビルダー にすぎないんだ。それを万能のツールにあがめ立てているのがDel厨だね。 GUI部分で楽したいために、ほかの部分で苦労してるんだよな。
× フォントエンド ○ フロントエンド
せめてスレタイくらい読んで適切なスレに移動するくらいの配慮はないのかね
708 :
692 :2006/03/06(月) 10:25:14
>>703 レスサンクスです!そのコードで表現したかった表示は出来たのですが
整数ではありません。で処理が止まっちゃいます。゚(゚´Д`゚)゚。
MaskEditに入力された値をカンマ区切りでMaskEditに返してるから整数扱いされないって事ですよね?
>>707 694 からつながってるだろ。くだらない質問にあれこれ言ってなんで移動しなきゃならん?
710 :
デフォルトの名無しさん :2006/03/06(月) 12:36:28
指定したウインドウが別のアプリケーションのウインドウに 覆われている時に、そのウインドウを前面にしたいのですが、 以下のようにしても、タスクバーの領域がオレンジ色に点滅す るだけでウインドウが前面に移動しないのですが、どうすれば よいのでしょうか? procedure TForm1.Timer1Timer(Sender: TObject); begin SetForegroundWindow(Handle); end; Windows XPを使っています。
インチキ技でよければ FormStyle = fsStayOnTop; FormStyle = fsNormal;
つか、OLEドラッグ&ドロップ程度で難しいとか不出来とか言われてもな。
くだすれレベルなんだからスレの主旨から言えばお前が間違ってる
716 :
デフォルトの名無しさん :2006/03/06(月) 18:28:18
マクロやインライン関数の書き方を教え給え
>>715 リンク先あんまりよくみてないけど、ToolBar2000+TBXみたいなもの?
>>715 よく分かんないけど2006ならデフォルトでできる気がする
720 :
デフォルトの名無しさん :2006/03/07(火) 12:23:08
Delphi6使ってるんですけどファイル 編集などのタブを開いた時に文字化けがひどくて読めません。 作ってるソフトが文字化けするのではなくてDelphi自体が文字化けします。 どなたか対処法分かる方いらっしゃいますか?
722 :
デフォルトの名無しさん :2006/03/07(火) 12:30:55
コンポーネントの使い方とかを説明してるサイトってありますか? ituneの右側リストウィンドウのようなものを作りたくて、コンポーネント色々試してるんですが、 いまいちどれ使えばいいのかわかりません・・
723 :
720 :2006/03/07(火) 12:33:45
>>721 日本語でというとタブ開くとエンコードかなんかの機能があるんですか?
何分文字化けしてて全く読めないのでどこのタブの上から何番目にあるとか教えていただきたい orz
724 :
デフォルトの名無しさん :2006/03/07(火) 12:35:26
>>723 721の日本語でおkってのは
お前の言ってることが理解出来ないって意味では?
実際俺にも意味がわからない
>>722 どんな用途にどんなコンポーネントが適してるかは経験しかない
Demoフォルダ内を片っ端から見て勉強あるのみ
727 :
720 :2006/03/07(火) 13:24:21
化けるのはDelphiだけか? てか、そもそもメニューのフォントは日本語を表示出来るのか? 変なスキン適用してるみたいだが、それが勝手にメニューのフォント変えたんじゃないの? そうでないなら俺にはわからん
729 :
720 :2006/03/07(火) 13:41:34
俺もスキンのせいかなと思ったんですがDelphi以外のアプリケーションは 全て正常なんですよね。Delphiで作ったソフトも文字化けしません。 全くの原因不明です・・・。ここ最近変わった出来事と言えば容量不足くらいのものです 解決不可能っぽいならこのまま使おうと思います(´ヘ`;) スレ汚し失礼しました。
・別ユーザー作って試してみる ・パッチあてる。 ・再インストール とりあえずこれくらいか。
スキンが原因だろうな おれもむかしなったことある
>>729 > 俺もスキンのせいかなと思ったんですがDelphi以外のアプリケーションは
> 全て正常なんですよね。Delphiで作ったソフトも文字化けしません。
Delphiそのものは、TMainMenu(メニューリソース)を直接使っていなくて、
TToolBarか何かを使って、TMainMenuをエミュレーションしていたような希ガス。
[Delphi-ML:35223] Re: IDE と同じ動作のメインメニューの作り方
ttp://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/article/035/035223.html それで、Delphi以外のアプリケーションも
(メニューリソースか、Windows APIのCreateMenu関数を使っている)
Delphiで作ったソフトも
(TMainMenuを直接使っている)
文字化けしないんじゃないかと。
勘違い乙
>>734 そこまで凄く無いけどTActionMainMenuBarってデフォで入ってんだが…できないと言い切るのはどうしたもんか
タブドッキングとかも標準のTDockTabSetでできるね。
>>738 カスタマイズダイアログは日本語化されてない時点でどうかと。。。
>Sampleカテゴリからは ShellListView ShellTreeView などがなくなっているようです。 これ便利なのになんで削るんだ
>>740 削られたというか、デフォルトではパッケージがインストールされていないだけだよね。
パッケージ入れれば、DelphiはもちろんBCBからも使える。
>>738 持ってない人間が勝手に仕入れた知識で断定するのはやめてくれ
743 :
720 :2006/03/08(水) 17:41:54
久しぶりです!あれからDelphi6の文字化けに関して試行錯誤した結果を書いておきます。 結論から言えばスキンが原因でした。 再インスコしたり、パッチ当てたり色々しましたが全く効果が無かったので 思い切ってスキンを削除したら解決しました。これに懲りて安易に スキンとか変更しないように心がけようと思いました。 レスくれた皆さん色々ありがとう。そして同じような問題抱えてる香具師はスキン削除汁
思い切ってって…。普通は一番最初に試すよね。。。
今までデルフィーと呼んでました
>>1 のおかげで読み方を初めて知りました。
本当にありがとうございました
Windows Media Playerで再生してる曲の曲名を取得する方法を誰か知りませんか?
ヒント:ウィンドウハンドル
ここはアホしかいないからWin32APIスレ行って聞いた方がいいよ
751 :
デフォルトの名無しさん :2006/03/08(水) 19:58:00
ボタン1を押すとラベル1にhelloと表示し、ボタン2を押すとラベル2にbyeと表示 するようなソフトを作るとすると、ボタン1を押した時に表示されたラベル1の初期化はどうすればできますか? ボタン1を押してラベル1に表示されたhelloがボタン2を押した時に消えて ラベル2のbyeだけ表示させるようにしたいのですが。
表示したい時 label1.visible := true; 消したい時 label1.visible := false;
753 :
デフォルトの名無しさん :2006/03/08(水) 20:31:10
Delphiは配列に配列を格納できますか?
754 :
デフォルトの名無しさん :2006/03/08(水) 20:33:40
うん
array[0..10, 0..20] of integer とか array of array of integer とできる
756 :
デフォルトの名無しさん :2006/03/08(水) 20:39:02
さんくすこ
757 :
751 :2006/03/08(水) 20:56:09
>>752 レスサンクスです!
visibleの存在忘れてました。
このvisibleってif文の中でも使えますか?
例えば
if 条件 then
エラー1を表示
else if
エラー2を表示
else
処理実行
みたいな感じにしたとき最初にエラーを表示させちゃうと処理実行に移行しても
エラーを表示させたラベル1にはずっとメッセージ残っちゃいますよね?
これもvisibleを記述することによって初期化できますか?
やってみれ!
確かに。 「やり方がわからないから聞く」というのはわかるけど、 やり方を思いついたのならとりあえずやってみりゃいいのに。
うっせーばーか
>>746 プラグイン食わせるのが確実
MSNメッセンジャーに現在再生中の曲表示する機能があるけど、あれもプラグイン食わせてる
俺も死ぬまでに一度はプラグインなるものを食ってみたい
>>761 結局SamurizeのWMP用スクリプトに含まれてたプラグインを流用することにしてみた.
CPUが故障しているかどうかを調べる方法をお教え下さい。
CPUがぶっ壊れていたらそもそもマシンはまともに動きません
>>764 PCそのものが全く起動しないかPOSTエラー出て止まると思われ
>>767 どっちかつーたらメモリのデータ化けだろ
以下放置して次の質問へ
773 :
デフォルトの名無しさん :2006/03/09(木) 16:18:30
TStringGridの使用方法でお聞きしたいことがあります。 画面上では表示も操作もできない列を作成する方法がありましたら 教えて下さい。 使用目的は行毎にフラグとなる数字などを保持し、 そのフラグをソース上から参照しようと考えております。 よろしくお願い致します。
774 :
デフォルトの名無しさん :2006/03/09(木) 16:31:06
Editで書き込まれた数値を13桁まで読み取って計算に使おうと思い コンポーネントのマックスレンジを13、格納する型もint64にしました。 ところが「1000000000000は整数ではありません」と表示されてしまいます。 このエラーはどうすれば対処できますか? あとボタンを押した時RadioBoxで選択された値を使って計算させたいと思い RadioBoxにそれぞれ変数を与えボタンの処理のとこで呼んでみたんですが 計算できません。この辺についても教えていただけるとありがたいです。
>>773 TStringGrid使うならOnDrawCellくらい理解しとけよ。
>>774 StrToInt64
> あとボタンを押した時RadioBoxで選択された値を使って計算させたいと思い
> RadioBoxにそれぞれ変数を与えボタンの処理のとこで呼んでみたんですが
> 計算できません。この辺についても教えていただけるとありがたいです。
意味不明。
778 :
775 :2006/03/09(木) 16:40:50
>>777 そういうことか、質問の意味を理解できなかった・・・
んだらObjectsプロパティでも使えばいいだな。
>>777 ColWidth[i]:=0; も考えたのですがマウスで操作出来てしまいます。
>>778 ヘルプだけではちょっと分かりませんでした。
Objectsプロパティの使用方法を教えて頂けないでしょうか?
よろしくお願い致します。
780 :
774 :2006/03/09(木) 16:58:35
>>776 13桁で計算できました!ありがとう
とりあえず今やりたいのは、入力してもらった13桁までの値に対して
RadioBox(●1倍 ●3倍 ●5倍 みたいな感じ)から倍率を選んでもらい
[入力された値*RadioBoxで選ばれた倍率→ラベルに出力]
みたいな感じの事をやりたいんですがやり方がわかりません。
最初チェックボックス使ってたんですけどチェックボックスだと倍率を複数選択
できちゃうんで断念しました。
・特定のセルにデータを関連付けたいとき //ObjectsプロパティはTObject型なのでキャストが必要 StringGrid1.Objects[2,2] := TObject(2) ・取り出すとき //セットしたデータ型に応じてキャスト後取り出す ShowMessage(IntToStr(Integer(StringGrid1.Objects[2,2]))); ・解放の仕方 //解放は自動的に行われないので忘れると楽しいメモリリークが発生する StringGrid1.Objects[2,2].Free;
782 :
775 :2006/03/09(木) 17:02:35
>>779 各行にランダムな整数を保持する場合の例。
for N:=0 to StringGrid1.RowCount-1 do
StringGrid1.Objects[0,N]:=TObject(Random(65000));
3行目の数値を変数Xに代入する例。
X:=Integer(StringGrid1.Objects[0,2]);
こんな感じ・・・
Label1.Caption := IntToStr(StrToInt(Edit1.Text) * StrToInt(RadioGroup1.Items[RadioGroup1.ItemIndex]));
>>781 IntegerをTObjectにキャストして突っ込んでるのにTObjectのFreeを呼び出し?
そもそも、PIntegerをNewしてTObjectにキャストしてセット、
解放時にはPIntegerでキャストしてDisposeする方が良いのでは?
785 :
775 :2006/03/09(木) 17:03:43
786 :
774 :2006/03/09(木) 17:05:25
787 :
774 :2006/03/09(木) 17:15:42
やっぱだめでした。delphi6なのでRadioGroupのコンポーネントないんで無理でした。 今RadioBox別個に設置して使ってるんでこういう場合どうすればいいんですか?
>やっぱだめでした。delphi6なのでRadioGroupのコンポーネントないんで無理でした。 意味不明 >今RadioBox別個に設置して使ってるんでこういう場合どうすればいいんですか? RadioBox?オレ様用語か?
790 :
774 :2006/03/09(木) 17:46:24
すんません勘違いしてました。RadioGroupありました。 あと正しくはRadioButtonですね。失礼しました。 RadioButtonしか使ったこと無いのでRadioGroupの使い方がよくわかりません。
791 :
デフォルトの名無しさん :2006/03/09(木) 17:46:52
Del6Per でも RadioGroup あるけどな。
RadioGroupってD2かD3にはすでにあった希ガス
793 :
774 :2006/03/09(木) 18:00:36
procedure TForm1.RadioGroup1Click(Sender: TObject); begin case RadioGroup1.ItemIndex of 0:= 1; 1:= 5; 2:= 10; 3:= 50; 4:= 100; 5:= 500; 5:= 1000; end; とりあえずこんな感じで書いてみましたがこれであってますか? そんでButtonのところに procedure TForm1.Button1Click(Sender: TObject); begin 答え:=入力された数値*StrToInt(RadioGroup1.Items[RadioGroup1.ItemIndex])); end; みたいな感じで書いてみたのですがうまくいきません。
795 :
774 :2006/03/09(木) 18:02:14
TDropFileTargetコンポーネントをダウンロードできるところありませんか?
case文の書き方からして違う case Index of 0: begin ShowMessage('0'); end; 1: begin ShowMessage('1'); end; end;
いちいち効率の悪い奴だな。 同じ労力でなるべくレス数増やすのが目的なのか?
799 :
774 :2006/03/09(木) 18:52:18
やっとできました。 procedure TForm1.RadioGroup1Click(Sender: TObject); に書くんじゃなくて procedure TForm1.Button1Click(Sender: TObject); にRadioGroupから得る値を書いたら計算できました。 お騒がせしました。
お前はすっこんでろ
801 :
デフォルトの名無しさん :2006/03/10(金) 01:35:57
失礼します。ちょっと聞きたいんすけどボタンのプロパティーにあるDefaultをtrueにすると Enter押し下するだけでボタンの処理に行けると思うんですけど、ボタンが二つある時とか どっちのボタンも押し下させたいって時はどうやれば可能ですか? 希望としては Edit1に入力終わり→Enter押し下→Button1処理→Edit2に入力→Enter押し下→Button2処理 なんでつが ヒントだけでも良いから教えて下さい(´・ω・`)
Button1Click は、イベントハンドラだけど、たんなるメソッドでもある。 別にほんとに Button1 を押さなくても、コードで呼び出せるよ。
Button1Click(Sender)で呼べるよ でもなるべくならイベントハンドラ内にごりごり処理を書かずに イベントハンドラは関数なりメソッドなりのコールに留めたほうがいいと思う
delphi6 personal で、 Mysqlは使えますか?
806 :
801 :2006/03/10(金) 03:05:31
>>805 ボタンが押されっぱなし?みたいな状態かな
とりあえず
procedure TForm1.TKeyEvent1(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_RETURN then begin
Button1Click(Sender);
end;
end;
みたいな感じで書いてみたんですがうまくいきません。
どこがいけないかご教示願えますか(´・ω・`)?
809 :
801 :2006/03/10(金) 03:12:19
ほう。知らんかった。「おしさげ」または「おしげ」と読んでたよ(´・ω・`) サンクス(`・ω・´)
>>801 フォーカスがあるEditコンポーネントによって処理を変えたいってことなら
EditのOnEnterイベントを使う
>>810 全部は試してないがプロ版以上を求めるものばかり
delphiいじりはじめたものです。 新規作成→MDIアプリから、ウィザードのようなものでMDIの雛型のようなものを作ってみました。 で、そのまま保存、コンパイルするとMDI式のメモアプリのようなものが出来上がったのが確認されました。 子ウィンドウの整列ボタンを押すと、カスケード式、タイル式(縦、横)に子ウィンドウ達が整列されます。 ここで、コーディング画面に戻ったのですが、整列ボタン(カスケード式、タイル式)のハンドラの中が空っぽなのです。ちゃんと動くのに。 それどころか、当該ボタンのOnClickイベントの宣言部分すら無い状態です。 これ、どういう仕組みで動いてるんでしょうか?ActionIvent(?)というのが関係してるようにも思われるんですが、なぞに包まれてしまいました。 自作のポップアップメニューに整列のイベントを割り当てたいと思っているのですが、どうすべきなんでしょうか?
814 :
813 :2006/03/10(金) 03:54:16
Iventじゃないですね。Eventです。
>>813 ActionプロパティやTActionListでも調べなさい
Delphi personal + Mysql は無理そうですね。 ありがとうございました。
818 :
813 :2006/03/10(金) 06:27:01
Actionプロパティに入れたら動きました。 簡単でした…
819 :
デフォルトの名無しさん :2006/03/10(金) 14:12:35
一回コンパイルして出来上がったプログラムをPageControlでTab形式に改良したい んですけど、一回配置したコンポーネントって後からPageControlに乗っけるのって 無理なの?新しくコンポーネント一覧からコンポーネント盛ってくればPageControlに配置 出来るけど、一回配置したコンポーネントをドラッグしてPageControlで出来たTabPageに 乗せてもPageControlの下に行っちゃってうまくいきません。これどうにかなりますか?
コンポ選択してShift+Delでカットして ページ選んでShift+Insでペースト
か、オブジェクトツリー上でD&D
普通にCtrl+Cでコピーして、Ctrl+Vで貼り付けだろ。
コピーて
普通キーバインドはDOS IDEだろ。
化石乙
そんな化石なのにまだくだすれレベルなのかw
828 :
819 :2006/03/10(金) 16:58:03
切り取ればいけるんですね!勉強になりました。さんきゅ
ウォシュレットはいいものだ
TMemo上で、Ctrl+Enterである処理をさせたいのですが、 procedure TForm1.MemoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key = VK_RETURN) and (ssCtrl in Shift) then begin 処理 Key := 0; とやると、Memo上に改行が入力されてしまいます。 改行を入力させずに処理を行う方法はないでしょうか?
831 :
デフォルトの名無しさん :2006/03/11(土) 01:57:52
IEなんかのブラウザのツールバーにDelphiで作ったアプリケーションを表示させたいんですが 可能ですか?
>>830 TAction の ShortCut に Ctrl+Enter を登録しておく。ってのは?
835 :
831 :2006/03/11(土) 13:22:20
StringGrid上でクリックされた時にそのCellの一番左( Cell[0,**] ) の中身をMemoに追加したいのですが、どのようにすればよいでしょうか? procedure TForm1.StringGrid1Click(Sender: TObject); begin Memo1.Lines.Add(StringGrid1.Cells[0, ]); end;
StringGrid1.Row
>>837 おお、できました。ありがとうございます。
>>834 いけました。
たったそれだけのことだったのかあ orz
840 :
デフォルトの名無しさん :2006/03/12(日) 14:27:52
リソースにManifestを埋め込んでTListViewを使っていると、フォームが開かれた時点でエラーが発生します・・ どうすればよいのでしょうか?
Manifestはずせばええんでね? うちじゃそんなエラーはでないけど
dynamicはvirtualは機能的に全く同じだからわからなくていいよ。 virtualだけつかっておけばいい。 大き目のクラスライブラリとかを設計するようになってから 違いを理解すればいい。
動的メソッドと動的メソッド
雑談がしたいだけなら別スレで
TSample = class(TObject) private FPoint: TPoint; public property Point: TPoint read FPoint write FPoint; end; TSampleクラスのオブジェクトoに対して、 o.Point.X := 100; とすると左辺値には代入できないとぬかしやがる。何とかしろ!
o.Point := Point(100, o.Point.Y);
MDIで現在表示されている子フォームの数を取得するにはどうすればいいですか?
MDIChildCount MDIChildren
851 :
849 :2006/03/12(日) 23:36:25
852 :
849 :2006/03/12(日) 23:43:34
見つかりました。 ありがとうございます!
・・シンプルなので充分ですから・・ HTTPでの同時ダウンロードのソースを誰か下さいませ・・ ってやはり虫が良すぎですか・・? 1スレッドのダウンロードでプログレスバーまではつけれたんですが Irvineのソースとかいろんなソース見ても マルチスレッドでのダウンロードが・・難しいです・・ あぁ欲しいです・・
はい、次↓
855 :
853 :2006/03/13(月) 05:05:52
マルチスレッドのダウンロード 何とか、自力で解決しそうです スレを汚して済みませんでした
自力じゃねえだろw Indyスレで教えてもらったんだろww
>>813 さん
MDIをいじっている方とお見受けして質問します。
作成された子windowはMDIChildren[]で取得できますが、閉じて消滅した子windowの情報の取り方はわかりますか?
消滅したのなら情報なんて存在しません
説明がマズかったです。 「どの子windowが閉じたのか、という情報の取り方」です。 すみません
子Window の Closeイベントを使ったらどうでしょ
子WindowのCloseですか。子windowが閉じるときに親フォームにCaptionでも発信するようにするってことですか? これって、子フォームのusesに親フォームを追加しとかないといけないですね。
誰かこの馬鹿つまみ出せ
ここはくだすれだぜ
荒れてきたな。
865 :
デフォルトの名無しさん :2006/03/13(月) 15:56:02
質問があります。 リストビューのカラムのRectを取得するにはどうすればよいでしょうか?
最悪owner drawのイベントハンドラで取れるがいまいちだな
>>865 Headerコントロールなんだからウィンドウハンドルを取得してあとはお好きなように。
▲▼描画するサンプルのURLあっただろ
Yahooメッセンジャー等のように、webカメラなどのWDMデバイスから 映像を取得するにはどうすると良いですか?
870 :
デフォルトの名無しさん :2006/03/13(月) 19:55:09
TCanvas で文字列の幅は TextWidth で求めることができますが、逆に 文字列と描画する幅から文字数を求める方法というのはあるのでしょうか?
WWWWWとiiiiiで全く違うから無理だろ TextWidth('WI')/2で平均求めればなんとなくの数字は出そうだが。
>>869 DirectShowを使うんじゃない?
>>870 ループ回して、1文字(or 予定描画幅/最大の文字の幅)からだんだん文字数を増やしてって、
TextWidth()で返ってきた幅>予定描画幅になった時点での文字数から1引けばOKだろ
どうせもっとエレガントな方法があるんだろうが知らね
固定ピッチフォントしかサポートしないって言うのが、一番真っ当な気がする。
875 :
870 :2006/03/13(月) 20:47:17
>>873 おおっ!そういう方法もありますね!ありがとうございます。
でもおっしゃる通りかなり力技っぽくて性能が少し心配ですね(^_^;
エレガントな方法があれば良いのですが、無ければこの方法を試してみます。
>>870 その方法を模索するより、それを使って何したいか聞いた方が答えられるかも心内
877 :
870 :2006/03/13(月) 20:50:57
>>874 固定ピッチフォントって言うのは全く同一幅なんですかね。
だとすれば計算が楽ですね。ちょっと仕様にするのに勇気がいる感じですが。
(色々と案があるものですね)
固定ピッチフォントしか許さないエディタって結構あるよ
879 :
870 :2006/03/13(月) 20:55:03
>>876 ああ、そうですね。すみません。Form に文字列を縦書きで描画
させたいのです。で、折り返す文字幅を計算したかったのです。
いい案がありましたらよろしくお願いします。
Delphi開発は子会社に移管されるみただけど、 もう駄目なんかね。 初心者Delphi使いとしては寂しい
デマを広めたいのか、本当にそう思ってるのかどっち?
違うのか?
質問です。 Delphi6などにあった「エラーの検索」はBDS2006にもありますか?
>>883 ある。
IDEの機能で無くなってそうなのは、プロジェクトで最終的にリンクしたユニットの一覧が見えるブラウザぐらいかな。
>>884 お、「指定アドレスに移動」ですね。見つかりました、ありがとうございます。
> IDEの機能で無くなってそうなのは、プロジェクトで最終的にリンクしたユニットの一覧が見えるブラウザぐらいかな。
こんな機能あったんですね。リンクしているユニット一覧を見るだけなら
JCLについてくるAnalyze Projectエキスパートでできそうですね。
>>870 前に似たようなことやった覚えがあるんで引っ張り出してきてみた。
var char_count: Integer; text_size: TSize;
GetTextExtentExPoint(Canvas.Handle, PChar(str), Length(str),
text_width, @char_count, nil, text_size);
strに文字列、text_widthに予定描画幅を渡す。
char_countに収まる文字数、text_sizeに実際の描画幅が返ってくる。
たしか第6引数で文字ごとの描画位置を受け取ることもできるはず。
Delphi6Personalを使っています。解説サイト及びヘルプで見たBitmap、Graphicというコンポーネントを使いたいのですが、パレット上に見当たりません。どこかにあるのでしょうか。 Imageはあるんですが…。 それともアップデートファイルに含まれているのですか?(今事情によりアップデートできず探せません) 使う方法を教えて下さい。
コンポーネントじゃなくてクラスなんだよ。
>>887 まずは解説サイトに書いてある通りに実行してみなさい
IEのアドレス等のComboBoxの▼って水色だよね。 でも、Delphi6のTComboBoxのは灰色なんだよな。ちょっと古臭いよね。 同じDelphi6でもTScrollBoxの▼は水色なのに。 TComboBoxでも水色のにできたら嬉しいけど、どうすればいいのかな?
プログラミングの勉強にと、目下テキストエディタを作成中です。 FontStylesについてうかがいたいんですが・・ たとえば、memoコンポのFontStyleを「太字、イタリック」に変えたいときは、 var FontStyles: TFontStyles; begin FontStyles := [fsBold, fsItalic]; memo1.Font.Style := FontStyles; とでもすると変えられるのは確認できたのですが、逆に、そのmemoがどれとどれのFontStyleを持っているのか抜き出す方法が思いつきません。 なんのために抜き出したいかというと、レジューム機能をつけるためです。 どうかお願いします。
if fsBold in FontStyles then
>>893 さん、ありがとうございます。
いま丁度、in やExclude、InCludeなどの説明が書いてあるサイトをみつけ、実験していたところです。
なんとかなりそうです。
Fontをまるごとファイルに保存するという荒業はまだできそうにないですが。
Delphi TFont 保存 でぐぐれ
Delphi6 Personalでネットワークの通信速度(上下) をリアルタイムで取得するにはどうすればいいですか?
ネットワークの通信速度って何? netstat -s みたいな話?
すいません Sent : ***kb/s Receive : ***kb/s ってな感じの回線速度です
899 :
デフォルトの名無しさん :2006/03/14(火) 09:38:39
テキストファイルを1行ずつ読み込む処理に TFileStream→TStringListという手法を使用しています TFileStreamはファイルの内容をメモリに保持するので 扱うファイルが大きい場合には適さない(AssignFileを使用した方がよい) らしいのですがこれは事実なのでしょうか?
安直に考え付いたのは netstat -s>result.txt を実行して result.txtの中からPackets Receivedを探すかな。 あとはIndyのSNMPコンポーネントを使ってMIBクエリを発行して・・・かな。
>>899 ・TFileStreamはファイルの内容をすべてメモリに保持したりしない。
・TFileStreamでテキストファイルを一行ずつ読むことはできない。
・つーかTStringList.LoadFromFileだけでいいだろ。
905 :
899 :2006/03/14(火) 10:06:55
・TFileStreamはファイルの内容をすべてメモリに保持したりしない。 そうですか、一安心 ・TFileStreamでテキストファイルを一行ずつ読むことはできない。 そうですね ・つーかTStringList.LoadFromFileだけでいいだろ。 それは出来ないのです
906 :
870 :2006/03/14(火) 10:27:13
>>886 GetTextExtentExPoint なる API があったとは。検索したのですが、
見つかりませんでした。サンプルコードもご提示していただいて参考になります。
ありがとうございました。
908 :
デフォルトの名無しさん :2006/03/14(火) 13:20:06
VS.NETのIDEの至る所に使われているウィンドウで、 マウスカーソルを近づけるとビョーンって現れたり、 またマウスカーソルを離すと隠れるウィンドウがあり ますけれど、あれってDelphiから使えるようにならな いのでしょうか?
>>908 VS.NETのがどんなのかわからんが、
MOUSEENTERやMOUSELEAVEメッセージでできるんじゃないのか。
そんなんじゃないよ。一度使ってごらん。コード補完やら、語句補正やら、 自動文法校正やら VC# のIDEのコードエディタ部分ってすごいよ。
911 :
908 :2006/03/14(火) 14:06:24
>>909 自分でプログラミングをしなくてもカーソルを近づけたり
すると勝手に現れたり隠れたりする便利なウィンドウが
あるんですね。
名前は知りませんけど。
PaintBoxがマウスをキャプチャ出来る範囲を制御したいのですが何かいい方法はないでしょうか?
913 :
デフォルトの名無しさん :2006/03/14(火) 18:08:55
ライセンスキーっての? あれ登録してなかなか来なかった香具師居る? なんか1週間たっても来ないから不安になってきたw
数秒で来た
915 :
デフォルトの名無しさん :2006/03/14(火) 18:45:09
>>914 さっきもログインしてsubmit押してきたけどやっぱり来てないな
アドレス間違ったりしてないのになw
さーてVBに移るか。
未来のないVBよりせめて.NETに移れよw
>888-889 サンクス、理解できました。
JVCLについてまとめてよだれかー。 Delwikiいっちゃたしさあ
MegaDemoをみれば大体分かるよ。
避難所は画像張れないから、まとめようにも難しいよなぁ。
>>915 俺、3日前に同じことで悩んでた。
submitのあと、メール送信のリンクをクリックしてないんじゃない?
925 :
デフォルトの名無しさん :2006/03/15(水) 09:09:24
>>923 BDNが日本語化するまではブログに書くしかないね。
927 :
デフォルトの名無しさん :2006/03/15(水) 11:39:04
>>904 2K Xp だけででいいのなら・・・AlphaBlendってのでフォームの透かしはできるけど
こんな程度を要求してU訳じゃぁないんだろうなぁ(w
928 :
904 :2006/03/15(水) 11:44:55
>>927 ではないです・・・
「めもすけ」を使っていただいたら分かると思うのですが、
文字以外の部分は、完全に透けて、下のウィンドウが見えてますし、
アクセスできます。不思議です・・・
最初は文字の形のリージョンかとも思ったのですが、Ctrl+Aを
入力などして、文字を選択した状態にすると、選択していない
背景だけが透けるようになり、処理も重かったり、ちらついたり
しないので、違うかなぁと。
最近Delphiを触り始めて今 Delphi6 personal(無料版)をいじっているのですが、 このバージョンでは作成したアプリケーションを 商用利用として配布できないようなのですが、 商用利用として配布するためには Delphi7のPersonalかProfessionalを購入すればよいのでしょうか?
>>929 Professional 以上が必要です。
Delphi 7かDelphi 2006がお勧めです。
仮に商用利用したとしてもBorlandから訴えられなければ全く問題ありません。 各自の判断で行動しましょう。
>>931 通報しま(ry
おとなしくProfessional版買うか、VSに移れ
>>928 TransparmentColorでできるでしょ。。。
934 :
904 :2006/03/15(水) 12:47:42
>>933 ではなくて、例えばデスクトップの上に「めもすけ」を置いていると、
デスクトップにマウスでアクセスできるのです。
>>934 他人には試してくれっていっておきながら、自分では試す気ないのね。
936 :
904 :2006/03/15(水) 13:02:23
知らんけど透明度100%の所はマウスクリックとかも含めて抜きになるって話じゃないの
>>937 透明度というかTransparmentColorで透過したところは、マウス入力も突き抜けるね。
>904は死んでいいぞ。
941 :
デフォルトの名無しさん :2006/03/15(水) 13:56:06
>>924 はーっ!!そうだったのか!
英語ややこしいなw
君のブログは新し杉じゃまいか?
945 :
941 :2006/03/15(水) 22:19:08
やっとインスコし終って始めたんだがコーディングワカンネw 先ず練習がてら遣ってみたいんだけどお勧めサイトありますか?
Del6Personal TPanelのEnabledをFalseにすると、その子コントローラの EnabledもFalseになるけど、外見はそのままで灰色になりません。 灰色にするには子コントローラのEnabledを一つずつFalseにする以外の 手段はないの?
ない
まあ、こんな関数を作っておけば一括で設定はできるよ。 procedure SetEnabledChildren(AControl: TWinControl;Value: Boolean); var i: Integer; begin AControl.Enabled := Value; for i := 0 to AControl.ControlCount - 1 do begin if AControl.Controls[i] is TWinControl then begin SetEnabledChildren(TWinControl(AControl.Controls[i]), Value); end else begin AControl.Controls[i].Enabled := Value; end; end; end; ただし、もともとEnabledがtrueのものとfalseのものが入り交じってるのであれば、 戻すときのためにtagプロパティに状態を保存しとく等の対処が必要になるけど。
TPanel継承してEnabled切り替えのとき子コントロールもいじる機能つけちゃえばいい
DDDDって.netに対応してないですよね? .net以降、Delphiに対応してるDirectXコンポは国産ではなかったような… 確実に熱が冷めてる証拠なんだろうけど。
953 :
129 :2006/03/16(木) 04:27:16
おい!!!!
>>943 のブログの作者!!!!
あんたブログにすげーエレガントな解決方法書いてるじゃないですかぁ!
おかげで完璧に解決しましたよ!
あんたマジ神だな
>>952 >.net以降、Delphiに対応してるDirectXコンポ
リンクきぼん!ネイティブならD2005対応たまに見るけど.NETは見たこと無い
ずっとハマってたのかw まぁなんにせよよかったな
Managed DirectXって奴を使えばいいんじゃないの? Delphiからでも使えると思うけど。そういう話じゃないのか?
DelphiXやらみたく簡便じゃねーべさ くだすれ見にくるようなヤシらにManagedつっても混乱するだけ
あえて.NETでDirectXをやるという需要が読み切れない
>>958 確かに・・・
でももし.NET用のDirectX対応ライブラリがあれば、使えそうなもんだけど。あるのか?
961 :
デフォルトの名無しさん :2006/03/16(木) 08:30:33
DirectX7以前はやたら面度くさかったよね。 Managedもそうだけど、Directx8以降はコンポーネント化するメリットが大分薄れてきてるんじゃない? ロストしたときに再生成してくれるのは便利かな。
黒田○○さんや堀○○さんはいまごろどうしてるんだろう? もうDelphiはいじってないだろうな。
964 :
デフォルトの名無しさん :2006/03/16(木) 10:59:11
すみませんが…Delphiでスキンを変えたりする カレンダーは作れますか?
余裕で作れますが
やる気と根性があれば作れます
967 :
デフォルトの名無しさん :2006/03/16(木) 15:28:15
Delphi7でListViewをOwnerDrawで使ってますが、 XPManifestを載せるとOnCustomDrawItemでDefaultDrawをFalseに しても勝手にキャプションを描きやがります。 誰か解決できる兵はいらっしゃいませんか?
XPManifestを載せない
969 :
967 :2006/03/16(木) 16:12:15
まったく試してないけど、さらに上描きしてやれ!
971 :
967 :2006/03/16(木) 18:58:28
TList型オブジェクトlistはA型のオブジェクトのポインタを要素に持っています。 また、A型のポインタpはlistの要素のどれかで初期化されています。 今、listから任意の要素を削除しかつその参照先メモリを解放した時、 それがpの参照先だった場合、pはnilではないけど無効なポインタになります。 それではまずいので、そういう時はpに定数オブジェクトのアドレスを入れて おきたいのですが、どうやってpが無効なオブジェクトなのか判断すればいい のでしょう?listの要素にpがあるかfor文で全要素比較する以外のやり方が あれば教えて下さい。
974 :
訂正 :2006/03/17(金) 00:43:39
>pが無効なオブジェクトなのか pが無効なポインタなのか
975 :
973 :2006/03/17(金) 00:54:48
書き忘れましたが、削除された要素のポインタが分からない場合です。
>973 無効ポインタが存在する状況を避けた方簡単。 Listから要素を削除するときpと要素をを比較して、 一致するときにはpにNULLを代入しておく。 あとはpを使うときにNULLか確認すれば良い。。
>>973 TListの変わりにTObjectListを使う
>976 どうも。参考にします。
>>977 そうじゃなくて、あるオブジェクトが破棄された時、
それを参照しているポインタ変数をnilで初期化したいって事だと思いますよ。
無理だな。 オブジェクト自身に参照カウンタ持たせて自爆させるか interface使っとけ。
答え方がおかしいか。 オブジェクト自身にDisabledフラグでも持たせて そのオブジェクトがもう死んでいるかどうかを判定できるようにするか あるいはオブジェクトに参照型変数のポインタもたせてnil突っ込ませるとか。
間接的に参照するとデザパタっぽい
TListViewでアイテム挿入中の描画を止めたいんですけど それらしいプロパティが見つかりません。 もし、ありましたら教えていただけないでしょうか?
TListItems.BeginUpdate
986 :
デフォルトの名無しさん :2006/03/17(金) 10:11:28
RichEditでTabキーを押したとき、6桁くらい移動するんですが、これを 2桁とか4桁とかに変更する方法というのはあるのでしょうか。
出来ないことはないけどかなり面倒だったと思う Tabキー押されたら半角スペース2個なり4個なり入れるのが簡単でいいと思う
これでどうだ LPARAMはIntegerのアドレスを渡す必要がある procedure TForm1.Button1Click(Sender: TObject); var TabStop: Integer; begin TabStop:= 4 * 2; SendMessage(RichEdit1.Handle, EM_SETTABSTOPS, 1, LPARAM(@TabStop)); RichEdit1.Invalidate; end; それにしても、勝手に半角スペースに変換とは…すんげえ糞仕様を勧めるものだな
最後の1行がなければカッコ良かったのに
誰でも言いたくなる気がする
わからないならレスすんなってことだろ。
992 :
986 :2006/03/17(金) 12:20:03
>>988 出来ました!ありがとです。できなければ(面倒だったら) 987 さんの
やり方でやろうかと思っていたのです…
>>973 Handleという概念を使う
ゲームなんかだとよく使うよ
var a: THoge;
begin
a = THoge(Handle.ToObject)
if Assigned(a) then
a.Hoge;
VB.NETなら簡単なのにね。
998
999
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。