3 :
1修正 :2005/07/13(水) 19:17:03
過去スレのh入れるの面倒だったので、h抜きで1レスにまとめました
乙
立派なカキコまだぁー、チンチン AA略
>>1 乙です。
>>4 粘着君が「Del使いはスクリプトも使えないのか」と難癖をつける、に100モナー。
ってかテキストエディタの置換も使えないようだな
質問です。 delphiでDirectMusicを扱う方法を教えてほしいのです。 ぐぐったりしたけど、さっぱりだったもので、、、
DirectMusic ってなんだ? 説明がたりないぞ。
>>1-4 おつかれさまでした.
●前スレ948
http://pc8.2ch.net/test/read.cgi/tech/1119008091/948 VC++とかで書いたことがないので基本的なところで間違っているかもしれませんが.
下記のようなコードで実験した限りはどれもあまり変わりませんでした.
(Delphi版)
Canvas.Brush.Color := Random($ffffff);
(API版α)
LogBrush.lbColor := Random($ffffff);
aGDIBrush := windows.CreateBrushIndirect(LogBrush);
SelectObject(Canvas.Handle, aGDIBrush);
:
DeleteObject(aGDIBrush);
(API版β…Windows 2000以降のみ,Win9x系不可)
SelectObject(Canvas.Handle, GetStockObject(DC_BRUSH));
SetDCBrushColor(Canvas.Handle, Random($ffffff));
●前スレ957
http://pc8.2ch.net/test/read.cgi/tech/1119008091/957 これもはじめて作ってみた次第.
うちはDelphi 5でフォームの半透明機能がないのでAPIで半透明化しています.
ただしUpdateLayeredWindow APIを使っているのでDelphi 6のとは内部の挙動が違うかも.
以下はこのプログラムを5台のPCで動かしてみた実験結果.右端がプロセスのCPU使用率(タスクマネージャの値)
(実験プログラム:フォームサイズ320×240,UpdateLayeredWindow使用,毎秒20コマ書き換え)
あ:WinXP/Athlon 64 3000+(※1GHz固定)/GeForce FX5200 →0%
い:Win2k./Athlon 64 3000+(※@800MHz)/Millennium P650 →0%
う.:Win2k./Pentium III 900MHz/Millennium PCI →40%
え:Win2k./Eden 600MHz/オンボード(VIA/S3G CLE266) →80%
お:WinXP/C3 900MHz/オンボード(Trident Blade 3D) →60%
どうも半透明処理をハードで処理できない環境だとCPUの使用率が跳ね上がるようですね.
ちなみにTBitmap.Transparent = Trueで描画するときは描画時にマスクビットマップを作ってから転送しているようです.
Windowsではごく一般的な方法と思われます.
なお2Dゲームのキャラクタのように描画するイメージがあらかじめ決まっているなら
マスクのイメージ一定になりますからあらかじめマスクビットマップを用意すれば多少は速くなるはずですが,
上のCPU使用率の問題がある限りは焼け石に水です.
>>13 > 下記のようなコードで実験した限りはどれもあまり変わりませんでした.
おつかれー
VCL は TWinControl の派生クラスの場合などと違って、GDI 関係は結構薄いラッパ
なんですよね。むしろペンやブラシやフォントなんかはリソースマネージャがある分だけ
リソース的には API より有利です。Canvas.TextOut のような場合を除けば、API を
つかうことでパフォーマンスを大幅にアップすることは難しいでしょう。
いや、 TextOut でも普通は数100回どまりでしょうから、互換性や抽象性を犠牲にして
まで API を使う意味はない、というのが妥当でしょうね。
DrawText は、書式矩形内でのテキスト配置ができるので、Canvas のメソッドにないので
よく使いますけど。
今までDel 4でHelpDesignerのWinHelpを使用していたのですが、Del 2005に変える とWinHelpを認識しなくなってしまいました。 Application.HelpCommand(HELP_FINDER, 0); で組み込んだヘルプボタンを押して も応答がなく、Application.HelpContext(aaa); でaaa(番号)を呼び出すと 「状況感知型ヘルプがインストールされていません」と出ます。 使いづらい2005のヘルプを読むと、Application.HelpCommandの引数は2つとも Integerと書いてあります??? 検索してみてもよくわかりません。何が悪いんでしょうか。
WinHelpViewerをusesしていないっていう話?
相模原市か町田市でDelphi出来る人を雇いたいんですけど、実際居ますか?
スレ違いだ。っていうか板違いだ
Delphi6 Personal インストールしたばかりです。 ウィンドウののキャプチャする(スクリーンショットをとる)プログラムを作ろうと思って、「TClipboardというコンポーネントを使え」という情報まで辿り着いたのですが肝心のソレが見つかりません。 一体どこにあるのでしょうか。
コンポーネントじゃなくてクラス。 ヘルプを見てキーワードに TClipborad と入れると使い方が書いてある。
>>20 TBitmapとGetDCで取ったDCハンドル突っ込んだTCanvasで十分じゃないか?
どうも PirntScreen から取り込むみたいだよ。それはそれでいいんでないかい
25 :
16 :2005/07/14(木) 23:49:10
>>17 どうもありがとうございました。全然知りませんでした。
WinHelpViewerでググってもよくわかりませんでしたが、YAHOOでは一番上に
出ました。
かなり初心者です。 質問なんですが、Delphiで作ったアプリをスキンを使って 外観を変えることは出来ますか? 参考になるページや書籍などあれば教えてください。 ググってみましたがよく分かりませんでした。 よろしくお願いしますm(__)m
プログラム(ソース)に長文のテキストを含めるには、 Delphi の場合どうしたら良いのでしょうか?
オブジェクトのプレインテキストへの永続化ってどうやるの?
>>28 1. リソースファイル
2. そういうコンポでも作る
3. String でがんばる
>>29 よく意味がわからんが、
published な TStrings 型プロパティ
っつーことけ?
31 :
30 :2005/07/15(金) 06:24:39
ん?ちょっと待て、ソースに含める? ソースコードに含めるなら String しかない。
32 :
28 :2005/07/15(金) 07:15:46
>>30 あいや、プログラムに込めれれば良いので、リソースファイルで良いと思う。
……やり方全然分からないけど、がんばってみます。
*.rc のファイルを作成する。 プロジェクトメニューのプロジェクトを追加で、先ほどの*.rcをプロジェクトに追加する。 エディターに新しくタブが出来るので、そこで「MYTEXT TEXT "*.txt"」のように書き込む。 したら、普通にコンパイルするだけ。 *.rcを追加した時点でコンパイラ指令は自動で書き換えられるから。 後は、各自ResHackerとかでリソース確認すればいい。 あ、因みに呼び出し方は procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Lines.LoadFromStream( TResourceStream.Create(hInstance, 'MYTEXT', 'TEXT')); end; な。試してないけど。 分かりにくくてごめん><
>>18 まじっすか、レスサンクスです。
求人かけてみます。
>>33 TResourceStream解放しろよ
そのコードの書き方だとお前、多分気付いてないメモリリークが沢山あるぞ
>>27 アンカー間違えました、すみません・・。
今は仕事間に合ってます・・よね。
この書き方だと、手続きや関数抜けた時に自動で開放されるって聞いたんだけどw
39 :
33 :2005/07/15(金) 09:30:03
あぁごめん。プログラム終了時に開放される訳ね。 でもまぁアルゴリズムさえ分かっていただければそれでいいんで。
40 :
デフォルトの名無しさん :2005/07/15(金) 09:56:28
bmpやjpgみたいなバイナリファイルを 読み書きしたいのですがどうすればいいのでしょうか テキストファイルみたいにAssignFile〜Reset(Rewrite)〜Writeln(Readln) という感じでOKですか?
アルゴリズム以前にちゃんと TResourceStream のインスタンスを開放しろよ
>>40 TMemoryStream の使い方を覚える
>>42 TMemoryStreamのインスタンス作って
読み込みはLoadFromFile書き込みはSaveToFileという感じですか?
ファイルの自体のSave、Load はそのとおり。 ファイルの内容の読み書きは、Write と Read とかのメソッドを使う
>>41 はしつこい奴だなw 書き方だけ書いたんだからそれでいいじゃん。一回言えば分かるんだよ。
日ごろのストレスを他人にぶつけてどうするんだw
ある種の精神病を患うとそういう細かいことを適当に省くことができなくなるらしい。
悪しき例は無いより悪いな
メモリリークを「細かいことを適当に省く」とかいって放置するようなヤツは プログラマやめれ
1 社会的相互作用の重大な欠陥 a 友達と相互に関わる能力に欠ける 2 没入的で狭い興味・関心 a ほかの活動を受けつけない b 固執を繰り返す 4 言葉と言語表現の問題 e 理解の悪さ:表面的/暗示的意味の間違った解釈を含む
特に2は45にあてはまりそうだな
51 :
36 :2005/07/15(金) 11:06:52
以下の書き方でFreeっていりますよね? with TStringList.Create do begin 作業 Free;//これいるよね?でも、どこかでwith抜け出したときに開放されるというのを見た記憶が・・・ end;
いりますね。
インタフェースを含むクラス以外では自動でガベージコレクトされることはないです。
TStreamAdapter なんかは
>>33 のような形で使っても問題ないです。
ありがとう SQL見たいに別名つけれれるようにならないかなぁ〜 コードの可読性あがると思うんだけど… with TStringList.Create A, TObjectList.Create B do begin 作業 A.Free; B.Free; end;
ふつう A := TStringList.Create; B := TObjectList.Create; のようにして使う。その例だと with 使うのはバグの温床
>>55 そうだね。
コード書くときはそうしてるよ。
ただパッとあまり保守を考えなくていいテストツールなんか書くときは
設定したいプロパティ多いとwithは使うんだよね。
まぁあったらいいかな、といったレベルのお話ということで
変数やエリアスの宣言楽にやりたいならC#逝っとけ
with ないけどね
procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Lines.LoadFromStream( TResourceStream.Create(hInstance, 'MYTEXT', 'TEXT')); end; とりあえずこの例で自動解放されるってマジ?
>>26 自己流でしか作ったことがないのですが
フォームにイメージコンポを載せて,これにスキン画像を設定.
一番単純なのはウィンドウ全体を1枚のスキンで覆う方法.
フォームの全面にイメージコンポを貼り付け.
ウィンドウ全体のイメージを持つスキン1枚を用意してこれをイメージコンポに設定.
ボタンの絵のあるところにスピードボタンを置き,これのFlatプロパティをTrueにする.
(絵に描かれたボタンが四角くないとかっこわるいですが)
ちなみにスキン画像をフルカラーBMPにするとファイルサイズが無駄に大きくなるので,
256色以下に落とすとかJPEG形式にすると良いでしょう.
なお,長方形でないウィンドウにするのでしたら『リージョン』を使います.
(詳しくは『Delphi フォーム リージョン』で検索してみて下さい)
61 :
デフォルトの名無しさん :2005/07/15(金) 17:13:36
質問です。 if Query.FieleByName('AAA').AsString = '' then この場合にAAAの値がNullだったら、↑の条件はTrueになりますでしょうか? 確実にNull場合でもTrueで拾いたいのですが何か良い方法はありますでしょうか? 宜しくお願いします。
>>61 AAAがNullっていうのは空文字( '' )のこと?
Queryがnilでもっていう意味かな?
前者として回答
Queryが何のインスタンスか分からないけど、
FieleByNameってヘルプで調べたら'AAA'が見つからない場合は例外生成とある。
例外を出したくない場合はFindを使えってあるから、
if (Query.Find('AAA') = nil) or (Query.Find('AAA').AsString = '') then
DB関係いじったことないし、質問もよく分からんので激しくはずしてる悪寒
Length() つかえないの?
>>62 >>38 これ
リークするならいいんだ
これでリークしなかったら俺の常識が根底から覆る
ガベージコレクタがある言語だと普通の書き方なんだよな。あれ。
>>61 『値がない』かどうかは多分 FieldByName('AAA').IsNull で調べられると思います.
確実なのは実際にテーブルを作ってみることです.
プロ版以上ならDataBaseDesktopとかで作れます.
68 :
26 :2005/07/15(金) 22:01:40
>ななしへたぐらま さん 有り難うございます。 早速参考にして、調べてみたいと思います。
関数の引数にconst付けると呼び出しコストが増えたりするんですか?
むしろ減る。長い文字列なんかは const なしの場合はコピーのコストがかかる
72 :
デフォルトの名無しさん :2005/07/16(土) 21:56:32
Delphiで昔のN88BASICのランダムファイルを読み書きするにはどうしたらよいですか?
>>71 長い文字列でも変わらんだろ。
呼び出しの時点でコピーなんてされない。
DirectX9のユニットってありますか?
clootie
77 :
26 :2005/07/17(日) 00:28:58
ミ,,゚Д゚ミノ さん 有り難うございます。 スキンを使う場合こういったものを使うのが、 結構一般的だったりするのでしょうか? それと、ご紹介頂いたものは結構簡単に使えるものですか? (個人使用目的なので金額的にもチョット...)
なんかフリーのなかったっけ。微妙にへぼい奴。 ユーザーにスキン切り替えとかさせたいならこの手の使った方がいいけど、 単に見た目を派手にしたいだけならそれこそフォームにイメージ表示でもいい気がするよ。 後、XPユーザー限定でよければ.manifestなんてのもあった気がする。
FastMM入れるとメモリリークしてるかどうかがわかるよ
あっそ。
81 :
デフォルトの名無しさん :2005/07/17(日) 17:07:08
ListView(ViewStyleはvsReport)で指定行の指定列のCaptionをいじるには ItemsをAddした後どうしたらいいですか? ListView.Items[XX].Caption := Edit1.Text; にすると指定行の1列目はいじれるようになりました。 ListView.Columns[XX].Caption := Edit1.Text; にすると0行目の指定列はいじれるようになりました。 これを組み合わせるにはどうしたらよいでしょうか? あと、TListItemについてもよくわかりません...
>>81 1列目 ListView1.Items[XX].Caption := Edit1.Text
2列目 ListView1.Items[XX].SubItems[0] := Edit1.Text
3列目 ListView1.Items[XX].SubItems[1] := Edit1.Text
:
83 :
デフォルトの名無しさん :2005/07/17(日) 21:27:10
ありがとうございます。 ItemsはAddできるのですがSubItemsがAddできません。。
84 :
デフォルトの名無しさん :2005/07/17(日) 21:37:50
↑なんとかできました。 ありがとうございました。
スナップショットを画像ファイルで保存する アプリケーションを作成しているのですが メタファイル形式でスナップショットを保存する場合 どうすればよいですか? 現状はBMPでBitbltして、ビットマップ、または JPEGで保存できるようにしています。 メタファイルの対応したいのですが 1.BitBltしたビットマップをメタファイルの変換する 2.BitBlt自体をメタファイルで行う の二択だと思うのですが どちらもやり方がわかりません。(死
>>85 池沼ですか?メタファイルにしたところで描画に時間掛かるっつーか
SSとかだったら余程単純な画面じゃないと無理だから。
>>85 メタファイルキャンバス作ってそこにBitBltしてやれば、形だけはメタファイルになる。
だが、メタファイルとはどういうものか調べて考え直すことをお薦めする。
はじめまして 本当にくだらない質問かもしれませんがHELPを見てもわからずググッてもそれらしきものが 見当たらなかったので書き込みました。 クリップボードに文字列を出力したいのですが、固定文字+変数の内容のやり方がわかりません 例) ’本日は’+A Aが’晴天’、’曇天’、’雨天’ のような感じです。 P.S. これから勉強して行こうと思っていますので初心者向けのサイト等もありましたらご紹介お願いします
>>88 uses
Clipbrd;
begin
Clipboard.AsText := '本日は' + A;
end;
ハゲドゥー
これからはじめようと思う初心者なのですが、DELPHIやめといたほうがいい理由って何でしょうか。
>>88 固定文字や定数はconstで宣言しておく
const
A = 'Hoge';
begin
Clipborad,AsText:= '本日は' + A; // Hoge
end;
お勧めのサイトはDelphi Acid FloorとSeventh Delphiかな
オレもお世話になった
96 :
88 :2005/07/18(月) 12:46:45
>>89 ,94
ありがとうございました。うまくいきました
また、ご紹介いただいたサイトも初心者にはわかりやすかったです
キーボードのスペースや上下左右を押してしまうと、 その度buttonが反応してしまい困っています。 反応しないようにするにはどうしたらいいのでしょうか? お願いします。
Form.KeyPreview := True;して OnKeyDownでKey := nil;
99 :
97 :2005/07/18(月) 15:15:39
ありがとうございました。
下のようにやってもBrush.Colorの値が消えていて、赤で塗りつぶされないんだけど、 なんで? ちなみにこの二つ以外に手続きおよび関数はないよ。 procedure TForm1.FormCreate(Sender: TObject); begin with PaintBox1.Canvas do begin Brush.Color := clRed; Pen.Color := clBlue; end; end; procedure TForm1.PaintBox1Paint(Sender: TObject); begin with PaintBox1.Canvas do begin //Brush.Color := clRed; // コメントアウトすると赤で塗りつぶされる RectAngle(ClipRect); end; end;
procedure TPaintBox.Paint; begin Canvas.Font := Font; Canvas.Brush.Color := Color; (省略) if Assigned(FOnPaint) then FOnPaint(Self); end; こういうコードだから
本当だ。FormCreateでPaintBox1.Color := clRed;としたら、赤で塗りつぶされいる。 たしかに、ヘルプ見たらキャンバスを初期化するとあるな。 助かったぜ。
C#と比べてexeが30倍以上巨大だから
105 :
デフォルトの名無しさん :2005/07/18(月) 17:55:17
スコープとか定義の書式とかポインタの扱いとかがキモくてウザいから
ま、ようするに馬鹿には無理ってことだ
>>104 すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
Del厨はどうして好んで初心者スレを荒らしたがるんだろう・・・
OCNが復活して変なのが増えたな
まあ、これから夏休みだし。
112 :
26 :2005/07/18(月) 23:30:35
>78 さん 有り難うございます。 出来れば季節(気分?)でスキン切り替えられたとは思ってはいます。 (その都度コンパイルしてもいいのですが...) >単に見た目を派手にしたいだけならそれこそフォームにイメージ表示でもいい気がするよ。 これは >60 ななしへたぐらま さん にご説明いただいた内容のことですよね? それと、XPや98SEも使いますし、業務を含め7割以上が2000なのでXP限定というわけには... アドバイス有り難うございました(^^
業務でスキンはアフォ。スキンは厨房のお遊び
わざわざパフォーマンス重視の2kでスキンとか意味ねーじゃん
アホは黙ってていいよ。邪魔だし
夏だよな。またDelphiの評判がた落ちだな。
低層ユーザの発言で評価が落ちる訳ねーじゃん。 普通は自分で使ってみて判断するもんだろ。
業務でスキン、うんぬんは言語に関係ないでしょ。
>>70-71 ,73-74
言語ガイドの説明を改めて読んでみたのですが,
どうも const をつける場合と何もつけない場合では内部処理に差はないようですね.
型などによって値渡しにしたり参照(ポインタ)渡しにしたりしています.
(興味のある方は,
言語ガイド→プログラムの制御→パラメータと関数の結果→パラメータの受け渡し
をご覧下さい.)
>>72 そのN88-BASICがMS-DOS版かそうでないかによって異なります.
MS-DOS版ならN88-BASICのランダムファイルの構造さえわかれば自在に読み書き可能です.
ただし構造がわからないのでこちらとしては具体的なコードは書きようがありません.
N88-BASICで読み書きに使っていたソフトウェアのソースコードが有れば機械的に移植することも可能です.
一方,「そうでない方」だとWindowsでは読めません.ディスクへの記録形式が異なるからです.
MS-DOS形式へのファイル変換,シリアル通信,又はインターネットなどににアップロードできれば転送できるのですが….
> どうも const をつける場合と何もつけない場合では内部処理に差はないようですね. D6 のヘルプより 構造化型パラメータや文字列型パラメータに対して const を指定すると,コンパイラは コードを最適化できます。また,定数パラメータを使用することで,パラメータが別の ルーチンに誤って参照渡しされるのを回避できます。 長い文字列だと CopyOnWrite であることを考えれば呼び出し時に差はなくても 変更予定がない場合は const 付けておく価値はありそう。 > 型などによって値渡しにしたり参照(ポインタ)渡しにしたりしています. これは分からない。どういうこと? クラスのインスタンスは実装がポインタだから const でも操作できる、っていうのは当たり前だとして、「値渡しにしたり」って どこ読むと分かるの?
さっさとJavaに移行しよーっと。
>>122 チラシの裏にでも書けよ害児。スレ違いなんだよ氏ね。
>>121 ごめんなさい,
>>120 は私の間違いです.
値パラメータ(何もつけない)と定数パラメータ(const)の内部処理に差がないなんて事はありません.
ヘルプの[言語ガイド]→[手続きと関数]→[パラメータ]→[パラメータ]の項にあるとおりです.
※以下中級者以上?向け※
私が見たのはDelphi 5ヘルプの
[言語ガイド]→[プログラムの制御]→[パラメータと関数の結果]→[パラメータの受け渡し]の項で,ここに
> 値パラメータと定数パラメータ(const)は,そのパラメータの型とサイズに応じて値渡しまたは参照渡しになります。
という記述がありそのあとに値渡しになるか参照渡しになるかの条件が書いてあります.
つまり,値パラメータで参照渡ししたり,定数パラメータで値渡しする場合があるようです.
どちらを使うかの条件が両パラメータとも同じみたいなので
勘違いして「内部処理に差はない」と書いてしまったわけですが,
全く同じだと値パラメータで参照渡しする場合に
関数又は手続き内で値を書き換えると呼び出し元の値まで変わってしまいますから
呼び出しの前に値をコピーしてそのコピーの場所を渡しているはずです.
TDBGridを初めて使っている初心者ですが、DataSourceである TQueryの各行に対して処理を行う時にDBGridの表示も同期して 動いてしまうのですが、これをやめさせることはできるでしょうか?
Data Aware じゃない方がいいなら TStringGrid なんかに自力で表示する
128 :
126 :2005/07/20(水) 16:01:05
やっぱそれしかないですかね。 それか別のSQL文を実行して開きなおすくらいですかね。 どうもありがとございます。
129 :
126 :2005/07/20(水) 16:42:13
TQueryのTagに関連するコンポーネントのポインタを 格納しておきたいのですがどうやればいいんでしたっけ?
130 :
126 :2005/07/20(水) 16:45:26
あ、integer()でできた
キャスト
133 :
質問 :2005/07/20(水) 18:58:51
EAccessViolationクラスの例外が発生しましたとの警告が出たのですが、 これはどういうことが原因で起きた冷害なのかわかりません。 どなたか教えてください。
冷害???クーラーの温度上げろよ!!
>>133 解放した、もしくは確保していないメモリに書き込んだ。
GetMemで確保した範囲を超えて書き込んだとか。
136 :
133 :2005/07/20(水) 21:36:36
qd3を使うのに、DirectXのSDKって必須?
qd3を使うのに、DirectXのSDKって必須?
139 :
137 :2005/07/21(木) 18:12:24
書き忘れ&2重投稿スマソ。 DGcaradのイベントが空っぽなんです。 137>>が関係あるんでしょうか??
俺のもイベントが空だが。
141 :
137 :2005/07/21(木) 21:07:45
ひょっとしてプロシージャの宣言って自分で書いても 別にいいんですか?
手続きや関数の中で、一時的なオブジェクト変数tmpobjに既存の インスタンスを代入した場合、手続きや関数が終わる前に、tmpobj := nil; としておいた方がいいのかな?
>142 不要 オブジェクト変数は単なるポインタ
了解
145 :
デフォルトの名無しさん :2005/07/21(木) 23:57:18
ええと、私、研究のためにDelphiを使い始めたのですがどうしてもわからないことがあります。 512*512の行列のデータがIntegerでダーッと書き込まれているファイルがありまして、 その行列同士の足し算、引き算がしたいのですがどうしても処理速度が上がらなく(2分ほど処理に時間がかかる) 困っています。 わたしの作ったプログラムの概要は、 @Readでファイルから行列の要素を一つ取り出す。 A引き算足し算の演算をする B結果をWriteで書き込む この@〜BをFor文で512*512回繰り返しています。 Blockreadなどを使えば良いのでしょうか?それにしても使い方がよくわかりませんし・・・。 わかる方、教えてください!
ファイルアクセスがネック。 なぜメモリ上で演算しないのか不思議
1.全データをファイルから読み込む 2.演算する 3.全データを一気に書き出す
148 :
デフォルトの名無しさん :2005/07/22(金) 00:08:30
>>145 データ1個取って来るたびにファイル操作してたら時間が係るのもあたりきよ
普通はデータを一辺に読み込んでから処理するんじゃねーの?
>>145 まさか「結果をWriteで書き込む」を512*512回行ってなんていないよな?
メモリに溜めこんだ結果を一回だけ書き込めば済む話だもんな
レス密度の低いスレだな
厨房にも分かる質問だとこんな感じになる(笑
レス密度が高くとってもお勉強になるスレはどこですか?
もてたい男性のスレ。
154 :
デフォルトの名無しさん :2005/07/22(金) 00:44:56
>146 >ファイルアクセスがネック。 >なぜメモリ上で演算しないのか不思議 要は>147の方のようにすればよろしいのでしょうか?なんせ覚えたてなもので・・・。 >147 >1.全データをファイルから読み込む >2.演算する >3.全データを一気に書き出す どんな命令をどのように使ったらよいのかわかりません・・・。 皆様、親切に答えてくれてどうもありがとうございます!!ですが、超超初心者の私には 具体的にどのような命令を用いたらよいのかわかりません。。。 もうちょっとよろしくお願いします!!!
どうして良いのか分からないのは、 手順を踏まずにいきなり「上のこと」をやってるからじゃないの? 基本の理解をしないで先のことをやろうってのはアレかと。 結果的に「ソース書いて」まで行かないと解決しないんじゃない? マジレスしちゃうけど。
data.datにつまった行列データの各要素を二倍にしてdata2.datに書き込むサンプル type TMatrix512 = array[0..511, 0..511] of Integer; PMatrix512 = ^TMatrix512; var ms: TMemoryStream; mat: PMatrix512; i, j: Integer; begin ms := TMemoryStream.Create; try ms.LoadFromFile('data.dat'); mat := ms.Memory; for i := 0 to 511 do for j := 0 to 511 do mat^[j,i] := mat^[j,i] * 2; ms.SaveToFile('data2.dat'); finally ms.Free; end; end;
まあ、ファイル入出力は最初と最後だけで 後は読み込んだデータをいじくるまでみたいなソースを書いてみな 「メモリ上でやる」ってのは「ファイル入出力を使わない」ってことだ
158 :
デフォルトの名無しさん :2005/07/22(金) 11:02:21
ちょい相談。 Delphi7を使ってるんだが、おそらくCで下のように呼び出されることを 想定したDLLの関数が合って、 BOOL A( BOOL f ) このDLL関数を使うインタフェースとしてDelphi側で function A( f: Boolean ): Boolean; stdcall; みたいに書かれているとする。 # この部分は前任者が書いたのでお察しください このとき、下のようにすると正しく呼び出せなくてハマったわけだが、 どうも府に落ちない。 DelphiのTrue/Falseは内部的に1/0というのは知ってるけども。 procedure B( f: Boolean ); begin A( not f ); end; ちなみに下の書き方なら動作に問題ないが、なんかかっこ悪い気が・・・。 procedure B( f: Boolean ); begin if f then A( False ) else A( True ); end;
Delphi版 BlowFishでエンコードすると、範囲チェックエラーが出て サンプルさえも動作しないのだが... (Delphi7)
>>158 その場合はByteBoolとかWordBoolとかLongBool使うんじゃなかったかな
>>159 コンパイルオプションで範囲チェック外してみては
>>133 配列の範囲外の要素にアクセスしたときにも出ます.
(この場合はコンパイルオプションで『範囲チェック』を有効にすると「範囲チェックエラー」と検出するようになります.
個人的にはチェックするのをおすすめ)
>>137 ,141
ttp://www-fu.magma.ne.jp/~hayase/dddd/download.html SDKはオフィシャルには必要とは書いていないので不要でしょう.
プロシージャの宣言…ここではすでに存在するライブラリを呼び出すための宣言という意味だと思いますが,
これは誰が書いても構いません.
(比較的単純な作業ですが量が膨大でチェックも大変でしょうし,
世界のどこかにすでにあるならそれを使う方が合理的です.)
DLLの呼び出しをDelphiでどうやるかは
[言語ガイド]→[手続きと関数]→[手続きと関数の宣言]→[external 宣言]をご覧下さい.
※手持ちのDelphi 5ではキーワード検索でext…と打ち込んでも出てきませんでした(ひどい).
ソースコードの実例としてWindows.pasが参考になると思います.
ただし巨大なファイルなのでよく使うAPIの名前で検索をかけてみてどういうコードか見てみると良いと思います.
(たとえばSystemParametersInfoとか)
162 :
デフォルトの名無しさん :2005/07/22(金) 18:12:17
TQuery.FieldByNameで、RDBの配列カラムからデータ取れるんですか? 具体的にはFLOAT。
>>159 あれ謎のコンポだよな
ちゃんと動くときと何故か範囲チェックで全く動かないときがある
再現性がわからないからソースあっても直せないし
164 :
162 :2005/07/22(金) 18:40:16
FLOAT配列データを取る時は、バイナリで良いのかな?
165 :
162 :2005/07/22(金) 19:03:51
TQueryでselect * fromした後の、配列カラムのデータの取り方教えてでつ。
>156 便乗 matをTMatrix512でなくPMatrix512にしてるのは 高速化の技でしょうか? あとfor文にbegin end が不要なのは仕様が変わったのでしょうか? Delphiがわかりづらいのは ms: TMemoryStream; ←なんだこれは? ms:TMatrix;では駄目なのかって感じ ms := TMemoryStream.Create; ←忘れる、なんとなくms.Createとしてしまう ms.LoadFromFile('data.dat'); ←はしょってmat.LoadFromFile(〜 としてしまう mat := ms.Memory; ←mat := ms; としてしまう やりたい事や使いたい変数の数と 記述しなければいけない事や変数の数がストレートに結びつかないのです。
お前文才あるよ。もったいないからblog立ててそっちに書いとけ。
>>166 156じゃないが疑問に答えよう
matをPMatrix512にしているのはポインタを扱うためだ
for文に限らず、一行のみの処理ならbegin endで囲う必要はない
例)
if Count = 0 then
ShowMessage('Hoge');
msというインスタンスを用意しているのは楽にファイルを読むためだ
TMemoryStreamにはファイルを簡単に読むためのメソッドがあるからな
ms.Createでは絶対駄目だ
msはTMemoryStreamというものを入れるための器に過ぎない
mat.LoadFromFileははしょって出来るものじゃない
IDEで出てこないだろ、そんな補完は絶対に
msはTMemoryStreamという形を取っているため、
純粋なメモリを取得するにはMemoryというプロパティから取得する必要がある
まとめ
基本が終わってるからまずは初心者サイトをしっかり嫁
>>145 ,154
書き込みからではどういうコードを書かれているか断定できませんでした.おそらく以下のどちらかかと思います.
あ)配列を使っていなくて,要素にアクセスするたびにファイルから読み込む.
い)配列を使っているが読み込みと書き込みに時間がかかる.
あ)の場合は(多分無いと思いますが),配列を使って下さい.
256×256の行列は2次元配列で表現することができます.
例:var Numbers[1..256, 1..256] of integer; → Numbers[1, 1]からNumbers[256, 256]までの256×256の配列変数を作る
い)の場合ですが,読み書きのアクションはその回数が少ない方が速いです.
一方で(Delphi 2.0以降の)integer型の512×512の行列のサイズは4バイト×512×512=1メガバイトですが
Windows 95以後の環境に置いては楽勝で丸ごと読み込めるサイズです.
つまり1回で丸ごと読み込みましょう,と.
方法は思いついた範囲では…
α)『形無しファイル』として開いてBlockReadで丸ごと読み込み.
β)ストリームを使って丸ごと読み込み.
α)はヘルプでBlockReadの説明を出してここから例をご覧下さい.
β)は
>>156 の方法のほかにファイルストリームを使う方法も考えられます.
var
fs: TFileStream;
Matrix: array [0..511, 0..511] of integer; // [1..512, 1..512]でもよい
begin
fs := TFileStream.Create('data.dat', fmOpenRead);
try
fs.Read(Matrix[0, 0], sizeof(integer) * 512 * 512); // [1..512, 1..512]なら[1, 1]
finally
fs.Free;
end;
end
読み込む前にまず書き込む必要があるわけだが 質問者が > fs.Read(Matrix[0, 0], sizeof(integer) * 512 * 512); この書式に合うようにセーブしてるとは限らない
例えば、Form1にボタンをひとつ貼り付けるとします。 そして、そのボタンのクリック時の動作を書き込む祭に 普通だと、Form1が宣言されているユニット内に、 procedure TForm1.Button1Click(Sender: TObject); begin showmessage('テスト'); end; という感じで書きますよね。 これを別ユニット内に書きたいのです。 このようなコトは可能なんでしょうか? もしできるのならやり方を教えていただきたいです。宜しくお願いします。
例えば、Form1にボタンをひとつ貼り付けるとします。 そして、そのボタンのクリック時の動作を書き込む祭に 普通だと、Form1が宣言されているユニット内に、 procedure TForm1.Button1Click(Sender: TObject); begin showmessage('テスト'); end; という感じで書きますよね。 これを別ユニット内に書きたいのです。 このようなコトは可能なんでしょうか? もしできるのならやり方を教えていただきたいです。宜しくお願いします。
やり方も何も別ユニットを開いて書けばいいじゃないか。
例えば、Form1にボタンをひとつ貼り付けるとします。 そして、そのボタンのクリック時の動作を書き込む祭に 普通だと、Form1が宣言されているユニット内に、 procedure TForm1.Button1Click(Sender: TObject); begin showmessage('テスト'); end; という感じで書きますよね。 これを別ユニット内に書きたいのです。 このようなコトは可能なんでしょうか? もしできるのならやり方を教えていただきたいです。宜しくお願いします。
170のサイトを読んで来い
イベントって、型があったメソッドポインタを代入できる単なるプロパティーだ、って ことが IDE を使ってるだけの人には分かりづらいんだよな。
>171 145ではないが スッキリ!!!
ヒント: TActionクラス
ヒント:意味わかんない
手書きでイベントハンドラを作る例 .... public procedure OresamaClick(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Button1.OnClick := OresamaClick; end; procedure TForm1.OresamaClick(Sender: TObject); begin ShowMessage('OresamaClick'); end; 他ユニットの場合でも同様に Form1.Button1.OnClick := OresamaClick; とか代入してやるだけ
ひょっとして単に別ファイルに書きたいだけならIncludeって方法もある
これは面白いね
186 :
174 :2005/07/23(土) 11:20:59
皆様ありがとうございました。
>>182 盲点でした。自分でクラス作るときなんかにやったこともあったのですが、
そんな使い方、思いつきませんでした。
本当に初心者レベルの質問で申し訳ありません。
>>183 Includeですか、ネットで調べてみたり、ヘルプを見てみたりしたのですが
よく記述方法がわかりませんでした><
もし、Includeについて詳しく書かれているようなところをご存知でしたら
教えていただければ幸いです。
アドバイスやヒントでもよいのでお待ちしております
Include は別ファイルの書かれた内容そのものをコンパイル時にコピーするだけ。 ユニットとは全く別の概念
188 :
174 :2005/07/23(土) 13:48:38
はい、それはわかったのですが。。。 今回の件にも使えそうですし、また他の機会でも参考になるかなと思ったための発言です。
189 :
デフォルトの名無しさん :2005/07/23(土) 14:13:29
配列は取れません。
>>174 ひょっとしてこうしたいのか?
ーーUnit1.cppーー
#include "Unit1.h"
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowMessage("てすと");
}
ーーUnit2ーー
#include "Unit1.h"
#include "Unit2.h"
void __fastcall TForm2::Button1Click(TObject *Sender)
{
Form1->Button1->Click();
}
って俺はBCBしかわかんねぇや
脳内置換でDelphiにしてくれ
ちょちょっと、Delphi6Personalで if Clipboard.HasFormat(CF_BITMAP) then... とやっても、CF_BITMAPが未定義だと言われるんだけど。 もちろん、uses Clipbrdはしているのに、何でだよ
>>192 Windowsユニットじゃなかろうか?
194 :
デフォルトの名無しさん :2005/07/24(日) 06:01:52
先日Borland Mail Newsにて『Delphi 24時間ラジオマラソン“24 Hours of
Delphi”』の開催日程を誤ってご案内し、皆様には大変ご迷惑をおかけいたしま
した。改めてお詫び申し上げます。
この度、ライブをお聞きいただけなかった皆様に『Delphi 24時間ラジオマラソン』
の録音をダウンロードいただけるサービスを開始いたしました。
(WMA・MP3形式でご提供しております。)
Delphi 2005でのWin32アプリケーションおよび.NETアプリケーションの
開発への移行のティップスやテクニック、今後のDelphiロードマップに
ついてなどのディスカッションがお聞きいただけます。
『Delphi 24時間ラジオマラソン“24 Hours of Delphi”』
録音ダウンロード・サービスサイト
⇒
http://mypage.borland.co.jp/track.html?3424.56473.MLG0507007 ボーランド株式会社
195 :
192 :2005/07/24(日) 08:58:18
193の言う通りにしたらうまくいったよ。 ちなみにusesするユニットの順番にもちゃんと意味があったんだな。 知らんかったよ。
バイナリファイルを指定した場所から指定したバイトだけ読み込むには何の命令or関数を使えばいいんですk (ちなみにDelphi6無料版
TFileStream.Seek TFileStream.Read
RegExprで下のように書くと「iabc123」がマッチするんだけど 「abc123」にマッチさせるようにするにはどうすればいいんでしょう? procedure TForm1.Button1Click(Sender: TObject); var str : String; RegEx : TRegExpr; begin RegEx := TRegExpr.Create; try str := '(abc123)'; RegEx.Expression := '([a-zA-Z0-9]+)'; if RegEx.Exec(str) then Memo1.Lines.Add(RegEx.Match[0]); finally RegEx.Free; end; end;
>>198 '('=8169 で 'i'=69 だからマッチしちゃうのか。
TRegExprはマルチバイト対応してる?。俺はVBScriptのほうを使ってる。
200 :
デフォルトの名無しさん :2005/07/24(日) 16:14:33
TTreeView にチェックボックスをつけたいんですが、 どのようにしたらよいでしょうか? よろしくお願いします。
>>199 Unicodeを使うようにしたら希望どうりマッチするようになりました。
202 :
デフォルトの名無しさん :2005/07/24(日) 17:35:19
>どうり >どうり >どうり
>>203 ありがとうございます!できました!
でも Delphi からは設定できないんですかねー。
>>204 TWinControl.CreateParams
>>205 ありがとうございます。
SetWindowLong で設定しましたが、CreateParams をオーバーライドする方法もありますね。
TTreeView レベルに組み込まれていればいいのにー、と思ったもので。
>>206 君が組み込んだ TTreeViewEx を公開すればいいじゃない。
TTreeViewExって便利なの?
マウスジェスチャーを実装したいのですが どのようにプログラミングすればよいかイメージがわきません。 どなたか伝授していただけないでしょうか?
OpenJaneのソースを見るとか
211 :
209 :2005/07/25(月) 13:43:47
TTKMouseGesturesというコンポーネントを見つけました。 ただなぜかXPだと登録できるのですが2000だとエラーになります。 WinShader.dcuが見つかりませんというエラーが出てしまいます。
Irvineの作者がMouseGestures用のコンポ公開してた気がする
213 :
デフォルトの名無しさん :2005/07/25(月) 14:06:47
TOpenPictureで画像を開く前に現在編集中の画像を保存するか尋ねるようにしたい。 TOpenPictureのBeforeExecuteイベントかTOpenPicture.DialogのOnShowイベントで、 メッセージダイアログを出して、キャンセルの時はDialogが開かない(あるいは 一瞬で閉じる)ようにしたいわけだが、Dialogを開かないようにしたり、 すぐに閉じる方法が分からない。どうしたらいいのさ?
>>213 TOpenPicture.Excute の呼び出し側で確認すればいいんじゃない?
215 :
デフォルトの名無しさん :2005/07/25(月) 15:09:51
delphi6ナニコレ formひとつに同じサイズのpanel1とpanel2を重ねておいて、 起動時はpanel2.visibleをfalseにしておき、 panel1上のボタンを押したらpanel2.visible=trueで本番に入るようにしたんだけど。 いつの間にかpanel1上のボタンのcaptionが表示されなくなった。 (オブジェクトインスペクタではちゃんと設定してあるのに実行すると空白ボタンになる) なんでだろうと思ってそのボタンのcaptionを設定しなおしたりしたけど直らず、 panel1.captionを設定したら、 なぜかそれが問題のボタンのcaptionとして表示された。 ボタン動かすと、そのpanel1のcaptionも一緒に動く。 なにがどうなってこうなったの? わけわからんしdelphi6使って行く上でとても不安になったよ・・・
状況を今一つイメージ出来ん すくなくともオレのDelphi6ではそういった類の問題はまったくない
>起動時はpanel2.visibleをfalseにしておき、 こんなブビなコーディングするから状況がわかんないんじゃない?
簡潔に言うとパネルのキャプションがボタンのキャプションになったとういうことですよ でもフォームのoncreateイベントで改めて定義するようにしたらちゃんと出るようになった あと、ちょっとフォームのサイズを変更しただけで 子オブジェクトどもの配置関係がぐちゅぐちょになるのはどうにかならんですか とりあえず親フォームのmaxheight..minwidthに初期値を入れてリサイズ不可にしたけど めんどくさー
>子オブジェクトどもの配置関係がぐちゅぐちょになるのはどうにかならんですか コンポーネント一個一個にAlignプロパティがある。 位置決めはコード書かなくても出来る筈。 >とりあえず親フォームのmaxheight..minwidthに初期値を入れてリサイズ不可にしたけど Del中は絶対やらない手。
>formひとつに同じサイズのpanel1とpanel2を重ねておいて、 コンポーネントの動的生成できるようになれよ。
最近こんなのばっか
223 :
218 :2005/07/25(月) 15:50:06
>220 だってめんどくせーんですもの 他答えてくれた人々どうもありがとう 自分のやりかたがアフォっぽいらしいってわかっただけでも進化しましたよ
>>223 TFrameにべたべた貼ったのを用意しといて、
TFormに貼ったり剥がしたり(=Free)すると、
超便利だぞ。
それとかTPanelで位置決めしといたとこに派生コンポーネントを動的に張るとか。
うーんなるほどありがとうございまう コンポーネント新規作成用のクラスでもつくっとくかな
何でTFrameにはonCreateイベントが無いんですか? Createをオーバーライドすれば良いんですか?
> Createをオーバーライドすれば良いんですか? その通り
∧,,∧,,,,,, ) (´⌒(´ ⊂ミ゚Д゚⊂,,,,,,,`つ≡≡(´⌒;;;≡≡≡ ズザーーーーーッ (´⌒(´⌒;; だれかこれ(TreeViewCheckRadio)をコンポーネント化する 方法を教えてけれ。
あぁ、今度会った時に教えてやるよ
∫,,,,,,,,,∧,,∧ ズコー ⊂,,,,,,,,,つ,,゚Д゚ミつ
まずは記事を要約してくれ
233 :
デフォルトの名無しさん :2005/07/26(火) 01:05:17
データベースの更新について教えてください。 固定長のテキストファイルをデータベースに取り込みたいのですが、 どういった方法が一般的なのでしょうか? また、Delphi Pro を使ってますが、付属のデータベースの中では、 何がお勧めでしょうか? 全くの初心者なので低級な質問でごめんなさい・・・
234 :
デフォルトの名無しさん :2005/07/26(火) 03:46:15
235 :
デフォルトの名無しさん :2005/07/26(火) 11:47:29
delphiの無料で使える日本語版の最新バージョンはなんですか? ベータ版ではないものを教えてください。 といいつつできればベータ版の最新バージョンもセットで教えていただけるとうれしいです。
知ってて言ってるな貴様!(w
237 :
デフォルトの名無しさん :2005/07/26(火) 13:22:33
delphi6をアンインストールするにはどうしたらいいのでしょうか? コントロールパネルから削除していいのでしょうか?
>>233 FireBird+IBX7.08使え。
239 :
デフォルトの名無しさん :2005/07/27(水) 00:06:40
>>238 ありがとうございます。
FireBirdというRDBMSがあるんですね。
一度調べてみます。
で、固定長のデータベースに取り込む場合、変数に一旦読み込んでから、
何バイト目から何バイトを項目Aに・・・という方法になるのでしょうか。
240 :
デフォルトの名無しさん :2005/07/27(水) 00:10:26
>>238 ありがとうございます。
FireBirdというRDBMSがあるんですね。
一度調べてみます。
で、固定長のデータベースに取り込む場合、変数に一旦読み込んでから、
何バイト目から何バイトを項目Aに・・・という方法になるのでしょうか。
241 :
デフォルトの名無しさん :2005/07/27(水) 00:14:23
>>238 ありがとうございます。
FireBirdというRDBMSがあるんですね。
一度調べてみます。
で、固定長のデータベースに取り込む場合、変数に一旦読み込んでから、
何バイト目から何バイトを項目Aに・・・という方法になるのでしょうか。
>>239-241 おまえ、なめてんのか?
固定長の取り込み方はそれでいい。
ただ、末尾の空白が不要の時はちゃんと除去して取り込めよ。
あちこちで連投みかけるね。 鯖の不調?
サーバ側に原因があるのはほぼ間違いない
>>239-241 RDBのBLOB項目は、TQuery(または、TIBQuery)を使ってTMemoryStreamに読み込める。
246 :
デフォルトの名無しさん :2005/07/27(水) 21:13:34
fortranからDelphi6 Personalへの乗り換え最中です。
そこでファイルの書き込みについて質問です:
数値の入ったA[1..200,1..200]のような配列をテキストファイルとして保存したいんですが、
TFileStreamを使うやり方がよくわかりません・・・。
一番単純な方法で構いませんので、どなたか簡単なソースを示して頂けないでしょうか。
>>171 を試したんですが、保存結果が変な文字列の羅列になってしまいます。
var sl: TStringList begin sl := TStringList.Create(); sl.Add('hogehoge'); sl.SaveToFile('filename.txt');
>>246 まんまTextFile型というのもある
var
F: TextFile;
begin
AssignFile(F, 'C:\Hoge.txt');
try
ReWrite(F);
Writeln(F, 'HOGEHOGE');
finally
CloseFile(F);
end;
end;
249 :
デフォルトの名無しさん :2005/07/27(水) 22:09:29
>>247-248 ありがとうございます!こんなに早く回答いただけるとは。
どちらの方法でもできました!
動作スピードは一気に書き込む
>>247 の方が速そうですが、
配列の大きさを大きくする場合、メモリのことを考えて
>>248 の方がいいんでしょうか?
あともう一つ教えていただいてもよろしいでしょうか。
AssignFile(F, 'data.txt');
try
ReWrite(F);
for j:=1 to 10 do
for i:=1 to 10 do
Writeln(F, FloatToStr(M[i,j]); //M: Array [1..10,1..10] of double;
finally
CloseFile(F);
end;
こんな感じで書いてみたんですが、行列っぽくファイルに出力するには(10行10列の数字で)
どのようにしたらよろしいでしょうか?
基本的にTStreamはバイナリデータを扱う物だから、 テキストデータとして出力するには、自分でテキストデータに変換したり 改行コードなどを付加してやらないといけないので正直めんどくさい。 const data:array[0..10] of Integer=(0,1,2,3,4,5,6,7,8,9,10); var FS:TFileStream; I:Integer; Buf:array[0..20] of char; begin FS := TFileStream.Create('c:\hoge.txt',fmCreate or fmShareDenyNone); try for I:=0 to 10 do begin StrPCopy(Buf,IntToStr(data[i])); FS.Write(Buf,StrLen(Buf)); FS.Write(#$D#$A,2); end; finally FS.Free; end; end; >249の場合はWriteLnの代わりにWriteを使えば良いだけ。 iのループ抜けるときに空のWriteLnもしくは改行コードを出力。
251 :
233 :2005/07/28(木) 01:09:22
>>242 さん
ギコナビで書き込みしてるのですがエラーになってしまって・・・
何度もすみませんでした・・・orz
末尾の空白除去の件、気をつけます。
>>246 早速試してみます。ありがとうございました。
>>250 おかげさまで望み通りの動きになりました!
TStreamに関しては参考書など探してもう一回勉強しなおします。
どうもありがとうございました!
Streamってのは、ファイル渡しの代わりのメモリ渡しみたいなもの。 例えば、上記のTStringListには、 LoadFromFile/SaveToFileもあれば、 LoadFromStream/SaveToStreamもある。 StreamのLoad/Saveを持ってるコンポーネント同士で自由にデータ受け渡しできます。
TEditのTextをStrToInt()で整数に変換するとき Aとかの文字列が入ってるとエラーが起きるんですが どうしたらいいんでしょうか?
>>254 try exceptでエラー処理するか、StrToIntDefでエラー無視するか
256 :
デフォルトの名無しさん :2005/07/28(木) 17:18:58
>>255 さんありがとうございます。
エラー処理は難しそうだったのでStrToIntDefを使ったらできました。
TListBoxのようなCreateWindow時にWS_VSCROLLで付くスクローラーを自前で描画したい CreateParamsをoverrideしてParams.Style xor WS_VSCROLLしてスクローラーを消して 自前で擬似スクローラーを描画しようと思ったけど もっとエレガントな方法を教えてください
258 :
デフォルトの名無しさん :2005/07/29(金) 04:10:26
相当な負荷をかける数値計算をしてます。 計算開始ボタンとプログレスバー、ラベル、ステータスバーを使ってます。 while (i <= ntime_end-ntime_start) do begin for j:=1 to ntime_step do begin [...計算ルーチン...] end; output; //ファイル出力 i:=i+ntime_step; ProgressBar1.StepIt; StatusBar1.Panels[0].Text:='計算中...'; Label9.Caption:=IntToStr(i); end; プログレスバーは正常に動作してますが、ステータスバーとラベルの 更新がまったくされません。どちらも全処理終わってから表示されます。 リアルタイムで表示を反映させるにはどうしたらよいのでしょうか・・・。
>>258 ステータスバーの方は、「計算中...」としか
表示しないなら、
ループに入る前に表示させて、「StatusBar1.Refresh」。
後はループ外で「終了」と表示させる。
ラベルの方は、ループの中に「application.ProcessMessages;」を
入れる。
こんなとこで良いのでは?
>>259 完全におっしゃるとおりでした。
イメージしてたことがバッチリ実現できました!
こんな質問に答えてくださって本当にありがとうございます!
ずいぶんと古風なインデントだな
>>260 重い処理は別スレッドでやったほうがいい。
余力があったらスレッド使う実装も挑戦してみれ
いやです
バージョン2とか3とかノコンポで「Dsgnintfがない」とかで インスコ出来ないんですが、MLの過去ログで調べたら 直すの大変ぽいのですが、皆さんどうしてます?
苦労してます(`・ω・´)
DesignIntf,DesignEditorsに書き換えてもダメだったのかな
267 :
159 :2005/07/29(金) 11:02:34
BlowFishでエンコードすると、範囲チェックエラ〜 なんとなく自己解決 BlowFish.dcu を生成するときに、範囲チェックがオンだと出るみたい ----- 1. コンパイラオプションの範囲チェックをオフ 2. BlowFish.pas を開いて、意味なく変更・保存する 3. コンパイル (BlowFish.dcu 範囲チェックなし版が作られる) 4. コンパイラオプションの範囲チェックを戻す ----- 他に BlowFish.pas に {$R-} を挿入してもいいんじゃないかとも思う
268 :
デフォルトの名無しさん :2005/07/29(金) 11:29:55
スマン あげちまった。
270 :
デフォルトの名無しさん :2005/07/29(金) 11:43:23
TEdtiに特定の文字以外の入力を受け付けないようにしたいです。 procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if Keyが特定文字以外 then Key := #0; end; までは思いついたのですが例えば'C'〜'P'まで受け付けるとすれば いちいち条件に書くのは面倒くさいです。 集合を使えばスマートに書けると思うのですがやり方教えて貰えないでしょうか
key <> in ['c'..'p']
ミス if not (key in ['c'..'p'] )then key := #0; こうでした^^
ボタンをクリックしている間、OnClickイベントを ボタンを押している間中何回も受けたい場合どうすればいいんだ?
>>275 ボタンが上がってOnClickが呼ばれるから無理。
278 :
258 :2005/07/29(金) 15:48:38
>>262 確かに今作ってるやつでは処理が重すぎてよく固まります・・・。
別スレッドにした方がいいですよね。
やり方はまだ全然知りませんが、とりあえず今のバグ取りが終わったら
がんばってみます!
>>275 メインループ中にGetAsyncKeyState等でマウス状態をもらって
if分で処理
>>277 そしてOnMouseUpでタイマー停止,タイマーのOnTimerに目的の処理….
書くまでもないかもしれませんが,一応補足します.
281 :
デフォルトの名無しさん :2005/07/29(金) 20:02:28
button1,button2,button3,edit1を表示し、button1を数回押したあとbutton2を押すとedit1にbutton1を押した回数が表示される。button3を押すと回数がクリアされる。ってやつをやれって課題が出たんですがbutton1を押した回数をどうやって加算させればいいのでしょうか? 当方delphi暦一週間未満です。どうかお願いします。
>>281 自分で変数を確保するかTag使う
学校の課題なら前者がいいと思われ
返答ありがとうございます。変数の確保とはどうするのでしょう? よろしければある程度コードエディタ?を書いて頂くことはできないでしょうか? 極端な資料不足のため見当もつかないのです。
>>283 やっぱそうきたか
変数が何か分かってないなら学校の教科書読め
変数の宣言はDelphiのヘルプ読め
これ以上聞くな、他でマルチするな
以上
285 :
デフォルトの名無しさん :2005/07/29(金) 21:58:18
286 :
246 :2005/07/29(金) 22:13:47
おかげさまでFORTRANのプログラムをDelphiに移植できそうです。 まだあんまり検証してませんが、FORTRANのコンソールアプリと 比べてDelphiって動作速いですね。苦労したかいがあった・・・。 アルゴリズムあんまり考えずにダラダラと書いた場合、 やっぱり高級言語では一般的にCが最速なんでしょうか。 Delphi好きなんで、このまま突き進みますが…。
アルゴリズム考えないでだらだら書いたら コンパイラ型の言語ならどれも大差ないと思う。 最適化の違いはあるだろうけど。
Delphiはファイルサイズさえ目を瞑れば 動作速度、開発効率、おまけに習得の容易さ等申し分ないと思う
289 :
268 :2005/07/29(金) 22:36:45
>>274 すんません。
辞書引きながらページ見ました。
分かりませんでした。
どうしたらいいんでしょうか?。・゚・(ノД`)・゚・。
Delphi製アプリって移動メニューが出ないけど 起動時に画面からはみ出して操作不能になった場合の 対策って特に何もしないのが一般的なの?
>>289 > 直すの大変ぽいのですが
記事をざっと読んだだけだが、一番簡単なパターンなら
Register関数を新しいパッケージ(設計時パッケージ)に移動して
DesignIntfとDesignEditorsと、Registerで使用するコンポーネントのユニットをuses。
(コンポーネント本体のユニットからはDsgnIntf のusesを消す)
designide.dcpとコンポーネント本体(実行時パッケージ)をrequiresに追加。
設計時パッケージをコンパイルしてインストール。
プロパティ・エディタやコンポーネント・エディタがある場合も同様
関連コードを探して、設計時パッケージに移動するだけ。
>>290 アクティブ状態でAlt+Space > Mで移動すればいいだけじゃ?
D2005を暫く使っていると、オブジェクトインスペクタで貼り付けができなくなるのは仕様ですか?
FastMM4使え
画像処理で、button1を押して色を反転させた時、もう一度押しても何にもならないです。 例えば image1 → image1 反転 → image1 元に戻るのように交互に表示させるにはどうしたらいいのでしょうか?
アプリケーションがアクティブになっていなくても(別のウィンドウ上でも)クリックを検知する のはどうすればできますか
>>296 普通に組めばそうなるはずだが
毎回元のイメージを反転して表示したりしてないか確認汁
Image1.Refresh
301 :
デフォルトの名無しさん :2005/07/31(日) 09:59:06
TabControl に適当なコンポを乗せ、コンポの Align を alClient にした場合、コ ンポと TabControl の境界が3ピクセルぐらいできてしまいます(タブの部分を除く)。 これをなくする方法があるでしょうか? TabControl には BorderStyle がないので 困っています。
296です
>>299 >>300 くれた方ありがとうございます。 Image1.Refresh を使ったら反転してくれました。
303 :
デフォルトの名無しさん :2005/07/31(日) 12:17:53
自作アプリ間でデータの受け渡しを行いたいのですが、 受取側のiniファイルが変更されたら、イベントが発生するようなプログラムは 可能ですか?
可能だけど、iniファイルの使い方間違っている
コード次第。変更したあと自力で知らせる
306 :
303 :2005/07/31(日) 12:59:42
308 :
303 :2005/07/31(日) 14:10:41
>>307 を参考に、TEdit(edtNameというnameプロパティ)のコントロールIDを7777に変えました。
しかし、edtNameに値を入力できません。
s := 'OK';
SendDlgItemMessage(hMainWnd,7777,WM_SETTEXT,0,LongInt(PChar(s)));
SendDlgItemMessageの書き方が間違っているのでしょうか。
すみません。もう少しアドバイスを・・。
310 :
303 :2005/07/31(日) 14:44:58
>>309 無理言ってすみません。
後は自力で解決します。
>>309 > MLログ閲覧は死んでるみたいですが、
随分前に直ってるぞ。
素直にウィンドウメッセージを送る方がいいって。
313 :
デフォルトの名無しさん :2005/07/31(日) 15:24:04
Editの中の数字をStrToIntとかで数字に変換して計算に使ってるんですが、 割り算に使ってるせいで空欄になったらエラー、あと間違えて文字などを 入力してもエラー、という状態です。 そのへんの例外処理はどうやったらいいんでしょうか?
>>313 EConvertErrorをcatch
確かTryIntToStrなんてのもあった気がする
VC++とかC++BuilderはまずC言語から始めるらしいんだけど DelphiはPascalからやるもんですか?いきなりGUI作れるもの?
>>316 作れる。
もちろん最低限のObjectPascalの文法は覚える必要はあるが。
6Perなら落としたファイルの展開先にクイックスタート、言語ガイド、開発者ガイドのpdfが入ってるから前二つを読むと吉(チュートリアルのTActionManagerはperにないからTActionListで代用)
前者はPascal無視していきなりObjectPascalでいいかと。C++なりJavaなり触ったことがあるならすぐ覚えられる。
319 :
303 :2005/07/31(日) 19:43:06
var WinHnd : HWND; //ウィンドウのハンドル begin //自作ソフトを探す WinHnd := FindWivar WinHnd : HWND; //ウィンドウのハンドル begin //自作ソフトを探す WinHnd := FindWindow('自作ソフトのパス', nil); //自作ソフトをアクティブにする SetForegroundWindow(WinHnd); end; 自作ソフトがアクティブになった時に発生するイベントはありませんか?。 そこで処理をさせたいのですが。 メインフォームのActiveControl、 OnActivateでイベントが発生すると思ったのですが、 何も起こりませんでした。
320 :
303 :2005/07/31(日) 19:44:30
var WinHnd : HWND; //ウィンドウのハンドル begin //自作ソフトを探す WinHnd := FindWindow('自作ソフトのパス', nil); //自作ソフトをアクティブにする SetForegroundWindow(WinHnd); end; こちらになります
>>319 Application.OnActivate (ApplicationEvents.OnActivate)
323 :
303 :2005/07/31(日) 20:00:27
>>319 Application.OnActivate (ApplicationEvents.OnActivate) とは。
procedure TForm1.FormActivate(Sender: TObject);
begin
・・・この間の処理
end;
OnActivateで発生するイベントとは違うのですか?。
すみません。Application.OnActivateの使用例を教えていただければ・・。
>>323 TForm.OnActivate はそのアプリ内でのアクティブウィンドウの変化に応答するイベント。
~~~~~~~~~~~~~~~~
TApplication.OnActivate/TApplicationEvents.OnActivate はそのアプリの所有するウィンドウがアクティブになった時に応答する。
>> 使用例
TApplicationEvents コンポ置いて普通にイベントハンドラ作る。
325 :
303 :2005/07/31(日) 20:13:15
>>324 TApplicationEventsを貼り付けて、イベントが発生しました。
判り易い説明有難うございました。
遅レスのマルチレスですが…
>>270-273 これだと[BackSpace]キーによる処理(キャレットの直前の文字を削除する)が無効になってしまいます.
また['c'..'p']だと'C'〜'P'が入力されたときに無効になってしまいます.
if not(Key in [#8, 'C'..'P', 'c'..'p']) then Key := #0 などとしなければなりません.
※#8がBackspaceを意味します.
>>283 =
>>281 どうやら「『変数』って何?」っていうレベルみたいですね.
まずここで最初から順に『変数』のところまで勉強するよろし.
ttp://kakinotane.s7.xrea.com/delphi/d/toc.html 話はそれから.
#もしかしてガッコの先生は例題を出す前に変数についてちゃんと教えてくれなかったのでしょうか.
#もしそうならその先生が悪いと思います.
ガッコの先生ってこの問題やれって言ってどっかいっちゃうもんじゃないのか 教えてもらったことなんて一回もないな、先生の名前も顔も覚えてない
問題をやらせる前に説明がないと生徒はわかりませんし,
そもそもそれなら先生なんていらないのではないかと思うわけで.
でも現実にそんな先生があまりにも多いのでしょうね.
私の大学時代も同様でした.
>>313 Editコンポのテキストが変更されるたびに計算しているようなのでその前提で書きます.
以下,エディットコンポEdit1の文字列を数値に変換してForm1のInteger型フィールド変数FNumberに値を入れる場合の一例.
procedure TForm1.Edit1Change(Sender: TObject);
begin
try
{ 入力された文字列を数値に変換.
※StrToInt関数は変換に失敗するとEConvertError例外を生成する}
FNumber := StrToInt(Edit1.Text);
※計算などの処理
except
{ 変換に失敗したならそのことを表示し,Editコンポのテキストを元に戻す. }
on EConvertError do
begin
beep;
ShowMessageFmt('"%s"は整数にできないナリよ.', [Edit1.Text]);
Edit1.Undo;
end;
end;
end;
あとは数字以外の文字の入力をできないようにするのも有効かと思います.
>>270-273 ,326が参考になると思います.
>>313 入力されない数値があるなら StrToIntDef というのもある
あのー、エラーではないのですが、 デバグ中のアプリなんですが、バッテン押して終了させると、 四角い表みたいのがでるんですが、えらーですよね? これはなんですか?
330です bmpを表示するのですが、どうも大きい画像を読み込んだ時に、四角い表見たいのがでるようです。 小さい画像だと大丈夫でした。
?? 肛門ダイアログ以来の謎 ?? どこかに画像をアップロードできませんか?
できます
CPUウィンドウのことか? 例外捕まえきれない場合に表示される
巨大なbmpだと、Win 32APIコールでがリソース不足エラーが返ってくる場合あり。
>>330 _331です
みなさん、ありがとうございます。
肛門ダイアログの意味はわかりませんが、かなりアホな質問したみたいなので、失礼しました。
CPUウィンドウなんですね。 メモリを増やせば出なくなるとかで出なくなるのかな?
339 :
デフォルトの名無しさん :2005/08/02(火) 10:54:54
SpeedButtonコンポーネントのAllowAllUpプロパティについて質問です。 これをtrueにしたときとfalseにしたときの違いがまったく分かりません! F1押してヘルプを読みましたがややこしく理解に苦しむ文章でよく分かりません。 テスト用プログラムを作って実際にtrue、falseにしたときの動作を 比較してみましたがまったく同じでした! (GroupIndexプロパティを1にしたSpeedButtonを3つ使って実験しました) 一体何が違うのでしょうか! 気になって昼寝も出来ないのでどうかご教授下さい!
>>339 trueだとすべてのボタンをOFFにできる。
>>340 あああぁぁぁぁあああ!! そういうことだったんですか! やっと分かりました!!
同じボタンを二回連続で押せば違いが分かったのか、盲点でした!
どうもありがとうございました!!!!!!!!
>>330-338 ここのらいぶらりのTBigBitmapを使うのが手っ取り早そうですね.
"Delphi Graphic Secrets"によれば
Windowsの種類によってはいくらメモリを足しても駄目みたいですし.
いわゆるWindows9X系GDIの問題。小手先で解決してもすぐ陳腐化するけどね。あと2,3 年はしょうがないか・・・
標準コンポ以上の事をやりだすととたんに破綻するのがDelphiクオリティ
Windowsの問題なんだが・・・
VB.NETなら問題なくできるのにね。
bmpの330です。 レスくれた方ありがとうございます。 BigBitmap使ってみます。 "Delphi Graphic Secrets" ← まったく手に入りません。(;_; 誰かください。
君の歯はヨセツケマセンネ
350 :
デフォルトの名無しさん :2005/08/04(木) 01:02:29
delphiで作成したソフトのソースを公開する際に必要なファイルを教えてください。 *.dpr,*.pas,*.dfm,*.dof, あと必要に応じて*.icoとか*.bmpとか、この辺で抜けや漏れはないですかね?
>>350 1.プロジェクトファイルをダブルクリックして起動する。
2.別の「何も入ってないフォルダ」に全部保存する。
これで必要なのは入ったと思うけど、どうか。
353 :
350 :2005/08/04(木) 01:25:42
実行ファイルのリソース内にファイルを埋め込むソフトを作りたいと思っています。 以前ここで紹介されたmadコンポーネントを使っているのですが、UpdateResourceWの使い方が よく分かりません。簡単なサンプルを書いていただけないでしょうか。。
>>354 てかまたこいつかw最近見ないと思ったら、とうとう痺れを切らしたようだなw
てかまだ出来てなかったのか(´・ω・`)
357 :
デフォルトの名無しさん :2005/08/04(木) 15:27:44
Delphi 使いってサンプルがないと何も出来ないんだね
きみ、日本語の読解力がないね
以前からちょくちょく見かけてた奴かw マジ笑ったw
360 :
デフォルトの名無しさん :2005/08/04(木) 16:49:28
画像からドットを読み込んで画素ごとの色データを配列に
収めようと思っています。そこで、
http://homepage1.nifty.com/MADIA/delphi/delphi_bbs/200301_03010018.html ここにあるpgetを使ってみました。
procedure TForm1.Button1Click(Sender: TObject);
begin
if Clipboard.HasFormat(CF_BITMAP) then
begin
Image1.Picture.Assign(Clipboard);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var point:TPoint;
r,g,b:byte;
begin
point.X:=0;
point.Y:=0;
pget(Image1.picture.Bitmap,point,r,g,b);
showmessage('R='+inttostr(r)+' G='+inttostr(g)+' B='+inttostr(b));
end;
Button1でビットマップをペーストできますが、Button2を押した時点で
貼り込んだ画像が消えて常にRGBともにゼロの値しか得られません。
Button2でペースト画像を取得するにはどうしたらよいでしょうか。
例えばa=2、b=12、c=123の時に 'A□□2:B□12:C123'(□は半角スペース) という文字列を作りたいんだけど、簡単に作る方法あります?
>>360 Button1Click内の
Image1.Picture.Assign(Clipboard);
を
Image1.Picture.Bitmap.Assign(Clipboard);
としてみてはどうか。
>>361 Format('A%3d:B%3d:C%3d',[a,b,c])?
>>362 おっしゃるとおりで、一瞬で解決しました。本当にありがとうございました!
もうひとつ後学のために、この”Bitmap”によって処理が
どのように変わっているか教えて頂けないでしょうか?
Formatなんかあったのね。 助かりました。
>>365 ビットマップに大量アクセスする場合はpget/pset使わずにScanlineプロパティ使った方がいい。
Pset/Pgetは破滅的に遅い。
>>365 TImageのPictureってのが複数フォーマットを対応しているがために、
Assignコールされても何をして良いか分からないから何もしない。
で、Picture.Bitmap.Assignコールされてやっとこさビットマップをアサインするルールになってる。
369 :
デフォルトの名無しさん :2005/08/04(木) 23:02:42
さっきから入門書読み出したのですが、VBでいうApp.Pathは どんなふうにするの?
Application.Exename
372 :
デフォルトの名無しさん :2005/08/04(木) 23:10:19
Vbsの質問しても良い?
374 :
デフォルトの名無しさん :2005/08/04(木) 23:15:18
え〜。 MsgBox"(-_-;)う〜ん?" こまった。
Delphiって死滅しちゃうの?
>>375 分からないけど死滅しないで欲しいなぁ。
377 :
デフォルトの名無しさん :2005/08/04(木) 23:29:51
InterBaseへSQL送る時に IBQueryを使う場合は、 IBQuery1.Active := False; IBQuery1.SQL.Clear; IBQuery1.SQL.Add('○○○'); IBQuery1.Active := True; IBSQLを使う場合は、 IBSQL1.Close; IBSQL1.SQL.Clear; IBSQL1.SQL.Add('○○○'); IBSQL1.ExecQuery; これでOKですか?
w2kがシャットダウン、再起動、ログオフされた時にアプリ内で判別する方法を 検索して探してたんですが無いっぽいんです。 サービス立てるとかじゃなくてもっとスマートな方法ないでしょうか?
>>378 何を判別したいの?シャットダウン・再起動・ログオフをそれぞれ判別したいの?
それとも終了されるかどうかを判別したいの?
シャットダウン、再起動、ログオフのどれが実行され様としてるかの判別です。
>>380 なんかメッセージが飛んでくるはずだけど
すいませんかぶりました.
WM_ENDSESSIONを捕まえてもシャットダウンと再起動の判別はつかなかったような。。。
ですよね。なんかXPは解かるようになった様なレスは見たのですが 2kは駄目なのか解決されてるの見たこと無いです。
どんな終了かを識別できるメッセージが来ないんなら別の方法、 例えば実行直後にレジストリとかに記録してる何かとかで裏技的にでも わかんないのだろうか。
未来のことはわからんだろ・・・
シャットダウンした時って事でしょ
シャットダウンと再起動の判別 超近未来だよ
392 :
デフォルトの名無しさん :2005/08/06(土) 22:49:29
すいません、質問です。 StringGridのデータをSaveToFileを使って、ユーザーが設定したファイル名を使って保存するという事はできるのでしょうか? 例えば、 ユーザーがEdit1にhozonと入れた時に、 begin StringGrid1.SaveToFile(Edit1.Text) end; という記述で毎回違うファイルに保存する事は可能でしょうか? 心やさしい方、御教授よろしくお願いします!
自分で保存するコードを書くんだよ。
FAQ だから検索するといいよ。保存方法もひとそれぞれだし
Delphiで作ったフォームにOKボタンを置いてそれを表示しても マウスカーソルがOKボタンに移動してくれないバグを発見したのですがどうすれば治るでしょうか?
普通移動しないだろ
OKボタンは本来Enterで押すことを想定するものだろ だからこそTButtonにDefaultというPropertyが存在している
OKボタンがあるとマウスを自動で移動させてるツールを使ってるが、 Delphiで配置したOKボタンの場合はそれが動作しない という意味じゃまいか たぶんだけど
たしかWindowsの設定で自動で移動するのがあったような気が。 マウスのプロパティだったか
Delphiのフォームは贋物だからいろいろと挙動がおかしいんだよな。
403 :
デフォルトの名無しさん :2005/08/07(日) 19:16:28
Delphi6のTClientSocket と Delphi7のTcpClient(Socket)って基本的に同じですか? また、各プロパティの変更部分はどれとどれですか?
TEdiでクリックしたときに表示している文字列を選択するために(TComboBox のように) procedure TForm1.Edit1Enter(Sender: TObject); begin Edit1.SelectAll; end; としても、文字列は選択されません。なんででしょ?
procedure TForm1.Edit1Enter(Sender: TObject); begin Edit1.SelectAll; Edit1.Refresh; end;
406 :
デフォルトの名無しさん :2005/08/08(月) 16:00:15
>>404 Edit1EnterじゃなくてEdit1ClickでやればOK
408 :
デフォルトの名無しさん :2005/08/08(月) 21:23:45
データを50音順でソートするような命令ってどうやれば良いですか? help難し杉
procedure sort_data_with_50onjun; begin // todo:ここにコードを書く end;
何に入っているデータをソートするの?
411 :
408 :2005/08/08(月) 22:16:24
>>409 うーん・・・
>>410 StringGridのセルに入ってる名前のデータです
例えば、StringGrid.csv[1,1]にはヤマダ、[1,2]にはタナカ、[1,3]にはスズキ・・・(以下ずっと続く)
といった具合の1列目のデータを、綺麗に50音順でソートしたいのです
あほな質問でスンマセン・・・
412 :
410 :2005/08/08(月) 23:32:30
>>411 時間が空いたので書いてみた。ソートは文字列リストに任せる手抜き処理。
SortGrid(対象のStringGird, ソートカラムajで呼び出す。件数が多くなると遅くなりそう。。。
改行が多いって怒られたのでちょっと詰めてカキコするから見づらいのは勘弁。
procedure SortGrid(oGrid: TStringGrid; iSortCol: Integer);
type PCellData = ^TCellData; TCellData = record sData:array of AnsiString; end;
var oSortList:TStringList; iCol, iRow, iIndex:Integer; pData:PCellData;
begin
oSortList := TStringList.Create;
try
for iRow := oGrid.FixedRows to oGrid.RowCount - 1 do begin
New(pData); SetLength(pData^.sData, oGrid.ColCount);
for iCol := oGrid.FixedCols to oGrid.ColCount - 1 do
pData^.sData[iCol] := oGrid.Cells[iCol, iRow];
oSortList.AddObject(oGrid.Cells[iSortCol, iRow], TObject(pData));
end;
oSortList.Sort;
for iIndex := 0 to oSortList.Count - 1 do begin
pData := PCellData(oSortList.Objects[iIndex]); iRow := oGrid.FixedRows + iIndex;
for iCol := oGrid.FixedCols to oGrid.ColCount - 1 do
oGrid.Cells[iCol, iRow] := pData^.sData[iCol];
Dispose(pData);
end;
finally
oSortList.Free;
end;
end;
413 :
408 :2005/08/09(火) 00:02:29
>>412 わざわざありがとうございます!
ソートっておっそろしく大変な作業だったんですね・・・
てっきり何かしらの関数でもあるものかと思ってました。
ソース睨んで勉強してみます、どうもでした!
414 :
410 :2005/08/09(火) 00:16:13
いや、えっ〜とどう答えてよいのやら。 先のソースは 1) Grid の内容を TStringList にコピー 2) TStringList の Sort メソッドを呼び出してソート 3) TStringList の内容を Grid に書き戻し という構成で、ソート部分は TStringList のメソッドに任せているだけで ソースの大部分は 1) と 3) の処理なんだわ。 そんなわけで、先のソース睨んで勉強と言われると本質的な部分(ソート)の 勉強はできないんでちょっとツライ。 できればソート関連についてはググって勉強してくださいまし。
λなソートライブラリのないDelphiは糞 ありえない そんなのがゆるされるのは前世紀まで
416 :
デフォルトの名無しさん :2005/08/09(火) 01:05:53
かなり初歩的な質問ですが、間違ってしまったイベントを消すとき、どうやって消せばいいですか?
Del
>>416 書いちゃったイベントの内容(begin〜endの中だけ)を
選択して消す。
後は「構文チェック(S)」すれば、イベントの記述自体が消えます。
ほっといても、イベントの内容が空なら問題無し(コンパイル時に消えるし)。
419 :
デフォルトの名無しさん :2005/08/09(火) 01:34:05
>>418 ありがとうございます。
前に下手に消してエラー祭りになっちゃったことがあるんで・・・。
助かりました。
420 :
404 :2005/08/09(火) 07:04:30
昨日に引き続いて TEdit に関する質問なのですが・・・・ Edit は Hight を 24 に設定しても実行時には 20 に戻ってしまいます。またフォ ントサイズを変えれば Hight は自動的に変化してしまいます。 フォントサイズと Hight を思い通りに(たとえば FontSize = 9、Hight = 24 のよ うな) 指定はできないのでしょうか?
>>420 なんだ貴様やる気あるのか!!
フォーム生成時に
Edit1.Font.Size := 6;
Edit1.Height := 30;
とかやっとけ糞ぼけちんかすまんちょすv^−^v
422 :
410 :2005/08/09(火) 08:32:16
>>412 自己フォロー。今更ながらTStringGridにCols, Rowsプロパティなんてものがあることに
気づいてしまった。あんな無駄なことをしなくてももっと簡単に書けるぢゃないか。
恥ずかしいソースを晒してしまったorz...朝から鬱になりそうなので修正版。
procedure SortGrid(oGrid: TStringGrid; iSortCol: Integer);
var
oSortList, oCellData:TStringList;
iRow:Integer;
begin
oSortList := TStringList.Create;
try
for iRow := oGrid.FixedRows to oGrid.RowCount - 1 do begin
oCellData := TStringList.Create;
oCellData.Assign(oGrid.Rows[iRow]);
oSortList.AddObject(oGrid.Cells[iSortCol, iRow], TObject(oCellData));
end;
oSortList.Sort;
for iRow := oGrid.FixedRows to oGrid.RowCount - 1 do begin
oCellData := TStringList(oSortList.Objects[iRow - oGrid.FixedRows]);
oGrid.Rows[iRow].Assign(oCellData);
end;
finally
while oSortList.Count > 0 do begin
TStringList(oSortList.Objects[0]).Free;
oSortList.Delete(0);
end;
oSortList.Free;
end;
end;
FindWindowを使って、メーカー起動の監視をしようと思っています。 maelto:を使い、プログラム内で件名も埋め込んで起動させていますので、フォーム キャプションは予めわかっています。 OEのメーラーや、Outlook2003のWord2003で表示するにチェックを入れた場合のメー ラーの監視はできますが、Outlook2003のWord2003で表示するにチェックを外し、 html形式にしたメーラーの場合、 l_Han4 := FindWindow(nil,PChar( '無題 - メッセージ(HTML形式)')); で、監視ができません。タイマーを使って、監視していいますが、帰ってくるハンド ルは0です。 キャプション内の「(HTML形式)」を全角湖に変更して調べていますがハンドルは0で す。 キャプション設定が悪いのが原因かと思っていますが、いっそうこと現在起動されて いるフォームキャプション名を収得する方法はないかと思っています。直接Delphiに は関係ないかもしれませんが、現在起動されているフォームキャプション名を収得す る方法をご存じの方みえましたら、アドバイスしていただけますよう、宜しくお願い 致します。
メーカーって何だと思ったらメーラーか
>>423 Delphi-MLにまったく同じ文言の投稿があったのだけど釣り?
頑張ってね。 明日休みだし風呂で待ってようかな。 一緒に入る? 洗い合う? なんてね。
思い出し藁藁
>>420 AutoSizeプロパティを False にしたらどーなる?
質問です。 10M以上のバイナリのデータを書き換えたいのですけど BlockReadだと用意した配列 Var F_Data :Array[0..90000000]でエラー出ちゃいます。 一気に大きなファイル内容を読み書きする方法とか、メモリに入れなくても、直接編集できるような なるべく簡単な方法ないでしょうか。よろしくお願いします。 ※ポインタ使えません。ユーザが定義する関数も使ったことないです・・・
>>429 TFileStreamというそういう目的にぴったりのオブジェクトが存在する。
メモリに読み込むような作業をしなくても
ファイルの任意の場所から任意の長さのデータが読み書きできる。
しかしvar変数の意味を理解していないと使うのが難しい罠。(ある意味ポインタより間際らしい)
ちなみにオブジェクトって解る?解らないならそこから勉強すべきだ。
初期化が面倒だけどその後はCreateFileMapping/MapViewOfFileのが楽かもな。 ファイルをメモリ上の配列のように扱うことができるから読み書きのコードがシンプルになる。
432 :
デフォルトの名無しさん :2005/08/10(水) 01:14:33
>430 >431 今は0から1500読んで1000書く 1000から2500読んで2000書くとやっていますが どうしても跨ぐデータ(500以上のデータ)が出てしまって手も足もでませんでした。 両方ともしらべてがんばってみます。 どうもありがとうございました!! _(_ _)_ オブジェクト・・・コンポーネントのことかな・・・? なんかそれ以外にも難しい説明があったようななかったような・・^^;
オブジェクト=手続き
>433 ああそうだ。。。確か車がオブジェクトで、デザインがプロパティで、メソッドが各部品の機能でってあったような・・・ あとクラスっていうのもありますよね-_-;
オブジェクト=手続き? ここ何時からネタスレになったの?
>>435 お前がネタだろwオブジェクトが手続きじゃなくて何だw
手続き=procedure
ShellTreeiew でマウスでのドラッグ&ドロップによるディレクトリの移動を 禁止するにはどうしたらいいのでしょ?
↑ShellTreeView ⇒ ShellTreeViewです。
Delphiのソースコードに↓のような記述があったのですが、 {$I-} 処理1 処理2 {$I+} 処理3 これはどういう意味なのでしょうか? 宜しくお願いします。
初心者です。
stringGrid のソートをしたくて、けど自分でロジックが組めなくて
ttp://forum.nifty.com/fdelphi/faq/00084.htm こんなん見つけました。
非常に便利そうなんですが、使ってみると何も入力されていない列が一番上に来てしまいます。
(stringGridの一番下で文字列はちゃんとソートされてる。)
これを防いで入力のない列は無視するようにするにはどうしたらいいのでしょうか?
よろしければご教授ください。ペコリ
446 :
445 :2005/08/10(水) 19:03:41
すみません、書き込んでから気づいたんですがちょっと上に似たような話がありましたね。 ただ、後学のためにリンク先のコードをどう改変すれば文字列だけをソートできるのか、 教えていただけると助かります。
>>446 ・St.Sort→St.CustomSortに変更して自前でソート用比較関数を書く。
・St.Sortの前後を、St内の空文字←→大きな文字コード(例:#$FF#$FF等)に変換、逆変換処理で挟む
パフォーマンスを考慮すれば前者の方がいいか。
まだ他にも方法はあるかもしれないがパッと思いついたのはこれぐらい。
>>442 それは $I というコンパイラ指令です.
ヘルプにある $I の説明がわかりにくいので説明しますが,
ソースコードに{$I-}というコンパイラ指令があると
それ以後のコードはファイルの読み書きに関する手続き(ResetやRead, BlockReadなど)で
読み書きの処理に失敗(ファイルがない,ディスクがいっぱい,など)したときに
EInOutError例外を生成しなくなります.
この場合,これらの手続きごとにIOResult関数を参照して
正しく読み書きできたかどうかを調べなければなりません.
{$I+}の場合は逆に失敗時に上記の例外を生成します.
どちらも指定しない場合はプロジェクトオプションの『I/Oチェック』をチェックしているかどうかによります.
☆ ☆
この指令は恐らく過去に書かれたPASCALのソースコードとの互換性を取るためにものだと思われます.
Delphiで新規にプログラムを書く場合は使う必要はありません.
お手持ちのソースコードの処理1と処理2には恐らくIOResult関数でのチェックが入っていると思います.
もしなければ読み書きに失敗しても無視するだけの極悪手抜きコードかもしれません.
449 :
442 :2005/08/10(水) 21:31:25
>>448 大変参考になりました。ありがとうございます。
ちなみに、
>お手持ちのソースコードの処理1と処理2には恐らくIOResult関数でのチェックが入っていると思います
、、、入ってませんでした。
極悪手抜きコードつかまされたようですorz.............
450 :
445 :2005/08/10(水) 23:05:43
>>447 ありがとうございます。
2番目の案で解決しました。感動です。
どうもありがとうございました。
精進します。
StringでCaseみたいに扱う方法って何かありませんか? 一応、今のところ物凄い量のifを使って if S = 'Hoge' then .... else if S = 'HogeHoge' then ... else if S = 'HogeHogeHoge' then... ↑こんな風に処理していますが、ソースが凄く汚くて困ってます。
条件分岐用のクラスというと、どんな感じになるのですか?
>451 無い。 しかしIf文の中身次第では最適化の余地はある。 少し晒してみれ。
>>451 前後の処理にもよるけれどこんな方法も一応あり。
List := TStringList.Create;
List.Add('Hoge');
List.Add('HogeHoge');
List.Add('HogeHogeHoge');
case List.IndexOf(S) of
0: ShowMessage('Hoge');
1: ShowMessage('HogeHoge');
2: ShowMessage('HogeHogeHoge');
else
ShowMessage('Ohter');
end;
大体、こんな感じです。 procedure Hoge(Meirei: String); begin Meirei:= AnsiLowerCase(Meirei); if Meirei = 'meirei1' then ShowMessage('命令1が呼ばれた') else if Meirei = 'meirei2' then ShowMessage('命令2が呼ばれた'); end; 以下、延々と else if が続きます。 TEdit等にユーザーが入力した文字列を命令として認識し、 その命令に応じて予め用意した処理をしたいと思ってます。 しかし、用意した命令が30を超えた辺りからコードに虚しさを感じ始めました。
まあ、極めてC的だけど 文字列とその処理ハンドラの組を作り ループで回してやるのが一般的かな。 文字列一致の判定には2分探索やハッシュなんかを使う手もあるけど。
>>451 HashMap+MethodPointer
最近、JavaベッタリなんでDelphiの文法を忘れ気味なんだが、Delphiは
インスタンスメソッドのアドレスを普通に取れたはず。
だから、後はそれをHashMapに登録しておいて必要な時に呼び出すだ
け。パフォーマンスの点でも効率いいし、処理の追加や削除も楽々。
Delphiしか知らない上にハッシュていうのが良くわかりませんので、 とりあえず455さんのようにTListでごりごりやってみます。 ありがとうございました。
460 :
453 :2005/08/11(木) 01:54:43
>>456 命令クラスを作成。
TStringList.AddObjectでKeyの文字列と命令クラスを追加。
命令クラスの呼び出しはTStringList.Objects[TStringList.IndexOf(文字列)];でどうぞ。
461 :
デフォルトの名無しさん :2005/08/11(木) 06:20:40
( ´,_ゝ`)ふーん
462 :
デフォルトの名無しさん :2005/08/11(木) 06:50:24
TreeViewのノードをクリックするとそのノードに対応したテキストファイルを Memoコンポーネントに表示させたいのですがどういったコードを書けばいいのでしょうか?
>>462 TreeViewのMouseUpイベントで
1. TreeView.GetNodeAtメソッドを使ってクリックされたノード特定
2. ノードからテキストファイル名取得
3. Memo.Lines.LoadFromFileメソッドを使ってテキストファイル読み込み
TreeViewのノードとテキストファイル名の関連付けをどうやっているのか判らないので(Node.Text or Node.Data?)
2. の処理は自分で考えてね。
俺はD5しか持っていないのでD6以降のsampleにある TShellTreeView のことは知ら
ないが、その TShellTreeView はそれ以前からあった伊藤隆志氏の TShellTreeView
(
ttp://www.bekkoame.ne.jp/~itotaka )とほとんど同じだと聞いたことがあるので、
もしそうなら
procedure TFolderOpen.ShellTreeView1ShDragDrop(Sender: TObject;
const DragObject: TShellDragObject; Node: TTreeNode; Shift: TShiftState;
X, Y: Integer; var DefaultAction: Boolean);
begin
MessageDlg('フォルダーの移動はできません!',mterror, [mbok], 0);
DefaultAction := False;
end;
でいけるはず。
------
2つのTShellTreeViewがほとんど同じということは伊藤氏が Borland にソースを
提供したのだろうか?
465 :
デフォルトの名無しさん :2005/08/11(木) 17:30:18
すいません、質問です。 一つのデータをロードしたら、他のフォームにあるデータもロードしたいんですがやり方が分かりません・・・。 同じ様にセーブも一回でしたいです。 どなたかよろしくお願いします! ちなみにDelphi4 proffesionalです。
すみません、なに言ってるかわかりません。 もう少し具体的にお願いします。
>>465 すいません、まったく意味がわかりません。
468 :
467 :2005/08/11(木) 17:34:55
469 :
デフォルトの名無しさん :2005/08/11(木) 17:49:47
質問悪くてすいません・・・ わたしはLoadFromFileとオープンダイアログコンポーネントで、ファイルを選択して読み込む事はできるんですが、そのファイルに関連したファイルも一度に読み込みたいんです。 セーブダイアログで選択して保存する際も、他の関連するファイルも一度にセーブしたいです。 分かりにくくてごめんなさい(>_<)
OpenDialog1.FileName にロードするファイルの位置が入ってるから ExtractFileDir(OpenDialog1.FileName) でフォルダパスに変換して それに好きなファイル名足してロードしてください 関数の名前うろ覚え
471 :
デフォルトの名無しさん :2005/08/11(木) 18:17:27
ありがとうございます(>_<) OpenDialog1.FileName :=''; if OpenDialog1.Execute then ロードする位置.LoadFromFile(OpenDialog1.FileName); のあとにExtract 〜 と記述すればいいんですか?
var AFileDir: string; (中略) // OpenDialog1.FileName :=''; 要らない if OpenDialog1.Execute then begin ロードする位置.LoadFromFile(OpenDialog1.FileName); AFileDir := ExtractFileDir(OpenDialog1.FileName); 別のロードする位置.LoadFromFile(AFileDir + '別のファイル名'); 別のロードする位置その2.LoadFromFile(AFileDir + '別のファイル名その2'); end; 後は自分でがんばって
そのファイルとはいったいどういう種類のファイルなのだ。すべてテキストファイルなのか、画像ファイルや音声ファイルは ないのか? 答えようがないぞ。 たとえば拡張子がtxtである普通のテキストファイルなら SL :TStringList; SL := TStringList.Create; try for i := 0 to OpenDialog1.Files.Count - 1 do begin SL.LoadFromFile(OpenDialog1.Files[i]); //・・・・SLを処理する end; finally SL.Free; end;
474 :
デフォルトの名無しさん :2005/08/11(木) 19:07:57
みなさんありがとうございます(>_<) ファイルはストリンググリッドです。 試してみて、だめだったらまた質問します☆
☆とか止めてください(>_<) (>_<) (>_<)
476 :
デフォルトの名無しさん :2005/08/11(木) 22:18:54
画面のハードコピーを取る方法おしえてください。 ボタンをクリックすると、直接プリンターから出力されるといったかんじでやりたいです
>476 procedure TForm1.Button1Click(Sender: TObject); var hDWnd:THandle; DC:HDC; DRect:TRect; DCanvas:TCanvas; begin hDWnd := GetDesktopWindow; GetWindowRect(hDWnd,DRect); DC := GetDC(hDWnd); DCanvas := TCanvas.Create; DCanvas.Handle := DC; Self.Canvas.CopyRect(Self.ClientRect,DCanvas,DRect); ReleaseDC(hDWnd,DC); DCanvas.Free; end; ボタン貼り付けてこのコード実行してみれ。 Self(この場合Form1)のかわりにTPrinterオブジェクトを使えば印刷できるんじゃないかな?
TDBGridで、スクロールされたイベントを検出できますか?
とりあえず日本語がおかしい
OnMouseWheelUpとかなかったっけ なかったらウィンドウメッセージを察知してがんばれ
>>478 TopLeftChangedというメソッドをオーバーライドすれば出来る
そもそもDBGridのスクロールを検出して何がしたいんだろう。 これっといって用途が思い浮かばないんだが。
subversionのAPIをDelphiから操作できますか?
SCC APIだかsvn APIのソースをBCCでビルドすればできるんじゃないの。 自分は楽だしGUIだからTortoiseProc.exe呼んでるけど。
横から割り込みだが SubversionのEXEにパラメータを送るだけじゃ駄目なのかな?
ヒント:API
488 :
486 :2005/08/12(金) 10:46:42
SCC APIって資料あります? なんか見つからないのですが orz
memoで各行の1桁目の文字を効率よく調べる方法はありますか? for i := 0 to memo1.Lines.Count-1 do begin p := PChar(memo1.Lines[i]); if p^ = '@' then... なんてやってたんですがこのやり方はどうなのかなと思ったので。
c := memo1.Lines[i]; でいいだろ。p^なデリファレンスよりは速い。
: for i:=0 to memo1.Lines.Count-1 do : if Length(memo1.Lines[i])>0 then : if memo1.Lines[i][1]='@' then ・・・
492 :
489 :2005/08/12(金) 19:43:39
>>490-491 memo1.Lines[i][1]なんてできるんですね。
御二方、ありがとうございました。
AnsiStringでは s := ''; c := PChar(s)^; でc = #0になることが保証されているからLengthのチェックは必要ない。 だから c := PChar(Memo1.Lines[i])^; if c = '@' then ... で桶。
Delphiと直接関係なくてスマソなんだが、 USBから232Cへの変換ケーブル使った通信って、 通信がとぎれがちになる?
スレ違い
違いすぎw
TStringGridを派生して、 列や行の幅を変更したときにそれを通知するイベントを発生させたいのですが、 どうすればいいのでしょうか?
>>497 ColWidthsChanged と RowHeightsChanged をオーバーライド、かな
499 :
497 :2005/08/13(土) 11:42:11
どうもです
パーソナルでActionManagerが見つからないけど、何で?
Personalにはついてないから
チュートリアルの範囲ならTActionListがほぼ同機能
Del6のActionManagerはどーせバグバグだし
506 :
494 :2005/08/13(土) 22:15:01
うははははは、やっぱり
>>494 スレ違いだが…
速度が速過ぎるんじゃね?
D6Perを使っています。 稀に for 文の挙動がおかしくなります。 for ps := psA to psB do // ps は列挙型 としても実行してみると for ps := psB + 1 downto psA + 2 do のような動作になってしまう事があります。 ならない場所は何度実行してもなりませんが、なる場所は何度実行しても上記のようになってしまいます。 カウンタ変数に Integer を使ったり、while 文を使えば問題なく動くのですが… 何が原因なのでしょうか?
for i := m to n doが最適化の都合で for i := n downto m doに置き換えられることはFAQだけど 計算結果が異なるような形に置き換えられることはないよ。
510 :
508 :2005/08/16(火) 06:19:52
>>509 psCount: array[psA..psB] of Integer;
for ps := psA to psB do // psA が最初の、psBが最後の要素
begin
Inc(Result.foo, psCount[ps] div 3); // ココにブレークポイント
Inc(Result.bar, psCount[ps] mod 3 div 2);
end;
ブレークポイント置いて、ps を覗くと範囲外の値になっています。
配列のインデックスにそのまま使っているので変なことになってしまうんです。
10年使ってるけどそんな経験は1度もないなぁ 自分のコードを疑ってみれ。それから509氏のも考慮して。
>>510 のコードだけでは実行できないので、実行・検証できる最低限のコードが見たいな。
for ps := Low(psCount) to High(psCount) doと書いたほうがいい。 結果が変わるとも思えないけど
514 :
508 :2005/08/16(火) 18:15:57
どうやら for 文も、配列の範囲も最適化で変化していたようで、 結果的に正常に動いていました。 デバック関連の機能で覗くと最適化は考慮されないんですね。 失礼しました。
GetProcAddressで取得したアドレスの解放はどうすれば良いのですか? Button1を押したらHoge.dllからアドレスをグローバル変数に読み込み、 Button2を押したらその変数を解放したいと思っています
>>515 MSDN見たの? 解放するのはむしろLoadLibrary()でとってきたハンドルのほうじゃないかね。
ハンドルはFormのOnCreateで取得、OnDestroyで解放させています …もしかして、 var Hoge: procedure;stdcall; という変数にGetProcAddressでアドレスを割り当てたとしても、 Hoge:= nil; とすれば良く、解放の必要はない、ということでしょうか?
>>517 GetProcAddressはDLL内の関数テーブルの値を読み取っているだけ(アドレスを割り当てているわけではない)なので
Hoge:=nil;も不要。
単に配列の値を読み取っているようなものだと思えばよろし。
アドレスの解放 アドレスの解放 アドレスの解放 アドレスの解放 www
そんなに笑わなくたって良いじゃない。。。
CloseHandleでもやってなwwwwwwwwwwwwwwwwwww
ああ、なるほど、だからどのサイト見ても GetProcAddressで割り当てた後の処理はなかったんですか 笑いを提供した代償としてやっと納得を得られました ありがとうございました
>>522 参照と実体の区別がついてないのは気にすべきだと思うけどね
525 :
デフォルトの名無しさん :2005/08/17(水) 13:58:25
お邪魔します。質問させて下さい。 DELPHIにて二次元配列の定数を記述するにはどのように記述すればよいのでしょうか? 宜しくお願いします。
procedure TForm1.Button1Click(Sender: TObject); const a: array[0..2] of array[0..2] of string = ( ('ab','cD','Ef'),('gh','IJ','kL'),('mO','pq','RS')); begin ShowMessage(a[1,2]); end;
このスレッドはBorland(ボーランド)のDelphi(デルファイ)について、 他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが、 お礼はDelphiの布教と初心者の救済をお願いします。
528 :
デフォルトの名無しさん :2005/08/18(木) 02:30:35
キーボードのキーを入力する命令はどうやって書けば良いのでしょうか? ヘルプ見たんですがよく分かりませんでした…
>>528 Keybd_event(VK_END, 0, 0, 0);//キーを押す
Keybd_event(VK_END, 0, KEYEVENTF_KEYUP, 0);//キーを離す
※「仮想キーコード(Virtual-Key Codes)」を検索。
※※「押す」だけだと、アレなので「離す」もセットで(色々実験すれば
意味が分かると思う)。
Delphi6 PersonalでWindows XP ThemeManagerのインストールが出来ません。 Delphi 6 Personal.txt の通りにやったんですが、どうしても出来ません。 やり方教えて下さい。
SHINE
The sun will shine on a voyager who waits.
533 :
デフォルトの名無しさん :2005/08/19(金) 08:13:31
お邪魔します。Delphi5です。 現在PCにログオンしているユーザの権限 (制限ユーザか管理者か、或いはAdministratorかそれ以外か)の情報を取得する 方法を、 お教え下さい。 OSはWindows系です。
>>533 GetUserNameでログオンユーザー取得、NetUserGetLocalGroupsでログオンユーザーが所属するグループ取得。
NetAPI系はDelphiでは扱いが面倒だけど。ガンガレ。
Win2000以降でかつ、Administratorsグループか、そうでないかだけが判ればいいのならIsUserAnAdminを
使う方が簡単かも。
ソフトウェアキーボドのように、フォーカスを無視する方法を お教え下さいエロい人
SpeedButton 使え
あぁ、フォーム自体がアクティブにならないようにするって事
GetNextWindow()で得られるハンドルって、直前にアクティブだったウィンドウの ハンドルなのかね。もしそうなら使えるんじゃないかなあ
>>535 ,537
質問の仕方が悪いのでお前のケツマンコを犯す事にした。
タイムタグ([hh:mm:ss])に連動して歌詞表示させたいんですがよくわからないんです 正規表現使って云々ってぐらいは解ったんですけど・・・(´・ω・`) 最小限のサンプルでいいんでどなたか作ってくれませんか?
>>540 サンプルとかいわれてもなー
エスパー能力を発揮すると、正規表現で表示するタイミングと表示する内容を取得し、
それにしたがって逐次出力していけばいいのでは?
hh:mm:ssを適当に分割して StrToIntで数値にして、 時刻になったら表示すればいいんでないの? 正規表現なんて特に必要だとは思わない。
Delphi使いって馬鹿ばっかなんだな。 こんなサル以下なPQなんだったら辞めろよって感じ。
まっ、いろいろいるわな
まっ
PQって何?
PGのアナグラム
548 :
デフォルトの名無しさん :2005/08/20(土) 05:18:00
TOleContainer に Word 文書をロードした後、 その Word 文書を操作することは可能でしょうか?
>>540 int h, m, s;
sscanf("[%02d:%02d:%02d]", &h, &m, &s);
bccで作った関数ってDelから呼べたっけ?
BCBからPascalユニットの関数やクラスは呼べるけど‥‥
可変個引数のは無理っぽい。
EdMaxのプラグインを作りたいのですが DelphiのサンプルソースかSDKってどこかにありませんか?
delphi6とdelphi2005って別物ですか? 関数とかの互換性はありますか?
553 :
デフォルトの名無しさん :2005/08/20(土) 16:40:29
>>548 TOleContainer.OleObjectInterface で IOleObject インターフェイスを受け取って、
それに対して QueryInterface で IDispatch を取得すると、
それが Word の Document オブジェクトのオートメーション オブジェクト
になっているかも。
>>552 互換性はある。
>>553 Delphi 2005=最新。Delphi 7=実用的。
ちなみに年末にDelphi 2006が出る。
>>553 6perでも触って2006の評判見つつ7買うか2006買うか決めるのがいい気がする。
ちなみに2005はPascalの他にC#が、2006はC#とC++(C++Builder統合)が使える。
557 :
デフォルトの名無しさん :2005/08/20(土) 21:29:31
558 :
デフォルトの名無しさん :2005/08/20(土) 23:10:50
開発力の乏しい会社がMacOSXだのDelphiだので毎年金徴収する税金商法始めると悲惨だな。 バグ修正と新機能に伴うバグ抱き合わせで押し付けられて常にバージョンアップを強いられる。 まあ信者はそれがたまらんのだろうけどな。
>558 そうだよな。MSDN 税金は高いし。 OSX みたいに OS に IDE 付き揮発環境がくっついてくるとかしてくれないと。 まぁ信者はそれがたまらんのだろうけどな。
>>558 あっちで馬鹿にされたからって必死でスレ違いしなくてもいいよ
561 :
デフォルトの名無しさん :2005/08/21(日) 20:35:39
562 :
デフォルトの名無しさん :2005/08/21(日) 22:30:13
( ○Д○)はぁ?
563 :
デフォルトの名無しさん :2005/08/22(月) 09:57:56
Delphiでジョークソフトを作成しています。 実行した瞬間、パソコンが爆発するようなプログラムが組みたいんですが、可能でしょうか? あと、画面から手が出てきて相手の顔をぶん殴るようなソフトが作りたいです。 誰か教えてください
それに対応したパソコンやモニターを作る必要がありますね。 そこから手がけてみてはどうでしょうか。
すみません。
>>563 は知人です。今すぐ連れて帰りますので。。
ご迷惑をお掛けしました。
566 :
デフォルトの名無しさん :2005/08/22(月) 14:03:33
爆音で鼓膜とスピーカーを殺るくらいなら
>>563 が望んでるプログラム組めたけどぜってーやらねー(ケラケラプケラ
中学生はプラクラでも作るのがお似合いなんだよ(プケラ
わろすわろす
purakura?
すいません、教えてください。 Delphi2005Proで、FTPクライアント機能を含んだソフトを開発しています。 IndyのTIdFTPを使っています。 複数のFTPサーバに同時に接続する必要があり、TIdFTPを複数貼り付て それぞれ別のサーバに接続しています。 そこで、イベントのOnWorkEndをひとつだけ記述して、Sender引数でどの インスタンスのイベントなのかを知りたいのですがうまくいきません。 TidFTP(Sender).Tag はすべて0に、 TidFTP(Sender).Name はすべて''になります。 TagプロパティやNameプロパティはもちろん別々のものを設定してあります。 切り分けとしていくつか試したのですが、 iSender is TidFTP がFalseで帰ってきます。 TidFTP(Sender).Username は変な文字列(大半が#0)が帰ってきます。 どなたかお助け願えませんか。
(Sender is TidFTP)=Falseということは、 SenderはTidFTPのインスタンスではなく別の型のインスタンスが起こしたイベントだ。(本来あり得ない筈だがなぁ) ClassNameプロパティの値を調べてみれ。 ちなみにキャストはas演算子使った方が安全。
574 :
572 :2005/08/23(火) 00:27:17
あ、切り分けで補足しますと 自作プログラムだけではなくIndyのデモで、TidFTP(Sender).Tag等を 調べても同じ結果になります。 Label1.Caption:=InttoStr(TidFTP(Sender).Tag); みたいなコードを貼り付けて調べました。
575 :
572 :2005/08/23(火) 00:31:59
>>573 アドバイスありがとう。本来ありえないですよねえ。
is演算子を調べると、Senderがnilの時にもFalseになるらしい。だから何?といわれるとそれ以上は
わからないのですがなんか手がかりになるかしら?
ClassNameプロパティとas演算子は知りませんでした。明日出社したら試してみます。
エクセルみたいな感じで、StringGridに入力したデータを保存する方法ってありますか? TStringListは保存できるみたいなんですが・・・
すいません、ググったら分かりました。 それにしても、結構不便なものなんですね・・・ エクセルみたいに一つのファイルに保存できたら便利そうなんですが。
> エクセルみたいに一つのファイルに保存できたら便利そうなんですが。 一つのファイルに保存出来るけど。 なんでも作れる、ってことは、エクセルみたいな専用ソフトをつくるときには ちゃんとコードを書くんだよ。プログラミングとは、そういうことなんだ。
SaveToCsvFileメソッドがないのは明らかに某の怠慢だな
プロセス間共有メモリクラスがないのも明らかに某の怠慢だな で、TStreamから派生させたんだけど間違ってないよな?
レコードへのポインタとかのマスク被せて使うこと多いから Pointer 型プロパティ持たせてアクセスさせてる。
テキストファイルからデータの集合体を取り出したいのですが、いい方法はないでしょうか。 A<>B<>C A<>B<>C A<>B<>C A<>B<>C と、A、B、Cの三種類の要素を一組毎に行にしてあるデータがテキストになっているのを、 Arr = record A,B,C : String; end; という配列のrecordに入れたいのです。 最初に考えたのはTStringListに読み込んで、for文で一行ごとに<>をString内で検索してその前後をそれぞれArr[x].A、Arr[x].B、Arr[x].Cに代入するのを繰り返す方法なのですが、これよりも効率のいい方法があったら教えて下さい。
585 :
572 :2005/08/23(火) 23:37:21
573の助言に従い、SenderのClassnameプロパティを調べてみると... TIdSimpleServer が返ってきました。 ヘルプを見るとIndyのいろんなクラスで使われてるらしいですが、 どう使われてるかわらかんし、そこを手がかりにイベント発生元の インスタンスを調べようがありません。 as演算子は不正な型キャストでコンパイル通りませんでした。 なんとかならないものですかね? 引き続きご助言募集中です。
Indyは 正直そういう奴だ
> OnWork のSender はidFtp そのものではなく、idFtp が作成したFDataChannel OnWork のSender はidFtp そのものではなく、idFtp が作成したTidSimpleServer (FDataChannel フィールド) と読み替えてくれ。
DelphiでWebサーバーからHTMLを取得したあと JavaScriptのような document.getElementById("hoge"); こんな感じの命令でHTMLを解析できるライブラリってないでしょうか?
2chブラウザ作りたいなら先に既存のソース嫁
>>589 HTMLパーサーを使えばいいんじゃないか。ググルと色々出てくる。
Delphiで有名なのって何だろ?
>>592 ぐぐってみたのですがなかなか見つかりません。
キーワードを教えてもらえませんか?
板リストの解析だけなら正規表現だけで十分だろ。
delphi html parser
・JS厨 ・検索ワードを尋ねる ・「なるほど!」と言う なんか知り合いに凄く似てる奴がいるんだが気のせいだろうか。 このスレも勿論見てるしそいつ。
正体がばれたようなので消えますね
>>601 何か悪い意味で取られてしまったようなのですが、追い出そうとしてるとかいう事は
ありませんよ(笑
似たような奴はいくらでもいるし俺の知り合いとあんたは別人かもしれないじゃない
ですか。ただ似てたから言いたくなっただけですよ。
>>602 では復活しました。
HTMLパーサー自分で作ってみようと思います。
完全なものではなくていいので。
IHTMLDocument[2-5]インタフェース使えばいいだろうに HTML上のスクリプトと同じ感じで使えるぞ
プロジェクトの保存について、 [ファイル]-[プロジェクトに名前を付けて保存...] から 保存ダイアログにデフォルトで $(DELPHI)\Projects\ のディレクトリが表示されますが、 これを、別の任意のディレクトリに設定 する方法をご教示ください。 [ツール]メニューでも該当の設定を 見つけることができませんでした。
606 :
605 :2005/08/24(水) 11:44:06
IDEの作業フォルダを変更することにより、 解決しました。
>>605 デフォルトの保存先 = カレントディレクトリ
IDE起動用ショートカットの作業フォルダ変更しれ
608 :
605 :2005/08/24(水) 11:53:30
一つ上のディレクトリを指すにはどうしたらいいですか? ../ これに変わるものとかありますか?
ExtractFilePath,ExtractFileDir
>>609 ExpandFileName(pathstr + '\..')
とかどうかな?
612 :
572 :2005/08/25(木) 00:20:01
>>573 ,587
やったやったアリガトウ!うまくいったよ。587の方法で完璧。
ただ、TIdFTPのソースを書き直した後、それを更新するやり方
で半日てこずった。最初いくらやっても書き直しが反映されないの。
なんかわかりにくいよね。2005になってなんか変更あった?
他の人のためにパッケージ更新のやり方書ければいいんだけど、
あれこれやってたらいつのまにか出来たって感じなので残念ながら
まとめきれん。
恩返しできなくてスマン
> なんかわかりにくいよね。2005になってなんか変更あった? とってもw
614 :
デフォルトの名無しさん :2005/08/25(木) 13:01:12
VBとDelphiでどっちが優れていますか? 巷の評判ではVBの圧勝と聞きました。
自己解決しました
最新版同士ならVBだね
Delphiはもうすぐ死滅します。
ある特定のソフト使ってると、たまにDelが勝手に立ち上がってCPUウィンドウが表示される。 閉じようとすると「デバック中ですが何か?」ってきいてくる。 で、閉じるとそれまで使っていたソフトも強制終了されてしまいます。 これと防ぐのって、ユーザーを変えてDelとその特定のソフトをインスコしないと駄目? PC自体別じゃないと駄目?
特定のソフトってのを具体的に上げた方がよいと思われ
その特定のソフトってのがバカなんでしょう
アプリがアボーンしてJITデバッガにDelが指定してあるだけだろ
VC入れてる人はVCが起動します 不思議だな。
623 :
618 :2005/08/26(金) 10:12:24
>>619 仕事で使う専用ソフトなので一般的ではないのです。
お客には一応売ってはいますが。
>>620 ハイ、バカです。よくこんなものン百万で売る気になるなと。
買う方も買う方だと、思ってます。
>>621 その指定ってどこで解除出来るのでしょう?
書き忘れましたが、WinXPを使っています。
ユーザーを分ければ回避出来ますでしょうか?
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug のDebuggerにDelphiが指定されてるだろうから、それを消すだけでいいはず。
625 :
デフォルトの名無しさん :2005/08/26(金) 11:13:49
TMemoで、超長い行も改行しない方法ありますか?
WordWrapをFalse もともと改行コードが入っていると駄目だが
外部例外が出て落ちてしまうのですが、これはどのようなときに発生するのでしょうか? 普通の例外とは違うのですよね?
> 普通の例外とは違うのですよね? Delphiの外で、よくわからん例外が発生しているつー事だ。
データの保持にTMemoryStreamを使おうと思っているのですが。 Form上にAという作業領域があって、B、C、D〜というストリームにデータが入っています。 で、LoadFromStreamでA←Bと読み込んで、作業終了したらまたA→BとSaveToStream。 指示ごとにA←C、A→C、A←D、A→D………というふうに。 TMemoryStreamを無数保持する場合の弊害とかはないですか? どうも中間オブジェクトとしてしか使われるところを見ないものですから…。
TMemoryStreamはヒープ上に確保したメモリを TStreamに合わせて使えるようにしただけのクラス。 当然相応にメモリを消費するが…
うるう年なら@MONTH = ('',31,29,31,30,31,30,31,31,30,31,30,31); うるう年以外なら@MONTH = ('',31,28,31,30,31,30,31,31,30,31,30,31); を配列に代入して MONTH[入力された月の変数]を変数に代入して表示されるプログラムを Delphiでやろうとして検索しては試行錯誤していますがまったく解決できません;; これをDelphiでやるにはどうしたらよいでしょうか?
>>631 SysUtils.pasにMonthDays定数がある。
var
LeapYear: Boolean; //閏年か否か
AMonth: Integer;
begin
LeapYear := False;
AMonth := 2;
ShowMessage(IntToStr(MonthDays[LeapYear, AMonth]));
end;
∧,,∧ ミ,,゚Д゚彡 ミつ日(ミ こんばんは。 簡単なテキスト整形をしたくなりました。 行頭禁則と行末禁則文字指定ができて 指定桁数折り返し整形処理を 行うようなコード、どなたかすでにお書きじゃないかしら。 知ってたらおしえいてくださいま。 なけりゃ、作るかしら(*´・д・)(・д・`*)ネー
>>632 631の者です。
有難うございました。
先ほど閏年を計算してくれる関数があるのを知って驚いてたばかりなので
日にちの定数まで存在するんですね・・・Delphiに圧倒!
数行必要なプログラムが数文字にばけました、驚きです。
途方に暮れていたので有難うございました。
助かりました。
MonthDays[IsLeapYear(year),month]
timerを使用してアラームを作ろうと思うのですが うまく動きません、 memo1.line[0]とnow2 には200508270800という文字列が入っています。 これが一緒なら音を鳴らすというプログラムです。 まだ始めたばかりでプログラムが汚いですがお願いしますTT 文字数が多いのでプログラムの部分は次へ
procedure TForm1.ontimer(Sender: TObject); var Present : TDateTime; nowtime : string; i : integer; now2 :string; nowyear,nowmonth,nowday,nowhour,nowmin,nowsec,nowmsec : word; begin nowtime := DateTimeToStr(now); Present := now; nowtimelabel.Caption := nowtime; DecodeDate(Present, nowyear, nowmonth, nowday); DecodeTime(Present, nowhour, nowmin, nowsec, nowmsec); for i := 1 to Memo1.Lines.Count do begin now2 := IntToStr(nowyear)+Ttime(IntToStr(nowmonth))+Ttime(IntToStr(nowday))+Ttime(IntTostr(nowhour))+Ttime(IntToStr(nowmin)); if Memo1.Lines[i] = now2 then begin beep(); end else end end;
637 :
デフォルトの名無しさん :2005/08/27(土) 09:49:04
>>636 DateTimeToStr を FormatDateTime?? だかにすればどうかなぁ
>>630 試してみました。
比較は、保持内容がテキストなので、TStringList。
for内でCreateと40kほどのファイルをLoadFromFile。
で、300ほど回して、タスクマネージャで見てみました。
TMemoryStreamは、増約12M。
TStringListは、増約25M。
消費量はTMemoryStreamのほうが小さいですけど……ううむ。
>>638 >>630 が言ってるようにTMemoryStreamは動的確保したメモリブロックにTStreamのインタフェース乗っけただけのクラスだから
GB単位とか無茶なことやらない限りは問題ない。
TreeViewで複数の項目の選択をすることが可能ですか?
MultiSelectっていうPropertyで設定可能 ただし、扱いには少しくせがあるから気をつけろ
くせがないときの動作ってどんなものか説明してごらん
ふさぎこたんは、えでぃたこんぽのそーすみたほうが、はやいとおもいます
s2dotnetをDelphi 2005のC#プロジェクトとして取り込みたいんだけど ソリューションが複数ある場合、なんか上手くいかない orz なんかコツがあるのだろうか?
標準で割り当てられてるショートカットキーは解除可能ですか? alt+F4とかF10とか
>>646 OpenToolsAPIの付属デモを弄って、新しいショートカットキーのセットを作れば可能。
拡張モジュールじゃ駄目かも。
> OpenToolsAPIの付属デモ ToolsAPI\Editor Keybinding デモ
おせわになります。 Delphi6で、制御系のプログラム組んでるんですが、作ったアプリのタイトルバーをクリックしてるとメッセージ関係が止まってしまって困っています。 タイトルバーをクリックしたまま動かす(ドラッグ)と、ウィンドウの移動モードになり回復するのですが、クリックしたまんま動かさないと、止まったまんまです。 とりあえず、現状では WM_NCLBOTTONDOWN が来たら mouse_event で4ポイントほどマウスを動かしてこれを何とか回避してますが、当然ながら、いまいちすっきりしません。 #ファイルコピーの時のプログレスバーも、タイトルバーをクリックしてると止まるので #Windowsの仕様っぽいかんじですが。。。 で、質問ですが、タイトルバーをクリックしても止まらないようにする方法はないでしょうか。 または、マウスを移動することなく、ウィンドウを移動モードにする方法をお教え願います。 よろしくお願いいたします。。
>>649 それは下位デバイスとの通信中だけに起きる現象か?
そうならば解決させる方法は通信部分をスレッド化するしかない。
そうでないならば正しくメッセージ処理が行われていないだけ。
>649 タイトルバーを掴んだときの動作はWindows固有の問題。 解決方法は >650 のとおりスレッド化。 まぁ >649 のやり方で支障がないならokのような。
652 :
649 :2005/08/29(月) 00:24:08
お返事ありがとうございます。 簡単なサンプルですが、検証コードです。 Form1 にEditコントロールをひとつ貼り付けてください。 これでも見事に、タイトルバーをクリックすると止まってくれます。 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type THogeThread=Class(TThread) protected procedure Execute; override; end; TForm1 = class(TForm) Edit1: TEdit; procedure frmShow(Sender: TObject); private procedure WMHoge(var Msg:TMessage); message WM_USER+$100; { Private 宣言 } public { Public 宣言 } end;
653 :
649 :2005/08/29(月) 00:26:01
var Form1: TForm1; implementation {$R *.dfm} { THogeThread } procedure THogeThread.Execute; var a:integer; begin a:=0; while not terminated do begin Sleep(200); SendMessage(Form1.Handle,WM_USER+$100,0,a); inc(a); end; end; var hogeThread:THogeThread; procedure TForm1.frmShow(Sender: TObject); begin hogeThread:=THogeThread.Create(False); end; procedure TForm1.WMHoge(var Msg: TMessage); begin Edit1.Text:=IntToStr(Msg.LParam); end; end.
654 :
649 :2005/08/29(月) 00:56:41
たしかに、すべてをスレッド化すれば止まることはないのですが、外部との通信、イベント通知、などで、SendMessage をつかうと、そこで止まってくれます。
また、どうも TEvent なども使うと止まってくれるみたいです。
>>651 さんの言うように、Windows固有の問題とすれば、これはどうしようもないということなんですね。
それでは、マウス移動しないでウィンドウの移動モードに移行する方法というのはどうでしょうか。
WM_COMMAND を飛ばすとかいろいろやってみたのですが、どうもうまくいきません。
>>649 のようにマウス移動させて、逆のマウス移動するというのもやってみましたがそれでもだめなようです。
よろしくお願いいたします。
>>652 サンプルに関して言えば、
PostMessageにすると、表示は変だけどカウントアップは止まらない。
Synchronizeなら、ほぼ完璧に見えるが・・・そういう問題ではない?
> Windows固有の問題 なんだから、回避するとそれは誤動作の元だろ。
条件が一致したら、StringGridの特定セルのフォントカラーを変える、というプログラムを書きたいのですが・・・ つまり、 if 条件 = true then begin StringGrid1.Cells[x,y]のフォントカラー=グリーン end; といった具合です。 begin StringGrid1.Cells[x,y].font.color := clgreen ; なんて文章を考えたのですができずに・・・ 分かる方いらっしゃったらよろしくお願いします。
>>654 回避すると互換性がなくなって「糞アプリ」のレッテルを貼られるだけだよ
>>657 StringGrid OnDrawCell でぐぐれ
>>649 >外部との通信、イベント通知、などで、SendMessage をつかうと、そこで止まってくれます。
っ[ Classes.AllocateHWnd関数 ]
TTimerのソース追っかけてみると吉
って同一スレッドだと別ウィンドウでもメッセージって止まったっけ?(´・ω・`)
662 :
デフォルトの名無しさん :2005/08/29(月) 12:56:14
同時に動作してるメッセージポンプはひとつだけだからな
>>649 すなおにSynchronizeを使いなさい。
しかし、Delphiのスレッドの資料ってホント無いね。
http://www.geocities.co.jp/SiliconValley-SanJose/2560/delphi4/forms/Thread.htm THogeThread=Class(TThread)
private
FCount: Integer;
protected
procedure SyncHoge;
procedure Execute; override;
end;
TForm1 = class(TForm)
Edit1: TEdit;
procedure FormDestroy(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private 宣言 }
FHogeThread: THogeThread;
public
{ Public 宣言 }
end;
{ THogeThread } procedure THogeThread.Execute; begin FCount := 0; while not Terminated do begin Sleep(200); Synchronize(SyncHoge); Inc(FCount); end; end; procedure THogeThread.SyncHoge; begin Form1.Edit1.Text := IntToStr(FCount); end; { TForm1 } procedure TForm1.FormShow(Sender: TObject); begin FHogeThread := THogeThread.Create(True); FHogeThread.FreeOnTerminate := True; FHogeThread.Resume; end; procedure TForm1.FormDestroy(Sender: TObject); begin FHogeThread.Terminate; end;
ありゃ、インデントが。。スマソ
ここに書き込むときは全角空白でのインデントがお奨め
> ここに書き込むときは全角空白でのインデントがお奨め お奨めじゃないよ、そんなの。ちゃんと HTML の空白文字で埋めろよ。 そんなアプリ作るの5分で出来るでしょ。
テキストエディタの置換機能を使えばよい
&nbsp;を半角だっけ
YES
>>635-636 例によって遅いレスですいません.
見たところたくさん問題があるようですがコンパイルはうまくいきましたか?
少なくとも以下の行がコンパイルエラーになっているはずですが.
> now2 := IntToStr(nowyear)+Ttime(IntToStr(nowmonth))+Ttime(IntToStr(nowday))+Ttime(IntTostr(nowhour))+Ttime(IntToStr(nowmin));
#ちなみソースコードは特に汚くないと思います.
Irvineのソースに入ってる独自のスレッドクラスも結構面白い
>>637 FormatDateTime関数を使って現在の時刻を取得する事によって簡単に比較できるようになりました。
ありがとうございます。
>>674 うまくいきました。
Ttimeというのは自分で作成した関数で
入力された数値が一桁、つまり9以下の場合のみ文字列型で0を前方に追加する関数です。
now2には文字列型で200508300630みたいに入ります。
入力された数値と現在の時刻をひとつのIF文で比較するのには文字列型の方がやりやすかったので・・・
まだまだプログラミングは始めたばかりでしかも1から独学でやってるので
知らないことだらけで適切な関数を使えてないのでやはり他の人のプログラムをみると
自分のは汚いなと思います^^;
wavファイルの再生方法はPlaySoundを使用する事で解決したのですが midとmp3の再生方法が全くみつかりません。 これらを簡単に再生できるようになる関数は存在するのでしょうか? 関数が無ければどの様な方法でやったらいいのでしょうか? あとファイルネームを取得してラベル等で表示させると C:\aaaaa\aaaa\aaaa\aaa.wavと表示されてしまうのですが aaa.wavだけを表示するにはどうしたら良いでしょうか?
>>675 ソースはどこ?EXEしか見つからない orz
つExtractFileName
>>677 あらかじめメモリにロードしなくていいならMCI or DirectShow
>>677 mciSendString(PChar('open ' + 'Hoge.mid' + ' type sequencer alias midifile'), nil, 0, 0);
mciSendString(PChar('play midifile'), nil, 0, 0);
mciSendString(PChar('stop midifile'), nil, 0, 0);
mciSendString(PChar('close midifile'), nil, 0, 0);
MediaPlayer1.FileName := 'Hoge.mp3';
MediaPlayer1.Open;
Mediaplayer1.Play;
MediaPlayer1.Stop;
MediaPlayer1.Notify := False;
MediaPlayer1.Close;
Delphi7でデザイン時にComboBoxのItemsプロパティに ×の文字入れると「RichEditの行挿入エラー」とかって表示されて それ以降Itemsプロパティを編集できなくなってしまいます。 これってうちのだけですか?
>>679 できました、ありがとうございます。
>>682 バージョンが古いせいなのかわかりませんが
色々試行しましたが上記の方法ではmidi,mp3ともに再生されませんでした
Mediaplayerを使用してwavとmidiは再生できましたがmp3はだめみたいです。
バージョンは6パーソナルです。
687 :
682 :2005/08/30(火) 17:36:57
>>686 なんででしょ?
こちらはD5Proです。
688 :
デフォルトの名無しさん :2005/08/30(火) 18:01:41
DelphiでTLV形式のファイルを扱うようなサンプルページってないですか?
>>686 まさかWindows95じゃあるまいな?
98+IE5以降ならmp3は再生できるはずだが‥‥
690 :
デフォルトの名無しさん :2005/08/31(水) 09:58:32
buf[0] := $00; buf[1] := $80; buf[2] := $00 とデータが入っているとき buffを$008000と認識して32768を得たいのですがどうすればいいのでしょうか?
PDWord(@buf[0])^
3バイトだけか。691は間違い。 buf[0] * $10000 + buf[1] * $100 + buf[2];
693 :
690 :2005/08/31(水) 10:54:59
>>691-692 ありがとうございます。
試行錯誤したところ
sTemp := IntToHex(bBuff[0], 2) + IntToHex(bBuff[1], 2) + IntToHex(bBuff[2], 2);
IntToStr( StrToInt('$' + sTemp) ) );
で出来ましたが間違っていないでしょうか?
文字列介したら遅すぎて無駄。
間違ってないけど、アフォすぎ
procedure TForm1.Button1Click(Sender: TObject); var buf:array[0..2] of byte; v: cardinal; begin buf[0] := $0; buf[1] := $80; buf[2] := $00; v := ((buf[0] shl 8) or buf[1]) shl 8 or buf[2]; Label1.Caption := IntToHex(v, 6); end;
理解できるなら696がいいね。
というか理解できないならプログラマに向いてないよ
くだすれで質問としてコード出してんだからここまで叩く必要はないと思うがwww
皆心に余裕がないのさ
702 :
デフォルトの名無しさん :2005/08/31(水) 14:08:35
>>687 >>689 OSはXPです。
実行すると指定した拡張子からはデバイスの種類は判別できません。と警告されます。
MediaPlayerのプロパティーでDeviceTypeを確認してもmp3と表示されてるものは無く
dtAutoSelectで自動に判別させるようにしています。
Delphiのverの問題なのかなと思えてきました。
無料の6パーソナルだと色々と使えない物が多いみたいなので・・・
趣味に7万はきついので製品版購入は難しい;;
明らかに Delphi 側の問題では無いだろう
>>702 MCIは試したか?
TMediaPlayer使わずにMCI使うことを勧める。
個人的にはDirectShow推すけどCOMだのなんだのあるからMCI推し。
//再生ボタン
mciSendString(PChar('open ' + 'Hoge.mid' + ' alias stream1'), nil, 0, 0); { ファイル形式は勝手に判断してくれるからtype省略 }
mciSendString(PChar('play stream1'), nil, 0, 0);
//終了ボタン
mciSendString(PChar('stop stream1'), nil, 0, 0);
mciSendString(PChar('close stream1'), nil, 0, 0);
参考URL
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_multimedia_command_strings.asp
>>704 別のPC(XP)では正常に動きましたが、今使用しているPCではやはり鳴りません・・・
何が原因なのでしょうか・・・・・
Delphi7で音を鳴らしているのですが、マスターボリュームの現在値を取得して、 ボリュームを現在値の10分の一に設定する方法は無いでしょうか? 昔のFDELPHIにあったソースを使って今まではやっていたのですが、この方法だと、 ノートパソコンでしか動作しませんでした。 自作機だとMCIデバイスが見つからないとエラーになってしまうので、どのパソコンでも 使えるように改造したいと思ってます。
>>705 メディアプレーヤーでちゃんと音出るか?
>>708 普通に再生するのはできます。
プログラムを通すとなりません。
他のソフト系の影響かと思いOSからインスコしましたがやはりなりません・・・
ファイルが壊れてるんじゃないのか
ブレークポイントとか、しおりの設定を保存をしたいのですがですが、 設定で保存が効くようになるのでしょうか? 宜しくお願いします。
>>712 ブレークポイントは環境オプションのプロジェクトデスクトップの自動保存をONにすれば保存される
しおりが保存できないのは有名な話
delphi6Personalで、DB『Firebird』に接続する為には、どうしたらいいでしょうか?
718 :
デフォルトの名無しさん :2005/09/02(金) 03:11:54
KeyPressで簡単なタイピングソフトを作っていて たとえば 「aaaaaaaabc」と打ちたいとき、KeyPressだとaのキーを押しっぱなしになってしまいます。 押した瞬間にしか認識できないようにしたいのですが、 Chr('a')などして、KeyUpとKeyDown試しましたが、これもうまくいきませんでした。 方法教えてください。
よく意味が分からないのだが、キーを押しっぱなしにしてる状態の時 連続で文字を出力させたくないって事?
意味ワカラナス
aを8回押さなくても押しっぱなしにすれば8回入力した事になるのを 8回押さないと駄目なようにしたいって事か?
abcと入力したとみなす、ということかな?
>>718 WM_KEYDOWNメッセージのlParam30ビット目
OS の標準動作からはずれた動作は糞アプリ
KeyUpがあるまで入力を受け付けない
>>724 タイピングソフトがオートリピート殺してたって誰も文句言わねーだろ
>>718 const
BeforeChar: Char = #0;
begin
if Key = BeforeChar then begin
Key := #0;
end else begin
BeforeChar := Key;
end;
end;
>>727 それって押しっぱなしだけじゃ無くて、2回押すのも無視されないか
729 :
727 :2005/09/02(金) 09:39:50
じゃあ、これは? private KeyUp: Boolean; procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin if not KeyUp then begin Key := #0; end else begin KeyUp := False; end; Caption := Caption + Key; end; procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin KeyUp := True; end; procedure TForm1.FormCreate(Sender: TObject); begin KeyUp := True; end;
>>726 OS のキー入力の標準動作と違うタイピングソフトって、意味なくね?
732 :
727 :2005/09/02(金) 11:51:26
>>730 なら、これだろ?
private
BeforeKeyDown: Boolean;
procedure WMKEYDOWN(var Msg: TMessage); message WM_KEYDOWN;
procedure TForm1.WMKEYDOWN(var Msg: TMessage);
begin
BeforeKeyDown := (((Msg.LParam shr 30) and 1) = 1);
end;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if BeforeKeyDown then Key := #0;
caption := caption + Key;
end;
>>731 オートリピートごときで意味なくならねーよ。あほか。
QuickReportで質問なんですけど、フォームデザイン時にある グリッドラインも併せて印刷できないでしょうか? 宜しくお願いします。
<チラシの裏> あぁ俺もタイピングソフト作ってみよう </チラシの裏>
前どっかにMonaTypeとか言うのが上がってたな
>>733 その「オートリピートごとき」で、なんでわざわざOS標準動作を変える必要があるのかが分からんところだな
しかも、必死だし(藁
>>737 そんだけ君がアホな事言ってるのさ
高度な議論はフサスレで
高度過ぎてついていけません。フサスレに移動願います。
>>676 すいません,まだご覧になっているかわかりませんがTTimeの件,了解です.
うまくいかないというのは指定した時刻になっても期待した処理が実行されないということでいいのでしょうか?
> TForm1.ontimer
このメソッド,ちゃんと実行されていますか?なんか実行していないような気がします.
> begin
この行にブレークポイントを置いて([F5]キー)実行時に止まるかどうか調べてみてください.
止まらないようならタイマーコンポのプロパティ(イベントも)を確認してみて下さい.
>>718 OnKeyDown/OnKeyUpイベントを使うのがよいと思います.
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
CapsLocked: boolean;
IsUpperCase: boolean;
begin
// CapsLockがOnかどうかを得る.←やり方は今調べた(笑)
CapsLocked := ((GetKeyState(VK_CAPITAL) and 1) > 0);
// 大文字にするかどうかを決める.
IsUpperCase := (ssShift in Shift) xor CapsLocked;
case Key of
ord('A')..ord('Z'): // [A]〜[Z]なら
begin
if IsUpperCase then
Caption := Caption + chr(Key)
else
Caption := Caption + AnsiLowerCase(chr(Key));
end;
end;
end;
このイベントで渡される値は文字ではなく『仮想キーコード』といって,キーごとに割り振られた番号です.
(これは文字コードとは異なりますが[A]〜[Z]は文字コードと同じ番号が割り振られています.)
たとえば[A]キーが押されていれば 61 という値が返ってきます.
Shiftキーを押しながらでもCapsLockがONでも同じです.
実際にコードを書くときはそのまま数をを書くと何を意味するのかわかりにくいので
[A]ならord('A'),[Z]ならord('Z')と書いて下さい(それぞれ'A'と'Z'の文字コードを意味します).
その他のキーについてはGoogleで『仮想キーコード』で検索すれば一覧表ページを見付けられるでしょう.
>>742 ?
質問と関係なく、タイピングソフトのアドバイスしてるってことか?w
>>742 そのコードは
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
Caption := Caption + Key
end;
とどこが動作が違うの?
そもそも
>>718 の質問って
> 「aaaaaaaabc」と打ちたいとき、KeyPressだとaのキーを押しっぱなしになってしまいます。
この意味が分からないんだよね。オートリピートとはなにも関係なさそうだし。
どこが動作が違うの?
2行目考えると、 aのキーを押しっぱなしでも打ててしまいます。 押した瞬間にしか認識できないようにしたいのですが って事だべ?
一回押したつもりで押しっぱなしにしてしまう操作ミスを検出できないんじゃ タイピングソフトの意味ないし。
まだ言ってるこのアホ
744は既知なので無視しましょう^^b
必死だな(藁
n := GetTickCount; repeat Write('Input A-Z:'); Readln(s); until s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; Writeln('Time:', GetTickCount-n, 'ms');
:-) ←wwwwwwwwwwwwwwwwwwwwwww
やれやれ
void知らない馬鹿が沸いてきたか‥‥‥
お前らまとめて死ね
うんざり
負け組同士仲良くしようよ
今日のこのスレが void だ
すまんです,OnKeyDown/OnKeyUpでもキーリピートは反映されるからだめなのか…
アフォ質問に超能力回答ばかり、くだすれ以下だわ今日は・・・
763 :
デフォルトの名無しさん :2005/09/03(土) 10:21:30
バイト配列に入っているUnicodeデータを 文字列に変換するにはどうすればよいのでしょうか? Buff[0] = なんたら、Buff[1] = かんたら、Buff[2] = こんたら・・・ と入っているデータを文字列をして取得したいのです よろしくお願いします。
UCS2形式です。ヘッダ等はなく1文字を2バイトであらわしています。 バイト配列から2個ずつ取得してそれをWideStringに 代入すればよいと思うのですがやり方がわかりません。
BCBだと配列のポインタをWideStringに突っ込むだけなんだけどぁ‥‥
var dest: widestring; begin dest := PWideChar(@Buff); とか var dest: widestring; begin SetLength(dest, BuffSize div 2); if BuffSize > 0 then Move(Buff, dest[1], BuffSize); みたいな感じ?
TreeViewで表示されているノードの高さの計を取得したのですが、なにか方法はありますか? 折りたたまれているノードは高さに含まれないので、 ひとつひとつ表示されているかチェックしてその数×ノードの高さだとどうも。
>>768 >取得したのですが
もうできてるがな!
>>769 すまん、書いた文章読み直さないおいらが阿呆だった。
まだ取得はできていないっ。
>>766-767 ありがとうございました!出来ました!
バイト配列が動的配列だったのでそのまま渡して
後にヌル文字を付けることで出来ました。
>>768 トップから再帰的に潜って TTreeNode.Count 数えていくとか
>>768 TTreeNode.GetNextVisibleを使って数えるとか?
uses CommCtrl;
procedure TForm1.Button1Click(Sender: TObject);
var
node, next: TTreeNode;
count: Integer;
begin
node := TreeView1.Items.GetFirstNode;
if node=nil then
Exit;
count := 1;
while true do
begin
next := node.GetNextVisible;
if next=nil then Break;
node := next;
Inc(count);
end;
ShowMessageFmt('ノードの高さの計 = %d個 × %d ピクセル/個', [count,
TreeView1.Perform(TVM_GETITEMHEIGHT, 0, 0)]);
end;
ノードの開閉に合わせて表示数の増減をどっかの変数に保存させとくのがスマートじゃないか?
775 :
768 :2005/09/03(土) 16:59:48
GetNextVisibleは私も考えていたんですが、 変更ある度に全チェックというのも微妙だし、ということで質問したのです…… 例えばTreeViewのスクロールバーは、どうやってサイズを決めてるんでしょう。 あれがGetNextVisibleでサイズ取得してるのなら問題なさそうですけど。
目的は何?
777get
Delphi 5 で クラスに宣言してあるメソッドもしくはプロパティ の一覧を取得して、呼び出す(Java のリフレクションに相当) ことをしたいのですが、できるんでしょうか?
>>778 OpenToolsAPIでプロパティの取得は可能らしい。
ただ、資料が少なかったり、バージョンによって細かい違いが
あったりと、色々と扱い難い部分があるらしい。
ListBoxで、マウスで範囲選択できるようにはどうしたら良いでしょうか?
MultiSelect
783 :
780 :2005/09/04(日) 08:41:40
>>781 MultiSelectはtrueにしてありますが、駄目です。
エクスプローラなどの様に、マウスドラッグで範囲選択したいのですが…
>>783 できるよ。操作感もエクスプローラーとおなじだし。
>>780 君はListBoxとListViewを混同してはいないか?
786 :
デフォルトの名無しさん :2005/09/04(日) 18:30:50
780ではないが、ListBox って drag で範囲選択できるのか… で、質問なのですが、ListView の Report で右詰で表示したいのですが、 どのような方法があるのか、ご存知の方がいましたら教えていただきたく お願いします。
コンポーネントを探してくるかOwnerDraw(標準の描画の代わりに自分で描画する)
2列目以降ならTListColumn.Alignmentでできるけど、1列目は出来ないんだな
処理上はおまけのついてる一番左の列のリストってことになってるからね
790 :
デフォルトの名無しさん :2005/09/04(日) 20:21:16
あう、左端の列を右詰にしたかったのですが…残念 OwnerDrawでがんがるか… ありあとあんした。
791 :
デフォルトの名無しさん :2005/09/04(日) 20:22:01
マスコミは創価に侵食されているようです。又、現在の危機的な国家財政、ある意味では財政破綻している。 このような病的で異常な社会になったのは、朝鮮部落出身の指導者池田が動かす公明党が政権をとるようになってからだ。創価の反仏教仏道に反するテロ行為は以前から。町でテロ、地方でテロ、国では公明が異常で創価構成員の為だけの法律を次々に捏造し続けている。 今度の選挙で自公連立政権が続くことになれば、日本はマジにおしまい
792 :
780 :2005/09/05(月) 00:00:27
>>784 >>785 ListViewと勘違いはしてません。
普通にできますか。なにか設定する必要は無いんですよね?
僕の環境の問題なんですかね。キーボードでしか複数選択できないんですよね。
なんかまちがっちゃってプロパティとかを弄った可能性があるので、
これからListBoxを使った簡単なプログラムを作って試してみます。
793 :
デフォルトの名無しさん :2005/09/05(月) 03:42:30
Del6Personalでコマンドラインアプリを作りたいんですがどうすれば良いですか? コンソールアプリを作ったり、起動時にメインフォームを非表示にする方法とかは解るのですが コマンドラインアプリ(の土台)の作り方が解りません。(コマンドライン引数の扱いとかは解ります ググってもコマンドラインアプリが作れるという情報だけで 具体的な方法は解りませんでした。どうかご教示願います。
>>793 意味不明。
とりあえずReadlnでユーザの文字列を受け取れるが?
無限ループの中にReadlnを置けばいいんじゃね?
>>793 というかコマンドラインアプリって、cmd.exeみたいなやつのことだよね?
だから、Readlnで文字列受け取って処理分ければいいんじゃないの? 作った事ないけどww
program HelloWorld; {$APPTYPE CONSOLE} uses SysUtils; var yourName: String; begin Write( 'Please type your name here: ' ); Readln( yourName ); Writeln( 'Hello, ' + yourName + '.' ); { 終了メッセージを表示 } Write( 'Press any key to continue' ); Readln; end.
>hoge param1 とかで起動するアプリなら、たんにコンソールアプリでコマンドラインパラメータ 受け取って処理するだけ。
>>780 ListBoxを貼る
項目を適当に10個くらい追加する
MultiSelectをTrueにする
実行
一番上の項目からドラッグ開始
一番下の項目でドラッグ終了
これで複数選択できなかったらおかしい
2コだけ質問があります。 スキル 超初心者 環境 Windows200SP4 + Delphi 6 Personal 作成目標アプリ 学校の数値解析用デジタイザー(Jpeg画像からXとYの位置をリスト形式で取り出す) 質問1 fStr := OpenPictureDialog1.FileName; Image4.Picture.LoadFromFile(fStr); で張り付けた画像をボタンで90度回転させたいのですが、どうしたらいいのですか? 質問2 StringGridのセルの幅を個別に決めたいのですが、どう書けばいいのですか? 初心者的質問ですが、よろしくお願いします。
>>801 >質問1
メソッド一発で回転させるなんてのは無理なはず
自分でゴリゴリソース書いてください
>質問2
こんな感じ?
StringGrid1.ColWidths[0] := 10;
StringGrid1.ColWidths[1] := 20;
StringGrid1.ColWidths[2] := 30;
>802 回答ありがとうございました。これでリスト関係は「見た目」だけ完成しました。 (まだ変換式や計算式を書いてない) 今、画像から拾ったXYの点をプレビュー表示させる下準備を書いてました。 がんばるべ。完成したら公開します。
804 :
デフォルトの名無しさん :2005/09/05(月) 17:57:39
>>801 >張り付けた画像をボタンで90度回転させたいのですが
90度の回転は x,y をちょっと考えて入れ替えるだけ。簡単
806 :
801 :2005/09/05(月) 19:27:57
>804 回答ありがとうございます。 うはーーー・・・・結構な行数のコードになりそうですね。 でも確かに私が求めていたコードのようです。自由角度で変換できるのは魅力です。 学生の為に頑張ってプログラムしてみます。
中村拓男って人が高品質な画像処理用ライブラリを公開している 自前での処理に挫折したら探してみ
TBitmap32にRotateとかなかったっけ
>>801 > 自由角度で変換できるのは魅力です。
自由角度の回転と90度の回転はロジックが全く別だよ。後者はロスレスだし。
ミラー、フリップ、90度単位の回転はロスレスでできる。 89度と90度は難しさの程度が段違い。
>>801 >張り付けた画像をボタンで90度回転させたいのですが、どうしたらいいのですか?
横に並んだピクセルを縦に並べるだけ。Pixels つかっても Scanline つかっても
>>805 で書いたとおり、並べ替える部分のコードはたった1行
> 並べ替える部分のコードはたった1行 正確に言うと、for文二行、ピクセルを移すコード1行、そのはかは幅と高さを入れ換えたビットマップ を用意するコードだけ。
TRichEditの背景に画像を表示したいのですが、どうしたら出来るのでしょうか?
>>801 張り付けた画像をボタンで90度回転させたいのですが、どうしたらいいのですか?
時計回り90度 Pixels版
uses
Jpeg;
procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.AutoSize := true; Image1.Picture.LoadFromFile('c:\test.jpg');
end;
つづき procedure TForm1.Button1Click(Sender: TObject); var src, dst: TBitmap; w, h, x, y: integer; begin w := Image1.Width; h := Image1.Height; src := TBitmap.Create; dst := TBitmap.Create; try src.PixelFormat := pf24bit; src.Width := Image1.Width; src.Height := Image1.Height; src.Canvas.Draw(0,0, Image1.Picture.Graphic); dst.Assign(src); dst.Width := h; dst.Height := w; for y := 0 to h-1 do for x := 0 to w-1 do dst.Canvas.Pixels[h-1-y,x] := src.Canvas.Pixels[x,y]; Image1.Picture.Bitmap.Assign(dst); finally src.Free; dst.Free; end; end;
ScanLine 版 Pixelsより2桁速い procedure TForm1.Button2Click(Sender: TObject); var src, dst: TBitmap; w, h, x, y: integer; ps, pd: PRGBTriple; begin w := Image1.Width; h := Image1.Height; src := TBitmap.Create; dst := TBitmap.Create; try src.PixelFormat := pf24bit; src.Width := Image1.Width; src.Height := Image1.Height; src.Canvas.Draw(0,0, Image1.Picture.Graphic); dst.Assign(src); dst.Width := h; dst.Height := w; for y := 0 to h-1 do begin ps := src.ScanLine[y]; for x := 0 to w-1 do begin pd := dst.ScanLine[x]; inc(pd,h-1-y); pd^ := ps^; inc(ps); end; end; Image1.Picture.Bitmap.Assign(dst); finally src.Free; dst.Free; end; end;
ScanLineて地味にはがゆいと思うのは漏れだけ?
今Delphi使えたら就職とかに役立つの?
膳膳
立つのは例外的だと思ったほうが
>>822 なるほど・・・
C++とかのほうが就職に役立つ?
就職に役立つのは学歴であってプログラミング経験ではない
マジレスすると、言語に差はほとんどない 重要なのは「プログラミングやってた」という話のネタが増えること 適当に嘘やでっち上げ絡めながら離せば、必ず役には立つだろう そして、DelphiはC++よりも初心者に向いてるからやっといて損はないだろう
すみません。質問させてください。 各行が"C121"とか"TR300"とかのような、 " (何文字かの)アルファベット+(何文字かの)数値"というようなパターンの文字列のアルファベットと数値の境に タブ文字を入れる関数を作っています。 境目を特定する方法までは実装できたのですが、その境目の位置にタブ文字を入れる方法がわかりません。 できればヒントなどをください。
forで一文字ずつ調べていって、アルファベットじゃない場所みつけたら そこにタブを入れれば良いんじゃね?
>>826 境目を特定できているのなら
s := 'TR300';
pos := 2; //境目の位置
s := Copy(s, 1, pos) + #9 + Copy(s, pos + 1, Length(s) - pos);
829 :
826 :2005/09/06(火) 23:43:56
>>827 それって、たとえば仮に文字列の変数をS、問題の位置をiとした場合、
S[i] := #9;
ってするんですよね? (今のところそれしか知らないので、ほかにあったら教えてください)
一応、それやってみて(すみません、最初に書いておくべきでした)アクセス範囲エラーがでたので、質問させてもらったんで・・・
830 :
826 :2005/09/06(火) 23:45:11
>>828 さん
すみません。827さんへのレスを書いていたら見逃してしまっておりました。
すぐに試してみます。
831 :
826 :2005/09/06(火) 23:48:51
>>828 さん
完璧です。もう変数名以外直す必要性ありませんでした。
本当ありがとうございました。
832 :
828 :2005/09/06(火) 23:55:20
すまない。今、思い出した。別に先の例でもいいけどもっと簡単に。 s := 'TR300'; pos := 2; //境目の位置 Insert(#9, s, pos + 1); まだ見ているといいんだが。
833 :
826 :2005/09/07(水) 00:19:39
>>828 さん
まだ見てますよ。その方法だと短くて済みますね。(それにシンプルだし)
最初、関数と同じようにやってしまって少しとまどいましたが、バッチリでした。
おかげでソフトが完成しそうです(といってもまだ試作品なんですが)。
ありがとうございました。
初心者スレにこんなレスするのもアレだけど そういう文字列処理は最初にバッファを大きくとって { SetLength } 先頭から順に1文字づつ処理しながらコピーして 最後にバッファを切り詰めるというのが言語問わず定型で、それに慣れた方がいいよ
835 :
デフォルトの名無しさん :2005/09/07(水) 07:22:45
お邪魔します。 Delphi5 Win98SE です。 C:\Program Files\'アプリ名'フォルダにコピーした ファイル'File.dat'を'File.cab'に変更する方法をお教え下さい。 コピー前に'File.dat'は'File.cab'から手作業で拡張子を変更しています。 ファイルのコピーはできましたが、 拡張子を変更する方法が分かりません。 宜しくお願いします
>>835 Copy('File.dat','File.cab',True);
837 :
デフォルトの名無しさん :2005/09/07(水) 07:54:50
WinXP Del6Personalでコンソールアプリを作ってるのですが 入力位置を表すカーソル(キャレット)を一時的に非表示にするにはどうすれば良いですか? 非表示にする方法(消去ではなく非表示であり、Writeによる入力は出来ないと困ります)と 再度表示する方法を教えてください。
838 :
デフォルトの名無しさん :2005/09/07(水) 08:09:24
Delphi製アプリはXP上だと不安定な動きになるよ
SetConsoleCursorInfo
Delphiって結局Win32 APIがないと何もできない
VB だって VC++ だってそうだけど。
846 :
837 :2005/09/07(水) 10:02:36
>>841 どうもありがとうございます。うまくいきました。
>>842 さらに的外れなレスを被せると、Kylixなめんなよと
>>847 あれPASCALじゃなくてC++でしょ?
Kylix2までは Object Pascalのみ Kylix3からは Object Pascal & C++
> Kylix3からは Object Pascal & C++ Kylix3からは Delphi言語 & C++
852 :
デフォルトの名無しさん :2005/09/07(水) 13:29:59
836 有難うございました
M$信者は Windowsで動いてるくせにM$の悪口いうな! いいたいのだよきっと
しかしまあ、何の言語は糞だの何だのってスレはなくならないなぁ。 趣味でやるなら好きなの選べばいいし、仕事なら仕事なりの都合ってものもある。 ただそれだけの話なのにね。
Del 信者は Windowsを使っててMSの悪口いう分裂病だな っていいたいのだよきっと
言語じゃなくて D2005 と D8 は糞だの何だのっていいたい
>>856 ほほー、俺は今も仕事ではD6だから、それ以降は知らんのだけれど
そんなに糞なんだ。
正直D6に慣れすぎました
俺なんて6年D5だけ・・・
おまえは俺か?
861 :
デフォルトの名無しさん :2005/09/07(水) 17:57:43
くだらない質問ですが教えてください var i: Integer; s: String; begin i := 128; s := IntToHex(i, 2) <-- s = '0080' この時、バイト配列bBuff[0]に00を、bBuff[1]に80を入れるには どうすればよいのでしょうか end;
くだらねー質問だな
文字列 s が必須であれば s := IntToHex(i,4); //IntToHex(i,2)だと '0080' にはならない bBuff[0] := StrToInt('$' + Copy(s, 1, 2)); bBuff[1] := StrToInt('$' + Copy(s, 3, 2)); 文字列 s を介さない方が簡単なんだが bBuff[0] := i shr 8; bBuff[1] := i and $FF;
PWord(@bBuff[0])^ := 128; でいいじゃん。とおもったけどバイトオーダーが逆になるな・・・
865 :
863 :2005/09/07(水) 18:19:56
>>864 なるほど。頭いいな。バイトオーダーは最初からひっくり返しておけばいいか。
PWORD(@bBuff[0])^ := Swap(128);
866 :
861 :2005/09/07(水) 18:20:57
回答ありがとうございます。
>>863 ちょうど今、私も上の方法思いつきました。
下の方は・・・意味不明ですがこっちの方がエレガントっぽいので調べてみます。
>>864 バイトオーダーとかまた謎の単語が出てきました。
こちらも調査してみます。
868 :
861 :2005/09/07(水) 18:24:04
興味深いサイト教えてくださってありがとうございます。 じっくり学んでみたいと思います。
これはいい誤爆ですね
871 :
826 :2005/09/07(水) 21:39:55
>>834 (遅レスすみません)
あーなるほど、たしかに。
この関数を組み込むソフトは、仕事場Win98マシン(MMX Pentium搭載機。開発マシンとは別)のExcel上の作業を支援するソフトで、
Excelとの同時使用を前提にしたものですから、少しでもリソース(これ重要)とかオーバーヘッド(これは無視してもいい?) とかを
切りつめないと話にならないので・・・(でなきゃ作業支援の意味がなくなってしまいますし)
仰るとおり、自分もその方法の方が確かに汎用的だと思います。
まぁこの場合は例外中の例外ということで・・・今後改良していく場合などには参考にさせてもらいます。
ありがとうございました。
872 :
デフォルトの名無しさん :2005/09/07(水) 21:55:03
Del7Pro の FontDialog コンポーネントについての質問なのですが、フォントの色が 黒、粟色など、16色しか選択できません。ColorBox のようにオプションでカスタムを 選択することもできません。16色以外を選択するようにはできないものなのでしょうか?
873 :
デフォルトの名無しさん :2005/09/07(水) 22:19:05
レコード型、たとえばTPoint型で var a, b: TPoint; begin a := Point(5, 3); b := a; というように、同じレコード型なので代入することができますが if a = b then のように、比較は無理なのでしょうか。
無理
if CompareMem(@a, @b, SizeOf(a)) then でどうよ。 TPointだったら if Int64(a) = Int64(b) then こういうのもあるにはあるが・・・
パディングがあると・・・
文字列やオブジェクトがぶら下がってたら参照比較しても無意味だしな
用途が限定的になって使い分けるくらいなら素直に比較関数書いたほうがよいね。
クラスにしろってことだな
TPoint 程度なら関数で十分
Delphiのパディングて0保証は無いの?
packed
883 :
デフォルトの名無しさん :2005/09/07(水) 23:04:50
VB.NETならPoint.Equalsが使えるのにね。 DelphiってOOPLとして10年は遅れてますね。
VB.NET なら .NET がないと動作しない。だから誰も使わない。10年早すぎ
VB信者って馬鹿なんじゃないの?リアルでうまく行ってないから何かを否定してないと 気がすまないんだろうなwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww 自分が使いたい言語+開発環境使ってればいいじゃんwwwwwwwwwwwwwwwww いちいち他人に干渉してるとか相当暇なんだなwwwwwwwwwwwwwwwwwwwwwww さすが厨房言語wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
> wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww これもかなり恥ずかしい
>>886 の言う通りだが、
>>885 は正しい。
趣味なら好きに選べばよい。
仕事なら、作って納めて金もらってナンボだから、
信頼性とか安定性とか生産性とか実行環境とか、総合的に判断して
使用言語は決められるものだ。
単に「いつも使ってるから」でも十分に理由になる。
クライアントに納めて問題がないなら。
10年遅れていようが関係ねーんだ、んなもん。
現場で「できません」は通用しない。「やらなきゃいけない」のが仕事だ。
他の言語をけなして、自分の好きな言語の優越性にしがみついてるなら
プロとは言えない。
アマチュアなら、せいぜいほざいてろ。
いつのまにかプロの住むスレになってますね
プロでもアマチュアでもなんでもいいけどさ、 言語のけなしあいはつまんないからやめとけ。
やっぱプロの書くコードはきれいなん?
他人が保守できないようになるべく汚く書くのが定石。 あえてVB.NETを使わずにドマイナーなDelphiを使うのもその為。
>>890 個人差あるんじゃないのかなあ・・・
僕はプロ目指してC++とかDelphi勉強してるが、なるべくきれいに書くようにしてる。
デバッグのときに見やすいし
ピンキリじゃないかな? でも仕事で何度もプログラム書いてくると、 当然、バグとか発生した場合にデバッグするわけだけど、 汚いコードだとデバッグする本人が苦労したりするわけで。 すると自然になるべくきれいなコードを書くようになるわけさ。 そうしないと自分が大変だからね。 経験がコードをきれいにするって感じかな。 全ての人にあてはまるわけじゃないと思うけどね。
綺麗なソースにインセンティブ出すぐらいはしてもいいと思うけどね
>>873 構造体の場合は代入はメモリ内容を複製すればいいけど
「一致」の概念は人、状況によって違いがありえるから難しい。
もちろんTPointであれば2つのメンバが同じ値という定義で全員納得するだろうけどね。
というわけで TPointについては PointsEqual という関数が用意されている。
>他人が保守できないようになるべく汚く書くのが定石。 うーむ、一理ある。 とか思ってしまった。
趣味ならきれいに書くこと自体が趣味なんで、汚いと思ったら時間効率関係ないから プロよりきれいなコードを書く趣味グラマは結構沢山いるに違いない・・・と思うけど
( ´∀`)σ),゚Д゚彡プニュ
902 :
デフォルトの名無しさん :2005/09/08(木) 14:50:07
SaveDialogで、拡張子がついているのに更に拡張子が付けられてしまう場合は、どうしたら良いんでしょうか。 DefaultExtは、すでに拡張子がついている場合はつけないはずですよね? DefaultExtで[ini]と書いているんですが、ファイル名.iniで保存すると ファイル名.ini.iniになってしまいます。 DefaultExtに何も書かなくても拡張子が勝手につくんですが、Filterにそういう機能があるんでしょうか・・?
ありえない
904 :
デフォルトの名無しさん :2005/09/08(木) 16:06:47
お邪魔します。 Delphi5です。 Windows各OS(98以降)の、システムフォルダのパスを取得する方法をお教え下さい。
>>904 SHGetSpecialFolderLocation
SHGetPathFromIDList
>>905 へえ(もしかしたら初耳じゃないかも知れないけど記憶が曖昧)
自分は普通にGetSystemDirectory (API)を使ってるな〜
>>904 JCL(JEDI)はどうよ。
GetPersonalFolderみたいな感じで色々あるが。
908 :
905 :2005/09/08(木) 17:14:10
>>906 失礼、ただのシステムフォルダだったのね。勘違いしてた。
つうかWin32APIは専用スレで聞けと
>>903 すんません。事故解決。自分で拡張子つけるコ−ドを昔書いたんだった・・。馬鹿すぎ。
911 :
906 :2005/09/08(木) 17:43:42
>>908 いえいえ
SHの方は汎用性があるので知っておいて損はないですよね
皆さん、有難うございます。 906さんの方法で解決しました。 板違いと分からず質問してました。 他の方のアドバイスの方法も調べてみます。
板違いじゃないよ。スレ違いでもないし。
915 :
デフォルトの名無しさん :2005/09/09(金) 00:42:53
次のようなプログラムを作りたいと思い、WebでIndyが楽だという噂を聞いたけど解りません。 1.httpsのページへIDとパスワードを入力しログインする。 2.ログイン後のページにある入力項目を送信する。 ログインさえも出来ません・・・ よろしくお願いします
たぶんまだ作ってなくてサンプルよこせみたいな
918 :
デフォルトの名無しさん :2005/09/09(金) 06:46:54
MessegeBox('aaaa', 'bbb', MB_OK); この aaaa の部分に改行を入れて複数行に表示したいのですが どうすればいいのでしょうか?
Application.MessageBox('aaaa'#13#10'cccc', 'bbb', MB_OK);
920 :
918 :2005/09/09(金) 09:20:44
>>916 コードっていうより、libeay32.dllとssleay32.dllをダウンロードしてあるか
それが問題。
IndyでSSLって確かだるかった気がする Interceptとか使うんじゃなかったっけ
923 :
デフォルトの名無しさん :2005/09/09(金) 13:30:12
ごめん I/O Handler だった
Indy I/O Handlers に明らかにそれっぽいのあるから
それを IdHTTP とかの I/O Handler に指定してがんばって
後Delphiに関係なくOpenSSL用のdllは必要
>>921 参照
MainMenuとPopupMenuをオーナードローでいじろうとしたんですけど あれって背景というか枠というか、その辺はいじれないんでしょうか。 ハイライト+シャドウじゃなくて、平面のメニューにしたかったんですが。
それはオーナードローよりWindowStyleの仕事じゃないか?
928 :
915 :2005/09/09(金) 21:44:42
書いたコードというか、IndyのWEBのKnowlegeBaseから飛んだ所にあったソース
を参考にしましたが・・・
サンプル欲しいとは言わないけど、ヒントだけでも教えて欲しいと思ってのかきこです。
htmlのソースは次のとおり
<INPUT type="text" name="loginid" maxlength="8" size="12" onFocus="fb_chk(1)" onBlur="focus_passwd();fb_chk(0)" style="ime-mode:disabled" AUTOCOMPLETE="on">
<INPUT type="PASSWORD" name="passwd" maxlength="10" size="15" value="" onFocus="fb_chk(1);LoginCheck(document.F1.set.value)" onBlur="fb_chk(0)">
試したコードは以下のものです。
procedure TForm1.IdSSLIOHandlerSocket1GetPassword(var Password: String);
begin
Password := 'aaaa';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Clear;
Memo1.Lines.Text := IdHTTP1.Get('
https://www.******** ');
end;
function TForm1.IdSSLIOHandlerSocket1VerifyPeer(Certificate: TIdX509): Boolean;
begin
if Pos('INTELICOM', UpperCase(Certificate.Subject.OneLine)) > 0 then
Result := True
Else
Result := False;
end;
Indyスレ向きでしょうかね
>>928 一番重要なフォームタグを省かないで欲しい。話はそれからだ。
932 :
915 :2005/09/10(土) 21:17:37
htmlをパースしたら解りますた
>>916 おまえみたいなヤシが居るからDelphiはマイナーなままなんだよ!ほーあw
933 :
915 :2005/09/10(土) 21:19:32
>>917 おまえ解るのか?
って喪前みたいな超初心者じゃ解らんだろうなw
プゲラ
∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (v ゚,_ゝ゚)v < てめーはもう用無しだ / \ \________ / /\ / ̄\ _| ̄ ̄ \ / ヽ \_ ∧_∧ \ ̄ ̄ ̄ ̄ ̄ ̄ \__)、 /(´Д` )ヽ → ||\ \ mn´(_(_nm .||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄  ̄ ̄ ̄  ̄ ̄ .|| || ̄ ̄ ̄ ̄ ̄ ̄ ̄|| 教えてくださいお願いします .|| .|| Before After こうですか?わかりません><
煽り方も初心者ぽくて初々しい
>ほーあw かわいい・・ハァハァ
915は包茎
終了時に自実行ファイルを削除する のは可能ですか 可能なら方法もちらっと教えてください
おーまさにそれだありがとう。
すみません質問です。 Indy9のIdTCPClientというコンポーネントを使ってサーバーへの接続を試みているのですが IdTCPConnectionの878行目で必ずデバッカ例外が発生して EIdNotConnectedの例外を生成しましたとでて落ちてしまいます。 ソースを見てみたのですがどういう作業をしている時に何が悪くて落ちているのかもわからないです 超初心者でごめんなさい。解決方法等あれば教えて下さい。お願いします。 Delphi6Personal使用です。
なんで超初心者用とスレタイにあるのにわざわざ初心者でごめんなさいなんて書くんだろう。
答える気がないなら黙ってろよ
>>941 Indyスレ行ってみれば?
そろそろ次スレの季節ですがテンプレは特に変更しなくてよろしいでしょうか. 過去スレはh抜きでも特に不評はなかったのでこれでいこうと思いますが.
BCBを使うには Delphiの知識/常識が時に必要になる事があるけど Delphiを使う分にはBCBの知識は必要ないからでは
2006で統合されるから入れてもいい希ガス
TButtonをクリックした時に、 ・変数Aを外部プログラムへ引数として渡して処理 →外部プログラムの終了を確認してShowMessage というのはどうやればいいんでしょうか? LAMEのフロントエンドを作りたいんですが… (既存のものは、曲間の無音無しを指定できないので)
>>950 どちらもAPIを使用すればオケ。
CreateProcessで起動、WaitForSingleObjectで終了待ち。
上記でググればサンプルはいくらでも見つかると思う。
952 :
デフォルトの名無しさん :2005/09/12(月) 20:16:08
VB でいう Frame (Form に枠を描画する)を Delphi 2005 で使いたいのですが これに相当するものはどれにあたるのでしょうか?
953 :
941 :2005/09/12(月) 20:20:06
ありがとうIndyスレ行ってみます
>>950 即レスありがとうございます。CreateProcess+WaitForSingleObjectで何とかなりそうです。
ついでと言っては何ですが、もうひとつお願いします。
外部DLL(Lame_enc.DLLやogg_enc.DLL)の利用はどうすれば良いのでしょうか?
externalでヘルプ検索しる
>>956 ハケーソww
ありがとうございました。
958 :
906 :2005/09/12(月) 21:35:52
>>952 VBのFrame同様の左肩に文字列を入れたいのならGroupBox
それ以外だとPanel、Shape、Bevelあたり
GroupBoxはRadioButtonを載せる場合が主で
コンテナとして一番良く使われるのはPanel
ShapeとBevelは見た目だけの枠
おお,>952へのレスを考えているうちに先を越されてしまった(w.
もっとも私のは想像だったのでVB利用者のレスが来て良かったです.
>>952 ちなみにBevelコンポはStyleプロパティをbsFrameにすると
VBのFrameみたいな(GroupBoxコンポと同じ)枠になります.
960 :
952 :2005/09/12(月) 22:43:23
新スレもたったし、埋めネタ提供って事?
>>961 >380 名前:デフォルトの名無しさん 投稿日:2005/09/06(火) 05:37:51
>MMXも使えるけど
>Delphi自体が遅いから速度的な解決はできないけどな
>Delphiはパッパッと作るためのものだから(言語的, 開発環境的に)
>深く何かを作ろうと思うとできない
これは正確ではない。
Delphiのコンパイラ出力は最適化を最大にしたC++と比べると多少
落ちる面がある。 が、その差が何割もあるわけではない。
最適化を使わないC++出力よりも良いコードを標準の状態で出す。
>Delphiはパッパッと作るためのものだから(言語的, 開発環境的に)
>深く何かを作ろうと思うとできない
これは全くあたらない。 同じ時間コーディングに時間をかけるなら
俺にはDelphiの方が効率が良いデータ構造・アルゴリズムで書ける。
つまり深く作るならDelphiの方が勝る
一般的にはデータ構造・アルゴリズムの改善の方が速度の改善につながる。
現時点のDelphiは表現可能なデータ構造はC/C++に勝るとも劣らない。
いや、列挙型、動的配列型、標準のvariant、そしてabsolute等、
C以上に低レベルの表現も可能だ。
言語構造にない表現 をしなければならない場合(たとえばコルーチン等)も、
インラインアセンブラ・アセンブラ関数を使える。
Cのコードは簡単にDelphiに変換出来るが
DelphiのコードはCには簡単に変換出来ない。
C++の場合はテンプレートを使っていると他言語に移植する作業量が大きくなる。
>>962 お前Cやったことあるのか?
俺は両方使うけど、そいつがいってる通りパッパッと作るようだぞ
あと、Cより低レベルに扱える言語なんてアセンブリ以外にない
しかも、アルゴリズムも言語なんか関係ない
> 俺にはDelphiの方が効率が良いデータ構造・アルゴリズムで書ける。
> つまり深く作るならDelphiの方が勝る
そりゃ、お前がCできないだけだろ
> 一般的にはデータ構造・アルゴリズムの改善の方が速度の改善につながる。
うむ、でもC出かかれてきたDelphiがCの速度を越えれるわけが無い
非常に非効率
> 現時点のDelphiは表現可能なデータ構造はC/C++に勝るとも劣らない。
かなり劣る。 メモリをCの用に扱えるのか、ポインタ演算はできるのか。
> C以上に低レベルの表現も可能だ。
無理。 上でもいったけど、元がC出かかれている以上それ以下の扱いはできない
> Cのコードは簡単にDelphiに変換出来るが
> DelphiのコードはCには簡単に変換出来ない。
あたりまえ、Delphiには抽象的な扱いのものが多数ある、それをCに変換することはできない
また、CのコードもDelphiになんてできない
>>963 一生懸命書いたんだからちょっとは褒めてやれ
> これは全くあたらない。 同じ時間コーディングに時間をかけるなら
> 俺にはDelphiの方が効率が良いデータ構造・アルゴリズムで書ける。
> つまり深く作るならDelphiの方が勝る
C言語でそんなに抽象的なデータ構造を書ける君が、
君以外の人間のことを全く考えていない君が、
すごい
>>965 なんだ、ネタだったのか
真面にやっちゃったよ
967 :
962 :2005/09/13(火) 07:37:26
>>963 C/C++はよく使うよ。 組み込みの仕事が多いから特に。
組み込み先の環境のエミュレートコードをDelphiで書いてDLLで接続してデバッグ
後でobjにして一体のexeにして客に渡して動作チェックさせたりしてるよ。
アルゴリズムってのは、まずデータ構造ありきだよ。
その言語で、そのデータ構造が効率良く表現できないなら、その言語ではそのアルゴリズムはまともに使えない。
>でもC出かかれてきたDelphiがCの速度を越えれるわけが無い 非常に非効率
これは論理的な間違いだ。
>asmで書かれたcがasmを超えられないという事になる。
一見まともに見えるが、これだって間違いだ。
同じ時間かけてasmで書いたコードよりcのコードの方が高速な事が多い。
実際組み込みの世界でも遅延詰め込みのあるチップだと
asmレベルで必死に最適化するよりもはやc上で工夫したコードの方が速いんだよ。
>メモリをCの用に扱えるのか、ポインタ演算はできるのか。
出来る。absoluteを使えば Cより効率良く扱える。
>CのコードもDelphiになんてできない
なんで? 無理なコード書いてみて
>同じ時間かけてasmで書いたコードよりcのコードの方が高速な事が多い。 お前が書けないだけだろ プゲラ
>>967 じゃあ君は、カーネルをアセンブリで書くより
Delphiで書いたほうが早いっていってるの?
とりあえず、何もいわずにカーネルのコード読んで
どこがアセンブリで書かれてて、それはなぜCで書かれなかったのか
考えてみ
970 :
962 :2005/09/13(火) 07:42:42
>>968 書けるなら書いてみろよ。
たとえば SHの遅延スロットをアセンブラで埋めてみろ。
俺はCに負けた事は素直に認めるが、やったことない奴が
書けるというのは認められないな。
俺はお前の書いたアセンブラコードより早くなるCコードを書いてみせるよ。
971 :
962 :2005/09/13(火) 07:45:46
>>969 必要があって、CでもDelphiでも使っていいと言われたら
カーネルもDelphiで書くだろうよ。
タスク切り替えは単にスタックポインタの置き換えじゃないか。
ハードも叩けないDelphiでカーネルを書けるあなたは神ですか? スイッチなんて、Cで書いても遅いからアセンブラで書くのに Delphiなんかでかいたら、どうなるかな最新スペックのマシンでも 一気に68Kに逆戻りか?
こんなに必死な奴は久々に見たな よく社会で渡っていけるなと関心する
たぶん社会を渡れてないと思う
975 :
962 :2005/09/13(火) 07:54:51
>>972 ハードも叩けないというのは認識が正しくない
CというがCこそ言語仕様上はハードを叩けない。
Delphiは言語仕様上インラインアセンブラが組まれているので言語上で叩ける事になる。
カーネルのようなOSの助けが少ない場面で必要になるのはリンカーだ。
Cだと、Cの言語仕様にはないリンカで柔軟に再配置が出来る。
Delphiの場合、普段はリンカを意識する事は殆どない。
が、こいつさえ作り直せばいいわけだ。
スイッチ? switch/ caseの事? あるいは別の専門用語?
「Pascalで」でなく「Delphiで」といってるのがポイントだと思うよ。
978 :
962 :2005/09/13(火) 08:25:47
勘違いするといけないので SHにはSH特有の問題があるのでasmで書くよりCの方が早い事が多いのであって PCのようなCISCの場合は、asmで工夫すれば早く出来る場面も多い。 SH特有の問題というのは ・ バス幅より狭い命令ワード・この為に埋めるべきスロットが生じる ・ 貧弱な命令体系 asmで工夫して使えるような命令が無い (DSP命令は命令ワードが倍になる為、結局スロットが埋まって効率が上がらない)
スレ埋めるためならゴミレス連投していいという決まりはないんだが。
>>962 埋めたいんならネタじゃなく何か有意義な事書けよ
CとDelphiのい対比表 イタイ比表?
>>962 より反応してる奴のほうが痛いな
でも後半
>>962 が言ってる事が理解できない俺の頭も痛いかもしれん
勉強しよう・・・。
>>972 の言ってるスイッチは タスク・スレッドのスイッチの事だろう。
やるべき事は、
スレッドの場合レジスタの保存とスタックの切替、コルーチンとほぼ同じだ。
タスクの場合はさらに、仮想メモリとかの資源の切り替え。
スタックを切り替える時点で、どっちにしてもアセンブラを使わないと書けない。
次スレまだ立ってないじゃん
だよな。知らない間に立って知らない間に落ちたのかもしれないけど。
つまり962市ねと
990 :
906 :2005/09/13(火) 14:27:30
低レベルの操作はC>Delphiでいいじゃん そうじゃないとCの存在意義がなくなるでしょ? だってDB関連の開発では Delphi>>>>>>>>>>>>>>>>>>>>>>>>>C なんだから
VCってインラインアセンブラ無くなったけどDelphiは大丈夫?
992 :
906 :2005/09/13(火) 14:42:17
埋め
1000ゲトまであと5
4
3
2
1
1000ゲトーーー(・∀・)ーー!!
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。