くだすれDelphi(超初心者用)その26

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
このスレッドはBorland(ボーランド)のDelphi(デルファイ)について、
他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
そうでないと思われる方が優しくないコメントが返してきたり
質問者になりすましたレスをする場合もありますのでご了承下さい。
お礼はDelphiの布教と初心者の救済をお願いします。

<前スレ>
くだすれDelphi(超初心者用)その25
http://pc8.2ch.net/test/read.cgi/tech/1119008091/

<雑談・討論などはこちらへ>
ミ,,゚Д゚彡フサギコのフサフサDelphi談話室その23
http://pc8.2ch.net/test/read.cgi/tech/1116997081/
2デフォルトの名無しさん:2005/07/13(水) 19:16:08
31修正:2005/07/13(水) 19:17:03
このスレッドはBorland(ボーランド)のDelphi(デルファイ)について、
他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。

<前スレ>
くだすれDelphi(超初心者用)その25
http://pc8.2ch.net/test/read.cgi/tech/1119008091/

<雑談・討論などはこちらへ>
ミ,,゚Д゚彡フサギコのフサフサDelphi談話室その24
http://pc8.2ch.net/test/read.cgi/tech/1120195090/

<その他>
Borland Home Page
http://www.borland.co.jp/
DelWiki (無料版Delphiの入手方法など)
http://onigiri.s3.xrea.com:8080/delphi/
4デフォルトの名無しさん:2005/07/13(水) 19:18:44
過去スレのh入れるの面倒だったので、h抜きで1レスにまとめました
5デフォルトの名無しさん:2005/07/13(水) 20:17:15
6デフォルトの名無しさん:2005/07/13(水) 21:04:54
立派なカキコまだぁー、チンチン AA略
7デフォルトの名無しさん:2005/07/13(水) 21:13:15
>>1
乙です。

>>4
粘着君が「Del使いはスクリプトも使えないのか」と難癖をつける、に100モナー。
8デフォルトの名無しさん:2005/07/13(水) 21:13:53
>>4
Del使いはスクリプトも使えないのか
9デフォルトの名無しさん:2005/07/13(水) 21:14:57
ってかテキストエディタの置換も使えないようだな
10デフォルトの名無しさん:2005/07/13(水) 21:24:19
質問です。
delphiでDirectMusicを扱う方法を教えてほしいのです。
ぐぐったりしたけど、さっぱりだったもので、、、
11デフォルトの名無しさん:2005/07/13(水) 22:03:00
DirectMusic ってなんだ?
説明がたりないぞ。
12デフォルトの名無しさん:2005/07/13(水) 22:16:40
13ななしへたぐらま ◆XcB18Bks.Y :2005/07/13(水) 23:25:43
>>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));
14ななしへたぐらま ◆XcB18Bks.Y :2005/07/13(水) 23:36:53
●前スレ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使用率の問題がある限りは焼け石に水です.
15デフォルトの名無しさん:2005/07/14(木) 00:45:40
>>13
> 下記のようなコードで実験した限りはどれもあまり変わりませんでした.

おつかれー
VCL は TWinControl の派生クラスの場合などと違って、GDI 関係は結構薄いラッパ
なんですよね。むしろペンやブラシやフォントなんかはリソースマネージャがある分だけ
リソース的には API より有利です。Canvas.TextOut のような場合を除けば、API を
つかうことでパフォーマンスを大幅にアップすることは難しいでしょう。

いや、 TextOut でも普通は数100回どまりでしょうから、互換性や抽象性を犠牲にして
まで API を使う意味はない、というのが妥当でしょうね。

DrawText は、書式矩形内でのテキスト配置ができるので、Canvas のメソッドにないので
よく使いますけど。
16デフォルトの名無しさん:2005/07/14(木) 00:59:22
今までDel 4でHelpDesignerのWinHelpを使用していたのですが、Del 2005に変える
とWinHelpを認識しなくなってしまいました。
Application.HelpCommand(HELP_FINDER, 0); で組み込んだヘルプボタンを押して
も応答がなく、Application.HelpContext(aaa); でaaa(番号)を呼び出すと
「状況感知型ヘルプがインストールされていません」と出ます。
使いづらい2005のヘルプを読むと、Application.HelpCommandの引数は2つとも
Integerと書いてあります???

検索してみてもよくわかりません。何が悪いんでしょうか。
17デフォルトの名無しさん:2005/07/14(木) 07:16:26
WinHelpViewerをusesしていないっていう話?
18デフォルトの名無しさん:2005/07/14(木) 17:21:01
相模原市か町田市でDelphi出来る人を雇いたいんですけど、実際居ますか?
19デフォルトの名無しさん:2005/07/14(木) 17:47:24
スレ違いだ。っていうか板違いだ
20デフォルトの名無しさん:2005/07/14(木) 20:17:10
Delphi6 Personal インストールしたばかりです。
ウィンドウののキャプチャする(スクリーンショットをとる)プログラムを作ろうと思って、「TClipboardというコンポーネントを使え」という情報まで辿り着いたのですが肝心のソレが見つかりません。
一体どこにあるのでしょうか。
21デフォルトの名無しさん:2005/07/14(木) 20:22:46
コンポーネントじゃなくてクラス。
ヘルプを見てキーワードに TClipborad と入れると使い方が書いてある。
22デフォルトの名無しさん:2005/07/14(木) 21:11:41
>>20
TBitmapとGetDCで取ったDCハンドル突っ込んだTCanvasで十分じゃないか?
23デフォルトの名無しさん:2005/07/14(木) 21:30:10
どうも PirntScreen から取り込むみたいだよ。それはそれでいいんでないかい
24デフォルトの名無しさん:2005/07/14(木) 23:17:25
Prtscrからとるから
Keybd_Eventで、PrintScreenのキー押させて、TClipbordからAssignすればkk
普通はgetdcを使うと思うけど。
ttp://www1.kcn.ne.jp/~nomiya/delphi/apply/1.html
てか自分でそれぐらい調べろよw これだからアンチがガタガタぬかすんだろ。
2516:2005/07/14(木) 23:49:10
>>17 どうもありがとうございました。全然知りませんでした。
WinHelpViewerでググってもよくわかりませんでしたが、YAHOOでは一番上に
出ました。
26デフォルトの名無しさん:2005/07/14(木) 23:51:28
かなり初心者です。
質問なんですが、Delphiで作ったアプリをスキンを使って
外観を変えることは出来ますか?
参考になるページや書籍などあれば教えてください。
ググってみましたがよく分かりませんでした。
よろしくお願いしますm(__)m
27デフォルトの名無しさん:2005/07/15(金) 02:34:19
>>18
相模原市民ですが、何か?
28デフォルトの名無しさん:2005/07/15(金) 04:35:27
プログラム(ソース)に長文のテキストを含めるには、
Delphi の場合どうしたら良いのでしょうか?
29デフォルトの名無しさん:2005/07/15(金) 05:00:09
オブジェクトのプレインテキストへの永続化ってどうやるの?
30デフォルトの名無しさん:2005/07/15(金) 06:21:38
>>28
1. リソースファイル
2. そういうコンポでも作る
3. String でがんばる

>>29
よく意味がわからんが、
published な TStrings 型プロパティ
っつーことけ?
3130:2005/07/15(金) 06:24:39
ん?ちょっと待て、ソースに含める?
ソースコードに含めるなら String しかない。
3228:2005/07/15(金) 07:15:46
>>30
あいや、プログラムに込めれれば良いので、リソースファイルで良いと思う。
……やり方全然分からないけど、がんばってみます。
33デフォルトの名無しさん:2005/07/15(金) 09:19:38
*.rc のファイルを作成する。
プロジェクトメニューのプロジェクトを追加で、先ほどの*.rcをプロジェクトに追加する。
エディターに新しくタブが出来るので、そこで「MYTEXT TEXT "*.txt"」のように書き込む。
したら、普通にコンパイルするだけ。 *.rcを追加した時点でコンパイラ指令は自動で書き換えられるから。
後は、各自ResHackerとかでリソース確認すればいい。
あ、因みに呼び出し方は

procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.LoadFromStream( TResourceStream.Create(hInstance, 'MYTEXT', 'TEXT'));
end;

な。試してないけど。 分かりにくくてごめん><
34デフォルトの名無しさん:2005/07/15(金) 09:22:11
>>32
resourcestring
35デフォルトの名無しさん:2005/07/15(金) 09:23:55
>>18
まじっすか、レスサンクスです。
求人かけてみます。
36デフォルトの名無しさん:2005/07/15(金) 09:24:34
>>33
TResourceStream解放しろよ
そのコードの書き方だとお前、多分気付いてないメモリリークが沢山あるぞ
3718(35):2005/07/15(金) 09:25:15
>>27

アンカー間違えました、すみません・・。
今は仕事間に合ってます・・よね。
38デフォルトの名無しさん:2005/07/15(金) 09:25:20
この書き方だと、手続きや関数抜けた時に自動で開放されるって聞いたんだけどw
3933:2005/07/15(金) 09:30:03
あぁごめん。プログラム終了時に開放される訳ね。
でもまぁアルゴリズムさえ分かっていただければそれでいいんで。
40デフォルトの名無しさん:2005/07/15(金) 09:56:28
bmpやjpgみたいなバイナリファイルを
読み書きしたいのですがどうすればいいのでしょうか
テキストファイルみたいにAssignFile〜Reset(Rewrite)〜Writeln(Readln)
という感じでOKですか?
41デフォルトの名無しさん:2005/07/15(金) 09:56:30
アルゴリズム以前にちゃんと TResourceStream のインスタンスを開放しろよ
42デフォルトの名無しさん:2005/07/15(金) 09:57:26
>>40

TMemoryStream の使い方を覚える
43デフォルトの名無しさん:2005/07/15(金) 10:02:03
>>42
TMemoryStreamのインスタンス作って
読み込みはLoadFromFile書き込みはSaveToFileという感じですか?
44デフォルトの名無しさん:2005/07/15(金) 10:07:24
ファイルの自体のSave、Load はそのとおり。

ファイルの内容の読み書きは、Write と Read とかのメソッドを使う
45デフォルトの名無しさん:2005/07/15(金) 10:26:06
>>41はしつこい奴だなw 書き方だけ書いたんだからそれでいいじゃん。一回言えば分かるんだよ。
日ごろのストレスを他人にぶつけてどうするんだw
46デフォルトの名無しさん:2005/07/15(金) 10:32:43
ある種の精神病を患うとそういう細かいことを適当に省くことができなくなるらしい。
47デフォルトの名無しさん:2005/07/15(金) 10:34:21
悪しき例は無いより悪いな
48デフォルトの名無しさん:2005/07/15(金) 10:36:47
メモリリークを「細かいことを適当に省く」とかいって放置するようなヤツは
プログラマやめれ
49デフォルトの名無しさん:2005/07/15(金) 10:40:36
1 社会的相互作用の重大な欠陥
  a 友達と相互に関わる能力に欠ける

2 没入的で狭い興味・関心
  a ほかの活動を受けつけない
  b 固執を繰り返す

4 言葉と言語表現の問題
  e 理解の悪さ:表面的/暗示的意味の間違った解釈を含む
50デフォルトの名無しさん:2005/07/15(金) 10:44:31
特に2は45にあてはまりそうだな
5136:2005/07/15(金) 11:06:52
>>45
一応言っておくが、41はオレじゃない
52デフォルトの名無しさん:2005/07/15(金) 12:41:46
以下の書き方でFreeっていりますよね?
with TStringList.Create do
begin
作業
 Free;//これいるよね?でも、どこかでwith抜け出したときに開放されるというのを見た記憶が・・・
end;
53デフォルトの名無しさん:2005/07/15(金) 12:49:50
いりますね。
インタフェースを含むクラス以外では自動でガベージコレクトされることはないです。

TStreamAdapter なんかは >>33 のような形で使っても問題ないです。
54デフォルトの名無しさん:2005/07/15(金) 12:57:29
ありがとう
SQL見たいに別名つけれれるようにならないかなぁ〜
コードの可読性あがると思うんだけど…
with TStringList.Create A, TObjectList.Create B do
begin
作業
 A.Free;
 B.Free;
end;
55デフォルトの名無しさん:2005/07/15(金) 13:02:21
ふつう

A := TStringList.Create;
B := TObjectList.Create;

のようにして使う。その例だと with 使うのはバグの温床
56デフォルトの名無しさん:2005/07/15(金) 13:10:11
>>55
そうだね。
コード書くときはそうしてるよ。
ただパッとあまり保守を考えなくていいテストツールなんか書くときは
設定したいプロパティ多いとwithは使うんだよね。

まぁあったらいいかな、といったレベルのお話ということで
57デフォルトの名無しさん:2005/07/15(金) 14:12:12
変数やエリアスの宣言楽にやりたいならC#逝っとけ
58デフォルトの名無しさん:2005/07/15(金) 14:33:12
with ないけどね
59デフォルトの名無しさん:2005/07/15(金) 17:11:41
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.LoadFromStream( TResourceStream.Create(hInstance, 'MYTEXT', 'TEXT'));
end;

とりあえずこの例で自動解放されるってマジ?
60ななしへたぐらま ◆XcB18Bks.Y :2005/07/15(金) 17:13:26
>>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で拾いたいのですが何か良い方法はありますでしょうか?

宜しくお願いします。
62デフォルトの名無しさん:2005/07/15(金) 17:45:26
>>59
どこ四ドル? リークしまくりだろ
63デフォルトの名無しさん:2005/07/15(金) 17:50:00
>>61
AAAがNullっていうのは空文字( '' )のこと?
Queryがnilでもっていう意味かな?

前者として回答
Queryが何のインスタンスか分からないけど、
FieleByNameってヘルプで調べたら'AAA'が見つからない場合は例外生成とある。
例外を出したくない場合はFindを使えってあるから、

if (Query.Find('AAA') = nil) or (Query.Find('AAA').AsString = '') then


DB関係いじったことないし、質問もよく分からんので激しくはずしてる悪寒
64デフォルトの名無しさん:2005/07/15(金) 17:55:58
Length() つかえないの?
65デフォルトの名無しさん:2005/07/15(金) 18:10:45
>>62

>>38 これ
リークするならいいんだ
これでリークしなかったら俺の常識が根底から覆る
66デフォルトの名無しさん:2005/07/15(金) 18:46:26
ガベージコレクタがある言語だと普通の書き方なんだよな。あれ。
67ななしへたぐらま ◆XcB18Bks.Y :2005/07/15(金) 21:03:43
>>61
『値がない』かどうかは多分 FieldByName('AAA').IsNull で調べられると思います.

確実なのは実際にテーブルを作ってみることです.
プロ版以上ならDataBaseDesktopとかで作れます.
6826:2005/07/15(金) 22:01:40
>ななしへたぐらま さん 
有り難うございます。
早速参考にして、調べてみたいと思います。
69ミ,,゚Д゚ミノ ◆A6VzDeLphI :2005/07/16(土) 00:48:55
SUISkin - Easiest to use VCL Skin component for Delphi & C++Builder
http://www.sunisoft.com/suiskin/
ThemeEngine Home
http://www.ksdev.com/themeengine/index.html

>>26
>>60
70デフォルトの名無しさん:2005/07/16(土) 19:02:58
関数の引数にconst付けると呼び出しコストが増えたりするんですか?
71デフォルトの名無しさん:2005/07/16(土) 19:59:08
むしろ減る。長い文字列なんかは const なしの場合はコピーのコストがかかる
72デフォルトの名無しさん:2005/07/16(土) 21:56:32
Delphiで昔のN88BASICのランダムファイルを読み書きするにはどうしたらよいですか?
73デフォルトの名無しさん:2005/07/16(土) 23:28:55
>>71
そうなんですか、ありがとうございます
74デフォルトの名無しさん:2005/07/16(土) 23:30:06
>>71
長い文字列でも変わらんだろ。
呼び出しの時点でコピーなんてされない。
75デフォルトの名無しさん:2005/07/16(土) 23:30:27
DirectX9のユニットってありますか?
76デフォルトの名無しさん:2005/07/17(日) 00:06:38
clootie
7726:2005/07/17(日) 00:28:58
ミ,,゚Д゚ミノ さん
有り難うございます。
スキンを使う場合こういったものを使うのが、
結構一般的だったりするのでしょうか?
それと、ご紹介頂いたものは結構簡単に使えるものですか?
(個人使用目的なので金額的にもチョット...)
78デフォルトの名無しさん:2005/07/17(日) 04:37:45
なんかフリーのなかったっけ。微妙にへぼい奴。
ユーザーにスキン切り替えとかさせたいならこの手の使った方がいいけど、
単に見た目を派手にしたいだけならそれこそフォームにイメージ表示でもいい気がするよ。
後、XPユーザー限定でよければ.manifestなんてのもあった気がする。
79デフォルトの名無しさん:2005/07/17(日) 09:59:54
FastMM入れるとメモリリークしてるかどうかがわかるよ
80デフォルトの名無しさん:2005/07/17(日) 10:56:51
あっそ。
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についてもよくわかりません...
82デフォルトの名無しさん:2005/07/17(日) 17:21:22
>>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
↑なんとかできました。
ありがとうございました。
85デフォルトの名無しさん:2005/07/17(日) 21:38:01
スナップショットを画像ファイルで保存する
アプリケーションを作成しているのですが

メタファイル形式でスナップショットを保存する場合
どうすればよいですか?

現状はBMPでBitbltして、ビットマップ、または
JPEGで保存できるようにしています。

メタファイルの対応したいのですが
1.BitBltしたビットマップをメタファイルの変換する
2.BitBlt自体をメタファイルで行う
の二択だと思うのですが
どちらもやり方がわかりません。(死
86デフォルトの名無しさん:2005/07/17(日) 22:11:21
>>85
池沼ですか?メタファイルにしたところで描画に時間掛かるっつーか
SSとかだったら余程単純な画面じゃないと無理だから。
87デフォルトの名無しさん:2005/07/17(日) 22:49:41
>>85
メタファイルキャンバス作ってそこにBitBltしてやれば、形だけはメタファイルになる。
だが、メタファイルとはどういうものか調べて考え直すことをお薦めする。
88デフォルトの名無しさん:2005/07/18(月) 03:03:47
はじめまして

本当にくだらない質問かもしれませんがHELPを見てもわからずググッてもそれらしきものが
見当たらなかったので書き込みました。

クリップボードに文字列を出力したいのですが、固定文字+変数の内容のやり方がわかりません

例) ’本日は’+A 
Aが’晴天’、’曇天’、’雨天’ のような感じです。

P.S. これから勉強して行こうと思っていますので初心者向けのサイト等もありましたらご紹介お願いします
89デフォルトの名無しさん:2005/07/18(月) 03:07:45
>>88

uses
Clipbrd;

begin
Clipboard.AsText := '本日は' + A;
end;
90デフォルトの名無しさん:2005/07/18(月) 03:40:21
>>88
Delphiやめたほうがいいと思うよ
91デフォルトの名無しさん:2005/07/18(月) 03:56:21
ハゲドゥー
92デフォルトの名無しさん:2005/07/18(月) 04:25:12
これからはじめようと思う初心者なのですが、DELPHIやめといたほうがいい理由って何でしょうか。
93デフォルトの名無しさん:2005/07/18(月) 04:32:16
>>92
スレ違いだから、他でやってくれ。
94デフォルトの名無しさん:2005/07/18(月) 09:45:37
>>88
固定文字や定数はconstで宣言しておく

const
 A = 'Hoge';
begin
 Clipborad,AsText:= '本日は' + A; // Hoge
end;

お勧めのサイトはDelphi Acid FloorとSeventh Delphiかな
オレもお世話になった
95デフォルトの名無しさん:2005/07/18(月) 10:59:54
>>92
マイクロソフト製でないから
9688:2005/07/18(月) 12:46:45
>>89,94
ありがとうございました。うまくいきました

また、ご紹介いただいたサイトも初心者にはわかりやすかったです
97デフォルトの名無しさん:2005/07/18(月) 14:45:28
キーボードのスペースや上下左右を押してしまうと、
その度buttonが反応してしまい困っています。
反応しないようにするにはどうしたらいいのでしょうか?
お願いします。
98デフォルトの名無しさん:2005/07/18(月) 14:47:42
Form.KeyPreview := True;して
OnKeyDownでKey := nil;
9997:2005/07/18(月) 15:15:39
ありがとうございました。
100デフォルトの名無しさん:2005/07/18(月) 17:00:57
下のようにやっても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;
101デフォルトの名無しさん:2005/07/18(月) 17:11:22
procedure TPaintBox.Paint;
begin
 Canvas.Font := Font;
 Canvas.Brush.Color := Color;
 (省略)
 if Assigned(FOnPaint) then FOnPaint(Self);
end;

