Unicode使うと言っても全部を対応させないと色々問題が出てくるのよ。 VCLもVCL2!とか言ってUnicode対応してくれないかな。 ちなみにWideString型のプロパティはストリームに保存される時Ansiにダウンキャストされる。 IDEがAnsiベースなのでUnicodeは普通入力できないけど、ちょっと気持ち悪いよね。
>Unicode使うと言っても全部を対応させないと色々問題が出てくるのよ。 そうだね。VCLのユニコードへの対応が遅れているのはイカンよね、やはり。
>>4 …って,これ,書き込むの忘れておりました _| ̄|○ ありがとう.
>前スレ984 = 966 保存速度はフォームファイルの保存形式をバイナリ形式に変えたら速くなるかも. 具体的にはフォームを右クリックして『テキスト形式DFM』のチェックをはずす. #どうしてそうなるかはフォームをクリックして[Ctrl]+[F12]を押してみてください. 画像のイメージがが16進表記の文字列で表現されているのがわかるでしょう. 1バイトごとに2桁の数字に変換しているわけです(ロード時は逆). 数十キロバイトの絵が数枚なら大したことはないでしょうが数メガバイトになると苦しそうです. 実行が遅いのは画像の量が多い上にJPEG形式の画像を(無圧縮のビットマップに)展開しているからかもしれません. それらの画像を何の目的に使っているかはわかりませんが. ウィンドウのスキンにするのでしたら →256色以下への減色してBMP形式にすることも検討してみてください. ゲーム中の画像ということでしたら →設計時には読み込まず,実行時(フォームのOnCreateイベントなど)に読み込むことも検討してみてください. 特に同じ画像を複数の場所で使う場合, 設計時にそれぞれのイメージコンポに読み込んでしまうと 同じ内容のデータがだぶってしまうのできわめて無駄です.
リソースにするのが簡単。
classを勉強している最中なのですが躓いています(かなり省略して書いています。) #a.dpr var abox:Tbbox; begin cMain(abox); end; #b.pas type Tbbox=class #c.pas procedure cMain(abox:Tbbox); 上記内容の場合#c.pasでTbbox未定義エラーとなってしまいます。 この場合、#c.pasにもtype Tbbox=classを宣言しないといけないのでしょうか? (極端な場合#a.dprが var abox:Tbbox; begin cMain(abox); dMain(abox);//d.pas : : zMain(abox);//z.pas end; で、あったとした場合各unitで定義し直さないといけないということ?) もしくは、Tbboxメソッドはすべてをb.pasの中で行わないといけないのでしょうか? (b.pasがかなり大きくなってファイル分割を考えていてもファイル分割ができない?) それとも僕が根本的にクラスの扱い方を間違っているのでしょうか? (初心者用のリンク先とかを見ても上記のようなプログラムは載っていないですし...) 抽象的な内容で申し訳ありませんが、解決・対処についてアドバイスお願いします。
>この場合、#c.pasにもtype Tbbox=classを宣言しないといけないのでしょうか? #c.pasの uses に #b を加えるだけでは?
uses の意味が分かってないだけで、クラスは関係ない
>>10 ,11
有難うございます。
usesはどちらもimplementaionに記述していました。
#c.pasのinterfaceのusesにbを記述し解決しました。
質問が続いて申し訳ないのですが、
>>9 の内容から変化して
#a.dpr
var
abox1:Tbbox;
abox2:Tcbox;
begin
cMain(abox1);
bMain(abox2);
end;
#b.pas
type Tbbox=class
procedure bMain(abox:Tcbox);
#c.pas
type Tcbox=class
procedure cMain(abox:Tbbox);
となった場合#b.pas,#c.pasのinterface部のuses文にそれぞれのunitを記述すると
「循環参照エラー」になりますよね。
これは回避できないのでしょうか(逆にいえば、このような使い方はしない)?
>「循環参照エラー」になりますよね。 なりますね。相互に参照するような場合は、一つにまとめるとよいのでは? 逆に言うと、循環参照エラーになるようなユニットファイルの分け方はよくないと。
>>13 有難うございます。
やはり一つにまとめる方法になりますか...
あるclassを定義しているユニットファイルが現在1500行程度で、
今後メソッドを追加していくと将来数千行(下手すると万行越え)になるだろうと
予想しているのですが、我慢しないといけないのですね。
>>14 単純な設計ミス
まぁそれはしかたないとして
苦肉の策としては機能レベルごとにクラスを継承していく形に書きなおす
>>3 >ちなみにWideString型のプロパティはストリームに保存される時Ansiにダウンキャストされる。
Delphi6以降はUTF-8になったはず
下記においてh[i]への代入が きちんと行われない(引数の配列に存在しないとんでもない値が代入される) のですが、問題点があるのでしょうか? constructor Twaku.create(a:array of integer); var i:integer; begin for i:=0 to 9 do begin h[i]:=a[i]; // write(h[i]); end; end; ※// write(h[i]);の//を外すときちんと代入されます。
>>14 >我慢しないといけないのですね。
>>12 の例だと、uses に b と c を加えた d.pas で
procedure bMain(abox:Tcbox);
procedure cMain(abox:Tbbox);
を宣言実装するとよいのでは。
そうすると、循環参照しなくてすむ。
>>18 各ユニット別の意味でbMain、cMainとつけているので
その場合
#d.pasで
procedure dMain1(abox:Tcbox);
procedure dMain2(abox:Tbbox);
見たいな感じに...
今、作成中なのですが、この方法(他unitで対処)になってますね。
クラスを引数として他unitのprocedure,functionに、たらいまわしにできるのか?
クラスメソッド定義が他unitファイルでもできるのか?
というのがそもそもの疑問でした。
何とか循環参照が理解できたような感じがします。いろいろ有難うございました。
自前アプリでグローバルホットキーを設定してます。 ブラウザやエディタなどで、そのホットキーが押されたとき、、、 というイベントハンドラまで実装できました。 そのとき選択中の文字列を取得する方法を教えてください。 ちなみの選択した文字をぐぐるアプリを作ってます。
>>14 その場合
# bc.pas Tbbox, Tcboxのインターフェースを定義
tyep
TCustomCBox = class;
TCustomBBox = class
procedure bMain(abox: TCustomCBox); virtual; abstract;
end;
TCustomCBox = class
procedure cMain(abox: TCustomBBox); virtual; abstract
end;
# b.pas 実装
type
Tbbox = class(TCustomBBox)
procedure bMain(abox: Tcbox); override;
end;
# c.pas 実装
type
Tcbox = class(TCustomCBox)
procedure bMain(abox: Tcbox); override;
end;
ってやることも可能。循環参照自体は悪ではないよ。
間違えた # b.pas 実装 type Tbbox = class(TCustomBBox) procedure bMain(abox: TCustomCBox); override; end; # c.pas 実装 type Tcbox = class(TCustomCBox) procedure cMain(abox: TCustomBBox); override; end;
>>21 b,cの依存部分をbc.pasに、b, cそれぞれ独立した処理をb.pas, c.pasに書くと
処理の切り分け・複雑さの軽減につながるかも
>>17 最適化はずすとどうなる?
配列 h の定義が見えないが、正しく宣言されている?
使っている Delphi のバージョンは?
>>24 はぁ?array of integerって書いてあるし。
いまどき最適化でおかしくなるとか思ってるし。
最悪だな。
問題なのは何やってるかわからないwriteじゃん。
array of integer は配列 a しか定義してないけどねぇ。 なぜこっちに噛み付く? write って write/writeln じゃないのかな?
hがinteger配列じゃなかったらそもそも代入できないのでは?
どっちにしろ、h[i]がintegerだからwrite()はTwakuのメソッドかと思われ。
そのメソッド内か、関連するどこかでh[]を使ってるんじゃないかな。
そんなことより
>>20 よろしく
フォーカスのあるウィンドウのハンドル取得までできました。 Internet Explorer_Serverなどから選択文字列欲しいです。
>>20 GoogleはIE用ならそういうツールを既に配布しているわけだが
ブラウザだけじゃなくいろんなウィンドウから直接起動だから意味あるわけで。 そのためのグローバルホットキーだし。
ブラウザ以外はクリップボード経由で取得できるようになりました。 あとは一番どうにかしたいブラウザだけです。 よろしくお願いします。
>>20 文字列からgoogleのURIに変換する関数クレクレ
ひまだから。 uses httpapp; procedure hoge(s); begin BrowseURL1.URL:=google+'?q='+HTTPEncode(s); BrowseURL1.Execute; end;
35 :
デフォルトの名無しさん :03/09/11 15:02
ちょっとお聞きしますが、 if ■=▲ then (もし■が▲なら) というのがありますが、 if ■≠▲then (もし■が▲でなければ) に相当するものはどのように書けばいいんでしょうか。
<>
>>36 おお!!ありがとうございます!
こんな簡単なことだったとは・・。1年ぐらい
仕方なくelseも書いて対応してましたw
いまいろいろやってみたところ=notでも似たようなことが
できるようですが違いはなんでしょう?
<>が一番万能でしょうか?
notは真偽を反転させる。 if flag = false then よりは if not flag then のがスマート。 あとはコピペで反転させる時や反転させた方が読みやすいときに使う if (a=b) and (b=c) and (c=d) then ... if not( (a=b) and (b=c) and (c=d) ) then
一年ぐらいヘルプ見ないでやってきた強者
>>38 なるほど。詳しくありがとうございます。
これで数千行のコードがかなり簡素化できそうです
半分以下になったりして・・w
>>39 実を言うとサバ読んでました。
ほんとはdelphi暦3年近いですw
ほとんどifとcaseだけで乗り越えてきましたw
ほんと助かりました
すごいとか以前にアホだな。
書くときに省略しすぎました、すいません。
>>24 delphi 6 personalです。
配列hはTwakuクラスのメンバーです。
>>25 create後にきちんと代入されていなかったために
check用にwrite文を付け加えました。
write文を有効にすると正常で、write文を無効(注釈)にするとおかしくなります。
>>28 配列hももちろんinteger配列です。
Twakuクラスに関してはコンストラクタしか作っていませんでした。
結局、コンストラクタは省略、
代入用のメソッドを作成し、そこで実行するようにして変更しています。
>>43 コードの挙動が怪しかったらCPU窓でステップ実行しとけ
>>43 メンバでhなんて汎用的な名前つけるからダメなんじゃない?
最小限に公開されたソースからバグの原因を当てずっぽうで言い合うなよ
>>20 マルチポストか。極論を言えば方法(仕様)はMSDNに載っている。
結構この機能使っているアプリケーションあるから探せばどこかのWebサイトにヴァカ用の解説あるんじゃないかな
>>44 ステップ実行してみたところ
メンバー(h[i])への代入は問題ないみたいです。
が、Twaku.create実行後にh[i]を参照するアドレスが
おかしくなる(保存したアドレスと違っている)ところまでは判りました。
>>43 の最後で書いたとおり問題は回避できていますが、
もうちょっと調べてみます。
>>47 だわけねーだろ。しっかり場所を確認してから書けよ。
もしくは読んでから書けよ。
あ、「ヴァカ用」だからおまえにしか見えないのか。
>>49 すまん、勘違いだったYO!でもMSDNくらい見ようや。
一時ソースを見ずにわからないと喚くのはヴァカだろ?
メンバーの参照先を持っているレジスタの 保存がされているか/いないかの問題みたいです。 正常に行く記述では別レジスタに一時的に保存されていて、 上書きされても、再度保存したレジスタから読み出しているのですが うまく動かない記述ではレジスタの値が保存されていず、 上書きされたままで、その値が参照先となっているようです。 これ以上は無駄と思いますので、調査は終わりにします。
52 :
デフォルトの名無しさん :03/09/11 20:42
293 名前: ◆ogFHYWJk0M [sage] 投稿日:03/09/11 00:37 二分法で代数方程式を解くプログラムで 1 + 3 * x = 0 を解かせる。 これを1000000回繰り返し、速度比較。 VB6 38.7秒 C#(.NET2001) 29.6秒 Delphi 27.3秒 C#(.NET2003) 23.6秒 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 今や.NETは、ネイティブコードのDelphiよりも速くなりました。 これによりDelphiの存在価値はもうありません。 皆さんももう見切りを付けて.NETに移行しましょうよ!
JITが一回で効く小さなループを何万回も繰り返すのは、JIT の不利を隠すため。 一般のGUIアプリでは、次にどんなメッセージがくるのか分からないため、.NET アプリはそのたびにJITを繰り返すので、とろい感じになる。
二分法で代数方程式を解くプログラムを百万回繰り返すのには C# が有利です。 でもそんな使い方をするヤツは皆無。C# のユーザは、同じことを百万回くり 返し計算するために、.NET をつかってるのかよ。20MB超のライブラリを つかって? 馬鹿じゃないの?
というか、 x*x-2=0 の小数点以下18桁計算してみろよ。
>>52 なんかこういう馬鹿が定期的に出てくるな。
>>56 もちつこう。>52はベンチマーク以外のアプリケーションをつくったことがないんだよ。
58 :
デフォルトの名無しさん :03/09/11 21:47
スルーしろよ。スレ違いなんだし。
60 :
デフォルトの名無しさん :03/09/12 00:28
使用許諾コード取って無いと、なんか不都合あるん?
>>60 別に無いんじゃない。
俺は一応取ってるけど。
63 :
デフォルトの名無しさん :03/09/12 07:02
rs232cの通信で「送りたいデータの最後に、データを排他倫理和した値をつけて」 って言われてヘルプで調べてみたんですけど、送りたい文字列を2進数に変えて 1ビット1ビット計算していくんでしょうか? どなたか教えてください。
>>63 なんかこういう馬鹿が定期的に出てくるな。
>>63 var s:string; としたら
sum:=0 ; // 0とか$FFとか$55とか$AA が多い
for i:=1 to length(s) do sum:=sum xor ord(s[i]);
s:=s+char( sum and $FF); //として排他論理和した値をつける
>>65 ありがとうございます。
>>64 多分、趣味かなんかでプログラムをかじり始めて本に書いてあることを
利用したプログラムなら何とかできるが、それ以外は周りに聞ける人がいない
環境の人が、たまに質問してくるのでしょう。(私を含む)
Delphiの秘奥義を教えて下さい。
69 :
デフォルトの名無しさん :03/09/12 08:26
>>68 終了しないんですが…。
>>69 知ってます。カーンとヘジルスバーグの名が出てた頃が懐かしい…。
>>68 パラメータ数が100以上の手続き/関数を定義すると、Delphiが。。。
>>14 要はソースがでかくなっちゃって今後さらにでかくなっちゃいそうなのでソースを分けたいということですね.
何でもかんでもひとつのクラスで実装しようとしてはいけません.
たとえばパソコンはHDDとかCD-ROMとかいろんな部品が入っているでしょう?
同じようにメインのクラスもいろんな部品クラスを組み合わせになるように作るのです.
部品クラスを別のユニットで定義すればメインクラスを定義しているユニットはもっと短くなるはずです.
本来はプログラムを作る最初の段階でどんな(大まかな)部品が必要かを考えて,
次にその部品が持つ情報や機能を考えていきます.
#なお部品クラスはできるだけ本体クラスを参照しないように作ります.
すでに千数百行とのことですが,その時点で気がついたあなたは偉いです.
私の場合,気づいたときには5千行を超えていました(笑).
プロジェクトと違う名称でEXE作る方法ある? EXE名にハイフン入れたいんだけど、それはプロジェクト名に出来ないようで…。
>>74 それは垣間見えるDelphiの限界ですよ。
かってにリネームしちゃだめなの?
>76 そんな泥臭い対応、いや!(^_^;)
>そんな泥臭い対応、いや!(^_^;) そうか、一番かっちょいいと思うけど。
回答者がまず質問に対する直接的な回答を書かないのは 日本の国語教育の問題か・・・
質問 > プロジェクトと違う名称でEXE作る方法ある? 回答 > かってにリネームしちゃだめなの? ちゃんと直接的な回答になってると思うけど?
79の国語能力が問題だ。
国語板に(・∀・)カエレ
いちいち反応するなって
↑モナー
条件コンパイルに付いて質問です。 IDEからの実行時とEXEでの実行時とで 動作を変えるためにはどうすればいいでしょうか? USESするファイルを切り替えたいのですが。
>88 自分が作ったEXEですが。 えーと、何がしたいかというと、 ・本番環境ではスキャナの専用ドライバ用PASをUsesしたい。 ・IDEでテスト中はスキャナが繋がっていないので、スタブの状態で 動作させるためのPASをUsesしたい ってことなんです。 条件コンパイルってプロジェクトの条件定義に追加するじゃないですか。 テスト時と配布時を区別する方法があればなぁ、と。
>89 書き損じ。 >条件コンパイルってプロジェクトの条件定義に追加するじゃないですか。 あれをワザワザ書き換えずに、 >テスト時と配布時を区別する方法があればなぁ、と。
ユニット単位なら {$DEFINE Test} でいけるけど。(Testを定義したい例) いつのバージョンから導入されたか覚えてないけど、Declared を使うとユニットをまたぐ条件シンボルを定義したり。($IFについてヘルプ参照) これらの方法なら定義したくない時はコメントアウトするだけで済みます。 プロジェクトオプションに定義するのはグローバルなシンボルを定義したい時だけかな。 本題に戻るがIDEからの実行も単独での実行でも、実行ファイルを生成する過程は同じなのでユーザーがなんらかの指定をしないと そういった切り替えはできないと思います。
Win32APIでデバッガから起動されたかどうかを判定するAPIがあったよ。 名前忘れたけど。
俺はテスト用プロジェクトと本番用プロジェクトを作って プロジェクトグループに突っ込んでる。
オハヨウゴザイマス。 よく考えるとVBと違ってIDEからでも一旦EXE作って、 それ動かすから、本当は区別出来るものではないですよね…。 素直に条件定義に DEBUG=TRUE とかでも書いておきます。
あ、DEBUG=TRUEって出来ないんだっけ?
条件コンパイルでもう一つ質問です(;´Д`) 一度コンパイル後に条件定義だけ変更してコンパイルしなおしても、 それが反映されないのですが、何故でしょう? 条件コンパイルのソースに変更かけると (当然ながら)コンパイルしなおしてくれるんですが…
>>95-96 条件定義にDEBUGを入れて、{$ IFDEF DEBUG}する。
>>97 コンパイルじゃなくて、再構築したらうまくいきそうな気がする。
>98 今はそうしてます。 情報THX! >99 そりゃ、再構築すればOKでしょうが…
>>100 いや、再構築って、一からプロジェクト作り直せじゃなくて、
メニューの「プロジェクト」→「XXXをコンパイル」ではなくて、
「プロジェクト」→「XXXを再構築」とすることだよ。
>101 もちろん分かってます。 ただ、頻繁に条件定義を頻繁に変えたいのですが、 プロジェクトが大きくなったので、再構築に時間が…。 Delphiの高速コンパイルンのメリットが…。
>>102 条件定義を変更しても、どこにそれを使っているかという情報が無いんだよ。
だから、全部のユニットをコンパイルするしかないんだ。
分かった、諦めた!( ̄▽ ̄)
panel1があるとします string型のpanel1からTPanel型のPanel1を取得する方法はありますか
>106 多分「'Panel1'という文言をもとに、Panel1というNameの オブジェクトを操作したい」ということかな? FindComponent でどうぞ。
>>107 うまくいきそうです。
ありがとうございました
列挙型について教えてください。 THoge = (hgFoo = 0, hgBar = 1, hgETC = 99); で、ある変数A(DBから取得した値を入れている)が、 このTHogeの中の値のいずれかの値であるか否かを 調べる方法は有りませんか? Highでやると、5とかの値が範囲内になってしまうので、 上手く判断できないんですよ…
ord()
>110 Ordって数値に直すだけでは…。 if (hg >= Low(THoge)) and (hg <= High(THoge)) then こんな感じで、値を調べたいんですが…。 ↑これでは上限下限内の全て関係ない数値まで真になりますが…。
c:\test\test2\test3 一回ある関数に通すと c:\test\test2 もう一度通すと c:\test さらに通すと c:\ こんな手続きなんてありますか? やっぱ自分で書くしかないんだろうか…
>112 ExtractFileDir
>>109 const VALID_HOGE_VALUES = [hgFoo, hgBar, hgETC];
とでも定義しといて
if hg in VALID_HOGE_VALUES then..
>114 おー、列挙型に合わせて集合型を用意することで、 値チェックが出来るんですね! 教えていただき、ありがと〜ござい〜鱒
ActiveXのDHTML Edit Controlについて質問です。 とりあえず、LoadURLでファイルを開けるのはわかりました。 文字を太字にしたり、サイズを変更したりする処理がわかりません。 どなたか助けてください...
Delphiでは無理です。 早めに.NETに乗り換えましょう。
そこをなんとか!
>>118 何がしたいの?エディターでも作りたいのかな?
ソレを利用したヤツじゃないとダメなの?
他の手使った方が、早そう。
>>ActiveXのDHTML Edit Control マニュアルとかサンプル(Delphi用じゃ無くていいから)無いの?
>>120 サンプルはあるだろうけど、”マニュアル”は無いと思うぞ。
レコード型をリストで管理する方法ってありますか? なんか配列で操作しているのですが面倒くさくて。
>>122 New と Dispose を使う。
type
PMyRec = ^TMyRec;
TMyRec = record
FA: Integer;
end;
procedure A;
var
p: PMyRec;
List: TList;
begin
List := TList.Create;
New(p);
p^.FA := 100;
List.Add(p);
New(p);
p^.FA := 200;
List.Add(p);
・・・
for i := 0 to List.Count - 1 do
Dispose(List[i]);
List.Free;
DHTML Edit Controlのサンプルアプリは海外をあされば何個かDelphiの奴があったはず。 どこにあったかは忘れたけど。
PCJAPANのDelphiの記事かいてる奴ここ見てただろ?
>>122 Halbowさんとこに汎用リストがある
128 :
デフォルトの名無しさん :03/09/14 13:20
WM_RBUTTONDOWNとかのイベントで wParamにMK_RBUTTONやMK_SHIFTとか、シフトキーが入ってるけど WH_MOUSEでマウスメッセージフックしたときに、 フックプロシージャの引数のwParamには WM_RBUTTONDOWNが入ってるんですが、 シフトキーはどこに格納されてるんでしょうか?
>>128 GetKeyboardState でいちいち調べる
>>129 GetKeyStateでいけますた
ありがとん
すまん、間違えた
>>72 普通にコンパイル、実行できますが…。
プロジェクトグループにプロジェクトを100以上登録するとの間違いでは。
#0の意味がわからなかったから調べたら ASCII文字の0番のことらしいけどそのNULLって何?
Nullって無ってことかな
∧_∧ ( ´∀`)< ぬるぽ
ListviewのサブアイテムにはIndexOfみたいなのないんですか?
無いです。自分で探してください。
139 :
デフォルトの名無しさん :03/09/14 21:59
変数に演算子をランダムに代入するにはどうしたら良いですか?
SubItemsは唯のTStringsだ
142 :
デフォルトの名無しさん :03/09/14 22:44
俺達はとんでもない思い違いをしていたようだ・・・
>>137 が求めていたのは、TListView.FindCaptionのサブアイテム版だったのだ!
Delphiは変数に演算子を代入できないんですか? Delphiの限界が垣間見えました
> Delphiは変数に演算子を代入できないんですか? はい、そうです。 Delphi ではハンバーグを作ることもできません。 Delphi では部屋の掃除もできません。 Delphi では変数にデジカメを代入できません。 Delphiの限界が垣間見えましたか?
146 :
デフォルトの名無しさん :03/09/15 00:31
すみません、デルファイってさぁ、C/C++とは違うのですか? 今ISDNで数時間かけて60M落とし終えそうなんですが、これは無駄だったんだろうかそうでなかろうかと思っております。
>>146 回り道も時として良い結果につながる。
失敗は成功の母。
>>147 いや、問題はどこまでc/c++の資源が使えるかかなぁ、あとVisualc++との互換性とか。
南下なさそうだな。まぁ使ってみません、嘘です、使ってみます。
>>146 C/C++の資産はDLL経由で利用可能。
BCCのOBJをリンクすることは可能だがあまりお勧めしない。
さすが有料体験版の先駆け企業だな。
QuadrupleDをインストールしようとして、 ライブラリパスを追加したのですが、いざコンパイルすると、エラーが出て、追加されません。 [エラー] ddsd.pas(1497): 文 が必要な場所に 'PROCEDURE' があります [致命的エラー] QuadrupleD_install.pas(19): 'DDSD.pas' ユニットはコンパイルできませんでした というエラーなのですが、どなたか原因を教えていただけませんか?
なぜ情報の開示をそこまで拒むんだ。
なんでDelphiを叩こうとするアホどもはこんなに必死なの?
妬み
別のプロセスが使っているテキストファイルの中身を TStringListにロードするには どうすればいいんでしょぉか?
var Stream: TFileStream; Strings: TStringList; Buf: String; begin Stream:=TFileStream.Create('hoge.txt', fmOpenRead or fmShareDenyNone); SetLength(Buf, Stream.Size); Stream.Read(Buf[1], Stream.Size); Stream.Free; Strings:=TStringList.Create; Strings.Text:=Buf; Strings.SaveToFile('jofe.txt'); Strings.Free; end;
160 :
デフォルトの名無しさん :03/09/15 13:57
ListViewのsubitemの中の文字をサーチして取り出したいのですが、 FindDataを使っています。うまくいかないのですが、 以下でやっていることは見当違いなのでしょうか。 var My_Item: TListItem; begin My_Item := ListView1.FindData(0, PChar('ERROR'), True, True); while (My_Item <> nil) do begin My_Item.Checked := False; My_Item := ListView1.FindData(0, PChar('ERROR'), True, True); end; end;
161 :
デフォルトの名無しさん :03/09/15 14:03
設計時のTMemoに何か文字列を書き込んだとき、 実行時に最後に改行が入ってしまうのは、何か回避する方法ないでしょうか。 通信系のアプリ作るときにいつもココで泣かされます。 設計時TMemo.lines.text ------------ あいう えお ------------ 実行時 ----------- あいう えお ----------
162 :
デフォルトの名無しさん :03/09/15 14:05
164 :
デフォルトの名無しさん :03/09/15 14:15
>>161 設計時にはTMemoに書かずに 文字列をリソースに書いておいて それをコピーしてらどう?
自分は データモジュールに置けるようなコンポーネント作ってるけどな。
>>162 trimよりはtrimrightのがましだけどそれでも末尾の空白まで削られちゃうから厳密ではないでしょ。
単にFormCreateかどこかでSetLengthでLength(sLineBreak)分文字を短くすればいいだけでは。
DelphiにはNullpointerExceptionはねぇんだよ!
∧_∧
(. ・∀・) | |
と ) | | ガッ
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/
(_フ彡 / ←
>>136
>>162 >>164 >>165 ご教授ありがとうございます。下記コードで実現できました。
procedure TForm1.FormCreate(Sender: TObject);
begin
memo1.Lines.Text := TrimRight(memo1.Lines.Text)
end;
こんな便利な関数があったんですね:-)
memoの内容が実行時にも動的に変えられるようにしたかったのですが、 trimlightで、大丈夫そうです。 でも165さんがおっしゃるように、空白まで消えてしまうので、 SetLengthで末尾2バイト(#13#10)だけ消すような方法も検討してみます。 ありがとうございます。
Align := ini.readstring('a' , 'Align' , 'Alright'); これをやるとTAlignとStringには互換性がありませんというエラーが出ますが caseやif等を使用しないでやる方法はありますか?
Align := TAlign(ini.ReadInteger('a', 'Align', Ord(Align));
同じように宣言したローカル変数でも「初期化されない〜」 と警告が出るものと出ないものの違いは何ですか?
>>170 うまくできました。ありがとうございます
一応聞いておきたいのですがstringからは無理なのでしょうか
>>175 なるほど。ていうかコピペしようと思ってソースもっかい見たら
原因がわかってしまった。片方はif文の中でしか代入されてないから
初期化されない場合があるって意味みたい。
お騒がせしました。
>>172 const
cAligns: array [TAlign] of string = ('alNone', 'alTop', 'alBottom', 'alLeft', 'alRight', 'alClient'); //※1
function StrToAlign(const s: string): TAlign;
begin
for Result := Low(TAlign) to High(TAlign) do
if cAligns[Result] = s then
exit;
raise Exception.CreateFmt('TAlignニ"%s"ナンテネーヨ,ウワァァァン!!', [s]); // ※2
end;
読み込み:Panel1.Align := StrToAlign(FIniFile. ReadString('section', 'ident', 'alRight'));
書き出し:FIniFile.WriteString('section', 'ident', cAligns[Panel1.Align]);
※1もしDel6以降TAlign型の定義が変わっていたらそれにあわせて変えてください
※2は「そんなのねぇよ!」っていうときにエラーにするコードですが
代わりに, result := alRight; などとしてデフォルト値を返すのもいいかもしれません.
∧,,∧ ミ゚Д゚,,彡 ミ つ旦)~~ //列挙型から文字列へ Label1.Caption := GetEnumName(TypeInfo(TAlignment), Ord(Label1.Alignment)); //文字列から列挙型へ Label1.Alignment := TAlignment( GetEnumValue(TypeInfo(TAlignment), 'taRightJustify') );
これがDelphiの限界か(笑
181 :
デフォルトの名無しさん :03/09/16 03:42
WindowsXPにDelphi6Personalをインストールしたら、 メニューの一部とかが文字化けして しかも日本語入力ができないんです。 VBでMSPゴシックが文字化けしたときみたいになってて 消してもう一度インストールしても直らなくて ボーランドのQ&A見ても載ってないし どうしたらいいか教えてください〜
素直にボーランド様へ御質問メールを献上すべし!に1億begin end;
なぜ英語ロケールで使っているの?
おおなるほど!ロケール見て変わってたんですね 無事直りました!答えてくれたおふた方ありがとうございました!
すみません Cの改行\nに相当するものってdelphiではどう書くのですか?
sLineBreak 文字列定数。 '一行目' + sLineBreak + '2行目だ';
>186 Indy入れて無くてもOKなのか? 普段は Const CRLF=#13#10; Text1.Text := '1行目' + CRLF + '2行目'; どういう理屈か、 '1行目'#13#10'2行目';でもOK
>Indy入れて無くてもOKなのか? ふむ。 sLineBreak は D6 か D7 で System ユニットに追加されたのだよ。 コントロールコードとかの(一般には)表示できない文字をソースコード上に記述するために C では、0x5C をスペシャルキャラクタにして、\ の直後の文字で特定機能や文字コードの16進表記をするようにした。l Delphi ではスペシャルキャラクタを定義せず、#xx 記法で文字コードの10進表現(#$xx で16進表現)を指定できるようにし、文字型を「一文字だけで構成された文字列型」とみなすことで、連結した文字列として任意の文字を含む文字列を構成できるようにしたのだ。
>189 (・∀・)つ"∩ へぇ〜へぇ〜へぇ〜へぇ〜
WideString型を通常のString型として使いたい時は、 String(WideString型変数)って、キャストすれば十分?
192 :
デフォルトの名無しさん :03/09/16 14:33
みなさんプログラム組む前ってちゃんとフローチャーチトとか作ってから 組み始めてるのですか?
誰も作ってないよ、そんなもん
>>192 フローチャートならほとんどの人は(大まかなやつを、大抵は別の方法で)作ってるが(w
194 :
デフォルトの名無しさん :03/09/16 16:37
スレッド処理の使用方法について教えて下さい。
http://www.borland.co.jp/tips/delphi/dh004/thread_1.html 上記URLを読んでもよく分かりませんでした。
現在、タイマーで一定時間ごとにメールを受信するプログラムを作っているのですが、
スレッドを使わなくても、メールを読み込みながら別の処理(例えば、Memo1に文字を打ち込む)をする事が出来ています。
しかし上記URLを読むと、このような場合はスレッドを使った方が良いような気がします。
同期を取らなくても良い場合でもスレッドを使った方が良いのでしょうか?
どのように場合分けをしたら良いのかについてもアドバイスをお願いします。
逆に同期が必要ないからスレッドを使うのが簡単なのでしょう。 メールを読みながら別の処理が出来ているという事は、メールを読む処理中でメッセージループをまわしてくれてているのでは? それで十分実用になってるならそれで十分では?
>>195 レスありがとうございます。
現在は動いていますが、これからもどんどん拡張していく事を
考えると、このままで良いのかなぁ?と(^^;
こういう時はスレッドを使う、
こういう時はスレッドは使わない
というのを判断するコツなどを教えて頂ければありがたいです。
例えばボタンを押したら処理が始まるけど、他のボタンの入力も
受け付けるとかいう場合なども、Application.ProcessMessagesを
使わずにスレッドを使った方が良いのか悪いのか・・・。
UMLなら作ってる
>>196 Application.ProcessMessages を繰り返し実行するような場合は、別スレッドに
することを考慮する価値があると思います。GUI のメッセージ処理はメインスレッド
が専門に受け持ち、子スレッドは GUI に依存しない処理に専念できます。
199 :
デフォルトの名無しさん :03/09/16 23:03
delphi6proを使っているんですが、vaioのU3でまともに動きますでしょうか。 メモリは512MBに増設したとしてどうでしょうか。
vaioのU3といわれて分かる奴がどれだけいるだろう。
>>199 OS にもよるけど、そのスペックだったら全然問題なし。
Win98 128MB でも楽勝。
何に勝つのか分かる奴がどれだけいるだろう。
>>199 U1(384MB)ですら動くから、U3だったら作作。
204 :
デフォルトの名無しさん :03/09/16 23:16
>>139 おめでとうございます。マルチポスト先にレスが付いてますよ。
ちなみに「DelphiGIG.com」の方じゃないですよ。
>>204 おいおい、U3でやったら、もっと目が辛いだろ。
それに、メインかい。あのディスプレイ・キーボードじゃメインにするのは無謀ってもんだろ。
フルキーボード&外部ディスプレイがあるなら別だが、そんなことするくらいなら、
他のノート or デスクトップがいいだろよ。
レコード型をTListで管理してますが、Disposeする際にメモリリークしてしまいます。 type pHoge = ^THoge; THoge = Record Fhoge1: String; Fhogehoge : Integer; end; こういうレコードを・・・ var Hogelist : TList; Hoge : Thoge; pH: Phoge; begin Hogelist := TList.Create; Hoge.Fhoge1 := 'TEST'; Hoge.Fhogehoge := 123; New(pH); pH^ := hoge; Hogelist.Add(pH); ・ (中略) Dispose(Hogelist.Items[0]); Hogelist.Free; end; これはソースの抜粋で、実際には(中略)の中でpHは破棄されているので、 DisposeするときにpHは直接渡せません。 Disposeは型を意識するので正しい型のポインタを渡せとのことなのですが、 具体的にどうすればよいのかわかりません。
型を渡せばよいので Dispose( pHoge(Hogelist.Items[0]) ); ですかな? コンパイラがこれを見て _Dispose( <ポインタ>, <RTTI 型情報> ); というコードに展開し、String 型の開放を含む処理をしてくれる。
210 :
デフォルトの名無しさん :03/09/17 09:31
ShellListViewを利用しているときに、コラムをクリックしてファイルサイズや名前の 順番にソートする方法はありませんでしょうか? ありましたらお教え下さるようお願いします。
delphiとは直接関係ないのですが、本を読んでるとバッファという言葉が出てきて、 メモリをGetmemで直接確保したりするようなサンプルが乗っていたりします。 で、質問なんですが例えば文字列を扱うバッファが必要だったとして、 TStringListを使うとかではだめなんでしょうか? 処理するまでの記憶な訳ですよね。
>>198 Application.ProcessMessagesを多用しているので、
今後は出来るだけスレッドを使うようにします。
(ってか勉強しなきゃ・・・・)
ありがとうございました。
>211 あまりにも一般的な概念なのでちょっとね。 多くの場合、操作Aと操作Bに必要な資源(所要時間とか消費メモリ量とか)に大きな差がある場合、その差を吸収させるために緩衝材を入れる。 ってことです。宅配便で壊れ物の周りに入れる物もバッファだし、CPU のキャッシュもバッファ。 文字列と StringList だと、明確な違いがあまりないのでちょっと状況がわからないとなんともいえない。
まったくスレ違いなので申し訳ありませんが、 Delphiでの開発の一環として平にご容赦を。 SQLについての質問がしたいのですけど、 適当なスレが見つかりません。 どなたか適当なスレに誘導していただけませんか…。
216 :
デフォルトの名無しさん :03/09/17 11:25
スレッド処理について質問です。
ttp://www.borland.co.jp/tips/delphi/dh004/thread_2.html 上記URLに
>Synchronizeメソッドは、このメソッド経由で呼び出されたメソッド
>が完了するまで、メインスレッドの処理を待機させ、マルチスレッド
>でVCLが使用できるようにします。
とあります。
という事は下記の処理ではループの中にApplication.ProcessMessagesを
入れるのが妥当なのでしょうか?
(もし違うのでしたら、妥当な方法をご教授下さい)
begin
while not Terminated do
Synchronize(LoopProc);
end;
procedure LoopProck;
begin
for 100回 do begin
Database.Open;//けっこう重い処理だとします。
//ここにApplication.ProcessMessagesを入れる?
end;
end;
「待機させる」という部分を
「その処理が終わるまでメインスレッドの次の処理が出来ない」
と理解しているのが間違っているのでしょうか?
宜しくお願いします。
Synchronize内に重い処理を書くのが間違い。 一瞬でリターンすべき。何のためにスレッドを使ってんのよ。
「けっこう重い処理」を、描画系を持つメインスレッドから分離するんです。 この説明でわからなければ... どうしよう、
[重い処理] -> Application.ProcessMessages と覚えちゃっているんだね。丸暗記では現実社会は通用しない。 ProcessMessages はスレッドを使わないときの問題回避策。とでも思ったほうが。
重い処理の中で描画系に関わるところだけをsyncronizeで囲えばいい。 分離するんでしょ?
「重い処理」が描画などのような、他のスレッドと相互干渉を持たないのであれば、単に複数のスレッドを動かして終わり。 何らかの形で干渉する場合、特にメインスレッドが管理している描画部分に関しては Synchronize で他のスレッドを停止させて安全に処理をする。 216 のコードは、断片過ぎてよくわからないんだけど、どうも SYnchronize から、「他のスレッドと干渉しない」「重い処理」を呼び出しているように見える。 ということ。だとしたら設計が間違っている。
222 :
デフォルトの名無しさん :03/09/17 12:30
>>217 >>218 >>219 >>220 >>221 みなさまありがとうございます。
なんか自分がアホな事を言っているのを理解して来ました。
「メインスレッドに影響を与える必要がある処理(例えば描画系)
をSyncronizeで囲って、その他の重い処理はメインスレッドに
影響を与えないように、Syncronizeの外で実行する」
って事で良いんですね?
(なぜか脳内で「とりあえずSyncronizeで囲う」ってなってました)
それからまた質問なのですが
私のコーディングが悪いからなのか、
スレッドクラスのExecute内で使うメソッドにブレイクを張ると
(いまの所ブレイクを張った時のみ)(Syncronizeは外しました)
異様にマシンが重くなる事があるのですが、これは何故でしょうか?
(スペックはPen4の2GHzなので問題ないと思います)
(このせいでレスが遅れました。申し訳ありません)
さぁ...
>>222 ブレークポイントを評価しているんじゃない?
ブレークポイントが設定された位置にはブレークポイントのためのコードがデバッグ時に書き込まれ
それによってデバッグ割り込みが発生します。デバッガはその時コードを戻して実行続けてまた設定するなど
複雑な事をするので多少パフォーマンスが落ちます。
もしブレークポイントを外して実行して普通の処理速度ならこれらが原因であると思われます。
他のWindowにApplication.Restoreをするにはどうすればよいですか? 具体的には、 常駐型のアプリをつくっておりまして最小化をするとタスクバーから消える仕様になっております。 多重起動の際には、既に起動してあるものをタスクトレイから復元&最前面に表示するようにしております。 ShowWindow(hForm,SW_Show); SetForeGroundWindow(hForm); で復元&最前面は実装できたのですが、当然これですとRestoreされていないので再最小化ができません。(タスクバーにも非表示のまま (通常の復元処理にしてあるアイコンクリックをすればタスクバーに戻って再最小化も可能になります。 FormのShowイベント、ActivateイベントでRestoreというのもやってみましたがダメでした。(アイコンクリックと同じ処理を書いてもダメでした どないしたらええですか?
226 :
デフォルトの名無しさん :03/09/17 14:02
Visual StyleはそれぞれWindowの枠の太さが違うからFormのSizeが変わるね。 デザイン画面のプロパティでは枠の太さに左右されない部分でFormのSizeを指定出来た方がいい
227 :
デフォルトの名無しさん :03/09/17 14:14
>>224 レスありがとうございます。
多少パフォーマンスが落ちるぐらいなら、問題ないのですが、
一つの動作をするのに(例えばステップ実行やAlt+Tabでの画面切り替えなど)
2〜3分ぐらいかかってしまい、デバックできません。
例えば下記URLのサンプルの
ttp://forum.nifty.com/fdelphi/samples/00971.html 下記箇所にブレークを張ると異様に重くなります。
procedure TMyThread.Execute;
var
State, No, EndNo: Integer;
begin
while not Terminated do begin
//例外発生で終わらないように
try
FRestartFlag := False;
State := 0;
while (not Terminated) and //[[[[[[ ここにブレークを張る ]]]]]]
(not FRestartFlag) do begin
他にもこのような症状が出ているかたはいらっしゃいますか?
諦めるより他ないのでしょうか?(TT)
EADOErrorにはエラーコードのプロパティが無いみたいだけど、 GetLastErrorで取ってくるのがいいのかな?
>>227 それだけで問題が起きるのならば、それはそちらの環境が原因のように思われます。
ほとんどの人が問題なく使えているのですから、ほかの原因を疑ってみましょう。
もしかしてアンチウイルス系のアプリケーションがリアルタイムチェック?なんかして重くなっているかも。
ちなみにXPだとspy++した後とかよくGUIが変になるよね。そんな時はログオフログオン。
GUIが完全に動かない時はリモートシャットダウン!
>>228 EADOErrorがどういう風に使われているか調べろ。話はそれからだ。
ぐぐったけど、ほとんど見つからね〜っす、先生(;´Д`)ノ
>>231 とりあえずソース嫁。調べるとはそういうことだ。(ファイル検索するだけで終わるけど)
ソース見ればその質問が変なことに気づくだろう。
…実際は、タダのExceptionっすか…(゚Д゚;)
SW_Restoreでもうまくイカネ(´・ω・`)
>>225 適当なメッセージで通知して、復元側で復元のコード実行すりゃいいのでは? 発想を変えませう。
236 :
デフォルトの名無しさん :03/09/17 16:59
>>227 レスありがとうございます。
どうやらそのようです。
環境はWinXP HomeEditionで、Delphi7を使っています。
ワクチンソフトやその他常駐ソフトを全て終了して
試しても同じ結果になりました。
Win2000 Delphi6 で同じソースで試したところ、ちゃんと
動きました。
もう、ちょっとへこたれて来たので、該当箇所には
ブレークポイントを使ったデバッグはしないようにします(^^;
お騒がせしました。
237 :
ヘルスズキ :03/09/17 17:05
>>229 > GUIが完全に動かない時はリモートシャットダウン!
これのやり方を教えてくださいませ。
Delphiとは関係なくて申し訳ないのですが・・・。
>>237 Win2kかXPの[管理ツール]-[コンピュータの管理]を開く。[別のコンピュータへ接続]でシャットダウンさせたいコンピュータを選ぶ。
プロパティの起動/回復の設定を開き、そのダイアログに出ているシャットダウンを選択する。
これがOSに標準で用意されている機能を使ったやり方だけどマンドクサイのでシャットダウン専用アプリケーションを使うのもよし。
ちなみにこれらの機能はWindows Management Instrumentation(WMI)を使用したもので、もちろんDelphiからでも利用できる。
239 :
ヘルスズキ :03/09/17 17:36
240 :
デフォルトの名無しさん :03/09/17 17:44
複数のスレッドから参照される共通変数の排他処理 はどうしてますか?
WndProcをoverrideしてできますた。
>>235 ありがd
>>178 実行時型情報(RTTI)を使うやり方は案外短いコードでできるのですね.
245 :
デフォルトの名無しさん :03/09/18 00:22
DelphiのEditってUNICODE対応してないのですか? どーやったらUNICODEを入力できるようになるのでしょうか? WindowsXPとかだと、IMEで変換まで出来るけど、入力した結果が "?"に なってしまい、何が使えて何が使えないのか、入力してみないと判らない とかってことになってしまうのですが・・・・。
247 :
デフォルトの名無しさん :03/09/18 00:44
>>209 おかげさまで無事メモリリークが退治できました。
いろんなサイトで調べてみましたが、TListでレコード型を管理するサンプルコードは
ほとんどが同じようなことをしてまして、全部メモリリークしてるサンプルだと思うと・・・
ああ、怖い。
管理不要な型ならOK Finalize呼んでるならOK
>>248 > ほとんどが同じようなことをしてまして、全部メモリリークしてるサンプル
New のときは当然型つきポインタで確保するけど、Dispose ではその型に
キャストするのを忘れる、ということ?
「ほとんどが同じようなことをしてまして」とは具体的にどこのこと?
>>294 は Items をTMyRecord 形にした上で Finalize してるので大丈夫
>>208 は 生のTListを渡しているので ITemsは形無しポインタ形となり、型を指定しなければFinallize/Disposeが出来ない。
>>249 なるほど。FreeMem の前に Finalize を呼んでいる意味を理解していなかったと。>> Del フサ
なんかさぁ、 > 全部メモリリークしてるサンプルだと思うと・・・ これって、自分のDQNを隠すためかよ・・・・・
まぁまぁ。くだすれなんだから暖かく見守りましょう。
>>249 Clear はよさそうだけど、Delete は、string 型を持ってるレコード型のときに
まずそう
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); begin Action:=caFree; end; destructor TForm2.Destroy; begin inherited; Form2:=nil; end; メインであるForm1のCloseQueryにて、Form2があればCloseQueryを呼ぶ、 ということをしたいのに、ユーザー操作で閉じられた場合はnilになりません。 Form2が閉じられたかどうか知るため、Assignedを使うのにこういう風に書いてます。 エラーは出てないようですが、リークなどなにか危険はないですか?
>>257 ごめん。何言ってるんだかわからない
ユーザー操作で閉じられたときに nil にならないのは何?
Form2 が閉じられたかどうかを、誰が知りたいの?Form1 ?
... もしかして Assigned(Form2) を使いたいために Form2 に nil を代入している?
単にウィンドウが閉じているかどうかであれば HandleAllocated で判断できませんか?
259 :
デフォルトの名無しさん :03/09/18 11:59
質問です フォームにボタンだけが貼り付けられています。 ボタンが押されたときのイベントにどんな動作を仕込みますか? フォームにはボタン以外は何もありません。
あなたがやりたいことを。>> 259
>259 DeleteFile('C:\Program Files\Internet Explorer\iexplore.exe');
262 :
デフォルトの名無しさん :03/09/18 16:17
>Socket Error # 10061 >Connection refused はどんなときに出ますか?Indyでつ。
TIdHTTPクライアントでエラーが出ますが、 サーバはTIdHTTPServerですし、 エラーにならないマシンもあります。
>>264 ポート指定してないだけちゃうんかと
ホスト名間違えてるだけちゃうんかと
>>265 御免なさい、デグレードでホスト名空になってただけですた。
267 :
デフォルトの名無しさん :03/09/18 20:26
VBで、Delphiを作った関数を呼び出そうと思うのですが、以下のソースで実行しても、VB側受け取った戻り値Disが計算されて無くてゼロで返ってきます。 かつ、参照渡しで渡した配列Bも更新されていません。 何が悪いのか、どなたか教えてください。 ==VB側======================================================= Private Declare Function Test2 Lib "SoilFunc.dll" (ByRef B As Double) Dim B(0 To 100) As Double Dim Dis As Double B(0) = 10 B(1) = 20 Dis = Test2(B(0)) Debug.Print B(0) Debug.Print B(1) Debug.Print B(2) Debug.Print B(3) Debug.Print Dis ==Delphi側 DLL内関数========================================= function Test2(var B:array of Double):double; stdcall; begin Test2:=B[0]+B[1]; B[2]:=30; B[3]:=40; end; exports Test2;
>>267 Delphiのほうを勉強し直せ。間違いだらけで突っ込む気も起きん。
とりあえず、VB側も、 Private Declare Function Test2 Lib "SoilFunc.dll" (ByRef B As Double) As Double にするか、 Delphi側の戻り値をOleVariantにするか
>>257 Form2 は、グローバル変数ですから、これに nil を代入することと、
メモリリークはなんら関係ありません。ちょっと問題なのは、わざわざ
destructor をオーバーライドするのじゃなくて、OnDestroy でよいのでは
ないでしょうか。
あと、Assigned(Form2) ではなく Screen.Forms、FormCountと is を
使うと、TForm2 クラスのインスタンスが存在するかどうか、動的に判断できます。
>>257 たぶんその書き方からみて、フォームをプロジェクト中で開いているでしょ?
ユーザーが閉じても、メインフォーム以外のフォームはその時点ではDestroyされません。
Visible:=falseという状態になっているだけですよ。
>268 横から割り込みスマソ DelphiでDLL作る時に引数とかこうしたら(゚∀゚)イイ! っていうことを解説しているHelpやページはありませんか?
273 :
デフォルトの名無しさん :03/09/18 21:45
EUCやETF-8でURLEncode出来るコンポーネントとかってありますか?
>>272 そんなことは自分で決めることだろ。何の解説がいるんだ?
ETF-8ってなんだろ。
>275 型
278 :
デフォルトの名無しさん :03/09/18 22:12
Delphiで文字列の右端から指定した文字数だけを切り抜く方法ってないですか? 文字列の長さが固定していればCopyコマンドを使えますけど、元の文字列長が可変 するもので、そんな場合にはどうしたら良いのか分からずに困ってます。 良い方法があったら教えてください。
Delwikiのコーディング規約を見てきたのですが else if の時はどうすればいいですか? elseの次のifは同じ行?改行後?
>>278 そういうコードを自力で考えることが積み重ねになるのだ。
頭ひねって一生懸命考えろ。意地悪で言ってんじゃないぞ。
Delphiは文字列操作系が貧弱だから、今のうちの考える癖付けとけ。
283 :
デフォルトの名無しさん :03/09/18 22:32
>>279 Delphiのヘルプに載ってる書き方が正式。
Delphiでブロック崩しを作っているんですが、弾の跳ね返りまでできました。 いざブロックを作る、という段階なんですが、ひとつずつ座標を指定するのも 気の遠くなるようなレベルなんです。 何か良い方法を教えていただけませんか?よろしくお願いします。
for y:=0 to 5 do begin for x:=0 to 20 do begin block(x*32,y*8); end end みたいな感じでどうでっしゃろ ステージエディタを作ってまう手もありますけどなぁ
OutputDebugStringは、デバッガが動作してない時でも、 EXEの実行スピードに影響を与える?
>>287 気になるなら自分でベンチマークでもすりゃいいのに
>>257 ちょっとつくってみました.サブフォームはメインフォームから動的に生成しています.
type
TForm1 = class(TForm)
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormDblClick(Sender: TObject);
private
FSubForm: TForm2; //サブフォーム(存在しないときと,消滅通知が来た後はnil)
FCloseMyselfAfter: boolean; // サブフォームのあぼーんが確定したときにこのフォームを閉じる場合True
procedure ShowSubForm; // サブフォームを作って表示
protected
procedure Notification(AComponent: TComponent; Operation: TOperation); override; // サブフォームのあぼーん宣告を受け取る
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
// サブフォームが生きている場合はサブフォームを閉じることを試みる.
// 閉じることができたかどうかにかかわらずメインフォームは閉じない
// その代わり,サブフォームのあぼーん確定情報を得たらもう一度フォームを閉じようとする.
if FSubForm <> nil then
begin
FSubForm.Close;
FCloseMyselfAfter := True;
CanClose := False;
end
// 生まれていない/あぼーん(確定)の場合はこのフォームを閉じるかどうかの問い合わせ
else
begin
if Application.MessageBox('閉じてもいいかい?', PChar(Name), MB_YESNO) = IDNO then
CanClose := False;
FCloseMyselfAfter := False;
end;
end;
>290の続き procedure TForm1.FormDblClick(Sender: TObject); begin ShowSubForm; end; // コンポーネントが解放されるときに呼び出される. procedure TForm1.Notification(AComponent: TComponent; Operation: TOperation); begin inherited; // サブフォームのあぼーん通知なら… if (Operation = opRemove) and (AComponent = FSubForm) then begin FSubForm := nil; // あぼーん確実の印 // もう一度このフォームを閉じることになっている場合は閉じようとしてみる. if FCloseMyselfAfter then begin FCloseMyselfAfter := False; Close; end; end; end; procedure TForm1.ShowSubForm; begin FSubForm := TForm2.Create(Application); FSubForm.Show; end;
>291の続き 補足:TForm2は閉じるときに開放する前提です,念のため. procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end;
293 :
デフォルトの名無しさん :03/09/19 01:01
先生方、教えて下さい。 Delphi7でWindowsXPのビジュアルスタイル(?)にした TEditやら、TDBEditやらの編集領域を、 OnEnterで任意の色を付け、OnExitで色を戻したりしていますが うまくいきません(コントロールの枠の部分の色が残ってしまいます) (実際のコードはScreen.ActiveControl等を使って簡略化してます) Update や、 Refresh等も試しましがうまくいきませんでした。 何かよい方法ありますか?
>>293 そういうもんだし。BorderStyle=bsNoneにでもすれば?
296 :
デフォルトの名無しさん :03/09/19 01:46
>>294 うぐぐ・・・
やはりそれしかありませんか
でもレス、ありがとう・・・
>>257 フォームはね、Closeされたあと実際はメッセージがポストされて一呼吸置いてから破棄されるのよ。
だから直ぐにDestroyは発生しない。DestroyじゃなくてCloseQueryでnilに設定したらどうだい?
298 :
デフォルトの名無しさん :03/09/19 01:53
>>295 それやっちゃうと、コントロールそのものの外観が変わって
ちょっと私のイメージ(というか、好み?)が違うので
適用を見送りました・・・
何で、再描画系のメソッドでうまくいかないのだろう?
むぅ〜・・・
>>298 外側から2ピクセル分の青と白の枠のことだよね?
その部分はXPスタイルの描画部分だからユーザーが変えるべき部分ではないよ。
無理やり描画塗りつぶすのは不可能ではないけど、非標準の外観になるのでお勧めしません。
> フォームはね、Closeされたあと実際はメッセージがポストされて一呼吸置いてから破棄されるのよ。 Close → Release → CMRelease → Free → DoDestroy → OnDestroy イベント だから OnDestroy が実際のインスタンスの消滅に一番近いね。でも安全を見るなら PostMessage() する直前の Close でもいいのでは?
サブフォームののCloseQueryは、シャットダウン要求では呼ばれない。 だから、メインフォームのCloseQueryから呼んでやらなければいけない。 メインフォームから、サブフォームの生死を確認したい。 nilかどうかで判断できるなら、一度も生成されてない場合も対応でき、コードも短い。 しかし、Action := caFreeでサブは解放されるが、Form2変数にはnilではなく死骸が入っている。 そこで、Form2自身のデストラクタでForm2にnilを入れてやった。 エラーも出ないし、これでいいと思っている。 何度も生成と破棄を繰り返しても大丈夫だ。 しかし、inherited;の後とはいえ、Destructorでnilにしちゃったら、 解放すべきポインタを見失い、解放自体されないなんてことはないかと不安に思った。 つーことで、他の方法が知りたいんじゃなくて、 このいい方法を思いついたので、これで逝きたいんだけど、 リークしたり、私の知らない不都合が見えないところで起こってないか知りたかったんです。 なにか不都合起こりますか?
好きに代
303 :
デフォルトの名無しさん :03/09/19 02:20
>>299 外側の青と白の部分まで色が変わるからたちが悪いなぁ〜
TEdit.Color := clRed; // OnEnter
TEdit.Color := clWindow; // OnExit
こんな感じで書いてるけど、色は戻らない・・・(なぜ?)
コントロールをキーボードで移動させていくと
足跡がついるようで見苦しい・・・
レス、ありがとうございました。
>> 解放すべきポインタを見失い これが間違いのもと。 Form2 は単なるグローバル変数。たまたま、TForm2 のオブジェクト参照が 代入されているだけ。型さえ合えば、どんな変数にでもいくらでも代入できる。 すきなときに nil を代入してください。参照するコードが確認できれば、 メモリリークとかは全く関係なし。
>>303 よく確認したらバグだね。
今日はとりあえず寝る!
>>301 オレなら
OnClose で
Action := caFree;
Form2 := nil;
とするね。297、300 の指摘のように、CM_RELEASE をポストした後だと、
死にそうな Form2 にアクセスするイベントがどこかで走る可能性がある。
あとTForm2 のデストラクタのオーバーライドでやるのはダサすぎ。
>>303 こんな感じで一つ。原因は色を途中で変えられた場合、非クライアント領域が描画されないためである。
procedure RepaintNonClient(Control: TWinControl);
var
ORect, IRect: TRect;
Rgn, ClipRgn: THandle;
begin
if not Control.HandleAllocated then Exit;
IRect := Control.ClientRect;
ORect := Control.BoundsRect;
MapWindowPoints(Control.Handle, 0, IRect, 2);
MapWindowPoints(Control.Parent.Handle, 0, ORect, 2);
Rgn := CreateRectRgnIndirect(ORect);
ClipRgn := CreateRectRgnIndirect(IRect);
CombineRgn(Rgn, Rgn, ClipRgn, RGN_DIFF);
try
SendMessage(Control.Handle, WM_NCPAINT, Rgn, 0);
finally
DeleteObject(Rgn);
DeleteObject(ClipRgn);
end;
end;
procedure TForm1.Edit1Enter(Sender: TObject);
begin
TEdit(Sender).Color := clRed;
RepaintNonClient(TEdit(Sender));
end;
308 :
デフォルトの名無しさん :03/09/19 09:54
267です。 >268 何処がおかしいのか、ヒントだけでも教えて欲しいんですが。 >269 ありがとうございます。試してみましたが、両方ともうまくいきません。 >Private Declare Function Test2 Lib "SoilFunc.dll" (ByRef B As Double) As Double >にするか、 >Delphi側の戻り値をOleVariantにするか
309 :
デフォルトの名無しさん :03/09/19 10:01
267です。 補足ですが、delphiから呼び出せば、DLLはまともに値を返します。
>>304 で仕組みが理解できました。
Form2が二重に表示されない限り、
実際に解放されてしまう前にnil入れても不都合のない仕様なので、
CloseQuery、Close、Hideあたり検討してみます。
>>308 まず、Delphi側はオープン配列、VB側は Doubleの参照渡しでまったく一致していない。
オープン配列は配列先頭番地と配列サイズを渡すひつようがある。
オープン配列とやりとりするなら VB側の引数は たぶん
(ByRef dArray() As Double, ByVal dSize As Long)
こうかな・・・まあ検証してないけど、
>>307 おはようございます
早速ためしてみたら、ばっちりでした!!
夜遅く、長々と付き合ってくれて方々、
どうもありがとうございました。
313 :
デフォルトの名無しさん :03/09/19 11:32
>>311 ありがとうございます。
ご指摘のように修正したら、戻り値はB[0]+B[1]が返ってきました。
関数内で処理した、以下の参照渡しの変数が更新されていません。
B[2]:=30;
B[3]:=40;
TCanvas.Arcメソッドでたまに開始位置と終了位置がずれます。 指定の位置より少し長めに描画されることがあるんですが、同じような経験された方いらっしゃいますか? Del5+WinXPです。ディスプレイでもプリンターでも起こることがあります。
>>313 うーん。だからオープン配列使わないでやったほうが安全だと思うよ。
具体的には 配列ではなくレコード型を使ってお互いにやりとりしたらどう?
>>314 うん。細かい個所で違いが出るよね。
だから、 そういうのやるときはオフスクリーンBMP作って描画してから転送するようにしてるよ。
317 :
デフォルトの名無しさん :03/09/19 12:30
318 :
デフォルトの名無しさん :03/09/19 12:43
TTabControlのタブの文字の大きさを変えるには どうしたら良いでしょうか?
作成したActiveX DLLをIISで動作させるとエラーが出ます。 そのため、何処で落ちているかを調査するために、 OutputDebugStringとログ書き出し(ドライブのルートに書く)を 追加したのですが、どちらも出力されません。 IISやユーザ管理の設定をどう変更すれば出力されますか?
OutputDebugStringはデバッガで文字列を受け取るためのAPIです
>>314 コンピュータには、「たまに」ということは絶対にない。かならず原因がある。
本当に自分に間違いがないか確認汁
>321 OutputDebugStringの結果を受けるアプリは用意しています。 VBと、作成したActiveXで動作させた場合は、 このアプリで出力が確認できました。 IISだと駄目なんです。
>> 322 そんなむきにならんでも。 一つ一つはロジカルに動いても複雑度が増すと、実質的に未来を予測できなくなくなることはよくあることだ。
>>323 IIS といってもいろんなバージョンが...
IIS アプリが暴走/クラックされても他に与える影響が少なくなるよう、かなり限定された権限しかついていないからね。
どっかにチェックボックスまたはレジストリがあるはず。google で探してみ。
それとは別に ISAPI アプリで ActiveX ? ISAPI アプリの走行空間は Service アプリと同様、GUI にアクセスできなかったり制限が多いから気をつけて。
Windows2000上で部分的に透明なウインドウを使ったアプリを作ったんですが、 画面キャプチャソフトに拾ってもらえません。 いろいろ調べてみたのですが、自分の作ったソフトだけでなく、 透明なウインドウはすべてキャプチャされないようです。 これって仕方ない(OSの仕様)のでしょうか? 対処法はないでしょうか? あまりDelphiと関係なくてスマソ・・・
>322 そのたまにの時に値を参照してみました。 with PaintBox1.Canvas do begin Pen.Color:=clBlack; Pen.Width:=1; MoveTo(472,0); LineTo(472,PaintBox1.Height); Arc(-1936,316,2881,5132,2881,2724,472,316); end; これを実行すると終了位置がずれちゃいます。わかりにくい値ですが 直径が奇数になるとおかしいようです。1ドットずれるならわかるんですが・・・
delphi6 personalを使ってますが、 作業スペースの背景が透過されないようにするにはどうすればいいんですか?
>>329 例になってない。どのような状態が期待したものか、そうでないのか例を出すならきちんと示せ。
>>329 それ追試する気になれんので一般論で言うと、
Windowsはそういうトラブルは確かに多いよね。
フォントを回転させたらある角度で変になったりさ。
だからさ、そういうの見つけたらそれを使わんようにするのが一番さ。
具体的には、円弧を描きたいならArcじゃなくベジェで描くとか多角形に変換するとかさ
ベジェで描くのは最初やっかいに思うかもしれないけど
http://www.tensyo.com/urame/prog/ALGO.HTM#C1 ここの fEllipseM を応用すればいけると思うよ。
>325 おー すみませんがググるキーワードぷりーずぅ。 「IIS ActiveX 設定 チェック」では関係ないのばかりで それっぽいのが中々出てこないんで〜。 ちなみにIISはWindows2000Serverのです。 >326 これ、ISAPI以外でもいけるんでしょうか? あと、サーバーは開発機とは別でして、 その場合も出来るんでしょうか?
>332 ご親切にどうもです。 一応多角形で描画させてるんですが、原因不明だと気持ち悪いので お尋ねいたしました。ただ小さい円弧をしこしこと多角形で描くのもなんだかなぁ・・
335 :
デフォルトの名無しさん :03/09/19 16:03
IdHTTPServerで、HTTP/getメソッドのイベントハンドラで、 複数アクセスになると、止まります。 グローバルなオブジェクトなんか使ってないんですが。 何か気をつけることはありますか?
IBQuery.prepareで止まります。 スレッドごとにトランザクション増やしてもだめみたい。 毎回コネクションはるべき?
338 :
デフォルトの名無しさん :03/09/19 17:26
枠の大きさに合わせて自動的に画像が拡大縮小する TImageってどこかに落ちてませんか?
>>338 StreachBltでも使って自作しる
> 落ちてませんか? いやーな言葉。プログラマならつかうなよぉー 枠ってなに?
ProportionalやStretchじゃだめ?
>>341 StretchをTrueにしたら出来ました。
ありがとうございます!
343 :
デフォルトの名無しさん :03/09/19 20:35
フォームの上にたくさんのlabelやeditboxを作った後でそれをpagecontrol の上に置きたくなりました。 いちいち全部、再設定するのは面倒なので、元々のlabel等をpagecontrolの 上に乗せたいのですが、どうすればこんなことは出来るのでしょうか?
>>343 (移動元で)カット → (移動先で)ペースト
でいいじゃん。
複数のコンポを移動させたきゃ[Shift]キー押して複数選択すればいいし。
345 :
デフォルトの名無しさん :03/09/19 20:49
自分自身のGlobalIPを知る方法ってdelphiである? APIでありそうだけど見つからんかったので誰か教えて。
>>346 ありがとう。
DICEとかでは間にルーターを入れててもきちんと分かってるから知る方法が
あると思ったんだけど、無いのかなぁ。
348 :
デフォルトの名無しさん :03/09/19 22:11
Label.Captionを一斉に書く方法ってない? for i:=1 to 20 do begin Labeli.Caption:=s[i]; end; ってしても通らなかった。鬱
背景透過しない方法どうやんの?
>>351 作業スペースっていうのがよくわからん。
IDEのことでしょうか?IDEをMDIにしたいつーなら無理だし、
プログラムを作り始めると、フォームエディタいじくるより、コード書くほうが
時間がかかる傾向にあるので、あんまし気にしないほうがいいよ。
IDEのこといってるなら、全部本体にドッキング出来るだろ
フォームはできないけどな
なんとなく分かりました。 ありがとう。
356 :
デフォルトの名無しさん :03/09/20 04:39
メッセージCM_ENTER、CM_LEAVEがとるべきMessageパラメータの型とイベントの型って何でしょうか?
WM_ENTER と WM_LEAVE と同じ。はず
ちがうんんだな、これが。 そんなウィンドウメッセージなんかないよ。
>> 356 メッセージ処理ハンドラなら TMessage にしとけばなんでも受け取れる。 イベントハンドラは好きなの選ぶか、自分で定義
CM_ENTER は TCMEnter あけど CM_LEAVE は知らない
VCLソース嫁
>>347 APIでは無理。
一度外部に問い合わせて取得っつぅのがよく用いられる手法
IdPOP3のヘルプより >POP3 では,サーバー上のメールに対して細かい操作を想定していません。 >通常,メールはダウンロードされた後で削除されます。 >より高度で(複雑な)プロトコルについては,IMAP を参照してください。 この、「削除されます」っていうのはIdPOP3じゃなくて、POP3全般の仕様でしょうかね。 したら、ポスペみたいに削除するかどうかユーザーが決めるってどうしますか?
なんか、
>>364 のサイトみると、意図的に消してあげないと消えないことになってますね。
Indyヘルプの和訳ミスかしら?
自分で試してみます。
366 :
デフォルトの名無しさん :03/09/20 22:08
>>363 DELEコマンド投げるか投げないかだけの差では。
一般的なメーラは
USER → PASS → STAT(& LIST) → UIDL(DL済みメールの再受信防止) →
RETR(メール受信) → DELE(削除) → QUIT
みたいな流れが多いみたいです。
板違いすまそん。
なんかこうコンポばかりつかって 全然仕様わかってませんよって臭いが ぷんぷんするな(w
368 :
デフォルトの名無しさん :03/09/20 22:22
Del7のTCPServerを127.0.0.1:9999 で起動し、そこに投げられたデータを memoに書き出したいのですが、、、 TcpServer1Accept時に、どう記述すればよいのでしょうか??
D6Perですが、vclieってなんですか?
すまそ、CM_MOUSEENTER、CM_MOUSELEAVEでした。 メッセージによってMessageパラメータの内容が変わってくると思うのですが このメッセージの場合、TWMMouse型とみなしてもいいんでしょうか? そもそもMessageパラメータの内容はどこで代入されるのでしょうか? WndProcメソッドだと思うのですが・・
てめえら! いい加減ソース読めよ。ちょっと見ればすぐわかることだろ。
まぁ、仕様わからなければコンポつかうわな
373 :
デフォルトの名無しさん :03/09/21 01:28
すいません、単純な樹木の形成シュミレーション(モデリングのみ) をC言語で記述したものって どこかのサイトにありますでしょうか。
シミュレーション
VCLソース調べたくても、3Standard、6Personalなので有りません。 次購入するなら、Pro買います。
OLEでExcelを操作するプログラムを作りました。 いろいろ調べながらできたんですが、Excelのマクロの構文を 「Delphiにどう書けば良いのか」HPや本などが、何もない場合どのように調べたら よいのでしょうか。
>>378 質問が悪かったみたいで寸間線。
VB/VBAの本とかをみても書いてあるままではコンパイルできませんよね。
例えば、VBAでは HOGE(1).・・・ て書いてあってもdelでは HOGE[1].・・・
みたいに( )と[ ]の違いとか。
そういうのはどうしてわかるのかなと。
>>379 そういうのは VB Delphi の2語でgoogle検索して 対照表を入手してください
CreateObjectで型名やGUID指定で生成したものよりは タイプライブラリ取り込んでから型を直指定した方が コード入力の助けが得やすいので少しはやりやすくなります。 あとはEXCELのVBAヘルプのオブジェクトツリー見ながら生成順とか 考えて作るしかないですね。
383 :
デフォルトの名無しさん :03/09/21 15:57
初歩的な質問なのですが、 Delphiで作成したアプリケーションのウィンドウサイズを変更できないようにするにはどうしたらよいのでしょうか?
>>383 BorderStyleというウィンドウ枠の設定プロパティがある。
XPスタイルになるのってWindowsXPだけ?
389 :
デフォルトの名無しさん :03/09/22 11:30
aaa bbb ccc のような内容の外部テキストfoo.txtを読み込んで、 1行ずつ配列に入れるにはどうしたらいいんでしょうか?
tstringlist.loadfromfile
>>390 できました。
即レスありがとうございます!
392 :
デフォルトの名無しさん :03/09/22 16:52
pagecontrolを窓の手みたいに縦に2列3列にしたいんだけど、どうやったら出来る?
RichEdit.Lines.savetofileって追記ですか? それとも上書き保存?
393です。聞く前に自分でやるべきでした。上書きだと分かりました。 すみませんが、もう一つ教えてください。 保存をしても {\rtf1\ansi\ansicpg932\deff0\deflang1033\deflangfe1041{\fonttbl{\f0\fnil\fcharset1 等と書式情報と思われる物などが多数保存されています。 純粋なテキスト形式で保存する方法は無いでしょうか? memoのファイルサイズ制限を超えてしまうのでRichEditを使おうと思っています。
>>392 TPageControl.MultiLine
>>394 TRichEdit.PlainText:=true;でプレーンテキストになりますがWebで公開されているエディタコンポーネントを使ってみるのも良いのではないかと思います。
>>395 ありがとうございます。
RichEditの中身を追記する方法ってないでしょうか?
もう一つRichEditを作って読込み、add、保存すれば出来ますけど、
出来るだけ、コンポは増やしたくないので。
>>396 TStringList.LoadFromFileでファイルを読み込んで、それにAddStrings(RichEdit.Lines)としてRichEditのテキストを追加してSaveToFileで保存するのが簡単かと。
速度が気になるのならTFileStreamでファイル末尾にRichEditのテキストを書き込むと良いです。
SaveToStream使え
Delphi6personalでF9で実行した後で、エラーが出たのでF8を押して ステップ実行しようとすると、CPU Windowが出てマシン語レベルで ステップ実行されてしまいます。 Pascalのコードレベルでデバッグするには設定をどうしたらいいのでしょうか?
まじ初心者です。 RichEditを使うとアプリを作っても最初にRichEdit1というのが表示されてしまいます。 Memoを使うとMemo1というのが表示されてしまいます。 これを起動時にクリアしたいのですが、どうすればいいのでしょうか。 Delphi をインストールして半日の私にでも出来るように教えてもらえないでしょうか?
>>403 1.フォームにコントロールを配置
2.フォームをダブルクリックしてForm.OnCreateイベントを定義
3.コードにMemo1.Clearと記述しる。
ちなみに実行時ではなく 設計時でも"Memo1"は消すことが出来る。
「はじめてのDelphi」が復刊することを祈る…新バージョン対応で。
>>404 Form.OnCreateイベントを定義というのが理解できてません。
設計時に消すやり方はどうするのでしょうか?
>>405 ファイルを新規作成するときに、RichEdit1.Lines.Clear;というのがあるのでそこでは消されるのですが、
アプリ起動時に消すやり方がわかりません。
>>406 あの本役にたった?
確かDelphiで最初の日本語書籍だっけ?
あんまし役に立たなかったような気がする。
>>407 設計時に消すには、MemoのLinesプロパティを見てみるといいです。
>>403 >>407 の者です。
回答くださった方ありがとうございました。
MemoのときはLinesプロパティの右欄「…」をクリックして、Memo1という文字を消去ということなんですね。
>>407 で無知を晒しましたが、今後、がんばります。
どなたかよろしくお願いします。
411 :
デフォルトの名無しさん :03/09/23 14:18
他のアプリを制御する為に Wnd:= FindWindow(Nil,'I'm '); と言うソフトを見つけたいんだけど、'が間に入ってるからエラーになってしまう。 間に'が入っているものをアクティブにする方法ってどうやればいいの?
>>410 ようするに例外が出てCPU窓が出たんだけど、そこからコードに戻るのはどうすればいいかってこと?
>>411 ' でヘルプを出せば判ると思うのだが・・・
Wnd:= FindWindow(Nil,'I''m ');
D5を使っていた時はCPUウィンドウは現れずに通常のプログラミング画面で F8キーを押しながらステップ実行が出来ていたのですけど、 D6ではF8キーを押すとCPU窓が出てきてそこのコードをステップ実行して しまうのです。 最初からF8でステップ実行したりバグが無いソフトでブレークポイントで 止まった後だとF8キーを押した後はきちんとステップ実行できます。 しかし、なんかしらのエラーで例外メッセージが現れた後は、必ず CPU窓でのステップ実行になってしまうので困ってます。
Delphi終了の度に モジュール'vcl60.bpl'のアドレスxxxxxxxxでアドレスyyyyyyyyに対する読み込み違反がおきますた。 とか出てもうだめぽ いちいちタスクマネージャから強制終了して消してるんですが直し方ありませんか? アップデータとかもちゃんと入れたんですが・・・ Del6でし
>>414 そういうのは良くおきるよ。
http://pc2.2ch.net/test/read.cgi/tech/1029120920/77 Delphiの binフォルダに
---- DelDel.bat ----
CD /D %1
del %2 *.tds
del %2 *.~*
del %2 *.dsk
del %2 *.dof
del %2 *.dsm
del %2 *.dcu
-----
とファイルを作っておきます。 SendToにショートカットを作っておけば便利
また DelphiIDEのツールの設定で 登録しておくのも手です
これを作っておいて実行させてみては?
CreateWindowEx で最大化ボタンを表示しないようにするにはどうすればいいんですか?
>>413 パーソナルなんだよね? パーソナルだと例外で停止した場合、VCL内で止まる事が多いのだけど
そのときにはソースファイルが付いてないから、それは仕方ないのだよ。
「ソースがある所まで実行」 なんてボタンが欲しくなるよね。
デバッグ版DCUを使うな! またはPro飼え!
>>417 システムメニューなしにするか、システムメニューからSC_MAXIMIZEを削れ
>>416 どぅも。
色々(自分で登録したコンポネント削除したり)やってたせいか
Projectを開こうとすると
〜が見つかりません。無視したらどうたらこうたら って出るようになった(´・ω・`)
(↑ビジュアルコンポ
コンパ+実行すると普通に表示されるけど・・・これじゃフォームの編集ができへん(´・ω・`)
コンポの再インスコとか、パケジインストしなおしてもだめぽ(´・ω・`)
設計時パッケージにチェック入れて何回OKしても保存されんぽいし(´・ω・`)
こうなったらDel再インスコしてきまつ。ありがとうございますた(´・ω・`)
s, a2 , b2, c2 , d2:string; s:='abc def ghi jkl'; abc def ghi jklをsから抜き出して a2 = abc b2 = def c2 = ghi d2 = jkl としたいのですがどうすればできるでしょうか?
var s, a2, b2, c2, d2: String; begin s:='abc def ghi jkl'; with TStringList.Create do begin QuoteChar:='"'; Delimiter:=' '; DelimitedText:=s; a2:=Strings[0]; b2:=Strings[1]; c2:=Strings[2]; d2:=Strings[3]; Free; end; ShowMessage ( 'a2 = '+a2+sLineBreak+ 'b2 = '+b2+sLineBreak+ 'c2 = '+c2+sLineBreak+ 'd2 = '+d2 ); end; うわ
23 Sep 2003 16:00:22 とShortmonth形式の日付を23/09/2003 16:00:22 の形式に変更したいのですが、どうすれば出来るでしょうか?
>>425 もともとTDateTime形式のものだったらformatでどちらの形式にも簡単に変更
出来ると思いますけど、23 Sep 2003 16:00:22の形式のデータはString形式で
入って来ているのでformat文が使えずに困ってます。
string形式のデータをどうやれば変換できるでしょうか?
mp3はVBMP3.dllで再生出来たんだけど、 oggを再生するのにいい方法はありませんか?
>>423 Delimiterというのを使えば区切れるんですね
ありがとうございました
Personalで作成したソフトを売っている人がいるようなのですが証拠がありません バイナリからパーソナルかどうか見分ける方法はありませんか?
StringGridで水辺なスクロールバーをずーっと右側に持っていっても FixedRowがずーっと続いていって表がきれてしまわないようにするのって どうするんですか?
>>411 エディタの設定で文字列を別の色になるようにしておくとわかりやすいですよ.
うちは緑色になっています.
>>426 要素別に4つの文字列に切り出し,月を数に置きかえて組み立てます.
切り出しには
>>422-423 の例を使っても良いでしょう.
#Pascalにはformat関数の逆の機能がないので不便だと思います.
月の名前から数への変換は以下のような配列定数を用意すると楽にできると思います.
const
cShortMonthNames: array[1..12] of string =('Jan', 'Feb', (中略) , 'Dec');
>429
方法があるかどうかはわかりませんが,
方法を知っている人がいたとしても教えられないでしょう.
知られてしまったらバイナリエディタでそこを書き換えて
簡単に偽装されてしまいますから.
>>429 ない。
Personalで作れるものなんてたかが知れてるだろ。ほっとけ。
すいません。自己解決しました。簡単でした。
>>433 わかんねーんなら反応すんな低脳がコロスゾ
すいません、解決しました。 解決したとき 射精くらい気持ちよかったです。
Regular Expressionを使う場合どのように書くのですか?
質問なのですが str:= 'abcdefghi'; if str = 'abc'+ '*' then showmessage('成功'); これだとうまくいきませんが こんな感じにif文を成立させたいのですがどのようにすればできるのでしょうか?
>>439 if (copy(str,1,3)='abc') and (length(str)>3) then
正規表現しないで敢えてアレな感じでいくなら↑こんな感じでどぉ?
>>439 まず abc* では 正規表現だとしてもマッチしない。 abc.* の事かな?
だとしたら ansipos で 0以上かどうかで判断すればいい。
それとも DOSのファイル検索で使うワイルドカード式? それなら
>>440
あ…よく見たら正規表現じゃないや(^^;。 やっぱり寝ぼけてたか…。
>>439 Masks.MatchesMask使え。
そっちの処理系にあるかどうか知らないけど。
444 :
デフォルトの名無しさん :03/09/24 12:52
すみません。何がわからないかがわからないんですが…
446 :
デフォルトの名無しさん :03/09/24 13:09
Del厨だろ。馬鹿だから
447 :
デフォルトの名無しさん :03/09/24 13:12
MainFormのForm1が生成された時に、ボタンを押したら呼び出されるForm2のEdit1.textに iniファイルに保存したstringを読み込みたいのですがどのようにしたらいいでしょうか? procedure LoadIni; var IniFile: TIniFile; Form2: TForm2; begin IniFile := TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini')); Form1.Edit1.Text := IniFile.ReadString('Form1', 'Edit1', Form1.Edit1.Text); Form2 := TForm2.Create(Form1); Form2.Edit1.Text := IniFile.ReadString('Form2', 'Edit1', Form2.Edit1.Text); Form2.Free; IniFile.Free; end; procedure TForm1.FormCreate(Sender: TObject); begin LoadIni; end; とわからないまま、書いてみましたが、できませんでした。 よろしくお願いします。
>>447 そのForm2で
何 が し た い ん だ
Form2.Free; <--- なんですぐに開放してるの?
Form2解放されちゃってるじゃん
452 :
デフォルトの名無しさん :03/09/24 13:34
ちと横やり質問で申し訳ないんでつが、 P2Pでファイルをやりとりするしたいのですが、 Indyで、どれを使うと簡単ですか? 具体的には Clientのイベント(ボタン押される等)でファイル選択ダイアログ表示→Serverへ接続→ Serverでファイル保存ダイアログ表示→ClientからServerへファイル送信→ Clientが送信後に切断→終了 というやりとりをしたいのです。その最中に進捗をプログレスバーに表示しておき、 かつServerからもClient側からも中断ができるというようにしたいのですが・・・・ 上のフローとは異なってもいいので、便利なやり方があったら教えてください。
レスありがとうございます。 Form2の生成時に読み込めばいいんですね。。。 皆様お騒がせしました。 上げて頂いたサイトも参考にします。 ありがとうごさいました。
>>453 さらにいうと、
INIの中身が頻繁に変わるもんじゃなければ
Form1のonCreate時に読み込んで変数に格納。
ボタン押下時に両方に表示してあげればいい。
頻繁に変わるなら、ボタン押下時にINIから変数に
格納して、Form2.Show後に入れてあげればいい。
Form2のonCreateやonShowに書くか、ボタン押下時
に処理を書くかは、それぞれのやりたいことによって
異なってくると思われ。
漏れならクラス作って、そこにオブジェクトぶち込む
形にする。
クラスでなくても、関数・手続きでいいから、 別にユニット作って そのユニットでデータの処理について処理させる習慣をつけたほうがいいよね。
>>452 Serverへの接続は先にやっておいたほうがいいと思う、個人的に。
プログレスバーは 送信済み量 div 送信するファイルサイズ * 100 みたいな感じに。
メインのイベントハンドラで処理してると画面がおそらく固まるのでスレッド化をオススメする。
IndyはTCP鯖&TCP鞍がいいと思うよ。
WinSockのラッパーみたいなもんだからWinSockの勉強もしとけばいい感じ。
このスレ内にも書かれてあるから。
ほんじゃ、もやすみー。
>>438 多分話だけ聞いても「ふーん」→でもわかんないになると思います.
DelWikiのページを参考にTRegExprを実際に使ってみるのがよさそう.
ここには正規表現の解説もあるので参考になると思います.
私も使ってみたのですが,
>>424 の例の場合,切り出すべき要素が日,月,年,時刻と4つあって,
TRegExprではいっぺんに切り出す事はできないようなので
そのための関数を作る形で落ち着きました.
もっといい方法があればよいのですが.
>>455 アプリケーション全体で使う情報をあっちこっちのフォームの中で保管していると
そのうちどこにあるかわからなくなって,
里見八犬伝かドラゴンボールみたいな状態になりますね.
(楽しそうなたとえですが実際には発狂しそうになります)
>>426 Variantを経由すると可能だと思うよ
var f:Variant;
begin
f:= '23 Sep 2003 16:00:22'
Result:=FormatDateTime('DD/MM/YYYY HH:MM:SS',VarToDateTime(f));
Post := TStrings.Create; Post.Add('Test'); Post.Free; でエラーになるけどなぜ・・・・・ こんな簡単なことで悩んでる俺っていったい・・・・・
>>459 TStrings は いわゆる純粋クラスで インスタンスを作ってはいけません。
TStringList にすべきです。
×純粋クラス ○抽象クラス
>>457 >TRegExprではいっぺんに切り出す事はできないようなので
^(\d+)\s+(\w+)\s+(\d+)\s+(.*)$
とかやれば普通にできそうだけど。
TSpeedButton どう足掻いてもDownプロパティをTrueにできないんですが 仕様ですか?
ぁぁ、漏れって馬鹿だな。 ヘルプ見りゃよかった。 ほんと馬鹿だな
466 :
デフォルトの名無しさん :03/09/25 01:05
発生しないバグのコピペ ウゼー
> 実験して気づいたけど外部から操作ではTToolBarはバッファフロー起きなかったよ>Delphi7 > ToolButton1.Caption := StringOfChar('0', 8192); > こんな風にに内部経由で行わないと発生しません。他のバージョンでも同様かな。つまり変な使い方しない限り問題なし。 つまりこんな風に使うとバグが見事発生するわけだが。
ちゃんと隔離が用意されてるんだから こっちにはくるなよ・・・本当に気持ち悪いなあ・・・
重要な問題は技術スレでやったほうがいいべ
>なお、Windowx XP および Windows Server 2003 では、1024 バイトを超える >文字列をコンボボックスのリストから取得した場合、1024バイト目以降が正し >く取得できないことや、終端のヌル文字が付加されないことがあります。 こっちのほうが深刻な気がするぞ。4096より遥かに短いし…
それも問題だが、バッファオーバーフローが起きるわけじゃないし、 ここはDelphiスレなので。
マ板には怖くていけないのかな?
外部から引き起こす事ができないバグ
> かちゅーしゃとかのDelphi製2chブラウザで板一覧取得してListViewに表示する処理で > サーバクラックして不正な文字列埋め込んだりすると危険かもね。 十分外部から引き起こすことが出来るバグです。
バッファオーバーフロー問題はDelphi相談室(中級者以上)その12 へ
GetSearchString使わなければいいじゃん。 というより かちゅーしゃ 使ってるの?このメソッド。 大体そんな長い板名設定できないんじゃないかな? 起こせないじゃん。よく考えてからほざけよヴァカ!
>>458 うひょー,Del5のヘルプ(『バリアント型の変換』)には
『文字列を TDateTime 型に変換するときは,Windows の地域の設定を使用して日付/時刻値として解釈されます。』
とあるので英国式?の日付を解釈できるとは思いませんでした.
VarToDateTime(バリアント) (または VarAsType(バリアント, varDate))は
内部でVariantChangeTypeExというAPIを呼び出しているようです.
(Del5でトレース実行により実際に呼び出すのを確認)
ただ本国MSDNを見るにNT 3.1以降,Windows 95のOSR2以降が必要とあることと,
VariantChangeTypeExを実装しているoleaut32.dllの一部のバージョンで
文字列から日時型への変換でアクセス違反が起こる不具合があるらしいので
(参照
ttp://www.gj.il24.net/~nakasima/vb/trap/#VBTRAP19 )
頭に入れておいた方がよいのかもしれません.
なお,StrToDateTime関数ではWindowsが持っている日付形式の情報を参照しているものの
自力で変換しているのでこの問題は起きません.
>>463 私の書き方が少し悪かったです,ごめんなさい.
今回は年,月,日,時刻と要素別に分解して組み替えるのが目的なので,
Cのscanfのようにそれぞれを探しては切り出すという作業を
一発でできるものはないかなと思ったのです.
今使ってるDelphiの標準コントロールから、いくつか C:\WINNT\system32\MSCOMCTL.OCXに差し替える予定です。 理由はXPスタイル対応状況や標準のバグです。 @開発環境は2Kなのですが、98やXPでも大丈夫でしょうか? AOCXのバージョン違いとかで起動しなかったりしますか?
質問です。 Indy が発生させる例外の捕まえ方が判りません。 Postを呼んで成功すると EIdConnClosedGracefully クラスの例外を発生させるので、 以下のようなコードを書きました。 try t := IdHTTP.Post(url,query); //query :CStringList except //全ての例外を捕まえる Form1.Caption := '例外発生'; end; しかし、デバッガは相変わらず EIdConnClosedGracefully クラスの例外を報告します。 exceptブロックは実行されていないようです。 どうすれば例外を捕まえられるんでしょう?
はい、質問であります。 var x : widestring; ---------------------------------- x := 'あいうえおかきくけこ'; x := 'あいう'; とした時、一番目に代入した'あいうえおかきくけこ'は完全に消去されるのでしょうか?
ある文字列の中に ある文字列が含まれているかどうか 知るための関数ってありますか?
>>487 いや噂によると無いらしいよ
だからある文字列の文字数を取得して
調べる文字列からある文字列の文字数だけ切り取って同じかどうか比べるんだって
それを一文字ずらしで調べるらしい
>>191 日本語も考慮するとズラす時に2バイト文字かどうかもチェックしないといけないね
ありがとうございました(・_・、)
495 :
ななしへたぐらま ◆XcB18Bks.Y :03/09/25 15:26
>>485 完全に消される保証はありません.
実験してみたところでは部分的に残るようです.
ワイド文字列では先頭にある長さ情報(例では10から3に)書き換え,
新しい末尾の次の文字(例では3の次,すなわち4番目の文字)に0を書き込んでいます.
一般にコンピュータのプログラムでは
情報を消す処理は『どこを(どれだけ)使っているか』という情報を書き換えるか
『消した印』を付けるだけで実際には消さない場合が多いです.
その方が速度の点で有利だからです.
>>487 含まれているかどうかを知るための関数はありませんが,
Pos関数やAnsiPos関数は含まれていればその位置として1以上の値を,
含まれていない(見つからなかった)時に0を返すので
これを利用して知る事ができます.
※string型を使うときで全角文字を含む場合はAnsiPos関数を使ってください.
var MyString: string;
(MyStringにテキストが入っているとして…)
if AnsiPos('(・∀・)', MyString) >= 1 then
ShowMessage('ジサクジエン ハケーン!!')
else
ShowMessage('ヽ(`Д´)ノ ミツカンネーヨ ウワァァン!!');
そのものズバリの関数や手続きがなくてもあるものでかんたんに応用できることもあります.
メインウィンドウ(Form1)を 常に最前面に表示されるようにしたいのですが どなたかその方法を教えてください。
fsStayOnTop
できました〜 ありがとう。
初めてのアプリケーションができあがりました。 みなさんありがとう!!!
>>499 どんなアプリか知らんがおめでとう。
500ゲットで俺もおめでとう。
502 :
デフォルトの名無しさん :03/09/25 19:56
お前ら恐ろしいセキュリティホールを放置したライブラリをよく平気で使えるな
>>502 お前、恐ろしいセキュリティホールを放置したOSをよく平気で使えるな
Delを叩く絶好のチャンスだな BOF問題
506 :
デフォルトの名無しさん :03/09/25 21:03
パッチなんぞなくても回避できますが何か?
508 :
デフォルトの名無しさん :03/09/25 21:22
>>508 心配するな、お前の作ったものにはそれらの機能使ってないからハグ起きない
510 :
デフォルトの名無しさん :03/09/25 21:25
>>509 逆にいうと、それらの機能を使っている奴はバグが起きるわけだな。
実際バグが起きる奴って存在するの?
512 :
デフォルトの名無しさん :03/09/25 21:27
>>510 バグが起きる条件はかなり特殊で、更に内部的にコーディングしないと発生しないものもある。
バッファフローのバグは確かに存在するが、それがセキュリティに関係することはない。
何故なら動作条件上、任意のコードを実行させるコードをWindowsコントロールに設定することができないからである。
よって、セキュリティに関係するとよくわからずにポストした「HASEGAWA Yosuke」は
ただのオーバーフローのバグでしたと、ボーランドとMLに不正確な情報を流したことについて謝罪する必要がある。
515 :
デフォルトの名無しさん :03/09/25 21:37
> 何故なら動作条件上、任意のコードを実行させるコードをWindowsコントロールに設定することができないからである。 そこんとこもう少し詳しく説明してみな(w
517 :
デフォルトの名無しさん :03/09/25 21:40
> 何故なら動作条件上、任意のコードを実行させるコードをWindowsコントロールに設定することができないからである。 説明まーだ?
>>509 ・手入力で入力出来る個所でないため これを外部アプリで設定するには SendMessageを使わざるをえない
SendMessageが使えるという事は既に乗っ取られた状態である。
逆に乗っ取られていない状態でどうやって設定するというんだい?
そのコントロールに表示されるデータを 外部ファイルなどから読んできている場合とか いくらでもあるだろ。
はあ。何回向こうでやれっていえば理解できるんだろう。 Openオフィススレに張り付いてるMS社員と同一人物のにおいを感じる
>>519 外部ファイルからじゃ 外部ファイルを読み書き出来る状態というのは既に何でも出来る状態=乗っ取られた状態だろ?
ネットワーク越しに、取得したものをそのまま表示するならともかく。
522 :
デフォルトの名無しさん :03/09/25 21:49
>>520 はOpenオフィススレに張り付いている(ry 藁
>>521 じゃあ、ネットワーク越しに、取得したものをそのまま表示する場合。
ネットワークから外部ファイルを取得してって シナリオもありえるんだけどね。 ウイルスが入らないと思われていたデータファイルに 感染したウイルス。聞いたこと無いか?
この話題だけで2年は引っ張れるな。
>>523 それは幾らなんでも長さ制限入れるのが普通だと思うけどね。
ほら、2チャンネルブラウザでもタイトルが枠に入らないなら ... になるようになってるだろ?
LANケーブル引っこ抜けば無問題!
もういっこ質問スレ立てたほうがいいかもしれないな。
なんか昨晩と同じ人間が同じこと繰り返しとるな。
心配してもらわなくても、クラッカーは迷わず、 死滅寸前なDelphi製アプリよりも、飛躍するC#製アプリを選ぶ。
>>529 PC等のジャンルの板の粘着は年単位で、命かけてるから
あと数年は続くよ
さて、C# VB.NET VB6.0スレに粘着してくるか。
この板もID出れば少しはわかりやすくなるんだが。 キチガイ多いんだし。
536 :
デフォルトの名無しさん :03/09/25 22:16
で、結局いつバグは修正されるんだ?
Delphi8
538 :
デフォルトの名無しさん :03/09/25 22:26
それはいつ出るんだ?
今年の初めの予定ではそろそろ
540 :
デフォルトの名無しさん :03/09/25 22:32
音沙汰も無いのは何故だ?
質問です。 インターネットオプションを変更したりするAPIはあるのでしょうか? …普通に考えたらセキュリティ上、使えない気がしますが…
Delphi8どころか、Delphi7の案内がこの間また着たばかり。 来年発売になるんじゃないの?
543 :
デフォルトの名無しさん :03/09/25 22:36
自己解決しました
546 :
デフォルトの名無しさん :03/09/25 22:52
プログラミングを始めようかと思っているのですが、Delphiは入門に向いてるのでしょうか? ちなみに、このネット時代、バッファオーバーフローなんかで悩みたくはありません。
547 :
デフォルトの名無しさん :03/09/25 22:52
Doubleの変数に格納されている数から小数点以下を取り出す、 あるいは整数部分だけを取り出す方法を教えてください。
すみません、自己解決しました。簡単でした。
trunc
550 :
デフォルトの名無しさん :03/09/25 23:11
バッファオーバーフローの件が解決するまで初心者はDelphiの使用を控えた方がよいと思います。危険だから。
どんな言語でも初めてWindowsプログラミングするなら大変だろ。 Windowsプログラミングが自由にできるようになるまでには大量の基礎学習が必要。 とマジレス ちなみに、頻繁にライブラリや仕様を変えるMS製品はお勧めしません。 現にVBユーザーは路頭に迷ってます。
Image1とImage2があって、 Image1に画像を読み込み、 Image1の画像の一部をTRectで指定して それをImage2に張り付けたいのですが 何かいい方法はありませんでしょうか。 CopyRectとかやってもうまくいかないです。
すいません、うまくいきました。
>>553 553は偽物です。
誰か教えてください。
宜しくお願いします。
そんなことよりバッファオーバーフローを早く直してください。
バッファローズの影響を受けるのはどのコンポ? ポトペタ専用人には関係ない話ですか?
初心者スレ荒らすの止めろよ
>>552 とりあえずお前の上手くいかないコードを貼り付けれろ。話はそれからだ。
imgには、Image1を渡して、rectはコピーしたい範囲を渡してます。 未定義の識別子:Image2 というエラーがでます。 {画像をトリミングする関数} function TrimImage(img: TImage; rect:TRect): TImage; begin Image2.Canvas.CopyRect(rect,img.Canvas,rect); Result := Image2; end;
Image2は多分フォームにあるんだろうと思うが、TrimImageの関数名を見る限りメソッドでないから Image2が見えないのではないかな。
TrimImageは自分で作った関数です Image2が見えるようにするには 引数として渡せばいいのでしょうか。 なんか、すごい無駄なことをするような感じがするのですが・・
TrimImageをフォームのメソッドにするかForm1.Image2の様に呼び出す。
Image2もパラメータにして渡せ
メインフォームでTActionやメニューにショートカットキーを設定すると、 モードなしサブフォームにフォーカスがあるのに、 メインフォームのショートカットが実行されてしまいます。 その結果、サブフォームのTEditが標準のショートカットを受け取れません。 アクティブでないメインフォームにショートカットキーを渡さず、 アクティブなサブフォームのTEditなどでショートカットを受け取る方法教えてください。
565 :
デフォルトの名無しさん :03/09/26 01:18
Del厨には無理です。
大変有用な情報をありがとうございました。
騙られちゃった。 いいや自分で調べます。
>>564 おまえ何がしたいの?
もっと詳しくかけよ。
571 :
デフォルトの名無しさん :03/09/26 02:05
DBDEMOSのテーブルにqueryでInsertをしたいんだけど ParamByNameでわたすとNumber型のフィールドで 「型名が一致しません」って止まるんだけどなんで? ちなみに下記のように書いたんだけど Sql.Add('Insert Into Country '); Sql.Add('(Area,Population'); Sql.Add('Values '); Sql.Add(':Area,:Population'); ParamByName('Area').AsInteger := 1; ParamByName('Population'').AsInteger := 1; 「Area」はSQL Explorerで見るとType Numberってなっている。 AsIntergerでないとすると何を使うの?
AsFloat。ParadoxテーブルでNumberと出ているのは実数。 整数の場合LONGと表示される。
>545 は偽者です。 なんか、偽者が何人かの発言で出ているようで…。 >544 あるんですか… 調べたけどよく分からなかったので…。 せめてAPI名を一つぐらい教えてもらえませんか? あとはググるんで。 よろしくお願いします。
>574 ありがd〜
576 :
デフォルトの名無しさん :03/09/26 10:44
昨日中古でdel6perを買ったのですが最初は何をすればいいのでしょうか? ボタンを押したら「こんにちは」まではできました^^
>中古でdel6perを買ったのですが おいくらで? >最初は何をすればいいのでしょうか 最終的に何がしたいの? その方向に近い課題をみつくろうなら出来るけど
次はボタンを追加して 「こんばんわ」 と表示してみよう。 その次はEditコンポを置いて、 任意のメッセージを表示してみよう。
579 :
デフォルトの名無しさん :03/09/26 10:57
>>577 1800円でした。
まだどんな事ができるかなーくらいなので何がしたいっってのはまだです・・・
>>578 はい やってみます♪
>>562 ありがとうございました。
いちおう、コピーはできたのですが
何故かrectのTopとreftを0にしないと、
一部、真っ白な部分をコピーしてしまいます。
これは何故なのでしょうか。
×reft ○Left
>>580 イメージのCanvasを使ってるからじゃないの?
イメージのビットマップのCanvasを使っても同じでしたか?
あ、できました。 CopyRectの第一引数の意味を間違えてました。
584 :
デフォルトの名無しさん :03/09/26 11:47
MySQL + dbExpressでプログラムしてる方に 聞きたいのですが、MySQLでTEXT型のフィールド が実行時に内容が表示されずに、[MEMO]としか 表示されないのですが、どうしたらよいでしょうか。
MySQL の Text 型は、dbExpress / DB-VCL 側では、任意長の文字列を表現する ftMemo 型のフィールドとして扱われる。から。
簡単にいうと、DBGrid/DBText は固定幅の文字列型、さらには改行コードなし。しかサポートしていない。と思ってよい。 Memo 型に対しては DBMemo が用意されている。 それとは別に、DBGrid / DBText で何とかしたい。という場合には 「項目の設定」ってメニューが XXXDataSet または SQLQuery コンポーネントにあるから「すべての項目の追加」ってのを選べば、 各データフィールドに対して、対応する TXXXField が生成される。 これの OnGetText と OnSetText を好きなように書き換えれば、好きな文字列を読み書きできる。
Del5で作ったプロジェクトをDel7で再コンパイルすると 型変換のところで多数の警告が表示され、コンパイルも時間がかかります。 こいつを出ないようにできないでしょうか?
588 :
デフォルトの名無しさん :03/09/26 12:33
TComboBoxを編集できないようにするにはどうすれば良いでしょうか? ドロップリストから選択する以外の入力を受け付けたくないのですが、 やり方がわかりません。 よろしくお願いします。
>>587 たとえばどんな型変換でって・・・・ああ.NET対応とかいう警告機能ね。
プロジェクトのオプションで コンパイルメッセージタブで
コンパイル時間に差が出るとは思わないんだけど... >587 一行でいいから具体例、見せてもらえれば。
>589 TComboBox の Style を csDropDownList にする。って話以外?
ごめんなさい。591 は 588 への答えです。
tiff画像を保存できるコンポーネントをご存じないでしょうか。 tiffの形式は無圧縮のみでも結構です。 読み込むだけならsusieプラグインを使ってできたのですが・・
>>590 Delphi7持ってないのかい? キャストいっぱい使ってるソースとかコンパイルすると警告が山のように出て時間がかかるよ。
もうねムカツクからいつも3つの警告オプション外してる。
じゃ、警告を外せばよろし。 けど、そこまで警告が出てくるのは何か問題あるような気がするけど。
そうじゃなくて PCHAR 使っただけで警告されるんだよ。
> 598 すまん。デフォルトで三つのチェック外していた。
600 :
デフォルトの名無しさん :03/09/26 14:09
TButtonはフォーカスが合った状態で スペースキーを押すとクリックされた事になるのですが、 スペースを押してもクリックできないようにするにはどうすれば良いのでしょうか?
>589 さんくそ!でばっがおぷしょんばかりさがしておりました。
>600 すべてのキーボード打鍵を無視?
TButton の KeyDown イベントに Key := 0; と記述。Button は IME が開かないから、これで十分でしょう。
もしスペースキーだけ止めたいときは if Key = VK_SPACE then Key := 0; に。これだとリターンキーは生きます。
自作の関数で返り値としてクラス(仮にreturnC)を返すようにしています。 これは、どの位置で returnC.Free; をすればよいのでしょうか?
>>606 クラスへの参照(ポインタ)を返す関数?
そのクラス参照を、誰も必要としなくなったときに開放。
あなたのコードによる。
あまり良い設計ではない。
呼び出し側でクラスを生成、それを関数/手続きの引数に渡す。関数側でクラスの中身を設定。
呼び出し側は値の設定されたクラスを参照し、必要がなくなった時点で開放。
って感じですかね。
>>606 自分の場合は、そういう関数を作って使う時は変数に代入しないという自分ルールを作ってる
つまり
with 関数 do try
メンバーを使う
finally free; end;
とセットで処理する。
Frameを使用してそれに乗っているコンポーネントを FindComponentで探すにはどう表記すればいいでしょうか? 通常なら FindComponent('ComboBox' + IntToStr(i)) as TComboBox 等としていたのですが。
参照というか、実体です。 function(a: TString):TString var b:TString begin b:=TString.Create; 〜〜 Result:=b; end; みたいな感じです。
>>609 TFrame.Componentsを全件検索参照すべき。
>>611 えっ?!
ケアレスミスでした自己解決しました。
clSilverはRGBに変換できるけど、clBtnFaceはRGBに変換できないの?
614 :
デフォルトの名無しさん :03/09/26 15:48
>>613 ColorToRGB とか グラフィックスユーティリティから探してみたら?
祭板からきましたが、吉外
>>617 がいるスレはここですか?
>>617 ボクにはちょっと難しかったのかな?
たとえば、 var c:TColor; に
文字列からTColorを設定する方法は
c:=StringToColor('clBtnFace');
まだc は RGB値じゃないから、,ColorToRGB(c) で変換する。
Caption := Format('%8x %6x',[c,ColorToRGB(c)]);
勘違いは誰にもであるんだから、これに懲りずにまたおいでね。
なんでそんなに攻撃的なんだ? clSilver は特定の色を直接指定します。 clBtnFace は、Windows 側で管理している色テーブルの一つを指定します。 ワンクッション置くことで、デスクトップ設定を変更している環境でも動作環境に一致した色づかいになります。 だから clBtnFace は、それ自体は RGB 値を持ちません。一度、表を引かなきゃいけない。 VCL においては ほとんどすべての位置で表引きを行ってくれます。 ColorToRGB( clBtnFace ) で OK. 619 さんの例とは、文字列かどうかという点で異なっています。
>>620 さん補足ありがとう。
攻撃的というか倍返しを心がけております。
不快にさせるような聞き方をするなら倍不快になるようにお答え致しますし、
そうでなければ、出来るだけお役にたてるようにしておりますです。
ColorToRGBは試したけど定数が帰ってきた
まーひとそれぞれ。2ch だしぃ。 不快に思ったら、答えないほうが良いと思うよ。
>>622 D7 のコードだとちゃんとシステムカラーを見に行っているんだけど。
なんだろ?
>>622 >>619 のコードを試してみなさい
結果
8000000F C8D0D4
みたいになればOK
626 :
デフォルトの名無しさん :03/09/26 17:37
>>598 >そうじゃなくて PCHAR 使っただけで警告されるんだよ。
Borlandもようやくバッファオーバーフローの
危険性に気がついて警告するようになったんだよ。
質問なのですが、SaveToFileでファイルを保存するとき、 場所を特定のフォルダに指定する方法を教えてください。 たとえば、実行ファイルと同じ場所にある別のフォルダとか。
hoge.SaveToFile( ExtractFilePath(Aplication .ExeName)+'ファイル名');
629 :
デフォルトの名無しさん :03/09/26 20:22
2つのタイマーを使って処理をさせているのですが、 一方のタイマーが処理中はもう一つのタイマーは処理を開始して欲しくありません。 そこで、Timer1からTimer2.enabled:=falseにしてみたのですが、これだと Timer1の処理の最後でTimer2.enabled:=trueにしたら、Timer2のカウントが すべてクリアされているのでまた数え直しになってしまいます。 Timer1側からTimer2を一度止めて、再度同じ状態から開始する方法って 無いでしょうか? 上手く説明できないですが、ようはTimerを途中で止めて止めた状態から 再度リスタートしたい、って事です。 こんなことをやれる方法があったら教えてください。
もう一つ教えてください。 あるprocedureで処理を行っている時に他のルーチンで処理を行わせたくない のですが、排他的に自分だけ処理をして他のイベントの処理はすべて行わせない 方法などがありましたらそれも教えてください。
シングルスレッドなら明示的にメッセージを処理しない限り他のコードが実行されることはありません。 基本的な事から勉強し直すことをお勧めします。
>>631 レスありがとう。
と言うことは例えばTimerを2つ同じインターバルで設置して最初からEnableに
している場合でも、どちらか一方のTimerしか処理されないのですか?
最初に開始されたTimerの処理が終わるまでもう一方は行儀良く待ってるのでしょうか?
633 :
デフォルトの名無しさん :03/09/26 21:19
>>632 基本的な事から勉強し直すことをお勧めします。
>>632 Windowsはメッセージという仕掛けで動いています。
Pro以上なら Application.Run を覗いてみましょう。
この中でメッセージを受け取って、メッセージをディスパッチしています。
で、
タイマーを設定すると、WM_TIMER というメッセージがWindowsから送られて来ます。
そのメッセージを受け取って、タイマーイベントが実行されるわけです。
そして、そのイベント実行中に次のWM_TIMERメッセージがメッセージキューに入れられても
そのメッセージを受け取らなければ実行されません。
しかし、もし、タイマー処理中に Application.ProcessMessages; を呼び出せば、この中で次のタイマーイベントが実行されます。
>>638 ようするにやる気ないんですね?
TimerのInterval以上の時間Sleepするなりしてみればデバッガなんてなくても分かるでしょう?
var i:integer;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
ListBox1.Items.Add('Timer1 - '+IntToStr(i));
Sleep(3000);
Inc(i)
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
ListBox1.Items.Add('Timer2 - '+IntToStr(i));
Sleep(3000);
Inc(i);
end;
できるだけシンプルに仕上げたつもりです。
自分の目で見て確認しましょう。
この程度のこともできないようじゃ先が思いやられますね
640 :
629 ◆yvIi7DvKLc :03/09/26 22:18
>>635 レスありがとうございます。
>>638 は私じゃないです。
Application.Processmessagesは処理が終わるまで待つ、ものだと
思っていました。勉強になりましたありがとうございます。
あと、私が使っているのは7Proなのですが、Application.runを覗く
ってのはどうやるのでしょうか?
642 :
デフォルトの名無しさん :03/09/26 22:38
Delphiってさ、 最高。
643 :
デフォルトの名無しさん :03/09/26 22:39
もう一つ付け加えるとさ。 マジですごい言語。
画像処理に関して質問です 24ビットで扱う場合(R.G.B)は各8ビットだと思うのですが 32ビットで扱う場合はどうなるのでしょうか?
645 :
デフォルトの名無しさん :03/09/26 22:39
言い訳っぽいけどさ、 私は荒らしじゃないよ。
646 :
デフォルトの名無しさん :03/09/26 22:40
確かにログは流れるけどさ、 それだけが人生じゃないよ。
647 :
デフォルトの名無しさん :03/09/26 22:40
ところでさ、 delphiて何年にできたの?
648 :
デフォルトの名無しさん :03/09/26 22:40
迷惑になるといけないからさ、 もう、寝るね。おやすみ。
Windows95が出る前後だったかな? まだWin3.1も結構使われていた頃。 Javaもちょうどその頃くらいだったはず。
650 :
デフォルトの名無しさん :03/09/26 22:51
やっぱりVBAマクロだよな。 MSはもっとコードが自由に実行できるようにOutLookのガードを外すべきだ。
>>651 マジで言っているのなら勉強しなおせ。
世の中もMSも.NETもセキュリティーを強化する方向にある。
まぁ、アホアンチのネタだってのはわかっているんだが(w
だよな。毎日のようにセキュリティーアップデートが 通知されるのは設計がしっかりしてる証拠だよな。
だけど添付ファイルが全く開けなくなるのは勘弁して欲しい。
>>653 うん。少なくとも前よりはよくなっている証拠だろうな。
>>657 便利さと安全は表裏一体だからね。
無印はより安全な方を選んだってとこだろう。
オプションかどうかは知らないけど。
最初からマクロつけなきゃいいのに・・・
マクロは昔から多くのソフトにあるし便利なものだよ。 問題点はマクロが高機能化がセキュリティレベルを追い越したこと。 Javaや.NETぐらいのセキュリティ能力ならマクロを安全に実行できるだろう。
門をくぐれば何でもありだけどな。 一番安全なのはVMやランタイムを一切入れないことだ。
テロをやっつけるには民家ごと燃やせってか。
ネイティブなら安全だと???
もっとも安全なのはネットに繋がないことだ。
665 :
デフォルトの名無しさん :03/09/26 23:29
ネイティブじゃなきゃ安全ってのも神話だろ。
Delphiでネットに繋ぐってどうやるんだ?
ネイティブの方が危険というのは真実だろう。
ほう。君のブラウザは非ネイティブだったか。
ネイティブですがそれが何か? 続きを聞きたいですねぇ。
テキストブラウザが最も安全。
俺はかちゅでココを見てる。これもやばいのか?
>>672 実際のコードはわかりませんが
ヤバイかもしれません。
ここ見てる時点でやばいのかも知れません。 PCは無事でも精神がやられます。
たしかに、Delphiの心配の前に自分を心配したほうが いいと思える人多いしな。
678 :
デフォルトの名無しさん :03/09/27 00:14
>>677 釣れた(w
と言われるのがオチですよ(w
それぐらいで喜んでもらえたら十分病んでるわ。
TXPColorMapをポップアップメニューにも反映させる方法を教えてください。 IDEでは普通にやってるようですが、どうしていいのかわかりません。
>>680 ActionMenu系よりToolBar2000+TBXの方がお勧めですよ。
スキンも検索すればごろごろ出てくる。
>>681 のパッチ当てたらパッケージ読み込めなくなりました。
ダイナミックライブラリのエントリポイント見つかりませんとかで。
>>683 てめえのインストールの仕方が間違っている。
685 :
ななしへたぐらま ◆XcB18Bks.Y :03/09/27 04:35
>>644 TBitmapの場合,各8ビットで,B,G,R,(空き)の順に並んでいます.
(Windowsの32ビットビットマップ自体はRGBそれぞれのビット数を任意に割り当てられますが,
TBitmapが対応していない…と中村氏の本に書いてあります.)
>>649 確か95年秋,Win95が出る直前だったと思います.
初代はWin3.1用でしたがツリービューなどのWin95で初登場となる
コントロールに似せたコンポがすでに入っていました.
(コンポーネントパレットのWin3.1タブはこの名残なんですよね.
個人的には今でもよく使っていますが)
>>681 のインストールの仕方を間違ったことがある人で、
その後うまくインストールできた人はいませんか?
助けてください!
落ち着いて。口の悪い連中にかまわないように。 使ってる Delphi のバージョン/種別は?
アンインストールして再インストール。ってのが定石だが、問題点が判明していないと繰り返し同じ問題が起きてしまいます。 まずは、エラーメッセージの「ダイナミックライブラリのエントリポイント」の情報をコピーしてみてくださいな。 W2k 以降であればエラーダイアログ上で Ctrl-C すれば文字列をコピーできるでしょう。
688 ばればれ。
バージョン聞いてくるあほにもかまわないように。
readme.htm読んだ?
693 :
◆cpSItzAMAs :03/09/27 11:37
荒らしがいるようなのでキャップ付きで。 単独でハンドルを持っていないメニューをアクティブにせずに疑似的に押す方法 って無いですか? 例えば、メモ帳のメニューを押したいのですが、バックグラウンドで やらせたくてもハンドルを単独で持ってないので、今は一度相手をアクティブにして マウスをそこに移動→クリックとやっています。 いちいちアクティブにしないでできると最高なのですが。 もしやり方があるのでしたら教えてください。
Delphi の話ではないような... ハンドルを持っていないメニュー、ってのが良くわからないんだけどね。 マウスではなくキーボードで操作したら?キーボードならアクティブでなくてもインプットフォーカスが あれば動くでしょ?
695 :
◆cpSItzAMAs :03/09/27 12:17
>>694 例えば、デスクトップ上のマイネットワークとマイコンピューターは
同じハンドルですし、メモ帳のファイル、編集などのメニュー部分は単独のハンドルを
持ってないですよね?
メモ帳の場合はキーボードのデータを渡してやれば出来ますけど、
ショートカットキーを設定していないものの場合はどうしてもアクティブに
しないと動作しないので悩んでます。
純粋にAPIの話になってしまうかもしれなくてスマソですが、良い方法が
あったら教えてください。
696 :
◆cpSItzAMAs :03/09/27 12:19
>>694 TABキーで制御することも考えたのですが、現在の位置をアプリで保存していても
手動でフォーカスを変更されてしまった時に現在のフォーカス位置を知ることが
出来ないので諦めていました。
TAB orderの設定されていないアプリも有りますし。
>>695 現在のアクティブウィンドウを取得
メインウィンドウの指定座標(押したいボタンがあるとこ)にマウスクリックをSendMessage
元アクティブウィンドウをアクティブにする
画面がチラつく
>>695 何言ってるんだかよくわからんが
WM_COMMAND送ればいいんでないの?
メニューは、ポップアップ/プルダウンしないとウィンドウが出てこないからね。しかしウィンドウ出しているのは Windows の user がやっているわけで... Alt キーを押すとメニューにフォーカスが移るのは知っているよね? これはアプリケーションがアクティブでなくても動くはず。 ショートカットは関係なし。 メモ帳なら ALT, 右矢印, 右矢印, 右矢印, 下矢印, 下矢印, Return でバージョン情報が開くでしょ? キーボードだけで操作可能なアプリケーションならどうにかなると思うぞ。
700 :
◆cpSItzAMAs :03/09/27 12:55
>>697-699 皆さんレスありがとうございます。
例えば、Becky!の特定の仕分けフォルダを開いて受信、新規メール作成、
TO,SUB,本文記入、送信をすべてバックグラウンドでキーボードでできますか?
色々とやっているのですけど、どうしても出来なくて。
アクティブにしたらマウスを動かして出来るのですけど。
外出しますんで遅レスになりますが、レスをいただけたら必ず返事をしますんで。
WM_CONTEXTMENU
Delphiのエディタで,次の単語にフォーカスを移動するキーはなんでしょうか?
704 :
デフォルトの名無しさん :03/09/27 17:38
Ctrl+→ これか?
705 :
デフォルトの名無しさん :03/09/27 17:43
以前、TStringListで教えていただいた者なのですが・・ function TClass.MakeStringList(): TStringList; var StringList: TStringList; begin StringList: TStringList.Create; StringList.Add('Test'); result := StringList; StringList.Free; end; なんてやろうとすると、当然、Freeしちゃってるから、 resultでStringListが戻らない(戻るけどnilが戻る?)わけですけど、 こうやって関数で受け渡しするときはどうすればいいんでしょうか。 クラス内で使用しているんですが、クラスのPrivateあたりにオブジェクト を用意しておかないとダメなんでしょうか・・・・。
function TClass.MakeStringList(): TStringList; begin result := TStringList.Create; result.Add('Test'); end; で、呼び出し側で破棄してもらえば?それか引数でインスタンスへの参照 をもらうかだな。
>>705 そこではFreeしない。使い終わったところでFreeする。
procedure TClass.UseStringList;
var
sl:TStringList;
begin
sl:=MakeStringList;
sl.Add('hoge');
sl.Free;
end;
それと試してみればわかるがnilは戻らない。
708 :
デフォルトの名無しさん :03/09/27 17:49
>>705 関数の引数で渡せ。
最後にLoadFromStream()やSaveToStream()でコピーする。
TCP接続でファイルを転送している時に 転送速度ってどうやって測定するんでしょう?
ありがとうございます。
>>706 ふむふむそういうやり方もできるんですね。参考になります。
>>707 それは、706さんの方法ですよね。705の方法でFreeしないと、
カス残りますもんね・・
>>708 Freeする前に関数の引数で、他のfunctionに渡してコピーする
ということですね。今回は呼び出しの順序の都合で、それは
無理そうでつ・・・。でも、そのコピーは使えますね〜。
ありがとうございました。
ちょっとこれから試してみて、またご報告します。
711 :
デフォルトの名無しさん :03/09/27 18:15
レコード型のTest1をTListに入れて管理したいのです. Test1 : TTest; List : TList; List.Add(@Test1); としてリストに追加しましたが,これの取り出し方がわかりません. 何方か教えていただけないでしょうか? Get
レコード型のTest1をTListに入れて管理したいのです. Test1 : TTest; List : TList; List.Add(@Test1); としてリストに追加しましたが,これの取り出し方がわかりません. 何方か教えていただけないでしょうか? Get : TTest; Get := TTest(List.Item[0]); これの何がいけないんでしょうか? よろしくお願いいたしますm(_ _)
>>711 Test1がローカル変数だとかなりやばめなコードだな。
レコード型をリストに格納して使うならポインタ型にするべき。
>>705 1、TClass はなんで付いてるの? TForm1 とかの間違い? それともクラス名という事で書いてるだけ?
2、クラスメソッドなら、クラスのPrivateにして、クラスの寿命にあわせた方が楽ならそうした方がいい。
ほんとに臨時に使うなら、
>>606-608 を参照
>>711 まず、動的配列を使う事を考えた方がいいと思うよ。
TList型を使うのはどうしてそうしたいわけ?
>>715 そうだね。ポインタとかスタックとかヒープとか言われて意味がわからない
うちは動的配列使う方が無難かな。
>>714 Class名というだけです。紛らわしくてすいません。
そですね。クラスの寿命と一緒で、かつ一回しか作成されないので、
プライベートでも構わないです。
ただ、受け渡しの方法もあるのかなぁと思ってお聞きしました。
なんか、プライベートで宣言して、CreateとDestoroyで宣言と解放
するのためらわれるんですけど、私だけですかね^^;;;
Shift+Ctrl+ u or i 。 これ見つけるまでは大変だった・・・
範囲選択してから使うの
>>720 範囲選択して、TAB、Shift+TABじゃだめ?
VisualStudioタイプで使ってるから違うかもしれんが。
多分[Tab]や[Shift]+[Tab]だと思ってたんだろうなあ・・・
723 :
ななしへたぐらま ◆XcB18Bks.Y :03/09/27 18:59
>>705 戻り値を配列のように使うだけでしたら動的配列を使うのもありかも.
関数宣言でarray of stringとは書けないので新たに型を定義します.
TDynaStringArray = array of string;
function MakeStringArray: TDynaStringArray;
begin
SetLength(Result, 1);
Result[0] := 'Test';
end;
>>723 Types.TDynStringArray使え
>>715 実は,タスクのキュー管理なのですが
TListをつかうと追加(add)やソートやExchangeが楽なので
そちらにしようと思いました.
動的配列ってjava、C++、C#で使えるの?
>>725 変更不可ならしょうがないけど
recordをclassに置き換えてTObjectList使いなよ。
728 :
デフォルトの名無しさん :03/09/27 19:31
>>726 こんな無様な仕様の動的配列があるのはDelphiだけ。
729 :
デフォルトの名無しさん :03/09/27 19:35
shwlltreeviewの幅をユーザーに自由に変更できるように したいんですが・・・・ エクスプローラーの左のTreeみたいに。 むりかのー。
Splitterじゃなくて?
>>730 どうもありがとうございました!
こんなに簡単にできるなんて僕はとても恥かしいです。
ごめん。
TIdHTTPで、htmlデータを取得して加工しようと思うのですが、 そのものの機能は実装できたんですが、間違ったURLを 入力したとき、またはサーバが停止しているときの対処が うまくいきません。 Headで試したり、ResponseTextでページの状態を調べようと 思うのですが、まちがったURLを指定するとRead Time Outとかで エラーになるんですよね・・・。 なんでだろ・・ちかれますた。どなたかご存じの方います?
>>725 それならやっぱり動的配列使った方がいいよ。
TListも名前はリストで実態はアレイ構造だから効率は同じ、むしろ動的配列が勝っている。
なお、ソートやExchangeを高速にやりたいなら、動的配列を2つ用意して、片方はインデックスとするといい。
Add は SetLength(配列名,Length(配列名)+1); して配列名[High(配列名)] に書けばいい。
>>711 TList使うなら、TListを派生させて、そのクラスの配列プロパティ使えば。
そうすれば、取り出すときにわざわざキャストする必要がなくなるので。
THogehoge = class(TList)
public
property ItemList[Index: Integer]: TTest read GetItem;
end;
property THogehoge.GetItem(Index:Integer):TTest;
begin
Result:=TTest(Items[Index]);
end;
あとAddメソッドやDestoroyを追加して、リスト用のメモリ確保・破棄も、
ここでやってしまえば便利。
>>702 マウスジェスチャーで色々とやろうと思ったのですけど結局駄目だったので、
キーコードを与えてやることにしました。
ハンドルにきちんと与えているのになぜか知らないけど動かないっす。
ありがとうございます。
736 :
デフォルトの名無しさん :03/09/27 21:49
>>586 >それとは別に、DBGrid / DBText で何とかしたい。という場合には
>「項目の設定」ってメニューが XXXDataSet または SQLQuery コンポーネントにあるから「すべての項目の追加」ってのを選べば、
>各データフィールドに対して、対応する TXXXField が生成される。
>これの OnGetText と OnSetText を好きなように書き換えれば、好きな文字列を読み書きできる。
上記をヒントに
OnSetTextに
Sender.AsString := Text;
などとかいろいろやってみたのですが、使い方がまったくわかりませんでした。
具体的な使い方のコードなどありませんでしょうか。
(いちおう自分で検索してみましたが、どうも見当たりませんでした)
なんか最近このスレためになるな
738 :
ななしへたぐらま ◆XcB18Bks.Y :03/09/27 22:08
>>724 D6以降にはそんなのがあるのですね.
今後はうちのD5ソースの名前を合わせねば.
739 :
デフォルトの名無しさん :03/09/27 22:53
indy ver8を使ってIf-Modified-Sinceヘッダを送っているのですが、 ResponseCodeはすべて 200 が返ってきてしまいます。 以下のように記述して試してみたのですが。 IdHTTP1.Request.ExtraHeaders.Values['If-Modified-Since'] := ' Sat, 27 Sep 2003 23:59:00 GMT'+#13#10; どうかご教示ください。
OLEで起動させたアプリを勝手に終了させないように するにはどうすればいいですか。
非表示のまま実行。タスクマネージャーでプロセスを殺す以外に終了できなくなる。
みなさんありがとう! やってみます!
743 :
デフォルトの名無しさん :03/09/28 11:52
テキストをClipboardにコピーしてそれをStringListにコピーしようとしているのだけど、 コピーが出来てるのにClipboard.HasFormat(CF_TEXT)がfalseになってしまう。 エラーが出た時に秀丸でCtrl+Vするとちゃんとテキストがコピーされます。 これを回避する方法or原因を知っていたら教えてください。
>Clipboard.HasFormat(CF_TEXT) この判定無視すればいいだけじゃないの
745 :
デフォルトの名無しさん :03/09/28 12:12
判定を無視してTempL.Text:=ClipBoard.AsText; しようとすると、 クリップボードを開くことができません。 の例外が発生してしまって無視してやることも出来ないんですよ。
procedure TForm1.Button1Click(Sender: TObject); begin if Clipboard.HasFormat(CF_TEXT) then memo1.Text := Clipboard.AsText; end; 普通に出来てるけどなあ?クリップボードビュワーで形式を 確認してみれば?
747 :
デフォルトの名無しさん :03/09/28 12:37
>>746 すみません、クリップボードビュワーって何でしょ?
Delphi Proには付属してないみたいですが・・・
WindowsのSystemディレクトリに入ってるよ。>clipbrd.exe 昔は[プログラム]-[アクセサリ]-[システムツール]あたりに有ったんだけど。
749 :
デフォルトの名無しさん :03/09/28 12:53
全くDelphi知らない人間ですが、文法を見る限りDelphiって簡単ですね。
ドラッグアンドドロップされたファイルをファイル名順に (たとえばimg01,img02,img03という順番で) 処理したいのですが、どのような方法があるのでしょうか。 ドラッグアンドドロップの処理にはDragQueryFileを使ってます。
>>750 TStringListに突っ込んでSort
752 :
デフォルトの名無しさん :03/09/28 13:51
>>748 見つかった。ありがとう。
で、そのプログラムで見てみたら、書式情報が格納されているから、
CF_TEXTじゃないと、認識されているみたい。
書式情報が格納されたテキストを純粋なテキストに変換する方法って
Delphiではどうすれば良いのでしょうか?
IEでリンク先のURLコピーしてアドレスバーに貼り付けられないって現象があったな。 他のエディタには貼り付けられるのに。
754 :
デフォルトの名無しさん :03/09/28 14:01
>>752 おそらく、あなたはTRichEditのCopyToClipBoardを使っているのでしょう。
そのため、TClipBoardのAsTextを使うといいでしょう。
755 :
デフォルトの名無しさん :03/09/28 14:17
>>754 その二つの使い分けってどうやるのでしょうか?
stringlist1[0]:=Clipboard.asText
と書いているのですが、エラーではじかれてしまいます。
Richeditではなく、
そのコピー元のアプリはなんだ?どのデータをコピーしたんだ?
757 :
デフォルトの名無しさん :03/09/28 14:26
途中で切れてしまいました。
RichEditではなく、ClipBoardのasTextの使い方を教えてください
>>756 コピー元のデータはBecky!のメール本文です。
なので、たぶん、fontのデータが残っているのだと思います。
760 :
デフォルトの名無しさん :03/09/28 19:10
>>755 >stringlist1[0]:=Clipboard.asText
これ、まさか事前に行をAddしないでやってるの?
行が1行もない状態では[0]に代入できないよ。
StringList1.Text := Clipboard.AsText;
ってやってみそ。
761 :
デフォルトの名無しさん :03/09/28 19:59
>>760 元々内容がある場所を書き換えようとしているので大丈夫です。
>>760 に書かれている内容でもやってみましたけど駄目でした。スマソ
色々とぐぐってるのですけど、CF_TEXTへの変換って全く無いんですねぇ。
見つかりゃぁしねぇ(涙)
762 :
デフォルトの名無しさん :03/09/28 20:13
試しに for I := 0 to Clipboard.FormatCount-1 do showmessage(IntToStr(Clipboard.Formats[I])); とやってみたら、 1,16,7が返ってきました。 CF_TEXTの他に何か入ってるみたいです。
>>761 そんな悩まなくてもとりあえず クリップボードに受信したらいいじゃない。
764 :
デフォルトの名無しさん :03/09/28 20:50
だから、クリップボード のデータを無理やり読み込む方法でやってみたら? サンプルコードもあるでしょ? var MyHandle: THandle; TextPtr: PChar; MyString: string; begin ClipBoard.Open; try MyHandle := Clipboard.GetAsHandle(CF_TEXT); TextPtr := GlobalLock(MyHandle); MyString := StrPas(TextPtr); GlobalUnlock(MyHandle); finally Clipboard.Close; end;
767 :
デフォルトの名無しさん :03/09/28 21:50
>>765 サンプルをくれてありがとう。
やってみたんだけど、エラーは出なくなりました。
でも、確認の為にshowmessage(MyString)とやってるんですけど、何故か内容が表示
されないので、中身の確認が出来てません。
もうちょっとやってみます。
>>767 文字列をダンプしてごらん。
もしかして ユニコードかもしれないよ。
769 :
デフォルトの名無しさん :03/09/28 21:59
こんばんわ
770 :
デフォルトの名無しさん :03/09/28 22:00
ご苦労
こんばんわ、 いきなりで申し訳ないですが キャンバスに出力する文字列も幅と高さを知るのに CanvasのTextExtent メソッドがありますが、 Canvasを使わず幅高さを知る方法を知ってたら教えて下さい。
772 :
デフォルトの名無しさん :03/09/28 22:22
>>768 文字列は
Date: Tue, 23 Sep 2003 12:00:00 +0900 (JST)#$D#$A0,1,2#$D#$A
です。
>>771 procedure TForm1.Button1Click(Sender: TObject);
var
Size: TSize;
begin
with TBitmap.Create do
try
Size := Canvas.TextExtent(Edit1.Text);
ShowMessage('cx:' + IntToStr(Size.cx) + ' cy:' + IntToStr(Size.cy));
finally
Free;
end;
end;
775 :
デフォルトの名無しさん :03/09/29 01:21
StringListが空白かどうかを判断するのはどうするの? if StringList1[0]='' then とするとstringlist1が空白だった時にエラーが発生します。
if stringlist1.text = '' then
if StringList1.Count = 0 then
778 :
デフォルトの名無しさん :03/09/29 04:48
安くて初心者向けのDELPHI入門書籍は何がいいですか?
>>780 Copy(S, LastDelimiter('/', S) + 1, Length(S));
783 :
デフォルトの名無しさん :03/09/29 11:23
TGraphicControlからの継承でコンポーネントを作成してるのですが マウスホイールの動きを取る方法を教えてください。
簡単な住所録みたいなものを作成しているのですが、 追加、編集、削除可能で、TStringGlidあたりに表示させ ようかと思ってます。 このとき、このデータをファイル保存する方法って何が一番ベストですか? データベースに接続するわけではないので、CSVあたりに 落とそうかなぁと思っているのですが、すると編集、削除あたりは、 ファイルをなめてごちゃごちゃやるしかないですよね。
>784 ベストな方法を教えてもらっても理解できないと思いますよ。
>>784 初めてのプログラミングなら、1件にファイル一つ使って、ファイル単位で管理すればいいと思うよ。
アイウエオ索引が付いているなら、フォルダ別けしておくと、検索も高速。
ただし、その入出力は、必ず関数か クラスを作って処理する事。 そうしておけば、形式を変更する時に楽だからね。 次のステップは勉強なら自前でB木実装して、ISAMにする事かな。
>>783 バージョンは何? D5 以前なら親を辿ってメッセージフックの手法が必要かな
>>786 ありがとうございます
B-TREEですか・・、確かにまだはやすぎるかも・・・・
次ステップで勉強してみます。
さしあたり、それぞれ1ファイル保存で検討してみます。
ありがとうございました。
790 :
デフォルトの名無しさん :03/09/29 13:40
788>> D5です、
791 :
デフォルトの名無しさん :03/09/29 15:08
D7使ってます。 TClientSocketを使う時、サーバが起動していない状態だと Openすると「非同期ソケットエラー」が出てしまいます。 OpenをTryで囲っても出ます。 どうすればこのエラーを出さない、もしくは違うメッセージを出すように 出来るでしょうか? 宜しくお願いします。
>>791 メッセージを出さないためには、例外をExceptしてしまえばいいでしょう。
違うメッセージにするには Except中で raise しなおせばいいでしょう。
ただし、それをしてもIDEでは例外で一度止まります。
例外で止まらないようにするには IDE のツールタブからデバッグオプションで
>>792 レスありがとうございます。
try
ClientSocket1.open
except
showmessage('サーバが起動しているか確認して下さい。');
end;
上記ではメッセージが出ず、例外が出てしまうのですが、
具体的にどう記述すれば良いのでしょうか?
IDEでは出ても問題ありません。
>>793 コマンドラインからか、直接実行ファイルをダブルクリックして実行させてみて下さい。
例外は出ますか?
それから except で ShowMessageは格好悪いですよ。
やるなら raise しなおしてもっと上で補足するか
var fOpened:boolean;
label loop;
loop:
try
fOpened:=false;
ClientSocket1.open
fOpened:=True;
except
end;
if not fOpend then case dlg('サーバが起動していますか?',['再試行','Cancel']) of
1:goto loop;
end;
こんな感じで
>>794 丁寧な解説ありがとうございます。
IDEから実行せずに、直接生成されたExeをダブルクリックして
起動してもやはり「非同期ソケットエラー」が出てしまいます。
ソースは下記です。
procedure TForm1.ConnectSocket;
var
openflg : boolean;
begin
if not ClientSocket1.Active then begin
try
ClientSocket1.Close;
openflg := false;
ClientSocket1.Open;
openflg := true;
except
end;
if not openflg then begin
DebugMemo.Lines.Add('サーバが起動しているか確認して下さい。');
end;
end;
end;
実行すると、このプロシージャを抜けたあとに例外が出ているようです。
ちなみに
OnErrorで下記コードを入れると、eeConnectが発生しているのが確認出来ます。
case ErrorEvent of
eeConnect : begin
DebugMemo.Lines.Add('eeConnect');
end;
end;
>>796 >>795 のコードで合ってるんですか?
別のマシンのバージョンの違うDelphiでやっても(D6)
やはりOpenのとこは素通りして、同じように非同期ソケットエラー10061と出ました。
>>416 を実行してから、再構築してもダメでした。
もしかして、デルファイ自体がどこか変なのでしょうか?(T^T)
もしかして、ClientSocket を非同期的で使ってない? --> ClientType 参照
>>798 ごめんなさい、もうちょと詳しくお願いします(^^;
何も工夫してないので、たぶんそれだと思います。
OnError使え
>>799 ClientType が非同期だと、いわば別スレッドで実行されるようなもの。
だから、Open の所はそのきっかけを与えるだけで、実際のOpenは遅延されて行われる。
それで 対処方法は
1、非同期が必要でないなら同期式に変更する。
2、
>>800 さんが言うように OnErrorでErrorCode:=0;
どちらかで対処可能。
クラスで普通に変数を宣言するのとpropertyとするのって どう使い分けたらいいの?
カプセル化したいとき。しなくてもいいと思う時。
>>800 >>801 おおお!!
できました。
そういう仕組みになってたんですね。
助かりました。そして勉強になりました。
ありがとうございます。
Delphi6パーソナル初心者です。 Rich Editをそのまま使用するとIME の入力・変換中文字列の文字色・背景色・スタイルなどが、 変換中はグレー地に黒文字になりIMEでの設定とは違ったものになります。 これをIMEの色設定と同じようにするにはどうすればいいのでしょうか?
Delphi6Personalです。 いくつかのフリーのコンポーネントをインストールしようとすると、"は適切な識別子名ではありませんと出て先に進めません。 何がまずいんでしょうか?
808 :
デフォルトの名無しさん :03/09/29 20:11
特定のWindowが最前面にあるかどうかを判断する方法ってありますか? 最前面にはSetforegroundwindowで持っていけますけど、最前面に あるかどうかを調べるAPIやDelphiのコマンドが見つからなくて困ってます。
>>807 そちらのHPは見たのですがDelphi6パーソナルにはWin32APIヘルプがないのでどうすればいいかわからなくてここで質問しました。
ソフトや本を買わないと駄目なんでしょうか。
>>808 function IsForegroundWindow(Handle: THandle): Boolean;
begin
Result:=(GetForegroundWindow=Handle);
end;
>>809 >>807 のリンク先のコード間違ってました。 サイズが違います。
var
CompColor:array[0..3] of TCompColor;
begin
SendMessage(Handle, EM_GETIMECOLOR, 0, Integer(@CompColor));
--- 必要な個所を変更 -------
CompColor[0] 入力中
CompColor[1] 変換中
CompColor[2] 変換文字列
CompColor[3] 変換後再変換
SendMessage(RichEdit1.Handle, EM_SETIMECOLOR, 0, Integer(@CompColor));
end;
TCompColor;
crText: TColorRef;
crBackground: TColorRef;
dwEffects: Longint;
http://yokohama.cool.ne.jp/chokuto/urawaza/struct/CHARFORMAT.html このdwEffects と同じです。
MSDNに加乳が最強。オンラインでもライブラリ見れるけどね。 オフィシャルのソースくらい活用しませう。
>>811 ありがとうございます。
試してみます。
814 :
デフォルトの名無しさん :03/09/29 21:51
キャプションのアクセラレータ文字を取り除いて実際に表示される 文字列だけを取得したいんですが、どうしたらいいんでしょうか? 例 '&A && B' → 'A & B'
>>814 それくらいのルーチン自分で考えたらどうよ?
StringReplace関数を使って、
1 "&&"を#$01に置換
2 "&"を""(空文字)に置換
3 #$01を"&"に置換
文字列一つ一つ調べた方が効率的かもしれないが、これの方が簡単。
それは既に考えていたんですが元の文字列に #1 や #0 が含まれている場合、 予期しない結果になってしまいます。 途中に制御文字やありえないバイトの組み合わせが含まれていても、それは そのまま残して '&' だけを取り除きたいんです。 やっぱ一文字ずつ調べるしかないんでしょうか。
818 :
デフォルトの名無しさん :03/09/29 22:41
./:::::\ /::::::ヽ /::::::::::::;ゝ--──-- 、._/::::::::::::::| /,.-‐''"´ \:::::::::::| / ヽ、::::| / ヽ| l l .| ● | l , , , ● l ` 、 (_人__丿 、、、 / `ー 、__ / もきゅ /`'''ー‐‐──‐‐‐┬'''""´ ./ ___ l __ l ./ / |/ | `ー-< / ./ ./ `ー‐--{___/ゝ、,ノ 今日、Eclipseの参考書を買いました。 お前ら、これからJAVAスレにどんどん質問すると思うけど、 暖かい目で見てくれや。頼むぜ。 安心してくれ。ちゃんとJAVAの参考書も手元にあるから。 Delphiの参考書も買おうと思ったんだけどさ、 ヨドバシのポイントが足りなくて買いませんでした。 先にJAVAを極めてくるのでDelphiはもう少し後になると思うのだよ。 そのときが来たら、かなり頼みます。マジで。
このスレ荒らさないなら面倒見ます。
>>817 は
>>815 への返信です。
>>816 は知りませんでした。
しかし便利すぎて逆に私がやりたいことと違うようです。
やっぱ一文字ずつ調べることにします。ありがとうございました。
822 :
デフォルトの名無しさん :03/09/29 23:36
最大化をした時に、フォームの横幅は同じで 高さ方向のみタスクバーに重ならないように いっぱいに表示をしたいのですがどうしたら良いでしょうか?
>>822 どのような状態にしたいのか良く分からないけど、
ConstraintsプロパティのMaxWidthとMinWidthじゃだめかな?
>>823 これだけでいいはずだよ。
function TForm1.Hook(var Message: TMessage): Boolean;
begin
if Message.Msg = CM_APPKEYDOWN then Result := True else Result := False;
end;
property ProcessShortCutsをoffにしたら大丈夫になりました。 offにしてもショートカットは受け付けます。 あれ? じゃぁこれってどういうときにonにするんでしょう? はじめから823のコードを追加しなければ何も変わらずいける気がしますが、、、
826 :
デフォルトの名無しさん :03/09/30 01:36
>>824 レスありがとうございます。
ただ任意の解像度に対応したいので、最大上限値設定の決め打ちは
すみません、ちょっと避けたいです。
うまく説明・質問ができてなかったかもしれませんので少し補足です。
最大化のボタンを押された時、設計時のフォーム横幅は変えずに
上下方向のみ伸び、ただその際タスクバーに重ならないように
画面いっぱいに大きくしたいです。
OnConstrainedResizeイベントで procedure TForm1.FormConstrainedResize(Sender: TObject; var MinWidth, MinHeight, MaxWidth, MaxHeight: Integer); begin MaxWidth:=300; MaxHeight:=Screen.WorkAreaHeight; end; こんなんでいけると思います
>>826 うん。だからMaxWidthとMinWidthを使えば幅固定で高さ可変になるって。
たとえば、MaxWidthとMinWidthに300と指定すると、幅は300より大きくも小さくも出来なくなる。
ただし高さは変更することが可能。最大化しても幅は同じで高さだけが最大化される。
829 :
デフォルトの名無しさん :03/09/30 01:58
>>828 勘違いしてました。そうですよね、横幅の最大値を決めれば
高さは任意にできますね。
ありがとうございました。これで今日はぐっすり寝れます。
入門書どれ買えばいいの?
覚えるより慣れろ。
>>830 プログラムそのものの初心者なのか、他の言語での経験があるのかによって
読むべきものも変わってくるかと。
完全に初心者でデルファイのデも知らなかったけど、 最近、無料で使用できるのがあるってのを聞いて、 ちょっと趣味でやってみようと思ってるんだすが。
やっぱりオフィシャルなコースウェアがいいんですかね?
あなたにHSPをお勧めします。 HSPはとても原始的な言語です。 テキストエディタが付いていてそれに命令を一つ一つ書くだけでWin32アプリを作成できます。 この原始的な環境は初心者でも取っつやすくプログラミングの入門に最適です。 またHSPは原始的でありながらWindowsのGUIアプリを作成できます。 GUI環境で育った人ならコンソールプログラムよりGUIアプリの方が楽しく学習できると思います。 またHSPにはマックOS版がありクロスプラットフォーム体制も万全です。 しかも「ネット時代」に対応しておりHSPletによりJavaアプレットとして動作させることも出来ます。 HSPは原始的でありながら仕事で使えるレベルにまで対応できる素晴らしいツールです。 あなたもHSPを始めてみませんか?
>>835 氏ねとは言わないが俺ぐらいしか相手にされないぞ
基礎から〜かなぁ。それとweb上の講座を見ながら地道にやっていくしか。
Bitmap.Height := 7000; Bitmap.Width := 10000; ってしたら、ちょっとWidthのところで処理が待たされるのですが、 早くする方法無いですかね? …単に画像が大きすぎるだけ?(;´Д`)
一画素3バイトだとしても 7000 * 10000 * 3 byte = 240M byte ありますよ。 ちょっと大きすぎませんか?
>840 帳票イメージを拡大して、編集させるので、この大きさなんです…。 部分的に切り出して、拡大とかしか方法ないですかね…。
>部分的に切り出して、拡大とかしか それしかないでしょう。 クラスライブラリというより GDI / Video カード等のリソースの問題。 探せば、TBitmap 挿げ替え用、巨大ビットマップ操作クラスがあると思う。 他の人、よろしく
プロジェクト設定に、「言語-ロケールID-0x411-日本語」みたいなのがあります。 多国語対応したい場合は、英語でしょうか? それとも、言語を指定された時点で実行時にロケールID変更?
844 :
デフォルトの名無しさん :03/09/30 14:18
沢山のLabelのCaptionを一瞬で変更することはできないでしょうか? Label1.Caption := '太郎'; Label2.Caption := '次郎'; Label3.Caption := '三平'; っていうのをびゃびゃっとできませんか?
まず名前に法則性がないから無理。
>>845 早っ だめぽですか・・・・
法則性っていうか名前は決まってます っていう条件ならできますか?
LabelのCanvasに直に描く。 もしくは、TFormの再描画のとき自分で描く。
>>847 えっと・・・仰る事が全然わからんのですが・・・・
Label.Canvas.TextOut('太郎')
>>849 Labelって文字の上に太郎って書かれただけみたいなんですけど・・・
ちょっとこれは降参ってことかな・・・
>>846 そう言うときのサンプルはいくらでも転がってるけど
var
I: Integer;
begin
for I:=0 to ComponentCount-1 do
begin
if Components[I] is TLabel then
TLabel(Components[I]).Caption:='太郎'+IntToStr(I+1);
end;
end;
>>851 太郎1 太郎2 太郎3 ってのはできたんですが
太郎 次郎 三平 ってのは無理ですか・・・
これだからDel厨は
朗とか平とかの使い分けに規則がないからできないんだって。少しは自分で考えろ。 var Family: array[1..10] of String; I: Integer; begin Family[1]:='太郎'; Family[2]:='二平'; Family[3]:='三平'; Family[4]:='四朗'; Family[5]:='五助'; Family[6]:='六輔'; Family[7]:='七郎'; Family[8]:='八郎'; Family[9]:='九朗'; for I:=0 to ComponentCount-1 do begin if Components[I] is TLabel then begin if I+1<Length(Family) then TLabel(Components[I]).Caption:=Family[I+1] else TLabel(Components[I]).Caption:='未だ生まれず。'; end; end; end;
>>854 こ・・・これだよ 兄さんっ!
ありがとう またきますねーー
856 :
デフォルトの名無しさん :03/09/30 15:48
インターネットキャッシュのフォルダを取得するには どうしたらいいのでしょうか?
>>856 >857が正解。もうひとつ方法がある(こっちのほうがNT系の全ユーザーと
ログインユーザー別に取得できる)。
uses ShlObj;
procedure TForm1.Button1Click(Sender: TObject);
var
lpsszPath: array[0..MAX_PATH] of Char;
begin
SHGetSpecialFolderPath(Handle, lpszPath, CSIDL_INTERNET_CACHE, False);
showmessage(lpszPath);
end;
SHGetSpecialFolderPath関数の3つめの引数を以下のものにすると、
任意のフォルダが取得できる。たとえば(続く)
CSIDL_COMMON_DESKTOPDIRECTORY: すべてのユーザーのためのデスクトップフォルダ CSIDL_COMMON_FAVORITES: すべてのユーザーのお気に入りフォルダ CSIDL_FAVORITES: ログインしているユーザーのお気に入りフォルダ CSIDL_COMMON_PROGRAMS: すべてのユーザーのスタートメニューのプログラムのフォルダ CSIDL_PROGRAMS: ログインしているユーザーのスタートメニューのプログラムのフォルダ CSIDL_COMMON_STARTMENU: すべてのユーザーのスタートメニューフォルダ CSIDL_STARTMENU: ログインしているユーザーのスタートメニューフォルダ CSIDL_COMMON_STARTUP: すべてのユーザーのスタートアップフォルダ CSIDL_STARTUP: ログインしているユーザーのスタートアップフォルダ CSIDL_COOKIES: インターネットのクッキーフォルダ CSIDL_DESKTOP: ログインしているユーザーのデスクトップフォルダ CSIDL_FONTS: フォントが格納されているフォルダ CSIDL_HISTORY: インターネットの履歴が格納されているフォルダ CSIDL_PERSONAL: Personalフォルダ CSIDL_RECENT: 最近使ったファイルのフォルダ CSIDL_SENDTO: コンテキストメニューの「送る」 CSIDL_TEMPLATES: コンテキストメニューの「新規作成」 CSIDL_NETHOOD: ネットワークコンピュータ CSIDL_PRINTERS: インストールされているプリンタフォルダ 長文スマソ
さっきからDel系のスレを悉くageながらなんかブツブツ文句言っている香具師が いるけど 軽度の精神障害者か?
なぜかShlObj.pasにはCSIDL_PROGRAM_FILESが定義されていないが const CSIDL_PROGRAM_FILES = $0026; で良い。
>>860 哀れだからほっとこう。彼は何も言えない知識の低さがにじみ出ていて可哀そうです。
>>843 言語リソースをdllに切り出せる。Pro版以上。マニュアル読め
>>854 なんか長いぞ。
function GetItem(Items: array of string; index: Integer): String;
begin
Result := Items[index];
end;
...
for i := 1 to 9 do
(FindComponent('Label'+IntToStr(i)) as TLabel).Caption := GetItem(['太郎', '2ヘー', '三平', ...], i);
865 :
デフォルトの名無しさん :03/09/30 18:39
コントロール上でTPopUpMenuが表示されているかどうか 知る方法はないでしょうか?
866 :
デフォルトの名無しさん :03/09/30 23:17
100とか100.1とかのstringデータを100.00 100.10と小数点の位置を固定して 表示するにはどのようにすれば良いのでしょうか? Result:=format('%3.2f',string1); とやっているのですが、エラーになってしまいます。
>f 固定小数点。引数は浮動小数点値でなくてはならない。 とのことなので、1度 STRtoFLOAT で、浮動小数点に変換 しなければなりません。 Format('%3.2f', [STRtoFLOAT(string1)])
868 :
質問age :03/10/01 10:28
質問です。 Delphi Ver4 と Ver6 とでは、ソースコードでの(下位)互換がなかったと思います。 では、Ver6 と Ver7 での互換性はどうでしょうか。 上位、下位とも互換性がありますでしょうか。 内容は Win2k で TPaintBox を使用しての描画ソフトです。
>>867 >STRtoFLOAT
StrToFloatって書けよ・・・自動補完使ってないの?
>>868 DFM ファイルの話をしているのかなぁ?
Ver7 で追加された機能を使っている場合には、Ver6 ではコンパイルできないよ。って答えではだめ?
.dfm の互換性を解消するツールがどこかにあるから使ってみな > 868
>>871 互換性を解消すると、今まで他バーションで使えたソースが使えなくなるんですね。
はいはい。非互換性を解消/解決。の書き間違いだ。
>>870-873 あんがと、です。
>Ver7 で追加された機能を使っている場合には、Ver6 ではコンパイルできないよ。って答えではだめ?
あ、これで大丈夫です。
Ver6 で作成して、Ver7 でも使いまわしたいと思ってますんで。
互換性がないのは .dfm なんですか・・・
検索して見ます。
ありがとうごぜーますた。
876 :
デフォルトの名無しさん :03/10/01 18:43
で?それが何かDelphiと関係があるんでしょうか?
878 :
デフォルトの名無しさん :03/10/01 19:37
データベースのデータ表示画面と登録画面と 共用したかったのですが、DBEditはデータの 表示しかできないようです。こういった場合、 皆さんは表示用と登録用と2つのフォームを用意して いるのでしょうか? それとも何かよい方法がありますでしょうか。
表示と入力が別画面だったらとても嫌でしょうね。 DbEditで表示しか出来なかったのは何かの設定のせいだと思いますよ
レスリング部に所属している集団が部活帰りに 「ボクシングってダセェよな、シッシッ言っちゃってよ。」などと 言っているのが聞こえたので走って近づき、リーダー格の奴に、 右ボディを食らわせて前屈みにし、ワンツー連打から左フックでKOした。 オレはその場を立ち去る時に残りの高校生たちを指差し、 「お前らも灰になれるものを見つけろよ」と言った。 離れていく時に後ろから、「ボクシングっていいよな。」と声が聞こえた。
それがどうした。
882 :
デフォルトの名無しさん :03/10/01 22:19
なにか重要なことなんだよ(w
おい、お前。そう、お前だよ。 「このスレおもろいから見てみ」「2ちゃんの歴史に残る名スレだぜ」とか言われてホイホイと このhtml化されたスレを見にきた、お前のことだ。 どうだ?このスレおもしれーだろ。 でもな、お前はこのスレを読むだけで、参加することはできねーんだよ。 可愛そうにな、プププ。 俺は今、ライブでこのスレに参加してる。 すっげー貴重な経験したよ。この先いつまでも自慢できる。 まあ、お前みたいな出遅れ君は、html化されたこのスレを指くわえて眺めてろってこった。
885 :
デフォルトの名無しさん :03/10/02 00:04
オブジェクト指向について聞きたいのですが、 受注と受注明細というクラスがあった場合、 Delphiではこの関係をどのように表現するのでしょうか? RDBで管理する場合、受注Keyを受注明細に持たなくてはいけないと思うのですが、 受注明細クラスでも受注Keyが必要なのでしょうか? データを登録する場合、各プロパティに値を代入して登録メソッドを投げるのがよいのか、 登録メゾットのパラメータとして(受注Key,客先名,受注日)などの値を代入する どちらのやり方が一般的なのでしょうか?もしくはほかに良い方法等ありましたら教えてください。 よろしくお願いします。 受注クラス 受注Key,客先,受注日 受注明細クラス 受注明細Key,商品コード,数量,納期 受注クラス 1 ..1.* 受注明細クラス 受注Table 受注Key,客先名,受注日 受注明細Table 受注Key,受注明細Key,商品コード,数量,納期 (受注Key,受注明細Keyはユニークな番号)
あ、いいや。解決しちゃったよ。
なりすましはやめてくれ
なりすましって。 本当に解決しちゃったんだよ。
解決したかどうかは関係ない。こっちが勝手に答えをつけるだけさ。 まず「メゾット」ではなく「メソッド」。濁る位置が違う。 なんでこんなに広く間違われているんだろう。 データベースで「受注Keyを受注明細に持たせる」必要性があるのは、そうしないとあるレコードを特定することが できなくなるから。同一日に受けた同じ顧客からの複数の異なる注文を区別できなくなってしまう。 よく考えればわかると思うけど、これは RDB に限った問題ではなく、もともとのシステムレベルでの設計の話。 だから特定の受注情報を操作する関数/クラスには、受注 Key が必須となる。 その話とはまったく別に、RDB のテーブルごとにクラスを用意するのはあまり美しくない。 (そうやっても別に問題ないけど)RDB のテーブルレベルでの抽象化は RDB に任せておいて 操作言語側でのクラス化はもう少し大きな意味的レベルでまとることを薦める。 そうするとRDB テーブル構造が変わってもクラスの構造を変更しなくても良くなる。
890 :
デフォルトの名無しさん :03/10/02 10:57
プリンタの紙切れなどのエラーを検出する方法を教えて下さい。 (環境:WindowsXP Delphi7) 宜しくお願いします。
>>890 難しい課題ですね。 Windowsでの印刷は一般的にスプーラに蓄えられ印刷をアプリ側でコントロールしてはいません。
GetJob を使って Status を見るくらいかな
>>892 阿呆なことをいうから放置されちゃったなw
レスありがとうございます。
>>891-892 スプールせずに、直接プリンタにデータを送る設定にしている時も
その方法で出来るのでしょうか?
895 :
デフォルトの名無しさん :03/10/02 14:07
ちょっと、グチっつーか、吐き出させてください。 FormatDateTime 関数のヘルプの「例」の項目なんですけど ・・・翻訳したんならコードも直せよ。
>895 細かいなあ!でもこいうの見てまじめに悩む香具師とかもいるんだろうなぁ。
Officeの図形オブジェクトを自分で作れないかなぁ。 メタファイルで作ってExcelに貼り付けた後にグループ解除するとぐちゃぐちゃになっちゃいます。
Delphi 6 Personal Quadruple D Ver. 3.00 DirectX 9 Quadruple Dのtutorialの奴をコンパイルして実行してみても動かない_| ̄|○ というかウインドウモードのが動きません。 なぜでしょうか?
動かないからじゃないですか?
>898 アプリ側の色数と画面の色数があっていないとか。
QDのチュートリアルには致命的なバグが多数ある。 game板で聞いた方がいいと思われ
ディスプレイモードをHigh Colorに下げたら動きました。 900さんご指摘ありがと(m_m) アイコンが化けるけどまぁいっか…。
>>889 レスありがとうございます。
>まず「メゾット」ではなく「メソッド」。濁る位置が違う。
すいません、素で間違えていました。
>よく考えればわかると思うけど、これは RDB に限った問題ではなく、もともとのシステムレベルでの設計の話。
ここら辺の正規化の問題についてはわかっているつもりなのですが、
>だから特定の受注情報を操作する関数/クラスには、受注 Key が必須となる。
この『受注情報を操作する関数/クラス』というのが、受注クラスを指していると思うのですが、
受注明細クラスに受注Keyを持たせなくてはいけないのか?
がよくわかりませんでした。
UMLのシステム図などを見ると、受注明細クラスに受注Keyを表示しないように見えます。
しかしその場合、受注明細クラスがどの受注Keyを参照しているのかを知る方法がわかりません。
そこで、Delphiで実装するときにどのようするなかと思って質問しました。
>その話とはまったく別に、RDB のテーブルごとにクラスを用意するのはあまり美しくない。
ここらへんは頭ではわかっているのですが、実装しようとするとSQLを直接なげる場合にくらべて
処理の最適化ができないような気がしています(まだ勉強中ですが)
将来的なメンテナンス等を考えれば、RDBとは分けるべきとは思っております。
>>903 昔のDBならキーをレコード位置で代用する事も出来たろうけど、RDBではキーが無ければ識別できませんよね?
そのUML図を書いた人は あるのは当然と思って書かなかったか、 忘れたかでしょう。
書いた人に聞いてみるべきでしょうね。
>>904 ほんとにそういうレス続けていると実生活でも嫌われオーラまといまくりになっちゃうよ。
役割が自分を作っていってしまうからね。
>ほんとにそういうレス続けていると実生活でも嫌われオーラまといまくりになっちゃうよ。 どうせ友達いないんじゃないw
905 さん、フォローありがと。 テーブルごとに用意された複数のクラスを操作するより、 機能ごとに用意された複数のクラスが複数のテーブルを操作したほうが、 最適化を含むプログラミングが容易になると思う。岡目八目。 あと、UML とかやる前にクラス設計の経験を増やしたほうが良いかなと思うよ。 まわりの誰かに「has-a 関係と is-a関係の差」に関して聞いてごらん。 UML はフローチャートではないから、プログラムと詳細をすべてあらわしていると考えないほうが 良いでしょう。その UML 図を書いた人と相談すべきです。
Delphi7 で IntraWeb触ってみようかなっと思って新規作成、 IWUnit1を開発者ガイドのように開こうとすると、 幾つかプロパティが無いって言われるんだけど… なんで?(;´Д`)
909 :
デフォルトの名無しさん :03/10/03 13:37
TStringListの限界は何バイトですか?
2G くらい?
911 :
デフォルトの名無しさん :03/10/03 13:43
早いレスありがとうございます。 2Gあったら余裕です。
>>911 何に使うの? 心配になるくらいサイズ大きいの?
2G は理論値だし... Delhi/VCL に限らずオンメモリで確保できないと遅くなるよ。
ListViewのViewStyleをvsReportに設定した状態で 特定の列にグラフ(プログレスのようなもの)を書きたいのですが StringGridのDrawCellのようなイベントが見当たりません。 何処にどのように書けば実現できますか?
915 :
デフォルトの名無しさん :03/10/03 18:51
Delphiでnkf32.dllを使いたいのですが、Webで探しても サンプルソースが(自分の力では)見当たりません。 他にEUCをSJISに変換する方法があればそれでも構いません。
916 :
デフォルトの名無しさん :03/10/03 19:14
>>915 nkf32.dllじゃなくて、独自にやる奴で
jconvertってのが昔あった、手元にもある、が、配布元が消えてる
>>914 オナニードロドロをtrueにしてOnDrawItemイベントで描く。
>>918 オーナードローにしなくても、OnCustomDraw などで描画できるかと。
921 :
デフォルトの名無しさん :03/10/03 22:57
すいません、自己解決しました
>>914 で質問して、
>>918-919 のお答えを頂いたものです。
結局、色々と試して CustomDrawSubItem でグラフを書こうとしているのですが、
グラフを書き始める座標が上手く求められません。
今現在Drawしようとしている位置はどーやって求めるのでしょうか?
自分で解決できました。ありがとう。
>>914 あんた誰よ(TT)
解決してません宜しくお願いします。
偽物は止めろ!
926 :
デフォルトの名無しさん :03/10/03 23:42
Delphiとバッファオーバーフローって何の関係があるんですか? 自己解決できそうにもありません。
釣れた釣れた(w
荒らされてるみたいなんでまた来ます m(..)m
DefaultDraw:=false; Left:=TListView(Sender).Column[0].Width; Rect:=Item.DisplayRect(drBounds); Rect.Left:=Left; Rect.Right:=Left+TListView(Sender).Column[1].Width; 2列目の位置。
煽られたのでもう来ません m(..)m
933 :
デフォルトの名無しさん :03/10/04 00:00
お前ら自己解決できるくせに初心者騙って質問するなよ馬鹿
ものすごい馬鹿が釣れたw
(・∀・)ツレタ!
936 :
デフォルトの名無しさん :03/10/04 00:09
このスレは自己解決できる人が多くてレベルが高いですね。
938 :
デフォルトの名無しさん :03/10/04 00:10
このスレは釣られる人が多くてレベルが低いですね。
939 :
デフォルトの名無しさん :03/10/04 00:11
940 :
デフォルトの名無しさん :03/10/04 00:11
今ごろPCの前で悔しがっているんだろうな。ぷぷぷ
941 :
デフォルトの名無しさん :03/10/04 00:13
>>929 ありがとうございました、それでうまくいきました。
荒しが混じってて不快な思いをさせてしまいましたね・・・
ごめんなさい。(涙
×荒し ○荒らし
943 :
デフォルトの名無しさん :03/10/04 00:16
>>941 今度から質問するときはID付けれ。
ネタと思われても当然。
>>943 釣り?IDって付けようと思って付けられるものじゃないよね。
945 :
デフォルトの名無しさん :03/10/04 00:19
どうやってIDつけるんだ?(藁
946 :
デフォルトの名無しさん :03/10/04 00:22
Del厨釣れまくり(w
948 :
デフォルトの名無しさん :03/10/04 00:23
質問スレ統一した方がよくね?
949 :
デフォルトの名無しさん :03/10/04 00:24
次スレ立てました。
ミスった・・・。ショボーン
>>952 なんでこんなに簡単に釣れるのだろう?(激藁
>>954 またまた釣れたーーーーーーっ!!!(嘲笑激藁
やっぱりこのスレ荒らしてるのもアホアンチだな
957 :
デフォルトの名無しさん :03/10/04 00:30
もうそろそろアクセス規制したほうがいいと思われ。 厨ウザイ。
960 :
デフォルトの名無しさん :03/10/04 00:33
982 名前:デフォルトの名無しさん :03/10/04 00:30
えらい肩書きのやつもくそをしたりあせもかく汚い生き物さ
983 名前:デフォルトの名無しさん :03/10/04 00:32
>>982 それは興味深い話です。
詳しく話を聞かせてください。
961 :
デフォルトの名無しさん :03/10/04 00:33
aaa bbb ccc のような内容の外部テキストfoo.txtを読み込んで、 1行ずつ配列に入れるにはどうしたらいいんでしょうか?
釣れた(藁
963 :
デフォルトの名無しさん :03/10/04 00:34
@hairetsu=<FILE>;
964 :
デフォルトの名無しさん :03/10/04 00:35
初歩的な質問なのですが、 Delphiで作成したアプリケーションのウィンドウサイズを変更できないようにするにはどうしたらよいのでしょうか?
釣れた(ワラ
事故解決しました。
968 :
デフォルトの名無しさん :03/10/04 00:38
Doubleの変数に格納されている数から小数点以下を取り出す、 あるいは整数部分だけを取り出す方法を教えてください。
969 :
デフォルトの名無しさん :03/10/04 00:39
971 :
デフォルトの名無しさん :03/10/04 00:41
972 :
デフォルトの名無しさん :03/10/04 00:52
放置でよろしく
村山スレにカエレ
>>968 Frac(1.23) -> 0.23
Int(1.23) -> 1.0
Int の返り型は実数型だから必要であれば型変換を。
>>964 Constraints プロパティを設定。
または Form の BorderStyle を bsDialog にしちゃうとか。
>>961 SL := TStringList.Create;
SL.LoadFromFile( foo.txt )
for ind := 0 to SL.Size - 1 do
writeln( SL[ind] );
977 :
デフォルトの名無しさん :03/10/04 05:25
文字列のすべての制御文字をまとめて削除したいのですが、 どうすればよいでしょうか。
速度を気にしなければ for ch := #00 to #31 do s := StringReplace(s, ch, '', rfReplaceAll);
自己解決しました。
>>977 function delChar( str:string ; delset:TSysCharSet):string;
var siz:Integer;
var i,j:integer;
begin
siz:=length(str);
setlength(result,siz);
j:=1;
for i:=1 to siz do
if not (str[i] in delset )
then begin result[j]:=str[i];inc(j);end;
setlength(result,i);
end;
使い方
文字列 := delChar( 文字列 , [ #0..#31 ] );
タブは削除しないなら
ごめん 最後 setlength(result, j-1) だ
もうバグ無いよね?
あ、タブを削除しないなら [ #0..#8 , #10..#31] ね
質問者はトリップつけたほうがいいかもね
トリップがあると混乱が減るとはおもう。 けど自己解決しようがしまいが、解答つけてあげるから、俺は気にしないぞ。
鏡
餅
a
aa
aaa
aaa
bbb
aaaa
995 :
デフォルトの名無しさん :03/10/04 11:56
釣れた(藁
Delphi死亡
997 :
デフォルトの名無しさん :03/10/04 12:24
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。