1 :
デフォルトの名無しさん :
2005/05/09(月) 04:42:56
はじめまして。 つい先ほどDelphi6をインストールしたばかりなのですが、 Delphi6を最大化しても他のプログラムのウィンドウや デスクトップとかが見えてすごく気が散ります。 環境オプションにもそれ関係の設定は見あたりませんでした。 そういうもんなんでしょうか?
Delphi6 personal, Windows95 OSR2を使ってます。 StringReplaceで半角カナを全角カナに変換する関数を作っているのですが、 目的の文字列に変換できません。 function KanaHanToZen(data: string): string; // 半角カナを全角カナに変換する処理 var TRF: TReplaceFlags; begin TRF := [rfReplaceAll]; data := stringReplace(data, 'バ', 'バ', TRF); data := stringReplace(data, 'パ', 'パ', TRF); Result := data; end; バ が バになり、パ が パになる。 他の文字は、アはアとなるのですが、どうやら濁音と半濁音が正常に変換されないようです。 こういう場合、どうしたらよいのでしょうか?他に代替案はありますでしょうか? よろしくお願いいたします。
FAQな気がしますが、 rubyだとx+=1、cだとx++ こんな感じで x := x + 1; を短縮する形ってありますか?
Inc?
>>8 ありがとうございます
FAQ以前に基本でしたね
すいません
10 :
5 :2005/05/09(月) 12:22:58
>>6 お返事どうもありがとうございます。
AnsiReplaceStr関数があったので、やってみましたが、結果は
>>5 と同じになりました。
パやバが一文字とならず、点々と丸が別の文字となってしまいました。
引き続き、何か対策方法がありましたら、教えてください。
よろしくお願いいたします。
>>10 StringReplaceを窓から投げ捨ててAPIのLCMapStringを使う
12 :
5 :2005/05/09(月) 12:38:12
>>11 情報ありがとうございます。
APIのLCMapStringを調べてみます。
結果がわかったら、またこのスレで報告いたします。
13 :
5 :2005/05/09(月) 13:20:16
>>11 APIのLCMapStringで正しく変換できました。ありがとうございました。
配列の要素を全部0にしたいのですが、 配列の要素をクリアするメソッドみたいなものありますか? var rx: Array [ 1..100 ] of integer; 宣言の際、これだけだと適当な値が各要素に入ってしまいます。
FillCharとか?
>>14 FillChar(rx,SizeOf(rx),0);
>>14 rx[1]:=0;
rx[2]:=0;
rx[3]:=0;
rx[4]:=0;
rx[5]:=0;
rx[6]:=0;
rx[7]:=0;
rx[8]:=0;
rx[9]:=0;
rx[10]:=0;
rx[11]:=0;
rx[12]:=0;
rx[13]:=0;
rx[14]:=0;
rx[15]:=0;
rx[16]:=0;
↓省略!
14 じゃ無いけど FillChar 初めて知った。今までは for I := Low(rx) to High(rx) do rx[I] := 0;
19 :
デフォルトの名無しさん :2005/05/09(月) 18:50:02
6のPersonalを使ってます。 ショートカットから実行した時 ショートカットが存在するパスを取得するには どうすればいいのでしょうか。 'c:\abc.exe' 'd:\abc.lnk' の状態で'abc.lnk'実行時、exe内部で'd:\'を知りたいです。 よろしくお願いします
20 :
デフォルトの名無しさん :2005/05/09(月) 19:02:07
22 :
謎電波 :2005/05/09(月) 21:18:01
山田ウィルス。 Cドライブの中身だかとデスクトップのキャプチャ画像だかを公開するらしい。
17 はそんなやり方をホントに本当にほんとーーにしていると見た。
そうだよ。 それであのコードを自動で書くためのツールつくって、そのなかでは For 文使ってる。
25 :
デフォルトの名無しさん :2005/05/09(月) 23:34:42
日本語の文字列を一バイトずつで処理したあとにまた日本語の文字列として直すにはどうしたらいいですか? 配列c{i]にその一バイトずつが入ってるのですが、そのまま edit1.text:=edit1.text+c[i]; のようにしたらダメでした
26 :
デフォルトの名無しさん :2005/05/09(月) 23:37:51
マクロでインターネットプラウザを操るってことはできないんでしょうか。 できるとしたら 方法も教えてくれると嬉しいです。
28 :
デフォルトの名無しさん :2005/05/09(月) 23:53:46
>>27 マジですかorz
過去スレ見れないからorz
29 :
ゴッド :2005/05/10(火) 01:06:34
>>25 // 暗号化
procedure XorEncode(const Source, PassWord: string;var ba:ByteArray);
var
i, LP,LS: Integer;
begin
SetLength(ba,0);
LP := Length(Password); LS := Length(Source);
if (LP = 0) or (LS = 0) then Exit;
SetLength(ba,LS);
for i := 1 to LS do
ba[i-1] := Ord(Source[i]) xor Ord(Password[(i-1) mod LP +1]);
end;
// 復号化
function XorDecode(const ba: ByteArray;const PassWord: string):string;
var
i, LP,LS: Integer;
begin
result := '';
LP := Length(Password); LS := Length(ba);
if (LP = 0) or (LS = 0) then Exit;
SetLength(result,LS);
for i := 1 to LS do
result[i] := Char( ba[i-1] xor Ord(Password[(i-1) mod LP +1]) );
end;
30 :
たまご :2005/05/10(火) 01:36:15
サーバーにあるテーブルをインポート、エクスポート、ワークビューに設定するのはなぜですか?
31 :
たまご :2005/05/10(火) 01:38:16
概念がさっぱり(・・?)なためどなたか教えてください。
下のコードすごく無駄に書いている気がするのですが、 スマートにまとめることはできますか? if a > 10 then a := -10; if a < -10 then a := 10; if b > 10 then b := -10; if b < -10 then b := 10; if c > 10 then c := -10; if c < -10 then c := 10; if d > 10 then d := -10; if d < -10 then d := 10; if e > 10 then e := -10; if e < -10 then e := 10; if f > 10 then f := -10; if f < -10 then f := 10;
関数化する a := EnsureRange2(a, -10, 10); b := EnsureRange2(b, -10, 10); c := EnsureRange2(c, -10, 10); ...
不思議な結果だな
35 :
デフォルトの名無しさん :2005/05/10(火) 12:30:54
Delphi6 でも使える64bit版のコンパイラってないですか? Borlandは出すみたいだけどまだ出てないとか、逆に出すつもりはないらしいとか何でも良いので(自分で作れとかは無しで)そういう情報を教えてください。 (公式版・非公式版などは問いません)
次のバージョンにβ版がつくらしい。 Delphi6で対応はありえないだろ。
>>32-34 変数a〜fが全く同じ目的の変数なら配列変数にしてはいかがでしょうか.
たとえばゲームなら複数いるそれぞれの敵のパラメータとか,
イベントか何かでの人気投票ソフトで各候補の得票数とかいう場合です.
TForm1 = class(TForm)
private
TekiNoBasho: array [1..6] of integer; // a〜fに相当.必ず目的に合わせて名前を変えること.
end;
procedure TForm1.Button1Click(Sender: TObject);
procedure fix(var n: integer);
begin
if n > 10 then n := -10;
if n < -10 then n := 10;
end;
var
i: integer;
begin
for i := Low(TekiNoBasho) to High(TekiNoBasho) do
fix(TekiNoBasho[i]);
end.
>>34 多分-10〜10の間でループするのでしょう.
ちょっとお尋ねします。 2次元の動的配列で、SetLength(V, y, x) とした場合、 後で x と y の値をどのようにして取得できますか? Vを関数の引数にして、関数内で x や y を参照したい場合です。 初心者の質問ですが、よろしくお願いします。
40 :
14 :2005/05/10(火) 16:04:25
>>15-16 遅くなりましたが、FillCharで思うように動いてくれました。
ありがとうござました
41 :
デフォルトの名無しさん :2005/05/10(火) 16:07:05
procedure TForm1.Button1Click(Sender: TObject); var V:array of array of integer; begin SetLength(v,3,7); Label1.Caption := IntToStr(Length(V)); Label2.Caption := IntToStr(Length(v[0])); end;
42 :
39 :2005/05/10(火) 16:56:43
>>41 なるほど。そうやって調べるんですか。
ありがとうございました。
43 :
35 :2005/05/10(火) 20:58:57
>>36 情報ありがとうございました。
自分は未だにDelphi6を使っているので(理由は単純に無償だからなんですが)、できればDelphi6の64bit版のコンパイラがほしいんです。
Delphi2005とか次バージョンで、無償版+64bit版のコンパイラがあればいずれ乗り換えたいと思っています(もちろんPC環境を64bitにするのが先ですが)。
44 :
デフォルトの名無しさん :2005/05/10(火) 21:42:14
>>37 ありがとうございます^^
ちなみに そのソフトやらはフリーウェアなんですか?
>>43 >できればDelphi6の64bit版のコンパイラがほしいんです。
ずいぶん簡単に言ってくれるじゃないの。
なんでDelphi6にこだわるのか意味不明なんだが。
そもそも「Delphi6の64bit版のコンパイラ」って、ワケワカメ
只版が欲しいだけだろ。読解力のない奴。
IEツールバーをDelphiを使って自作する方法を解説しているページが ありましたら教えてください。多分見ても作れないとは思いますが一応知りたいです。
おすすめの HTML parser コンポーネントありませんか? フォーマットの決まっている掲示板HTMLからスレ一覧とか、レスに分割したりしたいんですが
49 :
デフォルトの名無しさん :2005/05/11(水) 00:44:14
Delphiは書籍が少ないわけですが、どうやって学習してますか?
50 :
デフォルトの名無しさん :2005/05/11(水) 00:55:32
ヘルプを片っ端から読み倒す。 でもD7のヘルプって手抜き?情報量が以前より少ないみたいだ。
>>49 定期的にこの話題が出るけど、
「ネットから」
っていつも答えてる。
大体、検索すれば何とかなる場合の方が多いし。
日本のだけじゃなくて、英語のページから探と良いことあるかも。
なぜかロシア語がヒットしやすかったりすんだよなw
つまりDelphiはいろいろ不便なんだな
>>32 最大値と最小値によるけど、テーブルでやるのもいいかもしれない。
Table: array[-20..20] of Integer = (
10, 10, ...., 10, 10,
-10, -9, -8, ... 8, 9, 10,
-10, -10, ..., -10, -10);
54 :
デフォルトの名無しさん :2005/05/11(水) 02:27:24
Indy のことで、スレ違いかもしれませんが IdSMTP1.QuickSend(host,subject,mailto,from,body); で、メールを送信してるんですが、SMTPサーバからメッセージが帰ってこないとき タイムアウトさせたいのですが、うまい方法はないでしょうか? 同報メール送信ソフトを作っています。 よろしくお願いします。
ちょっと聞きますね。 TBitmapには便利なScanLineとかありますが、 ビットマップのデータのアドレスとか、必ずしも 順番に並んでないんでしょうか? たとえば、ScanLine[0]とScanLine[1]だけを取得し、 その差から他のラインのアドレスを計算して 処理すると都合の悪い場合があるんでしょうか? ある処理をMMX化したんですが、上の方法で アドレス計算してしまってるんで、はたして こんなんでいいのかと、ふと疑問に思ったもんで。
>>56 Delphi 5のGraphicsユニットのソースを見る限り,
ScanLineプロパティはBottom-UpとTop-Downの差を吸収した上で
計算した値を返しているようですから問題なさそうな感じです.
ただ速度的に問題がなければ動的配列にScanLineプロパティの値を
丸ごとコピーしておくのが安全だと思います.
59 :
56 :2005/05/11(水) 15:32:04
>>58 さっそくの回答、ありがとうございます。
そうか、ソースを見ればある程度は回答が得られたのか。
調べてくれて、ホントにありがとうございました。
60 :
デフォルトの名無しさん :2005/05/11(水) 17:22:50
>>58 >動的配列にScanLineプロパティの値を丸ごとコピーしておくのが安全
激しく無駄。第一線一本引いただけで古くなるし。なにが危険なのか?
>>56 Windowsのビットマップは下のラインから順番に格納されてるからScanline[Height-1]が先頭アドレスな。
>>60 危険だとは思っていません.より安全,というか確実ということです.
各ラインごとにScanLineプロパティを読むぶんにはそれが正しいと保証されているので.
動的配列へのコピーは同じラインの先頭アドレスを何度も読みに行く場合に速くなります.
1回しか読みに行かないならおっしゃるとおり激しく無駄です.
>>61 上のラインから格納しているビットマップデータもあるそうなのですよ.
>>58 のBottom-Up(下のラインから上に),Top-Down(上のラインから下に)
というのはこのことです.
63 :
デフォルトの名無しさん :2005/05/11(水) 20:27:54
教えてくださり。 TMemo の内容を TStringList にコピーしようとしています。 で、SL.Text := Memo1.Text とか SL.Assign(Memo1.Lines) とかすると、 最後に改行コードができてしまいます。Lines で1行づつ代入ってのも 試したのですが、1行がある程度長いとなぜか途中で改行されてしまいます。 いかが致したらそのままコピーできるものでしょうか。 Delphiは7 OSはWinXP です。
64 :
ゴッド :2005/05/11(水) 20:45:28
2バイトコードは大丈夫なんか?
>>63 TStringList.Textに代入したときに、末尾が改行で終わっていないと
自動的に改行を付けるようになっているみたいだね
内部はAddメソッドというかInsertメソッドだから仕方がないのかな
改行されて困るんならMemo型をそのまま使えば?
それと途中改行はWardWrapプロパティのせいだから
>>66 様 回答ありがとです。小出しな感じでやなのですが、他の TEdit と
くっつけて保存ってことをやりたかったのです。うーん、もちっと考えてみます。
あと、WordWrap を False にしても、1行がすごーく長いと途中で改行されるんです。
どーもディスプレーの長さで改行っぽい感じもするのですが気のせいかも。
Delphi6 Personalを使っています。 WindowsXPのLunaに対応させようとmanifestを作成したのですが ステータスバーやタブがうまく表現されません。 うまく表現させるにはどのようにすれば良いでしょうか。 何か良いコンポーネント等はありますでしょうか。
質問させてください。 var p :PChar; begin p := PChar(Memo1.Lines[1]; TreeView1.Items.Add(nil, p); end; のようにやると文字の後に点が2つ付きます。(CRLFなんでしょうか?) これを消すにはどうしたらいいでしょうか? StrMove(n, p, StrLen(p)-2); などもやってみたのですが、上手くいきませんでした。
>>62 > 動的配列へのコピーは同じラインの先頭アドレスを何度も読みに行く場合に速くなります.
>>58 >速度的に問題がなければ
矛盾してないか?
>>70 そのとおりやってみたけど、ゴミはつかないけど
>>70 この問題と関係あるか分らないけど、TMemo.Lines.Strings[i] は
呼ばれるたびにメッセージ送って取得してるから、文字列の実体が静的に存在してない。
だからポインタだけ取って置くのは危険。
ローカル変数に移してからやったほうがイイ。
>>72 そうですか…
試して頂いてありがとうございます。
>>73 よくわかりませんが、ありがとうございます。
高速化したかったんですが、String使うようにします。
素直にソースそのまま貼った方がよかったんでしょうか?
>>70 function Add(Node: TTreeNode; const S: string): TTreeNode;
なんでわざわざPCharなんか使うのかわからん。このSはツリー項目名となるのだから巨大なサイズの
テキストを渡すことはない。だから
> 高速化したかったんですが、String使うようにします。
もナンセンス。
77 :
68 :2005/05/12(木) 00:54:41
>>76 レスありがとうございます。何故かインストール後コンポーネントタブに追加
されないのですが色々やってみようと思います(´・ω・`)
78 :
76 :2005/05/12(木) 01:05:50
>>77 XPというタブがコンポーネントに追加されていないでしょうか?
その中の ThemeManager というものをメインフォームにでも貼り付けてください
後は勝手にすべてのコンポーネントがTheme対応になります(一部除く)
79 :
68 :2005/05/12(木) 01:10:00
>>78 追加されていません^^;
6 Personalでも利用できるようなのできっと自分が何か間違えてるのだと思います(´・ω・`)
80 :
76 :2005/05/12(木) 01:11:32
インストールディレクトリを見たら D6Personal用に注意書きがありました。 Theme Manager\Delphi\Delphi 6 Personal.txtを見てください。
>>57 >その不便さを補ってあまりある魅力があるということでもあるのですよ.
と、思う人が少ないからいつまでもマイナーなわけだが。
83 :
68 :2005/05/12(木) 02:19:15
>>80 ありがとうございます。
書かれている事を実践してみたところ、XPというタブが追加されました。
早速ThemeManagerを貼り付けてコンパイルしてみたところ、何故か
反映されませんでした(´・ω・`)
う〜む、明日起きたらまたやってみたいと思います。
84 :
76 :2005/05/12(木) 03:01:18
>>83 先ほどのホームページから Windows XP manifest resource (WinXP.ZIP)をダウンロードしてください
その中の winxp.res をプロジェクトに加えてください。
これでテーマ対応になると思います。
winxp.resだけでも TButton等はテーマが反映されます。
TBitBtn等はThemeManagerを貼り付けておく必要があります。
85 :
68 :2005/05/12(木) 03:16:50
>>84 ありがとうございます。きちんと望み通りの動作をしました。
これで心置きなく作れます!
76さん長々とお付き合いいただき本当にありがとうございました(つД`)
>>67 すごく長いと改行するってメモ帳でも同じ動作をするのでWindows側の制限ぽいが
(ちなみにMemoは1K、RichEditは4Kを超えると改行@D7)
それとTStringListに代入した時点で最後に必ずCRLFが付くことがわかったのだから
別のものとくっつけるときは(長さ-2)だけくっつけるようにすればいいっしょ
87 :
デフォルトの名無しさん :2005/05/12(木) 11:12:08
教えてください。 c:char; s:string; の場合で c:=chr($00);と等価の式を s:='00';を使って実現するにはどうしたらいいでしょうか?
c := chr(StrToInt('$'+s));
89 :
87 :2005/05/12(木) 11:39:58
>>70 プロパティの値をポインタに保管しているのがいけないのでしょう.
少なくとも配列プロパティの読み出しは内部的には関数です.
関数の戻り値はすぐに消滅する変数のようなもので
この場所を覚えておいても意味がありません.
(ある程度,あるいは完全に原形をとどめていたりすることがあるのは
生物が死んでもすぐに消滅しないのと同じです)
ポインタを使うのでしたら指している実体が変数などとして存在していなければなりません.
一方,string(AnsiString)型は同じ型同士で変数に代入しても文字列データそのもののコピーは行われません.
速度の心配は不要でしょう.よってstring型を使うべきです.
(詳しくはヘルプの『長い文字列』をご覧下さい)
>>71 そうかもしんない(汗),すいません.
>>56 は多分上から1ラインずつ読み書きするのでしょうから,
ScanLineの値を動的配列にコピーする意味はありませんね.
91 :
デフォルトの名無しさん :2005/05/12(木) 17:26:21
メインで生成したスレッドにメイン内の変数を渡したいのですが どうすればいいのでしょうか? 検索処理高速化の為に並列化(スレッド化)したい! 1つの文字列中を20個の単語で検索する場合。 検索対象=STR 検索単語=s[0],s[1],s[2]...s[19]とし wordfind.pas(スレッドオブジェクト)に STRとs[x]の内容をわたせればいいのですが。。 //--メイン--- for i := 0 to 20 do begin wthread[i]:=wordfind.Create(False); //どうやって記述するの? wthread[i].Resume; end; --スレッドオブジェクト-- procedure wordserch.Execute; var STR_t,s_t:string; begin { ToDo : スレッドとして実行したいコードをここに記述 } end;
>>91 スレッドもクラスだから、プロパティ作ってそこにつっこめば?
93 :
91 :2005/05/12(木) 18:26:36
>>92 >プロパティ作ってそこにつっこめば?
すみません。具体的にどこにどう記述するのでしょうか?
場所はwordfind.pasのtype節ですか?
コンストラクタのオーバーライドじゃだめなん? んで、プライベートな変数に保持しておく。
type TWordFindThread = class(TThread) public property Text: String read FText; ... wthread[i] := TWordFindThread.Create(FALSE); wthread[i].Text := Str; てな感じか。 ただし検索スレッドを20個も立ち上げるのは効率悪すぎ。 うまく工夫してCPUが物理的にさばけるスレッドの個数に抑えるのが無難。 Pen4なら1本、Pen4HTなら2本、デュアルCPUの構成なら4本とか。 # HTだと並列化しても速くならんかも・・・
TWordFindThread は wordsearch に読み替えてくれ
コンストラクタの方がスマートじゃないか? type TMyThread = class(TThread) private FHensuu1: Integer; FHensuu2: string; public constructor Create(nandakke: Booelan; hensuu1: Integer; hensuu2: string); ... constructor Create(nandakke: Booelan; hensuu1: Integer; hensuu2: string); begin inherited Create(nandakke); FHensuu1 := hensuu1; FHensuu2 := hensuu2; end;
好きなほうでいんじゃね
>>97 破棄せずに再利用できなくない?
必要ならコンストラクタでもプロパティでも両方使えるようにしてる。
ケースバイケース コード量と利便性のトレードオフ
101 :
91 :2005/05/12(木) 21:23:42
速くなるかどうかはCPUのコア数しだいだぞ。 一個しかなければいくらスレッド分けても速くはならない。
Windows95でExtractFileNameを使うと必ず大文字で取得されてしまうのですが 小文字や大文字をその通りに取得する事は可能でしょうか。
Delphi4の頃のソースを再利用の為に解析しろって言われたんだけど、 試しにコンパイルしてみるとVarIsNullとかのバリアント系識別子が軒並みエラーになる。 使用する環境に入ってるのはDelphi7。 当然漏れの作ったソースじゃなく、漏れ自身、数年ぶりのDelphiの仕事。 取り敢えずusesにSystem加えたりとかしてみたんだけど駄目。 VarIsNullだけならまだ回避出来る物のVarTypeとかってなるともうどうして良いやら。 Variantに関して何か変更とかあったの? 代替の識別子とかってあるの? コンパイル出来ないとどんな動きのアプリなのかイメージが掴みにくいです。 漏れの凡ミスであればある意味不幸中の幸い。解決策、誰か教えて下さい。
105 :
25 :2005/05/12(木) 22:17:09
おそれすスマソ
>>29 初心者なのでわからないのですが、どの部分が二バイト文字への変換なんでしょう?
>>104 > Variantに関して何か変更とかあったの?
色々とあったと思う。Delphi6 What's Newあたりをダウンロードして
読むべし。
>>104 現在Variant関連は uses にVariantsを追加する仕様になっている。
どのバージョンからだったかは覚えていないが。
っていうか VarIsNulllやVarTypeでヘルプを引けばわかると思うが・・・
あのー、Delphiでhtml文書を(画像として)縮小表示する なんてことは可能なんでしょうか? いったん普通に表示させて、その画像を取得後、 縮小処理なんてプロセス以外にない? できれば、背後で画像を作成したいんですが。。。
>>103 マジレスしていいんだよな…?
オレの環境(Windows95)じゃ、そんなことないけど。
>>108 1. TBitmap 作って、
2. その Canvas にTextOut して、
3. 表示したいものに縮小コピー、かな。
そんな面倒なプロセスでも無いっしょ
( ゚Д゚) ハァ?
>>110 111じゃないけど、「ハァ?」って書かれてもしょうがないな。
111に同意見。
114 :
103 :2005/05/13(金) 09:47:20
>>109 マジですかorz
今手元にWin95が無いので滅茶苦茶単純化してやってみようと思います。
もとデータがちゃんとしてるのを確認してるんだろうな
116 :
103 :2005/05/13(金) 09:54:49
>>115 漏れですか?もちろんしてます。
つーか直前で取得して代入して95だけで上手くいかないから
ShowMessageで確認したんですよ〜。
何故なんだろorz
117 :
104 :2005/05/13(金) 12:07:42
>>107 了解。解決しました。ありがとうございます。
ぶっちゃけ、ホント凡ミスでごめんなさい。
ブランクがあってヘルプに対する漏れの依存性が薄れていたのと、
VarをVerに間違えて検索していたのが困惑の要因でした。orz
Delphi7でヘルプにサードパーティ製コンポーネントのヘルプファイルを組み込みました。 ヘルプを開いて、キーワード検索ではそれらのヘルプが表示されますが IDEのコード上ででF1キーを押しても、ヘルプは起動しますが、キーワードが空白のまま表示されます。 どうやったらいいですか。
>>112 わー、ありがとうございます。
Torryのページのは、僕が希望してたそのものです。。
さっそく使わせてもらいます。
サウンド関連のTipsやマルチメディアAPIについて Delphiを使って詳しく解説してるサイトはないですか? C/C++は結構あるんですけど、Delphiは情報が少なすぎて…
121 :
25 :2005/05/14(土) 22:00:19
おそれすスマソ
>>29 初心者なのでわからないのですが、どの部分が二バイト文字への変換なんでしょう?
122 :
デフォルトの名無しさん :2005/05/14(土) 22:10:33
とてつもなく初歩的な質問なのですが、同ディレクトリ内に存在するファイルを指定するとき、 自身のパスを取得してc:\hoge.txtのように絶対パスで指定するのと./hoge.txtのように相対パスで 指定するのってどちらが良いのでしょうか。どちらが一般的でしょうか。
>>120 探せばあると思うけど、C/C++をDelphiに変換した方が早い。
126 :
123 :2005/05/14(土) 22:51:53
>>125 早速のレスありがとうございます。
どちらにしようか迷っていたのですが相対パスにする事に決めました!
同ディレクトリってのが、実行ファイルと同じディレクトリって意味なら相対パスは危険なかほりがする。
128 :
123 :2005/05/14(土) 23:30:44
>>127 ('A`)ぬーん
マジですか〜。どのようにマズイのか教えていただけないでせうかorz
どっちでも良いなら、悪いことイワンから絶対にしとけ いつの間にかカレントディレクトリが移動してることだって十分ある
>>126 TOpenDialog などを使っていてカレントディレクトリが変わるなら
相対パスはバグの元になるのでお勧めしない。
(プロパティ弄れば変えないようにもできるけど)
ショートカットの設定で起動時のカレンドディレクトリ変えられるし、 OpenDialogでファイル開いても変わるしね
平たく言えば相対パスの基準ディレクトリは、実行ファイルのあるディレクトリじゃないというこっちゃ
133 :
123 :2005/05/14(土) 23:39:19
皆さんどうもありがとうございます。 hoge.txtと./hoge.txtって同じ事になるのでしょうか。 てっきり後者の場合はカレントディレクトリを無視して必ず実行ファイル 直下を指定してるモソだと思い込んでいましたorz 絶対パスで指定する事にします!
>>121 var
eByte: ByteArray;
S :string;
XorEnCode('Ord関数やChar関数のことはわかってるの?','ぱすわーど',EncodeByte);
S := XorDecode(eByte,'ぱすわーど');
とすると
S = 'Ord関数やChar関数のことはわかってるの?'
となる(はず)。
> 'Ord関数やChar関数のことはわかってるの 'Ord関数やChr関数のことはわかってるの スマソ。しかしXorDecodeの for i := 1 to LS do result[i] := Char( ba[i-1] xor Ord(Password[(i-1) mod LP +1]) ); 部分はChar(キャスト)でいい。
すみません。 TListViewの各ItemのCheckedの変化に対応したいんですが、 どのようなイベントを使うといいのでしょうか? よろしくお願いします。
>>136 OnChanging/OnChange
何かしら工夫しないと選択状態とかフォーカスの変化と区別できないけど。
チェックボックスの変化だけを表すメッセージ自体が無いらしい。
138 :
デフォルトの名無しさん :2005/05/15(日) 00:27:44
渡された文字列にXOR演算をかけるDLLを 下記のように作ったところ、XORをかけて、もう一度かけた 時に元に戻らなかったり(一部の文字が化けてしまいます) 場合によっては不正な処理ということで強制終了してしまいます。 function MyXor(str: PChar): PChar; stdcall; var i, j, k: Integer; begin Result := ''; j := length(str); k := 16; for i := 0 to j do begin str[i] := Chr(Ord(str[i]) xor k); end; Result := str; end; おそらく書き方に問題があるのではと思いますが どのように直せば良いでしょうか?
>>138 jの値がおかしい
for i := 0 to j do // 0..j
140 :
25 :2005/05/15(日) 00:46:26
>>138 × for i := 0 to j do
○ for i := 1 to j do
Delphi(というかPascal)の文字列は、1から始まる。
>>29 もそうなってる。
PChar使ってるから for i := 0 to j-1 do ではないかな。それにしても Result[j] := #0 しなくていいのだろうか?
>>142 >Result[j] := #0
>しなくていいのだろうか?
参照渡しの中を直接いじっているだけで長さも変わっていないからいいんじゃない。
>>138 細かいことを言えば
>j := length(str);
は良くない。
Length()を使うとstr:PCharがいったんstringに変換されてしまう。
PCharで使うならここは
j:=StrLen(str);
としたほうがよい。
ただしどちらの場合も Xorによって #0が出ないことが前提。
こういうことを行う場合は PByteと Lenを渡すようなほうがベター。
145 :
138 :2005/05/15(日) 03:15:35
ありがとうございます。 まだ試行錯誤中ですが、何とか出来そうです!
>>137 ありがとうございます。
OnChanging/OnChangeって、いろんな状況で呼び出され、
区別するのが大変ですね。がんばってみます。
プロシージャの中のプロシージャなんですが、 procedure test; var i,h:integer; procedure nakami; begin h:=i;//※iが心配なんです。 end; begin for i:=0 to maxint do nakami end; この場合 procedure nakami;を procedure nakami(const i:integer);とやらなくても大丈夫でしょうか?
大丈夫
ありがとうございました。
150 :
デフォルトの名無しさん :2005/05/15(日) 10:53:08
Delphi6でAnsiStrComp('1〇〇%','1〇〇〇%') の返り値が 0 なんですが、なぜですか? 日本語のロケールだと'〇'は無視されてしまうということですか?
>>150 ホントだなあ。引数がstring型の AnsiCompareStr もいっしょだ。
両方ともWinAPIのCompareStringをつかっているからこれが原因だろうか?
k :int; d :string; d[2*i]:=inttostr(k); これで、整数型のintをstringの中に入れようと思ったのですが、 Charと Stringには互換性がありません とでてしまいます。 この場合どうしたらいいのでしょうか?
>>124 やっぱりそうですか…。ありがとうございました
>>152 半角一文字に '1234' とか入れようとしても無理だろ。
>この場合どうしたらいいのでしょうか?
どうしようもない。
s := inttostr(k); if k < 10 then d[2*i] := s[1] else d[2*i] := '0'; d[2*i+1] := s[2]; StringをCharにばらしてやればいい 文字列sでs[n]とやればn番目のChar型文字を得られる
>>144 >Length()を使うとstr:PCharがいったんstringに変換されてしまう。
へえ、そうなんだ。これ知らなかったです。まあPChar型の文字列を
カウントするのにLengthを使うことは普通はないとは思うけど。
アプリケーション間でメッセージをやりとりしたい時ってどうすればいいでしょうか。 具体的には、自前で作ったアプリケーションを複数起動して、そのアプリケーション間で、レコード型の座標情報を送受信したいのです。 PostMessage で送信すればいいのでしょうか・・。
>>157 試してないけどこんな感じかな
送り側
procedure TForm1.Button1Click(Sender: TObject);
var
hndl: THandle;
begin
hndl := FindWindow(nil, 'アプリケーション名');
if hndl <> 0 then
PostMessage(hndl, 3333 , 0 ,0);
end;
受け側
const
Mymsg = 3333;
type
private
procedure GetMyMessage(var Message: TMessage); message MyMsg;
end;
procedure TForm1.GetMyMessage(var Message: TMessage);
begin
ShowMessage('メッセージ来たよ')
end;
>>158 ありがとうございます。
hndl := FindWindow(nil, 'アプリケーション名');
の部分では、1つのプロセスしか掴めないようです。
3つ、4つのプロセスが起動している時に、全てを取得する方法はありますでしょうか。
また、自分自身のハンドルを取得したりしないでしょうか。
その場合、 if Application.Handle = hndl で判定可能でしょうか。
EnumWindowで列挙して名前で判定
>>159 メモリマップドファイルとかの共有メモリにプロセスリストとウィンドウハンドル格納しておくのがスマートな実装と思われ。
(起動時に共有メモリオブジェクトの存在をチェック>(なければ作成>)自身のウィンドウハンドルを追加>終了時には自身の情報を削除)
ポーリングが必要になるからそれほどスマートでもないと思われ。
163 :
159 :2005/05/16(月) 13:48:41
度々すみません。TMessageは、Cardinalのみしか入らないようなのですが、 たとえばレコード型へのポインタを入れて送る事は可能なのですか?
FastNetもしくはIndyを使ってのメールのUIDLの取得方法を教えてください
そのまま使えるDLLかなんかがあったはず。 少なくともC/C++コードがあるからbccでコンパイルすればリンクできるよ。
>>167 そのページのどれを使いたいのかわからないけど、mt19937.pas にはサンプルあるからその通り使えばいいのでは。
1〜10の整数なら Trunc(1.0+9.0*x.real1) かな?
あ、Trunc(1.0+10.0*x.real2) かも
>>163 アプリ間ではメモリ空間が異なるのでポインタではデータのやり取りは出来ない。
そういう用途にはWM_COPYDATAを使用する。
用途によっては共有メモリより簡便
172 :
デフォルトの名無しさん :2005/05/16(月) 21:05:15
[エラー]指定された引数で呼び出すことのできるオーバーロード関数 'xxx' が 定義されていません。とでてしまいました。 オーバーロード関数って一つの名前で複数の処理が可能な関数のことですか? で、どこにどう定義すればいいのでしょうか? indy9のIdUDPClientを使用してまして Form1.IdUDPClient1.SendBuffer()の場所でエラーがでます。
IntToStr(0.2)なんて書くとDelphiは 「あれ?IntToStrは引数に整数を取るはずだぞ? そうか!IntToStrをオーバロードして浮動小数点を引数に取るIntToStrを 作ったのか。よしよし」と勝手に思い込む で、いざ翻訳を始めると「オーバーロードされてないじゃん、ウソツキ!」と怒る 要するに引数の型が違うってこと
174 :
デフォルトの名無しさん :2005/05/16(月) 21:38:37
>>173 わかりやすい解説ありがとうございました。
そして引数の型間違ってましたorz
初心者にやさしいエラーにしてほしいですね。。
>>167 Mersenne Twisterは別に速いのが売りなんじゃないよね。
速いだけなら従来の線形合同法のほうがはるかに速いわけだし。
要は疑似乱数として周期が極めて長く一様なランダムさをもった良い乱数って話なだけでしょ。
だけでしょ。って・・・・・よい乱数の発生はそれだけ難しいのよね
フィボナッチ数列を出力するのを書いてるんですが、f(90)あたりで符号が反転してしまいます。 extendedにしてfloattostrを挟むことで解決したんですが、指数表記が気に入らなくて・・ これって取り去れるものなんでしょうか?
Ruby使え
多倍長整数ユニット拾ってくるとか。どこにあるか知らないけど
MonthCalendarコントロールで日付ごとに色を付けるにはどうすればよいのでしょうか? Boldにする方法はわかったのですが、それ以外の装飾をつけるにはどうしたらよいのでしょうか?
できない
182 :
デフォルトの名無しさん :2005/05/17(火) 17:12:35
TTimerについて質問です Timer.Intervalが小さく(300ぐらい)て Timer.OnTimerイベント中にDBをゴリゴリいじるような 時間の掛かる処理を書いた場合に イベントが続けざまに来ることがあるのでしょうか? もしそうだとしたら procedure TForm1.Timer1Timer(Sender: TObject); begin Timer1.Enabled := False //時間の掛かる処理・・・・ Timer1.Enabled := True end; とタイマーイベントがダブらないように書いたほうがいいのでしょうか
183 :
デフォルトの名無しさん :2005/05/17(火) 18:18:12
6.0PERSONALでStringGridでマウスのユニバーサルスクロールを 使えるようにするにはどうしたらいいでしょうか?
>>182 たぶん300msecを超えるとメッセージが飛んでくる。イベントを抜けたらまた入ることになるので、
その処理はあった方がいい。
できるのであれば、スレッドにした方がいいのでは?
>>29 ありがd。おかげで簡単なファイル暗号化ツールができました。
>>182 発想逆にして
while ProcessDB do
Application.ProcessMessages;
にするとか。処理はこっちのがシンプルになるかもね。
187 :
デフォルトの名無しさん :2005/05/18(水) 08:52:36
Personal 6 を使っています。 付箋紙や時計やカレンダーソフトなどによくあるような、 Formをデスクトップに貼り付けるという動作をしたい場合、どうすればいいかがわかりません。 どこを弄ればいいのか…あるいはどんなコードを書けばいいのか、お教えください。
>>187 { Private 宣言 }
public
procedure WMWindowPosChanging(var Msg: TWMWindowPosChanging);message WM_WINDOWPOSCHANGING;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.WMWindowPosChanging(var Msg: TWMWindowPosChanging);
begin
inherited;
Msg.WindowPos.hwndInsertAfter := HWND_BOTTOM;
end;
189 :
187 :2005/05/18(水) 10:19:37
>>188 ありがとうございます!それを元にやってみます。
ディレクトリ内のファイル名を一つづつ表示したいのですが、 どうすればファイル名を取得できますか?
FindFirst
ありがとう
193 :
デフォルトの名無しさん :2005/05/18(水) 16:52:36
D7にはクイックレポートはついてないみたいですが、皆さんはRaveを使っていますか? いまいち使い方がよく分からなくて未だD6と使い分けの状態です。D6からD7への移行はどうされましたか?
194 :
RAVEが憎い :2005/05/18(水) 18:10:49
193です、付いていないのは2005からでした。 Raveを使われてる方に質問です。 RVDSでデーターセットを指定して、デザイナーで新規データーオブジェクト、ダイレクトデータービュでDATAVIEW1を作っても、先頭レコードの先頭フィールド(INDEX)しか見えません。 フォーム上のVCL、DBGridなどからは問題なく接続できています。 詳しい方おられましたらよろしくお願いします。
195 :
デフォルトの名無しさん :2005/05/18(水) 21:23:52
質問です。環境はDelphi6Personalです。 フォームのBorderStyleをiniファイルに保存したい場合、 ReadBoolやReadStringやReadIntegerなどを使うと、TBorderStyleと互換性が無いって怒られます。 どのように指定すればいいのでしょう?型を変えるにしても、何型やら… ヘルプを見たりググってみても出てこないので…。
Ord
if文
199 :
195 :2005/05/18(水) 23:40:43
if文を使ってやる方法は既に試しましたが、できなかったんです。 エラーは吐かないものの、iniファイルにはそこの部分だけ出力されてません。 今気づいたんですが、もしかして、iniファイルのセクションって自由に作成・指定できるわけではないんですか?
WriteInteger('Section', 'Ident', Integer(Form1.BorderStyle)); Form1.BorderStyle:=ReadInteger('Section', 'Ident', Integer(Form1.BorderStyle)); エラーチェックも忘れずにな
ミスッタ Form1.BorderStyle:= TBorderStyle(ReadInteger(省略)) つーか、列挙方は簡単にIntegerにキャスト出来る
202 :
195 :2005/05/18(水) 23:57:15
203 :
デフォルトの名無しさん :2005/05/19(木) 01:55:00
ScrollBoxの中にTJPEGImageでjpegを表示させて ウインドウより大きい画像の場合スクロールバーで操作できるようにしたいのですが 実際に画像を表示させるとスクロールバーが出てきてくれません。 スクロールバーを出すにはどうしたらいいのでしょうか?
>>203 AutosizeっぽいプロパティがTrueになってるか確認してみて。
205 :
203 :2005/05/19(木) 02:02:34
>>204 AutoSize、AutoScroll共にTrueにしてみましたがスクロールバーは出ませんでした
ごめんなさい
206 :
204 :2005/05/19(木) 02:05:55
>>205 TJPEGImageの方のAutosize
207 :
204 :2005/05/19(木) 02:08:21
すみません。TJPEGImageというより画像を表示させてるコンポーネントのプロパティです。 TImageかな?たぶん。
208 :
203 :2005/05/19(木) 02:11:56
TImageのAutoSizeもTrueです
209 :
204 :2005/05/19(木) 02:13:07
AlignはalNoneになってますか。
210 :
203 :2005/05/19(木) 02:21:47
>>209 両方alCliantでした
ScrollBoxとTImageのAlignをalNoneにしたらスクロールバーが出てきました!
少し変な気もしますがここからは自分で頑張りたいと思います
ありがとうございました
211 :
デフォルトの名無しさん :2005/05/19(木) 06:34:50
Delphi6 personalを使っています。 Delphian Worldで配布されていたSusie Plug-in 読込コンポをインストールした後 コンポーネント-ActiveXの取り込みからTWebBrowserをインストールしたらSusieのコンポが消えてしまうんですが これらのコンポを共存させる方法があれば教えてください
212 :
デフォルトの名無しさん :2005/05/19(木) 09:18:01
ヒントを複数行にすることは可能でしょうか?
>>212 .Hint := 'aaa'#13'bbb';
215 :
デフォルトの名無しさん :2005/05/19(木) 12:45:01
Explorerのフォルダやファイルを右クリックしたときに出る コンテキストメニューを自作のアプリで出したいのですが そういったライブラリはありますか?
TPopUpMenuを使うと幸せになれるかも
ギャグ?
218 :
デフォルトの名無しさん :2005/05/19(木) 20:43:39
TWebBrowserでブラウザを自作しているのですがEnterキーが効きません どういったコードを書けばEnterキーが効くようになりますか? DelphiのバージョンはDelphi6 personalです、どなたか教えてください
219 :
デフォルトの名無しさん :2005/05/19(木) 21:24:03
FormにButtonを敷き詰めるように縦に3つならべて、 FormがリサイズされたときにButton同士が重ならないように 縦の比率を保って追従していくというのを、 オブジェクトインスペクタの設定等のみでコードを書かずに実現できますか?
パネル
222 :
218 :2005/05/19(木) 22:17:22
>>221 大変申し訳ないんですが、日本語のサイトでお願いできませんでしょうか
ギャグ?
というか、
>>221 とかページ全部コードと言ってもいいくらいなんだから
英語で何か問題あるのか。
答えがでーんと載ってるだけだな。何語であっても問題ないページじゃまいか。
227 :
RAVEが憎い :2005/05/19(木) 22:44:14
解決しました、フィールド名の問題でした。
228 :
219 :2005/05/19(木) 23:03:40
>>220 パネルの中にボタンを並べるのですか?
それともボタンごとにパネルを作ってパネルを並べるのですか?
どちらであるにしても、ボタンを縦に並ばせるには
どのプロパティに注目すればいいのでしょうか?
>>219 無理。
Delphiには賢いレイアウトマネージャはありましぇーん。
自称最強の開発環境はもうとっくに進歩を止めてます。
230 :
219 :2005/05/19(木) 23:28:38
>>229 了解しました。
色々と試してみましたが、自分でもそのように思います。
結局alCustomいじるですか…。
Delphiにはハッシュによる連想配列が標準で付いていないようですが、 デファクトスタンダードな STL みたいなライブラリとかってあるんでしょうか? おすすめがあればご教授ください。
DelWiki漁れ
質問です。 実行時に、タスクバーにタスクバーボタンを表示しないようにするには、どうしたらいいんですか? ググって調べてたら、プロジェクトファイルに Application.ShowMainForm := False; と記述するとか出てきましたが、それではフォームごと消えてしまいます…。 フォームを表示しつつ、タスクバーから消したいんです。 よろしくお願いします。
>>233 procedure TForm1.FormShow(Sender: TObject);
begin
ShowWindow(Application.Handle, SW_HIDE);
end;
では?
235 :
233 :2005/05/20(金) 02:35:42
>>234 それでやってみたら出来ました!ありがとうございます。
>>236 解凍できないなんて事はないからアドバイスのしようがない。
239 :
238 :2005/05/20(金) 11:32:54
>>236 足りないソースがあるみたいですね。
想像で作るか、別なもの探したほうが良さそう。
ScrollOppositeってなんて読むの?オッポサイト?
オポジットも読めないのかよ。
えっと、初心者丸出しで恥ずかしいんですが。。。 スレッドをFreeOnTerminate:=trueで作って スレッド内である条件でexecuteを終了した場合、 実際にスレッドが開放された時点をメインスレッド内から どのようにして検出したらいいんでしょうか? よろしくお願いします。
>>244 日本語が微妙に理解しにくいんだが、
要はFreeOnTerminateで自動解放されるThreadの
終了タイミングを知りたいということなのか?
だとしたら、ThreadのdestructorでSynchronizeでメインスレッドの
処理を呼び出したり、メッセージを送ればOKなような
>>244 FreeOnTerminate:=Falseでスレッド作って
スレッド呼び出し元で
while not Executeメソッドが終わるまで do
Application.ProcessMessages;
と書いたほうがよさげな気がする
249 :
デフォルトの名無しさん :2005/05/20(金) 21:34:48
質問です。 PageControlを使用し、ユーザーが自由にタブを作成、削除できるようにしたいのです。 例えばタブブラウザやタブエディタのように。 その場合、PagecontrolでTabSheetを作成するということでしょうから、とりあえず procedure MakeSheet (Sender: TObject); var TabSheet:TTabSheet; RichEdit: TRichEdit; begin TabSheet := TTabSheet.Create(PageControl1); TabSheet.PageControl := PageControl1; TabSheet.Caption := '***'; RichEdit.Create(TabSheet); end; と書いているわけです。コンパイルは通るのに、まっさらなTabSheetが出来上がります。 そして何かいろいろ足りない気がします…ご教授くださいorz
>>249 RichEdit.Parent:=TabSheet;
この一行を追加すれば万事OK
"Owner"と"Parent"は全く違う概念だが、
これで理解出来るかな?
ん?なんだ"RichEdit.Create(TabSheet)"ってのは… これじゃコンパイラに怒られるだろ RichEdit:= TRichEdit.Create(TabSheet); だな
252 :
249 :2005/05/20(金) 21:52:27
>>250 自分、Ownerについて勘違いしていたようですね。ありがとうございます。
それでやってみます。
>>251 素直にコピペすりゃよかったわけですが、単なる書き間違いですorz
>>246 何か分かりにくい文章ですみません。
実はあるクラス(通信関係)を作ったんですが、そのクラスは
非同期で通信を行うスレッドを使います。
アプリケーション終了時にクラスを破棄するとき、当該クラスで
スレッドに対して通信切断と終了するように指示します。
で、このときスレッドが実際に開放されるまで時間がかかるようで、
さきに当該クラスが開放されてしまい、タイミングによって、
スレッドがクラスにアクセスして違反が起こります。
それで、このクラスの終了時に、スレッド開放まで待つ効率的な処理が
ないかと。。。
そうですね、スレッド自身が終了をクラスに伝えるまで待てばいいんですね。
ありがとうございました。
254 :
デフォルトの名無しさん :2005/05/21(土) 02:02:42
Memo1.Lines := OpenDialog1.Files と書いてファイルのパスをMemoに書き込んでいるのですが 二回目にファイルを読み込むと最初に読み込んだファイルのパスがすべて消えてしまい そこに新しくパスが書き込まれてしまいます 最初に読み込んだパスの最後尾に続けて文字列を書き込むにはどういったコードを書けばいいのでしょうか?
>>254 opendialog1.Execute;
Memo1.Lines.Add(opendialog1.FileName);
では?
257 :
254 :2005/05/21(土) 02:28:29
>>256 あ、addでよかったんですね…ありがとうございます
解決しました
DirectXのX形式のデータを作れる関数やライブラリ、クラスってありませんか?
259 :
デフォルトの名無しさん :2005/05/21(土) 22:13:40
論理積について質問です。 恐ろしく初歩的な質問で申し訳ないのですが… procedure 〜 begin if A=B and C=D and D=E then begin F:=G end else begin showmessage('*****'); end; end; としたときに、何故かF:=GとShowmessageが両方実行されてしまいます。 加えて、A=BであってC<>Dであっても、F:=Gが実行されてしまいます。 これは文法が間違っているのか、あるいは他の部分が間違っているのか、 ご教授ください。
それでコンパイラに怒られてないのか? 少なくともオレの環境だと if (A = B) and (C = D) and (D = E) then としないと駄目だ あと、一応試したがちゃんと期待通りの動作をする 文法ではなくコードに問題があるんじゃないか?
F:=G は本当は実行されていない、に100モナー。
俺も括弧で括らないと怒られる。
TListBoxを使っているのですがTListViewにあるOnChangeイベントみたいにTListBoxのアイテムの移動を通知することはできないでしょうか?
>>263 分からないけどTListViewだと駄目な理由って何かあるの?w
265 :
259 :2005/05/21(土) 22:34:58
Personal6ですが、括弧なしでも怒られません。 F:=Gも実行されています。 試しに同じ場所に判り易いShowmessageとか入れても、両方実行されます。 if A=B and C=D and D=E の方は、むしろ条件が一つでも満たされれば実行されるような感じ。 or じゃなくてand なのに…。 やっぱりコードが悪いんですかね? ここでいうAやBやCなどに入ってると、動作がおかしくなる型条件などはありますか?
266 :
263 :2005/05/21(土) 22:35:40
アイテムの移動→選択アイテムの変更 すいません。こうでないと表現が正しくないですね。
>>265 その部分がコメントになってるんじゃないのか
if error! A=B and C=D and D=E
とかやってコンパイルエラー出るか?
269 :
263 :2005/05/21(土) 22:40:02
>>264 TListViewのカラムの領域って消せない物かと思っていましたが消せるんですね。
ありがとうございました。
if A=B and C=D and D=E then は × if (A=B) and (C=D) and (D=E) then ○ if A=(B and C)=(D and D)=E then になってるとか。
>>259 それだと
A = (B and C) = (D and D) = E
と解釈される。
=が左結合だったか右結合だったか忘れたけど、
AとEのどっちかが論理型だったら文法的には正しいとみなされそうだな。
ヘルプ↓ @, not1 位(最高) *, /, div, mod, and, shl, shr, as2 位 +, -, or, xor3 位 =, <>, <, >, <=, >=, in, is4 位(最低) 一見すると不要と思われる状況でもカッコが必要な場合があります。次に例を示します。 X = Y or X = Z この式が次のように解釈されることを意図して書かれたものだとしても, (X = Y) or (X = Z) カッコがなければ,コンパイラは演算子の優先順位の規則に従って次のように解釈します。 (X = (Y or X)) = Z このため,Z が論理型でない限り,コンパイル時にエラーが発生します。 checkbox6.Checked:=False; checkbox7.Checked:=False; if checkbox1.Checked=checkbox2.Checked and checkbox3.Checked=checkbox4.Checked and checkbox4.Checked=checkbox5.Checked then begin checkbox6.Checked:=True; end else begin checkbox7.Checked:=True;
273 :
259 :2005/05/21(土) 23:01:48
procedure TForm1.CellClick(X, Y: integer); begin cell[X,Y] := not cell[X,Y]; //上 if Y-1 >= 0 then cell[X,Y-1] := not cell[X,Y-1]; //下 if Y+1 <= 4 then cell[X,Y+1] := not cell[X,Y+1]; //左 if X-1 >= 0 then cell[X-1,Y] := not cell[X-1,Y]; //右 if X+1 <= 4 then cell[X+1,Y] := not cell[X+1,Y]; if (cel[0,0] = True) and (cell[0,1] = True) and (cell[0,2] = True) and (cell[0,3] = True) and (cell[0,4] = True) and (cell[1,0] = True) and (中略) (cell[4,3] = True) and (cell[4,4] = True) then ShowMessage('****'); StringGrid1.Visible := False; StringGrid1.Enabled := False; end; (var cell:array[0..4,0..4] of Boolean)←グローバル (一部ですけど)問題の部分はこんなかんじです。所謂ライツアウトってゲームを作ってみてるわけです。 クリア後のイベントのはずが、ワンクリックで実行とかわけわかめ。 上の書き込みの例で何故かF:=GとShowmessageが両方実行されてしまうというのは別の関数ですので除外して考えていただきたい…。
if (cel[0,0] = True) (略) then ShowMessage('****'); ←これと StringGrid1.Visible := False; ←これが同時に実行されるって事? StringGrid1.Enabled := False; end; if...thenの後はbegin...end;でくくらないと一番上の条件(ShowMessage)しか 処理に入らないよ。
(cel[0,0] = True)はcell[0,0]だけでいいだろ
>>258 DirectXのヘルプ見る限りではあるよ。
277 :
259 :2005/05/22(日) 01:01:11
とりあえず、最初からキレイに書き直してみることにしました。 レスくれたかたありがとうございます。もうちょっと自分でがんばってみることにします。
SetWindowsHookEx(WH_KEYBOARD,@HookProc,hInstance,0) とDLL内に書いているのですがローカルフックしかできません。 グローバルフックを行うためにはどうしたらいいのでしょうか?(Delphi6 personal)
>>279 参考になりました
ファイルマッピング使うんですね
いろいろと試してみます
数年前にマウスユーティリティ作ろうとしてネットやレジストリ見て調べたメモがあったので 天才しときますね。実際に正しいかは自前でお願い。 95,98ではコンパネ>マウスより7段階の調節が可能。 速度設定はレジストリに "MouseSpeed"、"MouseThreshold1"、"MouseThreshold2" の3つの値で調整、保存される。 ---------------------------------------------------- 速度 遅 速 ---------------------------------------------------- MouseSpeed 0 10 7 4 1 4 4 4 MouseThreshold1 0 0 0 0 0 12 9 6 MouseThreshold2 0 1 1 1 1 2 2 2 ---------------------------------------------------- パラメータの内容は不明。 2,0,0で速くなるとも。 3.1時代からwin.iniで設定できたらしい? 2k,XPではコンパネ>マウスより11段階の調節が可能。 レジストリに"MouseSensitivity"という値が追加された。 速度設定はこの値で調整、保存される ---------------------------------------------------- 速度 遅 速 ---------------------------------------------------- MouseSensitivity 1 2 4 6 … 18 20 ----------------------------------------------------
2k,XPでは加速度?の設定が追加された。 2kでは"なし"、"小"、"中"、"大"の4段階 XPでは"精度を高める"の有効、無効の2段階 ---------------------------------------------------- OS 2k |XP ---------------------------------------------------- 加速? 無 小 中 大 | 無 高 ---------------------------------------------------- MouseSpeed 0 1 2 2 | 0 1 MouseThreshold1 0 7 4 4 | 0 6 MouseThreshold2 0 0 12 6 | 0 10 ---------------------------------------------------- パラメータの意味は"MouseSpeed"で変わる。 MouseSpeedが 0の時:加速しない。 1の時:しきい値1を超えると移動量が倍になる。 2の時:しきい値1を超えると倍に、しきい値2を超えると 4倍になる。 補) マウスウェアを入れている場合は上述の設定を無効化して 独自に管理される場合がある。 以上。自分での結果と海外サイトの混ざってるので穴もあるかも。 ところでPrintWindowやっぱ無理ですかねぇ。
285 :
281 :2005/05/22(日) 19:37:52
>>282 情報ありがとうございました。
つーか、かなり面倒だなぁ...。
SystemParametersInfo
>>283 PrintWindow使って何が駄目なのか書いてないのでスルーしていたわけだが。
つーかDCをメッセージで投げるだけだろ。
>>283 var
wnd: HWND;
dc: HDC;
bmp: TBitmap;
begin
wnd := GetDesktopWindow;
bmp := TBitmap.Create;
bmp.Height := Screen.Height;
bmp.Width := Screen.Width;
bmp.PixelFormat := pf24bit;
dc := bmp.Canvas.Handle;
PrintWindow(wnd, dc, 0);
Image1.Picture.Assign(bmp);
bmp.free;
end;
とかではbmpが受け取ってくれないみたいで空白になります。
色々弄ってはいるんですが未だ正しい方法がわからずじまい。
MSDNのサンプル見て同じように書いてみたりしたものの駄目みたいで・・・
どう書けば正常に結果を返してもらえるのか恥ずかしいことにほとほとわからない状態です。
自分の作成したアプリから外部アプリを呼び出したとき、自作のソフトを常に 外部アプリの背面にする(自作アプリにフォーカスを移しても外部アプリが消え ないようにする)にはどうしたらいいのでしょう?
>>288 WM_WINDOWPOSCHANGINGで。
procedure TForm1.WMWindowPosChanging(var m: TWMWindowPosChanging);
begin
inherited;
if not IsIconic(そのアプリのウィンドウハンドル) then m.WindowPos.hwndInsertAfter := そのアプリのウィンドウハンドル;
end;
自己解決しました。ご迷惑おかけしました・・・ GetDesktopWindowが駄目だったみたい。
291 :
デフォルトの名無しさん :2005/05/23(月) 16:50:50
コントロールをそのまま印刷するには、どうしますか?
292 :
デフォルトの名無しさん :2005/05/23(月) 16:55:18
TWebBrowserで今表示しているサイトをmhtで保存させるにはどうすればいいのでしょうか できればダイアログなどを出さず保存したいのですが DelphiのバージョンはPersonal6です
>>289 サンクス。
もしユーザーに外部アプリを登録させるようなソフトだと
FApliName がたとえば 'D:\MyTools\Editor\K2Editor.exe' の場合
procedure TForm1.WMWindowPosChanging(var Msg: TWMWindowPosChanging);
var
Wnd: HWnd;
begin
inherited;
if AnsiPos('K2EDITOR.EXE',AnsiUpperCase(FApliName)) then
Wnd := FindWindow('TK2EditMain', nil)
else if AnsiPos ・・・・・・・
・・・・・・・
・・・・・・・
if not IsIconic(Wnd) then //ウィンドウがアイコン化されているかどうか
Msg.WindowPos.hwndInsertAfter := Wnd;
end;
というような感じかなあ?
クラス名と exe の名前は無関係でしょ。 自分で起動するんだからスレッドIDからたどって見つける。
processID だった。失礼
297 :
デフォルトの名無しさん :2005/05/23(月) 18:05:27
TImageのCanvasでDrawやStretchDrawをやった後、 その画像をクリアする方法を教えて下さいでつ。
298 :
デフォルトの名無しさん :2005/05/23(月) 18:43:42
サンクス
>>293 FormにはPrintメソッドがあるんですね。
TImageの見たままを印刷するにはどうしたら良いですか?
300 :
298 :2005/05/23(月) 19:08:20
>>299 ふつーにコーディングしる!、ということでつか。
ところで、ネットで見かけたのですが、
TImageのCanvasは実態がTBitmapというのは本当ですか?
Bitmapを印刷する関数みたいなのは作ったんですが、
TImage.CanvasをTBitmapにキャストすれば良いのかなぁ?
301 :
298 :2005/05/23(月) 19:14:42
TImage.Canvasを代入するとコケました。 TImageのTBitmap取得方法きぼんゆ。
302 :
298 :2005/05/23(月) 19:18:48
Image1.Picture.Graphic
がTBitmapですた。
>>297 もヨロ
>>302 初期化(というかクリアは)TImage.Picture = Nil
代入はなんとなくだけどAssigneを使ったほうが良いような気がする
塗りつぶせば?
> TImage.CanvasをTBitmapにキャストすれば良いのかなぁ? クラスとか型とか、少し勉強してから質問してください。
TToolbar使ってますが、 FormをスクロールするとToolbarが画面から消えます。 Toolbarって画面の上固定じゃないのか... どうしよう
>>303 代入でおk、ですた。
Assignってクリアじゃなくて、生成のような気がして...
このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが、 お礼はDelphiの布教と初心者の救済をお願いします。
>>307 書き方が悪かった
イメージの初期化はNilを代入でOK
Assignを書いたのはコピーなら代入よりこれを使ったほうがいいから
>>310 代入も内部でAssignしてるだけだよ
Assignも内部で代入してるだけだよ
スクラップ&ビルドより、単純に塗りつぶした方が地球にやさしい
Image1,Image2をつけてButton1に↓をコピペして実行。 -------------------------- //Image1を白く塗りつぶす Image1.Canvas.Brush.Color := clWhite; Image1.Canvas.FillRect(Rect(0,0,Image1.Width,Image1.Height)); Form1.Refresh;sleep(1000);//見やすくするため再描画+1秒待機 //Image2にImage1のイメージを代入 Image2.Picture.Assign(Image1.Picture); Form1.Refresh;sleep(1000);//見やすくするため再描画+1秒待機 //Image1を消去 Image1.Picture.Assign(nil); -------------------------- Imageに描くときはImage.Canvasでおk。出し入れする時はImage.Picture。ファイルのbmpやjpgもPictureに入る。 ただしPictureにjpgが入ってる時はImage.Canvasでは描けない。 デフォルトで持ってるImage.Picture.Bitmap.Canvasにアクセスするようなものだが JpegImage(Image.Picture.JpegImage)は編集するCanvasを持たないから。
ディレクトリの中のファイル名を順番に出力したいのですが、 どうしたらいいでしょか?
>>316 ファイルリスボックスを貼り付けて不可視にする。
ディレクトリプロパティに表示したいフォルダのパスを入れる。
アイテムズプロパティにアクセスして表示する。
TStringListやFindFirstを知らない頃は Visible:=FalseにしたTListBoxやTFileListBoxを 画面に置いてやりとりしてたなあ〜
>>316 1.列挙する
2.ソートする
3.出力する
faArchive$00000020 アーカイブファイルってどんなファイルですか?
321 :
320 :2005/05/24(火) 21:13:47
ぐぐって解決しました。(土下座
>>323 ありがとうございました。おかげさまで無事キーを得ることができました。
レスがなければ、あと数日待ってたかも知れません。ありがとうございました。
325 :
デフォルトの名無しさん :2005/05/25(水) 18:04:04
すみません。質問させてください。 ファイルをダウンロードする際、レジューム機能をつけたいんですけど、何か参考になる本やサイトはありませんか?
rfc
RFC2068とか
せめて2616にしとけ
firefoxのソース
irvine
例えば、'notepad.exe' から 'C:\WINDOWS\notepad.exe' という フルパスを導きだしたいのですが、 ExpandFileName はカレントフォルダをベースに、相対→絶対変換ですよね? そうではなく、%PATH% の中から探したいのですが、 こういった場合は自分でゴリゴリ書くしかないんでしょうか? それとも何か便利な関数はありますでしょうか? ご教授ください。よろしくお願いします。
>>331 ?
よく分からないけど、'notepad.exe' が複数あったらどーするの?
333 :
332 :2005/05/26(木) 03:34:31
質問です。 新規にwindowsのログインユーザーを作成したのですが、 Delphiを立ち上げると今までのライブラリパスやエディタ環境 全て吹っ飛んでしまいました。 この場合、再度環境の設定をやり直すしかないのでしょうか? 旧ユーザーでログインしていた際に使用されていたDelphiの環境設定の ファイル等が存在すればそれを再利用すれば設定は簡単そうに思えるの ですが、そのような事は可能なのでしょうか? 宜しくお願いします。
337 :
335 :2005/05/26(木) 14:24:06
>>336 一応レジストリと、ユーザーを変更してるんでC:\Documents and Settingsの中身全てに
それらしい設定情報がないか探してみたのですが見つからなくて・・・・・・。
やはり一から設定し直すしかないのでしょうか・・・・。
新規にwindowsのログインユーザーを作成した場合、 既存のDelphi環境は引き継いでくれません。 ので、既存のユーザー上でDelphi関連のレジストリデータを ファイルに書き出しておいて、新規ユーザーに移り、 そこでさっきのファイル(.reg)を起動すればOK。
>>338 ありがとうございます。早速試してみます。
340 :
335 :2005/05/26(木) 15:22:04
>>338 無事解決致しました!ありがとうございました。
341 :
331 :2005/05/26(木) 19:05:58
>>334 キター! 欲しかった関数そのものです!
あなたはエスパーさんですか?
ありがとうございました。m(_ _)m
342 :
デフォルトの名無しさん :2005/05/26(木) 20:39:39
Delphi2005proを購入したのですが、 複数列の一覧表で 「項目名の押下で並べ変え」 「CTRLキー+マウスクリックで任意の複数行選択」 をゆくゆくは実現したいのですが、 最適のコンポーネントは何をチョイスすればいいでしょうか? 今まではTstringList+StringGridでやってたのですが 何かと制限がありまして。。。
listview
普通にTListViewじゃないの?
345 :
デフォルトの名無しさん :2005/05/27(金) 01:15:39
>>343-344 2005ではTtableやDBgridなどという
データの取りまわしが楽そうなコンポーネントが
あるのですが(実際使ったことないので憶測です。)
やはり、TlistViewの方がいいのでしょうか?
>>345 提示されたんだから、後は自分で決めるのが良いと思うんだが。
ダメだったら、他のを考えたら?
>>345 Table, DBGridはデータベースに繋がってるコンポだからDB使うならあり。
ただし使い勝手はStringGridと変わらない。
それ以外の一般的な用途にはListView。
348 :
デフォルトの名無しさん :2005/05/27(金) 07:28:16
ちょっと教えていただきたいのですが delphiで関数の別名とかって定義できませんかね? function a(p: integer): boolean; type b = a: function; みたいな感じで・・・ delphiは6です。
type TAFunction = function(p: Integer): Boolean; var b: TAFunction = a;
351 :
349 :2005/05/27(金) 10:57:51
>350 うお!即レスどうもありがとうございます。 できました!! ホント助かりました。
352 :
デフォルトの名無しさん :2005/05/27(金) 13:15:33
C:\fooをfile:///c:/fooに変換する関数ってないの?
>>352 s := ' C:\foo';
r := 'file:///' + StringReplace(s, '\', '/', [rfReplaceAll]);
クラスの配列ってどう定義するんですか?? てきとうにやってみても動きません クラスの配列使ったやさしいプログラムがあれば教えて下さい
正確に言うと定義は出きます type TAho = class(TObject) nenrei :Integer; seibetu:Integer: private pablic end; var Aho:array [0..100] of TAho; implime... procedure ahomaker(i:Integer); var j:Integer; begin if i=0 then for j:=0 to 200 do begin Aho[j].nenrei:=1; Aho[j].seibetu:=1; end; end; これでボタン作ってAho makerを作動させると止まります。
for j:=0 to 200 do begin Aho[j] := TAho.Create; ← Aho[j].nenrei:=1; Aho[j].seibetu:=1; end;
type TAho = class(TObject) nenrei :Integer; seibetu:Integer; private public end; var Form1: TForm1; Aho:array [0..100] of TAho; implementation procedure ahomaker(i:Integer); var j:Integer; begin if i=0 then for j:=0 to 200 do begin Aho[j].Create; Aho[j].nenrei:=1; Aho[j].seibetu:=1; end; end; {$R *.xfm} procedure TForm1.Button1Click(Sender: TObject); begin ahomaker(0); end; end. やっぱり動きません。。。。。
var Aho:array [0..100] of TAho; ~~~ for j:=0 to 200 do ~~~
>>356 では
Aho[j] := TAho.Create;
って書いてあるのに、なんで
Aho[j].Create;
に勝手に変えるの??
あ、動きました、ありがとうございます
ああ、俺は何おやってるんだ ちょっと最近ブルー続きでどつぼ嵌まってます 首つって来ます、ありがとうございましたOTL
古いdelphi(5以前のver)ってどこで手に入りますか?
363 :
デフォルトの名無しさん :2005/05/27(金) 17:44:17
ヤフオク
364 :
デフォルトの名無しさん :2005/05/27(金) 21:59:38
金曜の夜になんなんですが、ちょっと質問です。ControlBar上にActionToolBarをいくつか 置いときます。 で、CustomizeDlgでいくつかのActionToolBarを非表示に変更してからActionManagerを SaveToFileで保存してアプリを終了します。 で、アプリ起動すると、フォームのOnCreateでLoadFromFileしてるんですが、 非表示にしたActionToolBarが元に戻ってしまっています。 なんででしょう。osはwinXP,delphi7です。
365 :
デフォルトの名無しさん :2005/05/28(土) 04:47:40
Delphi7 にて Form1 と Form2 を作り、両方自動生成するようにして、 Form1.OnShow から Form2.Show をするようにしました。 この Form2 を常に手前にしたいと考え、オブジェクトインスペクタ上で FormStyle を fsStayOnTop に設定したのですが、 何故か常に手前に表示されませんでした。 そこで、SetWindowPos API を使って Form2.OnShow や Form2.OnActivate で SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE); と書いてみましたが、やはり常に手前に来ませんでした。(SetWindowLong による WS_EX_TOPMOST も試しました) これは何故なんでしょうか? 解決法をご教授ください。 何か基本的な事を見落としているのかとも思うのですが…
>>365 Form2.showmodal;
じゃ駄目?よくダイアログに使われる。ただしその間Form1は入力を受け付けない、だったかな。
>>365 べつにForm2.ShowしなくてもForm2.Visibleを最初からTrueにしとけばえんでない。
>>365 メインフォームでならいけるから Form2でなくてForm1でTOP_MOSTするように仕様を作れない?
>>369 367は単に From2.SHowが必要なくなるといっていりうだけで365の希望のTOP_MOSTにならない
372 :
371 :2005/05/28(土) 11:24:36
Form2では SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE); をしておくこと
おかしいな。367の言う通りにすれば俺の環境(Delphi6Per)で出来るんだがな。
>>373 同じアプリ内ならTOP_MOSTは有効だが、いったん他のソフトにフォーカスを当てても
そのままTOP_MOSTを維持している?
375 :
373 :2005/05/28(土) 11:46:49
気のせいでした(^0^)v
俺の使っているフリーウェア、調べてみたら過半数が Delphi(ウィンドウクラス名だけ で判断しているので C/C++Builder 製もあるかもしれない)で作られていた。マイナーコ ンパイラとしては大したもんじゃなかろうか。ちなみにVBとHSPで作成されたものが1つず つ、後はおそらくVisual C/C++Builder 製だろう。 皆さんはどうかな?
雑談はスレ違い
378 :
365 :2005/05/28(土) 14:46:55
皆様お答え有難うございました。
>>371 の方法で上手く行きました。完璧です。
サブフォームは複数あり、かつそのフォームの中で設定を読み込んで TOP_MOST を設定する機構だったので、
モーダルや、メインフォームから TOP_MOST というのは出来なかったのです…
出来るだけシンプルにしようとしてしまい、私の記述不足で、
お手数をかけてしまい、すいませんでした。m(_ _)m
379 :
デフォルトの名無しさん :2005/05/28(土) 17:06:39
makeint64(hi, lo: integer): int64みたいな関数は標準でありますか?
MakeLParamってなかったけ
LParam は32ビット
tmemoとかのpopupmenuで既存の機能を生かしたまま項目を追加できますか?
できるけど、WINAPI叩くことになる。
>>379 あるわけないだろ。 makeint64(123,-1) をどうしたいわけ?
>>385 makewordみたいにしたいんだろ
Int64Rec でも使って自分で作ればいいんでないの?
integer は富豪つき
MakeInt64(123, -1) = $0000007BFFFFFFFF としたいのでは?
MakeInt64(Hi, Lo: Cardinal): Int64 じゃだめなん?
Int64も富豪つき
391 :
デフォルトの名無しさん :2005/05/29(日) 03:09:28
TLongInteger
勘違いというなら実装みせろ
簡潔にやりたいことを言うと「マウスホイールを回したときに、 マウスカーソルの直下にあるコントロールをスクロールさせたい」 のですが・・・ Form1にMemo1, Memo2を配置して縦スクロールバーを出しておきます。 何もコーディングしないと、Memo1,2をホイールを使ってスクロールするには、 まずクリックなどでフォーカスを当ててからホイールを回さないといけません。 これをフォーカスを移動せずに(あるいは自動でフォーカスを当て) マウスカーソルの下にあるMemoをスクロールさせたい、ということです。 TForm1でMouseWheelHandlerをoverrideしてこんなコードを書きました。 procedure TForm1.MouseWheelHandler(var Message: TMessage); var TargetControl: TControl; begin TargetControl := Self.ControlAtPos(ScreenToClient(Mouse.CursorPos), True, True); if TargetControl <> nil then begin TWinControl(TargetControl).SetFocus; end; inherited MouseWheelHandler(Message); end; Memo1にフォーカスのある状態でMemo2の上でスクロールすると、1回目のスクロールではMemo1がスクロールし、 2回目のスクロール以降にMemo2がスクロールします。 (即座にフォーカスが移らないためだと思います) 改良案、または全く別の実装法はありませんでしょうか?
>>393 そのトイレ我慢してるの人のせいにするみたいな言い方どうにかなりませんか?
テンプレ嫁。
Applicationに送られるメッセージを処理したいのですが Application.OnMessageではSendMessageされたメッセージは拾えないようなのです (なんでこんな仕様なんだろ?通過するメッセージ数が半端じゃないから?) なんとかSendMessageされたメッセージも拾う方法は無いでしょうか?
>>397 { Private 宣言 }
public
function HookProc(var Message: TMessage): Boolean;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.HookMainWindow(HookProc);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Application.UnhookMainWindow(HookProc);
end;
続き function TForm1.HookProc(var Message: TMessage): Boolean; begin if (Message.Msg = WM_APP) then ShowMessage('received!'); result := true; end; procedure TForm1.Button1Click(Sender: TObject); begin SendMessage(Application.Handle,WM_APP,123,456); end;
Applicaitonウィンドウのことか。アプリ全体のSendMessageメッセージを拾いたいのかとオモタ。 じゃローカルフックじゃなくていいね
402 :
397 :2005/05/29(日) 14:19:47
403 :
394 :2005/05/29(日) 14:38:23
>>395 その指摘はまことに正しく、反論のしようがないんですが、
それでも実装したいと言うことでお願いします・・・
ということはこれはWindowsの仕様なんですね。
VCLかもと思っていたんですが。
>>403 ん〜じゃあ、ローカルフックでホイールのメッセージ奪い取って処理するとか。
OSの仕様である以上正攻法ではいかんわな
WM_MOUSEWHEELはPostされるようだから、さっきの質問者とは逆にApplication.OnMessageが役に立つ鴨 procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); var control: TControl; begin if Msg.message = WM_MOUSEWHEEL then begin control := FindDragTarget(Point(LoWord(Msg.lParam), HiWord(Msg.lParam)), False); if control <> nil then begin control.Perform(WM_MOUSEWHEEL, Msg.wParam, Msg.lParam); Handled := True; end; end; end;
406 :
395 :2005/05/29(日) 16:06:05
>>403 >ということはこれはWindowsの仕様なんですね。
Windowsの仕様というか・・・メッセージの処理ルーチンの中でやろうとしているからうまくいかない。
405さんの言うようにポスト処理されているので
>>405 のように入り口で処理すればOKのハズ
自身を一旦終了させ、すぐにまた自動で再起動する方法はありますか? batファイルを使用してみたんですが、上手く行きません。他に方法はありますか?
408 :
デフォルトの名無しさん :2005/05/29(日) 16:09:59
ShellExecute(0, PChar(ParamStr(0)), ry Halt(0);
>>408 ありがとうございます。
Mutexを使って二重起動を防止してるせいなのか、そのコードだと終了後に起動出来ませんでした。。
410 :
394 :2005/05/29(日) 16:15:53
>>405 のコードで期待通りの動作になりました。
サンクスです。
411 :
デフォルトの名無しさん :2005/05/29(日) 16:21:56
> Mutexを使って二重起動を防止してるせいなのか、 Mutex 殺して自分を起動後、終了
ソフトの起動を監視して一時的に 待たせて表示させたいのですが頓挫してます。 フックでWM_CREATEをとらえるとこまでは出来ましたが・・・ 今のところ思いついたのは sleep(1000)入れてみる。→やぱり駄目 SetWindowLongで非表示にしてみる。→一瞬表示される あるとしたらやはりAPIでキチンとプロセスを一時中断させる方法しかないのでしょうか。
キチンとしたくない訳を教えて長大
416 :
デフォルトの名無しさん :2005/05/29(日) 22:53:29
AのフォルダにあるファイルをBのフォルダに移動させたいのですが どうプログラムを書けばいいのでしょうか
>>415 したくないわけじゃなくて
APIとかでの挙動の制御に詳しくないんで
正攻法なりクリアする方法なりを知りません。
>>416 MoveFile
>>417 知らないからと別の方法を探してたら何時までたっても分らないままだろ。
そもそも正攻法も正攻法じゃないやり方も知らないんじゃん。
例えばカーソルを監視したくてもローカルでは他の領域は無理。 Timerを使えばできないわけではないけど、グローバルフックという常套手段を使えば 目的はクリアできます。 そんな感じの詳しい方のヒントとか欲しかったんです。
Delphi+mysqlでのデータベースプログラ民具の方法がわかりません 解説されているサイトか書籍をご存知なら教えていただけませんか
>
>>417 >知らないからと別の方法を探してたら何時までたっても分らないままだろ。
>そもそも正攻法も正攻法じゃないやり方も知らないんじゃん。
どうしようもないくらい正論だなw
422 :
デフォルトの名無しさん :2005/05/30(月) 05:08:51
今日からDelphiマスターしようとしているオイラは負け組ですか?
>>422 「マスター」とか気軽に言ってるあたりが負け組。
424 :
デフォルトの名無しさん :2005/05/30(月) 05:28:40
「マスター」の何がいけないんでしょうか。 論理的にお答えください。
425 :
423 :2005/05/30(月) 06:09:33
>>424 論理的に答える以前にたった23文字の文の趣旨すら理解していらっしゃらない
ようなので答える必要性を感じません。
何かを"マスター"する事は難しいと思う。「マスターした」とか 言っている奴に限ってその気になっているだけだったりするよな。 >423はそれを遠まわしに言ってるんだと思われ。
>>422 .NETがWin32を完全にリプレースするのはかなり先だし
趣味かつクライアント限定ならいいんじゃないの。
ただコミュニティが崩壊して揚げ足取りのチャンスばっかりうかがってる
出がらしのカスばっかり残ってるけどスルーしとけば無問題。
429 :
デフォルトの名無しさん :2005/05/30(月) 10:07:06
Delphi6使用です。 QuickReportで、以下のデータを担当者毎に改ページして出力しています。 │担当者│取引先│金額│ ここで、改ページする単位毎に 頁数の表記を[現在頁/全体頁]と出力したいのですが、可能なのでしょうか?
うはww ここはそろいも揃ってバカだなw 質問に答えられないならそういえばいいじゃんww
431 :
デフォルトの名無しさん :2005/05/30(月) 11:04:27
DelphiとVBでどちらが優れているのでしょうか? 聞いた話では、VBは完全なオブジェクト指向言語でGenericプログラミングもできるそうです。 Delphiもそうなんですか?
VB と C# のどちらが優れているのか、教えてくれたら答えてあげる > 431
基地外はスルーしろ
Delphiにきまってんじゃん VBはもう終わりですから
435 :
デフォルトの名無しさん :2005/05/30(月) 12:30:18
Delphiにはジェネリクスがありません。VBに負けてます。
DelphiってTObjectにぶち込むしかねーんだろ?だっせー。wwwwwwwwwwwwwwwwwwwwwwww
仕事なら、いかにお金を儲けられるかです。 趣味なら、いかに楽しいかです。 従って、言語は関係ありません。
>DelphiってTObjectにぶち込むしかねーんだろ? そんな事はないよ。
441 :
デフォルトの名無しさん :2005/05/30(月) 14:35:02
このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが、 お礼はDelphiの布教と初心者の救済をお願いします。
Formの位置を終了時に保存すると最大化してたらモニターサイズになっちゃうね。 みんなどうしてる?
>>443 俺だったら
1.起動時にモニタサイズを取得
2.モニタサイズになっていたらデフォルトのサイズで真ん中に表示する
ようにすると思う。
>>443 それは質問ですか?
オレは「TWindowPlacement」、「GetWindowPlacement」を
使ってるけど。
>>424 マスターベーションは一人よがりになりがち。
使う人がいてこそのソフトウェアと言う事を忘れないで。
今までは443氏っぽいのとか モニタサイズの時は保存しないようにしてたw GetWindowPlacementって便利そうだね。 ありがd
間違えた。 443じゃなくて444氏の方法ね。
449 :
デフォルトの名無しさん :2005/05/31(火) 01:55:13
フォルダをメモコンポーネントにドロップしたら そのドロップしたフォルダの中のファイルのフルパスを全てメモに書き出したいんですが どんなコードを書けばいいでしょうか Delphiのバージョンは6のPersonalです
WMDropFiles
hoge : string;←これをプロジェクト内のユニット全てで使いたい時は どこに宣言すれば良いのでしょうか。初歩的な質問ですみません。
"implementation"ってヤツの上に書けば良い unit Unit1; interface var Hoge: String; // ← ココ implementation
>>449 ShellAPI、WM_DROPFILES、DragQueryFile、DragAcceptFiles
あたりを検索してみてください。
454 :
451 :2005/05/31(火) 02:36:36
>>452 即レスありがとうございます!うまくできました!
複数の静止画像(png, jpeg, pgm 等)から動画を生成するにはどうすればよいのでしょうか?
>>449 usesに ShellApi を追加。 Pirivate エリアに
procedure ReceiveDropFiles(var Msg: TWMDropFiles); Message Wm_DropFiles;
を追加。implementation エリアに
procedure TForm1.ReceiveDropFiles(var Msg: TWMDropFiles);
const
MaxLength = 1024;
var
Files, i: Integer;
FileName: array[0..(MaxLength+10)] of Char;
begin
with Msg do
begin
Files := DragQueryFile(Drop, $FFFFFFFF, nil, 0);
for i := 0 to Files - 1 do
begin
DragQueryFile(Drop, i, FileName, MaxLength);
if Memo1.Lines.IndexOf(FileName) = -1 then
Memo1.Lines.Add(FileName);
end;
DragFinish(Drop);
end;
end;
を追加。Memoを乗せているフォームの OnCreate に
DragAcceptFiles(Handle, True);
を追加。ドロップの度に追加されるのが嫌なら、ReceiveDropFiles手続きの最初に「Memo1.Clear」を入れる事。これはTStlingListで有効なのでListBoxとかにも使える。
Memo 以外にドロップされたくない
他のアプリケーションのアイコンを変えるにはどうすればいいですか?
>>460 どうなるか、なら分かります。
・・・アプリ作者が悲しみます。
>>461 確かにその人が一生懸命書いたアイコンだったら悲しむかもしれませんね・・・
でもEXEのアイコンチェンジャーみたいなのを作りたいんですよ。どうにかなりませんか・・・?
>>460 自作のDelphiアプリで他のEXEファイルのリソースを変更するプログラムを組みたいという意味?
それとも単に他のアプリのアイコンが気に食わないから変更したいということ?
464 :
463 :2005/05/31(火) 15:14:58
超低レベルかどうかわかりませんが質問です。 TOleContainerにワード文書を挿入して編集するプログラムを作成しているんですが、 最初の呼び出した時はワード文書を編集できます。 が、他にフォーカスが移動するとワードが編集できなくなってしまいます。 これってプロパティか何かで制御して常に編集できる状態にできないんですかね?
>>455 Flashでもいいけど、より汎用性が高いのは
VideoForWindowsあたりでaviに圧縮エンコードすることかな。
確か、そんなことができるコンポーネントがあったはず。
かりになくても、自分でエンコード・クラス作るのは
そんなに難しくないよ。
468 :
デフォルトの名無しさん :2005/05/31(火) 18:12:06
Delphi6で作成したソースをDelphi2005で修正無しであつかえますか?
469 :
デフォルトの名無しさん :2005/05/31(火) 18:40:39
TImageのビットマップのビットレートを落とすにはどうしたら良いですか?
>>469 TImage.Picture.Bitmap.BitRate:=???;
ビットマップのビットレートってなに?
Bitrateなんてあるの?俺も修行不足だな。 ビットレートとはあまり言わないかも。 色深数のことならPixelFormatでヘルプを調べるといいよ。 bmp := TBitmap.Create; bmp.PixelFormat := pf24bit; bmp.Height := bmp2; bmp.Width := bmp2; bmp.Assign(bmp2); bmp.PixelFormat := pf8bit; とかやれば8bitに減色されないかな?
473 :
質問 :2005/05/31(火) 20:28:40
EAccessViolationクラスの例外を生成しました。 アドレス00D5399Bでアドレス1C010ED5に対する書き込み違反が起きました。 との警告が出たのですが、何が原因でこの警告が出たのかわかりません。 どなたか教えてください。
解放もしくは確保していないメモリに書き込んだ。 GetMemで確保した範囲を超えて書き込んだとか。
>>474 ありがとうございました。
それを元に原因を探してみます。
Canvas.TextOutを使って文字を描画すると、 文字の下のイメージが消えてしまいます。 なんとか文字の下のイメージはそのままに文字を描画する方法はないでしょうか?
>>476 Canvas.Brush.Style := bsClear;
478 :
476 :2005/05/31(火) 23:42:33
>>477 うわぁ恥ずかしい。
ヘルプ見て単純に白抜きになるんだと思ってました。
こんなつまらないことに答えていただきありがとうございます。
TImageで、画像が読み込まれているか確かめるにはどのような手段が良いでしょうか。
480 :
479 :2005/06/01(水) 12:54:06
すいません。適切なプロパティ(Empty)がありました。
if Image1.Picture.Graphic <> nil then ShowMessage('画像有り') else ShowMessage('画像無し')
482 :
479 :2005/06/01(水) 13:05:55
>>481 なるほど〜。それでいこうと思います。ありがとうございました。
一日考えましたが、ダメでした。 TIcon.Lordfromfileでicoファイルを読み込んだあとどうすればいいか分かりません。 と言うか、他のプログラムのリソース云々が分かりません。 自身のリソースしか弄れないんですが・・
>>483 よく英語版を日本語版にする奴いるだろ?
それと同じようにできると思うよ。
>>484 ResourceHacker とかですよね? でも仕組みが全く分からないんですよ
>>485 そこまで知っててまったくわからんなんてありえんだろ
Win32 APIではリソースを読み込む方しか見つからないな。 ふつうにファイル開いて加工するしかないんじゃないかな?
488 :
464 :2005/06/01(水) 19:36:02
だからそれが出来るコンポを紹介したんだけどなあ EXEファイルのPEヘッダの構造も理解しないといけないので 「くだすれ」のレベルではないです
489 :
487 :2005/06/01(水) 19:51:58
>>488 リンク先まで読んでなかった、スマソ
英語だからとかレスがあったので長文でリソースについて
解説してあるのかと思った。
つーか、コンポーネントの配布元が英語でもクラス名とかプロパティの名前で
だいたい使い方分かるよね・・・
ロシア語でもコードだけ拾ってヒントになったりすることもあるし
まぁURL晒してもらったんだからある程度読まないと駄目だよな。
491 :
デフォルトの名無しさん :2005/06/01(水) 20:14:28
禿同。 自力で調査したり英語読んだり出来ない低能はDelphiなんて使って欲しくないね。 質が下がるから。 煽り抜きでまじVBかC#やるといいよ。 答える側にも我慢の限界ってものがあるわけで あまり安易なノリで質問して欲しくないんだよ。 質問するならまずは関連しそうなヘルプを熟読して さらにソースの検索かけて、さらにGoogleで最低10回はキーワードを変えて試してみて それでも駄目なら初めてここで聞く位の努力をしてもらいたい。
492 :
464 :2005/06/01(水) 20:15:47
ちなみにResourceHackerに相当するPE Resource Explorer/XN ResourceEditorというアプリも同じページにソース付であります。 興味のある方はどうぞ
UTF-8の文字列をShift-JISに変換するにはどうしたらよいでしょうか?
ファイルを読み込んで、ディスク上のファイルには変更を加えずに、メモリー内でそれを別のアプリケーションに渡す事を考えているのですが、 例えば音楽ファイルを読み込んで、それを編集しつつ音楽プレイヤーに送るようなフィルターのようなソフトって難しいでしょうか?
496 :
デフォルトの名無しさん :2005/06/01(水) 22:23:06
>>495 ファイルから読み込む。
メモリ上で編集する。
編集したデータを一時ファイルに書き出す。
クリエイトプロセスかシェルエクスキュートで一時ファイルを引数として目的のアプリを起動。
こんな流れではダメなのか。
>>495 他のアプリから見れるってことはRAMディスクみたいなもんだから
相方も自作でないと難しいんでない?
普通にTempファイルをコピーして作る方が楽だし今時HDDもはやいし。
ハンドルって何ですか?
>>495 直接の答えは知らんけど
各プレイヤーのプラグインとして実装するのが手っ取り早いんじゃないの。
あとは自分でプレイヤー作るとか。そうすればバッファいじり放題。
500 :
デフォルトの名無しさん :2005/06/01(水) 22:41:30
>>498 クルマの方向操縦の輪。ステアリングともいう。
ドアの把手という意味もある。
>>495 大げさだがTCPなどで実装すれば理論上あらゆるアプリケーションと通信できるが…
>>496 >>497 大きなファイルの場合だと時間がかかってしまうかな?と思いまして・・
でもそれが一番楽に出来そうですね。
>>499 自分で作ったとして他のプレイヤー以上の操作性とか機能を作る自信が・・・
センスも無いしorz
>>501 処理したのをストリーミングで配信みたいな感じですかね?
難しそうだけど、理想に一番近いかも
>>495 つーか、DirectShowのフィルタがまさにそれだろ。
自分でフィルタ書いて、フィルタグラフ構築の時にそのフィルタを追加して構築する。
だが、フィルタを作るのはそこらのソフトを作るのより何十倍もむずいと思うぞ。
すみません、おしえてください! イベントを動的にセットする方法なんですけど、 仮に Procedure AAA(Sender: TObject) procedure BBB(Sender: TObject) と2つメソッドを作っておいて、実行時に、 Button1.OnClick := AAA; で1つ目のイベントは登録されるのですが、 C#で言うところの、 Button1.OnClick += AAA; Button1.OnClick += BBB; で両方ともイベントを登録できるみたいな事できないでしょうか? なぜ、わざわざ2つメソッドをつくる必要があるかというと、 AAAはフォーム上にある十数個のコンポーネント共通の処理で、 BBBは1つのコンポーネントのみの処理だから分けているんです。 そうすれば、実際コードも見やすいと思うんですよ。。。 ちなみに、C#の方法をDelphiでやろうと思い、 Button1.OnClick := AAA; Button1.OnClick := Button1.OnClick + BBB; とするとコンパイルエラーでした。(そりゃそうですね。。。) どなたか教えてください
505 :
504 :2005/06/01(水) 23:42:30
訂正です! >C#で言うところの、 >Button1.OnClick += AAA; >Button1.OnClick += BBB; > ....................... >で両方とも「メソッド」を登録できるみたいな事できないでしょうか? でした!
506 :
504 :2005/06/01(水) 23:46:12
なんどもすみません!! >C#で言うところの、 >Button1.OnClick += new EventHandler(AAA); >Button1.OnClick += new EventHandler(BBB); >で両方とも「メソッド」を登録できるみたいな事できないでしょうか? です!なんども訂正してすみません!
無理。マルチキャストはできまへん。
>>507 これをマルチキャストっていうんですね〜。そういえば、去年MSDNみてたら書いていたような気が・・。 orz
改めて調べたら、やっぱり無理っぽいですね。
でも、自分Delphi7使いですが、 Delphi8は対応?? [Delphi-ML:81054] Delphi 8 の言語拡張
いずれにしても、1つのメソッド内で、クラスの型と名前で個別を特定してのゴリ押ししか無さそうですね。
いままで、Delphiでマルチキャストをする程の物を作ってなかったので、今回、勉強になりました。
ありがとうです!
|,,∧ .NETのDelphiなら
|゚Д゚彡 できんじゃねーの?
|⊂ミ
| ミ Borland - Delphi for .NET コンパイラプレビュー
|`J
http://www.borland.co.jp/delphi/papers/dh7_comp/dh7_comp5.html procedure TWinForm.Button1_Click(sender: System.Object; e: System.EventArgs);
begin
Include( Button2.Click ,MyButton1_Click);
Include( Button2.Click ,MyButton2_Click);
end;
procedure TWinForm.Button2_Click(sender: System.Object; e: System.EventArgs);
begin
MessageBox.Show('Button2_Click' , 'Caption');
end;
procedure TWinForm.MyButton1_Click(sender: System.Object; e: System.EventArgs);
begin
MessageBox.Show('MyButton1_Click!' , 'Caption');
end;
procedure TWinForm.MyButton2_Click(sender: System.Object; e: System.EventArgs);
begin
MessageBox.Show('MyButton2_Click!' , 'Caption');
end;
ここはハイレベルなスレですね
511 :
デフォルトの名無しさん :2005/06/02(木) 07:21:21
ハンドルって何ですか?
韓国ブームのことです
過去ログも読めない人は救済不可能です。放置してください。
ハンドル (3)プログラミングで、ポインタへのポインタのこと。
>>511 Windows上でウィンドウを管理するための(ややこしい・・)識別番号
inno setupでアイコンを 全ユーザーのスタートメニューに追加するか カレントユーザーのスタートメニューだけに追加するか を選択式にすることはできますか?
ソースあるんだから自分で書き直せ
最近そうゆう機能付きのインストーラーが多いので innoにもついてるのかなと思いまして・・・ AlwaysUsePersonalGroup という指定は見つけたのですがどうすれば選択式にできるのかが分からなくて。
520 :
516 :2005/06/02(木) 09:42:07
>>519 ありがとうございます。
そこは既に見てたのですがないみたいでした。
多分英語の情報はあるんでしょうけどうまく探せないです・・・
innoは大体何でも出来ますよ。 調べるのがメンドイだけで。
>>516 [Tasks]と[Icons]セクション使えばできそうじゃない。
>金有るならインストールシールド inno使い出してからインストールシールドの性能の悪さとかにヘキエキ。 innoは誤動作しないし便利。 唯一の欠点はANSIでフォルダなんかにアクセスするから、 ANSIの言語設定が壊れたWindowsではフォルダアクセス失敗する。 なんて、当たり前か。
陰嚢?
>>524 俺が使ったことあるのは5年以上前のバージョンだったけど
あの頃はスクリプト記述がメンドイ分細かなところまで制御できたぞ
今は違うのかな
527 :
516 :2005/06/02(木) 10:33:47
みなさんありがとうございます。
>>521 拙作のフリーソフトなんでインストールシールドは大げさかなと・・・
>>522 禿同です。
>>523 その辺でできそうですよね・・・
528 :
516 :2005/06/02(木) 11:40:49
そこで翻訳サイトですよ
530 :
516 :2005/06/02(木) 13:32:27
できたっぽいです。メッセージはmsiを参考にしますた。 SelectTasksLabel2の翻訳が何か違う感じ(翻訳者さんゴメソ)がしたのでついでに修正を。 [Languages] Name: en; MessagesFile: "compiler:Default.isl" Name: jp; MessagesFile: "compiler:Languages\Japanese.isl" [Icons] Name: "{code:GetGroupPath}\My Programs"; Filename: "{app}\project1.exe" [Messages] jp.SelectTasksLabel2=[name] インストールの追加オプションを選択して「次へ」をクリックしてください。 [CustomMessages] en.InstallforAllUsers=&Everyone en.InstallforCurUsers=Just &me en.InstallforGroupDisc=Install for yourself, or for anyone who uses this computer. jp.InstallforAllUsers=すべてのユーザー(&E) jp.InstallforCurUsers=このユーザーのみ(&M) jp.InstallforGroupDisc=現在のユーザー用か、またはすべてのユーザー用にインストールします。 [Tasks] Name: InstallforAllUsers; Description: "{cm:InstallforAllUsers}"; GroupDescription: "{cm:InstallforGroupDisc}"; Flags: exclusive; Name: InstallforCurUsers; Description: "{cm:InstallforCurUsers}"; GroupDescription: "{cm:InstallforGroupDisc}"; Flags: exclusive unchecked; [Code] function GetGroupPath(Param: String): String; begin if IsTaskSelected('InstallforAllUsers') then Result := ExpandConstant('{commonprograms}\{groupname}') else Result := ExpandConstant('{userprograms}\{groupname}') end;
>>530 [Icons]
Name: "{userprograms}\{groupname}\My Program"; Filename: "{app}\project1.exe"; Tasks: InstallforCurUsers
Name: "{commonprograms}\{groupname}\My Program"; Filename: "{app}\project1.exe"; Tasks: InstallforAllUsers
これだけじゃダメなの?試してないけど・・・
532 :
516 :2005/06/02(木) 15:04:25
>>533 集合型で定義している要素数によってキャストは変わります。
8個以内は Byte
16個以内は Word or Smallint
32個以内は Dword or Integer
ウチもDelphi6 Personalだけど
>>533 のリンク先にあるソースコンパイルできたよ
536 :
533 :2005/06/02(木) 19:38:31
サンクス
>>534 さんの通りにByteキャストで通りました。
>>535 すいません、確認不足でした。
リンク先のコードはコンパイルできました。
が、こちらのテストコードでは集合の要素となる列挙型の定義を型の定義を
TDbit = 0..25; ではなく
TDbit = (hoge, foo, bar ... ) としていたので
コンパイルエラーが出たようです
ありがとうございました
オマイらどうやってdelphiそんなに出来るようになりますたか? 本読んだ? それとも実際に自分の作りたいプログラム作成?
実際にプログラムを作りながら勉強しましょう系の本を読む ↓ 適当に改造したりしてDelphiに慣れる ↓ 簡単な入門書を読む ↓ Delphiを色々触ってみる ↓ 詳しい解説書を読む 漏れの場合
オレは基本的には後者だな 文法をある程度理解したら後は実践あるのみ 入門書とかのサンプルなんて、作っても全然面白くなかった
やっぱり自分の興味のある物作った方が、やる気も吸収力も断然良いよね。 入門書だと、必要な事は全部書いてあるから、「調べる」事が覚えられない。
〜入門な本 →ゲーム →ツール →ネットのTips漁る →Delphiヘルプ、Win32APIヘルプ、MSDN等々を引くことが多くなる →コンポーネントつくったりしてる
Photoshop7.01やCSで作ったBitmapが読み込めないのは既出ですか。
>>543 その読み込めないBitmapをうPしてみて
Delphi7なんですけど、プロジェクトマネージャのツリーをソートする方法って無いんでしょうか。
>>545 アルファベット順に自動ソートされないか?
あるいはdprファイルを直接開いて順番かえるとか
つーかフルカラー32bitのbmpかよ
そうでもないか、、、4チャンネルというのがよくわからんが
551 :
543 :2005/06/03(金) 10:54:51
ビット数には関係なく読み込めません。
>>546 Delphi6では自動でソートされましたが、Delphi7ではソートされないようです。
dprの順序変更しかないすかね・・。
ついでに、コード入力中に出る一覧(プロパティとか)の順序も、どうも定義順のような・・。 なんでソートされていないんだろう。
>>551 アプリでBMPに多少の「方言」が付くことがあるんじゃないかな
バイナリエディタとBMPのフォーマットを見比べれば分かると思うけど
1バイトでもフォーマットに反していればDelphiはBMPとして認識しないだろう
555 :
544 :2005/06/03(金) 11:09:00
ほんとですね・・・知らなかった TNkDIBで読んでみたらOKでした。 とりあえず 'bmp'の処理もnkdibでさせるというのはどうでしょう OpenPictureDialog等でもサポートさせたい場合は nkdib.pasのInitializationで dib を登録しているところに同じように 'bmp'も追加してあげればよいです
> 1バイトでもフォーマットに反していればDelphiはBMPとして認識しないだろう いやいや、Delphi の TBitmap が手抜きしてるんだよ。
XMLパーサーありませんか?
559 :
デフォルトの名無しさん :2005/06/03(金) 19:02:20
キモはAPIだから言語には依存しないんじゃない?
フォルダ内のアイコンの位置を取得・設定することってできますか?
エクスプローラ上のファイル/フォルダのアイコンの表示位置?
マルチ氏ってなんです?
>>534 細かいことですがintegerは避けてLongWordとしたほうがよいでしょう.
Delphiではintegerは32ビット環境では32ビット整数ですが,
Delphi初代の16ビット環境では16ビット整数です.
今後出るであろう64ビット版では64ビット整数になることは十分に考えられます.
(cardinalも同様です)
またそうならなかったとしても扱うデータの長さが明確に決まっているときは
それが一目でわかるようにしておくのが得策です.
#ちなみに本来のPascalではintegerは16ビット整数みたいです.
568 :
デフォルトの名無しさん :2005/06/03(金) 23:13:23
String型配列内の、ある文字列が存在するIndexを得たいのですが方法がわかりません posじゃできませんか
>>568 Stringの配列ではなくてTStringListに入れてIndexOfを使えば。
>>568 TStringList を使った方がいいと思うけど…
普通に考えれば StrArray を string 型配列、見つけたい文字列を Sub として
for i := Low(StrArray) to High(StrArray) do
if AnsiPos(Sub, StrArray[i]) <> 0 then
begin
// i が Sub を持つ文字列のインデックス
end;
ちょっと必要があってメインフォームの TreeView のデータをサブフォームの TreeView にコピーしてそこから改めてデータを(この場合文字列)をとる必要があって以 下のようにしたのですが OK ボタンをクリックした場合はうまくいくのですが、サブフォ ームの TreeView をクリックしたとき、エンターキーを押したときうまくいきません。 ChildForm には Ok ボタンと Cancel ボタンを貼り付けそれぞれの ModalResult に mrOk と mrCancel を設定してあります。 ChildTree.Items.Assign(Form1.TreeView1.Items); ChildTree.Items[i].Data := Form1.TreeView1.Items[i]; という関係
>>568 AnsiIndexStr / AnsiIndexText
class function TChildForm.Execute(var S:string): Boolean; var Node: TTreeNode; begin Result := False; with TChildForm.Create(Application) do begin try if ShowModal = mrOk then begin Result := True; Node := TTreeNode(ChildTree.Selected.Data); S := TNodeData(Node.Data).ItemStr; //TNodeDataは独自のクラス end; finally Free; end; end; end;
あーごめん。部分文字列なのかな。
procedure TChildForm.FormKeyPress(Sender: TObject; var Key: Char); begin//これがダメ if key = Chr(27) then begin key := Chr(0); ModalResult := mrCancel; Close; end else if key = Chr(13) then begin key := Chr(0); ModalResult := mrOk;//メインフォームでこれが反映されない Close; end end; procedure TChildForm.ChildTreeDblClick(Sender: TObject); begin//これもダメ ModalResult := mrOk;//メインフォームでこれが反映されない Close; end;
とりあえずマジックナンバーはやめようよ
>>571 ModalResult設定したあとCloseしてるからだよ。ModalResultは設定するだけでフォーム閉じるよ。
579 :
571 :2005/06/04(土) 00:14:23
>>567 > 今後出るであろう64ビット版では64ビット整数になることは十分に考えられます.
いや、32ビットのままです。
581 :
デフォルトの名無しさん :2005/06/04(土) 00:48:38
アプリが起動した瞬間から時間をカウントして ちゃんと時計みたいに表示させたいんですが どうプログラムを書けばいいのでしょうか?
時間はカウントするものではありません。ストップウォッチと時計とは別の機能。 どっち?
GetTickCountの差でミリ秒を取得
584 :
581 :2005/06/04(土) 01:36:09
カウントアップの危険。Now の差を推奨
TabNode.Tabs('色を変えられないか') タブコントロールのタブの文字列の色を変えられないでしょうか? TabNode.Font.Color := clBlue; ではだめでした。
iTuneの様なフォームにしたいんですが・・・
>>586 OwnerDraw を True にして
procedure TForm1.TabControl1DrawTab(Control: TCustomTabControl;
TabIndex: Integer; const Rect: TRect; Active: Boolean);
begin
with TabControl1.Canvas do
begin
Font.Color := clRed;
TextOut(Rect.Left+5, Rect.Top+5, TabControl1.Tabs[TabIndex]);
end;
end;
589 :
デフォルトの名無しさん :2005/06/04(土) 18:01:27
>>587 釣りかな?
マジレスしておくと、iTuneの様にではなくて、何をどうしたいのかを具体的に書き出してみるといいよ。
そうすれば自力で実装できることと調べればわかりそうなこととどこから調べたらいいのかわからないことがはっきりする。
590 :
586 :2005/06/04(土) 18:19:18
591 :
デフォルトの名無しさん :2005/06/04(土) 18:25:28
すいません フォームにButtonをおいてKeyDownイベントに procedure TForm1.Button1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin ShowMessage('押されたよ'); end; を記述したんですが カーソルキー押下したときはイベントが発生しないのですがそんなもん何でしょうか? <(_ _)>
592 :
591 :2005/06/04(土) 18:29:10
今、ふと思ったのですが・・・ Buttonのコントロールってカーソルキーで移動できるんですね なのでカーソルキーを押したときはイベントが発生しないのでしょうか
Formで受け取ってif ActiveControl=Button1 thenで処理するとか
595 :
593 :2005/06/04(土) 18:35:11
596 :
591 :2005/06/04(土) 18:57:24
ありがとうございます 593のページはちょっと難しいです WM_KEYDOWNのメッセージがButtonコントロールまで、とどかないみたいですね これは直接WM_KEYDOWNのメッセージをとって・・・・処理なのかな やりたかったことは EditとかComboboxとかのコントロールの移動をカーソルキーで移動させたかったのです EditやComboboxはうまくいったのですがFormにPanelを2つ置いて1つにはEditとComboboxを置いて もう一つのPanelにButtonを置いてみてカーソルキーで移動させるとButtonのところで次のコントロール にカーソルキー移動しなくなりました 594 の方法もよくわからないですけどActiveControlってのでHelpを引きながら考えてみます 595のホープページでPanelがでてきたので おぉーーと思ったんですけど なんのことか理解できないです あぁわからないことだらけ _(_ _)ゞ
597 :
591 :2005/06/04(土) 18:58:41
すみません ありがとうございました
>>553 [Ctrl]+[Space]で出てくるやつならこれを右クリックしてみてください.
(昔niftyで見た情報の受け売りですが)
>>580 あららそうなんですか.情報ありがとうございます.
>>591 ,592,596
●アクションリストを使う方法.
・フォームにアクションリストコンポを置いてダブルクリック.
・ダイアログが出てくるので[Insert]キーかダイアログ上部左端の追加ボタンを押す.
・アクションオブジェクトが追加されるのでオブジェクトインスペクタで…
・Nameプロパティを適当な名前に変える(ここでは"DownKeyAction"とした)
・ShortCutプロパティに Down をセット
・OnExecuteをダブルクリックしてイベントハンドラを記述.以下は例.
procedure TForm1.DownKeyActionExecute(Sender: TObject);
begin
{ Button1にフォーカスがあるときだけ処理を行う }
if ActiveControl = Button1 then
ShowMessage('↓キーが押されたぜ!');
end;
ボタンやチェックボックスにフォーカスが残らないようにするにはどうしたらよいですか? ボタンクリックなどのイベントが走った後に ActiveControl := nilの状態にしたいのです。
>>599 どこにもフォーカスが残らないとまずいので
(キーボードで操作しているユーザーは困ると思う)
Edit1.SetFocus とか,ComboBox1.SetFocus とかでほかのコンポにフォーカスを移しては?
601 :
599 :2005/06/04(土) 21:43:31
>>600 ああ、なるほど。すごい説得力です。
そうかキーボードユーザーとかまで考えてなかった。
どおりでプロパティでフォーカスが残らない設定にできないわけだ・・。
PaintBoxに描画されているものを、保存する方法は無いのでしょうか?
>>602 TPaintBox.CanvasがあるんだからTBitmapにでもコピーして保存すればいいだけじゃ?
>>602 TBitmap作って、Canvas間でCopyRectしてSaveToFile
PaintBoxではなくて、TBitmapへ描画すれば良いのでは?
606 :
デフォルトの名無しさん :2005/06/05(日) 11:53:04
CommandExec(Command: String; Stdin, Stdout, Stderr: TStrings); くらい簡単なライブラリないっすか?
ある
DelphiXのTDirectDrawOverlay使ってるんだけど、 CUP使用率がいやに高いんだけど。 PaintBoxにDivX動画出力時:20〜30% オーバーレイ使用時:60%〜 縮小を伴うとき:〜100%(コマ落ち発生) まあ、自分のRGB->YUV変換のコードがダメなのはいいとして、 縮小したとき、なんでCPU使用率が上がるんだろう? あれってビデオカード内で処理されるんじゃなかったっけ? TDirectDrawOverlayの使い方って、どこかに出てないでしょうか?
改行コードで区切られた文字列のx番目の文字列を返す関数ってありますか? 要するにTStringList.Strings[x]と同じようなものなんですけど CmdLineとかで結局需要がありそうだからあるかなーと思って探してみたものの見当たらない。 ないなら自分で作るつもりですが、Delphi付属のルーチンが既にあるなら そっちの方が性能がいいだろうと思いまして
>>609 普通にTStringList.Textに代入ってのは駄目なん?
>>608 DelってDirectShowつかえんの?
612 :
609 :2005/06/05(日) 18:47:39
>>610 文字列1個取り出したいだけなんで
わざわざTStringListまで持ち出すのはなんか仰々しいというか大げさというか
>>612 じゃあ無理。x, x+1の座標自前で検索して間を切り出すしかない
TStringListがいやなら作ればいいのじゃないかな。 改行コード、全角文字、半角文字をチェックするだけでいいから大して 手間もかからない。
>>612 TStringListのソースみりゃいいやん
最近の子は標準or他作の関数がないとプログラム組めんの?
自分で作るけど、既にあるなら使うって言ってるじゃん。
標準の関数の一覧リストとかリファレンスマニュアルとかどこにあるの?
探してる時間に自作した方が早いかも(笑)
620 :
608 :2005/06/05(日) 21:24:22
>>611 使えるんじゃないの? 結構有名なDSPackってあるし。
ただ、ここではDirectDrawなんだが・・・
DelphiXって開発終了だから、資料がなくて困る。
TDirectDrawOverlayの使い方については、
同梱のHelpを含めて、使い方がまったく書かれてない。
ただ、堀さんが以前、TMpegEncでDelphiXのオーバーレイと
DirectSoundは使ってるって言ってたから、使い方次第では
正常に動作すると思うんだけど。
ここ1、2週間、この問題で頭が煮詰まってしまった・・・
ヘルプ->VCLリファレンス->ルーチン一覧(カテゴリ別) をまづは見ろ というのはFAQだな
ハイ次。
624 :
602 :2005/06/06(月) 00:17:33
>>603 保存することが出来ました。
ありがとうございます。
625 :
602 :2005/06/06(月) 00:18:40
626 :
デフォルトの名無しさん :2005/06/06(月) 14:15:54
データベースの日付型項目をTDBEditを使って入力しているのですが、 2006/13/32 といった変な日付を入力するとDelphiのエラーが出て プログラムが終了してしまいます。 変な日付が入力された時は、再入力させたいのですが、 どうすればよいのでしょうか 超初心者ですが、よろしくおねがいします。
>>626 try〜exceptで例外を拾って再入力を促すメッセージ表示すればいいんじゃないの
628 :
デフォルトの名無しさん :2005/06/06(月) 15:40:33
>>627 どのイベントに書けばいいか、わからないです
(´・ω・`)ごめんなさい
onChangeかonExitかな
630 :
デフォルトの名無しさん :2005/06/06(月) 16:23:55
>>629 ありがとうございます、エラーでなくなりました。
これから、エラーが出た時に、どうするか色々と勉強してみます。
631 :
626 :2005/06/06(月) 17:03:09
何度もすいません エラーが出なくなったのですが、エラーチェックのタイミングを 入力→Tabキー→(このタイミングでチェック)→次の項目 としたいのですが OnChangeイベントでは、1文字入力ごとにイベントが発生してしまい OnExitでは、チェックの前にDelphiのエラーが表示されます 「'2005/05/41'は日付または時刻ではありません 」 どうすればいいでしょうか (つ∀`)
632 :
デフォルトの名無しさん :2005/06/06(月) 17:58:06
>>631 直接TDBEditに入力するのではなくて、TDBEditの上に普通のTEditを表示して
入力された文字が正しいかコードでチェックしてからDBコンポーネントに渡すようにしたらどう?
OnValidateイベントを使え
TListBoxで特定の文字列を含むアイテムを自動で選択したいのですがどうすれば良いのでしょうか。 例えば「hoge1,hoge2,hoge3の3つの文字列を全て含む場合そのアイテムを選択する」という風にしたい のですが。どうかよろしくお願い致しますm(_ _;)m
>>634 procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer;
begin
for i := 0 to ListBox1.Count do
begin
if (pos('hoge1',ListBox1.Items[i])<>0)
and
(pos('hoge2',ListBox1.Items[i])<>0)
and
(pos('hoge3',ListBox1.Items[i])<>0)
then ListBox1.Selected[i] := True;
end
end;
こんな感じかな。どういう実装をしたいのかが今ひとつ不明なのではずしているかもしれません。
とりあえずPosはやめとけ AnsiPosにしとけ
637 :
デフォルトの名無しさん :2005/06/06(月) 21:28:12
グラフとか使うにはどうするんですか?
Use The 'TCart' !
639 :
634 :2005/06/06(月) 21:35:53
なるほど(゚_゚;)ありがとうございます。
TChartじゃないの?と言ってみるテスト
641 :
631,626 :2005/06/06(月) 22:59:30
>>632 >>633 OnValidateイベントをようやく発見できました
とりあえず、イベントのタイミングを調べるため
ShowMessage('通ったよ');
と書いてみたのですが、
日付のエラーの時は、Delphiのエラーが先に表示されました
( ´Д⊂
>>635 × for i := 0 to ListBox1.Count do
○ for i := 0 to ListBox1.Count - 1 do
単なる書き忘れだと思いますが重要ですので.
643 :
634 :2005/06/06(月) 23:33:04
>>642 わざわざありがとうございますm(_ _)m
一応その部分は修正して利用させていただいておりました(^^)v
644 :
デフォルトの名無しさん :2005/06/06(月) 23:41:41
>>640 いちばんやすくTChart使えるのはいくらですか??
645 :
デフォルトの名無しさん :2005/06/07(火) 02:29:04
このスレでいいのかわかりませんけど、質問します。 Cでいうところの__DATE__マクロに相当する機能ってないですか? コンパイルした日付をexeに埋め込んでくれるような機能です。 PEヘッダにコンパイル日時のフィールドがあるんですが、Delphi6でコンパイルした ものは、一定値($2a425e19)が埋め込まれてしまうようです。 bcb6では、コンパイル日時がちゃんと入るんですが。
>>644 MSChartを頑張って使えばいいと思うよ
{$IFDEF WIN32} や {$APPTYPE CONSOLE} ってなに? せめて名称だけでも分からないと調べようがない orz
じゃあ コンパイラ指令 で調べな
650 :
デフォルトの名無しさん :2005/06/07(火) 10:20:39
間隔ツールバーの使い方を教えて下さい 「ボタン1」 「ボタン2」 これを 「ボタン1」「ボタン2」 とピッタリくっつけたいときは、どうすればいいですか?
できない
安定、安定でない両方でそれなりにチューニングされたソートライブラリがあったら教えてください。
BCB/STL
Delphiで使える物をお願いします
655 :
デフォルトの名無しさん :2005/06/07(火) 12:56:03
デルファイってどこでダウンロードするの? 無料なの? 使い方のお勧めサイトあります? おねがいします。
次のデルファイはいつ出るファイ?
658 :
デフォルトの名無しさん :2005/06/07(火) 13:41:23
実行するとTPopupMenuのCaptionの後ろに()でアルファベットが ついてウザイんですけどこれってどうやって消すのでしょうか?
660 :
658 :2005/06/07(火) 13:54:00
>>659 TPopupMenuのAutoHotKeysをmaManualにするんですね!
追加した個別メニューのそれを変えても変化なかったもんで
とまどってしましました。ありがとうございました!
662 :
デフォルトの名無しさん :2005/06/07(火) 16:54:55
>>656 有難うございました
デルファイ初めてダウソしてインスコしたんだけど
デスクトップにもスタートのとこにもなんも出ないよ
どこにデルファイのプログラム入ってんですか?
あと段階的に教えてくれてるサイトもキボンヌ
まず、パソコンについて学ぶべきでは?
スーパーハカーに対してなんてことを
665 :
デフォルトの名無しさん :2005/06/07(火) 18:24:40
>>662 シー コロン エンマーク プログラムファイルズ エンマーク ボーランド エンマーク デルファイロク くらいにはいっているはずなんだが。
/usr/local/borland/delphi6/bin/じゃ?
コンパイルコマンドを勉強かな。 $ ls test.pas $ dcc test.pas $ chmod 777 test $ test hellow Delphi World! という感じ。
雑談とネタはフサスレで
669 :
デフォルトの名無しさん :2005/06/07(火) 18:47:37
Opendialogでディレクトリ指定ってどうやるのでしょうか? 開いてしまうんですけど。。
フォルダを開きたいって意味じゃないのか? その場合、SHBrowseForFolderを使えば良い APIが嫌ならFolderDialogでググレばコンポが見つかる
673 :
669 :2005/06/07(火) 19:31:05
すみません。Ver書くの忘れてました。DELPHI2005です。
>>670 プロパティのどこですか?optionsのどれかですか?
>>671 SHBrowseForFolderでググってみます。
正直。。もっと簡単にはできないんですよね?
>>673 GoogleでTSelectFolderDialogを検索汁
675 :
669 :2005/06/07(火) 20:33:45
>>673 ありがとうございます。まさにこういうのが欲しかったんです!
ってダウンロードしたんだけど、2005非対応みたい??
readmeにコンポーネントのインストールって書いてあるけど
2005にはコンポーネントのインポートしかみあたらないんですよね。。
で、聞いてくるファイルもpasじゃなくてdllだったりして
全然わかりません(笑)パッケージとかはdpkってファイルで
できるみたいですけど。どなたか教えてください。
2005 つかうのが悪い
簡単なのキボンならSelectDirectoryでいいんでない
うんだなぁー
680 :
669 :2005/06/07(火) 21:23:44
>>676 >>678 うう。2005は購入しちゃダメだったの?(+_+)
>>677 OpenDialogっぽいのがよかったんです。実は
ofAllowMultiSelecにして任意のファイルとフォルダを
tstringで取得できたらなーと思ってたので。
README呼んだ限りではTSelectFolderDialogが
近かった気がするんだけどなー。あきらめます。。。
作りたいもののイメージが固まってるなら自作ですよ。 Delphiはそれができる言語です。
> 任意のファイルとフォルダをtstringで取得できたらなーと思ってたので。 TOpenDialog で何が不足なの?
function FileCtrl.SelectDirectory(var Directory: string; Options: TSelectDirOpts; HelpCtx: Longint): Boolean; overload;
>>680 ドライブコンボボックスとディレクトリリストボックスあたりで自作したほうがわかりやすいんじゃないか?
686 :
669 :2005/06/07(火) 22:13:19
>>681 イメージは固まってるんだけどもがいてまーす(笑)
>>683 ファイルは取得できるけどディレクトリが取得できなくないですか?
たとえば、1つのディレクトリを選択したいんだけどボタン押すと
選択されないで開いちゃうんですよね。
>>684 SelectDirectryですよね???
2005でのコンポーネント作成について調べて見ます。。
>>686 ShellListView使えば良くない?
>>686 OpenDialogで選択されたファイルにExtractFilePathかけるんだっけ?
漏れは経験無いけど、そうやってディレクトリ選択ダイアログに代用してる人が居るって聞いたことがあるよ。
ThreadからVCLコンポーネントを使う場合は、スレッドのローカルで生成したとしても Synchronizeを使用するという話ですが、VCLコンポーネントっていうのは具体的に 何を指すんでしょうか?コンポーネントパレットにあるもの?それともクラスすべて? 例えば、TStringListとかTBitmapとかは、使う時にSynchronizeする必要は あるんでしょうか?
そのスレッドだけでつかうんならSynchronizeする必要ない。 メッセージ処理が必要ないものは Synchronize しても意味無いし。
メインスレッドや他のスレッドからアクセスされる可能性がゼロでないなら Synchronizeする必要がある。 また、例えば TStringList を Form1.Memo1.Lines.Assign() などで使う場合は、そのときだけ Synchronizeするばいい。要は、他スレッドに割り込むときは、どんな場合も Synchronizeする必要がある。
ListViewを弄りたいと思い、SendMessageでLVM_***系のメッセージを送ろうとしたんですが、 未定義の識別子 : 'LVM_***' とでてきます。 usesに何か足りないんだと思いますが、何が足りないんでしょうか?
uses CommCtrl;
Grep の使い方を覚えてソースや *.int を見る習慣を付けるといろいろ便利だよ
今ならDel6perの人でもただでClasses.pasダウンロードできるよ。
>>693 できました。
CommCtrlだったんですね。
Messagesだと思ってました。
そうなんだよな(笑) パッチにソースが付くなんて某らしくておもしろい
>>690 >>691 レスどもです。
すると、俺が挙げた例以外でも、VCLコンポーネントだろうとメッセージ処理の絡まないプロパティとかであれば
Synchronizeしなくても実は問題ないって事ですかね?
> メッセージ処理の絡まないプロパティとかであれば これ、絡むかどうか見極めるのは結構面倒だけど、確信できるならそのとおり
追記 そのプロパティーには他スレッドはアクセスしない、という条件がつくけど
メッセージ処理は直接関係ねーだろ
702 :
669 :2005/06/07(火) 23:01:05
>>687 ShellListViewでhelp検索しても何もでてこないけど
あとで調べてみます!
不評の2005で
新規作成-パッケージ
プロジェクトに追加で
ttp://hp.vector.co.jp/authors/VA029585/VCL/SelectFolder/index.html からダウンロードしたPasファイルを指定。
プロジェクトマネージャーの右クリックでインストール
ツールオプション-ライブラリパスにダウンロードしたフォルダを指定
DELPHIを再起動(保存しなくてもいいみたい)
とやったらコンポーネント(dialogにいるよ)追加できました!
こういう使い方は作者さんに言わなきゃ怒られるのかなー?
で、、、
ふつーに動いたけどshowmodalで表示したフォーム上では
ダイアログがでてこないよー(笑)
でもできたので皆さんありがとです![解決]
> メッセージ処理は直接関係ねーだろ そうだね。Synchronize がメッセージ処理を同期する、という意味では、アクセス相手が メッセージ処理をするかどうかは関係あるけど。
Synchronizeの使いどころとは関係ねーだろ
>>704 で、Synchronizeの使いどころとは関係あるのは何?
Opendialogについて教えてください。 InitialDirプロパティて指定した場所から、移動 出来ないようにしたいのですがどうしたら良いですか?
それは難しい。自前でダイアログ作ったほうが簡単
FileListBoxもあるでよ
709 :
デフォルトの名無しさん :2005/06/08(水) 18:48:36
学校の課題なんですけど、Delphiで西暦を入力して夏季と冬季のオリンピックを求めるプログラムはどういう風に作るんですか? 教えてください。
煽りでもなんでもなく
>>709 の文章の意味がわからないんですが
>>709 宿題スレ池。それから仕様が意味不明なんでまずは日本語でアルゴリズムを書き出してみろ。
オリンピック開催年のルールがさっぱり分からないのだが 4で割り切れたら・・・余りが出たら・・・みたいな話なんじゃないか。
閏年とか米大統領選とか。
4で割り切れる年は閏年 100で割り切れる年は閏年ではない ただし400で割り切れる年は閏年 ((X mod 4 = 0) and (X mod 100 <> 0)) or (X mod 400 = 0)
というものの、夏季オリンピック(一般にいうオリンピック)は4で割り切れる年のはず。 冬は間の年だっけ?
716 :
デフォルトの名無しさん :2005/06/08(水) 21:03:25
宿題スレ逝きます すいませんでした。
TFileStreamを使ってファイルを開くとき、すでに開いているファイルは開かないように するにはどうしたらいいのでしょう? ヘルプに fmShareExclusive ほかからの読み書きを禁止するとあるので ReadF := TFileStream.Create(FName, fmOpenRead or fmShareExclusive); としてみましたがいくつでも開いてしまいます。 「TFileStream 排他制御」でぐぐったらここの過去スレが出てきましたが、読めませんで した(^^;)。
ヘルプより fmShareExclusive他のアプリケーションはファイルを開くことができない fmShareDenyWrite他のアプリケーションは読み出し用にファイルを開くことはできるが,書き込み用に開くことはできない fmShareDenyRead他のアプリケーションは書き込み用にファイルを開くことはできるが,読み出し用に開くことはできない
>>717 今、実際に試してみたけど2つ目からちゃんとEOpenErrorになったぞ。
自アプリから複数開いてたりして
721 :
デフォルトの名無しさん :2005/06/08(水) 23:58:37
Delphiはグラフをエクセルのように簡単に作れますか?
>>721 簡単にグラフを作れるようにするのがDelphiの役目では?
(´・∀・`) ヘー
724 :
721 :2005/06/09(木) 00:11:28
>>722 ほんとですか〜。
データベースソフトを作ろうと思っててVBにしようかと思ったらVBはグラフ作る
のは激しくムズイらしく、しかしDelphiは学習するのにデータベースの参考書ないし
でかれこれどちらにしようか半年も悩んでいます…。
>Delphiは学習するのにデータベースの参考書ないし ホントか?腐るぐらいあったような気がするけど
727 :
ああ、そうなんです :2005/06/09(木) 00:32:36
>>720 いや、そうなんです。
自作のアプリで2つ以上開きたくないのです。これを防ぐにはどうしたらいいのでしょう?
どっかにフラグたてておいたらいいじゃん。自分で開く前にそれみて倒れてたら開く、と。
730 :
721 :2005/06/09(木) 00:53:59
あとACCESS使っているのでその延長線上でVBがいいかなと・・・。 しかしDelphiよさそうですねー。 こりゃ一からDelphiについて調べなおそうかな。
半年悩んだんなら、あと半年待ってからにしたほうがいいよ。Delphi どうなるかわからんし。
>>717 ,727
何回も読み直していろいろやってみたが、やっぱり意味がわからない。
どういうこと?
自作アプリAでファイルCを開く
自作アプリBでファイルCを開く←これを禁止したい
こういう意味にとったがfmShareExclusiveを設定してればやっぱり2つ目はエラーになるよ?
自作アプリAでファイルCを複数回開く ってんじゃないの?
自アプリ内の操作なら変数使えば 幾らでも制御できそうなものだが、何か問題でもあるのだろうか
735 :
721 :2005/06/09(木) 01:20:37
やっぱVBかあ。
結論が出たようなので、次↓
>>733 ,734
頭悪くてすいません
まず自作アプリはSDIです。
最初起動してhoge.datを開きます。
次にもう一つ自作アプリを起動してhoge.datを開こうとしても開けないようにしたいのです。
> 自アプリ内の操作なら変数使えば
タブ型アプリなら確かに変数を使って簡単にできると思いますけど普通のSDIだとど
うしていいかわからないのです。
ウィンドウキャプションにファイル名を表示さているので後に開いたウィンドウから先
に開いたウィンドウキャプションにアクセスする方法がわかればできると思うのですが。
ReadF.Freeで解放した後は、他のプロセスでも開けますよ?
>>737 ものすごく姑息な解決策を教えてあげよう。
最初にhoge.datを開いたアプリが目印を残す。
例えばflag.txtを作るだけでいい。
二番目以降に起動したアプリは if not FileExists('flag.txt') then AssignFile(F, 'hoge.dat'); とする。
最初にhoge.datを開いたアプリが終了するときはflag.txtを掃除しておくこと。
>>739 > ものすごく姑息な解決策を教えてあげよう。
ま、単なる目印だからそれで十分だと思いますが、あちこち捜しまくってもう少しましな方法を見つけました。
function IsMyFileOpen(FName: string): Boolean;
var
aCaption: string;
Wnd: HWND;
begin
aCaption:= AnsiUpperCase(FName);
Wnd := FindWindow('TMyForm', PChar(aCaption));
Result := Wnd > 0;
end;
オリンピックは単純に4年毎なのでは?
俺も思ったけどレスの内容見て俺が変なのか?と思った
mod 4 がゼロになる、って論理を試す簡単な宿題。騒ぐほどのことはない
fmShareExclusive で解決のようだが? 自作アプリでも、ヘルプの言う「他のアプリケーション」だわな
FileStream を Free しないでずっとファイルを握ってたらいいんじゃないの
相変わらず悪夢のように回答レベルの低いスレだな
お前程じゃないんで次↓
オリンピックは昔、夏季と冬季が同じ年だった。
クライアントに保存してあるクッキー情報を取得したいのですが どうすればいいのでしょうか? プログラムで、自分のPC内に保存されているクッキー情報を 取得したいんです・・・ Response を使えば出来るのかと思っていろいろやってみましたが よくわかりませんでした。
TCustomWebDispatcher.WebRequest.Cookie
>>750 ヒントありがとう・・・いろいろやってみたけど
取得してあるクッキー情報から直接取得出来るのだろうか
なんか、出来なさそうなんだけど(漏れには敷居が高いのかも)
オリンピックは、やっぱ過去の開催年は データとして保持してないと駄目だな。 modで簡単に得られるもんじゃない(4年毎とは限らない)。 最近では冬大会が,1992年、1994年と2年間しか間隔がない。
スレ違い
>>737 ・複数の文書を扱うアプリを作りたい
・それぞれの文書は独立したフォームに表示させる
・アプリ全体で使うデータがありhoge.datというファイルに保存している.
ということでしたら,同じアプリをいくつも起動するのではなくて,
ひとつのアプリで複数の文書フォームを表示させるほうがよいと思います.
1. アプリ全体の情報は文書フォームから分離してデータモジュールに格納する.
2. 文書フォームから別の文書フォームを開くようにする
3. 同じアプリを二重起動しようとしたらあとから起動した方は終了させて
元のアプリは新しい文書フォームを開く.
1. は文書に特有の処理以外はすべてデータモジュールに移し,
文書フォームのuses節にこのデータモジュールを定義したユニットを追加.
(文書フォームで[ファイル]→[ユニットを使う]が楽)
2. は文書フォームの名前が DocForm だとしたら TDocForm.Create(Application) .
ただしDelphiでは最初に開いたフォームがメインフォームとなり
最初に開いた文書フォームを閉じるとアプリケーションが終わってしまうので,
ダミーのフォームを用意します.
ダミーフォームのOnActivateイベントに ShowWindow(Handle, SW_HIDE) と書いてこのフォームが表示されないようにします.
そしてこのフォームをメインフォームに指定します.
また文書フォームのVisibleをTrueにします.
(これで起動時に文書フォーム1個だけが表示されます)
3. はやり方がわからないのでほかの方にお任せします.
フラグの論理演算なんですけど 変数に特定のフラグが含まれているならその特定のフラグを削除し 変数に特定にフラグが含まれて居ないならなにもしない。って演算はどうやるんですか? 今のところは if (変数 and 特定のフラグ)=特定のフラグ then 変数 := 変数 xor 特定のフラグ; って書いてるんですけど もっと簡単に済ませられませんか?
>>755 要するにフラグを落としたいってこと?
変数 := 変数 and not(特定のフラグ) じゃなくて?
flags := flags and not flag
758 :
755 :2005/06/09(木) 21:03:15
>>756 おおお、ありがとうございます。
まさにそれです。
手持ちの本の論理演算のところを見ても、フラグ落とし?は載ってなかったのです。
助かりました。
異常終了したとき送られるメッセージってあるんでしょうか? それをフックしたいのですが。
あるとして、どこに送られると思う?
>>749 WininetのFindFirstUrlCacheEntryで出来ませんか?
的はずれだったら無視してください。
コンソール?
TObjectListの挙動で困ってる。 自作クラスを作って、オブジェクトリストにAddしたあとで、 そのうちのひとつを取り出すときに、メモリリークが起きているらしい 自作クラス→TObject、 TObject→自作クラス って相互変換する 個所が多くて、そこがうまくいかない クロスキャストってやつだろうか 機能的にはうまくいっているのに、メモリ使用量がガンガンあがっていく
イマイチ意味がわからないがOwnsObjectsの話じゃなくて?
チラシの裏だろう
自作クラスをTObjectListにAddすると、自動的にTObjectにキャストされるね 今度はこの配列からひとつ取り出して、TObjectから自作クラスへキャストしなおす これを繰り返すとどんどんメモリリークするのが不思議 もちろんメモリリークをどうやって押さえればいいのか、というのが質問
もっと言うならば、「正しいTObjectList型からの取り出し方がわからない」ということ。 Addの逆をしたいわけだよ。
キャストは関係ないだろ
「メモリリークをどうやって押さえればいいのですか?」 と書かない理由は?
そんなことってあるのか
>767 ライブラリよりも自分のコードを疑うべし 最小限の再現コードを作ってそれでも起きるなら晒せ
?
create 済みの変数にキャストして代入してるとか? (笑) TObjectList のソース見る限り、出し入れでリークするところなんかないぞ。
デストラクタがvirtualになっていないないため、 上位クラスのデストラクタが呼ばれていないのでは?
違う、下位クラスだ。 TObject.Destroyのみが実行されているのかも。
みんな優しいなw
Destroy は元々virtualだから、TObjectのインスタンスを作らない限り TObject.Destroy なんて呼べないでしょ。Freeだけど。 TObject にキャストしても virtual なら、ちゃんとインスタンスの型にあったメソッドが呼ばれる。 (てかこうじゃないと、Template Method パターンとか使えないしね) メモリリークするのは、ただ単に自作クラスのデストラクタで、解放していないものがあるだけ。 もしくは、そもそも自作クラスのインスタンスを解放していないだけ。
最後の1文に40ペソ
>>763 みたいな奴に答えてやる必要ないと思うんだ
おまえら優しいな
相変わらず悪夢のように回答レベルの低いスレだな
このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが、 お礼はDelphiの布教と初心者の救済をお願いします。
超低レベルはいいんだが、そもそも日本語が意味不明なのとか、他人とのコミュニケーション能力を 著しく欠いてるのとか、最低限の礼儀も知らないのとか、はプログラミング以前の問題だよなぁー 某掲示板も最近はそんなのばかり・・・
スルーすればいいだけの話。
答える能力がないバカは出てこなくていいよ。
2chで礼儀礼儀言ってるやつはキチガイだと思う。
どこかのサイトは れいぎをしらにない連中のあつまりってきいたきがする。 礼儀をしらないものに礼儀論をしても馬の耳に念仏 20歳すぎると人格の矯正は困難・・・
↑おまえが消えろアフォ
あれ?もう夏休み入ったのか??
いえ、爆竹休みです。
やっぱり育ちって技術力より大事だよな
でもものすごい技術持った人ってどっかおかしい人が多いけどな
スピーカーのVolumeを簡単に調整する方法は無いでしょうか? 今はmixerSetControlDetailsで調整しているのですが、これだと 特定のマシンではきちんと動作するけど他のマシンでは動作しない状況が多々あり 困ってます。 もしありましたら教えてください。
コンポーネント作成に関することなんですがヒントをください。 1.作りたいものは複合コンポーネント(TLabelとTEditを複合したTLabeledEdit等)。 2.作成するのはTEditが3つくっついたもの。TCustomControl上に作成。THogeControlとする。 3.内部でTEdit.OnChange:=HogeChange;といったように各コントロールにイベントを設定する。 4.このコンポーネントは各コントロール(TEdit)にアクセスするためのプロパティがある。 上記のような状態でコンポーネントユーザがTHogeControl.EditA.OnChange:=HogeAChange;と した場合、3でコンポーネント作者の設定したイベントが無効化されます。 これを回避する方法はどのような手法がありますでしょうか? 以上よろしくおねがいします。 開発環境:Delphi7〜
自分が礼儀ができてないヤツほど礼儀にうるさいものだな
>>800 複合コンポで EditA で TEdit にまるまるアクセスできてしまうのが問題。
ちゃんと隠蔽してユーザは勝手にイベントハンドラを設定できないようにする。
超初心者質問スレと聞いてやってきました。 stringからcharへ変換するにはどうすればいいのでしょうか?
変換の意味がわからないが、stringに添字を付ければ1文字アクセスできます
805 :
800 :2005/06/10(金) 19:49:03
>>802 出来る限りユーザにはTEditのイベントハンドラ、プロパティはDelphi標準の物を使用してほしいのです。
こういった要望をみたすことは不可能なのでしょうか?
TEdit.OnChange:=HogeChange;の部分をフック?でメッセージをキャッチし
処理したいと考えましたがその方法がわからず(出来るかどうかも)途方にくれています。
>>803 if Length(s) >= 1 then c := s[1]
>>805 procedure TCustomEdit.Change; // protected dynamic method
begin
inherited Changed;
if Assigned(FOnChange) then FOnChange(Self);
end;
あたりをoverrideしてみるとか
Delphi6ってWineで動く?
> stringからcharへ変換するにはどうすればいいのでしょうか?
俺、知らな〜い!
stringをPCharへキャストするということなら
>>740 あたりが参考になるんじゃないの。
>>808 動かない!!ときっぱり言ってみる。
wineは
noteadが動く程度
あまりの遅さに絶句。
まともにwinあぷりも動かないんだから
ちなみに仕様上、OSはXPとかNTは動かない。
9.x系が入っているフォルダを指定してやっとnotepadが動く程度。
しかも、バージョンによっては全くWineそのものがエラーを出して動かない。
動くバージョンを発掘から開始っていう探検の始まり始まり
うちの動作確認とれているのはっと・・・・
OS起動しなおすのが面倒なので省略 (笑
っていうか Win上でDelphi動かしなさい
すみませんがどなたか
>>799 もよろしくお願いします。
>>805 >出来る限りユーザにはTEditのイベントハンドラ、プロパティはDelphi標準の物を使用してほしいのです。
>こういった要望をみたすことは不可能なのでしょうか?
言ってることが矛盾してる。ユーザには好きに代入させておいて、それを阻止したい? おかしいとは思わないの?
質問も理解してないのに中途半端なレス付けるやつ増えたよな・・ ツリー形式の掲示板じゃないんだから無駄レスつけるとグングン回答率が下がるんだよ。 基本的にわかる質問にだけ答えりゃいいんだよ。 質問の仕方が悪いなら誰もレスつけないだけ 誰もあなたに答えてもらいたいなんていってない。 あと念のために、 また「質問者のくせに〜」とか荒れないように言っとくけど漏れ800じゃないから
これがDel厨クォリティ
818 :
sage :2005/06/10(金) 23:31:16
なんかこのスレみてたらワクワクしてきた!! 俺も今日からDelphiするぜ!! みんなよろしくな!!
簡単かどうかはともかくそれ系の開発したことないから その情報で経験則ではわからない。すまんね。 今日昨日窓杜で紹介されてた音量ソフトの 作者さんのサイトにそれ系のコンポと情報があったはず。 それで手続きの中身とか参考にならない?
>>807 なるほど・・・。
TEditを直に使わずTEditをTMyEditで継承し必要な部分をoverrideする。
そしてそれを組み込むのですね。
早速試してみたいと思います。
>>813 >言ってることが矛盾してる。ユーザには好きに代入させておいて、それを阻止したい? おかしいとは思わないの?
阻止したいのではありません。言葉が足りなかくて申し訳ありません。
いいたかった事はTHogeControlの内部でTEdit.OnChange:=HogeChange;等と書いた場合
プロパティでそれぞれEditA,EditB,EditCとpublicで公開したときに
使用ユーザがTHogeControl.EditA.OnChange:=FooChange;とした場合にHogeChangeが
無視されるのを防ぎたかったのです。
阻止したいのはユーザの代入ではなく、代入されたことにより内部で設定した手続きが
無効になるのを防ぎたかったのです。
くだれないゲームが 動くといっているアホがいる WineはWinのファイルがないと動かないってことしらんのか? 説明書読め WindowsマシンでLinuxを起動してわざわざその上でゲームして喜ぶのもがいるのが滑稽 ほんとばかだな
それは話が逸れてる。 今Vineを知った自分が言えた義理じゃないがw GDIには結構対応してるってことじゃないの?(曖昧な表現ですまない) だからゲームやウィンドウ内で帰結するプログラムには強いとか。 対極にあたるExplorerを動かすのが難しいらしいあたりそう感じる。 で、公式サイト見るとDelphiアプリ対応の修正は加えてるみたいだが、Delphi自体を使えるかは 情報見つけらんなかった。でもDelphiってpascal純正だから普通には動くんじゃw 自分レベル低くてすまんねぇ。
> くだれないゲームが
アチャー (つ∀`)
> WineはWinのファイルがないと動かない
Winのファイルって何だよw
つか、全く不要とは書いてねーだろ、真性バカw
> WindowsマシンでLinuxを起動してわざわざその上でゲームして
はい?
ツッコミどころ満載だけど、とりあえずWindowsマシンって何ですかw
> ほんとばかだな
>>822 ちなみに、マウント外して、.wine をリネームして $wine notepad.exe したらちゃんと起動しましたよ?
確認してないから自信はないけど、最近は dll なしでもかなり起動すると思った
>>810 の時点で情報古すぎなのはミエミエだったが
>>823 DirextX も、サポートされていると思った。
XWine だかという派生ソフトもあったし
バカに付き合うとその人もバカに見える法則 orz
……スレ違いスマソ。誤った情報は正しておきたかった。
>>824 ツッコミに無理があるな。特に誤字脱字で揚げ足取ってるあたり必死に見える。
わざわざ噛み付く辺りガキだよな
>>825 揚げ足取っておきながら自分でも誤字ってる品。
もうアフォかと。
リナックスの人ってどうしてこう喧嘩腰というか挑発するような書き方するんだ。 古い情報を正すのでも、今はこうなっているとだけ書けばいいのであって、貶める言葉を書く必要はない。 そもそも専用板があるんだからそっちでやってくれないかな。
829 :
デフォルトの名無しさん :2005/06/11(土) 07:17:54
ウィンドウズの人って、無知なくせに堂々と誤った発言をし続けたり、 不明瞭な自分専用の用語で使っていても、恥しくもない上に自信満々な人が多いですよね。 すごくかっこいい。
ごめん。D6up2+3が一番安定してる十分と思ってる。
初心者相手に威張り腐るやつは例外なく無能。
>>814 同意。読解力がないなら出てこなけりゃいいのにね。
人を無能呼ばわりするヤツは例外なく無能。エスパーじゃないと質問の意味さえ 分からないような質問して「読解力がない」とかいうのは逆ギレ。
このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが、 お礼はDelphiの布教と初心者の救済をお願いします。
うわ、DELPHIってこんなにひどいのか。他の使おうっと。
K2Editor の作者が今度ソース公開してくれたのだけど、ドキュメントの中に > Delphi Ver.5 の comctrls.pas にバグがあり、Delphi Ver.5 版では > comctrls.pas にパッチを当てて開発していました。 というのがあったけど、どんな問題があるのでしょうか。
>>838 そんなことないよ
バージョンアップしないでずっと使えるし
安くて、いい言語だよ
>>841 今でも3.1とか使ってる人けっこういそうだよね。
3.1関連の仕事を請けたのは5年位前が最後かな。
自分自身をFreeするにはどうすればよいのでしょうか? btnA: TButton; procedure btnAOnClick; begin btnA.Free; end; とすると、稀に例外が飛んできます。
>>845 その部分のコードはたぶん問題ない。
Freeした後にそことは別の箇所でbrnAを参照しちゃってんじゃないの。
とりあえずbtnA := nil;して参照箇所を探してアクセスしないようにしてみるとか。
可能ならbtnA.Visible := False; で非表示にするのが無難だと思うけどね。
フォルダ名を取得するにはどうすればいいのでしょうか? 例えばD:\hogeの中にいくつかフォルダがあるとして、 D:\hogeの下にあるフォルダの名前だけ取得したいんです。
848 :
845 :2005/06/12(日) 04:15:28
>>846 >とりあえずbtnA := nil;して参照箇所を探してアクセスしないようにしてみるとか。
上記を記述して参照するときもif Assigned(btnA) then btnA.Click;としているのですが
速いPCで実行すると問題なし。
遅いPCで実行するとbtnA.Freeの後に例外が飛んでくる。
といった結果になりました。
そこでPostMessageで非同期でやってみようと思いやってみると、うまくいきました。
う〜ん、何が原因なんだろう??
自分自身をFreeするときは「特別な処理が必要だ」とどこかで見た気がしましたが、勘違いだったかな?
動的に作成したコントロールは、バージョンによっては動的に自分のイベントハンドラで 削除すると例外がでる。Free を PostMessage() で非同期化すると問題ない。
>>847 FindFirst
FindNext
FindClose
>>847 TShellListViewのソースのIsFolder関数のところが参考になるんじゃないかな。
delpji内蔵の関数とかを見るには無料のではダメなんですか?
>>852 まぁね。今ならClasses.pasだけは無料でダウンロードできるけど
でも、それを差し引いてもBorlandは気前がよすぎると思うけどな。(というかバカかと)
これほどの開発環境を無料って・・いくらシェア拡大を狙ったとしてもやりすぎ。
しかもPersonal版の制限なんてDB関係とシェアソフト禁止ぐらいだし
趣味でやる分には製品版買わないよな・・。
>>853 もともと教育機関言語。
MSがアカデミックが異常なほど安い。
教育機関でそっちにながれる・・・
→ 講義に利用されなくなる
→ pascalのシェアが格段におちる。
→ ユーザーが次第に減る。
→ 存在が忘れられる。
→ 商売がなりたたなくなる。
ただにする
教えやすいので
教育機関でそっちにながれる・・・
→ pascalのユーザーが増える。
→ pascal好きが徐々に増える。
→ 物好きが物足りなくて上位へバージョンアップする。
→ 商売が維持できる。
MS防衛策+先行投資みたいなものだよ
その割には詰めが甘い
初心者向けの話じゃないな。
>>854 でも結局アカデミックを仕掛けたのって元房ランドのOH!NOじゃないの?
つまり・・・・
資本力には勝てないってことだ
フリーにしても流行らない、それがDelphi
だが、それがいい
>>846 間違い。
>>845 ボタンのOnClickイベントの時にFreeしているのだと思われるが、この時呼び出し元のコードでは
まだ自分自身のフィールドにアクセスする可能性が残っている状態にある。(というかアクセスする)
で、たまたまFreeしたときそのメモリ領域が無効化されていない状態だと、AVが発生しない。
てかトレースすりゃすぐわかるだろ。
Del6だとアクセスしないな
delphi6personal使ってます。ワークスペースが二つあるMDIアプリケーション を作りたいのですがどうすればいいのでしょうか? TSplitterでできると思ったんですがコンポーネントを配置してないと強制的に端に来てしまう のでどうやら無理みたいです。何かいい方法ありますでしょうか?
>>864 どうしてもMDI(親フォームの中に子フォームが複数ある)でないといけないの?
今風のインターフェースだと、パネルを二つ用意してスプリッタで仕切ると言うのが主流だと思うけど。
866 :
864 :2005/06/12(日) 20:02:17
>>865 特にMDIにこだわりはないんですが、たとえばDonutのようなタブブラウザの
ワークスペースが二つあるようなソフトってその方法で作れるのでしょうか?
タブで複数のドキュメントを管理する方法っていったらMDIしか頭になかったので、
それ以外でつくれるなら何でもいいです。
867 :
デフォルトの名無しさん :2005/06/12(日) 20:36:00
>>866 Donutと言うのは使ったことがないのではずしているかもしれませんが、
タブによるページの切り替えをやりたいのなら、Win32コンポーネントパレットにあるTPageControlが使いやすいと思います。
言葉尻を捕らえてあれこれいうつもりではありませんが、タブブラウザのようなインターフェースとMDIというのは違うものです。
MDIというのは、ちょっと前のエクセルやワードのようなインターフェースのことをさします。
テキストエディタやブラウザをダブルクリックしたときに単語を選択することが出来ますが 文字列の位置から単語を取得したいのですが、どのようにやれば出来ますでしょうか?
>>868 1、ダブルクリックされた位置を取得。
2、ダブルクリックされた位置にある一文字を取得。
3、2の場所から文字列を前後に検索して半角もしくは全角スペースを探す。
4、スペースが見つかったらスペースからスペースを1単語として判断して選択状態にする。
連続した日本語文字列で3をやるためにはそれなりの辞書が必要かも。あるいは助詞で判断するか。
mathを使うのがいやだったから ヘルプファイル Power(Base, Ex) = Exp(Ex * Ln(Base)) 違う値がかえってくる・・・ 変だなと。 mathのソースをみると・・・・ まにうけた俺がばかだった。。。 アセンブリわからないので。 整数乗のときは、Resultにforでかけつづけることにした。 うそ情報ながしうやがって、 ひとこと 精度が・・・ とかいてくれてていたら きがついたものを・・・ 坊のあほ。
871 :
864 :2005/06/12(日) 23:07:18
>>867 MDIでやらなくてもTPageControlでタブによる切り替えができるんですね。
DonutがMDIみたいなのでタブブラウザ=MDIみたいな図式が出来上がってました。
>>865 >>867 お二人ともありがとうございました。
>>862 >てかトレースすりゃすぐわかるだろ。
この現象で以前悩んだがトレースするのは厳しいぞ。
このコード書いた時点で「なんかやばいかもなー」なんて思っても
実行してみると「あ、うごいた」ってことで放置。
何度かやってみると数十回に一度あるかどうかの確立でAV。
しかもDelphi5〜2005でも同じ現象、実行するマシンによって再現もまちまちだからな。
そりゃそうと、これの解決方法はPostMessageでやるのがベストなのか?
原因はなんとなくわかるが、解決方法がPostMessageでいいのか未だによくわからん。
PostMessageが定石。
>>873 そうか、サンクス。これで安心出来るよ。
スカパー!加入してるか?
VCLSkinのDemoを使っていると、フォームのキャプションに「Vclskin Demo」と表示されますよね。 自由にフォームのキャプションを変える方法はありますか? それか、無料のスキン搭載コンポーネントはあるのでしょうか?
なんか、定期的に同一人物の書き込みを見かけるな。 少しは自分でやれよ。
このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが、 お礼はDelphiの布教と初心者の救済をお願いします。
>>876 FormのDCハンドルを取得。
SystemParamInfoでキャプションバーの高さを取得
Canvas.TextOutでキャプションに好きな文字列を描画。(CanvasのブラシはbsSolidな)
そういうのってライセンスに違反しないのか?
微妙にスレの趣旨とずれてそうな質問なんですけど とあるアプリのウィンドウクラス名がTApplicationなので どうもBorland開発環境製だなと思うのですが これがDelphi製なのかそれとも他のC++Builderとかなのか判別する方法ってありますか?
よく知らんが、エディタで開いて delphi を検索してみるとか
Delphiは両方含まれるから"Borland C++"のほうがいいで
884 :
881 :2005/06/13(月) 21:02:07
うーん。バイナリエディタで検索してみましたがヒットしません。 というか読める文字列はお約束の「This program must be run under Win32」ぐらいです。 exeのサイズを減らす圧縮ツールでも使ってるのかな・・。
>>884 そうなんでない?
普通読める文字入りまくりだから。
>>884 いったいなんて言うアプリだ。
ひょっとして俺の作ったソフトじゃねえか(w
Winny2だったりしてw だったらBCBだが。
圧縮してる点もあってるな
王様げぇむしようぜ!
892 :
デフォルトの名無しさん :2005/06/14(火) 00:44:52
動的に生成したコンポもフォームを閉じれば廃棄されると思うのですが、ごく稀に モジュール 'HOGE.EXE' のアドレス ××××× でアドレス ××××× に対する読み 込み違反がおきました。 が発生することがあります。やはり明示的に廃棄するべきなんでしょうか?
Formを閉じるというより、Ownerが破棄された時に子Componentも破棄される それで、そのエラーだが、恐らく自動的に解放されたはずの インスタンス参照用変数を参照してしまっているんじゃないか? 自動解放ではnilは割り当てられないからAssignedでのチェックも無意味だぞ
894 :
デフォルトの名無しさん :2005/06/14(火) 13:57:14
ファイルのプロパティ画面を表示したくて Win32Check(32<=ShellExecute(Application.Handle, 'properties', 'c:\test.txt', nil, nil, sw_show)); というコードを実行しても関連付けがないと怒られます。 何がいけないのでしょうか。c:\test.txtというファイルはちゃんと存在しています。 c:\windowsに変更しても同様のエラーが出ます。
ShellExecuteExにしたらうまくいきました。うーむ・・・
DELPHIってメモリ管理がダルすぎ。ガベージコレクション実装しろよ。
delphi.netに実装されてるよ馬鹿
ドドネトの話じゃねーんだよ馬鹿
玄人同士の高度な議論は別スレで
初心者はドドネトしかわからないから┐(´〜`;)┌
TComponent派生にすれば自動で後始末してくれるお
ガベコレ自体が初心者向け機能だよな
ガベコレ自体は悪くないが、 我部凝れしか無いのは困る。
>>881 最近見かけないけど、DelphiのDFMロード用ツールがあって、
それでプロジェクトファイルまで復元できたらDelphi、
出来なかったらBCBと判定できたYO!
お前ら凄いですね。
何話してるのかさっぱりわからん ここ超初心者スレだよな?
Delphi製かどうか知りたいんだろ ソフトのどのパーツにもClassの名称があって特にDelphiはT〜が標準だから その手のツールで見るとすぐわかる。 ※飛龍さんのClassFinderが使いやすいかもしれない。 が、BCB(C++Builder)も同じようにT〜とか表示されるから区別しにくい。 Exescope(であってるかな?)みたいな調べものツールで BCBソフトを開けないことで結果的に区別できたということ。かな? ちなみにプログラムの圧縮についてはUPXとかで検索してみること。 HDD上やDLサイズ上でexeのサイズ節約のメリットがあるけどソフトが軽くなるわけではい。 ガーベージコレクションとはメモリ管理をある程度OS-プログラム側で受け持ってくれること。 逐一開放とか気にしなくて良いから開放忘れが減る。大体そんなかんじで
古いバージョンのUPXはDelやBCBのEXE圧縮すると100%死亡していた…
5年前から使ってて大丈夫だけどいつの話だ?昭和?
>909 UPX1.21と、Del4orBCB5のEXEを組み合わせると、 できあがるEXEが使用不能だった。
>>910 圧縮オプションでいらんとこまで圧縮するとそうなる。
やっとくだすれっぽい内容になってきたな。
Delphi2005を使っています。 DirectsoundのSetFrequencyを使うとある程度簡単に周波数を指定した音を再生できると ネットで調べて分かったのですが、どうしてもコードが分かりません。 どなたかどんなコードになるのか教えていただけないでしょうか? あるいはどこかにサンプルコードがあったら教えてください。 Delphi-MLなどを色々と調べたのですが、ぐぐっても英語や中国のサイトばかりで何も 見つかりませんでした。
デルヒー難しいです・・・
916 :
デフォルトの名無しさん :2005/06/15(水) 15:49:39
デルファイの本売ってなさ杉だし、高いから本とか買いたくないんだけど ネットで勉強してゲーム(マリオみたいな)つくれるようになる? マイナー言語だって聞いたけど、ここまでとは・・(・c_・` ) ヴィジュアルベーシックは初心者には遠い言語になったそうだし これしかないと思っております。 よろー
>>916 やる気も無く最初っから人にたよりすぎてるおまえは、
これ以上、人間としてのスキルアップはのぞめません。
かえれ。
このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが、 お礼はDelphiの布教と初心者の救済をお願いします。
922 :
デフォルトの名無しさん :2005/06/15(水) 17:48:19
Memo1の内容をStreamで保存したいんだけど、 Abstractエラー!って怒られます。 どうしたらいいでしょう。 procedure TForm1.Button1Click(Sender: TObject); var stream:Tstream; begin try stream:=Tstream.Create; //try Memo1.Lines.SaveToStream(stream); //except //end; finally stream.Free; end; end;
TFileStream, TMemoryStreamのどっちかにしろ。
とりあえずInside Windowsを購読することを薦める・・・たかった。 コラムを再編集して別冊にしたりいい雑誌です・・・だった。
>>916 まったくの初心者なら、デルファイ2時代の本でも結構参考になる。
根本のところが大きく変わっていないから。
ネットオークションとか古本屋を当たるもの手だよ。
俺も今はデルファイ6ENTを使っているけど、デル2時代の本が結構参考になったりする。
926 :
922 :2005/06/15(水) 18:15:40
>>923 ありがとうございます。確かにエラーはでなくなったのですが
最終的にはTstream型を要するコンポーネントに使用したいので
Tstreamで実現することはできないでしょうか?
TStream は抽象クラス。TFileStream も TMemoryStream もその下位クラスだから 代入可能。OOP をもすこし勉強すべし。
>>926 TStreamは両クラスを統一的に扱うための抽象クラスなので
var stream: TStream;
stream := TFileStream.Create or TMemoryStream.Create
Memo1.Lines.SaveToStream(stream); <- Memo1はどちらのクラスに書き込んでいるかは感知しない
という使い方が出来ます。
このあたりはオブジェクト指向プログラミングの肝なので
いずれ勉強することになると思います。
>>916 たしかにそうだね。CやJavaはあってもDelphiはまったくない。
大規模書店でもない。どこにもない!
>>924 今本棚見たらInsideWindowsが4冊だけ残ってた。
ほとんど持ってたんだが、どこいったんだろ。
amazonで検索してみたけど 2002,3年以降はあまり出版されてないみたい。知らなかった(汗 買い漁った=手持ちはほとんど2000年前後ですね。D5〜7あたり。栄枯盛衰・・・orz あと、プログラム関連、学術書(学〜院)関連は 普通の古本屋には買い取れないジャンルだそうです。 プログラマーにとっては欲しい古本は沢山あると思うんですが マイナー且つ古い情報になるので売れない&場所をとる筆頭だとか。
楽天の本屋で色々買ってるけど品揃えは結構いい気がする
マイナーであることはつらい。 そこでメジャーに移籍するか、または、マニアに変身するかが分かれ目。 Del厨は言うまでもなく後者なわけだが・・・・・
またこの流れか・・・
アプリケーションのアイコンをDelphiの元々のアイコンに戻したいんですが アイコンが見つかりません。 どこにあるんですか?
>>936 それ俺もはまったw
ダミーのプロジェクト作って*.resから取り出すとか。
>>937 おお、なるほど。*.resに入ってることすら知りませんでした。
おっしゃる通りにダミーのプロジェクト作って
それのresファイルと置き換えたら元のアイコンに戻りました。
ありがとうございました。
939 :
デフォルトの名無しさん :2005/06/15(水) 20:18:16
おれ:どこって中だよ 中 きみ:えっ おれ:ほら 中だよ きみ:えっ ^_^;;; おれ:だから中だって きみ:えええっ ^_^;;; おれ:だから中だって きみ:えええっ ^_^;;; おれ:だから中だって \BIN\DELPHI32.EXE きみ:えええっ ^_^;;;
DelphiかどうかはリソースのRCDATA見れば分かる。
941 :
デフォルトの名無しさん :2005/06/15(水) 21:15:26
TQueryコンポーネントのFilterプロパティで kana Like '%ABC%' といった絞り込みを行いたいのですが、 「この操作は行えません」とDelphiのエラーが表示されます。 他の項目(日付など)では問題なくFilterできました。 どうすればよいのでしょうか?
>>941 フィルタ式はSQLじゃないから、
kana = '*ABC*'だよ〜ん。
>このスレッドは、他のスレッドでは書き込めない超低レベル、 >もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 >Delphi使いが優しくコメントを返しますが、 >お礼はDelphiの布教と初心者の救済をお願いします。 度々これ出るけど、これって技術的に解らない(説明できない)って意味じゃないのか? 少なくとも日本語書けないような奴や調べようともしていない奴の言い訳に使われるのは 激しく違う気がする。
そんなのいちいち蒸し返すやつほど問題外。
お前らおちけつ
俺も最近 Delphi 始めてみたんだけど、文献が無くて辛いし面倒すぎ。
>>622 に禿同だったんが、次のレスみてかなり萎えた。
Delphi6 Personal が無料といわれても、その後のイメージが悪過ぎる。
ちょっとしたことを調べるだけでも、かなり手間と金が掛かる気がする。
俺は Delphi でやりたいことがあるのでコツコツと続けているが、
こんな状態では、新規参入する人なんて殆ど居ないんじゃなかろうかと思った。
>>984 言いたいことは分かるけどね……それは既に熟練した結果なんじゃない?
ちょうど、今 WideFormat 使ってで変換したくなって、適当に使ってみたら実パラメータが足りないと怒られた。
Delphi6 Personal 付属のヘルプ
function WideFormat(const Format: WideString; const Args: array of const): WideString;
で、具体的にはどう使うのだ?
例文無いし、付属のヘルプはリンク切れしてる (よくある)
WideFormat delphi で Google検索
http://www.google.com/search?q=WideFormat+delphi&sourceid=mozilla-search&start=0&start=0&ie=utf-8&oe=utf-8&client=firefox-a&rls=org.mozilla:en-US:official 日本語限定で3件ヒット 1件リンク切れ
生きた2つリンクも実際に行ってみれば分かると思うが、全く無意味 orz
で、次は英語で漁るとして、それで駄目ならどうやって調べたものかな……と。
適当にソース漁りまくるか、本買うしか思い付かない。
こんな馬鹿みたいに単純なことをしたいだけなんけど。
まぁ、俺の調べ方が変なのかもしれないが、初心者なんてこんなものですよ。
というか、毎度毎度こんな状態ばっかりで萎えまくり、なんか良い本ないですか?
[ちらしの裏]
って、投稿する寸前に、似た別の変換関数で検索することに思い付いたら解決した orz
printf に似た利用方法な関数で、第1引数 は'%s' 第2引数は [変数] と指定すれば良いのか?
付属ヘルプだけで、どうこれに辿り付けば良いのか分からないですよ orz
こんなことか可能になるだけで 30分以上浪費しましたとさ
他の言語では、こんな酷い状態に陥りまくったことはないんだけど
>>943 そういうのも構わないというのが、このスレの主旨だったはず。
「こいつには回答したくねー」と思うならスルーすればよし。回答する義務はないんだし。
>>949 Format関数にたどり着ければなぁ・・・。
>>949 日本語限定というのが、おかしいですね。
そのGoogle検索でも、すでに大量にヒットしているじゃないですか。
英語が分からなくても、コードをみれば「適当に」分かるのでは?
付属ヘルプもリンク切れしていないようですし。
初心者すれで聞けば、すぐ回答がつく事ですし
何を求めているのか良く分かりません。
完璧を求めるなら、ソース付のPro版をお勧めします。
> 他の言語では、こんな酷い状態に陥りまくったことはないんだけど
何と比較しているのか良く分からんが
他の言語は金を出してもソースがついて来ないからな。
つか、適当に使って、上手く行かないって逆切れしている
>>949 って・・・
>>949 ヘルプのリンク切れであれこれ悩んで長文書く間に
お気軽にWideFormatってなんだと聞いてくれればいいのに。
# 気持ちはわかるがこのスレでそういう物言いをすると
# おにいさんたちが嬉々として寄ってくるので正直もう少し言葉遣いを考えてくれ。
# このスレの平和と安定の為に・・・
いまから、Delphi入門は正直おすすめしない。
そうそうWIN32対応のLonghornがリリースされるもんね。
最近プログラマにも、安定した公務員が一番、みたいなやつが増えてきたな。
タダにしても流行しない、それがDelphiクオリティ
ファイルの更新日時を秒単位まで正確に取得したいのですが、奇数秒が偶数に切り上げられてしまいます。 Delphiでファイルの更新時刻を正確に取得するにはどうしたらいいんでしょうか。 調べてみたところ、ファイルシステムがFAT32だと、奇数秒が切り上げられるというファイルシステム上の 制限があるらしいのですが、私の使用している端末はNTFSです。 テストに使用した関数は、 ・FileAge→FileDateToDateTime ・FileGetDate→FileDateToDateTime ・(FindFirst→)SearchRec.Time→FileDateToDateTime です。すべて同じように奇数秒が偶数に切り上げられます。 OSはWindowsXP SP1 DelphiはDelphi7 Enterprise です。 よろしくお願いします。
GetFileTime API
内部でDOS形式に変換してるから必ず2秒きざみになる
NTFS専用ならばSearchRec.FindData.ftLastWriteTimeを
FileTimeToSystemTimeで変換しる
>>961 使う場合のやり方は
>>961 に聞け
963 :
960 :2005/06/16(木) 15:48:37
>>961 私ももうちょっと調べてみましたが、Delphiから呼ばれるAPIは
・FileAge→FindFirstFileA
・FileGetDate→GetFileTime
・(FindFirst→)SearchRec.Time→FindFirstFileA
となっていました。
GetFileTime APIは、FileGetDateから呼ばれているようですね。
FATの最終更新時刻の分解能は 2 秒で、NTFSでは1秒(?)なので、
FileGetDateで正しく取得できるはずなんですけどねえ...
>>963 FileTimeToDosDateTimeを見落としてる
>>963 ごめん、
>>962 はFileTimeToLocalFileTimeしてからFileTimeToSystemTimeだ
皆さんありがとうございます。なんとかできました。 SearchRec.FindData.ftLastWriteTime→FileTimeToLocalFileTime→FileTimeToSystemTime→SystemTimeToDateTime とすればうまく取得できますね。 こんな感じになりました。 function GetFileUpdTime(sFileName: String): TDateTime; var SearchRec: TsearchRec; LocalTime: TFileTime; SysTime: SYSTEMTIME; begin FindFirst(sFileName, faAnyFile, SearchRec); try FileTimeToLocalFileTime(SearchRec.FindData.ftLastWriteTime, LocalTime); FileTimeToSystemTime(LocalTime, SysTime); result := SystemTimeToDateTime(SysTime); finally FindClose(SearchRec); end; end;
967 :
960 :2005/06/16(木) 16:31:28
966=960です。 FileAgeやFileGetDateでは、内部でFileTimeToLocalFileTime→FileTimeToDosDateTime と変換しているため、秒が切り上げられてしまうんですね。 というわけで、GetFileTime(API)→FileTimeToLocalFileTime→FileTimeToSystemTime→SystemTimeToDateTime でもうまくいきました。 ところでなぜ、DelphiではFileTimeToSystemTimeを使わずに、FileTimeToDosDateTimeを使っているのでしょうか? FileTimeToSystemTimeがWin95/98に対応している以上、FATでも問題あるじゃないですよね?
>>967 WindowsAPIのヘルプにFATは2秒単位だと書いてあるが?
互換性という意味ではDOS形式にするのが正しい罠
ただ、プラットフォームで切り分けれとも思うけどさ
D1からの名残かもね。
970 :
960 :2005/06/16(木) 17:35:54
>>968 互換性ですか。分解能が高くなる分には問題ないような気はしますが、もし互換性のためであれば、
やっぱりNTFSとFATの両方に対応した新しい関数も用意して欲しいものですね。
>>892 フォームを閉じただけではフォームは廃棄されず,そのコンポも廃棄されません.
閉じるときに廃棄したい場合はOnCloseイベントでAction に caFree を代入します.
>>929 もう5年くらい前ですが東京・新宿の紀伊國屋書店にDelphi関連書籍がほとんど無くて参ったことがありました.
近場の書店の方が揃っていたという.
(※近年,某魔法メガネ君の本で有名になった八王子駅前の某書店)
>>948 Delphiのヘルプは駄目なのは事実ですけどね.
J Builderの成功例をまねて普及のために無料版をばらまくなら
初心者がしっかり学べるドキュメントを残さなければいけなかったのですが….
>解能が高くなる分には問題ないような 偶数しか入ってこないはず、と思い込んでるソフトもあるんじゃないかな?
> J Builderの成功例をまねて普及のために無料版をばらまくなら > 初心者がしっかり学べるドキュメントを残さなければいけなかったのですが…. personal では作れないチュートリアルとかがあって、まだ修正されてないし、 もうそのときからドキュメントに関してはアキラメ。よって、ユーザ拡大もアキラメ。 先細りは自業自得だわな
パーソナルの登録で 「登録の最終確認のメールを xxxxx@xxxxxx に送信しました」 って出てから2日待ってもメールが来ないのは俺だけ? もちろんメアドが間違ってるなんてオチじゃないよ。
一定時間コンピュータがアイドル状態になったら イベントが起きるようなコンポーネントかAPIってあります? スクリーンセーバーみたいなことをやりたいんですが、 TApplication.OnIdle はメインスレッドが暇になったときにガンガン呼ばれるようで、 目的に合致しません。 Delphi 2005使ってます。
>>976 OnIdle イベント
アプリケーションがアイドル状態になったときに一度だけ呼び出され,
Done プロパティが False に設定されない限り再び呼び出されることはありません。
Delphi6のヘルプより。
978 :
976 :2005/06/16(木) 21:04:27
>>977 Done := True; すればいいのではないか、ということでしょうか?
アイドル状態の説明が不十分だったのでちゃんとしておきます。
私がやりたいのは、一定時間マウスやキーボードをいじらずに
放置しておいた場合、イベントを発生させるということです。
TApplication.OnIdleは、処理すべきウィンドウメッセージがなくなったりすると
Done := True としてもミリ秒単位で発生するので向いていないようです。
よろしくお願いします。
GetLastInputInfo
980 :
976 :2005/06/16(木) 21:24:19
981 :
デフォルトの名無しさん :2005/06/17(金) 04:34:35
Pasclソースの整形ツールってありますか?
984 :
デフォルトの名無しさん :2005/06/17(金) 10:30:40
八王子駅前って、くまざわ書店?
コメントが抜けておりました.問題点等ありましたらご指摘下さい.
特になければこのテンプレでスレ立てにトライしてみます.
以下,1レス消費してしまったので.
>>975 >>973 の指摘は正しいと思います.ヘルプのリンク切れってぶっちゃけあ(ry
>>984 そうです.ここ数ヶ月は理工書売り場に行っていませんが,多分今でもおいてあると思います.
雑談・喧嘩はフサフサスレへっていれておいたら?
喧嘩って書くとかどが立つから、「雑談・討論」はフサスレへかな。
992 :
デフォルトの名無しさん :2005/06/17(金) 19:25:26
random(10) とすると かなり数値が偏るんですが 対処法は無いでしょうか?
random初期化関数無かったっけ?
ランドミゼ
999
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。