こういうコードだから
102デフォルトの名無しさん:2005/07/18(月) 17:29:56
本当だ。FormCreateでPaintBox1.Color := clRed;としたら、赤で塗りつぶされいる。
たしかに、ヘルプ見たらキャンバスを初期化するとあるな。
助かったぜ。
103デフォルトの名無しさん:2005/07/18(月) 17:42:09
>>92
まともに検索することが出来ないから。
104デフォルトの名無しさん:2005/07/18(月) 17:48:36
C#と比べてexeが30倍以上巨大だから
105デフォルトの名無しさん:2005/07/18(月) 17:55:17
スコープとか定義の書式とかポインタの扱いとかがキモくてウザいから
106デフォルトの名無しさん:2005/07/18(月) 18:01:06
ま、ようするに馬鹿には無理ってことだ
107デフォルトの名無しさん:2005/07/18(月) 18:26:51
>>104
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
108デフォルトの名無しさん:2005/07/18(月) 18:37:03
>>107
>>104みたいなヘタレは基本構文でお粗末なガラクタ作ってるのがお似合いだよね^^
109デフォルトの名無しさん:2005/07/18(月) 19:03:57
Del厨はどうして好んで初心者スレを荒らしたがるんだろう・・・
110デフォルトの名無しさん:2005/07/18(月) 19:17:47
OCNが復活して変なのが増えたな
111デフォルトの名無しさん:2005/07/18(月) 21:18:52
まあ、これから夏休みだし。
11226:2005/07/18(月) 23:30:35
>78 さん
有り難うございます。
出来れば季節(気分?)でスキン切り替えられたとは思ってはいます。
(その都度コンパイルしてもいいのですが...)
>単に見た目を派手にしたいだけならそれこそフォームにイメージ表示でもいい気がするよ。
これは >60 ななしへたぐらま さん にご説明いただいた内容のことですよね?
それと、XPや98SEも使いますし、業務を含め7割以上が2000なのでXP限定というわけには...
アドバイス有り難うございました(^^
113デフォルトの名無しさん:2005/07/18(月) 23:39:39
業務でスキンはアフォ。スキンは厨房のお遊び
114デフォルトの名無しさん:2005/07/19(火) 01:11:12
わざわざパフォーマンス重視の2kでスキンとか意味ねーじゃん
115デフォルトの名無しさん:2005/07/19(火) 01:13:58
アホは黙ってていいよ。邪魔だし
116デフォルトの名無しさん:2005/07/19(火) 05:00:28
夏だよな。またDelphiの評判がた落ちだな。
117デフォルトの名無しさん:2005/07/19(火) 09:08:40
低層ユーザの発言で評価が落ちる訳ねーじゃん。
普通は自分で使ってみて判断するもんだろ。
118デフォルトの名無しさん:2005/07/19(火) 10:56:23
業務でスキン、うんぬんは言語に関係ないでしょ。
119ななしへたぐらま ◆XcB18Bks.Y :2005/07/19(火) 17:53:41
>>70-71,73-74
言語ガイドの説明を改めて読んでみたのですが,
どうも const をつける場合と何もつけない場合では内部処理に差はないようですね.
型などによって値渡しにしたり参照(ポインタ)渡しにしたりしています.

(興味のある方は,
 言語ガイド→プログラムの制御→パラメータと関数の結果→パラメータの受け渡し
 をご覧下さい.)

>>72
そのN88-BASICがMS-DOS版かそうでないかによって異なります.

MS-DOS版ならN88-BASICのランダムファイルの構造さえわかれば自在に読み書き可能です.
ただし構造がわからないのでこちらとしては具体的なコードは書きようがありません.
N88-BASICで読み書きに使っていたソフトウェアのソースコードが有れば機械的に移植することも可能です.

一方,「そうでない方」だとWindowsでは読めません.ディスクへの記録形式が異なるからです.
MS-DOS形式へのファイル変換,シリアル通信,又はインターネットなどににアップロードできれば転送できるのですが….
120ななしへたぐらま ◆XcB18Bks.Y :2005/07/19(火) 18:27:48
>>97-99
別解 つ [スピードボタン]


121デフォルトの名無しさん:2005/07/19(火) 19:19:08
> どうも const をつける場合と何もつけない場合では内部処理に差はないようですね.

D6 のヘルプより

構造化型パラメータや文字列型パラメータに対して const を指定すると,コンパイラは
コードを最適化できます。また,定数パラメータを使用することで,パラメータが別の
ルーチンに誤って参照渡しされるのを回避できます。

長い文字列だと CopyOnWrite であることを考えれば呼び出し時に差はなくても
変更予定がない場合は const 付けておく価値はありそう。

> 型などによって値渡しにしたり参照(ポインタ)渡しにしたりしています.

これは分からない。どういうこと? クラスのインスタンスは実装がポインタだから
const でも操作できる、っていうのは当たり前だとして、「値渡しにしたり」って
どこ読むと分かるの?
122デフォルトの名無しさん:2005/07/19(火) 21:55:38
さっさとJavaに移行しよーっと。
123デフォルトの名無しさん:2005/07/19(火) 22:03:39
>>122
チラシの裏にでも書けよ害児。スレ違いなんだよ氏ね。
124ななしへたぐらま ◆XcB18Bks.Y :2005/07/19(火) 22:34:36
>>121
ごめんなさい,>>120は私の間違いです.
値パラメータ(何もつけない)と定数パラメータ(const)の内部処理に差がないなんて事はありません.
ヘルプの[言語ガイド]→[手続きと関数]→[パラメータ]→[パラメータ]の項にあるとおりです.


    ※以下中級者以上?向け※


私が見たのはDelphi 5ヘルプの
[言語ガイド]→[プログラムの制御]→[パラメータと関数の結果]→[パラメータの受け渡し]の項で,ここに

> 値パラメータと定数パラメータ(const)は,そのパラメータの型とサイズに応じて値渡しまたは参照渡しになります。

という記述がありそのあとに値渡しになるか参照渡しになるかの条件が書いてあります.
つまり,値パラメータで参照渡ししたり,定数パラメータで値渡しする場合があるようです.

どちらを使うかの条件が両パラメータとも同じみたいなので
勘違いして「内部処理に差はない」と書いてしまったわけですが,
全く同じだと値パラメータで参照渡しする場合に
関数又は手続き内で値を書き換えると呼び出し元の値まで変わってしまいますから
呼び出しの前に値をコピーしてそのコピーの場所を渡しているはずです.
125デフォルトの名無しさん:2005/07/19(火) 23:06:45
>>124

ありがとう
126デフォルトの名無しさん:2005/07/20(水) 15:07:54
TDBGridを初めて使っている初心者ですが、DataSourceである
TQueryの各行に対して処理を行う時にDBGridの表示も同期して
動いてしまうのですが、これをやめさせることはできるでしょうか?
127デフォルトの名無しさん:2005/07/20(水) 15:41:21
Data Aware じゃない方がいいなら TStringGrid なんかに自力で表示する
128126:2005/07/20(水) 16:01:05
やっぱそれしかないですかね。
それか別のSQL文を実行して開きなおすくらいですかね。
どうもありがとございます。
129126:2005/07/20(水) 16:42:13
TQueryのTagに関連するコンポーネントのポインタを
格納しておきたいのですがどうやればいいんでしたっけ?
130126:2005/07/20(水) 16:45:26
あ、integer()でできた
131デフォルトの名無しさん:2005/07/20(水) 16:46:39
キャスト
132ななしへたぐらま ◆XcB18Bks.Y :2005/07/20(水) 17:24:06
>>124の訂正
× >>120
>>119
以上,失礼しました.
133質問:2005/07/20(水) 18:58:51
EAccessViolationクラスの例外が発生しましたとの警告が出たのですが、
これはどういうことが原因で起きた冷害なのかわかりません。
どなたか教えてください。
134デフォルトの名無しさん:2005/07/20(水) 19:16:47
冷害???クーラーの温度上げろよ!!
135デフォルトの名無しさん:2005/07/20(水) 21:05:38
>>133
解放した、もしくは確保していないメモリに書き込んだ。

GetMemで確保した範囲を超えて書き込んだとか。
136133:2005/07/20(水) 21:36:36
>>135
ありがとうございます
137デフォルトの名無しさん:2005/07/21(木) 18:06:04
qd3を使うのに、DirectXのSDKって必須?
138デフォルトの名無しさん:2005/07/21(木) 18:06:36
qd3を使うのに、DirectXのSDKって必須?
139137:2005/07/21(木) 18:12:24
書き忘れ&2重投稿スマソ。
DGcaradのイベントが空っぽなんです。
137>>が関係あるんでしょうか??
140デフォルトの名無しさん:2005/07/21(木) 19:19:50
俺のもイベントが空だが。
141137:2005/07/21(木) 21:07:45
ひょっとしてプロシージャの宣言って自分で書いても
別にいいんですか?
142デフォルトの名無しさん:2005/07/21(木) 23:31:40
手続きや関数の中で、一時的なオブジェクト変数tmpobjに既存の
インスタンスを代入した場合、手続きや関数が終わる前に、tmpobj := nil;
としておいた方がいいのかな?
143デフォルトの名無しさん:2005/07/21(木) 23:36:35
>142
不要
オブジェクト変数は単なるポインタ
144デフォルトの名無しさん:2005/07/21(木) 23:46:38
了解
145デフォルトの名無しさん:2005/07/21(木) 23:57:18
ええと、私、研究のためにDelphiを使い始めたのですがどうしてもわからないことがあります。
512*512の行列のデータがIntegerでダーッと書き込まれているファイルがありまして、
その行列同士の足し算、引き算がしたいのですがどうしても処理速度が上がらなく(2分ほど処理に時間がかかる)
困っています。
わたしの作ったプログラムの概要は、
@Readでファイルから行列の要素を一つ取り出す。
A引き算足し算の演算をする
B結果をWriteで書き込む
この@〜BをFor文で512*512回繰り返しています。
Blockreadなどを使えば良いのでしょうか?それにしても使い方がよくわかりませんし・・・。
わかる方、教えてください!

146デフォルトの名無しさん:2005/07/22(金) 00:04:38
ファイルアクセスがネック。
なぜメモリ上で演算しないのか不思議
147デフォルトの名無しさん:2005/07/22(金) 00:07:41
1.全データをファイルから読み込む
2.演算する
3.全データを一気に書き出す
148デフォルトの名無しさん:2005/07/22(金) 00:08:30
>>145
データ1個取って来るたびにファイル操作してたら時間が係るのもあたりきよ
普通はデータを一辺に読み込んでから処理するんじゃねーの?
149デフォルトの名無しさん:2005/07/22(金) 00:09:56
>>145
まさか「結果をWriteで書き込む」を512*512回行ってなんていないよな?
メモリに溜めこんだ結果を一回だけ書き込めば済む話だもんな
150デフォルトの名無しさん:2005/07/22(金) 00:12:10
レス密度の低いスレだな
151デフォルトの名無しさん:2005/07/22(金) 00:19:22
厨房にも分かる質問だとこんな感じになる(笑
152デフォルトの名無しさん:2005/07/22(金) 00:28:31
レス密度が高くとってもお勉強になるスレはどこですか?
153デフォルトの名無しさん:2005/07/22(金) 00:29:47
もてたい男性のスレ。
154デフォルトの名無しさん:2005/07/22(金) 00:44:56
>146
>ファイルアクセスがネック。
>なぜメモリ上で演算しないのか不思議

要は>147の方のようにすればよろしいのでしょうか?なんせ覚えたてなもので・・・。

>147
>1.全データをファイルから読み込む
>2.演算する
>3.全データを一気に書き出す

どんな命令をどのように使ったらよいのかわかりません・・・。

皆様、親切に答えてくれてどうもありがとうございます!!ですが、超超初心者の私には
具体的にどのような命令を用いたらよいのかわかりません。。。
もうちょっとよろしくお願いします!!!
155デフォルトの名無しさん:2005/07/22(金) 00:53:41
どうして良いのか分からないのは、
手順を踏まずにいきなり「上のこと」をやってるからじゃないの?
基本の理解をしないで先のことをやろうってのはアレかと。
結果的に「ソース書いて」まで行かないと解決しないんじゃない?
マジレスしちゃうけど。
156デフォルトの名無しさん:2005/07/22(金) 01:02:00
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;
157デフォルトの名無しさん:2005/07/22(金) 09:44:46
まあ、ファイル入出力は最初と最後だけで
後は読み込んだデータをいじくるまでみたいなソースを書いてみな
「メモリ上でやる」ってのは「ファイル入出力を使わない」ってことだ
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;

159デフォルトの名無しさん:2005/07/22(金) 11:26:30
Delphi版 BlowFishでエンコードすると、範囲チェックエラーが出て
サンプルさえも動作しないのだが... (Delphi7)
160デフォルトの名無しさん:2005/07/22(金) 12:39:02
>>158
その場合はByteBoolとかWordBoolとかLongBool使うんじゃなかったかな

>>159
コンパイルオプションで範囲チェック外してみては

161ななしへたぐらま ◆XcB18Bks.Y :2005/07/22(金) 17:02:12
>>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。
163デフォルトの名無しさん:2005/07/22(金) 18:16:39
>>159
あれ謎のコンポだよな
ちゃんと動くときと何故か範囲チェックで全く動かないときがある
再現性がわからないからソースあっても直せないし
164162:2005/07/22(金) 18:40:16
FLOAT配列データを取る時は、バイナリで良いのかな?
165162:2005/07/22(金) 19:03:51
TQueryでselect * fromした後の、配列カラムのデータの取り方教えてでつ。
166デフォルトの名無しさん:2005/07/22(金) 20:41:23
>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; としてしまう

やりたい事や使いたい変数の数と
記述しなければいけない事や変数の数がストレートに結びつかないのです。
167デフォルトの名無しさん:2005/07/22(金) 20:43:06
お前文才あるよ。もったいないからblog立ててそっちに書いとけ。
168デフォルトの名無しさん:2005/07/22(金) 20:54:40
>>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というプロパティから取得する必要がある

まとめ
基本が終わってるからまずは初心者サイトをしっかり嫁
169デフォルトの名無しさん:2005/07/22(金) 21:24:24
夏休みの自由研究にDelphiで何か作ろうと思ってるんですが、
全くの初心者がDelphiを理解していく上で参考になるサイトや本を教えて下さい。
現在はttp://www.w-frontier.com/delphi/index.htmlを見ながら勉強しています
170デフォルトの名無しさん:2005/07/22(金) 22:38:01
171ななしへたぐらま ◆XcB18Bks.Y :2005/07/22(金) 22:44:43
>>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
172デフォルトの名無しさん:2005/07/22(金) 22:54:46
読み込む前にまず書き込む必要があるわけだが
質問者が

> fs.Read(Matrix[0, 0], sizeof(integer) * 512 * 512);

この書式に合うようにセーブしてるとは限らない

173デフォルトの名無しさん:2005/07/22(金) 23:28:44
例えば、Form1にボタンをひとつ貼り付けるとします。
そして、そのボタンのクリック時の動作を書き込む祭に
普通だと、Form1が宣言されているユニット内に、
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage('テスト');
end;

という感じで書きますよね。
これを別ユニット内に書きたいのです。

このようなコトは可能なんでしょうか?
もしできるのならやり方を教えていただきたいです。宜しくお願いします。



174デフォルトの名無しさん:2005/07/22(金) 23:30:58
例えば、Form1にボタンをひとつ貼り付けるとします。
そして、そのボタンのクリック時の動作を書き込む祭に
普通だと、Form1が宣言されているユニット内に、
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage('テスト');
end;

という感じで書きますよね。
これを別ユニット内に書きたいのです。

このようなコトは可能なんでしょうか?
もしできるのならやり方を教えていただきたいです。宜しくお願いします。



175デフォルトの名無しさん:2005/07/22(金) 23:33:27
やり方も何も別ユニットを開いて書けばいいじゃないか。
176デフォルトの名無しさん:2005/07/22(金) 23:33:41
例えば、Form1にボタンをひとつ貼り付けるとします。
そして、そのボタンのクリック時の動作を書き込む祭に
普通だと、Form1が宣言されているユニット内に、
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage('テスト');
end;

という感じで書きますよね。
これを別ユニット内に書きたいのです。

このようなコトは可能なんでしょうか?
もしできるのならやり方を教えていただきたいです。宜しくお願いします。



177デフォルトの名無しさん:2005/07/22(金) 23:35:50
170のサイトを読んで来い
178デフォルトの名無しさん:2005/07/23(土) 00:20:17
イベントって、型があったメソッドポインタを代入できる単なるプロパティーだ、って
ことが IDE を使ってるだけの人には分かりづらいんだよな。
179デフォルトの名無しさん:2005/07/23(土) 00:20:49
>171
145ではないが   スッキリ!!!
180デフォルトの名無しさん:2005/07/23(土) 00:21:48
ヒント: TActionクラス
181デフォルトの名無しさん:2005/07/23(土) 00:26:53
ヒント:意味わかんない
182デフォルトの名無しさん:2005/07/23(土) 00:31:35
手書きでイベントハンドラを作る例

....
  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;

とか代入してやるだけ
183デフォルトの名無しさん:2005/07/23(土) 01:38:42
ひょっとして単に別ファイルに書きたいだけならIncludeって方法もある
184デフォルトの名無しさん:2005/07/23(土) 02:08:08
185デフォルトの名無しさん:2005/07/23(土) 02:18:27
これは面白いね
186174:2005/07/23(土) 11:20:59
皆様ありがとうございました。
>>182
盲点でした。自分でクラス作るときなんかにやったこともあったのですが、
そんな使い方、思いつきませんでした。
本当に初心者レベルの質問で申し訳ありません。

>>183
Includeですか、ネットで調べてみたり、ヘルプを見てみたりしたのですが
よく記述方法がわかりませんでした><

もし、Includeについて詳しく書かれているようなところをご存知でしたら
教えていただければ幸いです。
アドバイスやヒントでもよいのでお待ちしております
187デフォルトの名無しさん:2005/07/23(土) 13:06:40
Include は別ファイルの書かれた内容そのものをコンパイル時にコピーするだけ。
ユニットとは全く別の概念
188174:2005/07/23(土) 13:48:38
はい、それはわかったのですが。。。
今回の件にも使えそうですし、また他の機会でも参考になるかなと思ったための発言です。
189デフォルトの名無しさん:2005/07/23(土) 14:13:29
>>162 >>164 もヨロ!
190デフォルトの名無しさん:2005/07/23(土) 14:14:43
配列は取れません。
191デフォルトの名無しさん:2005/07/23(土) 15:14:08
>>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にしてくれ
192デフォルトの名無しさん:2005/07/23(土) 23:05:49
ちょちょっと、Delphi6Personalで
if Clipboard.HasFormat(CF_BITMAP) then...
とやっても、CF_BITMAPが未定義だと言われるんだけど。
もちろん、uses Clipbrdはしているのに、何でだよ
193デフォルトの名無しさん:2005/07/23(土) 23:35:05
>>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


                            ボーランド株式会社
195192:2005/07/24(日) 08:58:18
193の言う通りにしたらうまくいったよ。
ちなみにusesするユニットの順番にもちゃんと意味があったんだな。
知らんかったよ。
196デフォルトの名無しさん:2005/07/24(日) 09:26:07
バイナリファイルを指定した場所から指定したバイトだけ読み込むには何の命令or関数を使えばいいんですk
(ちなみにDelphi6無料版
197デフォルトの名無しさん:2005/07/24(日) 09:53:43
TFileStream.Seek
TFileStream.Read
198デフォルトの名無しさん:2005/07/24(日) 15:39:51
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;
199デフォルトの名無しさん:2005/07/24(日) 15:55:47
>>198
'('=8169 で 'i'=69 だからマッチしちゃうのか。
TRegExprはマルチバイト対応してる?。俺はVBScriptのほうを使ってる。
200デフォルトの名無しさん:2005/07/24(日) 16:14:33
TTreeView にチェックボックスをつけたいんですが、
どのようにしたらよいでしょうか?
よろしくお願いします。
201デフォルトの名無しさん:2005/07/24(日) 17:01:29
>>199
Unicodeを使うようにしたら希望どうりマッチするようになりました。
202デフォルトの名無しさん:2005/07/24(日) 17:35:19
>どうり
>どうり
>どうり
203デフォルトの名無しさん:2005/07/24(日) 17:39:36
>>200
TVS_CHECKBOXES
204デフォルトの名無しさん:2005/07/24(日) 18:24:06
>>203
ありがとうございます!できました!
でも Delphi からは設定できないんですかねー。
205デフォルトの名無しさん:2005/07/24(日) 18:33:32
>>204
TWinControl.CreateParams
206デフォルトの名無しさん:2005/07/24(日) 18:36:44
>>205
ありがとうございます。
SetWindowLong で設定しましたが、CreateParams をオーバーライドする方法もありますね。
TTreeView レベルに組み込まれていればいいのにー、と思ったもので。
207デフォルトの名無しさん:2005/07/24(日) 20:57:33
>>206
君が組み込んだ TTreeViewEx を公開すればいいじゃない。
208デフォルトの名無しさん:2005/07/25(月) 10:04:34
TTreeViewExって便利なの?
209デフォルトの名無しさん:2005/07/25(月) 11:51:27
マウスジェスチャーを実装したいのですが
どのようにプログラミングすればよいかイメージがわきません。
どなたか伝授していただけないでしょうか?
210デフォルトの名無しさん:2005/07/25(月) 12:24:10
OpenJaneのソースを見るとか
211209:2005/07/25(月) 13:43:47
TTKMouseGesturesというコンポーネントを見つけました。
ただなぜかXPだと登録できるのですが2000だとエラーになります。
WinShader.dcuが見つかりませんというエラーが出てしまいます。
212デフォルトの名無しさん:2005/07/25(月) 13:56:49
Irvineの作者がMouseGestures用のコンポ公開してた気がする
213デフォルトの名無しさん:2005/07/25(月) 14:06:47
TOpenPictureで画像を開く前に現在編集中の画像を保存するか尋ねるようにしたい。
TOpenPictureのBeforeExecuteイベントかTOpenPicture.DialogのOnShowイベントで、
メッセージダイアログを出して、キャンセルの時はDialogが開かない(あるいは
一瞬で閉じる)ようにしたいわけだが、Dialogを開かないようにしたり、
すぐに閉じる方法が分からない。どうしたらいいのさ?
214デフォルトの名無しさん:2005/07/25(月) 14:36:41
>>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使って行く上でとても不安になったよ・・・
216デフォルトの名無しさん:2005/07/25(月) 15:18:54
状況を今一つイメージ出来ん
すくなくともオレのDelphi6ではそういった類の問題はまったくない
217デフォルトの名無しさん:2005/07/25(月) 15:28:50
>起動時はpanel2.visibleをfalseにしておき、
こんなブビなコーディングするから状況がわかんないんじゃない?
218デフォルトの名無しさん:2005/07/25(月) 15:31:53
簡潔に言うとパネルのキャプションがボタンのキャプションになったとういうことですよ

でもフォームのoncreateイベントで改めて定義するようにしたらちゃんと出るようになった

あと、ちょっとフォームのサイズを変更しただけで
子オブジェクトどもの配置関係がぐちゅぐちょになるのはどうにかならんですか
とりあえず親フォームのmaxheight..minwidthに初期値を入れてリサイズ不可にしたけど
めんどくさー
219デフォルトの名無しさん:2005/07/25(月) 15:36:12
>子オブジェクトどもの配置関係がぐちゅぐちょになるのはどうにかならんですか
コンポーネント一個一個にAlignプロパティがある。
位置決めはコード書かなくても出来る筈。

>とりあえず親フォームのmaxheight..minwidthに初期値を入れてリサイズ不可にしたけど
Del中は絶対やらない手。
220デフォルトの名無しさん:2005/07/25(月) 15:37:41
>formひとつに同じサイズのpanel1とpanel2を重ねておいて、
コンポーネントの動的生成できるようになれよ。
221デフォルトの名無しさん:2005/07/25(月) 15:42:53
222デフォルトの名無しさん:2005/07/25(月) 15:43:46
最近こんなのばっか
223218:2005/07/25(月) 15:50:06
>220 だってめんどくせーんですもの

他答えてくれた人々どうもありがとう
自分のやりかたがアフォっぽいらしいってわかっただけでも進化しましたよ
224デフォルトの名無しさん:2005/07/25(月) 15:58:23
>>223
TFrameにべたべた貼ったのを用意しといて、
TFormに貼ったり剥がしたり(=Free)すると、
超便利だぞ。

それとかTPanelで位置決めしといたとこに派生コンポーネントを動的に張るとか。
225デフォルトの名無しさん:2005/07/25(月) 16:44:39
うーんなるほどありがとうございまう
コンポーネント新規作成用のクラスでもつくっとくかな
226デフォルトの名無しさん:2005/07/25(月) 18:28:12
何でTFrameにはonCreateイベントが無いんですか?
Createをオーバーライドすれば良いんですか?
227デフォルトの名無しさん:2005/07/25(月) 18:39:46
> Createをオーバーライドすれば良いんですか?
その通り
228ミ,,゚Д゚ミノ ◆A6VzDeLphI :2005/07/25(月) 23:10:19
TreeView with check boxes and radio buttons
http://delphi.about.com/od/vclusing/l/aa092104a.htm
229Delフサギコ ◆A6VzDeLphI :2005/07/25(月) 23:11:33
     ∧,,∧,,,,,, )      (´⌒(´
  ⊂ミ゚Д゚⊂,,,,,,,`つ≡≡(´⌒;;;≡≡≡
ズザーーーーーッ    (´⌒(´⌒;;

だれかこれ(TreeViewCheckRadio)をコンポーネント化する
方法を教えてけれ。
230デフォルトの名無しさん:2005/07/25(月) 23:28:49
あぁ、今度会った時に教えてやるよ
231Delフサギコ ◆A6VzDeLphI :2005/07/25(月) 23:37:39
 ∫,,,,,,,,,∧,,∧  ズコー
⊂,,,,,,,,,つ,,゚Д゚ミつ
232デフォルトの名無しさん:2005/07/26(火) 00:32:48
まずは記事を要約してくれ
233デフォルトの名無しさん:2005/07/26(火) 01:05:17
データベースの更新について教えてください。

固定長のテキストファイルをデータベースに取り込みたいのですが、
どういった方法が一般的なのでしょうか?
また、Delphi Pro を使ってますが、付属のデータベースの中では、
何がお勧めでしょうか?

全くの初心者なので低級な質問でごめんなさい・・・

234デフォルトの名無しさん:2005/07/26(火) 03:46:15
235デフォルトの名無しさん:2005/07/26(火) 11:47:29
delphiの無料で使える日本語版の最新バージョンはなんですか?

ベータ版ではないものを教えてください。

といいつつできればベータ版の最新バージョンもセットで教えていただけるとうれしいです。
236デフォルトの名無しさん:2005/07/26(火) 12:33:03
知ってて言ってるな貴様!(w
237デフォルトの名無しさん:2005/07/26(火) 13:22:33
delphi6をアンインストールするにはどうしたらいいのでしょうか?
コントロールパネルから削除していいのでしょうか?
238デフォルトの名無しさん:2005/07/26(火) 16:11:33
>>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に・・・という方法になるのでしょうか。
242デフォルトの名無しさん:2005/07/27(水) 01:05:35
>>239-241
おまえ、なめてんのか?

固定長の取り込み方はそれでいい。
ただ、末尾の空白が不要の時はちゃんと除去して取り込めよ。
243デフォルトの名無しさん:2005/07/27(水) 01:51:02
あちこちで連投みかけるね。
鯖の不調?
244デフォルトの名無しさん:2005/07/27(水) 02:35:04
サーバ側に原因があるのはほぼ間違いない
245デフォルトの名無しさん:2005/07/27(水) 09:05:25
>>239-241
RDBのBLOB項目は、TQuery(または、TIBQuery)を使ってTMemoryStreamに読み込める。
246デフォルトの名無しさん:2005/07/27(水) 21:13:34
fortranからDelphi6 Personalへの乗り換え最中です。

そこでファイルの書き込みについて質問です:
数値の入ったA[1..200,1..200]のような配列をテキストファイルとして保存したいんですが、
TFileStreamを使うやり方がよくわかりません・・・。
一番単純な方法で構いませんので、どなたか簡単なソースを示して頂けないでしょうか。
>>171を試したんですが、保存結果が変な文字列の羅列になってしまいます。
247デフォルトの名無しさん:2005/07/27(水) 21:20:51
var
sl: TStringList
begin

sl := TStringList.Create();
sl.Add('hogehoge');

sl.SaveToFile('filename.txt');
248デフォルトの名無しさん:2005/07/27(水) 21:38:27
>>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列の数字で)
どのようにしたらよろしいでしょうか?
250デフォルトの名無しさん:2005/07/27(水) 23:12:13
基本的に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もしくは改行コードを出力。

251233:2005/07/28(木) 01:09:22
>>242さん
ギコナビで書き込みしてるのですがエラーになってしまって・・・
何度もすみませんでした・・・orz
末尾の空白除去の件、気をつけます。

>>246
早速試してみます。ありがとうございました。
252デフォルトの名無しさん:2005/07/28(木) 03:39:01
>>250
おかげさまで望み通りの動きになりました!
TStreamに関しては参考書など探してもう一回勉強しなおします。
どうもありがとうございました!
253デフォルトの名無しさん:2005/07/28(木) 13:05:00
Streamってのは、ファイル渡しの代わりのメモリ渡しみたいなもの。

例えば、上記のTStringListには、
LoadFromFile/SaveToFileもあれば、
LoadFromStream/SaveToStreamもある。

StreamのLoad/Saveを持ってるコンポーネント同士で自由にデータ受け渡しできます。
254デフォルトの名無しさん:2005/07/28(木) 16:57:14
TEditのTextをStrToInt()で整数に変換するとき
Aとかの文字列が入ってるとエラーが起きるんですが
どうしたらいいんでしょうか?
255デフォルトの名無しさん:2005/07/28(木) 17:03:14
>>254
try exceptでエラー処理するか、StrToIntDefでエラー無視するか
256デフォルトの名無しさん:2005/07/28(木) 17:18:58
>>255さんありがとうございます。
エラー処理は難しそうだったのでStrToIntDefを使ったらできました。
257デフォルトの名無しさん:2005/07/28(木) 17:53:56
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;

プログレスバーは正常に動作してますが、ステータスバーとラベルの
更新がまったくされません。どちらも全処理終わってから表示されます。
リアルタイムで表示を反映させるにはどうしたらよいのでしょうか・・・。
259デフォルトの名無しさん:2005/07/29(金) 04:23:14
>>258
ステータスバーの方は、「計算中...」としか
表示しないなら、
ループに入る前に表示させて、「StatusBar1.Refresh」。
後はループ外で「終了」と表示させる。

ラベルの方は、ループの中に「application.ProcessMessages;」を
入れる。

こんなとこで良いのでは?
260デフォルトの名無しさん:2005/07/29(金) 05:25:12
>>259
完全におっしゃるとおりでした。
イメージしてたことがバッチリ実現できました!
こんな質問に答えてくださって本当にありがとうございます!
261デフォルトの名無しさん:2005/07/29(金) 05:52:05
ずいぶんと古風なインデントだな
262デフォルトの名無しさん:2005/07/29(金) 08:27:55
>>260
重い処理は別スレッドでやったほうがいい。

余力があったらスレッド使う実装も挑戦してみれ
263デフォルトの名無しさん:2005/07/29(金) 08:41:06
いやです
264デフォルトの名無しさん:2005/07/29(金) 08:56:23
バージョン2とか3とかノコンポで「Dsgnintfがない」とかで
インスコ出来ないんですが、MLの過去ログで調べたら
直すの大変ぽいのですが、皆さんどうしてます?
265デフォルトの名無しさん:2005/07/29(金) 08:58:18
苦労してます(`・ω・´)
266デフォルトの名無しさん:2005/07/29(金) 09:08:53
DesignIntf,DesignEditorsに書き換えてもダメだったのかな
267159: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
>>265
私も苦労してます(`・ω・´)

>>266
Proxies.dcuが無いと怒られます。
269デフォルトの名無しさん:2005/07/29(金) 11:30:37
スマン あげちまった。
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'まで受け付けるとすれば
いちいち条件に書くのは面倒くさいです。
集合を使えばスマートに書けると思うのですがやり方教えて貰えないでしょうか
271デフォルトの名無しさん:2005/07/29(金) 11:48:32
key <> in ['c'..'p']
272デフォルトの名無しさん:2005/07/29(金) 11:50:12
ミス
if not (key in ['c'..'p'] )then key := #0;
こうでした^^
273デフォルトの名無しさん:2005/07/29(金) 11:56:19
>>271-272
出来ますた。ありがとうございます。
274デフォルトの名無しさん:2005/07/29(金) 13:35:59
>>268
Proxies.dcuはdesignide.dcpに移っただけだと思うよ。

What ever happened to Proxies.pas?
http://community.borland.com/article/0,1410,27717,00.html
275デフォルトの名無しさん:2005/07/29(金) 14:54:11
ボタンをクリックしている間、OnClickイベントを
ボタンを押している間中何回も受けたい場合どうすればいいんだ?
276デフォルトの名無しさん:2005/07/29(金) 15:15:19
>>275
ボタンが上がってOnClickが呼ばれるから無理。
277デフォルトの名無しさん:2005/07/29(金) 15:31:39
>>275
OnMouseDownでタイマー起動
278258:2005/07/29(金) 15:48:38
>>262
確かに今作ってるやつでは処理が重すぎてよく固まります・・・。
別スレッドにした方がいいですよね。
やり方はまだ全然知りませんが、とりあえず今のバグ取りが終わったら
がんばってみます!
279デフォルトの名無しさん:2005/07/29(金) 15:57:21
>>275
メインループ中にGetAsyncKeyState等でマウス状態をもらって
if分で処理
280ななしへたぐらま ◆XcB18Bks.Y :2005/07/29(金) 18:55:43
>>277
そしてOnMouseUpでタイマー停止,タイマーのOnTimerに目的の処理….
書くまでもないかもしれませんが,一応補足します.
281デフォルトの名無しさん:2005/07/29(金) 20:02:28
button1,button2,button3,edit1を表示し、button1を数回押したあとbutton2を押すとedit1にbutton1を押した回数が表示される。button3を押すと回数がクリアされる。ってやつをやれって課題が出たんですがbutton1を押した回数をどうやって加算させればいいのでしょうか?
当方delphi暦一週間未満です。どうかお願いします。
282デフォルトの名無しさん:2005/07/29(金) 20:14:17
>>281
自分で変数を確保するかTag使う

学校の課題なら前者がいいと思われ
283デフォルトの名無しさん:2005/07/29(金) 20:28:42
返答ありがとうございます。変数の確保とはどうするのでしょう?
よろしければある程度コードエディタ?を書いて頂くことはできないでしょうか?
極端な資料不足のため見当もつかないのです。
284デフォルトの名無しさん:2005/07/29(金) 20:54:42
>>283
やっぱそうきたか

変数が何か分かってないなら学校の教科書読め
変数の宣言はDelphiのヘルプ読め
これ以上聞くな、他でマルチするな

以上
285デフォルトの名無しさん:2005/07/29(金) 21:58:18
286246:2005/07/29(金) 22:13:47
おかげさまでFORTRANのプログラムをDelphiに移植できそうです。
まだあんまり検証してませんが、FORTRANのコンソールアプリと
比べてDelphiって動作速いですね。苦労したかいがあった・・・。

アルゴリズムあんまり考えずにダラダラと書いた場合、
やっぱり高級言語では一般的にCが最速なんでしょうか。
Delphi好きなんで、このまま突き進みますが…。
287デフォルトの名無しさん:2005/07/29(金) 22:23:40
アルゴリズム考えないでだらだら書いたら
コンパイラ型の言語ならどれも大差ないと思う。
最適化の違いはあるだろうけど。
288デフォルトの名無しさん:2005/07/29(金) 22:32:23
Delphiはファイルサイズさえ目を瞑れば
動作速度、開発効率、おまけに習得の容易さ等申し分ないと思う
289268:2005/07/29(金) 22:36:45
>>274
すんません。
辞書引きながらページ見ました。
分かりませんでした。
どうしたらいいんでしょうか?。・゚・(ノД`)・゚・。
290デフォルトの名無しさん:2005/07/30(土) 04:04:14
Delphi製アプリって移動メニューが出ないけど
起動時に画面からはみ出して操作不能になった場合の
対策って特に何もしないのが一般的なの?
291デフォルトの名無しさん:2005/07/30(土) 05:23:04
>>289

> 直すの大変ぽいのですが
記事をざっと読んだだけだが、一番簡単なパターンなら

Register関数を新しいパッケージ(設計時パッケージ)に移動して
DesignIntfとDesignEditorsと、Registerで使用するコンポーネントのユニットをuses。
(コンポーネント本体のユニットからはDsgnIntf のusesを消す)
designide.dcpとコンポーネント本体(実行時パッケージ)をrequiresに追加。
設計時パッケージをコンパイルしてインストール。

プロパティ・エディタやコンポーネント・エディタがある場合も同様
関連コードを探して、設計時パッケージに移動するだけ。
292デフォルトの名無しさん:2005/07/30(土) 08:20:11
>>290
アクティブ状態でAlt+Space > Mで移動すればいいだけじゃ?
293デフォルトの名無しさん:2005/07/30(土) 08:57:18
294デフォルトの名無しさん:2005/07/30(土) 11:24:30
D2005を暫く使っていると、オブジェクトインスペクタで貼り付けができなくなるのは仕様ですか?
295デフォルトの名無しさん:2005/07/30(土) 12:35:24
FastMM4使え
296デフォルトの名無しさん:2005/07/31(日) 04:26:10
画像処理で、button1を押して色を反転させた時、もう一度押しても何にもならないです。
例えば
image1 → image1 反転 → image1 元に戻るのように交互に表示させるにはどうしたらいいのでしょうか?
297デフォルトの名無しさん:2005/07/31(日) 04:39:22
アプリケーションがアクティブになっていなくても(別のウィンドウ上でも)クリックを検知する
のはどうすればできますか
298デフォルトの名無しさん:2005/07/31(日) 04:45:25
>>297
フック。
299デフォルトの名無しさん:2005/07/31(日) 06:38:30
>>296
普通に組めばそうなるはずだが
毎回元のイメージを反転して表示したりしてないか確認汁
300デフォルトの名無しさん:2005/07/31(日) 09:26:32
Image1.Refresh
301デフォルトの名無しさん:2005/07/31(日) 09:59:06
 TabControl に適当なコンポを乗せ、コンポの Align を alClient にした場合、コ
ンポと TabControl の境界が3ピクセルぐらいできてしまいます(タブの部分を除く)。
これをなくする方法があるでしょうか? TabControl には BorderStyle がないので
困っています。
302デフォルトの名無しさん:2005/07/31(日) 10:50:33
296です
>>299 >>300くれた方ありがとうございます。 Image1.Refresh を使ったら反転してくれました。
303デフォルトの名無しさん:2005/07/31(日) 12:17:53
自作アプリ間でデータの受け渡しを行いたいのですが、
受取側のiniファイルが変更されたら、イベントが発生するようなプログラムは
可能ですか?
304デフォルトの名無しさん:2005/07/31(日) 12:29:10
可能だけど、iniファイルの使い方間違っている
305デフォルトの名無しさん:2005/07/31(日) 12:29:55
コード次第。変更したあと自力で知らせる
306303:2005/07/31(日) 12:59:42
>>304 305 有難うございます

ttp://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200410/04100091.txt

本当はiniファイルを使わず↑を参考にして、SendDlgItemMessageで自作フォームにあるTEditに文字を入力させたいんです。ところが自作アプリのTEdit(edtNameというnameプロパティ)のコントロールIDを知る方法がわかりません。

コントロールIDってどうやれば調べられるのでしょうか。
307ミ,,゚Д゚ミノ ◆A6VzDeLphI :2005/07/31(日) 13:25:59
コントロールIDを固定で設定するには?
http://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200503/05030108.txt
308303: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の書き方が間違っているのでしょうか。

すみません。もう少しアドバイスを・・。
309|Д゚彡 ◆A6VzDeLphI :2005/07/31(日) 14:42:06
つってもなあ、
コントロールIDに脊髄反射でURL出しただけなので
アドバイスなんて全然ムリポ

手元の情報に
SendDlgItemMessage
でサーチかけてみましたが

サンプルプログラム PC-FAXの操作
http://homepage2.nifty.com/Mr_XRAY/Delphi/plSamples/T_PC_FAX.htm

第23章 ダイアログボックスの研究 その1
http://homepage2.nifty.com/Mr_XRAY/Halbow/Chap23.html

あとは
[Delphi-ML:1025] すいません、いっぱい質問して....
[Delphi-ML:20537] RE: Re: [Q] Application.MessageBoxの Close
[Delphi:59301] OpenDialog でファイル削除させたくない
[Delphi:73597] 他アプリ操作コンポーネント
このへんですかね。

MLログ閲覧は死んでるみたいですが、
310303:2005/07/31(日) 14:44:58
>>309

無理言ってすみません。
後は自力で解決します。
311デフォルトの名無しさん:2005/07/31(日) 14:49:17
>>309
> MLログ閲覧は死んでるみたいですが、
随分前に直ってるぞ。
312デフォルトの名無しさん:2005/07/31(日) 15:08:21
素直にウィンドウメッセージを送る方がいいって。
313デフォルトの名無しさん:2005/07/31(日) 15:24:04
Editの中の数字をStrToIntとかで数字に変換して計算に使ってるんですが、
割り算に使ってるせいで空欄になったらエラー、あと間違えて文字などを
入力してもエラー、という状態です。

そのへんの例外処理はどうやったらいいんでしょうか?
314デフォルトの名無しさん:2005/07/31(日) 15:30:15
>>313
EConvertErrorをcatch
315デフォルトの名無しさん:2005/07/31(日) 15:32:55
確かTryIntToStrなんてのもあった気がする
316デフォルトの名無しさん:2005/07/31(日) 15:51:41
VC++とかC++BuilderはまずC言語から始めるらしいんだけど
DelphiはPascalからやるもんですか?いきなりGUI作れるもの?
317デフォルトの名無しさん:2005/07/31(日) 16:15:58
>>316
作れる。
もちろん最低限のObjectPascalの文法は覚える必要はあるが。
6Perなら落としたファイルの展開先にクイックスタート、言語ガイド、開発者ガイドのpdfが入ってるから前二つを読むと吉(チュートリアルのTActionManagerはperにないからTActionListで代用)

前者はPascal無視していきなりObjectPascalでいいかと。C++なりJavaなり触ったことがあるならすぐ覚えられる。
318|Д゚彡 ◆A6VzDeLphI :2005/07/31(日) 16:51:44
ミラーは生きてるのね。

About Delphi
http://www2.big.or.jp/~osamu/Delphi/
319303:2005/07/31(日) 19:43:06
var
WinHnd : HWND; //ウィンドウのハンドル
begin
//自作ソフトを探す
WinHnd := FindWivar
WinHnd : HWND; //ウィンドウのハンドル
begin
//自作ソフトを探す
WinHnd := FindWindow('自作ソフトのパス', nil);
//自作ソフトをアクティブにする
SetForegroundWindow(WinHnd);

end;

自作ソフトがアクティブになった時に発生するイベントはありませんか?。
そこで処理をさせたいのですが。
メインフォームのActiveControl、 OnActivateでイベントが発生すると思ったのですが、
何も起こりませんでした。
320303:2005/07/31(日) 19:44:30
var
WinHnd : HWND; //ウィンドウのハンドル
begin
//自作ソフトを探す
WinHnd := FindWindow('自作ソフトのパス', nil);
//自作ソフトをアクティブにする
SetForegroundWindow(WinHnd);
end;

こちらになります
321デフォルトの名無しさん:2005/07/31(日) 19:46:27
>>319
Application.OnActivate (ApplicationEvents.OnActivate)
322デフォルトの名無しさん:2005/07/31(日) 20:00:04
>>320
( ゚Д゚)
323303:2005/07/31(日) 20:00:27
>>319

Application.OnActivate (ApplicationEvents.OnActivate) とは。

procedure TForm1.FormActivate(Sender: TObject);
begin
・・・この間の処理
end;

OnActivateで発生するイベントとは違うのですか?。
すみません。Application.OnActivateの使用例を教えていただければ・・。

324デフォルトの名無しさん:2005/07/31(日) 20:05:06
>>323
TForm.OnActivate はそのアプリ内でのアクティブウィンドウの変化に応答するイベント。
              ~~~~~~~~~~~~~~~~
TApplication.OnActivate/TApplicationEvents.OnActivate はそのアプリの所有するウィンドウがアクティブになった時に応答する。

>> 使用例
TApplicationEvents コンポ置いて普通にイベントハンドラ作る。
325303:2005/07/31(日) 20:13:15
>>324

TApplicationEventsを貼り付けて、イベントが発生しました。
判り易い説明有難うございました。
326ななしへたぐらま ◆XcB18Bks.Y :2005/07/31(日) 20:27:58
遅レスのマルチレスですが…

>>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
話はそれから.

#もしかしてガッコの先生は例題を出す前に変数についてちゃんと教えてくれなかったのでしょうか.
#もしそうならその先生が悪いと思います.
327デフォルトの名無しさん:2005/07/31(日) 20:30:41
ガッコの先生ってこの問題やれって言ってどっかいっちゃうもんじゃないのか
教えてもらったことなんて一回もないな、先生の名前も顔も覚えてない
328ななしへたぐらま ◆XcB18Bks.Y :2005/07/31(日) 21:30:40
問題をやらせる前に説明がないと生徒はわかりませんし,
そもそもそれなら先生なんていらないのではないかと思うわけで.
でも現実にそんな先生があまりにも多いのでしょうね.
私の大学時代も同様でした.

>>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が参考になると思います.
329デフォルトの名無しさん:2005/08/01(月) 09:41:30
>>313
入力されない数値があるなら StrToIntDef というのもある
330デフォルトの名無しさん:2005/08/01(月) 13:45:23
あのー、エラーではないのですが、 デバグ中のアプリなんですが、バッテン押して終了させると、
四角い表みたいのがでるんですが、えらーですよね? これはなんですか?
331デフォルトの名無しさん:2005/08/01(月) 14:04:15
330です
bmpを表示するのですが、どうも大きい画像を読み込んだ時に、四角い表見たいのがでるようです。
小さい画像だと大丈夫でした。 
332デフォルトの名無しさん:2005/08/01(月) 18:23:08
?? 肛門ダイアログ以来の謎 ??
どこかに画像をアップロードできませんか?
333デフォルトの名無しさん:2005/08/01(月) 22:02:54
できます
334デフォルトの名無しさん:2005/08/02(火) 00:32:11
CPUウィンドウのことか?
例外捕まえきれない場合に表示される
335デフォルトの名無しさん:2005/08/02(火) 09:17:59
巨大なbmpだと、Win 32APIコールでがリソース不足エラーが返ってくる場合あり。
336デフォルトの名無しさん:2005/08/02(火) 09:25:39
>>330_331です
みなさん、ありがとうございます。
肛門ダイアログの意味はわかりませんが、かなりアホな質問したみたいなので、失礼しました。

CPUウィンドウなんですね。 メモリを増やせば出なくなるとかで出なくなるのかな? 

337デフォルトの名無しさん:2005/08/02(火) 09:34:13
実はWin32 APIコールレベルではエラーは出まくってる。
Windows自体ビットマップに弱いみたい。
メモリを節約するコンポを使うか、エラー時は処理出来ませんエラーダイアログ出すかしかないかも。
ttp://www.asahi-net.or.jp/~HA3T-NKMR/DGS/FAQ.htm
338デフォルトの名無しさん:2005/08/02(火) 10:03:47
Delphi Graphic Secretsでも読んどけ
http://www.asahi-net.or.jp/~HA3T-NKMR/DGS/
339デフォルトの名無しさん:2005/08/02(火) 10:54:54
SpeedButtonコンポーネントのAllowAllUpプロパティについて質問です。
これをtrueにしたときとfalseにしたときの違いがまったく分かりません!

F1押してヘルプを読みましたがややこしく理解に苦しむ文章でよく分かりません。

テスト用プログラムを作って実際にtrue、falseにしたときの動作を
比較してみましたがまったく同じでした!
(GroupIndexプロパティを1にしたSpeedButtonを3つ使って実験しました)

一体何が違うのでしょうか! 気になって昼寝も出来ないのでどうかご教授下さい!
340デフォルトの名無しさん:2005/08/02(火) 11:04:41
>>339
trueだとすべてのボタンをOFFにできる。
341デフォルトの名無しさん:2005/08/02(火) 11:13:28
>>340
あああぁぁぁぁあああ!! そういうことだったんですか! やっと分かりました!!
同じボタンを二回連続で押せば違いが分かったのか、盲点でした!

どうもありがとうございました!!!!!!!!
342ななしへたぐらま ◆XcB18Bks.Y :2005/08/02(火) 14:18:41
>>330-338
ここのらいぶらりのTBigBitmapを使うのが手っ取り早そうですね.
"Delphi Graphic Secrets"によれば
Windowsの種類によってはいくらメモリを足しても駄目みたいですし.
343デフォルトの名無しさん:2005/08/02(火) 20:20:10
いわゆるWindows9X系GDIの問題。小手先で解決してもすぐ陳腐化するけどね。あと2,3
年はしょうがないか・・・
344デフォルトの名無しさん:2005/08/02(火) 20:22:41
標準コンポ以上の事をやりだすととたんに破綻するのがDelphiクオリティ
345デフォルトの名無しさん:2005/08/02(火) 22:09:50
Windowsの問題なんだが・・・
346デフォルトの名無しさん:2005/08/02(火) 23:15:48
VB.NETなら問題なくできるのにね。
347デフォルトの名無しさん:2005/08/02(火) 23:34:18
bmpの330です。

レスくれた方ありがとうございます。
BigBitmap使ってみます。

"Delphi Graphic Secrets" ← まったく手に入りません。(;_; 誰かください。
348デフォルトの名無しさん:2005/08/03(水) 00:21:59
>>347
( ゚Д゚) ハァ?
349デフォルトの名無しさん:2005/08/03(水) 18:25:26
君の歯はヨセツケマセンネ
350デフォルトの名無しさん:2005/08/04(木) 01:02:29
delphiで作成したソフトのソースを公開する際に必要なファイルを教えてください。
*.dpr,*.pas,*.dfm,*.dof,
あと必要に応じて*.icoとか*.bmpとか、この辺で抜けや漏れはないですかね?
351デフォルトの名無しさん:2005/08/04(木) 01:09:56
>>350
1.プロジェクトファイルをダブルクリックして起動する。
2.別の「何も入ってないフォルダ」に全部保存する。

これで必要なのは入ったと思うけど、どうか。
352デフォルトの名無しさん:2005/08/04(木) 01:15:20
353350:2005/08/04(木) 01:25:42
>>351-352
うむ、参考になりました。試してみます。
ありがとうございました。
354デフォルトの名無しさん:2005/08/04(木) 08:19:40
実行ファイルのリソース内にファイルを埋め込むソフトを作りたいと思っています。
以前ここで紹介されたmadコンポーネントを使っているのですが、UpdateResourceWの使い方が
よく分かりません。簡単なサンプルを書いていただけないでしょうか。。
355デフォルトの名無しさん:2005/08/04(木) 08:46:41
>>354
ヘルプ見ろよバカ
356デフォルトの名無しさん:2005/08/04(木) 09:03:56
>>354
てかまたこいつかw最近見ないと思ったら、とうとう痺れを切らしたようだなw
てかまだ出来てなかったのか(´・ω・`)
357デフォルトの名無しさん:2005/08/04(木) 15:27:44
Delphi 使いってサンプルがないと何も出来ないんだね
358デフォルトの名無しさん:2005/08/04(木) 15:43:34
きみ、日本語の読解力がないね
359デフォルトの名無しさん:2005/08/04(木) 15:58:52
以前からちょくちょく見かけてた奴か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でペースト画像を取得するにはどうしたらよいでしょうか。
361デフォルトの名無しさん:2005/08/04(木) 17:01:34
例えばa=2、b=12、c=123の時に
'A□□2:B□12:C123'(□は半角スペース)
という文字列を作りたいんだけど、簡単に作る方法あります?
362デフォルトの名無しさん:2005/08/04(木) 17:07:28
>>360
Button1Click内の
Image1.Picture.Assign(Clipboard);
 を
Image1.Picture.Bitmap.Assign(Clipboard);
としてみてはどうか。
363デフォルトの名無しさん:2005/08/04(木) 17:12:37
>>361
format
364デフォルトの名無しさん:2005/08/04(木) 17:15:23
>>361
Format('A%3d:B%3d:C%3d',[a,b,c])?
365デフォルトの名無しさん:2005/08/04(木) 17:22:01
>>362
おっしゃるとおりで、一瞬で解決しました。本当にありがとうございました!
もうひとつ後学のために、この”Bitmap”によって処理が
どのように変わっているか教えて頂けないでしょうか?
366デフォルトの名無しさん:2005/08/04(木) 17:28:37
Formatなんかあったのね。
助かりました。
367デフォルトの名無しさん:2005/08/04(木) 18:53:16
>>365
ビットマップに大量アクセスする場合はpget/pset使わずにScanlineプロパティ使った方がいい。
Pset/Pgetは破滅的に遅い。
368デフォルトの名無しさん:2005/08/04(木) 19:24:35
>>365
TImageのPictureってのが複数フォーマットを対応しているがために、
Assignコールされても何をして良いか分からないから何もしない。
で、Picture.Bitmap.Assignコールされてやっとこさビットマップをアサインするルールになってる。
369デフォルトの名無しさん:2005/08/04(木) 23:02:42
さっきから入門書読み出したのですが、VBでいうApp.Pathは
どんなふうにするの?
370デフォルトの名無しさん:2005/08/04(木) 23:05:48
Application.Exename
371デフォルトの名無しさん:2005/08/04(木) 23:07:02
>>370
ありがとん
372デフォルトの名無しさん:2005/08/04(木) 23:10:19
Vbsの質問しても良い?
373デフォルトの名無しさん:2005/08/04(木) 23:11:07
>>372
VBSのスレで質問してください
374デフォルトの名無しさん:2005/08/04(木) 23:15:18
え〜。
MsgBox"(-_-;)う〜ん?"
こまった。
375デフォルトの名無しさん:2005/08/04(木) 23:20:42
Delphiって死滅しちゃうの?
376デフォルトの名無しさん:2005/08/04(木) 23:22:26
>>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ですか?
378デフォルトの名無しさん:2005/08/05(金) 13:17:16
w2kがシャットダウン、再起動、ログオフされた時にアプリ内で判別する方法を
検索して探してたんですが無いっぽいんです。
サービス立てるとかじゃなくてもっとスマートな方法ないでしょうか?
379デフォルトの名無しさん:2005/08/05(金) 15:30:36
>>378
何を判別したいの?シャットダウン・再起動・ログオフをそれぞれ判別したいの?
それとも終了されるかどうかを判別したいの?
380デフォルトの名無しさん:2005/08/05(金) 16:18:28
シャットダウン、再起動、ログオフのどれが実行され様としてるかの判別です。
381デフォルトの名無しさん:2005/08/05(金) 18:37:40
>>380
なんかメッセージが飛んでくるはずだけど
382デフォルトの名無しさん:2005/08/05(金) 20:47:40
WM_ENDSESSIONが飛んでくる
詳しくはここ嫁
http://homepage1.nifty.com/kazubon/progdoc/tclock/end.html
383デフォルトの名無しさん:2005/08/05(金) 20:52:26
384ななしへたぐらま ◆XcB18Bks.Y :2005/08/05(金) 21:13:37
>>378-381
ぐぐってみたらこんなのが
http://homepage1.nifty.com/MADIA/delphi/delphi_bbs/200308_03080048.html
WM_ENDSESSIONメッセージを処理するのですね.
385ななしへたぐらま ◆XcB18Bks.Y :2005/08/05(金) 21:14:31
すいませんかぶりました.
386デフォルトの名無しさん:2005/08/05(金) 21:26:08
WM_ENDSESSIONを捕まえてもシャットダウンと再起動の判別はつかなかったような。。。
387デフォルトの名無しさん:2005/08/06(土) 02:00:59
ですよね。なんかXPは解かるようになった様なレスは見たのですが
2kは駄目なのか解決されてるの見たこと無いです。
388デフォルトの名無しさん:2005/08/06(土) 13:10:01
どんな終了かを識別できるメッセージが来ないんなら別の方法、
例えば実行直後にレジストリとかに記録してる何かとかで裏技的にでも
わかんないのだろうか。
389デフォルトの名無しさん:2005/08/06(土) 16:06:19
未来のことはわからんだろ・・・
390デフォルトの名無しさん:2005/08/06(土) 17:41:23
シャットダウンした時って事でしょ
391デフォルトの名無しさん:2005/08/06(土) 22:06:31
シャットダウンと再起動の判別 超近未来だよ
392デフォルトの名無しさん:2005/08/06(土) 22:49:29
すいません、質問です。
StringGridのデータをSaveToFileを使って、ユーザーが設定したファイル名を使って保存するという事はできるのでしょうか?
例えば、
ユーザーがEdit1にhozonと入れた時に、
begin
StringGrid1.SaveToFile(Edit1.Text)
end;
という記述で毎回違うファイルに保存する事は可能でしょうか?
心やさしい方、御教授よろしくお願いします!
393デフォルトの名無しさん:2005/08/06(土) 22:50:37
自分で保存するコードを書くんだよ。
394デフォルトの名無しさん:2005/08/06(土) 22:51:18
FAQ だから検索するといいよ。保存方法もひとそれぞれだし
395デフォルトの名無しさん:2005/08/06(土) 22:52:07
>>392
やってから質問しなよ。
396デフォルトの名無しさん:2005/08/07(日) 14:21:51
Delphiで作ったフォームにOKボタンを置いてそれを表示しても
マウスカーソルがOKボタンに移動してくれないバグを発見したのですがどうすれば治るでしょうか?
397デフォルトの名無しさん:2005/08/07(日) 14:29:12
普通移動しないだろ
398デフォルトの名無しさん:2005/08/07(日) 14:32:15
>>396
詳しく
399デフォルトの名無しさん:2005/08/07(日) 14:43:15
OKボタンは本来Enterで押すことを想定するものだろ
だからこそTButtonにDefaultというPropertyが存在している
400デフォルトの名無しさん:2005/08/07(日) 15:10:36
OKボタンがあるとマウスを自動で移動させてるツールを使ってるが、
Delphiで配置したOKボタンの場合はそれが動作しない

という意味じゃまいか



たぶんだけど
401デフォルトの名無しさん:2005/08/07(日) 19:06:56
たしかWindowsの設定で自動で移動するのがあったような気が。
マウスのプロパティだったか
402デフォルトの名無しさん:2005/08/07(日) 19:11:04
Delphiのフォームは贋物だからいろいろと挙動がおかしいんだよな。
403デフォルトの名無しさん:2005/08/07(日) 19:16:28
Delphi6のTClientSocket と Delphi7のTcpClient(Socket)って基本的に同じですか?
また、各プロパティの変更部分はどれとどれですか?
404デフォルトの名無しさん:2005/08/08(月) 15:19:07
 TEdiでクリックしたときに表示している文字列を選択するために(TComboBox のように)
procedure TForm1.Edit1Enter(Sender: TObject);
begin
 Edit1.SelectAll;
end;

としても、文字列は選択されません。なんででしょ?
405デフォルトの名無しさん:2005/08/08(月) 15:39:55
procedure TForm1.Edit1Enter(Sender: TObject);
begin
 Edit1.SelectAll;
Edit1.Refresh;
end;
406デフォルトの名無しさん:2005/08/08(月) 16:00:15
>>404
Edit1EnterじゃなくてEdit1ClickでやればOK
407デフォルトの名無しさん:2005/08/08(月) 17:50:00
>>405,406
ありがとう!
408デフォルトの名無しさん:2005/08/08(月) 21:23:45
データを50音順でソートするような命令ってどうやれば良いですか?
help難し杉
409デフォルトの名無しさん:2005/08/08(月) 21:35:27
procedure sort_data_with_50onjun;
begin
 // todo:ここにコードを書く
end;
410デフォルトの名無しさん:2005/08/08(月) 21:43:41
何に入っているデータをソートするの?
411408:2005/08/08(月) 22:16:24
>>409
うーん・・・
>>410
StringGridのセルに入ってる名前のデータです
例えば、StringGrid.csv[1,1]にはヤマダ、[1,2]にはタナカ、[1,3]にはスズキ・・・(以下ずっと続く)
といった具合の1列目のデータを、綺麗に50音順でソートしたいのです

あほな質問でスンマセン・・・
412410: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;
413408:2005/08/09(火) 00:02:29
>>412
わざわざありがとうございます!
ソートっておっそろしく大変な作業だったんですね・・・
てっきり何かしらの関数でもあるものかと思ってました。
ソース睨んで勉強してみます、どうもでした!
414410:2005/08/09(火) 00:16:13
いや、えっ〜とどう答えてよいのやら。
先のソースは
 1) Grid の内容を TStringList にコピー
 2) TStringList の Sort メソッドを呼び出してソート
 3) TStringList の内容を Grid に書き戻し
という構成で、ソート部分は TStringList のメソッドに任せているだけで
ソースの大部分は 1) と 3) の処理なんだわ。
そんなわけで、先のソース睨んで勉強と言われると本質的な部分(ソート)の
勉強はできないんでちょっとツライ。
できればソート関連についてはググって勉強してくださいまし。
415デフォルトの名無しさん:2005/08/09(火) 00:18:37
λなソートライブラリのないDelphiは糞
ありえない
そんなのがゆるされるのは前世紀まで
416デフォルトの名無しさん:2005/08/09(火) 01:05:53
かなり初歩的な質問ですが、間違ってしまったイベントを消すとき、どうやって消せばいいですか?
417デフォルトの名無しさん:2005/08/09(火) 01:06:57
Del
418デフォルトの名無しさん:2005/08/09(火) 01:12:49
>>416
書いちゃったイベントの内容(begin〜endの中だけ)を
選択して消す。
後は「構文チェック(S)」すれば、イベントの記述自体が消えます。
ほっといても、イベントの内容が空なら問題無し(コンパイル時に消えるし)。
419デフォルトの名無しさん:2005/08/09(火) 01:34:05
>>418
ありがとうございます。
前に下手に消してエラー祭りになっちゃったことがあるんで・・・。
助かりました。
420404:2005/08/09(火) 07:04:30
 昨日に引き続いて TEdit に関する質問なのですが・・・・
 Edit は Hight を 24 に設定しても実行時には 20 に戻ってしまいます。またフォ
ントサイズを変えれば Hight は自動的に変化してしまいます。
 フォントサイズと Hight を思い通りに(たとえば FontSize = 9、Hight = 24 のよ
うな) 指定はできないのでしょうか?
421デフォルトの名無しさん:2005/08/09(火) 07:59:46
>>420
なんだ貴様やる気あるのか!!
フォーム生成時に
Edit1.Font.Size := 6;
Edit1.Height := 30;
とかやっとけ糞ぼけちんかすまんちょすv^−^v
422410: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;
423デフォルトの名無しさん:2005/08/09(火) 12:57:20
FindWindowを使って、メーカー起動の監視をしようと思っています。
maelto:を使い、プログラム内で件名も埋め込んで起動させていますので、フォーム
キャプションは予めわかっています。
OEのメーラーや、Outlook2003のWord2003で表示するにチェックを入れた場合のメー
ラーの監視はできますが、Outlook2003のWord2003で表示するにチェックを外し、
html形式にしたメーラーの場合、

l_Han4 := FindWindow(nil,PChar( '無題 - メッセージ(HTML形式)'));

で、監視ができません。タイマーを使って、監視していいますが、帰ってくるハンド
ルは0です。
キャプション内の「(HTML形式)」を全角湖に変更して調べていますがハンドルは0で
す。
キャプション設定が悪いのが原因かと思っていますが、いっそうこと現在起動されて
いるフォームキャプション名を収得する方法はないかと思っています。直接Delphiに
は関係ないかもしれませんが、現在起動されているフォームキャプション名を収得す
る方法をご存じの方みえましたら、アドバイスしていただけますよう、宜しくお願い
致します。
424デフォルトの名無しさん:2005/08/09(火) 12:58:01
メーカーって何だと思ったらメーラーか
425デフォルトの名無しさん:2005/08/09(火) 12:59:39
>>423
Delphi-MLにまったく同じ文言の投稿があったのだけど釣り?
426デフォルトの名無しさん:2005/08/09(火) 13:36:28
頑張ってね。
明日休みだし風呂で待ってようかな。
一緒に入る?
洗い合う?
なんてね。
427デフォルトの名無しさん:2005/08/09(火) 13:40:46
思い出し藁藁
428デフォルトの名無しさん:2005/08/09(火) 16:38:06
>>420

AutoSizeプロパティを False にしたらどーなる?
429デフォルトの名無しさん:2005/08/09(火) 23:17:27
質問です。
10M以上のバイナリのデータを書き換えたいのですけど
BlockReadだと用意した配列 Var F_Data :Array[0..90000000]でエラー出ちゃいます。
一気に大きなファイル内容を読み書きする方法とか、メモリに入れなくても、直接編集できるような
なるべく簡単な方法ないでしょうか。よろしくお願いします。
※ポインタ使えません。ユーザが定義する関数も使ったことないです・・・
430デフォルトの名無しさん:2005/08/09(火) 23:54:27
>>429
TFileStreamというそういう目的にぴったりのオブジェクトが存在する。
メモリに読み込むような作業をしなくても
ファイルの任意の場所から任意の長さのデータが読み書きできる。
しかしvar変数の意味を理解していないと使うのが難しい罠。(ある意味ポインタより間際らしい)

ちなみにオブジェクトって解る?解らないならそこから勉強すべきだ。


431デフォルトの名無しさん:2005/08/10(水) 00:01:02
初期化が面倒だけどその後はCreateFileMapping/MapViewOfFileのが楽かもな。
ファイルをメモリ上の配列のように扱うことができるから読み書きのコードがシンプルになる。
432デフォルトの名無しさん:2005/08/10(水) 01:14:33
>430 >431

今は0から1500読んで1000書く
1000から2500読んで2000書くとやっていますが
どうしても跨ぐデータ(500以上のデータ)が出てしまって手も足もでませんでした。
両方ともしらべてがんばってみます。
どうもありがとうございました!! _(_ _)_

オブジェクト・・・コンポーネントのことかな・・・?
なんかそれ以外にも難しい説明があったようななかったような・・^^;
433デフォルトの名無しさん:2005/08/10(水) 01:16:56
オブジェクト=手続き
434デフォルトの名無しさん:2005/08/10(水) 01:22:57
>433
ああそうだ。。。確か車がオブジェクトで、デザインがプロパティで、メソッドが各部品の機能でってあったような・・・
あとクラスっていうのもありますよね-_-;
435デフォルトの名無しさん:2005/08/10(水) 02:57:46
オブジェクト=手続き?
ここ何時からネタスレになったの?
436デフォルトの名無しさん:2005/08/10(水) 05:18:45
>>435
お前がネタだろwオブジェクトが手続きじゃなくて何だw
437デフォルトの名無しさん:2005/08/10(水) 05:52:42
>>436
それから先は談話室でやれ。
438デフォルトの名無しさん:2005/08/10(水) 08:10:00
手続き=procedure
439デフォルトの名無しさん:2005/08/10(水) 10:07:31
ShellTreeiew でマウスでのドラッグ&ドロップによるディレクトリの移動を
禁止するにはどうしたらいいのでしょ?
440デフォルトの名無しさん:2005/08/10(水) 10:10:01
↑ShellTreeView ⇒ ShellTreeViewです。
441デフォルトの名無しさん:2005/08/10(水) 12:49:00
>>440
^−^
442デフォルトの名無しさん:2005/08/10(水) 14:25:37
Delphiのソースコードに↓のような記述があったのですが、

{$I-}
処理1
処理2
{$I+}
処理3

これはどういう意味なのでしょうか?

宜しくお願いします。
443デフォルトの名無しさん:2005/08/10(水) 14:55:23
>>442
つ ヘルプ
444デフォルトの名無しさん:2005/08/10(水) 16:31:02
>>442
コメント
445デフォルトの名無しさん:2005/08/10(水) 18:54:43
初心者です。
stringGrid のソートをしたくて、けど自分でロジックが組めなくて

ttp://forum.nifty.com/fdelphi/faq/00084.htm
こんなん見つけました。
非常に便利そうなんですが、使ってみると何も入力されていない列が一番上に来てしまいます。
(stringGridの一番下で文字列はちゃんとソートされてる。)

これを防いで入力のない列は無視するようにするにはどうしたらいいのでしょうか?
よろしければご教授ください。ペコリ
446445:2005/08/10(水) 19:03:41
すみません、書き込んでから気づいたんですがちょっと上に似たような話がありましたね。

ただ、後学のためにリンク先のコードをどう改変すれば文字列だけをソートできるのか、
教えていただけると助かります。
447デフォルトの名無しさん:2005/08/10(水) 20:19:48
>>446
・St.Sort→St.CustomSortに変更して自前でソート用比較関数を書く。
・St.Sortの前後を、St内の空文字←→大きな文字コード(例:#$FF#$FF等)に変換、逆変換処理で挟む
パフォーマンスを考慮すれば前者の方がいいか。
まだ他にも方法はあるかもしれないがパッと思いついたのはこれぐらい。
448ななしへたぐらま ◆XcB18Bks.Y :2005/08/10(水) 21:13:41
>>442
それは $I というコンパイラ指令です.

ヘルプにある $I の説明がわかりにくいので説明しますが,
ソースコードに{$I-}というコンパイラ指令があると
それ以後のコードはファイルの読み書きに関する手続き(ResetやRead, BlockReadなど)で
読み書きの処理に失敗(ファイルがない,ディスクがいっぱい,など)したときに
EInOutError例外を生成しなくなります.
この場合,これらの手続きごとにIOResult関数を参照して
正しく読み書きできたかどうかを調べなければなりません.

{$I+}の場合は逆に失敗時に上記の例外を生成します.
どちらも指定しない場合はプロジェクトオプションの『I/Oチェック』をチェックしているかどうかによります.
              ☆              ☆

この指令は恐らく過去に書かれたPASCALのソースコードとの互換性を取るためにものだと思われます.
Delphiで新規にプログラムを書く場合は使う必要はありません.
お手持ちのソースコードの処理1と処理2には恐らくIOResult関数でのチェックが入っていると思います.
もしなければ読み書きに失敗しても無視するだけの極悪手抜きコードかもしれません.
449442:2005/08/10(水) 21:31:25
>>448
大変参考になりました。ありがとうございます。

ちなみに、
>お手持ちのソースコードの処理1と処理2には恐らくIOResult関数でのチェックが入っていると思います
、、、入ってませんでした。
極悪手抜きコードつかまされたようですorz.............
450445:2005/08/10(水) 23:05:43
>>447
ありがとうございます。
2番目の案で解決しました。感動です。

どうもありがとうございました。
精進します。

451デフォルトの名無しさん:2005/08/11(木) 01:16:40
StringでCaseみたいに扱う方法って何かありませんか?
一応、今のところ物凄い量のifを使って
if S = 'Hoge' then ....
else if S = 'HogeHoge' then ...
else if S = 'HogeHogeHoge' then...
↑こんな風に処理していますが、ソースが凄く汚くて困ってます。
452デフォルトの名無しさん:2005/08/11(木) 01:17:46
>>451
クラス作ったら?
453デフォルトの名無しさん:2005/08/11(木) 01:19:20
条件分岐用のクラスというと、どんな感じになるのですか?
454デフォルトの名無しさん:2005/08/11(木) 01:25:39
>451
無い。
しかしIf文の中身次第では最適化の余地はある。
少し晒してみれ。
455デフォルトの名無しさん:2005/08/11(木) 01:30:47
>>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;
456デフォルトの名無しさん:2005/08/11(木) 01:33:17
大体、こんな感じです。

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を超えた辺りからコードに虚しさを感じ始めました。
457デフォルトの名無しさん:2005/08/11(木) 01:37:28
まあ、極めてC的だけど
文字列とその処理ハンドラの組を作り
ループで回してやるのが一般的かな。
文字列一致の判定には2分探索やハッシュなんかを使う手もあるけど。
458デフォルトの名無しさん:2005/08/11(木) 01:40:20
>>451
HashMap+MethodPointer
最近、JavaベッタリなんでDelphiの文法を忘れ気味なんだが、Delphiは
インスタンスメソッドのアドレスを普通に取れたはず。
だから、後はそれをHashMapに登録しておいて必要な時に呼び出すだ
け。パフォーマンスの点でも効率いいし、処理の追加や削除も楽々。
459デフォルトの名無しさん:2005/08/11(木) 01:52:32
Delphiしか知らない上にハッシュていうのが良くわかりませんので、
とりあえず455さんのようにTListでごりごりやってみます。
ありがとうございました。
460453: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コンポーネントに表示させたいのですがどういったコードを書けばいいのでしょうか?
463デフォルトの名無しさん:2005/08/11(木) 07:42:29
>>462
TreeViewのMouseUpイベントで
1. TreeView.GetNodeAtメソッドを使ってクリックされたノード特定
2. ノードからテキストファイル名取得
3. Memo.Lines.LoadFromFileメソッドを使ってテキストファイル読み込み

TreeViewのノードとテキストファイル名の関連付けをどうやっているのか判らないので(Node.Text or Node.Data?)
2. の処理は自分で考えてね。
464デフォルトの名無しさん:2005/08/11(木) 10:57:15
 俺は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です。
466デフォルトの名無しさん:2005/08/11(木) 17:34:11
すみません、なに言ってるかわかりません。
もう少し具体的にお願いします。
467デフォルトの名無しさん:2005/08/11(木) 17:34:19
>>465
すいません、まったく意味がわかりません。
468467:2005/08/11(木) 17:34:55
>>466
ぐわぁ、かぶったorz
469デフォルトの名無しさん:2005/08/11(木) 17:49:47
質問悪くてすいません・・・
わたしはLoadFromFileとオープンダイアログコンポーネントで、ファイルを選択して読み込む事はできるんですが、そのファイルに関連したファイルも一度に読み込みたいんです。

セーブダイアログで選択して保存する際も、他の関連するファイルも一度にセーブしたいです。

分かりにくくてごめんなさい(>_<)
470デフォルトの名無しさん:2005/08/11(木) 18:00:31
OpenDialog1.FileName にロードするファイルの位置が入ってるから

ExtractFileDir(OpenDialog1.FileName) でフォルダパスに変換して
それに好きなファイル名足してロードしてください

関数の名前うろ覚え
471デフォルトの名無しさん:2005/08/11(木) 18:17:27
ありがとうございます(>_<)

OpenDialog1.FileName :='';
if OpenDialog1.Execute then
ロードする位置.LoadFromFile(OpenDialog1.FileName);
のあとにExtract 〜
と記述すればいいんですか?
472デフォルトの名無しさん:2005/08/11(木) 18:55:09
var
 AFileDir: string;

(中略)

// OpenDialog1.FileName :=''; 要らない
if OpenDialog1.Execute then
begin
 ロードする位置.LoadFromFile(OpenDialog1.FileName);
 AFileDir := ExtractFileDir(OpenDialog1.FileName);
 別のロードする位置.LoadFromFile(AFileDir + '別のファイル名');
 別のロードする位置その2.LoadFromFile(AFileDir + '別のファイル名その2');
end;


後は自分でがんばって
473デフォルトの名無しさん:2005/08/11(木) 19:00:06
そのファイルとはいったいどういう種類のファイルなのだ。すべてテキストファイルなのか、画像ファイルや音声ファイルは
ないのか? 答えようがないぞ。

 たとえば拡張子が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
みなさんありがとうございます(>_<)

ファイルはストリンググリッドです。

試してみて、だめだったらまた質問します☆
475デフォルトの名無しさん:2005/08/11(木) 19:16:37
☆とか止めてください(>_<) (>_<) (>_<)
476デフォルトの名無しさん:2005/08/11(木) 22:18:54
画面のハードコピーを取る方法おしえてください。
ボタンをクリックすると、直接プリンターから出力されるといったかんじでやりたいです
477デフォルトの名無しさん:2005/08/11(木) 23:21:50
>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オブジェクトを使えば印刷できるんじゃないかな?
478デフォルトの名無しさん:2005/08/12(金) 00:48:26
TDBGridで、スクロールされたイベントを検出できますか?
479デフォルトの名無しさん:2005/08/12(金) 05:03:57
とりあえず日本語がおかしい
480デフォルトの名無しさん:2005/08/12(金) 05:30:50
OnMouseWheelUpとかなかったっけ
なかったらウィンドウメッセージを察知してがんばれ
481デフォルトの名無しさん:2005/08/12(金) 08:26:02
>>478
TopLeftChangedというメソッドをオーバーライドすれば出来る
482デフォルトの名無しさん:2005/08/12(金) 08:47:45
そもそもDBGridのスクロールを検出して何がしたいんだろう。
これっといって用途が思い浮かばないんだが。
483デフォルトの名無しさん:2005/08/12(金) 09:14:36
>>482
思い浮かばないなら黙っててください
484デフォルトの名無しさん:2005/08/12(金) 09:33:12
subversionのAPIをDelphiから操作できますか?
485デフォルトの名無しさん:2005/08/12(金) 10:15:11
SCC APIだかsvn APIのソースをBCCでビルドすればできるんじゃないの。
自分は楽だしGUIだからTortoiseProc.exe呼んでるけど。
486デフォルトの名無しさん:2005/08/12(金) 10:32:42
横から割り込みだが
SubversionのEXEにパラメータを送るだけじゃ駄目なのかな?
487デフォルトの名無しさん:2005/08/12(金) 10:38:18
ヒント:API
488486:2005/08/12(金) 10:46:42
SCC APIって資料あります?
なんか見つからないのですが orz
489デフォルトの名無しさん:2005/08/12(金) 17:37:55
memoで各行の1桁目の文字を効率よく調べる方法はありますか?

for i := 0 to memo1.Lines.Count-1 do
begin
p := PChar(memo1.Lines[i]);

if p^ = '@' then...

なんてやってたんですがこのやり方はどうなのかなと思ったので。
490デフォルトの名無しさん:2005/08/12(金) 18:01:40
c := memo1.Lines[i];
でいいだろ。p^なデリファレンスよりは速い。
491デフォルトの名無しさん:2005/08/12(金) 18:35:28
: for i:=0 to memo1.Lines.Count-1 do
: if Length(memo1.Lines[i])>0 then
: if memo1.Lines[i][1]='@' then ・・・
492489:2005/08/12(金) 19:43:39
>>490-491
memo1.Lines[i][1]なんてできるんですね。
御二方、ありがとうございました。
493デフォルトの名無しさん:2005/08/12(金) 19:49:03
AnsiStringでは
s := '';
c := PChar(s)^;
でc = #0になることが保証されているからLengthのチェックは必要ない。
だから
c := PChar(Memo1.Lines[i])^;
if c = '@' then ...
で桶。
494デフォルトの名無しさん:2005/08/12(金) 22:05:15
Delphiと直接関係なくてスマソなんだが、
USBから232Cへの変換ケーブル使った通信って、
通信がとぎれがちになる?
495デフォルトの名無しさん:2005/08/13(土) 01:03:07
スレ違い
496デフォルトの名無しさん:2005/08/13(土) 02:31:20
違いすぎw
497デフォルトの名無しさん:2005/08/13(土) 11:06:15
TStringGridを派生して、
列や行の幅を変更したときにそれを通知するイベントを発生させたいのですが、
どうすればいいのでしょうか?
498デフォルトの名無しさん:2005/08/13(土) 11:36:27
>>497
ColWidthsChanged と RowHeightsChanged をオーバーライド、かな
499497:2005/08/13(土) 11:42:11
どうもです
500デフォルトの名無しさん:2005/08/13(土) 18:17:37
パーソナルでActionManagerが見つからないけど、何で?
501デフォルトの名無しさん:2005/08/13(土) 18:24:56
Personalにはついてないから
502デフォルトの名無しさん:2005/08/13(土) 18:25:33
>>501
ありがとう。
503デフォルトの名無しさん:2005/08/13(土) 18:35:56
チュートリアルの範囲ならTActionListがほぼ同機能
504デフォルトの名無しさん:2005/08/13(土) 18:37:22
Del6のActionManagerはどーせバグバグだし
505デフォルトの名無しさん:2005/08/13(土) 20:35:00
沢山出ているパッチを全部当てたら少しはマシになるんじゃないか?
http://homepages.borland.com/strefethen/index.php?pagename=Main.Delphi6
506494:2005/08/13(土) 22:15:01
うははははは、やっぱり
507デフォルトの名無しさん:2005/08/13(土) 22:19:28
>>494
スレ違いだが…

速度が速過ぎるんじゃね?
508デフォルトの名無しさん:2005/08/16(火) 05:50:55
D6Perを使っています。
稀に for 文の挙動がおかしくなります。

 for ps := psA to psB do // ps は列挙型

としても実行してみると

 for ps := psB + 1 downto psA + 2 do

のような動作になってしまう事があります。
ならない場所は何度実行してもなりませんが、なる場所は何度実行しても上記のようになってしまいます。
カウンタ変数に Integer を使ったり、while 文を使えば問題なく動くのですが…
何が原因なのでしょうか?
509デフォルトの名無しさん:2005/08/16(火) 05:58:43
for i := m to n doが最適化の都合で
for i := n downto m doに置き換えられることはFAQだけど
計算結果が異なるような形に置き換えられることはないよ。
510508: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 を覗くと範囲外の値になっています。
配列のインデックスにそのまま使っているので変なことになってしまうんです。
511デフォルトの名無しさん:2005/08/16(火) 07:48:53
10年使ってるけどそんな経験は1度もないなぁ
自分のコードを疑ってみれ。それから509氏のも考慮して。
512デフォルトの名無しさん:2005/08/16(火) 07:58:45
>>510のコードだけでは実行できないので、実行・検証できる最低限のコードが見たいな。
513デフォルトの名無しさん:2005/08/16(火) 11:38:55
for ps := Low(psCount) to High(psCount) doと書いたほうがいい。
結果が変わるとも思えないけど
514508:2005/08/16(火) 18:15:57
どうやら for 文も、配列の範囲も最適化で変化していたようで、
結果的に正常に動いていました。
デバック関連の機能で覗くと最適化は考慮されないんですね。
失礼しました。
515デフォルトの名無しさん:2005/08/16(火) 22:21:39
GetProcAddressで取得したアドレスの解放はどうすれば良いのですか?
Button1を押したらHoge.dllからアドレスをグローバル変数に読み込み、
Button2を押したらその変数を解放したいと思っています
516デフォルトの名無しさん:2005/08/16(火) 22:57:17
>>515
MSDN見たの? 解放するのはむしろLoadLibrary()でとってきたハンドルのほうじゃないかね。
517デフォルトの名無しさん:2005/08/16(火) 23:09:52
ハンドルはFormのOnCreateで取得、OnDestroyで解放させています
…もしかして、
var
Hoge: procedure;stdcall;
という変数にGetProcAddressでアドレスを割り当てたとしても、
Hoge:= nil;
とすれば良く、解放の必要はない、ということでしょうか?
518デフォルトの名無しさん:2005/08/16(火) 23:35:09
>>517
GetProcAddressはDLL内の関数テーブルの値を読み取っているだけ(アドレスを割り当てているわけではない)なので
Hoge:=nil;も不要。
単に配列の値を読み取っているようなものだと思えばよろし。
519デフォルトの名無しさん:2005/08/16(火) 23:37:38
アドレスの解放
アドレスの解放
アドレスの解放
アドレスの解放 www
520デフォルトの名無しさん:2005/08/16(火) 23:47:05
そんなに笑わなくたって良いじゃない。。。
521デフォルトの名無しさん:2005/08/16(火) 23:48:27
CloseHandleでもやってなwwwwwwwwwwwwwwwwwww
522デフォルトの名無しさん:2005/08/16(火) 23:49:41
>>520
まあ、くだすれだし気にすんな
523デフォルトの名無しさん:2005/08/16(火) 23:51:24
ああ、なるほど、だからどのサイト見ても
GetProcAddressで割り当てた後の処理はなかったんですか
笑いを提供した代償としてやっと納得を得られました
ありがとうございました
524デフォルトの名無しさん:2005/08/17(水) 02:52:31
>>522
参照と実体の区別がついてないのは気にすべきだと思うけどね
525デフォルトの名無しさん:2005/08/17(水) 13:58:25
お邪魔します。質問させて下さい。
DELPHIにて二次元配列の定数を記述するにはどのように記述すればよいのでしょうか?
宜しくお願いします。
526デフォルトの名無しさん:2005/08/17(水) 14:26:42
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;
527デフォルトの名無しさん:2005/08/17(水) 15:11:13
このスレッドはBorland(ボーランド)のDelphi(デルファイ)について、
他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。
528デフォルトの名無しさん:2005/08/18(木) 02:30:35
キーボードのキーを入力する命令はどうやって書けば良いのでしょうか?
ヘルプ見たんですがよく分かりませんでした…
529デフォルトの名無しさん:2005/08/18(木) 02:35:26
>>528
Keybd_event(VK_END, 0, 0, 0);//キーを押す
Keybd_event(VK_END, 0, KEYEVENTF_KEYUP, 0);//キーを離す

※「仮想キーコード(Virtual-Key Codes)」を検索。
※※「押す」だけだと、アレなので「離す」もセットで(色々実験すれば
意味が分かると思う)。
530デフォルトの名無しさん:2005/08/19(金) 00:01:23
Delphi6 PersonalでWindows XP ThemeManagerのインストールが出来ません。
Delphi 6 Personal.txt の通りにやったんですが、どうしても出来ません。
やり方教えて下さい。
531デフォルトの名無しさん:2005/08/19(金) 03:53:12
SHINE
532デフォルトの名無しさん:2005/08/19(金) 04:42:37
The sun will shine on a voyager who waits.
533デフォルトの名無しさん:2005/08/19(金) 08:13:31
お邪魔します。Delphi5です。
現在PCにログオンしているユーザの権限
(制限ユーザか管理者か、或いはAdministratorかそれ以外か)の情報を取得する 方法を、
お教え下さい。
OSはWindows系です。
534デフォルトの名無しさん:2005/08/19(金) 09:42:01
>>533
GetUserNameでログオンユーザー取得、NetUserGetLocalGroupsでログオンユーザーが所属するグループ取得。
NetAPI系はDelphiでは扱いが面倒だけど。ガンガレ。
Win2000以降でかつ、Administratorsグループか、そうでないかだけが判ればいいのならIsUserAnAdminを
使う方が簡単かも。
535デフォルトの名無しさん:2005/08/19(金) 11:18:59
ソフトウェアキーボドのように、フォーカスを無視する方法を
お教え下さいエロい人
536デフォルトの名無しさん:2005/08/19(金) 11:34:58
SpeedButton 使え
537デフォルトの名無しさん:2005/08/19(金) 11:40:11
あぁ、フォーム自体がアクティブにならないようにするって事
538デフォルトの名無しさん:2005/08/19(金) 11:46:44
GetNextWindow()で得られるハンドルって、直前にアクティブだったウィンドウの
ハンドルなのかね。もしそうなら使えるんじゃないかなあ
539デフォルトの名無しさん:2005/08/19(金) 11:49:20
>>535,537
質問の仕方が悪いのでお前のケツマンコを犯す事にした。
540デフォルトの名無しさん:2005/08/19(金) 19:34:18
タイムタグ([hh:mm:ss])に連動して歌詞表示させたいんですがよくわからないんです
正規表現使って云々ってぐらいは解ったんですけど・・・(´・ω・`)
最小限のサンプルでいいんでどなたか作ってくれませんか?
541デフォルトの名無しさん:2005/08/19(金) 20:06:05
>>540
サンプルとかいわれてもなー

エスパー能力を発揮すると、正規表現で表示するタイミングと表示する内容を取得し、
それにしたがって逐次出力していけばいいのでは?
542デフォルトの名無しさん:2005/08/19(金) 20:09:56
hh:mm:ssを適当に分割して
StrToIntで数値にして、
時刻になったら表示すればいいんでないの?

正規表現なんて特に必要だとは思わない。
543デフォルトの名無しさん:2005/08/19(金) 22:28:58
Delphi使いって馬鹿ばっかなんだな。
こんなサル以下なPQなんだったら辞めろよって感じ。
544デフォルトの名無しさん:2005/08/19(金) 23:46:30
まっ、いろいろいるわな
545デフォルトの名無しさん:2005/08/20(土) 01:32:54
まっ
546デフォルトの名無しさん:2005/08/20(土) 01:46:37
PQって何?
547デフォルトの名無しさん:2005/08/20(土) 02:12:44
PGのアナグラム
548デフォルトの名無しさん:2005/08/20(土) 05:18:00
TOleContainer に Word 文書をロードした後、
その Word 文書を操作することは可能でしょうか?
549デフォルトの名無しさん:2005/08/20(土) 11:51:33
>>540
int h, m, s;
sscanf("[%02d:%02d:%02d]", &h, &m, &s);

bccで作った関数ってDelから呼べたっけ?
BCBからPascalユニットの関数やクラスは呼べるけど‥‥
550デフォルトの名無しさん:2005/08/20(土) 12:00:09
可変個引数のは無理っぽい。
551デフォルトの名無しさん:2005/08/20(土) 12:36:58
EdMaxのプラグインを作りたいのですが
DelphiのサンプルソースかSDKってどこかにありませんか?
552デフォルトの名無しさん:2005/08/20(土) 16:27:29
delphi6とdelphi2005って別物ですか?
関数とかの互換性はありますか?
553デフォルトの名無しさん:2005/08/20(土) 16:40:29
Delphi買いたいんだけど
Borland Delphi 7.1 Professional(http://www.amazon.co.jp/exec/obidos/ASIN/B000AY6Z00/249-5773639-4421953

Borland Delphi 2005 Professional (http://www.amazon.co.jp/exec/obidos/ASIN/B0006INAFI/249-5773639-4421953
はどっちが最新なの?
7.1のほうは発売予定日が2005/09/20
みたいなんだけど
554デフォルトの名無しさん:2005/08/20(土) 17:05:03
>>548
TOleContainer.OleObjectInterface で IOleObject インターフェイスを受け取って、
それに対して QueryInterface で IDispatch を取得すると、
それが Word の Document オブジェクトのオートメーション オブジェクト
になっているかも。
555デフォルトの名無しさん:2005/08/20(土) 18:53:40
>>552
互換性はある。

>>553
Delphi 2005=最新。Delphi 7=実用的。
ちなみに年末にDelphi 2006が出る。
556デフォルトの名無しさん:2005/08/20(土) 21:20:45
>>553
6perでも触って2006の評判見つつ7買うか2006買うか決めるのがいい気がする。

ちなみに2005はPascalの他にC#が、2006はC#とC++(C++Builder統合)が使える。
557デフォルトの名無しさん:2005/08/20(土) 21:29:31
>>555
>>556
ありがとうございまっす
558デフォルトの名無しさん:2005/08/20(土) 23:10:50
開発力の乏しい会社がMacOSXだのDelphiだので毎年金徴収する税金商法始めると悲惨だな。
バグ修正と新機能に伴うバグ抱き合わせで押し付けられて常にバージョンアップを強いられる。
まあ信者はそれがたまらんのだろうけどな。
559デフォルトの名無しさん:2005/08/21(日) 03:01:21
>558
そうだよな。MSDN 税金は高いし。
OSX みたいに OS に IDE 付き揮発環境がくっついてくるとかしてくれないと。
まぁ信者はそれがたまらんのだろうけどな。
560デフォルトの名無しさん:2005/08/21(日) 14:10:05
>>558
あっちで馬鹿にされたからって必死でスレ違いしなくてもいいよ
561デフォルトの名無しさん:2005/08/21(日) 20:35:39
>>559
AMDでOS作ろう
562デフォルトの名無しさん:2005/08/21(日) 22:30:13
( ○Д○)はぁ?
563デフォルトの名無しさん:2005/08/22(月) 09:57:56
Delphiでジョークソフトを作成しています。
実行した瞬間、パソコンが爆発するようなプログラムが組みたいんですが、可能でしょうか?
あと、画面から手が出てきて相手の顔をぶん殴るようなソフトが作りたいです。
誰か教えてください
564デフォルトの名無しさん:2005/08/22(月) 10:00:46
それに対応したパソコンやモニターを作る必要がありますね。
そこから手がけてみてはどうでしょうか。
565デフォルトの名無しさん:2005/08/22(月) 12:17:22
すみません。>>563は知人です。今すぐ連れて帰りますので。。
ご迷惑をお掛けしました。
566デフォルトの名無しさん:2005/08/22(月) 14:03:33
>>563
えら呼吸にしてみたら?
567デフォルトの名無しさん:2005/08/22(月) 19:45:39
爆音で鼓膜とスピーカーを殺るくらいなら
568デフォルトの名無しさん:2005/08/22(月) 21:58:56
>>563が望んでるプログラム組めたけどぜってーやらねー(ケラケラプケラ
中学生はプラクラでも作るのがお似合いなんだよ(プケラ
569デフォルトの名無しさん:2005/08/22(月) 22:02:27
>>563=568
面白いと思ってるのか?
570デフォルトの名無しさん:2005/08/22(月) 22:10:36
わろすわろす
571デフォルトの名無しさん:2005/08/22(月) 22:19:09
purakura?
572デフォルトの名無しさん:2005/08/22(月) 23:58:21
すいません、教えてください。
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)が帰ってきます。

どなたかお助け願えませんか。
573デフォルトの名無しさん:2005/08/23(火) 00:25:38
(Sender is TidFTP)=Falseということは、
SenderはTidFTPのインスタンスではなく別の型のインスタンスが起こしたイベントだ。(本来あり得ない筈だがなぁ)
ClassNameプロパティの値を調べてみれ。

ちなみにキャストはas演算子使った方が安全。
574572:2005/08/23(火) 00:27:17
あ、切り分けで補足しますと
自作プログラムだけではなくIndyのデモで、TidFTP(Sender).Tag等を
調べても同じ結果になります。
Label1.Caption:=InttoStr(TidFTP(Sender).Tag);
みたいなコードを貼り付けて調べました。
575572:2005/08/23(火) 00:31:59
>>573
アドバイスありがとう。本来ありえないですよねえ。
is演算子を調べると、Senderがnilの時にもFalseになるらしい。だから何?といわれるとそれ以上は
わからないのですがなんか手がかりになるかしら?
ClassNameプロパティとas演算子は知りませんでした。明日出社したら試してみます。
576デフォルトの名無しさん:2005/08/23(火) 04:37:56
エクセルみたいな感じで、StringGridに入力したデータを保存する方法ってありますか?
TStringListは保存できるみたいなんですが・・・
577デフォルトの名無しさん:2005/08/23(火) 04:42:04
すいません、ググったら分かりました。
それにしても、結構不便なものなんですね・・・
エクセルみたいに一つのファイルに保存できたら便利そうなんですが。
578デフォルトの名無しさん:2005/08/23(火) 07:20:58
>>577
自分で書くんだよ。
579デフォルトの名無しさん:2005/08/23(火) 08:41:55
>>577
PGの言葉とは思えんな
580デフォルトの名無しさん:2005/08/23(火) 09:00:49
> エクセルみたいに一つのファイルに保存できたら便利そうなんですが。

一つのファイルに保存出来るけど。
なんでも作れる、ってことは、エクセルみたいな専用ソフトをつくるときには
ちゃんとコードを書くんだよ。プログラミングとは、そういうことなんだ。
581デフォルトの名無しさん:2005/08/23(火) 09:07:10
SaveToCsvFileメソッドがないのは明らかに某の怠慢だな
582デフォルトの名無しさん:2005/08/23(火) 09:56:22
プロセス間共有メモリクラスがないのも明らかに某の怠慢だな

で、TStreamから派生させたんだけど間違ってないよな?
583デフォルトの名無しさん:2005/08/23(火) 10:23:24
レコードへのポインタとかのマスク被せて使うこと多いから
Pointer 型プロパティ持たせてアクセスさせてる。
584デフォルトの名無しさん:2005/08/23(火) 20:49:32
テキストファイルからデータの集合体を取り出したいのですが、いい方法はないでしょうか。
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に代入するのを繰り返す方法なのですが、これよりも効率のいい方法があったら教えて下さい。
585572:2005/08/23(火) 23:37:21
573の助言に従い、SenderのClassnameプロパティを調べてみると...
TIdSimpleServer が返ってきました。
ヘルプを見るとIndyのいろんなクラスで使われてるらしいですが、
どう使われてるかわらかんし、そこを手がかりにイベント発生元の
インスタンスを調べようがありません。
as演算子は不正な型キャストでコンパイル通りませんでした。

なんとかならないものですかね?
引き続きご助言募集中です。
586デフォルトの名無しさん:2005/08/24(水) 02:53:20
Indyは
正直そういう奴だ
587デフォルトの名無しさん:2005/08/24(水) 04:32:55
>>858
> TIdSimpleServer が返ってきました。
正解。
TidFtp(TidSimpleServer(Sender).Owner).Tag などと書くらしい。
以下、受け売りw

OnWork のSender はidFtp そのものではなく、idFtp が作成したFDataChannel
Owner を見れば、idFtp が分かるはずだが、肝心のオーナーがnil
よってIndy 9の場合、ソースを変更する必要がある。
http://groups.google.co.jp/group/borland.public.delphi.internet.winsock/msg/862c35e8cc99b759?hl=ja&
588デフォルトの名無しさん:2005/08/24(水) 04:39:08
> OnWork のSender はidFtp そのものではなく、idFtp が作成したFDataChannel
OnWork のSender はidFtp そのものではなく、idFtp が作成したTidSimpleServer (FDataChannel フィールド)
と読み替えてくれ。
589デフォルトの名無しさん:2005/08/24(水) 07:17:09
DelphiでWebサーバーからHTMLを取得したあと
JavaScriptのような
document.getElementById("hoge");
こんな感じの命令でHTMLを解析できるライブラリってないでしょうか?
590デフォルトの名無しさん:2005/08/24(水) 07:21:26
2chブラウザ作りたいなら先に既存のソース嫁
591デフォルトの名無しさん:2005/08/24(水) 08:09:14
>>590
なるほど!
592デフォルトの名無しさん:2005/08/24(水) 08:46:19
>>589
HTMLパーサーを使えばいいんじゃないか。ググルと色々出てくる。
Delphiで有名なのって何だろ?
593デフォルトの名無しさん:2005/08/24(水) 09:11:26
>>592
ぐぐってみたのですがなかなか見つかりません。
キーワードを教えてもらえませんか?
594デフォルトの名無しさん:2005/08/24(水) 09:16:11
板リストの解析だけなら正規表現だけで十分だろ。
595デフォルトの名無しさん:2005/08/24(水) 09:16:44
delphi html parser
596デフォルトの名無しさん:2005/08/24(水) 09:22:05
>>594
すみません。本当に2ちゃんブラウザを作るわけではないので。

>>595
さんくす
597デフォルトの名無しさん:2005/08/24(水) 09:29:59
有料だと、この辺りかな?

ATagParser
http://www.compnet101.com/atagparser/

DIHtmlParser
http://www.yunqa.de/delphi/
598デフォルトの名無しさん:2005/08/24(水) 10:00:11
http://www.torry.net/pages.php?id=216

Delphiやってると英語も得意になったりする
599デフォルトの名無しさん:2005/08/24(水) 10:03:58
>>589
TWebBrowser
600デフォルトの名無しさん:2005/08/24(水) 10:17:33
・JS厨
・検索ワードを尋ねる
・「なるほど!」と言う

なんか知り合いに凄く似てる奴がいるんだが気のせいだろうか。
このスレも勿論見てるしそいつ。
601デフォルトの名無しさん:2005/08/24(水) 10:30:20
正体がばれたようなので消えますね
602デフォルトの名無しさん:2005/08/24(水) 10:35:31
>>601
何か悪い意味で取られてしまったようなのですが、追い出そうとしてるとかいう事は
ありませんよ(笑
似たような奴はいくらでもいるし俺の知り合いとあんたは別人かもしれないじゃない
ですか。ただ似てたから言いたくなっただけですよ。
603デフォルトの名無しさん:2005/08/24(水) 10:54:00
>>602
では復活しました。

HTMLパーサー自分で作ってみようと思います。
完全なものではなくていいので。
604デフォルトの名無しさん:2005/08/24(水) 11:02:12
IHTMLDocument[2-5]インタフェース使えばいいだろうに
HTML上のスクリプトと同じ感じで使えるぞ
605デフォルトの名無しさん:2005/08/24(水) 11:36:03
プロジェクトの保存について、
[ファイル]-[プロジェクトに名前を付けて保存...]
から
保存ダイアログにデフォルトで
$(DELPHI)\Projects\
のディレクトリが表示されますが、
これを、別の任意のディレクトリに設定
する方法をご教示ください。

[ツール]メニューでも該当の設定を
見つけることができませんでした。
606605:2005/08/24(水) 11:44:06
IDEの作業フォルダを変更することにより、
解決しました。
607デフォルトの名無しさん:2005/08/24(水) 11:50:30
>>605
デフォルトの保存先 = カレントディレクトリ
IDE起動用ショートカットの作業フォルダ変更しれ
608605:2005/08/24(水) 11:53:30
>>607
サンクスコ
それで解決しました
609デフォルトの名無しさん:2005/08/24(水) 16:45:35
一つ上のディレクトリを指すにはどうしたらいいですか?  ../  これに変わるものとかありますか?
610デフォルトの名無しさん:2005/08/24(水) 16:49:14
ExtractFilePath,ExtractFileDir
611デフォルトの名無しさん:2005/08/24(水) 18:15:08
>>609
ExpandFileName(pathstr + '\..')
とかどうかな?
612572:2005/08/25(木) 00:20:01
>>573,587
やったやったアリガトウ!うまくいったよ。587の方法で完璧。
ただ、TIdFTPのソースを書き直した後、それを更新するやり方
で半日てこずった。最初いくらやっても書き直しが反映されないの。
なんかわかりにくいよね。2005になってなんか変更あった?

他の人のためにパッケージ更新のやり方書ければいいんだけど、
あれこれやってたらいつのまにか出来たって感じなので残念ながら
まとめきれん。
恩返しできなくてスマン
613デフォルトの名無しさん:2005/08/25(木) 08:57:04
> なんかわかりにくいよね。2005になってなんか変更あった?
とってもw
614デフォルトの名無しさん:2005/08/25(木) 13:01:12
VBとDelphiでどっちが優れていますか?
巷の評判ではVBの圧勝と聞きました。
615デフォルトの名無しさん:2005/08/25(木) 13:03:57
自己解決しました
616デフォルトの名無しさん:2005/08/25(木) 13:06:01
最新版同士ならVBだね
617デフォルトの名無しさん:2005/08/25(木) 13:09:47
Delphiはもうすぐ死滅します。
618デフォルトの名無しさん:2005/08/26(金) 09:20:22
ある特定のソフト使ってると、たまにDelが勝手に立ち上がってCPUウィンドウが表示される。
閉じようとすると「デバック中ですが何か?」ってきいてくる。
で、閉じるとそれまで使っていたソフトも強制終了されてしまいます。
これと防ぐのって、ユーザーを変えてDelとその特定のソフトをインスコしないと駄目?
PC自体別じゃないと駄目?

619デフォルトの名無しさん:2005/08/26(金) 09:28:05
特定のソフトってのを具体的に上げた方がよいと思われ
620デフォルトの名無しさん:2005/08/26(金) 09:37:40
その特定のソフトってのがバカなんでしょう
621デフォルトの名無しさん:2005/08/26(金) 09:38:46
アプリがアボーンしてJITデバッガにDelが指定してあるだけだろ
622デフォルトの名無しさん:2005/08/26(金) 10:11:43
VC入れてる人はVCが起動します
不思議だな。
623618:2005/08/26(金) 10:12:24
>>619
仕事で使う専用ソフトなので一般的ではないのです。
お客には一応売ってはいますが。

>>620
ハイ、バカです。よくこんなものン百万で売る気になるなと。
買う方も買う方だと、思ってます。

>>621
その指定ってどこで解除出来るのでしょう?

書き忘れましたが、WinXPを使っています。
ユーザーを分ければ回避出来ますでしょうか?
624デフォルトの名無しさん:2005/08/26(金) 10:32:36
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
のDebuggerにDelphiが指定されてるだろうから、それを消すだけでいいはず。
625デフォルトの名無しさん:2005/08/26(金) 11:13:49
TMemoで、超長い行も改行しない方法ありますか?
626デフォルトの名無しさん:2005/08/26(金) 12:30:43
WordWrapをFalse
もともと改行コードが入っていると駄目だが
627デフォルトの名無しさん:2005/08/26(金) 12:42:08
外部例外が出て落ちてしまうのですが、これはどのようなときに発生するのでしょうか?
普通の例外とは違うのですよね?
628デフォルトの名無しさん:2005/08/26(金) 12:45:34
> 普通の例外とは違うのですよね?
Delphiの外で、よくわからん例外が発生しているつー事だ。
629デフォルトの名無しさん:2005/08/26(金) 23:00:06
データの保持にTMemoryStreamを使おうと思っているのですが。

Form上にAという作業領域があって、B、C、D〜というストリームにデータが入っています。
で、LoadFromStreamでA←Bと読み込んで、作業終了したらまたA→BとSaveToStream。
指示ごとにA←C、A→C、A←D、A→D………というふうに。

TMemoryStreamを無数保持する場合の弊害とかはないですか?
どうも中間オブジェクトとしてしか使われるところを見ないものですから…。
630デフォルトの名無しさん:2005/08/27(土) 00:38:15
TMemoryStreamはヒープ上に確保したメモリを
TStreamに合わせて使えるようにしただけのクラス。

当然相応にメモリを消費するが…
631デフォルトの名無しさん:2005/08/27(土) 00:58:09
うるう年なら@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でやるにはどうしたらよいでしょうか?


632デフォルトの名無しさん:2005/08/27(土) 01:21:29
>>631
SysUtils.pasにMonthDays定数がある。

var
LeapYear: Boolean; //閏年か否か
AMonth: Integer;
begin
LeapYear := False;
AMonth := 2;
ShowMessage(IntToStr(MonthDays[LeapYear, AMonth]));
end;
633Delフサギコ ◆A6VzDeLphI :2005/08/27(土) 01:23:18
  ∧,,∧
 ミ,,゚Д゚彡
 ミつ日(ミ
こんばんは。

簡単なテキスト整形をしたくなりました。

行頭禁則と行末禁則文字指定ができて
指定桁数折り返し整形処理を
行うようなコード、どなたかすでにお書きじゃないかしら。

知ってたらおしえいてくださいま。

なけりゃ、作るかしら(*´・д・)(・д・`*)ネー
634デフォルトの名無しさん:2005/08/27(土) 01:40:15
>>632

631の者です。
有難うございました。
先ほど閏年を計算してくれる関数があるのを知って驚いてたばかりなので
日にちの定数まで存在するんですね・・・Delphiに圧倒!

数行必要なプログラムが数文字にばけました、驚きです。
途方に暮れていたので有難うございました。
助かりました。

MonthDays[IsLeapYear(year),month]
635デフォルトの名無しさん:2005/08/27(土) 08:56:08
timerを使用してアラームを作ろうと思うのですが
うまく動きません、
memo1.line[0]とnow2 には200508270800という文字列が入っています。
これが一緒なら音を鳴らすというプログラムです。

まだ始めたばかりでプログラムが汚いですがお願いしますTT

文字数が多いのでプログラムの部分は次へ
636デフォルトの名無しさん:2005/08/27(土) 08:56:42
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?? だかにすればどうかなぁ
638デフォルトの名無しさん:2005/08/27(土) 10:47:42
>>630
試してみました。
比較は、保持内容がテキストなので、TStringList。
for内でCreateと40kほどのファイルをLoadFromFile。
で、300ほど回して、タスクマネージャで見てみました。

TMemoryStreamは、増約12M。
TStringListは、増約25M。

消費量はTMemoryStreamのほうが小さいですけど……ううむ。
639デフォルトの名無しさん:2005/08/27(土) 13:08:07
>>638
>>630が言ってるようにTMemoryStreamは動的確保したメモリブロックにTStreamのインタフェース乗っけただけのクラスだから
GB単位とか無茶なことやらない限りは問題ない。
640デフォルトの名無しさん:2005/08/27(土) 17:40:33
TreeViewで複数の項目の選択をすることが可能ですか?
641デフォルトの名無しさん:2005/08/27(土) 17:48:46
MultiSelectっていうPropertyで設定可能
ただし、扱いには少しくせがあるから気をつけろ
642デフォルトの名無しさん:2005/08/27(土) 18:52:42
くせがないときの動作ってどんなものか説明してごらん
643デフォルトの名無しさん:2005/08/27(土) 21:31:41
ふさぎこたんは、えでぃたこんぽのそーすみたほうが、はやいとおもいます
644デフォルトの名無しさん:2005/08/28(日) 13:03:47
s2dotnetをDelphi 2005のC#プロジェクトとして取り込みたいんだけど
ソリューションが複数ある場合、なんか上手くいかない orz

なんかコツがあるのだろうか?
645デフォルトの名無しさん:2005/08/28(日) 13:06:59
>>644
談話室と間違えて投稿しましたが、わかる方が居たらお願いします mOm

s2dotnet
http://s2dotnet.oscj.net/
646デフォルトの名無しさん:2005/08/28(日) 16:10:33
標準で割り当てられてるショートカットキーは解除可能ですか?
alt+F4とかF10とか
647デフォルトの名無しさん:2005/08/28(日) 16:21:48
>>646
OpenToolsAPIの付属デモを弄って、新しいショートカットキーのセットを作れば可能。
拡張モジュールじゃ駄目かも。
648デフォルトの名無しさん:2005/08/28(日) 17:16:36
> OpenToolsAPIの付属デモ
ToolsAPI\Editor Keybinding デモ
649デフォルトの名無しさん:2005/08/28(日) 20:08:10
おせわになります。

Delphi6で、制御系のプログラム組んでるんですが、作ったアプリのタイトルバーをクリックしてるとメッセージ関係が止まってしまって困っています。
タイトルバーをクリックしたまま動かす(ドラッグ)と、ウィンドウの移動モードになり回復するのですが、クリックしたまんま動かさないと、止まったまんまです。
とりあえず、現状では WM_NCLBOTTONDOWN が来たら mouse_event で4ポイントほどマウスを動かしてこれを何とか回避してますが、当然ながら、いまいちすっきりしません。

#ファイルコピーの時のプログレスバーも、タイトルバーをクリックしてると止まるので
#Windowsの仕様っぽいかんじですが。。。

で、質問ですが、タイトルバーをクリックしても止まらないようにする方法はないでしょうか。
または、マウスを移動することなく、ウィンドウを移動モードにする方法をお教え願います。
よろしくお願いいたします。。
650デフォルトの名無しさん:2005/08/28(日) 20:46:51

>>649
それは下位デバイスとの通信中だけに起きる現象か?
そうならば解決させる方法は通信部分をスレッド化するしかない。
そうでないならば正しくメッセージ処理が行われていないだけ。
651デフォルトの名無しさん:2005/08/28(日) 22:19:36
>649
タイトルバーを掴んだときの動作はWindows固有の問題。
解決方法は >650 のとおりスレッド化。
まぁ >649 のやり方で支障がないならokのような。
652649: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;

653649: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.
654649:2005/08/29(月) 00:56:41
たしかに、すべてをスレッド化すれば止まることはないのですが、外部との通信、イベント通知、などで、SendMessage をつかうと、そこで止まってくれます。
また、どうも TEvent なども使うと止まってくれるみたいです。

>>651 さんの言うように、Windows固有の問題とすれば、これはどうしようもないということなんですね。

それでは、マウス移動しないでウィンドウの移動モードに移行する方法というのはどうでしょうか。
WM_COMMAND を飛ばすとかいろいろやってみたのですが、どうもうまくいきません。
>>649 のようにマウス移動させて、逆のマウス移動するというのもやってみましたがそれでもだめなようです。

よろしくお願いいたします。

655デフォルトの名無しさん:2005/08/29(月) 02:25:08
>>652
サンプルに関して言えば、
PostMessageにすると、表示は変だけどカウントアップは止まらない。
Synchronizeなら、ほぼ完璧に見えるが・・・そういう問題ではない?
656デフォルトの名無しさん:2005/08/29(月) 03:51:10
> Windows固有の問題

なんだから、回避するとそれは誤動作の元だろ。
657デフォルトの名無しさん:2005/08/29(月) 06:54:06
条件が一致したら、StringGridの特定セルのフォントカラーを変える、というプログラムを書きたいのですが・・・

つまり、
if 条件 = true then
begin
StringGrid1.Cells[x,y]のフォントカラー=グリーン
end;

といった具合です。

begin
StringGrid1.Cells[x,y].font.color := clgreen ;

なんて文章を考えたのですができずに・・・
分かる方いらっしゃったらよろしくお願いします。
658デフォルトの名無しさん:2005/08/29(月) 08:43:35
>>654
回避すると互換性がなくなって「糞アプリ」のレッテルを貼られるだけだよ
659デフォルトの名無しさん:2005/08/29(月) 09:26:07
>>657
StringGrid OnDrawCell でぐぐれ
660デフォルトの名無しさん:2005/08/29(月) 10:10:37
>>649
>外部との通信、イベント通知、などで、SendMessage をつかうと、そこで止まってくれます。
っ[ Classes.AllocateHWnd関数 ]
TTimerのソース追っかけてみると吉
661デフォルトの名無しさん:2005/08/29(月) 10:11:19
って同一スレッドだと別ウィンドウでもメッセージって止まったっけ?(´・ω・`)
662デフォルトの名無しさん:2005/08/29(月) 12:56:14
同時に動作してるメッセージポンプはひとつだけだからな
663デフォルトの名無しさん:2005/08/29(月) 16:11:18
>>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;
664デフォルトの名無しさん:2005/08/29(月) 16:11:52
{ 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;
665デフォルトの名無しさん:2005/08/29(月) 16:12:56
ありゃ、インデントが。。スマソ
666デフォルトの名無しさん:2005/08/29(月) 16:15:28
ここに書き込むときは全角空白でのインデントがお奨め
667デフォルトの名無しさん:2005/08/29(月) 16:27:38
マルチスレッドの資料ならこのページもオススメ
http://www.wwlnk.com/boheme/delphi/techdoc/dad0010.html

言わずと知れたDelphi Acid Floor
668デフォルトの名無しさん:2005/08/29(月) 16:37:41
Borland - Tips:Delphi マルチスレッドの使用例
http://www.borland.co.jp/tips/delphi/dh004/thread_2.html
669デフォルトの名無しさん:2005/08/29(月) 17:14:53
> ここに書き込むときは全角空白でのインデントがお奨め

お奨めじゃないよ、そんなの。ちゃんと HTML の空白文字で埋めろよ。
そんなアプリ作るの5分で出来るでしょ。
670デフォルトの名無しさん:2005/08/29(月) 17:16:51
テキストエディタの置換機能を使えばよい
671デフォルトの名無しさん:2005/08/29(月) 17:21:51
&nbsp;を半角だっけ
672デフォルトの名無しさん:2005/08/29(月) 17:23:06
YES
673デフォルトの名無しさん:2005/08/29(月) 17:53:43
674ななしへたぐらま ◆XcB18Bks.Y :2005/08/29(月) 21:17:19
>>635-636
例によって遅いレスですいません.
見たところたくさん問題があるようですがコンパイルはうまくいきましたか?
少なくとも以下の行がコンパイルエラーになっているはずですが.

> now2 := IntToStr(nowyear)+Ttime(IntToStr(nowmonth))+Ttime(IntToStr(nowday))+Ttime(IntTostr(nowhour))+Ttime(IntToStr(nowmin));

#ちなみソースコードは特に汚くないと思います.
675デフォルトの名無しさん:2005/08/30(火) 03:43:07
Irvineのソースに入ってる独自のスレッドクラスも結構面白い
676デフォルトの名無しさん:2005/08/30(火) 06:11:45
>>637
FormatDateTime関数を使って現在の時刻を取得する事によって簡単に比較できるようになりました。
ありがとうございます。

>>674
うまくいきました。

Ttimeというのは自分で作成した関数で
入力された数値が一桁、つまり9以下の場合のみ文字列型で0を前方に追加する関数です。
now2には文字列型で200508300630みたいに入ります。

入力された数値と現在の時刻をひとつのIF文で比較するのには文字列型の方がやりやすかったので・・・
まだまだプログラミングは始めたばかりでしかも1から独学でやってるので
知らないことだらけで適切な関数を使えてないのでやはり他の人のプログラムをみると
自分のは汚いなと思います^^;
677デフォルトの名無しさん:2005/08/30(火) 06:16:45
wavファイルの再生方法はPlaySoundを使用する事で解決したのですが
midとmp3の再生方法が全くみつかりません。

これらを簡単に再生できるようになる関数は存在するのでしょうか?
関数が無ければどの様な方法でやったらいいのでしょうか?

あとファイルネームを取得してラベル等で表示させると
C:\aaaaa\aaaa\aaaa\aaa.wavと表示されてしまうのですが
aaa.wavだけを表示するにはどうしたら良いでしょうか?
678デフォルトの名無しさん:2005/08/30(火) 06:28:14
>>675
ソースはどこ?EXEしか見つからない orz
679デフォルトの名無しさん:2005/08/30(火) 07:31:21
つExtractFileName
680デフォルトの名無しさん:2005/08/30(火) 08:01:20
>>677
あらかじめメモリにロードしなくていいならMCI or DirectShow
681デフォルトの名無しさん:2005/08/30(火) 08:14:17
>>663
そんな多くの資料が必要なものかね?
682デフォルトの名無しさん:2005/08/30(火) 09:14:08
>>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;
683デフォルトの名無しさん:2005/08/30(火) 09:28:46
>>678
http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/openirvine/

コンパイルしようと思うと色々大変だけど
684デフォルトの名無しさん:2005/08/30(火) 09:37:05
>>683
おおアリガd
685デフォルトの名無しさん:2005/08/30(火) 13:11:21
Delphi7でデザイン時にComboBoxのItemsプロパティに
×の文字入れると「RichEditの行挿入エラー」とかって表示されて
それ以降Itemsプロパティを編集できなくなってしまいます。
これってうちのだけですか?
686デフォルトの名無しさん:2005/08/30(火) 15:02:17
>>679
できました、ありがとうございます。

>>682
バージョンが古いせいなのかわかりませんが
色々試行しましたが上記の方法ではmidi,mp3ともに再生されませんでした

Mediaplayerを使用してwavとmidiは再生できましたがmp3はだめみたいです。

バージョンは6パーソナルです。
687682:2005/08/30(火) 17:36:57
>>686
なんででしょ?
こちらはD5Proです。
688デフォルトの名無しさん:2005/08/30(火) 18:01:41
DelphiでTLV形式のファイルを扱うようなサンプルページってないですか?
689デフォルトの名無しさん:2005/08/30(火) 19:58:01
>>686
まさかWindows95じゃあるまいな?
98+IE5以降ならmp3は再生できるはずだが‥‥
690デフォルトの名無しさん:2005/08/31(水) 09:58:32
buf[0] := $00; buf[1] := $80; buf[2] := $00
とデータが入っているとき
buffを$008000と認識して32768を得たいのですがどうすればいいのでしょうか?
691デフォルトの名無しさん:2005/08/31(水) 10:40:36
PDWord(@buf[0])^
692デフォルトの名無しさん:2005/08/31(水) 10:51:27
3バイトだけか。691は間違い。
buf[0] * $10000 + buf[1] * $100 + buf[2];
693690:2005/08/31(水) 10:54:59
>>691-692
ありがとうございます。

試行錯誤したところ
sTemp := IntToHex(bBuff[0], 2) + IntToHex(bBuff[1], 2) + IntToHex(bBuff[2], 2);
IntToStr( StrToInt('$' + sTemp) ) );
で出来ましたが間違っていないでしょうか?
694デフォルトの名無しさん:2005/08/31(水) 10:58:03
文字列介したら遅すぎて無駄。
695デフォルトの名無しさん:2005/08/31(水) 11:06:28
間違ってないけど、アフォすぎ
696デフォルトの名無しさん:2005/08/31(水) 11:13:29
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;
697デフォルトの名無しさん:2005/08/31(水) 12:00:59
理解できるなら696がいいね。
698デフォルトの名無しさん:2005/08/31(水) 12:20:50
>>693
WWWWWWWWWWWWWWW
699デフォルトの名無しさん:2005/08/31(水) 12:31:39
というか理解できないならプログラマに向いてないよ
700デフォルトの名無しさん:2005/08/31(水) 13:59:15
くだすれで質問としてコード出してんだからここまで叩く必要はないと思うがwww
701デフォルトの名無しさん:2005/08/31(水) 14:00:32
皆心に余裕がないのさ
702デフォルトの名無しさん:2005/08/31(水) 14:08:35
>>687 >>689

OSはXPです。

実行すると指定した拡張子からはデバイスの種類は判別できません。と警告されます。

MediaPlayerのプロパティーでDeviceTypeを確認してもmp3と表示されてるものは無く
dtAutoSelectで自動に判別させるようにしています。

Delphiのverの問題なのかなと思えてきました。
無料の6パーソナルだと色々と使えない物が多いみたいなので・・・

趣味に7万はきついので製品版購入は難しい;;
703デフォルトの名無しさん:2005/08/31(水) 15:13:36
明らかに Delphi 側の問題では無いだろう
704デフォルトの名無しさん:2005/08/31(水) 15:29:42
>>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
705デフォルトの名無しさん:2005/08/31(水) 16:56:38
>>704
別のPC(XP)では正常に動きましたが、今使用しているPCではやはり鳴りません・・・
何が原因なのでしょうか・・・・・
706デフォルトの名無しさん:2005/08/31(水) 17:39:07
>>705
スピーカーが無いとか・・・
707デフォルトの名無しさん:2005/08/31(水) 18:02:22
Delphi7で音を鳴らしているのですが、マスターボリュームの現在値を取得して、
ボリュームを現在値の10分の一に設定する方法は無いでしょうか?
昔のFDELPHIにあったソースを使って今まではやっていたのですが、この方法だと、
ノートパソコンでしか動作しませんでした。
自作機だとMCIデバイスが見つからないとエラーになってしまうので、どのパソコンでも
使えるように改造したいと思ってます。
708デフォルトの名無しさん:2005/08/31(水) 21:23:15
>>705
メディアプレーヤーでちゃんと音出るか?
709デフォルトの名無しさん:2005/08/31(水) 23:31:43
>>707
Delphi TMixerでぐぐれ
710デフォルトの名無しさん:2005/09/01(木) 12:08:47
>>708
普通に再生するのはできます。

プログラムを通すとなりません。

他のソフト系の影響かと思いOSからインスコしましたがやはりなりません・・・
711デフォルトの名無しさん:2005/09/01(木) 13:26:06
ファイルが壊れてるんじゃないのか
712デフォルトの名無しさん:2005/09/01(木) 18:08:56
ブレークポイントとか、しおりの設定を保存をしたいのですがですが、
設定で保存が効くようになるのでしょうか?

宜しくお願いします。
713デフォルトの名無しさん:2005/09/01(木) 18:20:51
>>712
ブレークポイントは環境オプションのプロジェクトデスクトップの自動保存をONにすれば保存される
714デフォルトの名無しさん:2005/09/01(木) 18:28:07
>>713
ありがとうございました!
715デフォルトの名無しさん:2005/09/01(木) 20:07:41
しおりが保存できないのは有名な話
716デフォルトの名無しさん:2005/09/01(木) 23:27:08
delphi6Personalで、DB『Firebird』に接続する為には、どうしたらいいでしょうか?
717デフォルトの名無しさん:2005/09/02(金) 00:13:27
ちょっと情報古いが
ttp://homepage1.nifty.com/Que/plamo/ib4linux/

しかしDBコンポーネントがPersonalでは存在しないので制約がかなり大きい罠。
718デフォルトの名無しさん:2005/09/02(金) 03:11:54
KeyPressで簡単なタイピングソフトを作っていて

たとえば
「aaaaaaaabc」と打ちたいとき、KeyPressだとaのキーを押しっぱなしになってしまいます。
押した瞬間にしか認識できないようにしたいのですが、

Chr('a')などして、KeyUpとKeyDown試しましたが、これもうまくいきませんでした。
方法教えてください。
719デフォルトの名無しさん:2005/09/02(金) 05:05:30
よく意味が分からないのだが、キーを押しっぱなしにしてる状態の時
連続で文字を出力させたくないって事?
720デフォルトの名無しさん:2005/09/02(金) 05:21:29
意味ワカラナス
721デフォルトの名無しさん:2005/09/02(金) 05:33:46
aを8回押さなくても押しっぱなしにすれば8回入力した事になるのを
8回押さないと駄目なようにしたいって事か?
722>>718:2005/09/02(金) 08:28:22
abcと入力したとみなす、ということかな?
723デフォルトの名無しさん:2005/09/02(金) 08:30:44
>>718
WM_KEYDOWNメッセージのlParam30ビット目
724デフォルトの名無しさん:2005/09/02(金) 08:31:43
OS の標準動作からはずれた動作は糞アプリ
725デフォルトの名無しさん:2005/09/02(金) 08:40:26
KeyUpがあるまで入力を受け付けない
726デフォルトの名無しさん:2005/09/02(金) 09:11:06
>>724
タイピングソフトがオートリピート殺してたって誰も文句言わねーだろ
727デフォルトの名無しさん:2005/09/02(金) 09:14:16
>>718

const
BeforeChar: Char = #0;
begin
if Key = BeforeChar then begin
Key := #0;
end else begin
BeforeChar := Key;
end;
end;
728デフォルトの名無しさん:2005/09/02(金) 09:17:24
>>727
それって押しっぱなしだけじゃ無くて、2回押すのも無視されないか
729727: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;

730デフォルトの名無しさん:2005/09/02(金) 10:03:43
だーかーらー
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/keyboardinput/keyboardinputreference/keyboardinputmessages/wm_keydown.asp

lParam
Specifies the repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag, as shown in the following table.
<中略>
30
Specifies the previous key state. The value is 1 if the key is down before the message is sent, or it is zero if the key is up.
731デフォルトの名無しさん:2005/09/02(金) 10:38:30
>>726

OS のキー入力の標準動作と違うタイピングソフトって、意味なくね?
732727: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;

733デフォルトの名無しさん:2005/09/02(金) 13:46:13
>>731
オートリピートごときで意味なくならねーよ。あほか。
734デフォルトの名無しさん:2005/09/02(金) 13:55:11
QuickReportで質問なんですけど、フォームデザイン時にある
グリッドラインも併せて印刷できないでしょうか?

宜しくお願いします。
735デフォルトの名無しさん:2005/09/02(金) 15:11:40
<チラシの裏>
あぁ俺もタイピングソフト作ってみよう
</チラシの裏>
736デフォルトの名無しさん:2005/09/02(金) 15:13:48
前どっかにMonaTypeとか言うのが上がってたな
737デフォルトの名無しさん:2005/09/02(金) 15:54:32
>>733

その「オートリピートごとき」で、なんでわざわざOS標準動作を変える必要があるのかが分からんところだな
しかも、必死だし(藁
738デフォルトの名無しさん:2005/09/02(金) 16:01:14
>>737
そんだけ君がアホな事言ってるのさ
739デフォルトの名無しさん:2005/09/02(金) 16:02:23
高度な議論はフサスレで
740デフォルトの名無しさん:2005/09/02(金) 16:30:29
高度過ぎてついていけません。フサスレに移動願います。
741ななしへたぐらま ◆XcB18Bks.Y :2005/09/02(金) 16:47:40
>>676
すいません,まだご覧になっているかわかりませんがTTimeの件,了解です.
うまくいかないというのは指定した時刻になっても期待した処理が実行されないということでいいのでしょうか?

> TForm1.ontimer
このメソッド,ちゃんと実行されていますか?なんか実行していないような気がします.
> begin
この行にブレークポイントを置いて([F5]キー)実行時に止まるかどうか調べてみてください.
止まらないようならタイマーコンポのプロパティ(イベントも)を確認してみて下さい.
742ななしへたぐらま ◆XcB18Bks.Y :2005/09/02(金) 17:35:36
>>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で『仮想キーコード』で検索すれば一覧表ページを見付けられるでしょう.
743デフォルトの名無しさん:2005/09/02(金) 19:21:55
>>742

質問と関係なく、タイピングソフトのアドバイスしてるってことか?w
744デフォルトの名無しさん:2005/09/02(金) 19:30:38
>>742

そのコードは

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  Caption := Caption + Key
end;

とどこが動作が違うの?

そもそも >>718 の質問って

> 「aaaaaaaabc」と打ちたいとき、KeyPressだとaのキーを押しっぱなしになってしまいます。

この意味が分からないんだよね。オートリピートとはなにも関係なさそうだし。
745デフォルトの名無しさん:2005/09/02(金) 19:37:18
どこが動作が違うの?
746デフォルトの名無しさん:2005/09/02(金) 19:39:01
2行目考えると、

aのキーを押しっぱなしでも打ててしまいます。
押した瞬間にしか認識できないようにしたいのですが

って事だべ?
747デフォルトの名無しさん:2005/09/02(金) 19:40:14
一回押したつもりで押しっぱなしにしてしまう操作ミスを検出できないんじゃ
タイピングソフトの意味ないし。
748デフォルトの名無しさん:2005/09/02(金) 19:43:19
まだ言ってるこのアホ
749デフォルトの名無しさん:2005/09/02(金) 19:49:09
>>744
そりゃ全然違うだろ
750デフォルトの名無しさん:2005/09/02(金) 19:49:37
744は既知なので無視しましょう^^b
751デフォルトの名無しさん:2005/09/02(金) 19:52:18
必死だな(藁
752デフォルトの名無しさん:2005/09/02(金) 19:56:11
n := GetTickCount;
repeat
Write('Input A-Z:'); Readln(s);
until s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
Writeln('Time:', GetTickCount-n, 'ms');
753デフォルトの名無しさん:2005/09/02(金) 19:56:47
>>751
そう思いたいのですね :-)
754デフォルトの名無しさん:2005/09/02(金) 20:05:25
:-) ←wwwwwwwwwwwwwwwwwwwwwww
755デフォルトの名無しさん:2005/09/02(金) 20:17:23
やれやれ
756デフォルトの名無しさん:2005/09/02(金) 20:24:53
void知らない馬鹿が沸いてきたか‥‥‥
757デフォルトの名無しさん:2005/09/02(金) 20:26:53
お前らまとめて死ね
758デフォルトの名無しさん:2005/09/02(金) 20:27:08
うんざり
759デフォルトの名無しさん:2005/09/02(金) 20:40:18
負け組同士仲良くしようよ
760デフォルトの名無しさん:2005/09/02(金) 20:48:20
今日のこのスレが void だ
761ななしへたぐらま ◆XcB18Bks.Y :2005/09/02(金) 21:21:47
すまんです,OnKeyDown/OnKeyUpでもキーリピートは反映されるからだめなのか…

762デフォルトの名無しさん:2005/09/02(金) 21:23:38
アフォ質問に超能力回答ばかり、くだすれ以下だわ今日は・・・
763デフォルトの名無しさん:2005/09/03(土) 10:21:30
バイト配列に入っているUnicodeデータを
文字列に変換するにはどうすればよいのでしょうか?

Buff[0] = なんたら、Buff[1] = かんたら、Buff[2] = こんたら・・・
と入っているデータを文字列をして取得したいのです

よろしくお願いします。
764デフォルトの名無しさん:2005/09/03(土) 10:28:25
>>763
UTF32で入ってるの?
765デフォルトの名無しさん:2005/09/03(土) 10:34:32
UCS2形式です。ヘッダ等はなく1文字を2バイトであらわしています。
バイト配列から2個ずつ取得してそれをWideStringに
代入すればよいと思うのですがやり方がわかりません。
766デフォルトの名無しさん:2005/09/03(土) 10:49:12
BCBだと配列のポインタをWideStringに突っ込むだけなんだけどぁ‥‥
767デフォルトの名無しさん:2005/09/03(土) 11:13:00
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);

みたいな感じ?
768デフォルトの名無しさん:2005/09/03(土) 13:00:08
TreeViewで表示されているノードの高さの計を取得したのですが、なにか方法はありますか?
折りたたまれているノードは高さに含まれないので、
ひとつひとつ表示されているかチェックしてその数×ノードの高さだとどうも。
769デフォルトの名無しさん:2005/09/03(土) 13:08:06
>>768
>取得したのですが
もうできてるがな!
770デフォルトの名無しさん:2005/09/03(土) 13:22:40
>>769
すまん、書いた文章読み直さないおいらが阿呆だった。
まだ取得はできていないっ。
771デフォルトの名無しさん:2005/09/03(土) 14:08:48
>>766-767
ありがとうございました!出来ました!
バイト配列が動的配列だったのでそのまま渡して
後にヌル文字を付けることで出来ました。
772デフォルトの名無しさん:2005/09/03(土) 15:00:23
>>768
トップから再帰的に潜って TTreeNode.Count 数えていくとか
773デフォルトの名無しさん:2005/09/03(土) 15:12:36
>>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;
774デフォルトの名無しさん:2005/09/03(土) 15:45:21
ノードの開閉に合わせて表示数の増減をどっかの変数に保存させとくのがスマートじゃないか?
775768:2005/09/03(土) 16:59:48
GetNextVisibleは私も考えていたんですが、
変更ある度に全チェックというのも微妙だし、ということで質問したのです……

例えばTreeViewのスクロールバーは、どうやってサイズを決めてるんでしょう。
あれがGetNextVisibleでサイズ取得してるのなら問題なさそうですけど。
776デフォルトの名無しさん:2005/09/03(土) 20:49:18
目的は何?
777デフォルトの名無しさん:2005/09/03(土) 22:11:54
777get
778デフォルトの名無しさん:2005/09/03(土) 23:56:04
Delphi 5 で クラスに宣言してあるメソッドもしくはプロパティ
の一覧を取得して、呼び出す(Java のリフレクションに相当)
ことをしたいのですが、できるんでしょうか?
779デフォルトの名無しさん:2005/09/04(日) 01:03:23
>>778
OpenToolsAPIでプロパティの取得は可能らしい。
ただ、資料が少なかったり、バージョンによって細かい違いが
あったりと、色々と扱い難い部分があるらしい。
780デフォルトの名無しさん:2005/09/04(日) 04:18:03
ListBoxで、マウスで範囲選択できるようにはどうしたら良いでしょうか?
781デフォルトの名無しさん:2005/09/04(日) 04:21:27
MultiSelect
782デフォルトの名無しさん:2005/09/04(日) 08:36:57
>>779
RTL
783780:2005/09/04(日) 08:41:40
>>781
MultiSelectはtrueにしてありますが、駄目です。
エクスプローラなどの様に、マウスドラッグで範囲選択したいのですが…
784デフォルトの名無しさん:2005/09/04(日) 09:54:00
>>783
できるよ。操作感もエクスプローラーとおなじだし。
785デフォルトの名無しさん:2005/09/04(日) 10:02:19
>>780
君はListBoxとListViewを混同してはいないか?
786デフォルトの名無しさん:2005/09/04(日) 18:30:50
780ではないが、ListBox って drag で範囲選択できるのか…

で、質問なのですが、ListView の Report で右詰で表示したいのですが、
どのような方法があるのか、ご存知の方がいましたら教えていただきたく
お願いします。
787デフォルトの名無しさん:2005/09/04(日) 18:46:47
コンポーネントを探してくるかOwnerDraw(標準の描画の代わりに自分で描画する)
788デフォルトの名無しさん:2005/09/04(日) 18:52:45
2列目以降ならTListColumn.Alignmentでできるけど、1列目は出来ないんだな
789デフォルトの名無しさん:2005/09/04(日) 19:05:23
処理上はおまけのついてる一番左の列のリストってことになってるからね
790デフォルトの名無しさん:2005/09/04(日) 20:21:16
あう、左端の列を右詰にしたかったのですが…残念 OwnerDrawでがんがるか…
ありあとあんした。
791デフォルトの名無しさん:2005/09/04(日) 20:22:01
マスコミは創価に侵食されているようです。又、現在の危機的な国家財政、ある意味では財政破綻している。
このような病的で異常な社会になったのは、朝鮮部落出身の指導者池田が動かす公明党が政権をとるようになってからだ。創価の反仏教仏道に反するテロ行為は以前から。町でテロ、地方でテロ、国では公明が異常で創価構成員の為だけの法律を次々に捏造し続けている。
今度の選挙で自公連立政権が続くことになれば、日本はマジにおしまい
792780:2005/09/05(月) 00:00:27
>>784
>>785
ListViewと勘違いはしてません。
普通にできますか。なにか設定する必要は無いんですよね?
僕の環境の問題なんですかね。キーボードでしか複数選択できないんですよね。
なんかまちがっちゃってプロパティとかを弄った可能性があるので、
これからListBoxを使った簡単なプログラムを作って試してみます。
793デフォルトの名無しさん:2005/09/05(月) 03:42:30

Del6Personalでコマンドラインアプリを作りたいんですがどうすれば良いですか?
コンソールアプリを作ったり、起動時にメインフォームを非表示にする方法とかは解るのですが
コマンドラインアプリ(の土台)の作り方が解りません。(コマンドライン引数の扱いとかは解ります
ググってもコマンドラインアプリが作れるという情報だけで
具体的な方法は解りませんでした。どうかご教示願います。
794デフォルトの名無しさん:2005/09/05(月) 03:46:33
>>793
意味不明。

とりあえずReadlnでユーザの文字列を受け取れるが?
795デフォルトの名無しさん:2005/09/05(月) 03:55:56
無限ループの中にReadlnを置けばいいんじゃね?
796デフォルトの名無しさん:2005/09/05(月) 03:56:32
>>793
というかコマンドラインアプリって、cmd.exeみたいなやつのことだよね?
797デフォルトの名無しさん:2005/09/05(月) 03:57:34
だから、Readlnで文字列受け取って処理分ければいいんじゃないの?
作った事ないけどww
798デフォルトの名無しさん:2005/09/05(月) 04:07:10
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.
799デフォルトの名無しさん:2005/09/05(月) 04:08:45
>hoge param1

とかで起動するアプリなら、たんにコンソールアプリでコマンドラインパラメータ
受け取って処理するだけ。
800デフォルトの名無しさん:2005/09/05(月) 04:31:04
>>780
ListBoxを貼る
項目を適当に10個くらい追加する
MultiSelectをTrueにする

実行

一番上の項目からドラッグ開始
一番下の項目でドラッグ終了

これで複数選択できなかったらおかしい
801デフォルトの名無しさん:2005/09/05(月) 16:26:49
2コだけ質問があります。

スキル      超初心者
環境        Windows200SP4 + Delphi 6 Personal
作成目標アプリ 学校の数値解析用デジタイザー(Jpeg画像からXとYの位置をリスト形式で取り出す)

質問1
fStr := OpenPictureDialog1.FileName;
Image4.Picture.LoadFromFile(fStr);
で張り付けた画像をボタンで90度回転させたいのですが、どうしたらいいのですか?

質問2
StringGridのセルの幅を個別に決めたいのですが、どう書けばいいのですか?


初心者的質問ですが、よろしくお願いします。
802デフォルトの名無しさん:2005/09/05(月) 16:53:52
>>801
>質問1
メソッド一発で回転させるなんてのは無理なはず
自分でゴリゴリソース書いてください

>質問2
こんな感じ?
StringGrid1.ColWidths[0] := 10;
StringGrid1.ColWidths[1] := 20;
StringGrid1.ColWidths[2] := 30;
803デフォルトの名無しさん:2005/09/05(月) 17:01:12
>802

回答ありがとうございました。これでリスト関係は「見た目」だけ完成しました。
(まだ変換式や計算式を書いてない)

今、画像から拾ったXYの点をプレビュー表示させる下準備を書いてました。
がんばるべ。完成したら公開します。
804デフォルトの名無しさん:2005/09/05(月) 17:57:39
>>801
画像の回転なら↓を参考にすればどうかなぁ
http://wblue.web.infoseek.co.jp/lecture/one/04/o004.htm
805デフォルトの名無しさん:2005/09/05(月) 18:49:54
>>801
>張り付けた画像をボタンで90度回転させたいのですが

90度の回転は x,y をちょっと考えて入れ替えるだけ。簡単
806801:2005/09/05(月) 19:27:57
>804
回答ありがとうございます。
うはーーー・・・・結構な行数のコードになりそうですね。
でも確かに私が求めていたコードのようです。自由角度で変換できるのは魅力です。

学生の為に頑張ってプログラムしてみます。
807デフォルトの名無しさん:2005/09/05(月) 19:35:29
中村拓男って人が高品質な画像処理用ライブラリを公開している
自前での処理に挫折したら探してみ
808デフォルトの名無しさん:2005/09/05(月) 21:09:17
TBitmap32にRotateとかなかったっけ
809デフォルトの名無しさん:2005/09/05(月) 21:59:41
>>801
> 自由角度で変換できるのは魅力です。

自由角度の回転と90度の回転はロジックが全く別だよ。後者はロスレスだし。
810デフォルトの名無しさん:2005/09/05(月) 22:01:53
ミラー、フリップ、90度単位の回転はロスレスでできる。
89度と90度は難しさの程度が段違い。
811デフォルトの名無しさん:2005/09/05(月) 22:55:22
>>801
>張り付けた画像をボタンで90度回転させたいのですが、どうしたらいいのですか?

横に並んだピクセルを縦に並べるだけ。Pixels つかっても Scanline つかっても
>>805 で書いたとおり、並べ替える部分のコードはたった1行
812デフォルトの名無しさん:2005/09/05(月) 22:58:31
> 並べ替える部分のコードはたった1行

正確に言うと、for文二行、ピクセルを移すコード1行、そのはかは幅と高さを入れ換えたビットマップ
を用意するコードだけ。
813デフォルトの名無しさん:2005/09/06(火) 01:26:32
TRichEditの背景に画像を表示したいのですが、どうしたら出来るのでしょうか?
814デフォルトの名無しさん:2005/09/06(火) 01:55:45
>>801 張り付けた画像をボタンで90度回転させたいのですが、どうしたらいいのですか?

時計回り90度 Pixels版

uses
  Jpeg;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Image1.AutoSize := true; Image1.Picture.LoadFromFile('c:\test.jpg');
end;
815デフォルトの名無しさん:2005/09/06(火) 01:56:35
つづき

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;
816デフォルトの名無しさん:2005/09/06(火) 01:58:35
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;
817デフォルトの名無しさん:2005/09/06(火) 02:50:28
ScanLineて地味にはがゆいと思うのは漏れだけ?
818デフォルトの名無しさん:2005/09/06(火) 08:47:00
>>801
ここにあるかも
ttp://code.junki.main.jp/
819デフォルトの名無しさん:2005/09/06(火) 08:58:58
820デフォルトの名無しさん:2005/09/06(火) 22:17:28
今Delphi使えたら就職とかに役立つの?
821デフォルトの名無しさん:2005/09/06(火) 22:20:01
膳膳
822デフォルトの名無しさん:2005/09/06(火) 22:20:03
立つのは例外的だと思ったほうが
823デフォルトの名無しさん:2005/09/06(火) 23:10:12
>>822
なるほど・・・
C++とかのほうが就職に役立つ?
824デフォルトの名無しさん:2005/09/06(火) 23:14:53
就職に役立つのは学歴であってプログラミング経験ではない
825デフォルトの名無しさん:2005/09/06(火) 23:27:05
マジレスすると、言語に差はほとんどない
重要なのは「プログラミングやってた」という話のネタが増えること
適当に嘘やでっち上げ絡めながら離せば、必ず役には立つだろう
そして、DelphiはC++よりも初心者に向いてるからやっといて損はないだろう
826デフォルトの名無しさん:2005/09/06(火) 23:28:17
すみません。質問させてください。
各行が"C121"とか"TR300"とかのような、
" (何文字かの)アルファベット+(何文字かの)数値"というようなパターンの文字列のアルファベットと数値の境に
タブ文字を入れる関数を作っています。
境目を特定する方法までは実装できたのですが、その境目の位置にタブ文字を入れる方法がわかりません。
できればヒントなどをください。
827デフォルトの名無しさん:2005/09/06(火) 23:35:09
forで一文字ずつ調べていって、アルファベットじゃない場所みつけたら
そこにタブを入れれば良いんじゃね?
828デフォルトの名無しさん:2005/09/06(火) 23:42:24
>>826
境目を特定できているのなら

s := 'TR300';
pos := 2;     //境目の位置

s := Copy(s, 1, pos) + #9 + Copy(s, pos + 1, Length(s) - pos);
829826:2005/09/06(火) 23:43:56
>>827
それって、たとえば仮に文字列の変数をS、問題の位置をiとした場合、
S[i] := #9;
ってするんですよね? (今のところそれしか知らないので、ほかにあったら教えてください)
一応、それやってみて(すみません、最初に書いておくべきでした)アクセス範囲エラーがでたので、質問させてもらったんで・・・
830826:2005/09/06(火) 23:45:11
>>828さん
すみません。827さんへのレスを書いていたら見逃してしまっておりました。
すぐに試してみます。
831826:2005/09/06(火) 23:48:51
>>828さん
完璧です。もう変数名以外直す必要性ありませんでした。
本当ありがとうございました。
832828:2005/09/06(火) 23:55:20
すまない。今、思い出した。別に先の例でもいいけどもっと簡単に。

s := 'TR300';
pos := 2;     //境目の位置

Insert(#9, s, pos + 1);

まだ見ているといいんだが。
833826:2005/09/07(水) 00:19:39
>>828さん
まだ見てますよ。その方法だと短くて済みますね。(それにシンプルだし)
最初、関数と同じようにやってしまって少しとまどいましたが、バッチリでした。
おかげでソフトが完成しそうです(といってもまだ試作品なんですが)。

ありがとうございました。
834デフォルトの名無しさん:2005/09/07(水) 07:19:30
初心者スレにこんなレスするのもアレだけど
そういう文字列処理は最初にバッファを大きくとって { SetLength }
先頭から順に1文字づつ処理しながらコピーして
最後にバッファを切り詰めるというのが言語問わず定型で、それに慣れた方がいいよ
835デフォルトの名無しさん:2005/09/07(水) 07:22:45
お邪魔します。
Delphi5 Win98SE です。

C:\Program Files\'アプリ名'フォルダにコピーした
ファイル'File.dat'を'File.cab'に変更する方法をお教え下さい。

コピー前に'File.dat'は'File.cab'から手作業で拡張子を変更しています。
ファイルのコピーはできましたが、
拡張子を変更する方法が分かりません。
宜しくお願いします

836デフォルトの名無しさん:2005/09/07(水) 07:26:45
>>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上だと不安定な動きになるよ
839デフォルトの名無しさん:2005/09/07(水) 08:11:05
Quake 3 Delphi Project
http://quake3.delphigl.com/
840デフォルトの名無しさん:2005/09/07(水) 08:39:50
>>838
どうしたの?
841デフォルトの名無しさん:2005/09/07(水) 08:42:21
SetConsoleCursorInfo
842デフォルトの名無しさん:2005/09/07(水) 08:48:29
Delphiって結局Win32 APIがないと何もできない
843デフォルトの名無しさん:2005/09/07(水) 09:13:47
VB だって VC++ だってそうだけど。
844デフォルトの名無しさん:2005/09/07(水) 09:16:25
>>842
久々にわろうた(AA略
845デフォルトの名無しさん:2005/09/07(水) 09:54:54
>>842
バカジャネーノ
846837:2005/09/07(水) 10:02:36
>>841
どうもありがとうございます。うまくいきました。
847デフォルトの名無しさん:2005/09/07(水) 10:37:36
>>842
さらに的外れなレスを被せると、Kylixなめんなよと
848デフォルトの名無しさん:2005/09/07(水) 11:30:12
>>847
あれPASCALじゃなくてC++でしょ?
849デフォルトの名無しさん:2005/09/07(水) 12:25:01
Kylix2までは Object Pascalのみ
Kylix3からは Object Pascal & C++
850デフォルトの名無しさん:2005/09/07(水) 13:01:27
>>849
サンキュー
851デフォルトの名無しさん:2005/09/07(水) 13:25:18
> Kylix3からは Object Pascal & C++
Kylix3からは Delphi言語 & C++
852デフォルトの名無しさん:2005/09/07(水) 13:29:59
836
有難うございました
853デフォルトの名無しさん:2005/09/07(水) 14:31:18
M$信者は
Windowsで動いてるくせにM$の悪口いうな!
いいたいのだよきっと
854デフォルトの名無しさん:2005/09/07(水) 15:12:23
しかしまあ、何の言語は糞だの何だのってスレはなくならないなぁ。
趣味でやるなら好きなの選べばいいし、仕事なら仕事なりの都合ってものもある。
ただそれだけの話なのにね。
855デフォルトの名無しさん:2005/09/07(水) 15:14:16
Del 信者は
Windowsを使っててMSの悪口いう分裂病だな
っていいたいのだよきっと
856デフォルトの名無しさん:2005/09/07(水) 15:15:41
言語じゃなくて D2005 と D8 は糞だの何だのっていいたい
857デフォルトの名無しさん:2005/09/07(水) 15:24:31
>>856
ほほー、俺は今も仕事ではD6だから、それ以降は知らんのだけれど
そんなに糞なんだ。
858デフォルトの名無しさん:2005/09/07(水) 15:40:56
正直D6に慣れすぎました
859デフォルトの名無しさん:2005/09/07(水) 16:16:19
俺なんて6年D5だけ・・・
860デフォルトの名無しさん:2005/09/07(水) 16:36:21
おまえは俺か?
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;
862デフォルトの名無しさん:2005/09/07(水) 17:58:41
くだらねー質問だな
863デフォルトの名無しさん:2005/09/07(水) 18:12:53
文字列 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;
864デフォルトの名無しさん:2005/09/07(水) 18:13:47
PWord(@bBuff[0])^ := 128;
でいいじゃん。とおもったけどバイトオーダーが逆になるな・・・
865863:2005/09/07(水) 18:19:56
>>864
なるほど。頭いいな。バイトオーダーは最初からひっくり返しておけばいいか。
PWORD(@bBuff[0])^ := Swap(128);
866861:2005/09/07(水) 18:20:57
回答ありがとうございます。

>>863
ちょうど今、私も上の方法思いつきました。
下の方は・・・意味不明ですがこっちの方がエレガントっぽいので調べてみます。

>>864
バイトオーダーとかまた謎の単語が出てきました。
こちらも調査してみます。
867デフォルトの名無しさん:2005/09/07(水) 18:22:09
文字列に直さないと数値表現が分からない人がまた一人・・・・

ここ読むといいのに
ttp://homepage2.nifty.com/Mr_XRAY/Halbow/Notes/N016.html
868861:2005/09/07(水) 18:24:04
興味深いサイト教えてくださってありがとうございます。
じっくり学んでみたいと思います。
869デフォルトの名無しさん:2005/09/07(水) 18:32:44
>248
http://www.de.freepascal.org/lazarus/
ここで落とせるよ
870デフォルトの名無しさん:2005/09/07(水) 18:57:58
これはいい誤爆ですね
871826: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

のように、比較は無理なのでしょうか。
874デフォルトの名無しさん:2005/09/07(水) 22:22:39
無理
875デフォルトの名無しさん:2005/09/07(水) 22:29:07
if CompareMem(@a, @b, SizeOf(a)) then
でどうよ。
TPointだったら
if Int64(a) = Int64(b) then
こういうのもあるにはあるが・・・
876デフォルトの名無しさん:2005/09/07(水) 22:30:21
パディングがあると・・・
877デフォルトの名無しさん:2005/09/07(水) 22:35:38
文字列やオブジェクトがぶら下がってたら参照比較しても無意味だしな
878デフォルトの名無しさん:2005/09/07(水) 22:39:59
用途が限定的になって使い分けるくらいなら素直に比較関数書いたほうがよいね。
879デフォルトの名無しさん:2005/09/07(水) 22:44:32
クラスにしろってことだな
880デフォルトの名無しさん:2005/09/07(水) 22:54:01
TPoint 程度なら関数で十分
881デフォルトの名無しさん:2005/09/07(水) 22:55:00
Delphiのパディングて0保証は無いの?
882デフォルトの名無しさん:2005/09/07(水) 22:59:06
packed
883デフォルトの名無しさん:2005/09/07(水) 23:04:50
VB.NETならPoint.Equalsが使えるのにね。
DelphiってOOPLとして10年は遅れてますね。
884デフォルトの名無しさん:2005/09/07(水) 23:08:26
VB.NET なら .NET がないと動作しない。だから誰も使わない。10年早すぎ
885デフォルトの名無しさん:2005/09/08(木) 02:03:07
VB信者って馬鹿なんじゃないの?リアルでうまく行ってないから何かを否定してないと
気がすまないんだろうなwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
自分が使いたい言語+開発環境使ってればいいじゃんwwwwwwwwwwwwwwwww
いちいち他人に干渉してるとか相当暇なんだなwwwwwwwwwwwwwwwwwwwwwww
さすが厨房言語wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
886デフォルトの名無しさん:2005/09/08(木) 02:42:26
> wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

これもかなり恥ずかしい
887デフォルトの名無しさん:2005/09/08(木) 03:46:14
>>886 の言う通りだが、>>885 は正しい。
趣味なら好きに選べばよい。
仕事なら、作って納めて金もらってナンボだから、
信頼性とか安定性とか生産性とか実行環境とか、総合的に判断して
使用言語は決められるものだ。
単に「いつも使ってるから」でも十分に理由になる。
クライアントに納めて問題がないなら。
10年遅れていようが関係ねーんだ、んなもん。
現場で「できません」は通用しない。「やらなきゃいけない」のが仕事だ。
他の言語をけなして、自分の好きな言語の優越性にしがみついてるなら
プロとは言えない。
アマチュアなら、せいぜいほざいてろ。
888デフォルトの名無しさん:2005/09/08(木) 03:55:22
いつのまにかプロの住むスレになってますね
889デフォルトの名無しさん:2005/09/08(木) 04:11:04
プロでもアマチュアでもなんでもいいけどさ、
言語のけなしあいはつまんないからやめとけ。
890デフォルトの名無しさん:2005/09/08(木) 04:26:52
やっぱプロの書くコードはきれいなん?
891デフォルトの名無しさん:2005/09/08(木) 04:35:22
他人が保守できないようになるべく汚く書くのが定石。
あえてVB.NETを使わずにドマイナーなDelphiを使うのもその為。
892デフォルトの名無しさん:2005/09/08(木) 04:35:23
>>890
個人差あるんじゃないのかなあ・・・
僕はプロ目指してC++とかDelphi勉強してるが、なるべくきれいに書くようにしてる。
デバッグのときに見やすいし
893デフォルトの名無しさん:2005/09/08(木) 04:39:18
ピンキリじゃないかな?
でも仕事で何度もプログラム書いてくると、
当然、バグとか発生した場合にデバッグするわけだけど、
汚いコードだとデバッグする本人が苦労したりするわけで。
すると自然になるべくきれいなコードを書くようになるわけさ。
そうしないと自分が大変だからね。
経験がコードをきれいにするって感じかな。
全ての人にあてはまるわけじゃないと思うけどね。
894デフォルトの名無しさん:2005/09/08(木) 04:40:21
>>891 みたいなハナクソはほっといていいから
895デフォルトの名無しさん:2005/09/08(木) 04:48:18
綺麗なソースにインセンティブ出すぐらいはしてもいいと思うけどね
896デフォルトの名無しさん:2005/09/08(木) 07:23:05
>>873
 構造体の場合は代入はメモリ内容を複製すればいいけど
 「一致」の概念は人、状況によって違いがありえるから難しい。
もちろんTPointであれば2つのメンバが同じ値という定義で全員納得するだろうけどね。

というわけで TPointについては PointsEqual  という関数が用意されている。
897デフォルトの名無しさん:2005/09/08(木) 08:33:27
>他人が保守できないようになるべく汚く書くのが定石。

うーむ、一理ある。     とか思ってしまった。
898デフォルトの名無しさん:2005/09/08(木) 09:24:43
>>897
コメント抜いたコード渡すだけで十分。
899デフォルトの名無しさん:2005/09/08(木) 10:11:47
趣味ならきれいに書くこと自体が趣味なんで、汚いと思ったら時間効率関係ないから
プロよりきれいなコードを書く趣味グラマは結構沢山いるに違いない・・・と思うけど
900デフォルトの名無しさん:2005/09/08(木) 10:20:34
そろそろこっちへ

ミ,,゚Д゚彡フサギコのフサフサDelphi談話室その25
http://pc8.2ch.net/test/read.cgi/tech/1125304359/
901デフォルトの名無しさん:2005/09/08(木) 13:05:07
( ´∀`)σ),゚Д゚彡プニュ
902デフォルトの名無しさん:2005/09/08(木) 14:50:07
SaveDialogで、拡張子がついているのに更に拡張子が付けられてしまう場合は、どうしたら良いんでしょうか。
DefaultExtは、すでに拡張子がついている場合はつけないはずですよね?
DefaultExtで[ini]と書いているんですが、ファイル名.iniで保存すると
ファイル名.ini.iniになってしまいます。
DefaultExtに何も書かなくても拡張子が勝手につくんですが、Filterにそういう機能があるんでしょうか・・?
903デフォルトの名無しさん:2005/09/08(木) 15:17:16
ありえない
904デフォルトの名無しさん:2005/09/08(木) 16:06:47
お邪魔します。
Delphi5です。

Windows各OS(98以降)の、システムフォルダのパスを取得する方法をお教え下さい。
905デフォルトの名無しさん:2005/09/08(木) 16:13:54
>>904
SHGetSpecialFolderLocation
SHGetPathFromIDList
906デフォルトの名無しさん:2005/09/08(木) 16:46:03
>>905
へえ(もしかしたら初耳じゃないかも知れないけど記憶が曖昧)
自分は普通にGetSystemDirectory (API)を使ってるな〜
907デフォルトの名無しさん:2005/09/08(木) 17:11:52
>>904
JCL(JEDI)はどうよ。
GetPersonalFolderみたいな感じで色々あるが。
908905:2005/09/08(木) 17:14:10
>>906
失礼、ただのシステムフォルダだったのね。勘違いしてた。
909デフォルトの名無しさん:2005/09/08(木) 17:16:42
つうかWin32APIは専用スレで聞けと
910デフォルトの名無しさん:2005/09/08(木) 17:28:22
>>903
すんません。事故解決。自分で拡張子つけるコ−ドを昔書いたんだった・・。馬鹿すぎ。
911906:2005/09/08(木) 17:43:42
>>908
いえいえ
SHの方は汎用性があるので知っておいて損はないですよね
912904です:2005/09/08(木) 21:54:50
皆さん、有難うございます。
906さんの方法で解決しました。
板違いと分からず質問してました。
他の方のアドバイスの方法も調べてみます。
913デフォルトの名無しさん:2005/09/09(金) 00:10:36
板違いじゃないよ。スレ違いでもないし。
914デフォルトの名無しさん:2005/09/09(金) 00:31:33
>>813
KS?
915デフォルトの名無しさん:2005/09/09(金) 00:42:53
次のようなプログラムを作りたいと思い、WebでIndyが楽だという噂を聞いたけど解りません。
1.httpsのページへIDとパスワードを入力しログインする。
2.ログイン後のページにある入力項目を送信する。
ログインさえも出来ません・・・
よろしくお願いします
916デフォルトの名無しさん:2005/09/09(金) 06:19:44
>>915
自分で書いたコードぐらい示せよ
917デフォルトの名無しさん:2005/09/09(金) 06:41:23
たぶんまだ作ってなくてサンプルよこせみたいな
918デフォルトの名無しさん:2005/09/09(金) 06:46:54
MessegeBox('aaaa', 'bbb', MB_OK);

この aaaa の部分に改行を入れて複数行に表示したいのですが
どうすればいいのでしょうか?
919デフォルトの名無しさん:2005/09/09(金) 07:05:37
Application.MessageBox('aaaa'#13#10'cccc', 'bbb', MB_OK);
920918:2005/09/09(金) 09:20:44
>>919
ありがとうございます。
921デフォルトの名無しさん:2005/09/09(金) 10:56:25
>>916
コードっていうより、libeay32.dllとssleay32.dllをダウンロードしてあるか
それが問題。
922デフォルトの名無しさん:2005/09/09(金) 13:15:41
IndyでSSLって確かだるかった気がする

Interceptとか使うんじゃなかったっけ
923デフォルトの名無しさん:2005/09/09(金) 13:30:12
>>922
詳しく教えて。
924デフォルトの名無しさん:2005/09/09(金) 13:58:58
ごめん I/O Handler だった
Indy I/O Handlers に明らかにそれっぽいのあるから
それを IdHTTP とかの I/O Handler に指定してがんばって

後Delphiに関係なくOpenSSL用のdllは必要>>921参照
925デフォルトの名無しさん:2005/09/09(金) 14:02:34
926デフォルトの名無しさん:2005/09/09(金) 20:18:17
MainMenuとPopupMenuをオーナードローでいじろうとしたんですけど
あれって背景というか枠というか、その辺はいじれないんでしょうか。
ハイライト+シャドウじゃなくて、平面のメニューにしたかったんですが。
927デフォルトの名無しさん:2005/09/09(金) 20:26:12
それはオーナードローよりWindowStyleの仕事じゃないか?
928915: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スレ向きでしょうかね
929デフォルトの名無しさん:2005/09/09(金) 22:02:45
>>928
一番重要なフォームタグを省かないで欲しい。話はそれからだ。
930デフォルトの名無しさん:2005/09/09(金) 22:13:09
931デフォルトの名無しさん:2005/09/09(金) 23:37:57
>>930
まさに。
ソース見て勉強してきます。
932915:2005/09/10(土) 21:17:37
htmlをパースしたら解りますた
>>916
おまえみたいなヤシが居るからDelphiはマイナーなままなんだよ!ほーあw
933915:2005/09/10(土) 21:19:32
>>917
おまえ解るのか?
って喪前みたいな超初心者じゃ解らんだろうなw
プゲラ
934名無しさん@そうだ選挙に行こう:2005/09/10(土) 21:19:46
                        ∧_∧     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
                       (v ゚,_ゝ゚)v  < てめーはもう用無しだ
                       /     \   \________
                      / /\   / ̄\
                    _| ̄ ̄ \ /  ヽ \_
     ∧_∧          \ ̄ ̄ ̄ ̄ ̄ ̄ \__)、
   /(´Д` )ヽ      →  ||\            \
  mn´(_(_nm         .||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
  ̄ ̄ ̄      ̄ ̄       .||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
教えてくださいお願いします     .||          .||

     Before                  After

こうですか?わかりません><
935名無しさん@そうだ選挙に行こう:2005/09/10(土) 21:50:57
煽り方も初心者ぽくて初々しい
936名無しさん@そうだ選挙に行こう:2005/09/10(土) 21:57:51
>ほーあw
かわいい・・ハァハァ
937名無しさん@そうだ選挙に行こう:2005/09/11(日) 10:21:18
915は包茎
938デフォルトの名無しさん:2005/09/12(月) 02:22:47
終了時に自実行ファイルを削除する のは可能ですか
可能なら方法もちらっと教えてください
939デフォルトの名無しさん:2005/09/12(月) 02:32:01
940デフォルトの名無しさん:2005/09/12(月) 02:49:31
おーまさにそれだありがとう。
941デフォルトの名無しさん:2005/09/12(月) 10:49:58
すみません質問です。
Indy9のIdTCPClientというコンポーネントを使ってサーバーへの接続を試みているのですが
IdTCPConnectionの878行目で必ずデバッカ例外が発生して
EIdNotConnectedの例外を生成しましたとでて落ちてしまいます。
ソースを見てみたのですがどういう作業をしている時に何が悪くて落ちているのかもわからないです
超初心者でごめんなさい。解決方法等あれば教えて下さい。お願いします。
Delphi6Personal使用です。
942デフォルトの名無しさん:2005/09/12(月) 11:12:06
なんで超初心者用とスレタイにあるのにわざわざ初心者でごめんなさいなんて書くんだろう。
943デフォルトの名無しさん:2005/09/12(月) 12:02:31
答える気がないなら黙ってろよ

>>941
Indyスレ行ってみれば?
944ななしへたぐらま ◆XcB18Bks.Y :2005/09/12(月) 12:15:27
そろそろ次スレの季節ですがテンプレは特に変更しなくてよろしいでしょうか.
過去スレはh抜きでも特に不評はなかったのでこれでいこうと思いますが.
945デフォルトの名無しさん:2005/09/12(月) 16:21:14
>>943
そこまで言うなら誘導してあげなよ

>>941
http://pc8.2ch.net/test/read.cgi/tech/1093654251/l50

>>944
くだC++には兄弟の紹介あるのに、くだDelに紹介が無いのは何故?
946デフォルトの名無しさん:2005/09/12(月) 16:36:25
BCBを使うには Delphiの知識/常識が時に必要になる事があるけど
Delphiを使う分にはBCBの知識は必要ないからでは
947デフォルトの名無しさん:2005/09/12(月) 17:48:39
2006で統合されるから入れてもいい希ガス
948ななしへたぐらま ◆XcB18Bks.Y :2005/09/12(月) 19:09:56
次スレのテンプレを作ってみました.
C++Builderのくだすれへのリンクも追加してみました.
これで問題なければ建ててみます.
==== >>1用テンプレ:はじめ ============
このスレッドはBorland(ボーランド)のDelphi(デルファイ)について、
他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。

<前スレ>
くだすれDelphi(超初心者用)その26
http://pc8.2ch.net/test/read.cgi/tech/1121249711/

<兄弟スレ>
くだすれC++Builder(超初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1117225464/

<雑談・討論などはこちらへ>
ミ,,゚Д゚彡フサギコのフサフサDelphi談話室その25
http://pc8.2ch.net/test/read.cgi/tech/1125304359/

<その他>
Borland Home Page
http://www.borland.co.jp/
DelWiki (無料版Delphiの入手方法など)
http://onigiri.s3.xrea.com:8080/delphi/
==== >>1用テンプレ:おわり ============
つづく
949ななしへたぐらま ◆XcB18Bks.Y :2005/09/12(月) 19:14:43
950デフォルトの名無しさん:2005/09/12(月) 19:15:24
TButtonをクリックした時に、
・変数Aを外部プログラムへ引数として渡して処理
→外部プログラムの終了を確認してShowMessage
というのはどうやればいいんでしょうか?

LAMEのフロントエンドを作りたいんですが…
(既存のものは、曲間の無音無しを指定できないので)
951デフォルトの名無しさん:2005/09/12(月) 19:34:36
>>950
どちらもAPIを使用すればオケ。
CreateProcessで起動、WaitForSingleObjectで終了待ち。
上記でググればサンプルはいくらでも見つかると思う。
952デフォルトの名無しさん:2005/09/12(月) 20:16:08
VB でいう Frame (Form に枠を描画する)を Delphi 2005 で使いたいのですが
これに相当するものはどれにあたるのでしょうか?
953941:2005/09/12(月) 20:20:06
ありがとうIndyスレ行ってみます
954デフォルトの名無しさん:2005/09/12(月) 20:40:30
>>950
即レスありがとうございます。CreateProcess+WaitForSingleObjectで何とかなりそうです。


ついでと言っては何ですが、もうひとつお願いします。
外部DLL(Lame_enc.DLLやogg_enc.DLL)の利用はどうすれば良いのでしょうか?
955デフォルトの名無しさん:2005/09/12(月) 20:45:54
すみません、アンカーミスです
>>950>>951
956デフォルトの名無しさん:2005/09/12(月) 21:02:44
externalでヘルプ検索しる
957デフォルトの名無しさん:2005/09/12(月) 21:30:57
>>956
ハケーソww

ありがとうございました。
958906:2005/09/12(月) 21:35:52
>>952
VBのFrame同様の左肩に文字列を入れたいのならGroupBox
それ以外だとPanel、Shape、Bevelあたり

GroupBoxはRadioButtonを載せる場合が主で
コンテナとして一番良く使われるのはPanel

ShapeとBevelは見た目だけの枠
959ななしへたぐらま ◆XcB18Bks.Y :2005/09/12(月) 21:50:00
おお,>952へのレスを考えているうちに先を越されてしまった(w.
もっとも私のは想像だったのでVB利用者のレスが来て良かったです.

>>952
ちなみにBevelコンポはStyleプロパティをbsFrameにすると
VBのFrameみたいな(GroupBoxコンポと同じ)枠になります.
960952:2005/09/12(月) 22:43:23
>>958
>>959

お二方ともありがとうございました。
961デフォルトの名無しさん:2005/09/13(火) 06:05:15
962デフォルトの名無しさん:2005/09/13(火) 07:07:19
新スレもたったし、埋めネタ提供って事? >>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++の場合はテンプレートを使っていると他言語に移植する作業量が大きくなる。
963デフォルトの名無しさん:2005/09/13(火) 07:21:28
>>962
お前Cやったことあるのか?
俺は両方使うけど、そいつがいってる通りパッパッと作るようだぞ
あと、Cより低レベルに扱える言語なんてアセンブリ以外にない
しかも、アルゴリズムも言語なんか関係ない

> 俺にはDelphiの方が効率が良いデータ構造・アルゴリズムで書ける。
> つまり深く作るならDelphiの方が勝る
そりゃ、お前がCできないだけだろ

> 一般的にはデータ構造・アルゴリズムの改善の方が速度の改善につながる。
うむ、でもC出かかれてきたDelphiがCの速度を越えれるわけが無い
非常に非効率

> 現時点のDelphiは表現可能なデータ構造はC/C++に勝るとも劣らない。
かなり劣る。 メモリをCの用に扱えるのか、ポインタ演算はできるのか。
> C以上に低レベルの表現も可能だ。
無理。 上でもいったけど、元がC出かかれている以上それ以下の扱いはできない

> Cのコードは簡単にDelphiに変換出来るが
> DelphiのコードはCには簡単に変換出来ない。
あたりまえ、Delphiには抽象的な扱いのものが多数ある、それをCに変換することはできない
また、CのコードもDelphiになんてできない
964デフォルトの名無しさん:2005/09/13(火) 07:26:40
>>963
一生懸命書いたんだからちょっとは褒めてやれ

> これは全くあたらない。 同じ時間コーディングに時間をかけるなら
> 俺にはDelphiの方が効率が良いデータ構造・アルゴリズムで書ける。
> つまり深く作るならDelphiの方が勝る
C言語でそんなに抽象的なデータ構造を書ける君が、
君以外の人間のことを全く考えていない君が、
すごい
965デフォルトの名無しさん:2005/09/13(火) 07:27:04
>>962
フサスレに帰れよ。ゴミ人間
966デフォルトの名無しさん:2005/09/13(火) 07:28:19
>>965
なんだ、ネタだったのか
真面にやっちゃったよ
967962: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になんてできない
なんで? 無理なコード書いてみて
968デフォルトの名無しさん:2005/09/13(火) 07:40:15
>同じ時間かけてasmで書いたコードよりcのコードの方が高速な事が多い。
お前が書けないだけだろ
プゲラ
969デフォルトの名無しさん:2005/09/13(火) 07:42:37
>>967
じゃあ君は、カーネルをアセンブリで書くより
Delphiで書いたほうが早いっていってるの?

とりあえず、何もいわずにカーネルのコード読んで
どこがアセンブリで書かれてて、それはなぜCで書かれなかったのか
考えてみ
970962:2005/09/13(火) 07:42:42
>>968
書けるなら書いてみろよ。
たとえば SHの遅延スロットをアセンブラで埋めてみろ。

俺はCに負けた事は素直に認めるが、やったことない奴が
書けるというのは認められないな。

俺はお前の書いたアセンブラコードより早くなるCコードを書いてみせるよ。
971962:2005/09/13(火) 07:45:46
>>969
必要があって、CでもDelphiでも使っていいと言われたら
カーネルもDelphiで書くだろうよ。
タスク切り替えは単にスタックポインタの置き換えじゃないか。

972デフォルトの名無しさん:2005/09/13(火) 07:49:00
ハードも叩けないDelphiでカーネルを書けるあなたは神ですか?
スイッチなんて、Cで書いても遅いからアセンブラで書くのに
Delphiなんかでかいたら、どうなるかな最新スペックのマシンでも
一気に68Kに逆戻りか?
973デフォルトの名無しさん:2005/09/13(火) 07:51:54
こんなに必死な奴は久々に見たな
よく社会で渡っていけるなと関心する

974デフォルトの名無しさん:2005/09/13(火) 07:52:58
たぶん社会を渡れてないと思う
975962:2005/09/13(火) 07:54:51
>>972
ハードも叩けないというのは認識が正しくない
CというがCこそ言語仕様上はハードを叩けない。
Delphiは言語仕様上インラインアセンブラが組まれているので言語上で叩ける事になる。

カーネルのようなOSの助けが少ない場面で必要になるのはリンカーだ。
Cだと、Cの言語仕様にはないリンカで柔軟に再配置が出来る。

Delphiの場合、普段はリンカを意識する事は殆どない。
が、こいつさえ作り直せばいいわけだ。

スイッチ? switch/ caseの事? あるいは別の専門用語?
976デフォルトの名無しさん:2005/09/13(火) 08:12:28
>>962
見てて痛いからもういいよ
977デフォルトの名無しさん:2005/09/13(火) 08:24:36
「Pascalで」でなく「Delphiで」といってるのがポイントだと思うよ。
978962:2005/09/13(火) 08:25:47
勘違いするといけないので
 SHにはSH特有の問題があるのでasmで書くよりCの方が早い事が多いのであって
 PCのようなCISCの場合は、asmで工夫すれば早く出来る場面も多い。

SH特有の問題というのは
 ・ バス幅より狭い命令ワード・この為に埋めるべきスロットが生じる
 ・ 貧弱な命令体系 asmで工夫して使えるような命令が無い
   (DSP命令は命令ワードが倍になる為、結局スロットが埋まって効率が上がらない)


979デフォルトの名無しさん:2005/09/13(火) 08:29:30
複数ファイルを効率よく編集できるタブ切り替えテキストエディター「WHiNNY」
http://www.forest.impress.co.jp/article/2005/08/31/whinny.html
ってどう思う?
結構いい感じな気がするんだが。
980デフォルトの名無しさん:2005/09/13(火) 08:33:34
スレ埋めるためならゴミレス連投していいという決まりはないんだが。
981デフォルトの名無しさん:2005/09/13(火) 08:39:08
>>979
紙2001よりは良さそうだな
982デフォルトの名無しさん:2005/09/13(火) 08:40:24
>>962
埋めたいんならネタじゃなく何か有意義な事書けよ
983デフォルトの名無しさん:2005/09/13(火) 08:58:46
ポインタは使えるみたいね

http://hp.vector.co.jp/authors/VA014436/prg_memo/ccpp/c_d.html
int *temp temp:^Integer    ポインタ変数の定義
*temp   temp^         ポインタ変数の示す中身
&ptr    @ptr 又は Addr(ptr) 変数のアドレスを得る

984デフォルトの名無しさん:2005/09/13(火) 09:41:35
CとDelphiのい対比表

イタイ比表?
985デフォルトの名無しさん:2005/09/13(火) 09:55:57
>>962より反応してる奴のほうが痛いな
でも後半>>962が言ってる事が理解できない俺の頭も痛いかもしれん
勉強しよう・・・。
986デフォルトの名無しさん:2005/09/13(火) 10:12:27
>>972 の言ってるスイッチは タスク・スレッドのスイッチの事だろう。

やるべき事は、
スレッドの場合レジスタの保存とスタックの切替、コルーチンとほぼ同じだ。
タスクの場合はさらに、仮想メモリとかの資源の切り替え。

スタックを切り替える時点で、どっちにしてもアセンブラを使わないと書けない。
987デフォルトの名無しさん:2005/09/13(火) 13:52:09
次スレまだ立ってないじゃん
988デフォルトの名無しさん:2005/09/13(火) 14:23:41
だよな。知らない間に立って知らない間に落ちたのかもしれないけど。
989デフォルトの名無しさん:2005/09/13(火) 14:26:28
つまり962市ねと
990906:2005/09/13(火) 14:27:30
低レベルの操作はC>Delphiでいいじゃん
そうじゃないとCの存在意義がなくなるでしょ?

だってDB関連の開発では
Delphi>>>>>>>>>>>>>>>>>>>>>>>>>C
なんだから
991デフォルトの名無しさん:2005/09/13(火) 14:37:22
VCってインラインアセンブラ無くなったけどDelphiは大丈夫?
992906:2005/09/13(火) 14:42:17
993デフォルトの名無しさん:2005/09/13(火) 14:44:16
今さっき新スレ立ったっぽい

くだすれDelphi(超初心者)その27
ttp://pc8.2ch.net/test/read.cgi/tech/1126590039/l50

ただ1は>>948じゃねぇみたいだな
994デフォルトの名無しさん:2005/09/13(火) 16:47:30
埋め
995デフォルトの名無しさん:2005/09/13(火) 16:48:01
1000ゲトまであと5
996デフォルトの名無しさん:2005/09/13(火) 16:48:39
4
997デフォルトの名無しさん:2005/09/13(火) 16:49:10
3
998デフォルトの名無しさん:2005/09/13(火) 16:49:41
2
999デフォルトの名無しさん:2005/09/13(火) 16:50:57
1
1000デフォルトの名無しさん:2005/09/13(火) 16:51:32
1000ゲトーーー(・∀・)ーー!!
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。