1 :
デフォルトの名無しさん :
04/04/03 23:47
2 :
デフォルトの名無しさん :04/04/03 23:48
3げっと。
>>1 乙です
で、早速ですが
procedure TForm1.Button3Click(Sender: TObject);
Var
FS: TFileStream;
S: String;
begin
If OpenDialog1.Execute Then Begin
FS := TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
Try
FS.Read(PChar(S)^,FS.Size);
Memo1.Text := S;
Finally
FS.Free;
End;
End;
end;
1バイトも読み込まれず、Read を ReadBuffer に変えると「ストリームの読み込みエラー」になります。
Read する直前に FS.Size を調べたところファイルは正しく開かれているようなのですが…
一体に何が間違ってるのでしょうか?
ガン( ゚д゚)ガレ
if FS.Size > 0 then begin SetLength(S, FS.Size); FS.Read(S[1], FS.Size);
>>6 出来るようになりました。
ありがとう御座います。
何で Lines.LoadFromFile を使わないの?
>>8 遅いからじゃないの?
オレは使わんなぁ。
さらに言うと、TFileStreamじゃなくてTStringlist使うな。オレだったら。
>>9 > 遅いからじゃないの?
ほんとにおそいの?
Lines.LoadFromFile() は TFileStream を使って LoadFromStream() してる
し、TStringList を使うのより、速いのでは?
Delphiとは直接関係はないのですが Indyコンポーネントについて質問させてください。 IndyはTCPを利用した通信において、ブロック単位を保証してくれるのですか? WriteBufferを利用してクライアントが800B送ったとしたら、受信側である サーバーは受信バッファが800Bに達するまで待ってくれるのですか? (800B送ったら、受信側も必ず800B受信できることを保証するものですか?) どうしてもTCPでパケット単位の処理をしたいので… 教えてください
>>8 いえ、Memo1に出しているのは読み込みの確認の為で、実際にはメモリ内での処理だけです。
>>9 TStringsのソースでは
>>10 のようになっていたので。
>>12 どうも余計な口出しをしたようで失礼しました。
ちなみに私は可変長のバッファを扱う場合、原始的な動的変数を使うことが
多いですね。文字列しか扱わない場合は TStringList ですが。
動的変数は全部手動でやらないといけない反面、今回のような勘違いによる
トラブルは起こりにくいと思います。
何が一番速いかはよくわかりませんです。
> 動的変数は全部手動でやらないといけない反面、今回のような勘違いによる > トラブルは起こりにくいと思います。 動的変数って何? 動的配列のこと? なら、SetLength() しなきゃならないのは 同じでは?
manifestを組み込んだソフトにおいて、 設定でビジュアルスタイルの適応の有無の切り替え方のできる方法があれば教えてください。
クラシックスタイルとXPスタイルを切り替える
>>16 そういう意味ではなくて…
秀丸の動作環境設定の、「XPのVisual Style表示」
のような動作を実現したいです。
18 :
デフォルトの名無しさん :04/04/05 19:16
DelphiでAownerになるのはコンポーネントか親フォームですよね? VCでこれに代わるものは何でしょうか? Delphiで引数が(AOwner:TComponent)となっているのを VCで使いたいんです。
無理 NULLでも突っ込んどいたら。
>>14 動的変数は GetMem で作成する名前なしのメモリ空間のことです。
作成や解放などメモリそのものの管理を手動で行わないといけない代わりに
どんなデータでも格納することができます。
長い文字列や動的配列も動的変数の一種ですが、メモリ管理は Delphi が
勝手にやってくれます。
NewしてTListに格納。大好き
>>20 レスさんくす
> 動的変数は GetMem で作成する名前なしのメモリ空間のことです。
それを「動的変数」というのははじめてききました。
> 作成や解放などメモリそのものの管理を手動で行わないといけない代わりに
> どんなデータでも格納することができます。
はい、そうですね。書き込み・読み出しは Move() でやるわけですね?
わたしは普通そういうときは、TMemoryStream のインスタンスをつくって、
SetSize() で領域を確保します。そうすると、Write() や Read() などの
メソッドがつかえたり、Position プロパティーで任意のオフセットに移動で
きたり、ファイルへの読み書きも簡単です。またインスタンスを Free すると
メモリの解放も自動的に行えます。以前は GetMem() FreeMem() を愛用して
ましたが、いまはもっぱら TMemoryStream を使っています。
今日Del6 personalをインストールしました。 初めてのプログラムとしてメモ帳をタブ化したいと思っているのですが、ずぶの素人の 私にでも出来るのでしょうか?
>>24 本物のメモ帳をタブ化したいの?
それともタブ型のメモ帳クローン?
まぁどっちもできるよ。
>>25 さん、どちらの方が簡単でしょうか?
なにぶんプログラムなどはじめてでして。
ガン( ゚д゚)ガレ
>>26 はじめてなら両方とも難しい。
まずは普通のメモ帳をつくりなされ。
>>26 文字コードとかにこだわらないならメモ帳もどきの方が簡単かな。
チュートリアルはやるべきかやらざるべきか(藁 せっかく門戸叩いても、「無いものを使え」って書いてあるチュートリアルってのもなぁ。 まぁ過ぎた話ではあるが。 幸い、オレはやらなかった。
XP RC2 で修正されていますから、それまでお待ちください。
やっぱりどうにもならないよね・・・待つしかw 別マシンでしばらく組むことにします。
XP SP2 はいわゆる「ベータ版」なのですから、これくらいの問題は予想しておくべきでしょう。 で、SP2/RC1 をアンインストールすれば問題ないでしょ? もしあなたが Windows Beta ユーザーなら RC2 をダウンロードできますが. OS のベータ版なんて一般公開するもんじゃないだろうに > MS
XP SP2はアンインストするとIEに不具合出るらしいです。
じゃ、己の不幸を呪うがよかろう。 RC2 は一般公開されないから、もう RTM まで待つしかないか。どれくらいかかるかな。
一般公開するらしいよ?
XP SP2 RC2 も公開するの? 今の時点で日本語版が出てないが時間的に間に合うのかな?
>>38 えーと、今使っている XP SP2 RC1 のビルド番号はいくつですか?
コントロールパネルのシステムで確認できると思います。
D6 Update#2 を当てない状態だと RC1 でも動くことを確認しました。 BorDbg60.dll を使うようにすれば、当面は回避可能。 さてさて。
はいよ。 [HKEY_CURRENT_USER\Software\Borland\Delphi\6.0\Debugging] "Dbk ClassID"="{092E9CC0-071B-11D3-83A5-00C04F6BC736}" 結果教えてね。 RC2 が出たらこのレジストリを取り去ってください。
43 :
デフォルトの名無しさん :04/04/06 16:17
海外のコンポでDBCtrlGridを継承したものありますか? 付属のものだと、ちょっと不満足なので DBGridを拡張したコンポですといろいろと見かけますが DBCtrlGridを拡張したコンポは、どこにもみあたらなかったので・・・
>>43 DBCtrlGridは使い勝手よくないからねぇ。DBCtrlGridじゃなければならない
理由は何かな?
「もしGrid上に任意のコントロールが乗っていることが必要」と言う理由ならば
ここがお勧めです。
http://www.devexpress.com/ CheckBox, LookupComboBox, RadioButton, カレンダー, ボタン,
MaskEditなどを乗せることができるし、1レコードで2行以上の
行を表示することもできる。
これ以外の理由でDBCtrlGridを使う理由があったら教えて。
ご回答、ありがとうございます QuantumGrid、いいですよね〜 これと似たのでTMSのGridもありますね 実は以前、DBGridの継承コンポを使い、入力フォームを作っていましたが DBGrid継承のコンポーネントですと、個々の入力の制御が(特にフォーカス関連) インプレースエディッタがらみ(しかもprotectedだし)でいろいろ弄るしかなくコードも乱雑になってしまったもので・・・ また、行レベルで各コントロールの表示の有無、フォーカスの順序などが変わるような機能を付けた場合 DBGrid継承のコンポですとなかなか難しいような気がします そこで、DBGridからDBCtrlGridを使い、各DBEditに細かい事を書き込もうと思ったのですが 普通はそう言うことしないものなのでしょうか? (でも、標準のDBCtrlGridだといろいろ問題が・・・ スクロールのバグやXPStyleのバグやらいろいろ不都合があったので) 売上伝票などの複数のレコードを登録する必要が有る場合(現在のData構成がそうなってます) どういったコントロールで入力するのが普通なのでしょうか? なんだか、まとまらない文章でごめんなさい、、、
2000/xpで動かしているDOSアプリの仮称:abc.exeっていうのが あるのですが、button1で終了、button2で再実行させたいのです。 DOSプロンプトから実行しているときは、停止させるには ctrl+cを実行する以外に手はありません。 諸先生方、なにとぞHELPを。
DOSアプリでボタン?
ctrl+cをエミュればいいじゃない? keybd_eventで調べれ
button1 を押したとたんフォーカスが移動して keybd_event が効かなくなるんじゃ・・・・
質問します。 dprファイルで宣言した変数はそのファイルからusesしたユニットで 扱うことはできないんですか?
>>51 似たような質問をしたら、自分で調べろと言われたよ!
>>51 ユニットの方でプロジェクトファイルを uses できないので使えない。
そもそもプロジェクトファイルだけがメインルーチンなのに、サブルーチン
に相当する *.pas のほうからアクセスするのは変。
そう。別にユニットを作って宣言すればいいだけの事だと思う。
>>52 超初心者という言葉に甘んじてしまいました。
軽率な行動を取らぬようにします。
>>53 >>54 そのように指摘していただくともっともな話だと思えます。
勉強になりました。どうもありがとうございました。
>>50 BringWindowToTopとかSetForeGroundWindowってDOS窓には使えへんの?
アクティブになる前にSleep(100)とか挟まないとうまくいかない
>>56 うまくいくならそれでいいじゃないか(・∀・)ニヤニヤ
------------------ これ以外にもレジストリの書き換えで Windows に DLL を開放させる 方法もありますが、この場合に DLL の開放処理が呼び出されるかどうか は未確認です。方法は AlwaysUnloadDll をキーに google して見て ください。 ------------------
ttp://www.h3.dion.ne.jp/~tokky/p21.htm より。
...つまり、かつて多くの人がメモリの無駄をなくしたいと思っており、プログラマーの間では知られていた
「シェルが利用してる DLL を解放する設定」の話が、いつしか「不要な DLL をメモリから解放する」という
誰もが見ていた夢の話にすりかわっていたのではないか。そんなようなパターンで広まった俗説ならいくらでも
ありそうである...
------------------ ライブラリのブロックの実行部には,ライブラリの初期化コードを記述します。 このコードは,ライブラリがロードされるたびに一度実行されます。通常,ウィ ンドウクラスの登録や変数の初期化といった処理を行います。ライブラリ初期化 コードには,ExitProc 変数を使って終了手続きを組み込むこともできます(こ の詳細については,終了手続きを参照してください)。この終了手続きは,ライ ブラリのアンロード時に実行されます。 ------------------
D7 ヘルプより ExitProc 変数は下位互換性のために残されています。かわりに finalization を使用してください。 ExitProc はパッケージと互換性がないので,かわりにユニットの finalization 部にコードを追加することをお勧めします。 DLL 内部では,かわりに DLLProc 変数を使用できます。
実際のサンプル DLL のデバッグ時には、DLL にたいして「TD32 デバッグ情報を含める」をチェックすること library Project2; procedure Test; begin end; exports test; procedure DllProcedure(Reason: Integer); begin end; begin DllProc := DllProcedure; end.
nandaka DQNdousi no yaritorimiteru to tukarerune
>>63 ここに書き込みたくなる気持ちは分かるよなぁ
質問いいかな。 肛門ダイアログって実装できますか? 変な質問でごめんね
(;´Д`) ?
パスワードを*で表示するやつのことじゃない?
コモンダイアログですた。
ワロタ
>>65 米MSに就職してコモンダイアログを作って下さい。
>>65 TFileOpen とかで使えるけど?
コモンダイアログを拡張したいとか? Dialogs.pas のソースを見ればやり方が書いてある。
肛門ダイアログの拡張のやり方なら別のスレへ。
72 :
デフォルトの名無しさん :04/04/08 09:29
超初心者のスレをみて DQNばっかしだというほうが おかしい。
メモ帳の色をしろ意外にして、字を大きく書くと字の周りに白い点々が でて汚いのを直す方法を教えて下さい。
> メモ帳の色をしろ意外にして、字を大きく書くと これはどうやってやるの?
>>45 >そこで、DBGridからDBCtrlGridを使い、各DBEditに細かい事を書き込もうと思ったのですが
>普通はそう言うことしないものなのでしょうか?
DBCtlGridは挙動不審すぎて業務には使えないです。また、これに載せることができる
コントロールも限られているのでちょっと使いにくい。
>売上伝票などの複数のレコードを登録する必要が有る場合(現在のData構成がそうなってます)
>どういったコントロールで入力するのが普通なのでしょうか?
「普通」はどうしているんだろうね。自分はQuantumGridを割と早い時期から
使用していたからほかの方法が思いつかない。これが一番ベストだと思っています。
>>74 再現しない。ディスプレイを買い換えるといい。
>>78 「ディスプレイを買い換えるといい。」は
「ビデオカードを買い換えるとよい。」かな?
>>74 もしできるなら、問題と思うコントロールのキャプチャ画面をどこかにアップして
URL をここに貼りなさい
>>76 そうですよね、DBCtrlGridでコーディングしている最中に
いかに使いにくいかがわかってきました。
わたしも以前は他社の海外コンポDbAltGridというのを使って開発しておりました
なぜならこのグリッドもワンレコードに複数行表示可能で明細の入力に適していると思ったからです。
しかし、どうしてもprotectedのインプレースエディタにアクセスするのが引っかかって
DBCtrlGridに浮気してしまいました
でもDBGrid継承コンポで、開発をやり直したほうがよさそうですね
今回のご回答で目が覚めました
貴重なご意見、本当にありがとうございました
Formが最小化、最大化状態の時に、 元に戻した位置(Left,Top)、サイズ(Width,Height)を知りたいんですが方法が分かりません。 どなたか教えてください。お願いします。
>>81 GetWindowPlacement っていうAPIがあるよ。
ありがとうございます。
MDIの子フォームを常に最大化の状態にしておいて、最小化もサイズ変更も できない状態(すなわち×しか使用できない状態)にするにはどうすればよいでしょうか。 以下のコードを書いて「サイズ変更」ボタンを使用不可にしようと試みたのですが、 使用不可になりませんでした。 procedure TfrmMain.FormActivate(Sender: TObject); var Menus: HMENU; begin //システムメニューの「サイズ変更」を使用不可にしてみる Menus := GetSystemMenu(Handle, False); DeleteMenu(Menus, SC_RESTORE, MF_BYCOMMAND); DrawMenuBar(Handle); end;
TextOutをヘルプで調べたら下のようなサンプルがありました。 (コメント消してあります。) GetClientRect(hwnd, &r); BeginPath(hdc); TextOut(hdc, r.left, r.top, "Windows NT Rules Well & Wisely", 4); EndPath(hdc); SelectClipPath(hdc, RGN_AND); FillRect(hdc, &r, GetStockObject(GRAY_BRUSH)); 最後灰色で塗っていますが、他の色で塗りつぶすにはどうしたらいいですか?
Form1.Canvas に対して Delphi ふうに書けば procedure TForm1.Button1Click(Sender: TObject); begin with Canvas do begin Font.Size := 36; BeginPath(Handle); TextOut(0,0,'Windows NT Rules Well & Wisely'); EndPath(Handle); SelectClipPath(Handle,RGN_AND); Brush.Color := clRed; Windows.FillRect(Handle,ClientRect,Brush.Handle); end; end;
現在、D6Personalでいろいろ勉強中なのですが、 参考にAge2chのソースを見ているとなにやらConfig.Save;とかがありまして、、 なんか管理しやすそうな設定の保存の仕方をしているのですが、 これと同じような処理のさせ方はどうすればいいのでしょうか(;´Д`) 試行錯誤で試してみたり、あちこち調べてみましたが結局できませんでした。。 説明下手ですみません。。。
> これと同じような処理のさせ方はどうすればいいのでしょうか(;´Д`) ソースあるなら、それと同じようにするとよい、のでは?
すいません、言うの忘れてました。 ソースで var Config: TAgeConfig; この部分で何故TAgeConfig;と宣言できているのかわからんのです。。 _| ̄|○ |||
var Number: Integer; の意味はわかるのか? それとも TAgeConfig というクラスがどこで定義されているのかがわからない?
personalじゃ定義へ簡単にジャンプできねえからな。
>>91 あー、どこで定義されているのかわからないという感じかもしれません。
クラスとかが関係しているんですね、ヒントありがとうございます。もう一回調べてきます。
検索くらいはできるだろうに。 90 さんがどこで躓いているのかがわからないとなんともいえないな
UConfig.pas を見なさい。
>>93 たぶん、いろいろ大事なことがまだ学習できていないのだと思いますが
ゆっくり学んでください。
>>94 いや、それがTAgeConfigで検索かけても見つからなかったんです。。
>>95 おぉぉ、ありがとうございます。まさしくそれっぽいです。
別のファイルに書かれていたのですね。。がんばります。
あとは main.pas の uses 節に UConfig とあることを見つければ、 分割コンパイルとユニット単位の名前空間の概念が身につくでしょう。
数字を0埋めしたいのですがどうしたらできますか? 7->07というように。
ファイル名変更にエディタボックスを使ってるのでファイル名に使えない文字は無効化しようと if (Key='\') or (Key='/') or (Key=':') or (Key=',') or (Key=';') or (Key='*') or (Key='?') or (Key='"') or (Key='<') or (Key='>') or (Key='|') then begin Key :=#0; Beep; end; こんなことやってる漏れってバカかな。。_| ̄|○ |||
>>99 Format('%.4d', number)
で4桁分、0 で埋める。0007 0012 0345 1234 56789 という感じになる
>>101 良いのでは?目的を満たしているなら実装はどうやっても良いわけだし。趣味プログラマーならなおのこと。
ただその実装だと、コピー/ペーストしたときにチェックできないよ。
>>103 ガーン、コピペでできちゃうのか。。
もし使えない文字があったら使えない文字を空白に置き換える
という処理はどうすればいいのでしょうか。。
検索してみても複数の文字を置き換えられるような関数ってないんですよね。。
>>101 俺だったら警告ダイアログ->再入力にするけどな。
入力内容を勝手に変更するのはよくない、と思ってるんで。
>>100 さん、
>>102 さん、レスありがとうございます。
102さんのを探してたのですが、0埋めとかでもなかなか出てこなくて・・・
100さんのはシンプルですね。初めて見ました。
ただ、関数で値が返ってくるほうがうれしいので、102さんの使わせて貰います。
ありがとうございました。
>>101 ちなみに以下のように『集合』を使って表現することもできます.
if Key in ['\', '/', ':', ',', ';', '*', '?', '"', '<', '>', '|'] then
(以下同じ)
Keyの値が'\', '/', ':', ',', ';', '*', '?', '"', '<', '>', '|'のいずれかと一致するならTrue,そうでなければFalseです.
(詳しくはヘルプの『集合型』をご覧ください)
>>104 そのものズバリの関数や手続きがないときは自分で目的の処理コードを書きます.
といってもそんなに難しいことではありません.
以下は無効な文字を空白で置きかえる関数の例.
const cInvalidChars = ['\', '/', ':', ',', ';', '*', '?', '"', '<', '>', '|']; // 無効な文字たち(※この例では何回も使うので定数にした)
function FillInvalidChars(const s: string): string;
var i: integer; // ループ変数
begin
Result := s; // 引数をいきなり戻り値にコピー
for i := 1 to Length(Result) do
if Result[i] in cInvalidChars then // Resultのi番目の文字が無効な文字たちに含まれるなら…
Result[i] := ' '; // Resultのi番目の文字を' 'で置きかえる.
end;
※参考>101のように無効な文字を削除する関数の例.(定数宣言は上と同じ)
function DeleteInvalidChars(const s: string): string;
var i: integer; // ループ変数
begin
Result := s; // 引数をいきなり戻り値にコピー
for i := Length(Result) downto 1 do
if Result[i] in cInvalidChars then // Resultのi番目の文字が無効な文字たちに含まれるなら…
Delete(Result, i, 1); // Resultのi番目の文字を削除
end;
>>107 うわぁ、なんかすごいですね。
一つ一つ勉強したいと思います。ありがとうございます。
今日、BorlandDelphiPersonal6.0をDLしたばかりなんですが、ヘルプに載っている クイックスタートのトコのチュートリアルをやりながら勉強してるんです さっそく詰まったんですが質問です・・ 「1コンポーネントパレットの[Additional]ページにある ActionManager コンポーネントをダブルクリックして,」 ↑ これが見当たらないんですがActionManagerはどこにあるんでしょう? もしくは変わりになるモノありますか? ヘルプの先頭にこんなの書かれちゃってたのでヤパーリ無理でしょうか・・? 「ここで取り上げている機能の一部は Delphi の Personal 版では使用できません。」 :・゜・(ノД‘)・゜・。
110 :
デフォルトの名無しさん :04/04/10 23:44
>>109 パレットの上にカーソル置いたら名前出るから総当りで探せ
Personalにもちゃんとあるから
別にこれを使わなくても十分アプリケーションは構築できる。 練習ならば、まずはメニューだけでツールバーなしで作ってみれ。 ちなみにメニューはTMainMenu[Standard]、ツールバーはTImageList+TToolBar[Win32]を使えば実現できる。 フローティングとか実行時編集とかそういう機能はないが、無ければ困るような機能でもないし。
ネタは他のスレでやってくれんか?
ActionManager コンポーネントは、Delphi 6 Personal には含まれません。
PersonalにはActionListしかないんじゃなかったっけ? ActionManagerあるの?
だから「ネタ」だと…。 悪質だぞ>答えてるヤツ
>>107 EditChengeに
if SameText(Edit.Text,DeleteInvalidChars(Edit.Text))=False then
begin
ShowMessage('ファイル名に使えない文字が含まれていました。'+ Char(13) +
DeleteInvalidChars(Demo.Text) + 'に変更します。');
Edit.Text:=DeleteInvalidChars(Edit.Text);
end;
こんな感じに実装してみました。ありがとうございます。
>ActionManager コンポーネントについて
>メニューの使用頻度に対応してメニュー項目の表示・非表示を切り替えたり、
>カスタマイズ機能を備えたツールバーを設計するための ActionManager コンポーネントは、
>Delphi 6 Personal には含まれません。製品機能の最新情報については「Delphi 6 機能一覧」を
>ご覧ください。
>※「クイックスタート」中に誤った記述があることをお詫びいたします。
>>109 ブラクラじゃないから踏んでも大丈夫だよ
>>123 それ、オレ。
そーいや、既に書いてたんじゃないか(藁
コンポーネントのインストールができません。 メニューバーの「コンポーネント」 → 「コンポーネントのインストール」で インストールを試みたのですが、[致命的なエラー]ファイル'DsgnIntf.dcu'が 見つかりませんと出てしまいました。何かアドバイスをよろしくお願いします。
>>125 D6 ならヘルプの「Delphi6へのアップグレード」−「互換性の問題」−
「DsgnIntfの名前変更および関連する変更」のところ嫁。
>>126 いま読んでみましたが意味がさっぱりわからないのでコンポーネントの
作者さんに伺ってみようと思います。いいご回答ありがとうございました。
簡単なタブ型テキストエディタを作ろうと思うんですが、参考になるソースを 置いてるところを知りませんでしょうか?
129 :
デフォルトの名無しさん :04/04/11 12:27
>>128 タブ化の部分を参考に、ということだと勝手に解釈して
どっかにタブブラウザをDel6perで作るチュートリアルがあったはず。
ググってくれ。
>>128 SynEditのDemoの中に有ったと思う。
>>127 uses節にある DsgnIntfを削除して代わりに
DesignEditors, VCLEditors, RTLConsts を追加すれば
大抵の場合はうまくいくはず。
ヘルプにそう書いてあるはずなんだが・・・
アドバイスをくれた美奈さん、ありがとさんです。 これで何とかなりそうです。
134 :
デフォルトの名無しさん :04/04/11 22:53
Delphiで作成されたブラウザ(2ちゃん専用はのぞく)ってどんなものがありますか?
Form1をTransparentColor,TransparentColorValueで透明にした時に、 Form1のParentをForm2のPanelなどに変えると、 透明で無くなってしまうのですが、 これを透明のままにする方法がありましたら教えてください。お願いします。
Delphiで作成されたブラウザ? IEコンポーネント使ったやつ? ActiveX使ったやつ? Delphiなのに他にDLLがいるやつ?
>>135 Form1 はデフォルトの MainForm です。その親を Form2.Panel1 などにするアプリ
をつくってはいけません。
逆でした。 Form2を透明にした状態で変える場合でお願いします。
Webbrowserで表示されているTEXTAREAの文字を取得したいんですが、 出来ませんというか分かりません。 APIとかで出来るのでしょうか?教えてください。お願いします。
>>139 IEコンポスレへ行けといいたかったがあのスレずいぶん前に落ちていたんだな。
TWebBrowserコンポーネントのWebBrowser1があると仮定して、
text := WebBrowser1.Document.all.tags('textarea').item(n).innerText;
でTEXTAREA内の文字列を取得できる。
出来ました。ありがとうございます。
BitBltでマスク処理するときに、 検索したサイトではSRCERACE→SRCINVERTと書いてありましたが、 実際にやってみると変な色になってしまします。どうすればいいでしょうか。
BitBlt って DC から DC にイメージをコピーするものじゃないの? マスク部分だけをコピーする API もあるみたいだけど (MaskBlt)、 手元の資料では Windows 95/98/Me: Unsupported. って書いてあるので、 TImageList の Draw や DrawOverlay を使って描画する方がいいと思う。 見当違いなこと書いてたらごめん。
カッコイイツールバー用のアイコンてどっかにありませんかね
ImageList使ったほうが早い
フォームを透明にしておいて、Canvasで直接フォームに 字を書くと字の周りにフォームの元の色が出るんですが、 綺麗に書くにはどうすればいいですか?
試してないんですが DrawText API で書く場合は SetBkMode(Canvas.Handle, TRANSPARENT); を呼び出してから書く、 TextOut, TextRect メソッドで書く場合は、Canvas.Brush.Style を bsClear にして書いたらどうですか?
procedure TForm1.Button1Click(Sender: TObject); begin with Canvas do begin Brush.Style := bsClear; TextOut(10,10,'lkhnoihcw'); end; end; これでもダメ?
>>143 さん、145さん、ありがとうございます。
park18.wakwak.com/~greenspace/dev-api/theapi/reference/bitblt.html
↑のサイトを見ると透過ができそうな気もするのですが・・・
他のDelphi系のサイトではImageList使ってました。
(´・ω・`)IL使います・・・。
{$R *.res} 非常に簡単な質問かと思いますが、、 これってresファイル全部を指定しているということですよね? resファイル関係はこれ一つ書いておけば全部取り込んでくれるということですよね。
>>150 ヘルプでRESOURCEコンパイラ指令のところを読んでくらはい
>>150 自分で作ったリソース(例:アイコン)は自分で「取り込むように」指定する。
つーか、ソレに追加する形。
ちょっと勘違いするかもしれないので、訂正。
「自作リソースを取り込むように指定する箇所を自分で追加する」。
あああ、まだ何か勘違いされそう…。
ま、最終的には
>>151
ヘルプより 記号 * は $R 指令では特別な意味を持ちます。これは,指令が現れるソース コードファイルの基本名(拡張子を除いた部分)を表します。通常は,アプリ ケーションのリソース(.RES)ファイルの名前はそのプロジェクト(.DPR) ファイルと同じです。この場合,プロジェクトファイルに {$R *.RES} を指 定すると,対応するリソースファイルがアプリケーションにリンクされます。 同様に,フォーム(.DFM)ファイルの名前は通常そのユニット(.PAS)ファイ ルと同じです。.PAS ファイルに {$R *.DFM} を指定すると,対応するフォーム ファイルがアプリケーションにリンクされます。
ワイルドカードじゃなかったのか_| ̄|○
156 :
デフォルトの名無しさん :04/04/13 08:00
147,14さん、ありがとうございます。 bsClearにしているんですけど、文字サイズを大きくすると 文字の周りにフォームの色が出てきてしまいます。 リージョンなんて物を使って背景を透明にしてやると うまくいくんですけど、フォームの移動とかをどうすればいいか 分からなくて、教えて君で済みません。
> リージョンなんて物を使って背景を透明にしてやると リージョンと背景の透明化に何の関係が?
>>157 何でと言われても。。。。
色々ホームページを見てた時に、
リージョンを使ったフォームの作成の仕方
を解説してたとこがあって、その例題を元に
したので。
>>156 私の環境だと以下のコードでちゃんと透明になりますし、フォームを
移動してもついてきますよ。
Button1 をクリックすると 2 ポイントずつフォントが大きくなります。
procedure TForm1.FormPaint(Sender: TObject);
begin
with Canvas do
begin
Font.Assign(Self.Font);
Font.Size := Font.Size + Tag;
Brush.Style := bsClear;
TextOut(10, 10, 'lkhnoihcw');
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Tag := Tag + 2;
Invalidate;
end;
>>159 ありがとうございます。
できました。
自分のと何が違うか見直します。
前スレの252です。
WebBrowserを使用したブラウザを作ってるんですが、新しいウインドを
開くリンクをクリックすると自分自身を立ち上げて、リンク先をブラウズできるようにしました。
ブラウズ用のWebBrowserと、OnNewWindow2イベントが発生すると
そのURLを取得するための隠しWebBrowserの二つを用意して、
OnStatusTextChangeイベントを利用してマウスカーソル直下のリンクの
URLを取得し、隠しWebBrowserのOnBeforeNavigate2でURLを照らし合わし
同じURLならShellExecuteで自身を立ち上げるという方法を取りました。
で、質問なんですが、例えば<a href="
http:// ・・・" target="body">の
リンクをクリックした場合、新しく開いたブラウザにbodyという名前のフレームを
セットしたいのですが、どうすれば可能なのでしょうか。
NavigateのTargetやPostDataをいじくってみたり、新しいブラウザを
開くときにリンク先のフレーム名をセットしたHTMLファイルを作成して、
そのHTMLを読み込んだりと色々試してみたのですが、無理でした。
どうすればいいんでしょうか?
ご教授よろしくお願いします。
どうでもいいことだけど最近よく見かける ご教授じゃなくてご教示じゃないんか?
そーでもない
どっちゃでもええ
ご教示 の検索結果のうち 日本語のページ 約 55,100 件中 1 - 50 件目 (0.59 秒) ご教授 の検索結果のうち 日本語のページ 約 86,200 件中 1 - 50 件目 (0.34 秒) ご教授の勝ちです
procedureで引数無しで作るとき、どうすればいいのでしょうか?
procedure honwakapappahonwakapappadoraemon; でも procedure honwakapappahonwakapappadoraemon(); でも 好きなようにすればいいよ。
きょうじゅ けう― 【教授】 (名)スル (1)0 1 (ア)児童・生徒に知識・技能を与え、そこからさらに知識への興味を呼び起こすこと。 (イ)専門的な学問・技芸を教えること。 「国文学を―する」「書道―」 (2)0 大学などの高等教育機関において、専門の学問・技能を教え、また自らは研究に従事する人の職名。助教授・講師の上位。 三省堂提供「大辞林 第二版」より きょうじ けう― 0 1 【教示】 (名)スル (1)〔「きょうし」とも〕おしえしめすこと。示教。 「御―を賜りたく」 (2)実験・調査で、研究者の意図する行動を被験者にとらせるための指示。 三省堂提供「大辞林 第二版」より
170 :
デフォルトの名無しさん :04/04/14 17:25
ソースを印刷すると procedure のeとか 欠けるんですが、どうしてでしょうか? 欠けないようにできないんでしょうか?
172 :
デフォルトの名無しさん :04/04/14 17:33
Delphiのソースを印刷すると なぜか procedure の 最後の eの部分が 欠けるというのだ。 印刷して確認してみてくれ。
174 :
デフォルトの名無しさん :04/04/14 17:35
175 :
デフォルトの名無しさん :04/04/14 17:51
意味が わからんのなら やってみてくれというだけだろ。 やっていなくて 意味がわかるはずもない。
>>170 フォントの設定がまずいんじゃないの?
ていうかsageれ。
>>168 ありがとうございます。解決しました。
ブラウザでTargetが効くようになりました。
ご教示ありがとうございました。
ttp://www.wwlnk.com/boheme/delphi/tips/tec1620.htm を基にして
procedure Tform.NaviClick(Sender: TObject);
var
TabSheet: TTabSheet;
WebBrowser: TWebBrowser;
begin
TabSheet := TTabSheet.Create(Self);
TabSheet.Parent := PageControl1;
TabSheet.PageControl := PageControl1;
TabSheet.Caption := '読込中…';
WebBrowser := TWebBrowser.Create(Self);
TOleControl(WebBrowser).Parent := TabSheet;
WebBrowser.OnCommandStateChange := WebBrowser1CommandStateChange;
WebBrowser.OnNavigateComplete2 := WebBrowser1NavigateComplete2;
WebBrowser.OnTitleChange := WebBrowser1TitleChange;
WebBrowser.OnStatusTextChange := WebBrowser1StatusTextChange;
webBrowser.OnNewWindow2 := WebBrowser1NewWindow2;
WebBrowser.Align := alClient;
WebBrowser.RegisterAsBrowser := True;
WebBrowser.Navigate(URLs.Text, EmptyParam, EmptyParam,
EmptyParam, EmptyParam);
end;
として動的にページを作り
PageControl1.ActivePage.Free;
でそのページを削除したとき、確かに削除されるのですが
プログラム終了時に例外が出ます。何が悪いのでしょうか?
(Win2Ksp4+D7Pro+IE5.5sp2)
>>178 TabSheet := TTabSheet.Create(Self);
たぶんコレ
182 :
デフォルトの名無しさん :04/04/15 00:40
フォームデザイナ上で今まではボタンなどを選択して、 上下左右の矢印キーを押せば移動していたのですが、 なぜか突然その方法では移動しなくなりました。 代わりに[Shfit]+[Ctrl]+矢印キーで移動するようになっているのですが、 微妙に気持ち悪くて適いません。 どうすれば元に戻りますか?
>>180-181 ありがとうございます。
nilでやってみたのですが変わりませんでした。
よくよく調べてみるとOnNewWindows2で同じことをして作ったページを
削除したときだけプログラム終了時に例外が出ることがわかりました。
(OnNewWindows2では
>>178 の最後のNavigateを
>>168 の ppDisp := に変えてある)
どう回避すればいいのでしょうか?
>>170 予約語を斜体にしてるから印刷時に末尾が切れるんじゃないの?
>>170 , 1884
IDE のバージョンなんぼ?
PageControl1.ActivePage.Free; の前に PageControl1.ActivePage.PageControl := Nil; してなかったからでした。WebBrowserに罪はなかったようです。 失礼しました。
187 :
デフォルトの名無しさん :04/04/15 10:31
>>179 やはりバグかな?
これって 古いバージョンからあると思うけど どう?
できれば IDE で選択しているフォント名、教えていただけますかいな。 あと IDE のバージョンも。
190 :
デフォルトの名無しさん :04/04/15 10:57
あげるのが好きなのに どうして さげないと いけないのか。
そう。じゃかってにどうぞ
何だかいちいちトゲのある言い方をしますね(^-^; やれやれです(^-^;
>>182 Ctrl+矢印キーで移動、Shift+Ctrl+矢印キーでグリッドに沿って
移動、Shift+矢印キーでサイズ変更だったと思うけど。
Form1ウィンドウの右上にある三つのボタン[_□×] 最大化は必要ないので、これを[_×]にする方法を教えてくらさい。 Windowsに付属の「電卓」や「マインスイーパ」みたいに、 最大化ボタンを押せなくするだけならbiMaximizeプロパティで できるとわかったのですが、 見た目カッコ悪いのでボタンを消してしまいたいのです。
書き忘れました。 Delphiのバージョンは6の無料版です。
bsDialog にすると最小化ボタンやコントロールメニューボックスも消えますよ。 まあ、絶対に不可能というわけじゃなさそうだけどかなり難しい。 BorderIcons に biMinimize が入ってるとグレーの最大化ボタンが表示されて しまうので、まずこれを外さなきゃいけない。 で、最小化ボタンも消えるので、枠の部分の描画メッセージを引っかけて最小化 ボタンを本来の場所に自力で描画することになる。 最小化ボタンの形状やサイズは OS やユーザーの設定によって違ってくるので その辺も考慮しないといけない。この設定は実行中に変更されるかもしれない。 描くだけでなくクリックしたときにへこむとかの応答も提供する必要がある。 さらに最小化のメニュー項目も消えるので自分で追加する必要がある。
逆に、最大化を押しても何も起こらないようにするとか・・。 まぁ、わしのスキルでは出来るかどうかもワカランが。
質問しようと思ったけど
>>4 とほぼ同じだった。
>>4 、
>>6 、有り難う。
>>195 「何処までそれにこだわるか」だと思います。
デザインに凝りたいのなら、自分で描くしかないのでは?
>>195 フォームをbsNoneにする。
パネルをAlign=alTopに設定して、Width=45、Align=alRightに設定したツールバーを
パネルに貼りつけて、ツールバーを右クリックしてボタンを2つ作り、
左でApplication.Minimize、右でCloseを実行させるようにすれば、あとはなんとかなるぞ。
おまけ。 201だとフォームが移動できないから、ドラッグで移動させたい場合は procedure Form1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer); begin //マウス左ボタンが押されているとき If ssLeft in Shift then begin //マウスキャプチャを解放する ReleaseCapture; //Formをドラッグせよという命令を送る SendMessage(aterollBrowser.Handle, WM_NCLBUTTONDOWN, HTCAPTION,0); end; end;
>>202 aterollBrowser.Handle??
どなたか
>>182 に答えてくださると嬉しい感じです。
しまった間違えた。 SendMessage(Fram1.Handle, WM_NCLBUTTONDOWN, HTCAPTION,0);
>>204 >>(182 + 204) div 2
ヽ(`Д´)ノ ウワァァァン SendMessage(Form1.Handle, WM_NCLBUTTONDOWN, HTCAPTION,0);
>>196-203 どうもありがとうございます。
どっかのプロパティ(visibleとか?)を例えばFalseにするだけで
消えてくれるもんだと思ってましたが、なんか大変そうですね。
超初心者の私には無理そうですので、今回はあきらめます。
>>204 よくわからんが [ツール | エディタ オプション] あたりの設定じゃない?
>>193 >>206 矢印キー押しただけでボタンとか移動できてたのは錯覚ですか(;´Д`)ノ?
>>211 なんかそこ見ても設定できなくて(´・ω・`)
>>212 俺の環境だと矢印キーでコントロール間をフォーカスが「移動」するし、
Ctrl+矢印だとコントロール自体が「移動」するよ。Delphiではこれが普通の動作のはず。
何か別のアプリと混同してるんじゃないの?
なんかそう言われるとすごいそんな気がしてきました(;´Д`) どうも勘違いだったっぽいです。 お騒がせしました。 元に戻そうとして3時間くらい格闘したのに。。_| ̄|○
教えてください。 D6パーソナルで、Memcheckを使うと、 Formに何もない状態でも5回と出るんですが、 5回より増えないようにすればいい。って事ですか?
MemCheck の使い方を間違えている。ってやつだと思う。 メモリリークがあると、MemCheck で見つけられるが MemCheck がレポートしたからといって、それがメモリリークであるとは限らない。
ちゃんと <project>.dpr に MemCheck のコードを入れましたか?>> 215
>>215 .dprでMemCheckをusesして、プロジェクトオプションの
ディレクトリ/条件タブの条件定義に<MemCheckStackTrace>を追加(括弧はいらない)。
リンカタブのTD32デバッグ情報を含めるにチェック。
コンパイラタブのスタックフレームの生成をチェック。
こんな感じだったかのぅ。
新規プロジェクトで >218と同じにしてやってみましたが5回と出ます。 何かまだ設定が足りないんでしょうか? 他のD6パーソナルの人は出ないのかな?
>5回より増えないようにすればいい。って事ですか? とりあえず、これでよいと思うよ。 で、D6 のアップデートは当ててありますか?
>>215 >>218 と同じ条件にしてやってみたけど1つもレポート出ないよ。
Del6per+up2+rtl3
おそらく
>>215 はアップデートを当てていない。
>>216 メモリリークでは無い場合のレポートを見せて頂けませんか?
例外処理の利点と欠点について教えてください。 たとえば、自分でとある関数を作ったとして、その関数の処理に失敗した場合、 raiseで例外を生成する場合と、WinAPIっぽく関数の戻り値にエラーを示す値を返す方法とでは、 どうメリット、デメリットがあるかがよくわからない。
もっと質問しぼります。 関数でエラー値戻す方法よりも、例外生成ほうが何かメリットがあるんでしょうか?
例外生成→使用時にtryで捕獲 関数の戻り値にエラー値→ifで処理 違ってたらマターリする
今気づいたんだけど、MainMenuで 「ツール」って項目設けたらデフォのNameが「ool1」になった もしかして俺のDelphi壊れてる?
気にすんな 漏れのDelphiは右クリックメニューとかの各Captionが''だったりするけどがんがって使ってる
気にした方が(藁
例外を出せば 例外を出した時点でメッセージを用意しておける。 呼び出した側ではしらんかおしておけばいい。
教えてください。 Panel上にドッキングするコントロールが3つあって、 ┌┬─┐ │├─┤ ││ │ └┴─┘ ↑のように3つドッキングしてる状態を記憶させるには、 iniファイルにどう書けばいいですか?
┌┬─┐ ←B │├─┤ ││ │ ←C └┴─┘ ↑A だとしたら、 1.設定ロード前に全コントロールのAlignをNone 2.最初にAのコントロールをLeftにする 3.BのコントロールをTopにする 4.CのコントロールをClientにする 覚えさせておくのは、各コントロールの設定状態と、設定する順序だ。
順序ってどうやるとわかるのかが分かりませんが、 何か色々やってみます。ありがとうございました。
すみません質問です。 フォームに配置したコントロールのヒントを非アクティブ状態でも表示したいのですが、 その方法がわかりません。 調べると、SetFocusというメソッドを見つけたんですけど、どうもこれは違うようですし。 他のアプリケーションに隠れた状態でもヒントを表示させる事は可能なんでしょうか?
どうしてそうしたいのか、よく分からんが。
質問者は「これこれこーゆーことがしたいので、こーなりませんか?」って
書くと代替案が出るかも。
ちょっとソレはナニだと思う
>>237
>>237 THintWindow のインスタンスを自分で作成して、そいつをコードで
適当な場所に表示させるというのはどうですか?
>>239 が何を言ってるのかが解からないと思う。
言っている意味はわかるが、解決にはほど遠い。
1.どのタイミングで?
2.どこに表示?
3.Enabled が true のときは、本来のヒントとかち合わないの?
あるアプリケーションを作成していて、 「何秒後にフォームを閉じたい」とか、「何分ごとに文字を表示させる」とか、 それぞれ時間の異なるタイマーイベントを複数用意しなければいけなくなりました。 時間は正確ではなくていいのですが、たくさんのタイマーを動かすのも 悪いかなと思い、例えば2秒間隔でイベントを発生させるタイマーを一つだけ用意し、 なんとかまとめて処理できないかなと思っています。 具体的には、 1)タイマーイベント発生時に実行する、あるオブジェクトのメソッドを登録 2)そのメソッドを何秒後に実行するか登録 3)イベント発生時に登録した秒数−経過時間の演算を行う 4)登録した秒数<0で、登録されたメソッドを実行 という処理をすれば、1つのタイマーだけでまかなえると思うのですが、 このとき実行するオブジェクトのメソッドを登録/管理する方法、 経過時間を登録/管理する上手い方法ってありますか?
> たくさんのタイマーを動かすのも悪いかなと思い、 3つ、4つ動かすくらいなら平気でしょ。ややこしいこと考えずにタイマつかっとけよ。
>>244 ユーザの操作によるんですが、可能性としては5−6個動くことがあるので、
一つにしたいなぁぁぁと・・・
どのぐらいまで可能なんですかね。
簡単な処理なら、100個のタイマーを同時に使っても、問題無かったよ。
>>246 NT 系列の OS ならね。ってはなしでは?
98 でも事実上、無制限に近かったとも思ったが..
IdSNTPで時刻合わせしているプログラムにMemCheckを入れたら IdComponentのInitializationでCreateしてるGStackCriticalSectionを 開放し忘れていると言われたんですが、Indyのソースには // Dont Free. If shutdown is from another Init section, it can cause GPF when stack // tries to access it. App will kill it off anyways, so just let it leak // FreeAndNil(GStackCriticalSection); というコメントがありました。どこで開放すればいいのでしょうか?
100個もいけるんですか!!??じゃあ、問題ないですねぇぇ。 type TDoMethodObject = record MyMethod: TNotifyEvent; Interval: Integer; AtOnce: Boolean; end; をTListにポインタで格納して、定期的にTListに登録された メソッドを実行するClassを作成中でした。 大丈夫なら、こんなの作る必要ないか・・・・
ちょいと質問させてください.. LABELで出力した文字列を選択、コピーできるようにする方法はあるのでしょうか? もしくはLABEL以外の何かを使わないといけないでしょうか?
TLabel は選択もコピーもできないと思ったが.. TEdit と間違えているのかな?
>>252 だから、それを可能にさせる方法ってことでは?
>>251 TLabel では出来ないが、TEdit の Color と BorderStyle を弄れば同じモノが作れる
あ、後 ReadOnly もか
TLabelに右クリックつけてコピーって出せば あふぉ
>>250 リークはしていないと理解していいのでしょうか?
>>257 MemCheckってDel7でもいける?
無害なリーク。 または (メモリリークの定義にもよるが)リークしていない。 一応、リーク (Leak) の語源を英和辞書で確認してくださいね。 アプリを長時間起動しても対象リソースが「もれる」わけではない場合、それは 厳密にはリソースリークとは呼ばない。 アプリケーションの確保しているメモリブロックはプロセス終了時に開放されるので 結局開放されるわけだ。 複雑なプログラムでは終了条件の判断が難しい場合がある。 厳密には、フラグとかをたてまくれば本当の開放のタイミングが特定できるはずなのだが、 それを行うためのコストが高くつき、かつ上に書いたような良性の未開放リソースに対しては 開放処理を OS のプロセス終了処理に任せる。ということが多くある。 もちろん、プロセスをまたがるリソースや、OS が開放してくれないリソースはこの限りではないので 状況に応じて判断すること。
>>258 D7 でもいけるけど、元からパッケージに対応していないので、俺は捨てた。
262 :
デフォルトの名無しさん :04/04/20 00:21
すみません、どこに質問していいのか謎でしたのでここで・・。 Delphiでくだらないアプリを作ってます。 アプリ終了時に設定を保存したいんです。 タスクマネージャを起動させて、プロセスのタブ内からこのアプリを終了 させた場合、アプリにはどんなメッセージが飛んでくるのでしょう? この場合だけ設定が保存されないで困っています。 ご存知の方、ご教授お願いします。 とか、「あっちのスレッドで質問しろ!」とかでもいいです。 (その場合、あっちがどこなのか教えてください)
263 :
デフォルトの名無しさん :04/04/20 00:32
どのイベントで設定保存してる?
closeと見た。 そーだったら、デストローイに変えてみる。 違ったら↓
あなご自力で捕まえる
>>264 ふつーonCloseQueryじゃねーの?
>>261 これ便利かも。こういうのがあるって知らなかった。
他にも、こういうチェッカーみたいなのありますか?
>>262 プロセスタブからならTerminateProcessされるからメッセージもなしに問答無用で終了。
デストラクタも呼び出されないのでリソースリークが発生したりするから凍った時以外はその方法で終了させるのは論外。
あくまでも非常手段。
MemCheckしたら、なんかいっぱいでてきた・・・ 自分でFree等のし忘れはないみたいだけど、 種類とサイズとバイナリしか表示されてなくて、 どのファイルでリークしてるか表示されない・・・ これじゃ対処のしようがないし、解放されるはず のリークかどうか判断できないよ かなーり心配 ウワワワワン
>>270 VCL のバグもみつけるには Debug DCU を使う。をチェック。
リンカー設定で TD32 デバッグ情報をつける。をチェックしたか?
そうすれば、ソースがあるコードなら行番号まで出てくるはずだ。
>解放されるはずのリークかどうか判断できないよ 良性か悪性かの判断の(ひとつの)目安。 1. 一通りの機能を使う手順を決める。ファイルを開いて、処理して、閉じる。など。 2. 1 で決めた手順を行って、MemCheck のログをとる。適当な名前で保存 3. 1 の手順を2度繰り返す。ログを保存。 4. 2 のログと 3のログを比較。未開放メモリブロックの数、量に変化が無ければ 「おそらく」良性の未開放メモリ。 数、量に変化がある場合は悪性の未開放メモリブロックの可能性あり。 5. 確認のために 1 の手順を5回繰り返したログをとり、2 および 3 のログと比較。 6. 最後によく考える。 あまりにも多くの未開放メモリがレポートされた場合は、本質的なバグを持っていると 判断するか、または手順をもう少し簡単にすること。
>>271-272 272さんの方法ですと、行った動作に対して数と量は変化ないです。
そしたら良性かなぁ。
TreeItem.Dataに確保したメモリのポインタを入れて、OnDeletionで
Disposeしてるんだけど、その確保したメモリはごっそりリークとして
判断されてしまうらしいでつ。
でも、なんか心配だなぁ。
271さんの方法については、あとで試してみます。
>TreeItem.Dataに確保したメモリのポインタを入れて、OnDeletionで >Disposeしてるんだけど、その確保したメモリはごっそりリークとして >判断されてしまうらしいでつ。 ここでもたびたび話題になる例のやつではありませんか? Dispose() するとき、ちゃんと New() したときのポインタ型にキャストしてますか?
>>274 うわっ まさにそれだ・・・ガックシ
でも理由がわかってよかったありがとう・・・
さっそくキャストして調査してみます。
TBitMap、自作Createしたモーダルフォームあたりでも
発生しているみたいだけど、これも何かやり忘れてるのかな。
調べてみます。
>>275 それが問題なのだとしたら、New/Dispose の組み合わせを呼ぶ数が異なるような
テストケースを考えて、272 みたいに呼び出し数が変わるようにしてチェックしてみたら?
New/Dispose の組み合わせが定数回しか呼ばれないなら、それは良性のメモリ未開放。
けど、直せるのであれば直したほうが良い。
> けど、直せるのであれば直したほうが良い。 なんだか、ごちゃごちゃ書いても当たり前の結論(藁 良性とかいっても、悪性じゃない、という意味であり、 メモリ未開放が良性であるはずがないよね
278 :
デフォルトの名無しさん :04/04/20 15:49
>>269 えー!そーなのー!_| ̄|○
うすうすは気づいていだんだけど・・・(問答無用か・・・)
じゃぁどうすることもできないのかぁ・・・(諦め)
CreateProcess使ってwait・・・で待とうと思ってたんだけど意味ないか・・。
どーもでーす!
279 :
>>269 :04/04/20 15:57
あ、ちょと待った。 アプリAから CreateProcessでアプリBを起動して WaitForSingleObjectで待って プロセスタブでアプリBを終了させたら WaitForSingleObjectを抜けてきた! これで終了されたか判断できそーだ。 気持ちやりたい事とは違うけど、応用すればなんとかなるかも。 269さんありがとう。
>>254 どもです、やってみたらそれらしいものが出来ました。
しかし..複数行にわたる場合がどうも上手くいかんのですが、どうにかならんもんでしょうか?
一応いろいろやってみます..
>>280 Memoを使えばできるよ。
詳しくはOpenJaneのソースの設定画面ちょこちょこ覗いてみればわかるかも
282 :
デフォルトの名無しさん :04/04/20 19:08
ウィンドウを持たないアプリでWindowsの終了を感知する方法って何かご存じですか?
TTimerのように表示しない窓ハンドルを持たせたら?
> TTimerのように表示しない窓ハンドルを持たせたら? メッセージループが必要になるけどね。
285 :
デフォルトの名無しさん :04/04/20 20:58
おー、なるほど!俺ってアホっすね。 それだとそーですね、ループ必要っすね。 あー、でもexeのサイズが・・・ ・CPUに負担かけずに ・exeのサイズは小さく が条件でして・・・ちょっとやってみます。
別に >・CPUに負担かけずに >・exeのサイズは小さく この条件と照らし合わせてもなんの問題もないように思うのは漏れだけ?
Var S: Array Of String; begin SetLength(S,2); SetLength(S,1); S[1] := ''; end; これでエラーにならないのは何故ですか? SetLength(S,2) が無ければ Invalid pointer operation になるんですが… 妙な動作なので不安です…
むしろなんでエラーになると思うのかを聞きたい。 SetLength(S,2); をコメントアウトしてもエラーにならなかったよ?
>>288 え?だって SetLength(S,1) とやれば 存在する要素は 0 番目だけじゃないですか?
あと SetLength(S,2) の件も改めて試してみましたがエラー出ました。
string型について調べてみな。
String 型についても調べていますが、 String 型でなくても出ます。 Var i: Array Of Integer; C Array Of Char; でも同様に出ました。
すみません Array Of Char では出ませんでした。
>>289 >え?だって SetLength(S,1) とやれば 存在する要素は 0 番目だけじゃないですか?
じゃあ「SetLength(S,0)」とやったらどうなると思うんだい?
うあ、間違えた Array Of Integer では Array Of String と同じでエラーにならず、 SetLength(i,2) を消すとエラーになり、 Array Of Char だとSetLength(C,2) を消してもエラーになりませんでした。
>>293 要素を1つももたない配列になるのでは?
昔のString型は0番目の要素が文字列の長さを表していたが 最近のStringの0番目の要素には#0が入ってたような気がする だから結局Stringに格納される文字列は1番目の要素から始まるんじゃない?
おいおい、質問者の質問の意図を よく理解してないヤツは答えなくて良いよ。
>最近のStringの0番目の要素には#0が入ってたような気がする 文字列の開始アドレスが入ってるんじゃないの?
えー、どうも行き違いがあるような・・・ やってることは 文字列型に SetLength して長さを弄っているのでは無くて 文字列の配列に SetLength して要素数を弄っているのですが。
あー、スマソ。 俺勘違い。
失礼のお詫びに俺でわかるだけのことはしてみた。 S[1]:='' の時はSetLength(S,2)をしなくてもエラーにはならない。 S[2]:='' とやっても大丈夫。 S[1]:='A' の時は SetLength(S,2); SetLength(S,1); とやってもエラーになる。 なのでS[x]:=''の時は実際に参照が行われないからなんじゃない?
>>301 なるほど、どうもありがとう御座います…といって完結したかったのですが、うちの環境だと
SetLength(S,2);
SetLength(S,1);
S[1] := 'A';
でエラーにならないです
その上
SetLength(S,3);
SetLength(S,1);
S[1] := 'A';
だとエラーになります
もう、何がなんだか…
Var S: Array Of String; begin SetLength(S,2); ShowMessage(IntToHex(Integer(@S),8)); SetLength(S,1); S[1] := 'ああああ'; end; これだとエラーが出ない。ShowMessageを//するとエラーが出る。
>>287 SetLength(S,1);S[1]:='';の動作は不定なので妙な動作になるのは当然。
{$R+}付ければ例外発生するし。
---------------------------
デバッガ例外が発生
---------------------------
プロジェクト Project1.exe が ERangeError クラスの例外を生成しました。
'Range check error'
プロセスは停止しています。再開するにはステップ実行または実行を選択してください。
---------------------------
OK ヘルプ(H)
---------------------------
>>304 範囲チェック有りででエラー出ました。
そういうものだったんですか、どうもありがとう御座います。
お騒がせしました。
明示的に領域が確保されてないから勝手に格納される(参照不可能)んだと思ってたけど違ってたみたいね ありがd
307 :
デフォルトの名無しさん :04/04/21 09:22
(・♂・) ユースケ・キンタマリアですが、何か?
308 :
デフォルトの名無しさん :04/04/21 12:08
「他のアプリを絡めてモノを作った経験」 は 「他のアプリを絡めるモノを作った経験」 の間違いかな? 普通のアプリは作れるの?
簡単なテキストエディタやブラウザのようなものを作った経験はあります。 超初心者向けのサイトなどだとそこらへんの段階で一段楽してしまっているところが多く 他のアプリとの絡みに関してわかりやすく解説されているサイトがちょっと見当たらなかったもので・・・ もしご存知でしたら教えてください よろしくお願いします。
Delphiとはあまり関係無いのでは? 必要なのは Windows Programming の知識でしょ。 WIN32APIのスレとかを過去ログから漁ったりした方が 知識を得られると思うけど。
他人のアプリ(ソースコードが無いアプリ)を、アプリの外から操作する。 ということだ。対象アプリが外部コントロールを許しているかどうかから調査を はじめないと。WinMX のことは良く知らんが、多分 OLE AUtomation なんて機能は無いだろう。 となると、対象アプリに対してキーボード操作をエミュレートすることになる。 基本は二点。 1. その時点での対象アプリの状態の取得 2. 望んだ変更を行うために何をしなければいけないのか。 どちらを行うにしても、最初は 1. 対象アプリの特定 2. アプリ上のコントロール/ウィンドウの取得。 3. 状態を把握。 からはじめることになる。 けして初心者向きでは無いし、作るなら根気が必要。
Halbow の負の遺産として
「他のアプリのウィンドウ情報の取得 」
ttp://homepage2.nifty.com/Mr_XRAY/Halbow/VCL08.html ってのがあるので、眉につばつけて読んで見なさい。
(以下はまだわからなくてもいいです)
実は _GETTEXT 系メッセージは、プロセス境界を越えたときでも正しく文字列をコピーしてくれる。
Halbow がどこで勘違いしたのかわからないけど、コントロールのキャプションを読み書きするだけなら
共有メモリは必要ない。
詳しくは、MSDN で GetWindowText API の説明を熟読してください
> 実は _GETTEXT 系メッセージは、プロセス境界を越えたときでも正しく文字列をコピーしてくれる。 これは常識。そのサイトでもいっぱい使ってる。 > コントロールのキャプションを読み書きするだけなら共有メモリは必要ない。 そなの? ListView の Items の内容は、コントロールキャプションじゃないけど取れるの?
他プロセスの作ったウィンドウ情報は文字列だけじゃないし
そうだね。ヘッダーの幅だとかヘッダーテキストの配置だとか、レコード型を 通してしか取得できないものは共有メモリつかうしかないでしょう。
313は共有メモリを使わずにあの内容と同じことができるのか?
無理
> Delphiとはあまり関係無いのでは? > 必要なのは Windows Programming の知識でしょ。 おもしろい。 Delphi だと Windows Programming の知識はあまり必要じゃない、ってことかしら? Delphi は Windows 以外のプラットフォームのアプリはつくれないのに?
Delphi は Windows 以外のプラットフォームのアプリはつくれないのに? Delphi は Windows 以外のプラットフォームのアプリはつくれないのに? Delphi は Windows 以外のプラットフォームのアプリはつくれないのに? Delphi は Windows 以外のプラットフォームのアプリはつくれないのに? Delphi は Windows 以外のプラットフォームのアプリはつくれないのに?
Delphi は Windows 以外のプラットフォームのアプリをつくれるの? Kylix とかいうんじゃないだろね。
Delphiは言語名ですよw
> Delphiは言語名ですよw 開発環境でもあるんだが。 Windows 以外で動作する Delphi 言語があるのか? Kylix とか? Kylix があるから、Delphi では Windows Programming の知識は必要ないとか? おもしろいね。
晒しさげ Delphiは言語名ですよw Delphiは言語名ですよw Delphiは言語名ですよw Delphiは言語名ですよw Delphiは言語名ですよw Delphiは言語名ですよw Delphiは言語名ですよw Delphiは言語名ですよw Delphiは言語名ですよw
327 :
デフォルトの名無しさん :04/04/21 15:37
ボーランド自らDelphiは言語だと言っている。 さあ後がなくなったぞw
>Delphi だと Windows Programming の知識はあまり必要じゃない 誰がこう言ってるのかわからないので、レス番指定してもらえますか?
Delphiが言語名になったのは、Delphi6 くらいからだろ、たしか。 Delphi5以下では Object Pascal だよね。 絶滅寸前の Kylix ユーザも「自分は Delphi つかい」とか思ってるんだろうか。w
>>330 ですよね。
>>320 がなに言ってるかさっぱりわかりません。
まあみなさん、冬将軍でもみて落ち着いてください。
,i`'ー‐'\
,.-∠,,,、 `' /~‐-、,
._ ,/ ,,.-''",、=-,`'ー-、 \
/ ``'_」``ヽー‐'i''ー-<''ー'',.r'"<-‐''"'、
./ /``''7ー--、\ `''‐-"/,,....-┬'''"'、 '、
./ / .| i''ー-、,,,,ヽ ̄ ̄/,,,...,,,、、 | .'、 '、
/ / r、|. ヽ、,_●ノ ヽ、,_●ノ |/i '、 '、
./ / ,,ヽ`ヽ、,,___,/-,-,-\,___,,,.-'",ノ_ .'、 '、
ヽ,/_ >、 ,/ .ヽ、 ,イ '、,,..ゝ
.`''ー-| `'ー--‐‐'',,.--、_`'ー--‐''" |,,.-‐''"
└───、 '" `'.,r──‐┘
332 :
デフォルトの名無しさん :04/04/21 15:49
いきさつはともかく、ヘルプにも「Object Pascal 言語ガイド」っていうのがあるし。
>>311 を素直に読むと、「Delphi」と「Windows Programming の知識」は
あまり関係がない、ということだよね。
そうすると、このスレは言語仕様やその使い方の Q&A をするところですか。
はぁー、リストボックスもツリービューも共有メモリもレジストリも
あまり関係なしですか?
Object PascalじゃないのにObject Pascalだなんて詐欺ですね。
>はぁー、リストボックスもツリービューも共有メモリもレジストリも >あまり関係なしですか? 共有メモリ以外はVCLでラップされてんじゃないの? VCL内部でWin32コールさせた方が、Kylixしやすいと思うが。
ボーランドが「ほんとは最初からdelphi言語って名付けるつもりだったんだ」って 今になってわめいているという可能性はないの? 別にボーランドを非難している訳じゃないけど、間違ったのなら2からでも 改めそうな気がしたんで。
>>336 VCLはライブラリでしょ。言語じゃないよ。
>>338 わめいてはいないけど、「実はさぁ」といいわけがましいのは事実。
>>340 なるほど。ボーランドも大変ですね。
どうもありがとう。
Wirth 先生やその取り巻きが、Turbo Pascal までは許せたけど、OOP を 導入した以降の 「Object Pascal」 に Pascal という名前を使ってほしくない とか文句言ったそうで。Oberon とかの関連もあって。Wirth 先生は Turbo Pascal には論文で言及するけど、Delphi は完全無視だよ。
TListViewで個々のセルに対してフォント色等を設定したいのですが、 関連するようなプロパティやメソッドがヘルプにないということはできない ということですよね? もしFontStyleやColorを設定したい場合には、どのコンポを使えばいいの でしょうか?
TStringGrid か TDrawGrid だと
345 :
デフォルトの名無しさん :04/04/21 16:42
>>343 やったことないけど、オーナードローでできないかな?
> TListViewで個々のセルに対してフォント色等を設定したいのですが、 の質問に > Delphiとはあまり関係無いのでは? > 必要なのは Windows Programming の知識でしょ。 とかは、はまりますよね?
なんか粘着してるな。 VCLの利用法はDelphiの知識の範疇に入ると思うけど。
> VCLの利用法はDelphiの知識の範疇に入ると思うけど。 そう思います。でも VCL ってどの範囲だろうか。 Forms.pas や Controls.pas は VCL だけど、Windows.pas や ShellAPI.pas は どうなの? これらがないと、VCL が動作しないことだけは確実ですが。 347は311のコメントをどう思ってる?
「Delphiは言語名ですよw」 ってのはどうなった?
>>348 >347は311のコメントをどう思ってる?
いちいち気にしてない。じゃないかな。
さてつぎいきましょ。
>>343 TListViewのOnCustomDrawItem辺りに
if Item.Caption='ぬるぽ' then Sender.Canvas.Font.Color:=clBlue;
とか入れてみ
> TListViewで個々のセルに対してフォント色等を設定したいのですが 結構面倒なので、セルとかとして使うんなら、すなおに TStringGrid にする
354 :
デフォルトの名無しさん :04/04/21 20:35
ボーランド社特有の問題というかなんというか delphi7トライアルをダウソしてインストールしたんですけど、 その後の登録が上手くいきません。 delphi7を起動し、登録サイトにジャンプしてログインしてもログインできないし、 キーやらレジトリなんちゃらなど、どれがどれでいったい何を登録しろというのか 送られてきたメールはいったいなんのためにあるのか 初心者にとって全くもって理解しがたいプロシージャを要求しすぎだと思います。 ボーランド社特有のアクセシビリティの悪さはみなさん問題なくクリアされているのでせうか。
>>350 ボーランド自らDelphiは言語ですと言い切っている
ソースを出されてあっさり終了。
ObjectPascalは、Del7からDelphi言語と改称。
「delphi7を起動し、登録サイトにジャンプしてログイン」 そんなこと要求されたっけ? 大体ダウンロードするときにキー送付のためのユーザー登録をしているはず。 多分、難しく考えているだけだと思うけどね。
もともとDelphi言語と呼ぶつもりだったのが、 Delphi 1のドキュメントで何故かObject Pascalという名前が出てしまった。
>>357 なにが悪いのかまったくわからず、
しかも登録失敗とかログインできませんとかで
結局、書籍付録の6パーソナルで済ましました。
> ボーランド自らDelphiは言語ですと言い切っている はぁ、そんなことではなく、Delphi が言語なら、Delphiスレは、言語スレ なのか、という意味。なら、ツリービューなんか関係ないだろ、ってこと。 Delphi が言語になって2年だろ。開発環境の名前としては、9年だよ。 Delphi と言ったら、普通は、間髪環境のことだろ。
× 間髪環境 ○ 開発環境
> ボーランド自らDelphiは言語ですと言い切っている ボーランドのHPより Delphiは、ビジュアル開発による生産性とネイティブコードによる高速性を 両立させたWindows用ビジュアル開発ツールです。
仕様許諾コードを取得するプログラムは、 キチンと動いてないらしいという話が、 前スレかどっかであったよ。
仕様許諾コードを取得させたくないんだよ、きっと。 プログラム開発環境だか言語だか知らないけど、その製品の会社が作った 「仕様許諾コードを取得するプログラム」がまともに動かないのは お笑いだよな。
ん、仕様許諾? 使用許諾だよね
プログラムの不備と言う記述はなかったや、ごめんよ。 レジストサーバーが死んでるんじゃないか、と言う話だった。
367 :
デフォルトの名無しさん :04/04/22 00:31
われながら程度の低い質問だと思うのですが、 程度が低すぎるせいかヘルプを見てもgoogle検索してもひっかかりません。 Extended型をinteger型に変換するにはどうしたらよいのでしょうか? 普通の型キャスト integer(Extended); では「正しくない型キャスト」といわれてしまいます。
Round(), Tranc()
×Tranc ○Trunc
>>367 用途によって違う
Trunc, Floor, Ceil, Round
>>368-370 ありがとうございます。
Truncで無事解決できました。
ほんと低レベルな質問で失礼しました。
型キャスト っていうのは、実体が同じで、コンパイラに見方を変えてね っていう指示なんだよね。内部データ形式が全く異なるExtended型をinteger型 にキャストできないのは当然。この辺の感覚はだんだんついてくるようになる。
二つの値を渡して比を求める関数を作っているのですが、どう求めればいいかわかりません 現状だと9:3等はできますが9:6等はできません function ratio(p : TPoint):TPoint; var Upper , Lower , x , y : integer; begin Result.X := -1; Result.Y := -1; if (p.X = 0) or (p.Y = 0) then exit; x := p.X; y := p.Y; if (Max(x,y) mod Min(x,y)) = 0 then //大きい方から小さい方を割ってあまりがないとき begin Upper := (Max(x, y) div Min(x,y)); lower := 1; if Max(x,y) = x then begin Result.X := Upper; Result.Y := Lower; end else begin Result.Y := Upper; Result.X := Lower; end; end else begin //ここ end; end;
>>373 比というのはどちらかを 1 としたときにもう一方の Y/X あるいは
X/Y のことですよね。
失礼ながらこのソースでは何をしたいのかよくわかりません。
もし長方形を枠にあわせて拡大・縮小をするというような用途であれば、
あらかじめ実数値として Y/X を算出し (←これを一般に比と呼びます)、
目的の幅に比を掛けて高さを求めるか、目的の高さを比で割って幅を
求めるという方法が適切ではないでしょうか。
どうも失礼しました。ちょうど Rect に収まるようにイメージをストレッチ描画 するものを書いてたので、それと同じようなものかと勝手に勘違いしていました。
質問です。 Delphiの事をよく理解しないまま、ネット上のTipsを参考にしたり、 ダウンロードした自作コンポーネントを貼り付けたりして、気がついたら 千行を越える複雑怪奇なプログラムが組みあがってしまったんですが、 普通にCloseすると例外が発生します。 仕方が無いのでHaltで終わらせてるんですが、これってやっぱまずいんでしょうか?
> 普通にCloseすると例外が発生します。 十分ヤバイと思います。
>>378 やっぱりヤバイですか(´・ω・`)
とはいえ、どこをどう直せばばいいのやら全く見当がつきません。
下手にいじるとWindowごと落ちる始末です。
なんとか頑張って例外が発生しないようにしてみます。
>>366 D7 は日本のサーバーではなくあっちのサーバーにつながっているので、めったに
こけることは無いと思いますが。
>>376 アスペクト比を保ったまま、ある Rect に収まる最大の描画方法は、長辺を Rect の
対応する辺にぴったり収まる比率を求めて、その比率で短辺を描画したとするとき
はみ出すかどうか確認し、はみ出さなければその比率で、はみ出したら、短辺の
対応する辺にぴったり収まる比率を求めて、それで全体を描画する。 if 文が二つ。
訂正 if は一つ
>>379 例外が出て、IDE / デバッガで捕捉できているのなら、直せるかどうかは別にして
バグの場所だけでも特定できそうなものだが。
デバッグ情報をつけて、デバッグ版の .DCU を使って再コンパイル。
例外でデバッガに戻った時にソースコードが表示されればしめたもの。
>千行を越える複雑怪奇なプログラム
は、一関数が千行越えたのかな?
バグを直しつつかきかえなされ。
384 :
デフォルトの名無しさん :04/04/22 11:31
'AAA',1 'BBB',2 'CCC',3 というリストをTStringsで扱いたいのですが、AddObjectの第2引数はどのように 書けばいいのでしょうか? 数値だけのクラスを定義しないとダメですか?
AddObject('AAA',TObject(1));
TStrings は抽象クラスだよ、分かってると思うが。
>>385 できました。単純にキャストしてしまえばいいのですね。
でもなんか不思議な気がします。「1」の実体は一体どこに格納されてるのでしょう??
>>386 TStringListの間違いでした。
>>384 純粋なオブジェクト指向の考えからすれば「数値だけのクラスを定義」するのが美しい。
ところが数値だけしか入らない。とわかっているのにクラスを定義するのはもったいない。
ってことと、Delphi ではクラスはポインタで受渡しされることから、TObject(<なにか>)
という使い方をします。これは
まず、数値 1 はポインタ型にキャストされます。絶対アドレス $00000001 を示す形無しポインタです。
次にこれが TObject 型にキャストされ、見かけ上 TObject 型として保存されます。
この "TObject" 型の値は、本物ではありませんから、メソッド呼び出しなどを行うと
AV がおきるでしょう。TObject 型に見せかけた4バイトの領域でしかありません。
389 :
デフォルトの名無しさん :04/04/22 13:54
>>342 ObjectPascal自体は、昔AppleがWirth先生と共同で策定した言語で別にちゃんとある。
初期のMac用のクラスライブラリ(OWLのようなアプリケーションフレームワーク)、
MacAppのために設計された。
その後AppleがC++に傾倒してMacAppもC++で書き直された事や、
OSのヘッダファイルがPascal用だけでなくC用も提供されるようになったので、
あまり使われなくなった。
391 :
デフォルトの名無しさん :04/04/23 00:07
先日Delphi6フリー版をDLしたんですけど使い方がいまいちわかりません。 レジストリに任意の内容に書き換えれるようにしたいのですが。 (スタートアップや環境変数の書き換え等)悪用目的じゃないです。 よければ初心者向けのお勧めのHPを教えてください。 できればサンプルをDLできるような所があれば・・・ ちなみにHPで公開されてるソースはどのようにして利用すればいいのでしょう? 貼り付けるだけではエラーばっかりでハングアップしてしまいます。。。 アドバイスお願いします
いろいろやってみて。
>>391 >レジストリに任意の内容に書き換えれるようにしたいのですが。
TRegistryオブジェクトを使う。
WindowsAPI使って実装も可能。
>貼り付けるだけではエラーばっかりでハングアップしてしまいます。。。
何を貼り付けたかにもよるので何とも。
具体的に何さ?どんなエラー返すんだ?
394 :
デフォルトの名無しさん :04/04/23 00:39
(´-`)。o ○ (レジストリだけは完全に学習してからにして欲しいと 思うのはオレだけか? つーか、自分が使うツールってことであって欲しい…)
レジストリは怖い。
ヘルプの文字列リストの使い方では、TStrings型で宣言してTStringList型をCreateしていますが、 TStringList型で宣言してはいけないのですか?
>>395 自分で使うツールです。
たとえばyahooメッセで表示される広告を変えるとか。
普通に弄ったらエラーがでるんです。
この操作のツールはもう出てるんですけど勉強の為です。
できるなら完全に学習できる方法を教えてください。
いちをVBも持ってるんですが素人はどちらを使えばいいのでしょう。。。
>>395 たかだか設定情報の場所が違うだけだ。
気にすんな。
>>394 TRegistry は例外処理が必須なので最初に始めるプログラムとしては
少し難しいと思います。
格納値には型があり、基本的に Write〜 で書き込んだのに対応する
Read〜 で読み出す必要があります。型が一致しない格納値を読み書き
しようとすると例外が発生しますので、必要に応じて try 〜 except で
捕捉しなければいけません。ヘルプの例外処理を読んでみてください。
>>397 TStrings で宣言する理由がなければ (例えば TStringList のメンバーを
隠蔽したいとか) 、TStringList で宣言する方がむしろ普通かと思います。
(´-`)。o ○ (「どちらが」なんてことを他人に決めてもらうのはどうか。 自分の好きなようにすればいいし、挫折したらしたで他やれば良いかと)
>>400 そうですか、どうもありがとう御座います
>>400 アドバイスありがとうございます
基本からやっていきたいと思います。
>>401 あくまでも参考にと思って聞いてみただけです。
そうですね
404 :
デフォルトの名無しさん :04/04/23 11:02
しおりの設定なんですが、設定したしおり(□に数字が入ってる)の数字が非常に みにくいので、色を変えたりしてみやすくしたいのですが、どうすれば いいのでしょうか?
某に要望書をだす。
>>404 色覚異常者かな?
バイナリに格納されているビットマップを書き換える。ってことになると思うけど。
407 :
デフォルトの名無しさん :04/04/23 12:55
>>404 ちゃんと見たことあるのかな?
みやすいと思うのか?
あと、解像度を高くして使っているから、さらにみにくくなっているというのもあるが。
俺も見難い。 Delphi 6 Personal 濃い緑に黒字の奴だろ? これを見やすいと言ってる香具師の気が知れない。
数字が書いてるのにも気づかなかった漏れ。 まあしおりは使ってないけど。
俺は栞使わないで別ウィンドウで開く使ってる。
見やすくは無いが見えないことも無いって位か。 モニターのブライトネスはかなり低いけど。
412 :
デフォルトの名無しさん :04/04/23 17:06
しおりは ひとつか ふたつ記憶させるのにいい。
ヘルプのフォントを変更することはできますか?行間の広いフォントにしたいのですが。 DelphiのヘルプはHTMLヘルプじゃないのでできないのでしょうか。
ガーン。オレも数字なんて知らなかった…<しおり 見づらいとは思わなかったが。 7とか8だと「しおりの保存機能」は付いてんだろうか? 多分無いような気がするが。便利だと思うのに。
415 :
デフォルトの名無しさん :04/04/24 00:54
脳で考えただけでそこへ移動できたら便利だね。
夢物語見てないで、現実にあるものをもっと使いやすくしろ>Delphi
すみません、質問です。 プロジェクトを読み込むと「フォーム作成中にエラーが発生しました。2197行で行が長すぎます」という エラーが発生しました。 どうもUnit1.dfmが壊れてるみたいなのですが・・・。 どうすればいいんでしょうか?
・Unit1.dfmを修復する ・諦めて作り直す ・悔しくても泣かない
_| ̄|○
functionとprocedureでオーバーロードすることは出来ないんですか?
2197行を含む一番内側のbegin〜endを削除すれば他の部分は助かる
function Hoge: Integer; overload; procedure Hoge; overload; begin Hoge; end; どっちのHogeを呼び出すの?
やりゃわかるだろ
同じパラメータを持つメソッド 'Hoge' がすでに定義されています だってさ ケッ
何するかわからんコード書いても仕方ないな
たとえば function hoge(i:integer):integer; procedure hoge(var i:integer); とか
引数が同じヤツはオーバーロード無理
アマゾンは返品可能だから、新品買って読んでみて合わないと思ったら返品するか それは気まずいと思うなら、 ユーズド価格 : ¥2,000よりを買って、合わないと思ったらまた売ればいいじゃない。
434 :
デフォルトの名無しさん :04/04/25 11:29
「Delphi オブジェクト指向プログラミング」 何年たっても不滅の名著ですねー。 この本を読んで初めてオブジェクト指向をなんとなく理解できました。 最近書店で見かけないので絶版になったのかと思ってた。
復刊ドットコムでは 中級者以上必携になってますが、 俺でも理解できるようなものなんですか?
古すぎだと思う。
すみませんが... real型はstr型に直せないですか?
ド素人ほど必須だと思うけど。>Delphi オブジェクト指向プログラミング 復刊を期に手に入れた方だけど、これがなかったと思うとぞっとする。
Delphi オブジェクト指向プログラミング 買ってみました。 アドバイスくれた方々どうもありがとうございました。
持ってない漏れには持ってないことの不便さが分からん そんなにいいの?
ヘルプの言語ガイドを読んで理解できない人にはいい本かも知れないね。
443 :
デフォルトの名無しさん :04/04/25 16:00
Delphiにおけるオブジェクト指向をこれほどわかりやすく解説した本は他に知らない。
自前のクラス作成・活用もコンポーネント作成もVCLのソース読むのも
この本を読んでからできるようになった。
この本読んでなければ私はきっと今も初心者だったことでしょう。
>>440 超初心者には難しすぎる本かも。
しかし良い本なので将来役立ててください。
まずは他の本で言語の基本を勉強しましょう。
444 :
デフォルトの名無しさん :04/04/25 16:08
>436 純粋にオブジェクト指向の解説本なんだから古いも新しいも関係ないのでは。
>>443 そうか・・・でも有用な本なら損はないと思っておいて、
もう一冊買って見ます。
わからないことがあったらまた
質問させてくれ。
そのときもよろしく頼みます。
446 :
デフォルトの名無しさん :04/04/25 21:49
>>439 確かにその本は不朽の名著だと思うけど、Delphi1に準拠している点を改訂して
新版を出してほしかったな
でなければ、中村さんあたりの大御所にDelphiオブジェクト指向プログラミングに
関する書籍を出版してほしいところだが・・・ヒマないんだろうな
結論 Delphiなんかやめとけ。
結論 釣られた奴は敗北者。 以上。
> 中村さんあたりの大御所に 自分もそう思います。2年まえだったら。 今からですと、Delphi の先細りがハッキリしてきているので、あまり意味ない と思います。しかし、オブジェクト指向そのものの思想というか基礎的な事柄は 言語によらず重要だと思っています。
内容は古いけど筆者の読者をオブジェクト指向への 誘導のさせかたは今でも好き。代入互換性の重要さ を説いてる人はこの人以外あまり見かけないね〜。
451 :
デフォルトの名無しさん :04/04/25 23:32
この筆者、LINUXの本も出してるけど、かなり独特。 ブートローダーの解説で、OSがブートする仕組み(カーネルは何者なのかとか、 OS起動前になぜファイルをメモリに展開でき実行できるのかとか) を非常に詳しく書いていたりする。 たかがブートローダーの解説でブートストラップの説明する本なんて他にないと思う。 筆者の信念は 「ツール使い方を覚える」のではなく「ツールの根底にある概念や原理を理解する」 のが大事だと思っているのだと思う。 実際、書いてある事を理解すれば仕組みを理解でき、応用力がつく。 この筆者の本は役に立ちます。
> 代入互換性の重要さ 持ってたけど、どっかいってしまったので、詳しくは分かりませんが、 ひょっとして、下位クラスのインスタンスは上位クラスの参照に代入できる ことを言ってるんですか? だとしたら、OOP の基本ですけど、多態性の。 OOP に関するどんな本でも必ず載ってますよ。 Delphi は、C++ と同様、クラスの外に、関数やレコード型や変数を宣言できたり して、OOP 用の言語としては、Java や C# よりも構造化言語に近くて、中途半端 です。
だが本音と建前を使い分けられる仕様だからこそよい。
> だが本音と建前を使い分けられる仕様だからこそよい。 同意。中途半端さ加減が絶妙ではあるね。
(´・ω・`)さっぱりわからない…。
"代入互換"や"代入互換性"じゃほとんどヒットしないけど どんなキーワードで検索すればいいのですか?
> どんなキーワードで検索すればいいのですか? 多態性 の検索結果 約 220,000 件
塚越本は超初心者にはやや難しいし、中級者には陳腐だな。 まず、初心者サイトでポトペタの練習をして、「なぜ、このように動作するのか」を 考えてから読むといいかも。
質問させて下さい。 ScrollBox上でマウスホイールを回転させても、OnMouseWheelイベントが発生せずに スクロールバーが動いてしまいます。 スクロールバーを動かさずOnMouseWheelイベントを発生させる方法はありませんか?
そうなんです。マウスドライバをバージョンアップしてからなんです。 どうやらフォーカスに関係無く、マウスカーソル直下をスクロールさせてるみたいで ドライバ側でホイールを切れば、今まで通りに動くんです。 どのような環境でも一定の操作感で動かしたいんですが無理でしょうか?
どのような環境でもって言われても、普通は検証できないし
TFormにあるヘルプ機能や、WinHelpは.hlpのヘルプファイルにしか 対応してないようですが、.chmにはデフォルトで対応してないのでつか? F1キーを押したときに表示させるようにするには、F1が押されたことを イベント関知して、そして自分でフォームに応じたヘルプのトピックを表示 させるようにしなければならないんでしょうか?
464 :
デフォルトの名無しさん :04/04/26 14:12
吐駄っちって 「家族に不幸があったため NET 活動を自粛しています。m(_~_)m」 なんて書いといて全然自粛してないしw
外出
プリンターの制御(ってほどのものではないけど)についてお聞きしたいのですが、 デジタル複合機があって、ホチキス止めする機能があります。 ここからここまでを印刷してホチキスで止めるというのはどのように書けばよいのでしょうか?
すいません sageてました。
>>466 情報が少なさ過ぎる。
ホチキス止め処理をしているのがプリンタドライバかハード側かすらも解らない。
ハード側で制御しているなら、アプリケーションでは如何なる言語を使おうがムリ。
プリンタドライバでしているとしても、それを行うAPIやコマンドの類が公開されていない限り不可能。
>>468 .NET使えない開発もあるだろ
答えてやれないなら返事するな
>>463 HtmlHelpを使えるようにす.pasや、メッセージをフックする方法が
米のBorlandのTipsにあるよ。
あと、フリーの.pasでF1キーその他を関知して、TFormコンテキスト等を
HtmlHelpに渡してくれるソフトなんかもあるので、調べてみたら?
wordでホチキス止めを実施したときはプリンターの設定で実施しました。 なので、プリンタドライバ側で処理しているのではないかと思います。 このような、APIはWindowsの標準ではないのでしょうか? 両面印刷は出来たので同じようなイメージで調べたのですがわかりませんでした。
>>471 全てのプリンタに標準で両面印刷やホチキス止め機能が付いているとでも?
>全てのプリンタに標準で両面印刷やホチキス止め機能が付いているとでも? さすがにそうには思いませんが、Windowsで機能があるのかなと思いまして・・・ そういゆうものではないのですか? 両面印刷の選択とか、A4,A3の選択みたいなものだと思っていたのですが
Win32APIスレかそのプリンタメーカーに問い合わせたら?
>474 わかりました。 明日、メーカーに聞くか Win32APIスレをしばらくROMって質問します。
調べてみたのですがよくわからなかったのでヒントをください。 いま、簡単なデータベースアプリケーションを作っています。 その中で、テーブルのメンテナンス画面としてモーダルダイアログで 表示したウィンドウで、TDBGridなどを使用してデータに変更 を加えるインタフェースを作っています。 たとえば、データを変更して、やっぱりキャンセルしたい場合に キャンセルボタンを押してダイアログを終了すれば、先ほどまでの 作業はなかったことになるようにするにはどうすればいいのでしょうか。 キャッシュアップデートとか、そのあたりを使うのでしょうか。 よろしくお願いします。
ヘルプでキーワード検索タブを表示して rollback と入力 その下の TDatabase をダブルクリックして出てきたヘルプの例を見る。(D7)
478 :
デフォルトの名無しさん :04/04/28 23:42
TEditコンポーネントに数字を入力させて、 それを変数に格納したいのですが、 どうすればいいですか。 自動的に Form1: TForm1;とグローバル変数が定義されています。 イベントはOnChangeを使うのか程度しかわからないです。
変数にしなくてもEdit1.textで直接入力した内容を読み出せるみたいなので それでいいことにしました
>>479 strtointdefあたりをお忘れなく(数字しか入力出来ないようになってるんなら
別だけど)。
indyのTIdTCPServerとTIdTCPClientを使って接続先の MACアドレスの取得をしたいのですがどうすればいいですか? よろしくおねがいします。
DelphiからExcelのセルに数値を読み書きしたいのですが セルに書き込む方法は解りましたが、セルから数値を取得するにはどうすればいいでしょうか?
483 :
デフォルトの名無しさん :04/04/29 17:58
Delphi6インストールしたんですが起動アイコンが見当たりません どこにあるんでしょうか?
delphi32.exe
>>484 ありがと〜、ファイル名で実行してみます
スタートメニューに無かったのかの小一時間(ry
487 :
デフォルトの名無しさん :04/04/29 19:40
Indyコンポーネントをインストールしようとすると、
「プロシージャエントリポイント @Idresourcestrings@_RSBindingAny が
ダイナミックリンクライブラリ Indy60.bpl から見つかりませんでした。」
というエラーメッセージが出て失敗します。
何が原因なんでしょうか?
環境は
Windows XP
Delphi 6.0 Update Pack 2
インストールしようとしたパッケージは
http://www.nevrona.com/Indy/download/Files/Indy9.html からダウンロードできる9.0.14 Source code distributionです。
インストールの方法はzipファイルに同梱されている
Manual Installによりました。
488 :
デフォルトの名無しさん :04/04/29 21:33
>483 こんな初心者がどうやってD6手に入れたのか小一時間w
むしろ普通にパッケージを入手したに20Mag
むしゃくしゃしてやったに30孫
>>487 Del6perはIndy使えないの。
はずしてたらゴメンネ。
495 :
デフォルトの名無しさん :04/04/29 23:03
Windows初心者がデル手に入れてもただのゴミ。 しかもどう考えても違法品でしょ。今時D6売ってないし。
>>495 売ってなくても合法的に手に入るんだよ。
>>486 それが無いから驚いたんです、
探せど探せどエクスプローラが展開するばかりで
>>498 見つけたから大丈夫です、ちなみにVectorから落としました
微妙に話しがかみ合ってないような気もする。
501 :
デフォルトの名無しさん :04/04/30 01:19
自己解決してしまいましたのでご報告を。 「プロシージャエントリポイント .... が ダイナミックリンクライブラリ ... から見つかりませんでした。」 というエラーメッセージは、 DLLのバージョンが古いために呼ぼうとした手続きや関数がDLLの中に 含まれていない場合に起こるメッセージのようです。 また、上記インストール方法ではC:\Windows\System32\以下にindy60.dplを作成するのですが、 ${DELPHI}\Bin\以下および${DELPHI}\Source\Bpl\以下にも同名のファイルの古いバージョンが存在したために、 ライブラリパスの設定の関係上そちらが優先して読み込まれていたようです。 なので、上記のようなエラーメッセージが発生した場合、 別のパスの同名のファイルの存在を疑うといいかもしれません。 今後似たような質問がありましたらご参考にしてください。 それでは皆さま、どうもありがとうございました。
OpenDialogのOnIncludeItemで、 特定の拡張子のファイルを非表示にするやり方をどなたか教えてください。
504 :
デフォルトの名無しさん :04/04/30 09:24
>>504 そうです、VBのただのやつに似てるネこれ
>>503 uses ShlObj;
var file_name: packed array[0..MAX_PATH] of Char;
SHGetPathFromIDList(OFN.pidl, file_name);
これでファイル名がとれるから後は煮るなり焼くなり
507 :
デフォルトの名無しさん :04/04/30 13:59
どうやって 煮るのか 焼くのか 教えてくれ(w
それが人に者を頼む態度かっ!! なんつって。 フィルターに必要な拡張子だけ許可入れるんじゃダメなんか?
漢字間違ってんじゃんorz
Inc(rya := CompareT(ry ExtractF(r (
MIDI再生プログラムを作りたいのですが、 再生、制御に関するコンポーネントは存在するのですが、 スペクトラム表示機能みたいなコンポーネントって存在するのでしょうか。 自分でやろうと思っても全然その辺のことわかんないんですorz
Include:=False;でもTrueでも全部表示されるみたいなんですが、 Includeで表示させるかを指定するものとは違うんでしょうか? この辺が良く分かりません。
delphi personalでタイプライブララリって作るの無理?
>delphi personal delphi6 personal
>>510 何じゃそりゃw
そんなことしてるとそのうちコンパイラ様が真似するぞ!
[ヒント] Unit1.pas: 変数 'a' が宣言され(ry
[警告] (r
Tpanel上にあるTbuttonがクリックされた時に Tpanel.nameを取得したいのですがどうすれば良いですか?
TButton.Parent.Name
>>517 実際にやってみた結果、取得する事が出来ました。
ありがとうございました。
ObjectList.Add(追加Object); でどんどんObjectListにオブジェクトを追加していくとして、 終了時にObjectList.Freeとすれば追加Objectの使用しているメモリも開放されるのでしょうか?
OwnsObjectsの値による。
>>520 格納されているobjectはこんな感じです。
TData=class(Tobject)
public
string型と
integer型の値が複数
end;
いや、そのだな……うがーっ TObjectListのメンバをOからOまで全部見ろ
すみません。とりあえず出直してきます・゜・(ノД`)・゜・。
>>522 理解しました。初心者以前の問題でした…
本当にごめんなさい。
「くだすれ」だから謝る必要無し。
誠意がなくなったら人間お終いよ
さよなら人類
この間友達4人とカラオケ行って歌ったら、すごく盛り上がったよ 知ってたのは漏れを含めて2人だったがw
TObjectListで質問です。 フォームをたくさん作るので、TObjectListで管理しようと思っています。 しかし、TObjectListはRemove時に自動的にオブジェクトを解放してくれるので、 作成したFormはFreeしなくてもいいのですよね? しかし、フォームを安全にするならReleaseを使えという記述がよくありますが、 そうするとTObjectListではReleaseではなく、Freeしてしまうため、TObjectListで フォームは管理すべきじゃないんでしょうか? もし安全にTObjectListのようにフォームのオブジェクトを管理する方法があったら 教えてください。
> Remove時に自動的にオブジェクトを解放 ヘルプより OwnsObjects プロパティが True の場合でも,Extract メソッドを使って, オブジェクトを解放せずにオブジェクトをリストから削除することができます。 つーか、Screen.Forms や FormCount を使うのが普通だけど
Remove メソッドは,指定したオブジェクトをリストから削除し,(OwnsObject プロパティが Trueの場合)オブジェクトを解放します。 function Remove(AObject: TObject): Integer; 説明 Remove メソッドを呼び出すと,添字が不明なオブジェクトをリストから削除できます。 返される値は,オブジェクトが削除される前の,Items 配列内のオブジェクトの添字です。 指定したオブジェクトがリストに見つからない場合,Remove メソッドは -1 を返します。 OwnsObjects プロパティが True の場合,Remove メソッドはオブジェクトを解放し,同時にそのオブジェクトをリストから削除します。 オブジェクトを削除すると,削除されたオブジェクトに続くすべてのオブジェクトが上の添字に移動し,Count プロパティがデクリメントされます。 リストに複数のオブジェクトが存在する場合,Remove メソッドは最初に見つかったオブジェクトだけを削除します。 したがって,OwnsObjects プロパティが True の場合,何回かにわたってオブジェクトを削除すると,最終的にリスト内のオブジェクト参照は空になります。 (オブジェクト参照ではなく)添字を使ってオブジェクトの削除を指定するには,Delete メソッドを呼び出します。 オブジェクトを解放せずにリストから削除するには,Extract メソッドを呼び出します。
マウスカーソルの下にあるウィンドウのHWNDの取得をする方法を教えてください
>>531 おおFormCountはしらんかった。これは使えそう。
画面に表示されてるってのは、Visible := Trueの場合だけなんですかね。
実験してみます。
RemoveでFreeしてくれるのはわかるのですが、安全に破棄するなら
Releaseのほうがいいんじゃないかと思って、ReleaseではなくFreeして
しまうTObjectListではFormは扱うべきじゃないのでは?と思ったんです。
ボタンを押すと、新しいウィンドウが出てきて そこで色々な設定出来るようにしたいのですが。 Formを新しく一つ作って、ユニットの参照をして・・・と こんなんで方向性はあってるのでしょうか(´Д`;)
ありがとう procedure TMainForm.Button2Click(Sender: TObject); begin TSetupForm.Create(Self); end; ですが、これでウントモスントモ言いません_| ̄\○_
show しないとね。 デフォルトの例では、プロジェクトオプションで Form2 を自動生成からはずしておいて uses Unit2; procedure TForm1.Button1Click(Sender: TObject); begin with TForm2.Create(Application) do show; end; な感じね
超初心者スレでそれをやるのは・・・
そもそも何処までが『超初心者』なのか… コンポーネント自作の話まで出たことあるし
ふと気になったんですが、適当に宣言している変数は その処理内でFreeしてやらなくていいのですか? Char : Array[0..10000] of Char; という宣言をしたのですが、ちゃんと開放されるのか心配になりました。 色々なWebサイト見てもされてないので必要なさげに思えるのですが、 どうも気になってしょうがありません。
>>544 ただの変数は解放の必要ない。クラス型だけ気にすれば(・∀・)イイ!!
Createした時は最後にFree と思っていればいい。
>>545 ありがとうございます。
喉の小骨取れました。
まぁ補足すると クラス型変数も 変数は解放してないしね。 オブジェクトを解放してるだけだし。 var list:Tstringlist; begin list:= TStringList.create(self);←listは今作ったTstringlistを指しているだけ list.free;←なんとな変数を解放しているかのような印象を受けちゃうね end;
> list:= TStringList.create(self); TStringList のコンストラクタでオーナを設定できるとは知らなかったなぁ
550 :
デフォルトの名無しさん :04/05/04 16:30
Delphi でMS Agent をいじっているのですが・・・。 LanguageID プロパティの設定がうまくできません。 procedure TForm1.FormCreate(Sender: TObject); begin Agent1.Characters.Load('MyAgent','C:\WINDOWS\msagent\chars\merlin.acs'); AgentChar:=Agent1.Characters.Character('MyAgent') as IAgentCtlCharacterEx; AgentChar.LanguageID:=$409;// ここでAccessViolationエラーが出ます AgentChar.Show(0); AgentChar.Speak('apple', ''); end; LanguageID プロパティを設定しないと日本語の音声になってしまいます。 英語の音声に切り替えたいのですが、 どなたか、MS Agent に詳しい方はおられませんか?
(追記) VBでは、こんな感じで正常に動作しました。 Private Sub Form_Load() Dim marlin As IAgentCtlCharacterEx Agent1.Characters.Load "marlin", "C:\WINDOWS\msagent\chars\merlin.acs" Set marlin = Agent1.Characters("marlin") marlin.LanguageID = &H409' American English marlin.Show marlin.Speak "apple" End Sub
>>550 うちの環境だとAccessViolationエラー出ないぞ
AgentChar の宣言、間違たりしてないか?
え、そうなんですか・・。 私の宣言部はこんな感じなんですけど、552さんとは違いますか? type TForm1 = class(TForm) Agent1: TAgent; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } AgentChar: IAgentCtlCharacterEx; end;
uses 節はこんな感じになっています。 uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, OleCtrls, AgentObjects_TLB;
>>553 んーむ…全く同じだが正常に動作するな
環境依存…?
そうですか・・。 どうも、ありがとうございました。 現在はWinXP&Delphi7の環境なので、Win98とかDelphi6でも試してみようと思います。
>>552 さっそくDelphi6で試してみたら、動きました!
AgentObjects_TLBのコードがDelphi7に対応していないのでしょうか・・・。
少しDelphiの将来が不安になってしまいました。(関係ない?)
delphiでmp3を再生する方法を教えてください。 関連サイトを探しのですが見つかりませんでした。 御願いします。
MediaPlayerかShellExecute使っとけ
MCIもお忘れなく。 BCBだったらDirectShowでFAなんだが‥‥
561 :
デフォルトの名無しさん :04/05/05 23:59
ケン 2004/05/03(月) 20:07:55 550 :デフォルトの名無しさん :04/05/04 16:30 一日たったから、こっちへマルチポストですか。
いいんじゃないでしょうか。レスつかなかったし。
>>562 レス付かなきゃいいってセンスが分からん。
削除するんならまだしも。
マルチポストするヤツは人間として失格。
>>563 >削除するんならまだしも。
どうやって削除するの?
>マルチポストするヤツは人間として失格。
適切なレスがなければいいんじゃないでしょうか。削除する手段がないし。
>レス付かなきゃいいってセンスが分からん。
わからんヤツは人間としてどうなの? たんに頭わるいだけじゃないの?
>マルチポストするヤツは人間として失格。 これを呪文みたいにとなえるヤツがいるよね。 なぜ、マルチポストが嫌われるか、その理由を一度考えてみたらいい。
>どうやって削除するの? 2ちゃんは無理だけど、他は削除出来るところあるだろ。 >適切なレスがなければいいんじゃないでしょうか。削除する手段がないし。 ↑上と同じ。 >レス付かなきゃいいってセンスが分からん。 >わからんヤツは人間としてどうなの? たんに頭わるいだけじゃないの? 失礼なことをするヤツにマトモな脳味噌はありません。 それくらいも分からんの?
まぁ「マルチポストがなぜ悪いのかが分からない」ってヤツは 返答する側になったことが無いんだろうな。
> 2ちゃんは無理だけど、他は削除出来るところあるだろ。 マルチポストはいけないことである、これは同意。 今回の件は、どうやって削除するか訊いている。答えろよ。
>>568 はぁ?あっちは消せるだろ。
もちろん消した後に謝罪でも書かなきゃダメだが。
つーか、噛みつく所が違うぞ、お前(w
> 返答する側になったことが無いんだろうな。 勝手な推測は迷惑。どんな根拠あるの?
まぁまぁ。 ケン=550が、マナー知らずのクズだったってことで。
> はぁ?あっちは消せるだろ。 そなの? 書き込んだことは何回もあるけど、消し方知らないんだけど。
>>572 管理者に頼めば消せるのでは?
2ちゃんじゃ、そう簡単には行かないが。
> ケン=550が、マナー知らずのクズだったってことで。 そんなことはない。ちゃんと結果だけは報告してるし。 ほめられたことではないが、最低限のことはしてるようだよ。 全部同時ポストで、すべて放置、というのがもっとも悪質。
返答する側で「マルチポストされて、自分のレスの方は無視されて 知らん所で解決してた」 なーんてことになっても平気な人は人間が出来てて素晴らしい。
> 管理者に頼めば消せるのでは? いちいち管理人を引っ張り出す方が迷惑なんじゃないの? 消してくれる保証もないし。2ちゃんじゃ簡単じゃなくて、ほかは簡単だから消せ、 ってどういうこと?
>>575 あのね、マルチポストはいけないことである、と、これは同意。
一般論ではなく、今回の件を議論してる。 OK?
今回は解決するようなレスはついていない。OK?
ついたレスにはちゃんと応答している。OK?
>>576 今回は2chと「簡単には消せない掲示板」だったけど、
大抵は投稿者が削除(パスワード設定)出来るのが普通では?
>>577 今回の件限定なんて、誰が決めた?
勝手なルール出すなよ。
やはり頭のわるいのと議論するんじゃなかった。アホらし。
580が逃げましたw
役に立たない話はフサギコのほうでやってくんない?
必死に言い返しましたw
マルチポストしても 両方の板にちゃんと結果報告して レスも返したらOKですか?
「返答する側の気持ちも考えろ」っていうが レスつかなかったんだろ? 質問する側の気持ちも考えろよ。 まぁマナーとして、最初に質問したほうに 「レスがつかなかったので他所で聞いてみます」ぐらい書いておくべきとも思うがな
みなさん、すみませんでした。 もうひとつのサイトではMSAgentに詳しい方がおられないようだったのと、 早く問題を解決したいという身勝手な気持ちで、こちらにもお願いしてしまいました。 私は、返答してくれる皆さんのおかげで助けられているのに、配慮が欠けていました。 かばってくれかた方、すみませんでした。
∧,,∧ マターリいこうよ ミ*゚Д゚彡 ミつ旦(ミ~~ @ミ ミ マルチポストの1コや2コや ∪''∪ 3コや4コや…ひゃくコくらい 大目に.... 100個所もマルチできるとこないか。
マルチ野郎はゴミクズ
590 :
デフォルトの名無しさん :04/05/06 15:18
フォーム内に複数のフレーム(大きさや位置はバラバラ)が 重なって表示されるような画面を作っているのですが、 フレームの重なる順序(表示順序?)を変える方法を教えてください。 Delphiのバージョンは6です。 関連するメソッド、またはプロパティ名などを教えていただければ、 具体的な使い方は自分で調べるようにしますので、 よろしくお願いいたします。
test
フレームの表示順序を変えればいいんだよ
フレーム 画面 Delphiユーザ5年。知らないことばかり。
フレームって、TFrame のこと? BringToFront メソッドだろうか。
procedure foobar(var hoge, fuga: string); みたいな手続きがあって、fugaの値はいらない場合、 fugaには何を渡せばいいでしょうか。 捨て変数渡してるのですが、どうも無駄な気がして・・・
>>592-593 質問の仕方が悪かったようです。すみません。
>>594 そうです。TFormの上に並べたTFrame(から派生したクラス)の
順序を変えたいのです。
BringToFrontメソッドで目的が達成できました。
どうもありがとうございました。
なんだか最近、とあるプロジェクトが IDEからコンパイル&実行して、終了すると オブジェクトインスペクタやエディタなどが再表示されるのに 時間がかかるようになってしまいました。 こういう症状ってなにが原因なんでしょうか?
プログラミング用のテキストエディターを書いていて C/C++のソースファイルを解析して関数や変数名をファイルに出力したいんですけど どうすればいいのでしょうか・・・・
>>599 ソースファイルをTStringListあたりに読み込んで1行ずつループまわして解析して
関数や変数名を抜き出して別のTStringListに蓄えていってSaveToFileすればよいのでは?
パーサ書け。
>>602 いやぁ、それはわかってます。
例えば「未解放のクラスがあるんじゃないか?」とかそういうのを聞きたかった。
ちなみに自分でCreateしたクラスは全部Freeしてあります。
一度コンパイルすると症状は出ないんですけど
現在進行形のプロジェクトなのでコンパイルの機会が頻繁なのです。
「リソースの読み込みに時間がかかる」とかならまだわかるんだけど
プログラム終了→IDE復帰が遅いんだよなぁ
・とあるプロジェクトだけでおきるのか?たのプロジェクトでは? ・せめて OS と Delphi のバージョンだけでも書いとくれ。 ・遅い、って何秒くらい? デバッグ対象アプリのプロセス終了時に時間がかかるのだとすると.. ・ウィルスチェッカーを常駐させていませんか? ・ネットワークやデータベース接続を行っていませんか?それらがタイムアウトを待っているとか.. ・環境設定ファイル等に存在しないネットワークパスを示すものが混ざっていませんか?
怪しそうなのどんどん削除していけばいい、いつか見つかる。 ソース晒すんならまだしも(誰も見たがらないと思うけど) とあるプログラムと言われても発生しうること予想しろなんてそりゃないぜ。 原因特定後に解からないならソースの一部晒すなりしたほうがいい。
まぁまぁ。 複雑なときのみ出るバグだってあるんだし。 人生相談だと思って回答するくらいの余裕をもとうや。
DelでDefaultGateを取得する方法を教えてください
DefaultGate ってなんだろう.. TCPIP の Default Gateway のことかなぁ?
>>608 そうです。そうです。
DefaultGateWayです。コマンドプロンプトでipconfigを実行したときの、
同等の表示をさせたいのですが、SubnetMaskとDefaultGatewayが
わからなくて・・・
過去ログ嫁。 で終わっちゃいそうだ..
最近の OS (NT4 SP4 以降)なら IpHlpapi.dll が提供している GetAdaptersInfo を。 Win98 とかになると、レジストリをつつくしかない。 GetAdaptersInfo Delphi でググりなさい
>>611 ありがとうございます。
いちおうなんとかできますた!!
ところがAdapterNameを取得しても、名前じゃなくクラスIDを
取得しちゃうんですが、これは自分でレジストリいじって探せって
ことですか?
delphiをはじめようと思うんですが プログラミング自体が初めてなので 初心者でも分かるようなサイトってありませんか?
>>616 すばやい返答ありがとうございました。
頂いたキーワードで調べてみます。
ソレなんだっけかなー?と思って、日本語でググルと1件だけだね…。
>>617 余計なお世話かもしれんが、「urlmon」か「Wininet」ではどーだろう。
>>618 実は616さんから頂いたキーワードは自分では処理しきれず、
まだファイルダウンロードは早いのかとあきらめていたところでした。
ところがwininetでググったら、素人の自分でも一発で実現できました。
本当にありがとうございました。
なんか微妙に腹たつな〜
そうだね。Indy の方が簡単だよね。
簡単だからわざわざWEBで書くこともないので情報が少ない、ということ。皮肉だね。 619はずっとWininetやってればいいんじゃないの。
本当にすみません。自分があまりにも無能である上、書き方も変であったと思われる為、 このスレ全体の方へ不愉快な思いをさせてしまったことをお詫びします。
気にすんなハゲ
625 :
デフォルトの名無しさん :04/05/08 15:26
へりくだり杉。ヒクツになるなや。
Λ_Λ . . . .: : : ::: : :: ::::::::: ::::::::::::::::::::::::::::: /:彡ミ゛ヽ;)ー、 . . .: : : :::::: ::::::::::::::::::::::::::::::::: / :::/:: ヽ、ヽ、 ::i . .:: :.: ::: . ::::::::::::::::::::::::::::::::::::::: / :::/;;: ヽ ヽ ::l . :. :. .:: : :: :: :::::::: : ::::::::::::::::::  ̄ ̄ ̄(_,ノ  ̄ ̄ ̄ヽ、_ノ ̄ ̄ ̄ ̄ 大ちゃん、公然猥褻で捕まっちゃうよ・・・
ごめん、誤爆った…
大ちゃんて、大ちゃん☆タフィの大ちゃん?
想像上の生物だろ
え?ナマハゲ?
>>602 nil逆参照すると、EAccessViolation出ね?
あぁ、varなのか…
∧,,∧,,,,,, ) (´⌒(´ ⊂ミ゚Д゚⊂,,,,,,,`つ≡≡(´⌒;;;≡≡≡ ズザーーーーーッ (´⌒(´⌒;; IPアドレス入力用コントロールって どこにあるでしょうか?
TMaskEdit ではいかんの?
Del6Personal入れたら、 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AEDebug が C:\Program Files\Borland\Delphi6\Bin\bordbg60.exe -aeargs %ld %ld になってるんだけど、略\Common Files\Borland Shared\Debugger \BORdbk61.dll -aeargs %ld %ldかBORdbg61.exeに書き換えれば良いの? regsvr32 /u してregsvr32しなきゃダメ?
∧,,∧ ふつうMaskEdit使うのかしら...
ミ,,゚Д゚彡
ミつ旦(ミ~~
@ミ ミ
>>637 さん
∪''∪ まあ!素敵!
ありがとう。勉強&使用してみるです。
Delphiとは直接関係ない質問かもしれないんですけど、 LabelのフォントとかってWindows上では変えることはできなくて、 常にMS UI Gothicでサイズも9ですよね? 変える事ができるのはそのプログラム上からしか 変えることはできないんですよね?(;´Д`)
わけわからん。 > Windows上では変えることはできなくて これの意味は? デフォルトフォントのことを言ってるの? TLabel は Delphi 独自の実装だから、直接 Windows とは関係ないよ
Windowsの設定でLabelのフォントを変えてしまう事ができるのかどうかということです。。 説明不足ですみません。。。
>>639 > ふつうMaskEdit使うのかしら...
ふつうは、コモンコントロールの IP Address Control を使うんだけど、Delphi
にはラッパーがないよね。いつか ML でも話題になったので過去ログ見てみたら。
CaptionとかTipヘルプとかのフォント設定を取得してTLabelとかにセットするとか。 どう取得するのか知らんけど
TLabel に限らず、Delphi のコントロールのデフォルトフォントは、Windows の システムフォントと無関係に設定されているので、できません。
>>645 あぁ、やっぱりそうですか。ありがとうございます。
> ふつうは、コモンコントロールの IP Address Control を使うんだけど 数字しかいれられないんで、あまり便利じゃないね。MaskEdit の方がいいかも。
簡単なプレイヤーを作っています。 プレイヤーと拡張子を関連付けてファイルをクリックするだけで 起動してファイルを開けるようにしました。 さて、アプリ起動中に別のファイルを開いた場合、 二重起動を防止して、起動中のアプリでそのファイルを開きたいのです 現在、二重起動を防止するところまではできたのですが 起動中のアプリに新しいファイル名を渡すにはどうしたらよいのでしょうか?
ファイル名を受け取るインターフェースを実装してそのインターフェースを使って渡せばいいだけ。 DDE とかでやればいいと思うが。
650 :
デフォルトの名無しさん :04/05/09 21:14
>>647 IPアドレスに数値以外の文字がありえるのか?
IPv6アドレスはA〜Fもあるな
16進は数値ではないと
数字の話を数値の話にねじまげられても。
IPv4/6の話を数字の話にねじまげられても。
OpenDialogを使用してファイル選択ダイアログ を出したのはいいのですけど、キャンセル処理って どうやるのでしょうか(;´Д`) VBだったらCancelErrorがあったから出来たんですが。。。
ヘルプより Execute メソッドはファイル選択用のダイアログボックスを開き,ユーザーが ファイルを選択して[開く]をクリックしたときに True を返します。ユーザー が[キャンセル]をクリックした場合,Execute メソッドは False を返します。
659タソアリガトン こんなに簡単だったとはorz
662 :
デフォルトの名無しさん :04/05/10 21:00
>>663 メソッドの構文を知らなくてもソースが読める
>>662 英語じゃないとかっこよくないじゃないか!
indyを入れたら恐ろしい量のコンポーネントが追加されたのですが ネット上にあるjpgファイルやgifファイルをダウンロードするには どのコンポーネントを使えばいいのでしょうか?
0〜9の異なる数字を導く方法がわからないので、教えていただきたいのですが。 4桁なら、↓の方法でできました。 a := random(10); b := random(10); while b = a do b := random(10); c := random(10); while (c = a) or (c = b) do c := random(10); d := random(10); while (d = a) or (d = b) or (d = c) do d := random(10); しかしながら、10桁ともなると、大変なことになってしまいます。 もっと効率のいい方法を教えていただけますでしょうか。 よろしくお願いします。
>>667 効率はまったく変わらないけど、こんなんでどうよ。
procedure TForm1.Button1Click(Sender: TObject);
var
A: array [0..9] of Integer;
I, J: Integer;
Retry: Boolean;
begin
Edit1.Clear;
for I := 0 to 9 do
begin
Retry := True;
while Retry do
begin
A[I] := Random(10);
Retry := False;
for J := 0 to I - 1 do
if A[I] = A[J] then
begin
Retry := True;
Break;
end;
end;
Edit1.Text := Edit1.Text + IntToStr(A[I]);
end;
end;
>>668-669 なるほど、配列を使うんですね。
勉強になりました。
ありがとうございました。
while じゃなくて repeat〜until の方がスマートだわ。 普段使わないから存在を忘れてた。
>>666 そのファイルをダウンロードするのに適切なプロトコルに合わせて選ぶ。
ひまわりか。懐かしいな。 かなり昔に興味本位で落としてみて、10分でアンインスコしたな。
キャレットを指定した行、列に移動させる方法を教えてください SelStartだと文頭からの文字数でしか指定できません 位置を取得する方法はたくさん出てくるのですが・・・ TRichedit、Delphi6です
> 位置を取得する方法はたくさん出てくるのですが・・・ 逆に、指定した行、列をSelStartに換算するといいのでは。
> 指定した行、列をSelStartに換算する RichEdit1.Perform(EM_LINEINDEX,行,0) + 列
Delphi6パーソナルで、 AND DWORD[EAX],0 が6Byteにアセンブルされてしまうんです。 本来は3Byteで済むはずなのに。 アップデートを適用したらしたら直りますか? ダイヤルアップで数十MB DLはきついので、教えてほしいんです。
直ってる
うぉ、直ってるんですか。うれしいけど...がんばってDLしよう。 60MBを5時間かけてDLしたんだから...
うふ、3byte 削るための努力としては見合っていますか?
奇数は遅くなるのでは?
ちょっと聞きたいんですが、あるクラス内での処理結果を 呼び出し側(Form1とか)に必要に応じて返したい場合 普通はどんな手段が一般的なんでしょうか?
メソッドの戻り値にする
あと、引数を参照渡し var にするとか。インスタンスをつくることと、可視性を 除くと、メソッドの呼び出しは普通の関数の呼び出しと形式的には同じだよ。 なぜ特別視して質問するのかな?
>>685 早速の回答、ありがとうございます。。。そうですか。
たとえば、クラスには、作成時に、作成したフォームに含まれる
コントロールを渡すようになっていて、そのコントロールの
イベントをクラス内で処理するような場合です。
で、そのイベント処理後、フォーム側の変数の一部を
変更したりするケースです。
まあ、クラス側からフォームの変数や手続きにアクセス
するっていう反則技も考えたんですが、やっぱ。。。
>>684 1.グローバル変数を使う。
2.処理をメソッドとして実装、Form1から呼び出して戻り値やVar引数で取得
3.処理結果はそのクラスの別のPublicメンバにセットしておき、必要に応じてそこから取得する。
4.クラスにユーザー定義イベントプロパティを作成し、Form1に作成した関数を割り当てる。
処理が終了した時点で、そのイベントを呼び出す。
>>688 ありがとうございます。
何か4のユーザー定義イベントプロパティってのが
一番すっきりするみたいです。どうもです。
('A`)ノWebBrowserで開いたリンク先が画像かHTMLか見分けるには どうすればいいんですか?
>>690 ソレだけじゃ、状況がよく分からないから答えようがない。
とりあえず、イベントでリンク先に飛ばないようにして
リンク先を裏でDLするなり拡張子チェックするなりするとか。
拡張子偽装がイヤだとか?
書き忘れた。 照れ隠しからなのか知らんが、質問にAA付けるのは 回答者のやる気を削ぐだけと思われ。
┌─┬────┬────┐ │aa│bbb . │ccc . │ ├─┼────┼────┤ │01│dog . │A │ ├─┼────┼────┤ │02│cat.. . │B │ ├─┼────┼────┤ │03│mouse │A │ └─┴────┴────┘ のようにListViewでreport表示したデータを 01,dog,A 02,cat,B 03,mouse,A と言う感じでcsvファイルに出力するにはどうしたらいいんですか?
行ごとに Caption とSubItems を読み出してコンマを挟んで連結する。 それを TStringList にadd、SaveToFile() でセーブ。以上。
”で誤動作する悪寒
SubItemsはTStringsだからCommaTextを使うと楽かも。
Project読込時に下記メッセージが出るのですが フォーム読込中のエラー クラス***が見つかりません、エラーを無視して 続けますか? 注意:エラーを無視すると、コンポーネント またはプロパティを失う場合があります。 ***を何処で追加すれば良いのでしょうか?
>>691 開いた先のページのURLを
WebBrowser1(表示用、align=alClient)
WebBrowser2(ページの大きさの取得用、aligin=alCustom)
の両方に読み込んで、onDocumentComplete2で
var
body: OleVariant;
WebBW: Integer;
WebBH: Integer;
begin
body := (WebBrowser2.Document as IHTMLDocument2).Body;
try
WebBW := body.scrollWidth + (Width - WebBrowser1.Width) + 24;
if WebBW < Screen.Width then
Width := WebBW;
except
end;
try
WebBH := body.scrollHeight + (Height - WebBrowser1.Height) + 16;
if WebBH < Screen.Height then
Height := WebBH;
except
end;
end;
で読み込んだ先のページの大きさにブラウザの大きさを合わせるようにしてるんですが
PNGファイルを読み込むと正しい大きさで表示してくれないんです。
とりあえず拡張子で判断して、PNGの場合ブラウザの大きさを変えないようにしてみます。
TStringListのDuplicatesのプロパティを設定しても 重複行が追加されてしまうのですが、どう書けば追加されずにすみますか? list := TStringList.Create; list.add('aaa'); list.add('bbb'); list.add('ccc'); list.add('ddd'); list.Sort; list.Duplicates := dupIgnore; list.add('ddd'); ListBox1.Items.AddStrings(list); list.Free;
Sortedプロパティをtrueにしてる?
してませんでした
>>699 やりたいことは分かった…ような分からないような…。
そのexceptには例外処理が省略してあるんだよね?
ソレは必要なのかな?
pngの「サイズを求める方法」を変えた方が良い…ような気がする。
現時点のはAlign任せってことだよね?
>701 うまくいきました。 ありがとうございます。
706 :
デフォルトの名無しさん :04/05/13 14:17
Delphi初心者なんですが 画像を読み込みをして、ある点(例:20pix,20pix)のRGBの値を 得たいのですが どのようにしたらいいでしょうか? できましたら教えてください。
708 :
デフォルトの名無しさん :04/05/13 14:26
>>704 >やりたいことは分かった…ような分からないような…。
すみません、説明が足りませんでした。
自分が作ってるのはタブブラウザーではなく、IEもどきのブラウザーを
作ってるんですが、新しくウインドウを開くリンクをクリックたびに
ShellExcuteで自分自身を立ち上げて、最初のナビゲートの時に
699の処理でブラウザの大きさを変更するようにしています。
大きさを変えるのは最初だけで、それ以降のナビゲートでは
ブラウザの大きさは変わりません。
なんでこんな面倒な事をしてるかというと、ポップアップ広告や
固定サイズのポップアップウインドウ(?)をブラウザで表示させた場合、
ブラウザの大きさを変更しないと余白が見苦しいので・・・。
>そのexceptには例外処理が省略してあるんだよね?
>ソレは必要なのかな?
exceptを外すと、特定のページで例外が発生する場合があるので
例外を回避するために付けてます。
ウインドウの大きさを変える方法は、現時点では699の方法が
自分で実装出来る限界なんですが、PNGファイルだけでなく
サイズを変えて欲しくないページまで変更してしまうのが悩みの種です。
やはりPNGファイルの大きさを取得したり、HTMLからページの大きさを
記述してる部分を解析して表示するようにしたほうが良いんでしょうか?
>>709 オレはpngからサイズ得た方がいいと思う。個人的に。
>記述してる部分を解析して表示するようにしたほうが良いんでしょうか?
記述してないことがあるから、無駄なような…。つーか、記述してない方が
多いかも…。
あらかじめ指定していた座標にマウスを動かし、 指定していた操作(右や左クリック)を行うプログラムを作るにはどうすればいいでしょうか。 SetCursorPos で希望の位置へマウスカーソルが動くのですが、そこから先がすすみません。 よろしくお願いいたします。
初めてカキコさせていただきます、Delphi初心者で、使い始めてから一週間ぐらいです。 プログラムソフトなど使ったこともなく、Delphiがはじめてという、プログラム初心者です。 他のソフト(便宜上Aソフトと呼びます)の補助ツール(Hツール)という形で、ソフトをつくっているのですが HツールにHotkeyを登録し、Aソフトがアクティブなときに Hツールに登録したHotkeyを押すと、Hツールのタイマーがスタートするようになっています。 Hookをつかった他の方のコンポを使用し、ここまでは出来たのですが Hotkeyのキーを、同時にアクティブなAソフトにも送信したいのです。 Dispatch()なるものを使えば、Hookというキーを盗む形ではなく、分けてもらう形で やりたいことを実行できそうなのですが、googleで検索してもほとんどヒットせず Hookのコンポを使用しました。 アクティブなウィンドウのハンドルを取得し、それに対してキー送信の命令を送りたいのです。 var Wnd: HWnd; //アクティブなウィンドウのハンドル// begin Wnd:=GetForegroundWindow; //アクティブなウィンドウの取得// と、すれば、アクティブなウィンドウのハンドルを取得することはわかったのですが、 このあと、Hツールに登録したHotkeyを、アクティブなウィンドウにキー送信する方法が まったく分かりません。 なにぶん、初心者ですので、的外れなことがあるかもしれませんが よろしくお願いしますm(_ _)m
Keybd_event
SetWindowHookExってコールバックできちんとCallNextHookEx呼んでれば普通にフック先にメッセージ行くと思うんだが‥‥
>>714 です、レスありがとうございます
>>715 さん
さっそくgoogleで検索してみました。
Keybd_event(Byte('M'), 0, 0, 0);
Keybd_event(Byte('M'), 0, KEYEVENTF_KEYUP, 0);
↑のような記述を見つけ、さっそく714のソースに貼り付けてやってみました
すると、ショートカットに設定したキーを押すと、アクティブなウィンドウにMキーが反映されました!
一歩前進して、嬉しいです。
ただ、この文をいじって(’M’)の部分のMを
hotkey1.hotkey
に置き換えて、ショートカット登録したキーをそのままアクティブなウィンドウに送ろうとしましたが
正しくない型キャスト、というエラーで実行できませんでした。
strtointなどの型変換があるのでしょうか?
APIはほとんど無知たために分かりません・・・
>>716 さん
はい、そうです。
>>717 さん
すいません、ショートカット登録したキーをHookするフリーの自作コンポを
フォームに貼り付けただけで、717さんの言っていることは全くやっていません・・・
まだまだ勉強不足で、フリーのコンポに走りました・・・
コードサイズの問題は、 and [eax],0 ではなく、and [eax],$FFFFFFFFだった。 $FFFFFFFFでなく-1を使えば大丈夫だった。 アップデートは見送りにしようか。 ☆ソース procedure AsmProcedure; var i : Cardinal; const EfuEfu = $FFFFFFFF; Mainasu = -1; asm lea eax,i and [eax],0 and [eax],$00000000 and [eax],-1 and [eax],$FFFFFFFF and [eax],EfuEfu and [eax],Mainasu end; ☆アセンブル結果 00407031 8D45FC lea eax,[ebp-$04] 00407034 832000 and dword ptr [eax],$00 00407037 832000 and dword ptr [eax],$00 0040703A 8320FF and dword ptr [eax],-$01 0040703D 8120FFFFFFFF and dword ptr [eax],$ffffffff 00407043 8320FF and dword ptr [eax],-$01 00407046 8320FF and dword ptr [eax],-$01 or,and,xor,pushでサイズが無駄に大きくなる可能性がある。 小さく速く短く理解しやすいコードは美しい...気がする。
>>718 M でなく 'M' を hotkey〜 に置き換えれ
>>714 です
>>721 さん、お返事ありがとうございます
'M'の部分を
hotkey1.hotkey
に置き換えて、実行をしてみました。
すると、プログラムがフリーズしてしまいました
何が悪いのか自分でもほとんど理解していないので、お手数かけます・・・
4000行ぐらいのCSVのファイルをListViewへ表示させたのですが その表示している状態をキャッシュみたいなファイルを作って次回から 高速に表示出来るようなコードとかってありますか? なんかヒントになるようなこと教えてください。
>723 ShortcutToKey(hotkey,うんこ,ちんこ);とかではダメなのか?
(´-`)。o ○ (「うんこ、ちんこ」にツッコミ欲しいんやろか…)
>>714 です
>>725 さん、お返事ありがとうございます
ShortcutToKeyを使って、
Keybd_event(Byte('M'), 0, 0, 0);
Keybd_event(Byte('M'), 0, KEYEVENTF_KEYUP, 0);
の、Mの代わりに登録したホットキーを反映させるには、どうしたらいいのでしょうか?
いろいろ調べて見たんですが、いまいち使い方が分かりません・・・
Shortcuttokey(hotkey1.hotkey,key,shift)
を Byte('M') のかわりに放り込んでみたんですが、使い方間違ってますよね・・・
keybd_event(key,0,0,0); ではダメなの?
具体的にショートカットキーは何をどう押すの? Keybd_event() はキーの押し下げ・上げを一組にして、実際のキーのシミュレート するのに使う。たとえば Keybd_event(Ord('M'), 0, 0, 0); Keybd_event(Ord('M'), 0, KEYEVENTF_KEYUP, 0); を Memo1 にフォーカスがある時に実行すると 'm' が入力される。 Keybd_event(VK_SHIFT, 0, 0, 0); Keybd_event(Ord('M'), 0, 0, 0); Keybd_event(Ord('M'), 0, KEYEVENTF_KEYUP, 0); Keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); だと、大文字の 'M' が入力される。 SHIFT+M をシミュレートしているから。 参考になりますか?
>>727 キー操作をトレースしてる側のHツールが
AツールにHotkeyの値を送るのはどんな意味があるの?
>>728 さん お返事ありがとうございます
その構文のkeyの定義について、ちょっとまだ理解できていないので
これから勉強して理解していきたいと思います
>>729 さん お返事ありがとうございます
ネットゲームの補助ツールということで、魔法を詠唱し、その効果時間をタイマーで
計る、といったことができるツールを作りたいと思っています。
魔法の効果時間を計るために、タイマーを用意しています
そのタイマースイッチを、メインメニューのショートカットを利用して
Hotkeyに設定したキーが押されれば、メインメニューの「タイマーON」を押し
タイマーのスイッチをONという形にしています。
そして、Hookをして、メインメニューの「タイマーON」を押しているので、
魔法キャストのキーを押したはずなのに、タイマーは動いているが
Hookでキーをとられたために、魔法が詠唱されてない、という状態になってます。
そのために、Hotkeyに登録したキーを、そのままアクティブなウィンドウに送信したいのです。
決まったキーであれば、例にあるように、
Keybd_event(Ord('M'), 0, 0, 0);
といった形で対応はできると思うのですが、人によって魔法の詠唱するキーが
違うので、その人に対応するために、ホットキーに登録したキーをそのまま
アクティブなウィンドウに送信したいのです。
まだまだ勉強不足で、いろいろアドバイスをいただいているのですが、
たぶん半分も理解できていません・・・
こんな私ですが、よろしくお願いしますm(_ _)m
誰か
>>714 にSetWindowsHookExの使い方レクチャープリーズ
俺あほだから正しい使用法忘れた・゜・(ノД`)・゜・。
登録してどうこうってのをやめて、Hツールが取得したキーを そのままAソフトに流してはダメなんだろうか… いや、むしろ登録してあるキー情報のデータ形式が問題なのかも…? 「hotkey1.hotkey」に、どのように格納されているのか…
var key:word; Shift:TShiftState; begin Shortcuttokey(hotkey1.hotkey,key,Shift);
なんか、マラソンはじめて1ヶ月で、2時間30分を切りたい、と望んでいるような。 ちゃんと地道で基礎的な訓練が必要なんでは?
>>736 ここはそういうスレじゃないの?
コーチのいない無名の選手がマラソンで成績を残したいという。
もし基礎的な訓練が必要なら、その訓練方法なりを示してあげないと、
路頭に迷うことになっちゃうよん。
参考書読んで勉強しろ、とか講座サイト見て勉強しろ、ということだったり、
過去ログ嫁、というだけだと、「どうすればいいか分かりません」という答えが
返ってくるだけだと思うけどね…
>>737 > コーチのいない無名の選手がマラソンで成績を残したいという。
そりゃそうだ。でも望んでる成績がトンデモだったりしたら、やはり、それなり
の訓練をしろ、というアドバイスもあり、では。地道に努力しろ、というのは、
掲示板でどうしろ、と簡単に書けない内容なのでは? 簡単に書ける内容だったら
地道な努力は必要ないわけで。
くだすれの意味は、その比喩でいうと、 3時間30分の記録をあと十分縮めるにはどうしたらよいか、という質問を しろ、という感じかな?
740 :
デフォルトの名無しさん :04/05/15 13:14
>>739 >記録をあと十分縮めるにはどうしたらよいか
!!
そういうことか。納得。
ただ、3時間30分というのがどのくらいか分からないけど、
「走ったことないんですけど、どうしたら完走できますか? 私は完走できそうですか?」
という質問は御法度というわけですね。
あくまでも記録なり足跡なりを残した上で、あと十分縮めるための方法を模索する、というスレ
だという認識で問題ないかな。
>>740 いつ頃登録したのか分からないけど、3日程度は待った記憶がある。
TEditのOnChangeイベントなんですけど アプリが内容を変更したときのOnChangeイベントは無効にして ユーザーが内容を変更したときだけOnChangeイベントを発生させるにはどうしたらよいのでしょうか?
>>743 イベントの発生を制限するのではなく、イベントが発生しても、それがアプリによるものか、
ユーザによるものかを判断させてみたらどうだろう。
>>744 それはどうやってやったらいいのでしょうか?
Senderとかで判断できるのでしょうか?
おっ、すこしは質問の色を変えましたね。 Edit1.OnChange := nil; ここで内容変更のコード Edit1.OnChange := Edit1Change; な感じ。
>>746 あ!なるほど。
でもTEditって毎回こんなことしないとだめなんですか・・
プログラミングって思ったより手間がかかりそうですね
> プログラミングって思ったより手間がかかりそうですね どう思ってたか知らないけど、Delphi より十倍も手間がかかる言語もあるよ。
ありがとうございました。 おかげさまでうまくいきました
例えにマジレスするのも何だが 素人にいきなりフルマラソン走らせるなよ
>でもTEditって毎回こんなことしないとだめなんですか・・ 継承しとけ。 ChangeメソッドとTextプロパティをオーバーライドすればいい
>>724 一番簡単なのは
ListView1.BeginUpdate;
〜追加処理
ListView1.EndUpdate;
あとはMLにある TMandom を使うとか(注意書きをよく読んだほうがいい
OwnerDrawで色々工夫するとかかな
もしTStringListでCSVファイルを読み出してるのなら
サンプル蔵の高速TStrings読込でファイル読込高速化はある程度可能
キャッシュファイルを作って高速化とかはわからん
失礼します。 練習として 「スクロールバーでRGB変化させて色表示」するプログラムや 「ボタンがクリックされた回数を表示」するプログラムなど、 ホントに小さなプログラムを作ってみました。 が、どれもexeファイルにすると400kb以上になってしまって…。 この程度のものなら通常、20kb前後に収まると思うんですが…。 何か解消の方法ありましたらお教え下さい。
756 :
デフォルトの名無しさん :04/05/15 15:58
いまある exeファイルのサイズを小さくしたい のと 小さな実行ファイルを作りたい を混同する人が多いよね
>>756 >754さんのリンク先をザッと読んで、
「随分手間が掛かるみたいだから、現状のままでもいいか」と考えていました。
でもこれを使えば、
さほど手間をかけずにファイルサイズを小さく出来ますね。
しばらく使ってみてデメリットが無いようであれば、常用させていただきます。
ありがとうございました。
> さほど手間をかけずにファイルサイズを小さく出来ますね。 プログラミングは全く関係ないし
761 :
デフォルトの名無しさん :04/05/15 17:16
Win32がらみの質問になるのかもしれませんが失礼します。 デバイスマネージャからデバイスの有効、無効を切り替える 操作をプログラムで処理したいのですが可能でしょうか?
たくさんのレス、ありがとうございます714です Hotkeyに登録したキーをショートカットとして使うのに、TH○okhotkeyというフリーの自作コンポーネントを 使ったことが、混乱の原因のような気がします・・・ 結局、よく見てみると、このコンポのおかげで、メインメニューのショートカットは使用しておらず こちらの勘違いで、ご迷惑をおかけしましたm(_ _)m また、このコンポのおかげで、自動的にHookをしてくれるために、Hookに関する知識もいらずに Hookができています やりたいことは、Hokeyに登録したキーを、そのままアクティブなウィンドウに流したい ということなのですが、このTH○okhotkeyの便利さもあって、Hookの勉強をおろそかにしていました もっと勉強してHookを身に着けて、CallNextHookExで、やりたいことをできるように がんばりたいと思います。 ご指導ありがとうございましたm(_ _)m
>>752 アドバイスありがとうございます。
StringListで読み込んでるので
サンプル蔵のコードを一度試してみます。
>>762 そのコンポーネントがやってるのはフックじゃなくてホットキーだ。
OfficeXPや一部のソフト(タブブラウザのSleipnirとか)で使用されて いる独特なメニュー、ツールバーなどの(フラットでマウスオーバーで ふちの色が変わったり)インターフェイスはDelphiからでも使用できるんですか? 正式名称があったら教えていただきたいです。
色が変わるのは標準ではないかも 自前で作るのがおそらく1番手っ取り早い
普通にTToolBarとTToolButtonで実現できるはず・・<作った覚えがある
TToolBar.Flatやね
なんか勘違いしてるような気がしてきた。 とりあえず謝っときます。 スレ汚しスマソ>ALL
>>765 Toolbar2000+TBXで出来るよ
TFile = class(TObject) public Name: string; いくつかのメソッド end; TFolder = class(TObject) public Name: string; List: TObjectList; function Add(F: TFile): integer; end; function TFolder.Add(F: TFile): integer; begin Result := List.Add(F); end;
procedure Form1.Button1Click(Sender: TObject); var F: TFile; FL: TFolder; begin F := TFile.Create; FL := TFile.Create; F.Name := '新しいファイル'; FL.Add(F); ここでいろいろな処理 FL.Free; F.Free; end; このような感じで作っているのですがFL内のリストにFのデータが追加がされません。 どこがおかしいのでしょうか。
>>772 TFolder.ListはどこでCreateしてる?
>>774 TFolderの、Create内でCreateして
DestroyでFreeしています。
>FL := TFile.Create; コピペミスだよね? データが追加されないってどう確認した?
>>772 FL := TFile.Create;
ここを
FL := TFolder.Create;
にしたら?
>>776 >FL := TFolder.Create;の間違いでした。
PFile = ^TFile;
TFolder = class(TObject)
private
procedure SetFile(F: TFile);
function GetFile(i: integer): TFile;
public
property Files[i: integer]: TFile read GetFile write SetFile; default;
function TFolder.GetFile(i: integer): TFile;
begin
Result := PFile(List.Items[i])^;
end;
ShowMessage(FL..Files[0].Name);
この処理を実行した時点でエラーが出て止まります。
Result := List.Items[i] as TFile; でどうよ?
>>779 ありがとうございます、取得できました。
でもあいかわらず終了時に読み込み違反が出てしまいます。
ListにTFileを追加する部分を省くとエラーは出ないのですが。
>>780 ListをCreateするとき、引数にFalseを書いてみれば?(ヘルプ参照)
TFileを二重解放してる気がする。
>>781 全部スムーズに行きました。
親切丁寧なご指導本当にありがとうございます・゜・(ノД`)・゜・。
>>782 書き忘れたけど、解放を自力でやるかTObjectListにまかせるかは
プログラムによるので考えてみてね。
784 :
デフォルトの名無しさん :04/05/16 12:35
RicheditでURLだけクリックできるようにするには どうすればいいですか?
ほかの場所をクリック出来ないようにするには? ということをききたいの?
ほかの場所には行かせないように、マウスを動かせなくするとか?
VBの方がよいかなあ
ApplicationのOwner以外のフォームをMDIの親にしたいんですが、 どうすればいいですか?
>>787 VBしか使ったことない人は、そのように感じることが多いようだね。
自分も長い間VBを使ってきてそう思っていたが、いざDelphiを触ってみると
以下に長い間自分が無駄な時間を過ごしてきたかが一瞬にしてわかった。
ただ、VB.NETに関してはそうとはいえない(VB.NET/C#の方がよいと思う点が
かなり出てきている)。
> ApplicationのOwner以外のフォームをMDIの親にしたいんですが、 回答じゃなくてすみませんが、なぜ「したい」のか教えてください。
>>790 > 以下に長い間自分が無駄な時間を過ごしてきたかが一瞬にしてわかった。
具体例プリーズ。
でないと、単なるデル厨にしか見えん。
> VBの方がよいかなあ 具体的理由プリーズ。 でないと、単なるVB厨にしか見えん。
板が荒れるのを見て楽しむような奴の相手はするな。
>>784 ∫,,,,,,,,,∧,,∧ たしか、どこかにあったけど・・・
⊂,,,,,,,,,つ,,゚Д゚ミつ
デルヒワールドだったかな。
失礼します。デルファイ初心者です。 delphi6.0でORACLEのストアドプロシージャに引数を渡そうと しているのですが、1つの時はうまくいき、2つになると2つ目の parambyname("→この部分←")の名前が見つからないというエラーが 発生します。 どのような原因が考えられるか教えてください。 よろしくお願いします。
画面のハードコピーをクリップボードを経由せずに、 JPGファイルで作成したいのです。 とりあえず、一度ビットマップ形式でデータを読み込み JPGに変換保存という方法で成功はしたのですが、 いかんせん遅いので、画像のデータをスマートにJPGに取り込むにはどうすればよいか、 ご教授願います。 よろしくお願いします。
>>784 非常に泥臭いですが、
いちおう、下の方法でうまくいきました。もしご参考になれば・・・
・文字列からURLを探す
・URLの部分を青くアンダーバー付で表示するようにする。
・カーソルの動きをチェックし、URL部分の上にいるときにはクリックカーソルに変える
・URLの上でクリックしたらURLを開くイベントを実行
>>797 GetDesktopWindow+GetDC+BilBlt
JPEGへの変換が遅いのは仕方が無いでしょう。
>>796 引数1個ならうまく実行できるんだよね?
・2つめの引数の微妙なスペル違い(実はこれが一番多い)
・PL/SQLには実は引数は1つしかなかったというオチ
・2つめの引数の種類が in ではなくて outだった
・(Delphi上で)Parametersが最初の一つしか指定されていなかった
が考えられる。
とりあえずDelphi抜きでSQL Plus*あたりから手動で引数を渡して実行して
確認してみれ。
ちなみに、DBアクセスの方法を書いておいたほうがいい(BDEとか、dbExpressとか)
漏れはサードパーティーのOracle VCLを使っているので、BDEやdbExpressに特化した
ものだとうまく答えられない。もしそうなったらゴメン。
> JPGファイルで作成したいのです。 bmp → jpg の変換速度は、ディスクアクセスに比較すると十分速いと思うぞ。 巨大なデスクトップを使ってるとか?
>>799 ありがとうございます。
試してみます。
>>800 やはりそうなのでしょうか。
やりたいことは画像ファイルの送受信して、相手の端末に
自分のデスクトップや画像を送る処理なので、
HDCの情報を直接送ることができればわざわざ
ファイルを作成する必要はないのですが。
>>802 作成処理から作成までで、1秒弱かかってしまいます。
壁紙とか使用してないシンプルなデスクトップなのですが
> 自分のデスクトップや画像を送る処理なので、 jpg にする必要ないんじゃないの。 > ファイルを作成する必要はないのですが。 そうですね、TBitmap に写し取って、SaveToStream() でメモリストリームにして そのメモリイメージをそのまま送れば、すべてメモリ上の処理で済む。 > HDCの情報を直接送ることができればわざわざ HDCの情報がそのビットマップに相当する
>>804 ありがとうございます。早速試してみたいと思います。
相互依存するクラス (たとえば、クラスAのフィールドにクラスBのインスタンスがあるけど、BはAのフィールドも参照する) これを別のユニットの置く方法ってありますか?
あります。
ありません。
・クラスAのフィールドにクラスBのインスタンス ・BはAのフィールドも参照する classA → UnitA classB → UnitB として、UnitA では、宣言部の uses に UnitB を含め、UnitB では実装部の uses に UnitA を含める
> ・BはAのフィールドも参照する どのように参照するかによる
TObjectで持ってimplementationでusesしてキャストすればいい
>>811 オレもそうしてるけど、一々キャストしなければいけないから
余りエレガントには思えないね。ローカルで代入するとしても、なぁ。
もっと良い方法は
無いんだろうなァ
> これを別のユニットの置く方法ってありますか? ありますか? って質問だっただろ。キャストは実装コードだけだろ。
相互に参照するクラスを別々のユニットに分ける時点でエレガントさとはオサラバ
Edit1に入力された数を2倍にして、Edit2に表示させたいんですが 文字が入力されたり、何も入力されていない時にエラーが出ます。 どうしたらいいでしょうか? procedure TForm1.Edit1Change(Sender: TObject); var x:integer; begin x:=StrToInt(Edit1.Text); x:=x+x; Edit2.Text:=IntToStr(x); end;
わけの分からない値が表示されるよりはエラーになったほうがいいだろ。 その時どうしたいんだ?それはプログラム作成者が決めることだ。 とりあえず適切なエラーメッセージを表示したければこんな感じ。 begin try x:=StrToInt(Edit1.Text); x:=x+x; Edit2.Text:=IntToStr(x); except on E: EConvertError do ShowMessage('Edit1に数値を入れろゴルァ!!'); end; end;
>>815 エラーが嫌ならStrToIntDefでも使ってください。
>>804 なぜか遅くなってしまいました。多分BMPのメモリストリームそのまま送ると、
今度は転送量が大きくなりすぎるんですね。再度、精進いたします。
>>815 文字を入力したくないなら、
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (Key <> '0') and
(Key <> '1') and
(Key <> '3') and
//略
(Key <> '9') then
begin
Key := #0;
end;
end;
なにも入力してないときにエラーを回避したいなら、
procedure TForm1.Edit1Change(Sender: TObject);
var x:integer;
begin
if Edit1.Text = '' then
begin
Edit2.Text:=IntToStr(x);
exit;
end;
//以下略
でいけるかと。質問の意味が違うかもしれないけど
失礼しました
>>818 は以下の間違いです
procedure TForm1.Edit1Change(Sender: TObject);
var x:integer;
begin
if Edit1.Text = '' then
begin
Edit2.Text:='';
exit;
end;
//以下略
delphiで、ウィンドウを持たないプログラムって どうやって作るんでしょうか?(コンソールアプリではなく) やりたい事は、外部プログラムの起動です。 新規作成→アプリケーション のプロジェクトで ウィンドウを作成する前に、処理をして ウィンドウを作成せずに終了する。 って感じですか? もしかして、personal版以外だと適応したプロジェクトがあるのでしょうか?
>>820 それでもいいしけど、コンソールアプリプロジェクト作って
program Project1;
{$APPTYPE GUI}
uses
Windows;
begin
OutputDebugString('hello,world');
end.
とか書き換えるだけ。
>821 ありがとうございます。 なんだか、とても簡単なんですね。 勉強させてもらいました。 また、何かあったらよろしくお願いします。
ソケットをクローズしなけりゃいいだけだろ
>>818 > なぜか遅くなってしまいました。多分BMPのメモリストリームそのまま送ると、
TJpegImage にも SaveToStream() メソッドがあるよ。
>>824 最初、自分もそうかと思いまして
ソケットをクローズしないで、
while (not Terminated) and ClientSocket.Connected do
のループをデータ受信後抜ける方法を模索してみましたが
分かりませんでした。どのようにすればよいでしょうか。お願いいたします。
もうDelの問題じゃないな。
>>826 全部受信し終わってたら Break すればええやん
delphiでDLLの練習をしているのですが フォームのハンドル等をDLL側に送る方法ってないでしょうか?
関数の引数にする
>>826 TCPのストリームには区切りがないので自分で目印をつけるしかない
[データサイズ][データ本体][次のデータサイズ・・・]
とか
[データ本体][データ終端][次のデータ・・・
Canvasの持ち主(「Form1.Canvas」なら「Form1」、「Image1.Canvas」なら「Image1」)を Canvasから調べるにはどのようにしたらよいのでしょうか?
833 :
デフォルトの名無しさん :04/05/19 13:49
RSSのコンポーネントってありませんか?
Canvas が TControlCanvas なら簡単なんだけど(Form1 や PaintBox1 などは簡単) Image1.Canvas は実装部に定義がある TBitmapCanvas なので Image1 にたどり着く のは難しそう。
>>766-770 ,773
ToolBar2000とTBXというのがあるんですねー。
遅くなりましたが、どうもありがとうございました。
いろいろ試してみます。
>>818 if Key in ['1'..'9'] then
Windows.TextOutで書いた文字列を消すにはどのようにすればいいのでしょうか?
>>837 状況にもよるんだが。
とりあえず文字だけを消したいなら、
文字を背景と同じ色にして同じ座標にもう一度書くのが確実。
イメージの上など、背景が単一色じゃない場合はいろいろと面倒。
工夫するしかない。
Repaint
>>836 こういう細かな便利技(?)を教えてくれるサイトか本ってないでしょうか?
自分は経験が浅いので
if flag = True then flag := False else flag := True;
が
flag := not flag;
で済む、というのを見て目からウロコが落ちたぐらいです。
あ、818さんの名誉のために言っておくとわたしは818さんじゃないですよ。
>>842 ボーランドからダウンロードしたPersonal版を使ってるんですが
付いてますか?<言語リファレンス
オンラインのがあるだろ
>>843 内蔵のエディタで予約後にカーソルを合わせてF1キーを押すと
言語リファレンスに一発で飛べる
846 :
デフォルトの名無しさん :04/05/19 20:30
外部データを読み込むにはどうしたらいいですか?
>>843 落としたアーカイブを展開した先のdocumentationディレクトリ内にoplg.pdfがある。
>>846 どうしたらいいんでしょうねー。
自分もテキストファイルから1行ずつ読み込んで、
それをrecordに入れてソートしてってのをどうやるかで
困ってます。リストを使うとは思うんですが。
んで、846さんはどんなデータを扱いたいんですか?
>>849 それならTStringList.LoadFromFile()で十分じゃ?
If bFlag then begin iValue = 10; end else begin iValue = 20; end; この構文の代わりに… const IVAL:array[Boolean] of Integer =(10,20); 〜〜〜〜〜 iValue := IVAL[bFlag];
>>847 こ・・これは!
恐れ入りました。
てかボーランドってかなりサービスいいんだな。
with TStringList.Create do try Text := ????String; SaveToFile('TMP.TXT'); finally Free. end;
dynamicとvirtualの違いって、結局のところ速度とメモリ使用量だけ?
だけ。 dynamicはVCL級にでかいクラス郡を作らない限りはいらないだろ。
過去ログ嫁は無視。どんどんログをつくろう。重複なんか気にしないで。
858 :
デフォルトの名無しさん :04/05/20 02:27
ファイルエクスプローラをクリックさせてそこから取得したパスの 画像ファイルを表示させたいのですが ファイルのエクスプローラをひょうじさせるのってどうやったらいいんですか?
860 :
デフォルトの名無しさん :04/05/20 12:25
(´ゝ`)
>>858 本当にエクスプローラーを使うならShellExecute
似たようなのを作るならTTreeViewとTListViewを組み合わせて
画像ファイルはTImageで開く
すいません、初歩的な質問なんですが、DelphiのコンポーネントのMediaPlayer を使って、簡単な音楽再生をしようと思ってます。 コンパイルしたあと、自分の環境で、再生させるとちゃんと音がでるのですが 他の人にEXEファイルを送って、使ってもらったんですが MCIエラーというのがでて、使えません。 恐らく、他の人のPCにDelphiのMediaPlayerを再生する環境が入っていないと 思うのですが、再生する環境を、つくったEXEに埋め込んで 使えるようにするには、どうしたらいいのでしょうか?
>>838-840 ありがとうございます
いろいろ消すやり方もあるんですね。
とりあえず問題がなさそうなのでRePaintでやってみることにします
867 :
デフォルトの名無しさん :04/05/20 17:19
Delphiでブラウザを起動し、指定されたURLを表示したいのですが、 その際404などのHTTPのエラーが帰って来た場合は、 デフォルトのページを表示したいです。 こういうことってできますか?? そもそもHTTPエラーって取得できますか??
>>867 記憶が正しければ、TidHttpでGetしようとするとエラーが発生する。
そのエラーをCatchして、TIdHTTPResponseInfo.ResponseNoを
みればよかったんじゃないかと覚えている。
870 :
デフォルトの名無しさん :04/05/20 17:32
DelphiってどこでDLできるの?
871 :
デフォルトの名無しさん :04/05/20 17:34
>>868 ありがとうございます。
やってみます!!
872 :
デフォルトの名無しさん :04/05/20 17:39
下記のソースで同一フォルダ内のjpgファイルをボタンを押すごとに表示切り替えしているのですが ImageのproportionalをTrueにすると速度に不満が生じます。切り替わる際に何も表示されない時間帯があるのも困ります。 (1→2へブランクなしに切り替わってほしい Image.Proportional;Falseならそこそこの速度が出ています) どのようにしたら実現可能でしょうか? procedure TForm1.Button2Click(Sender: TObject); Var Jpeg :TJpegImage; begin if StrToInt(Label1.Caption) < FileListBox1.Items.Count -1 Then begin Jpeg :=TJpegImage.Create ; Jpeg.LoadFromFile(FileListBox1.Items[StrToInt(Label1.Caption)]) ; Image1.Picture.Assign(Jpeg); Jpeg.Free; Label1.Caption := IntToStr(StrToInt(Label1.Caption) +1); end;
874 :
デフォルトの名無しさん :04/05/20 17:46
>>873 ごめんよ、ぐぐったら英語しか出てこなかったの・・・
ありがd
>>872 前後の画像をあらかじめTStreamで読み込んでおいてから、
TImageにぶち込んでもだめかな?
または、もう一つのTImageを非表示状態で予め画像を
読み込んでおいて、ボタンクリックで今までのをVisible:=False、
読み込んでおいたのをVisible:=Trueする。
TBitmap をつかって予め変換してから、Assign
フォームエディタ上でボタンをダブルクリックすると、 自動的にBtnClickイベントプロシージャ(だったっけ)が ソースエディタ側に追加されますよね。 間違えてクリックしちゃって作られたイベントを 一発で取り消す方法はありますか? 今のところ、Type宣言とprocedure本体と、オブジェクトインスペクタの 手続き名をすべて手動で消しているんですが。
>>877 自動で追加されたプロシージャの
beginとendの間に何も書かずにF9(コンパイル&実行)をかければ
自動で削除されますよ。
保存でも消せる
失礼します。 今日練習がてらに落書きソフトを作り始めてみたのですが、 メインメニュー内に[ペン設定]→[太さ]→[1],[2],,,,,[5] とおき、太さを選択できるようにしようと思ったのですが、 [1]の場合と[2]の場合と……などとと各個入力せずに、なんとか一括でこれらの処理を出来ないものでしょうか? case文で何とかなりそうな気はするのですが…… それとも各個入力したほうがわかりやすいでしょうか?
Ctrl+Cのキーボード操作で処理を発生させたいので、 試行錯誤の結果、 以下のようにしてひとまず動くようにはなったのですが、 もっとスマートな書き方はないでしょうか。あればご教授願います。 現在のソース procedure Form1.StringGrid1KeyPress(Sender: TObject; var Key: Word;Shift: TShiftState); begin if ([ssCtrl] = shift ) and //Ctrl + C の操作で起動 ((Key = 229) or (Key = 67)) then begin //処理 end; end;
画面がどのような感じがわからないのですが、 もしボタンで選ばれているなら、ボタンに太さのTagを設定し、 ボタンクリックのイベントを統一して、クリックされたボタンのTagの値に 設定するようにすればよいのではないでしょうか?
あとはアクションかメニューのショートカットに登録するくらいか
>>880 さん
失礼しました。私、何も文章よんでませんでしたね。
ボタンじゃなくて、メニューですね。
procedure TForm1.NClick(Sender: TObject);
begin
Label1.Font.Size := TMenuItem(Sender).Tag
end;
でどうでしょうか。
>>887 Tagプロパティは開発者が自由に使っていいInteger型のプロパティ。
メニューで太さ選ぶならメニューアイテムのそれぞれのTagプロパティに太さを入れとけばおk
>>887 オブジェクトインスペクタの下から2段目あたり
にTagとあれば、それがそうです。
そこに希望の数値を入れておき、Clikイベントを書くメニュー統一すればいけると思います。
などと書いてみましたが、
>>885 さんの方法のほうがスマートですね。失礼しました。
890 :
デフォルトの名無しさん :04/05/20 22:23
Tabcontrolの使い方がいまいちわかりません。 HPを色々まわってみたのですがなかなかみつからなくて… わかりやすいサンプルや解説のHPなどありませんでしょうか? よろしくお願いします
どうわからないのか言ってもらえないと情報の紹介のしようもない・・。
>>890 TabControl1.TabIndex
で何番目のタブが選択されているかが分かります。
なので、
何番目のタブが選ばれているかで処理をわければよいかと。
TPageControlと動きの違いを比較されると分かりやすいと思います。
894 :
助けてください :04/05/20 23:03
A君は,ある数値計算プログラムを作成していたところ何度もx−sinxの値を計算する必要が 出てきた。そのプログラムではxの値の絶対値が非常に小さな値をとる場合があり,またそ の値を高精度で求める必要があった。x−sinxの演算はそのまま実行すると|x|<<1の条件で桁 落ちがおきるため,マクローリン展開で計算する必要があるが,|x|<<1の条件でないときは x-sinxをそのまま使用するほうがよい。そこでA君はx-sinxの値を計算する実数型関数 xmsin(x)を次の考えで作成することとした。 1)ある適当な正の実数x0を考える。 2)引数xの絶対値がx0より小さいときは,マクローリン展開を使って計算する。 |ai/Si|<<ε(εは1より十分小さい正の実数。)を用いて,収束を判定して計算した値を用いる。 3)引数xの絶対値がx0以上では,x-sinxの値を用いる。 Å君はマクローリン展開の計算をいろいろな場合で計算し,x0=0.1,ε=10e-16として関数を作 成した。また,作成した関数に対し,x=10e-10,10e-7,10e-4,0.0999の条件に対しx,xmsin(x), x-sin(x)の計算値を比較した結果を表示するプログラムをvoid些関数prnrst(x)を用いて作 成し,関数xmsin(x)の動作確認した。 以下にA君が作成したプログラムを,一部を伏せた形で示す。また,実行結果も示す。A 君に成り代わってプログラムを完成しなさい。
896 :
デフォルトの名無しさん :04/05/21 04:57
すみません、パワーポイントのテキストボックスのような機能を持つコンポーネントはないものでしょうか? 探してみましたが私は見つけることが出来ず・・・ フォントが一文字単位で設定でき、編集時以外は背景を透過し、クリックすると枠が出て再編集可能なもの。 使用バージョンは6パーソナルです。ようするにタダの。もしかしてプロフェッショナルには入ってます?
897 :
デフォルトの名無しさん :04/05/21 07:27
Delphiで長方形を描いてEMFにしたのですが、 できたファイルをIllustratorでよく見ますと、 左上にある始点と終点が閉じてなくて点が5個あります。 閉じた図形にするには(始点と終点を結合させるには) どのようにしたらよいのでしょうか?
昨日Jpeg画像の連続表示に関して書き込んだものです 教えていただいた複数TImageに前後のファイルを開いておきVISIBLEを切り替える方法を試してみたのですが 最初にやったもの(Image Proportional ON)と同じように切り替わりじにブランク表示がされてしまいます。 他の方法もしくは改善すべき点があったら教えてください。よろしくお願いします。 procedure TForm1.Button1Click(Sender: TObject); Var Jpeg :TJpegImage; begin if StrToInt(Label1.Caption) < (FileListBox1.Items.Count -2) Then begin; if (StrToInt(Label1.Caption) >=1) and (StrToInt(Label2.Caption) <StrToInt(Label3.Caption) ) and (StrToInt(Label2.Caption) <StrToInt(Label4.Caption) ) then begin Jpeg :=TJpegImage.Create ; Jpeg.LoadFromFile(FileListBox1.Items[STrToInt(Label1.Caption) +2]) ; Image1.Picture.Assign(Jpeg); Jpeg.Free; Label2.Caption := IntToSTr(StrToInt(Label1.Caption) +2); Label1.Caption := IntToSTr(StrToInt(Label1.Caption) +1) end //一番古い頁を破棄し今見ているものの2頁先を拾っておく if (Label2.Caption = Label1.Caption) then begin; Image1.Visible := True; Image2.Visible := False; Image3.Visible := False; end
>>898 ソース読んでないけど。
TImageでないとダメかい?
参考に自作ビューアの手順書いとく。
フォームのOnCreateでDoubleBufferd := True
TBitmapに画像を読む。
フォームに置いたTPaintBoxの位置・サイズを適当に変更。
TPaintBox.Repaint
TPaintBox.OnPaint内は、TPaintBox.Canvas.StretchDrawでTBitmapを描画。
TBitmapにjpegって読み込めませんよね?どうすればいいのでしょうか?
uses jpeg;
>>900 ごめん、susieプラグインを呼び出して使った。
>>896 漏れがそれに近いものを作った時には、TEditを非3D表示、枠を細い線で
表示させるようにして、マウスドラッグで範囲指定させて、そのドラッグした
場所に合うようTEditを動的に生成した。
んで文字を編集させて、エンターキーで確定。入力内容をその下のTImage
に同じ場所に表示させた。
編集可能で、さらにフォント等を変更させたいなら、TRichEditで同様の処理
をさせてあげればいいんでないかい?
> Delphiで長方形を描いてEMFにしたのですが、 Rectangle() を使った? LineTo() じゃだめだよ
906 :
デフォルトの名無しさん :04/05/21 11:01
質問があります。 パッケージにコンポーネントをインストールする時に、”DesignIntf.dcu”が 見つからない等のエラーが出てしまいインストールすることが出来ないの ですけど、どうすればインストールすることが可能になるでしょうか? Delphi6 Personalです。
> TBitmapにjpegって読み込めませんよね? ファイル → TJpegImage → TBitmap
D6用のコンポじゃないんでは?
>>906 そのままDesignIntf.dcuかDesignIntf.pasがないんじゃない?
もしくは、違うディレクトリに保存されてるとか。
コンポーネントはDelphi6(Delphi6の本のCD-DOMのもの)のものです。 C:\Program Files\Borland\Delphi6 以下を検索したのですけど、 ”DesignIntf.dcu”がないようです。
>>910 DesignIntf.dcuでyahooで検索したら4件でてきたぞ?
ためしてみそ。
4件の中から出てきた内容でとりあえずコンパイルできました。 やっている事の理屈は分らないですけど、パッケージの requires へ designide.dcpを追加で解決です。 これからはDelphiのパッケージのことを理解する必要がありますね。
>>912 その掲示板に
「ヘルプの中の「DsgnIntf の名前変更および関連する変更」というトピックに記述があるそうです」
とあるから、ヘルプを読めばちゃんとわかったことぢゃないかな。
914 :
デフォルトの名無しさん :04/05/21 13:25
超初心者です。 C#.netってC言語で使えますか? C++はC言語で使えるようなのですが。
超玄人です。 C#.netってC言語で使えません。 C++はC言語用のコンパイラでも使えるような仕組みがあるのです(厳密には嘘だけど)。
>>913 以前のバージョンから名前が変更されている事を知らないとワカらんでしょ、多分。
DelphiのUIのような華麗なドラッグ&ドックを実装するにはどうすればいいですか (プロパティを弄くる以外に。
Demoミロ
Demoってなんか新種の生き物みたいだな
どうも。ありがとうございました。 おかげさまでTagプロパティを用いて太さ設定、消しゴム大きさ設定とかもできました。 ところで…… procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); //ボタンを押したとき begin Image1.Canvas.MoveTo(X,Y); //ボタン押下位置取得 pen := True; //変数penをtrueに end; procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); //マウス移動時に begin if pen then //変数penがtrue(=ボタン押下時)のとき Image1.Canvas.LineTo(X,Y); //線を引く end; procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); //ボタンを離したとき begin pen := False; //変数penをfalseに end; このように描画しているのですが、クリックして(ドラッグせずに)離すと点が打てないという問題に直面しております。 クリックした地点に点を打つ、という処理はLineToでは無理なのでしょうか?
>>924 普通のお絵かきソフトの場合、
先を引くという機能を選択する→クリックしたままドラッグさせると
点線が表示される。クリックを止めると点線が線になって確定させる。
ということになるので、普通は点を打つか、線を引くかユーザに
選択させるもんだと思うぞ。
>>925 いや、"直線ツール"の話ではなく、ペイントソフトの言い方をすれば、"鉛筆ツール"のつもりです。
直線ツールはまた追々付けていってみようかなと……
>>926 ぢゃあ、クリック時のTPointとクリックを止めた時のTPointが同じだったら、
その場所に点を打つという処理にすれば?
つーか、LineToは最後の点を描かない仕様だったと思うので LineToを使ったあと、X,Yに点を描けばええと思います。
色々試行錯誤してみた結果、Canvas.Pixelを使えば良いという事になりました 自分の頭の中にはLineToしか思い浮かばなかったです。 名無しに戻って頑張ってみます。アドバイスありがとうございました
htmlを1タグずつ解釈していって目当ての情報を得る関数を作ったのですが 一般的にこういった関数の関数名はどういう名前が付くのでしょうか? 今は function KaisekiTextMode(html : String ):Boolean; という名前をつけていますが、「Kaiseki」の部分にものすごく違和感があります。 多少スレ違いな感がありますが、他に適切なスレも見つからずに困っています。
> Canvas.Pixelを使えば良いという事になりました えっ、これ知らなかったの? お絵かきプログラムつくるんだったら、TCanvas の メソッドをすべて試すことくらいしておけよな
およ、Pixels[] はプロパティーだな
飛行機のJPGを左から右へ移動させ、あたかもとんでいるように 見せるにはどうすればよいでしょうか。
>>933 そのJPGを見ている奴の顔を右から左へ動かす。
>>933 そんなに頻繁にアニメーション使わないならImageListを使うと楽
>>934 見せたい相手が近くにいない場合を想定しているので、
ちょっと難しいです。できればプログラムでできたらうれしいです。
>>935 ありがとうございます。調べてみます。
>>936 ありがとうございます。試してみます。
>>938 ImageListに画像読み込んでImageList.Draw(0, 0, 0);ってすると
勝手にマスク処理(描画する画像と背景画像を合わせる)してくれるよ
これからもよく使うようなら自分でandだのxorだのしたほうがいいけど
DirectX使え
プログラムを打ち込んで実行したら、Runtime error 6とか出て、全く次に進めません 教えてください、お願いします _no ちなみに、コンソールアプリケーションでやっています
ソースはこんな感じです program ps1(input,output); var m,n:rear; begin readln(m); n:=m+1 writeln(n); end. 超初心者でゴメンナサイ _no ちなみにDelphi6 Personalを使用しています
program OneCoolDelphiProgram1; {$APPTYPE CONSOLE} //This tells the compiler that the program is a console type uses SysUtils; begin //Insert super cool Delphi Code here end.
program ps1(input,output); これはおかしい。こんな感じ。 program Project1; {$APPTYPE CONSOLE} uses SysUtils; var m,n:real; begin readln(m); n:=m+1; writeln(n); end.
>program ps1(input,output); 無茶苦茶クラシックなPascalだな。 とりあえずここだけ >program ps1; に変えとけばいいよ。
program Project1; {$APPTYPE CONSOLE} uses SysUtils; var m,n:real; begin readln(m); n:=m+1; writeln(n); readln;// これ付けるとみやすいかも end.
すみません、学校でLinuxでPascalやってるのを家に持って帰ってやり始めたんです いまからまたやってみます、ありがとうございます
[新規作成] から [コンソールアプリケーション] を選ぶといいよ
949 :
デフォルトの名無しさん :04/05/21 23:34
文章ファイルをMEMOやRichEditに読み込まずに行数と文字数を 知る方法はなにかないでしょうか?
>>949 TStringListに読み込んだらどうよ?
もしくはStreamに落として改行コードの数を数えるとか
Delphiしたいんですけど
やっぱり英語読めないとだめですよね。
たとえば
>>946 の英語って読めますか?
>>953 読めね
でもDelphi起動
そしてあなたも今日からDelphi起動
>>953 英語が読めなくてもプログラミングはできる。
英語ができないと困るのは日本語訳されてない資料を読むときぐらい。
>>950-951 100Mのファイルを全部一度に読み込むのはメモリの無駄だろ。
AssignFile, Reset, Eof, Readln使っとけ。
TFileStreamを使え。
>>957 100Mってどこに出てきた? 何メガならメモリの無駄じゃないの?
実行スピードはどうなの?
960 :
デフォルトの名無しさん :04/05/22 02:13
最近テキスト処理にstream使うアホが増えてるのは 環境ホルモンの影響なんだろうか??
テキスト処理に TStream 系を使うことが何でアホなのか、アホに説明できるわけない
if str = 'いち' then result := 1 else if str = 'にい' then result := 2 else if str = 'さん' then result := 3 else ・・(略) if str = 'じゅう' then result := 10; をもっとうまく書く方法ってありますか?
テキストから 1文字をだして 数値にかえるにはどうしたらいいでしょうか? n:=Ord(Copy(FileList[0],1,1)); 「互換性のない型です」とエラーがでるのですが・・・
>>963 面倒だから「さん」まで
function HiraToNum(s:string):integer;
const
numstr : array[0..2] of string = ('いち','にい','さん');
var
i:integer;
begin
i := -1;
repeat
inc(i)
until (i>High(numstr)) or (numstr[i] = s);
if (i>High(numstr)) then result := -1 else result := i+1;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption := IntToStr(HiraToNum('にい'));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption := IntToStr(HiraToNum('にい'));
end;
Ord(s[i])
Copy() の返値はstring型だから Ord は取れない
文字列は文字の配列だよ s := '123'; なら s[2] は '2' の Char 型と互換
ええー、文字コードじゃなくて StrToInt() かよ。 Ord() だからてっきり・・・・・
こんなのはどうかな。 function HiraToNum(const Hira: string): Integer; var HiraStrings: TStringList; begin HiraStrings := TStringList.Create; try HiraStrings.Text := 'いち'#13#10'にい'#13#10'さん'; Result := HiraStrings.IndexOf(Hira); if Result >= 0 then Inc(Result); finally HiraStrings.Free; end; end;