くだすれDelphi(超初心者用)その55at TECH
くだすれDelphi(超初心者用)その55 - 暇つぶし2ch50:デフォルトの名無しさん
12/11/27 19:42:04.94 .net
>>48
自己解決しました
ListBox1.Items do
の中に入れていたのでエラーが発生したみたいです

51:デフォルトの名無しさん
12/11/27 20:08:00.88 .net
System.deleteで解決できました。

52:デフォルトの名無しさん
12/11/27 22:18:02.68 .net
Win32_PnPEntity を使った接続デバイスの一覧で
URLリンク(stackoverflow.com)
URLリンク(stackoverflow.com)

機器名を個別に関連付けするのに
URLリンク(www.wmifun.net)
HardwareID を参照取得したいのですが

PortData[No][0] := String(FWbemObject.name);
PortData[No][1] := String(FWbemObject.Description);
PortData[No][2] := String(FWbemObject.Service);
PortData[No][3] := String(FWbemObject.PNPDeviceID); ← これで振り分けに使うとドライバの種類になって機器個別にならない。
PortData[No][4] := String(FWbemObject.HardwareID); ← ここがエラーになる
PortData[No][5] := String(FWbemObject.Manufacturer);

Windows のシステムでハードウェアID を見るとString が複数行に渡っているため?だと思うのですが
取得する記述をどういうふうに書くのでしょうか?

53:デフォルトの名無しさん
12/11/27 23:50:37.26 .net
WMI Delphi Code CreatorとかMicrosoftのWMI Administrative Toolsに入っている
CIM Studioを使うと幸せになれるかも

54:デフォルトの名無しさん
12/11/28 00:37:46.87 .net
>>51
Win32_PnPEntity class (Windows)
URLリンク(msdn.microsoft.com)(v=vs.85).aspx

HardwareID
Data type: string array
Access type: Read-only
(中略)
Windows Server 2003, Windows XP, Windows 2000, Windows XP, and Windows NT 4.0:
This property is not available.

みたいなんですけど、OSは?

55:51
12/12/04 20:27:08.89 .net
>>53
規制で書けませんでした
OS は XP sp3 です。
Delphi は D6 です。
HardwareID は array なんですね。
HardwareID 部分を別アレイにするとしても変動する行数をどう取得するのやらさっぱり

その後 各USB 機器やWindows の HardwareID を調べていった結果
どうやら機器そのものの ID ではなくて
その機器に使われている I/O 部分の ID だということが判りました。
結局ドライバレベルの(他メーカーでも同一のチップによるひとくくりな)大まかな振り分けしかできないようで
質問は取り下げします。 スミマセン

56:デフォルトの名無しさん
12/12/04 20:57:16.27 .net

取得以前に、Win32_PnPEntityの場合HardwareIDは存在しないのでは?

Windows Server 2003, Windows XP, Windows 2000, Windows XP, and Windows NT 4.0:
This property is not available.

大事なことだから、二回もWindows XPと書いてあるけど。

57:51
12/12/05 03:14:00.05 .net
>55
PnPEntity で取れるかどうかは別として
デバイスマネージャ上のプロパティ > 詳細 > ハードウェア ID
で OS から見たりした結果です。

XP でも項目と値は入っていますよ

58:デフォルトの名無しさん
12/12/05 06:16:10.52 .net
>>52

59:51
12/12/05 21:48:09.23 .net
>>57
目的が「機器名を個別に関連付けする」です。
その為に機器個別のメーカーが振ったローカル情報があれば取得したかったわけです。
A社の機器B 使われているI/O のチップF
C社の機器D 使われているI/O のチップF

で、この場合、共通の「I/O のチップF」しか取得できないようで
異なる通信接続手順などを自動設定できないな・・・

USB Web カメラなどは接続の(画像サイズなど)リストが出る方法があるようですが
振り分けのターゲットは、USB 接続
CP210x USB to UART Bridge Controller
の先にいる機器です。
あきらめました

60:デフォルトの名無しさん
12/12/05 22:09:15.88 .net
>>56
なんかすれ違うなぁ。
いやXPではHardwareIDが無いなんて言ってないし、別の方法で確認したことは理解してましたよ。

>HardwareID 部分を別アレイにするとしても変動する行数をどう取得するのやらさっぱり
って書いてあったから、
arrayとかの問題以前に、XPでWin32_PnPEntityの場合はHardwareIDの取得は無理なのでは、と言ったつもり。

分かってるなら私の読解力不足。失礼。

61:デフォルトの名無しさん
12/12/18 00:06:09.01 .net
質問です。

FindFirst(), FindNext() で開いているディレクトリの中のファイルを操作すると何か問題ありますか?

画像ビューアを作っています。ウィンドウにドロップされたフォルダを開き、ファイル一覧を得て、順番に表示し、必要に応じて画像を移動したり削除したりするものです。

62:デフォルトの名無しさん
12/12/18 00:08:10.93 .net
60 つづき。

フォルダの中の画像が多いとファイル一覧を得るのに時間がかかるので、差し当たり百枚くらいリストを作ったら最初の画像を表示し、ユーザに待ち時間を感じさせないようにしたいのです。
FindNext() は TThread か Application.PrecessMessages で GUI と競合しないように継続するので、FindClose() する前に、ファイルにアクセスすることになります。

よろしくお願いします。

63:デフォルトの名無しさん
12/12/18 01:50:28.19 .net
試しにどうでもいいデータでテストしてみればいいだけでは。

64:デフォルトの名無しさん
12/12/18 05:25:00.09 .net
時間がかかるって、ファイル何個で何秒?
FindNext以外の処理で重くなってる気がする FindNext自体は高速だろう

65:デフォルトの名無しさん
12/12/18 05:40:04.99 .net
エクスプローラ的なUIの画像ビュアーか いかにも面倒臭そう
そういうソフトだったVixってソースが何十万行もあったような・・・

66:60
12/12/18 07:00:40.64 .net
>>62
旧バージョンではフォルダを閉じずにファイル操作していましたが別に不都合は感じませんでした。
でも本当にそれでいいのか気になって一旦ファイル一覧を作ってフォルダを閉じてから操作するようにしました。
すると今度は待ち時間が発生するのでどうしたものかと。

67:60
12/12/18 07:09:37.06 .net
>>63-64
*.* で全てのエントリを拾って拡張子を調べて BMP, GIF, JPEG, PNG を選び TStringList に Add() しています。
ExtractFileExt(), LowerCase(), AnsiPos() をエントリの数だけ繰り返します。
コードの行数は三桁もないと思いますが while ループがあります。
実際にかかる時間は画像千枚くらいで十秒くらいでしょうか。

68:デフォルトの名無しさん
12/12/18 08:59:41.58 .net
Win限定ならFindNext使って列挙せずに、シェルAPI使おうぜ。そうすりゃ、エクスプローラとの
見た目の一貫性とかある程度取れる。

>>60
FindFirst,FindNextももちろんだが、ディレクトリのファイルを操作する
APIの呼び出し時にもちゃんと戻り値をチェックして行儀のよくプログラミング
しておけば別に問題ないと思うけど。

69:60
12/12/18 09:42:46.02 .net
>>67
ShellAPI ですね、調べてみます。
戻り値にも気を付けます。
いっそ、全てのファイルを取得してフォルダを閉じてから画像ファイルを選べばいいんじゃないかと思い当たりました。

70:デフォルトの名無しさん
12/12/18 09:58:50.43 .net
つか、Application.ProcessMessagesとかかっこ悪い事はやめよう。
ファイル操作がいったいなんなのかよくわからんけど、単純にサブスレッドで
列挙するだけなら、
URLリンク(pastebin.com)

71:60
12/12/18 16:41:59.29 .net
>>69
ありがとうございます。
それも参考にしてなんとかしてみます。

72:デフォルトの名無しさん
12/12/25 23:28:28.78 .net
delphi6を使用しています。

var
Time : TDateTime;
str : String;

begin
Time := Now;
DateTimeToString(str, 'h時n分s秒',Time);
Label1.Caption := str;

とすると、時、分、秒が表示されず数字のみの表示になってしまいます。
どうすれば時、分、秒が表示されるのでしょうか?

73:デフォルトの名無しさん
12/12/25 23:32:00.10 .net
>>71です。
'h''時''n''分''s''秒'で解決することができました。

74:デフォルトの名無しさん
12/12/25 23:45:48.35 .net
つ FormatDateTime

75:デフォルトの名無しさん
12/12/26 02:45:33.20 .net
そっちも問題は一緒ですけど

76:デフォルトの名無しさん
12/12/26 18:34:08.08 .net
procedure TForm1.FormCreate(Sender: TObject);
var
ini : TIniFile;
ExePath: String;
begin
ExePath := ExtractFilePath(Application.ExeName);
ini := TIniFile.Create(ExePath + 'settings.ini');

if ini.SectionExists('Settings') then

このようにして、settings.iniのセクション'Settings'があった場合の動作を指定しようと思ったのですが、どうもうまくSectionExistsが働いていないようで、
SectionExistsがTrueになってくれません。
settings.iniに'Settings'のセクションはあります。
解決策をどなたか教えて頂けないでしょうか?

77:デフォルトの名無しさん
12/12/26 18:46:02.48 .net
デバッグ版DCU使ってSectionExistsの中にステップインしてみたら?

78:デフォルトの名無しさん
12/12/26 19:03:34.31 .net
>>75
根本的な解決にはならないけど代替案。

var hoge: Integer;

hoge := ini.ReadInteger('foo', 'bar', -1);

if hoge = -1 then
begin
// invalid
end
else
begin
// valid
end;

79:デフォルトの名無しさん
12/12/26 19:28:08.38 .net
>>76さんのやり方は出来ないことが判明したので、>>77さんの代替案を使用させて頂きます。
ありがとうございました!

80:デフォルトの名無しさん
12/12/26 19:28:58.23 .net
>>78です。
言葉足らずでした。
>>>76さんのやり方は出来ないことが判明したので
性格には>>76さんのやり方は私の環境では出来ないことが判明したので
でした。

81:デフォルトの名無しさん
12/12/26 22:43:09.66 .net
はぁ

82:デフォルトの名無しさん
12/12/27 10:11:15.46 .net
tがひとつ多いとかsが足りないとかいうしょーもないオチだったりして・・・

83:デフォルトの名無しさん
12/12/27 10:39:42.33 .net
出来ないだけじゃ分からん

84:デフォルトの名無しさん
12/12/28 20:33:30.27 .net
出来ないのは彼女です

85:デフォルトの名無しさん
12/12/30 01:20:29.43 .net
こんなアホそうなやつでも遭遇するバグだったら他の誰かがとっくに気付いてるし

86:デフォルトの名無しさん
13/01/16 20:32:54.27 .net
無償、もしくは非常に安価なバージョンは用意されていますか?

87:デフォルトの名無しさん
13/01/16 21:13:03.38 .net
Starter Editionってのがあったと思う。色々制限はあるだろうけど。

88:デフォルトの名無しさん
13/01/19 01:45:04.23 .net
何もないフォームに PaintBox を一つ貼り付けて、プログラムも OnPaint に

procedure TForm1.FormPaint(Sender: TObject);
begin
with PaintBox1.Canvas do begin
Brush.Style := bsSolid;
Brush.Color := clWhite;
FillRect(ClipRect);
end;
end;

と書いただけの時、フォームのダブルバッファが True だと表示されないのはなぜ?
前はちゃんと出来ていたと思うのだけど・・・

89:87
13/01/19 01:50:44.31 .net
あ、バージョンは XE Starter です。

90:デフォルトの名無しさん
13/01/19 08:45:42.15 .net
事故解決しました・・・

91:デフォルトの名無しさん
13/01/24 21:34:14.71 .net
Windows 7 (32-bit/64-bit) 環境で Delphi 6 は、インストールと動作は可能でしょうか?

XP モードというものを入れないと使えない?とかありますか?

92:デフォルトの名無しさん
13/01/24 21:47:48.13 .net
>>90
今使ってるが問題なく使えている(win7 pro 64bit)
XPモードは使っていない
開発頑張ってね

93:デフォルトの名無しさん
13/01/24 21:59:16.63 .net
>>90
Delphi5Pro だけど Win7 32/64bit でちゃんと動いてるよ。
ただしプロジェクトファイルは Delphi 本体からでないと開けない。
F9 で実行中のウィンドウはファイルのドロップを受け付けない。
ヘルプファイルの挙動が時々不審。
この三つ以外は特に問題ない。

94:デフォルトの名無しさん
13/01/24 23:42:16.76 .net
>>91-92
ありがとうございます。 安心して機種移行するまで今のXP環境を使います。
最近の(64-bit)機種でXPのドライバが無いものなどがあるようなので
今使っているパソコンが壊れたら開発環境崩壊? かと

95:デフォルトの名無しさん
13/01/25 00:18:01.99 .net
Lazarusあかんの?

96:デフォルトの名無しさん
13/01/25 19:44:18.45 .net
横から便乗質問なんですが(私も Win7 64bit Delphi5Pro です)
最近急に .hlp の起動が遅くなりました
数ヶ月くらい前から急にです
秀丸から開いたりするとタイムアウトエラーになるほど遅いです
おそらく何かきっかけがあったんでしょうがググってもあまり良い情報は得られませんでした
>>92 さんはそんなことは起きていないですか?

97:デフォルトの名無しさん
13/01/25 23:33:29.77 .net
Delphi関係だけが遅いのですか。
ファイルのコピーとかは遅くないですか。

98:デフォルトの名無しさん
13/01/26 00:38:16.19 .net
>>95
92 です。
うちでは起動が遅いということはありません。
うちの不審な挙動とは F1 でヘルプを開こうとしたときに、クラスではなくプロパティやメソッドの名前にカーソルがあると開かないというものです。

99:デフォルトの名無しさん
13/01/26 02:49:54.46 .net
Windows 7 Pro 64bit に Delphi 7.1 をインストールして快適に使っています。

唯一、F1 キーによる状況検知ヘルプだけが有効に機能しません。

「C:Delphi7Helpd7.hlp ファイルが見つかりません。このファイルを自分で探しますか?」

というメッセージダイアログが出てしまいます。ヘルプファイルのパス名から \ マークが
消えています。Windows 7 側の問題だと思いますが、このスレに解決方法をご存じの方
いらっしゃいますか?

100:95
13/01/26 11:06:48.62 .net
>>96-97
どもです
WinHelp は他に API32WH.HLP くらいしか使っていなかったのですが
今ほかの昭和なソフトで確認したら問題なかったです
秀丸に登録してみてもすぐに開きました
D5、D6、API32WH.HLP はドライブもフォルダも異なるので HDD の問題でもないと思うのですが
うまく開いていた頃はたまにオブジェクトインスペクタから開いた時に「追加情報はありません」と
出ていたくらいでその時はフォームのコンポーネントで F1 押せば正常に開いていました

101:デフォルトの名無しさん
13/01/28 20:45:15.19 .net
Dという言語がある。D1, D2があるから、
D5, D6なんてかかないほうがいいとおもう

102:デフォルトの名無しさん
13/01/28 21:08:54.10 .net
その弩マイナーな言語よりDはDelphiが先なんで

103:デフォルトの名無しさん
13/01/29 02:25:38.68 .net
DelphiをDなんて言う人滅多に見ないな
滅多にってか見た記憶がなかったわ

104:デフォルトの名無しさん
13/01/29 05:51:22.40 .net
だから何なの。D5,D6という記述は普通だけど。

105:デフォルトの名無しさん
13/01/29 10:21:07.95 .net
Delphiである前提条件下では普通だな。tipsやvclの対応表記とか。
ここもそうならそうでいいんじゃないの?
厳密に正否なんてないがDelphiスレでおかしいと思うのもどうかと思うが
普通とか言っちゃってるのも相当おかしい。

106:デフォルトの名無しさん
13/01/29 11:33:33.01 .net
検索のノイズになることを懸念しているのであれば、「D言語」で検索すれば問題ないんじゃない?

107:デフォルトの名無しさん
13/01/29 20:17:22.90 .net
>>104
お前の日本語の方がおかしい

108:95
13/01/29 20:39:57.31 .net
D言語が存在するのは承知していますが
パソ通時代から現在まで Delphi スレでのバージョン明記の目的でしか D5、D6 という書き方をしたことがありません
とかどうでも良いんですが
Help 問題は俺環みたいですねお騒がせしました

109:デフォルトの名無しさん
13/01/30 22:32:42.43 .net
ふぁっきんじゃっぷ

110:デフォルトの名無しさん
13/01/31 22:06:32.93 .net
Delphi のバージョン略を 他言語 D と混同するとか難癖つけるやつは
スレタイ100回音読しやがれ!
何の開発言語のスレだ ボケっが

111:デフォルトの名無しさん
13/01/31 22:12:05.90 .net
 
       ____
     /⌒  ⌒\ ホジホジ
   /( ●)  (●)\
  /::::::⌒(__人__)⌒::::: \  はいはい
  |    mj |ー'´      |
  \  〈__ノ       /
    ノ  ノ

112:デフォルトの名無しさん
13/01/31 23:11:52.74 .net
>>109
釣られちゃダメよ。

113:デフォルトの名無しさん
13/01/31 23:22:09.92 .net
pascalのくせに生意気だ

114:デフォルトの名無しさん
13/02/18 07:30:58.90 .net
あるテキストを読み込み空行があれば
行を詰めて書き直したい
----------------------------------
ファイルから一行読み込む
最初の一文字が<>空欄でなかったら
書き込む
----------------------------------

元のテキスト

aaaa

bbbb

cccc


結果
aaaa
bbbb
cccc

こんなプログラム書いてくれる親切な人いたらお願いします。
昔 turbo pascal (わかるかな?)というので数行で書けたのですが
by後期高齢者

115:デフォルトの名無しさん
13/02/18 08:06:43.24 .net
>>113
sl: TStringList;
i: Integer;

// Create して LoadFromFile

for i := sl.Count - 1 DownTo 0 do
if sl[i] = '' then sl.Delete(i);

// SaveToFile して Free しておしまい。

たぶんこんな感じ。

116:デフォルトの名無しさん
13/02/18 08:18:48.55 .net
var
fr,fw:textfile;
s:string;
begin
assignfile(fr, "ファイル名");
assignfile(fw, "ファイル名");
reset(fr);
rewrite(fw);
while not eof(fr) do
begin
readln(fr, s);
if s = '' then writeln(fw,s);
end

117:デフォルトの名無しさん
13/02/18 09:36:59.86 .net
>>114
>>115
多謝、毎日実用させていただきます。

118:デフォルトの名無しさん
13/02/19 08:30:33.31 .net
最初の一文字が<>空欄でなかったら書き込む

この条件見落としてる人ばかりw 0点。<と>の判定を忘れてる

119:デフォルトの名無しさん
13/02/19 11:21:59.30 .net
>>117 は何か勘違いしているな。
依頼主の表現も悪かったが、それを読み解く能力の有無で >>114-115 と差がついてしまっているようだ。
コミュニケーションスキルは大事だということが理解できる事例。

120:デフォルトの名無しさん
13/02/19 12:19:20.03 .net
WindowsXPsp3、Delphi6 personalですが

アプリ起動時にアプリ本体のあるディレクトリにデータ保存用のフォルダを作っているのですが
そのフォルダの中にファイルストリームでテキストファイルを生成して
そのファイルをTStringListで読み込むにはどうすればいいですか?

アプリ本体と同一フォルダにファイルストリームでテキストファイルを生成してTStringListで読み込むことは出来ています
検索してもフォルダ内にファイルを作る方法がよく判りません

121:デフォルトの名無しさん
13/02/19 12:33:37.6


122:0 .net



123:デフォルトの名無しさん
13/02/19 12:59:18.98 .net
>>119
実行ファイルのディレクトリはExtractFilePath(Application.ExeName)で
取得出来るよ。

124:デフォルトの名無しさん
13/02/19 13:23:50.40 .net
「最初の一文字が<>空欄」ってどういうことか。
<や>で始まる一行を削除したいんだろう もっといえば「複雑な削除条件を持たせたい」ってのが
本件の主軸。しかもその削除条件は変動的だろうさ EXEでやるのは間違い、PerlやRubyスクリプト
でやるべきだ それなら依頼主が言うようにたった数行でできるしいつでも変更できる
初心者が理解しがたいDownToの逆順ループとかやってるアホがいたけどw それで保守できるの?
いかにも仕様変更時に勘違いやバグが起きそうだ

125:デフォルトの名無しさん
13/02/19 14:04:15.85 .net
>>120-121
何と、あっさりと出来てしまいました
本当にありがとうございましたm(_ _)m

126:デフォルトの名無しさん
13/02/19 15:13:21.51 .net
ParamStr(0) も忘れないでください

127:デフォルトの名無しさん
13/02/19 15:37:29.39 .net
GetModuleFileNameも忘れないで

128:デフォルトの名無しさん
13/02/19 15:51:33.71 .net
>>122
いろいろと痛々しいから大人しくしていたほうがいいよ。
これ以上の議論はスレ違いなんで、あと一回捨て台詞吐いて消えな。
それについては反論しないから安心していいよ。
最後はお前さんの勝ちってことでいいからね。

129:デフォルトの名無しさん
13/02/19 16:09:47.94 .net
Ran ちゃん、ご苦労さま。

130:デフォルトの名無しさん
13/02/19 18:02:53.69 .net
>>122
依頼主が「多謝」っていってんのに何いってんのこいつ?
依頼主が何をいってるかわからないなら勝手に読み解くんじゃなくて
依頼主にたずねるのが常識だろ?
これだから引きこもりは嫌なんだよ。

131:デフォルトの名無しさん
13/02/19 19:07:42.01 .net
コミュ障なんだろ
ほっとけよ

132:デフォルトの名無しさん
13/02/19 20:11:26.96 .net
> 初心者が理解しがたいDownToの逆順ループ
Delphiの定石だと思うんだけど。

133:デフォルトの名無しさん
13/02/19 23:03:04.68 .net
StringListでDeleteするならDownToの方が安心だよね。

134:デフォルトの名無しさん
13/02/20 08:46:09.55 .net
定石とか安心とか、中級者がハマりがちな勘違い 上級者ほど基本に立ち返る

135:デフォルトの名無しさん
13/02/20 11:43:06.50 .net
削除時のdowntoは基本中の基本だけど?

136:デフォルトの名無しさん
13/02/20 12:02:01.17 .net
>>133
相手しちゃダメ。

137:デフォルトの名無しさん
13/02/22 10:26:30.39 .net
>>131
安心つか>>133の言うように、downtoでないとindexずれるよ

138:デフォルトの名無しさん
13/02/23 20:44:31.31 .net
会社でDelphi7使うことになって、勉強のために家のPCにもDelphiをインストールしたいです。
ただ、Delphi7はバージョンが古いようで、手にはいりません。
Delphi7と同じ感覚で使えるバージョンはありますか?

139:デフォルトの名無しさん
13/02/23 21:44:26.66 .net
>>136
Delphi6が無償で配布されているがそれじゃダメかな
コードの練習と各々の機能の理解はどのバージョンでも出来ると思うよ

140:デフォルトの名無しさん
13/02/23 21:57:18.46 .net
>>137
そのキャンペーンはとっくに終わっている
現在、無償の Delphi は存在しない

141:デフォルトの名無しさん
13/02/23 22:11:14.70 .net
>>138
そうだったのか
ならLazarusはどうかな?

142:デフォルトの名無しさん
13/02/24 02:14:31.51 .net
短発の仕事の為だけに1万くらいの最新の奴買う訳にはいかないよなw

143:デフォルトの名無しさん
13/02/24 02:51:13.50 .net
BCB 6 perはエンバカがキー公開してるけどD6はしてないんだな
URLリンク(delwiki.info)

ライセンスに反しない手段だとCD付録の書籍探すしかないかな
コンポがインスコ出来ないTurbo Delphi Explorerは配布の時に
「ミラーリングして拡散してくれ」とか言ってたような気がするけど
ライセンス入手出来るのか知らない

144:デフォルトの名無しさん
13/02/24 08:36:17.34 .net
XEでも似たようなモンだろ? 体験版あるよ
えーと7とそっくりだったのは2010だっけか 6と7は文字コードの差とか内部的には違いが大きいはず
見た目は近いけど。複数のバージョン試して驚いたのがコンパイラがまったく進歩せず、6のソースが
ほとんど高速化しなかったこと その点を踏まえれば古いバージョンのままでも正解だと思う

145:デフォルトの名無しさん
13/02/24 09:20:08.31 .net
うちも未だに仕事では7なんだけど7ってやっぱ優秀なの?
何を持って優秀というかは自分でもわからんけど自宅では趣味性で最新版入れてるけど
特に顧客要件も関係ないのに頑なに7なんだよねぇ

146:デフォルトの名無しさん
13/02/24 09:43:54.73 .net
5が最強らしいけどユニコードががが……。

147:デフォルトの名無しさん
13/02/24 16:28:20.99 .net
>>143
優秀っていうより7からXP モードが搭載されて見た目がXPライクに作れる
それまでのは 画面のテーマで「Windows クラシック」なウィンドウ。
吐くコードが Windows 2000 でも動作可能で Win32API に気をつけて組めば
Win95 でも動くものを作れるので、雑多に混ざっているクライアント環境に渡すには強い。
MS visual studio は上位バージョンになっていくと過去OSで動かないコードになってく

148:デフォルトの名無しさん
13/02/24 21:02:49.88 .net
>>136
XE3買えば全てのバージョン使えるじゃん。

149:デフォルトの名無しさん
13/02/24 21:37:35.70 .net
未だに会社でDelphi7の環境ってことは、ライセンスに関してはゴニョゴニョって感じなのかな。

150:デフォルトの名無しさん
13/02/27 06:21:33.20 .net
ロングファイルネームや感じがダメなら hogeho~1.dbf とかの短縮名で
アクセスしちゃダメ何かね? MLの話題なんだけど...。

151:デフォルトの名無しさん
13/02/27 06:44:36.34 .net
ほっとけよ。>148
質問者も回答者も隠し球ばかり。

あの手のバグは FileMon つかって実際に開こうとしているファイルを「知る」のが最短の対応。

152:デフォルトの名無しさん
13/03/01 00:16:17.49 .net
すみません、実はかなり初歩的なことなんだろうと思うんですけど、
ゴチャゴチャやってるうちにわけわかんなくなっちゃいました。

function HOGE(bmp: TBitmap): boolean
var
tmpBMP: TBitmap;
begin
tmpBMP:=TBitmap.Create;
try
で、tmpBMPにいろいろやって、

最終的に、
bmp.Assign(tmpBMP);
なんてことをやる場合、
end;

この関数の引数であるbmpは var とかにしなきゃダメなんですか?
はっきりは分かりませんが、これでも動いてることは動いてるみたいなんです。

153:デフォルトの名無しさん
13/03/01 00:21:31.54 .net
HOGE の引数、 bmp を誰がいつ用意するか。を意識してみてください。
この場合の用意は、TBitmap のコンストラクターを呼ぶのは誰か。と言うことになります。

154:デフォルトの名無しさん
13/03/01 00:56:00.06 .net
アホでごめんなさい。ほんとにごめんなさい。
コンストラクタ、あたりの言葉の意味が・・・???程度のアホです。
大雑把にいうと以下のような使い方をしています。
var
MyBMP: TBitmap;
begin
MyBMP:=TBitmap.Create;
try
MyBMP.LoadFromFile(strFile);
if ある条件を満たしていたら
if HOGE(MyBMP)=true then
begin
MyBMP.SaveToFile(strFile);
end;
end;
finally
MyBMP.Free;
end;

呼び出し先�


155:ナ値が変わっちゃうものは、今まで判で押したようにvarにしてたんですけど、 今回たまたまvar書き忘れてたことに気づいて、え、これでも動いてたの、と。



156:デフォルトの名無しさん
13/03/01 01:42:05.90 .net
HOGE の引数 bmp は、HOGE 実行中には「変更」されませんね。
bmp はオブジェクトを指していて、オブジェクト自身の持つデータ(プロパティやフィールド)は
変更されますが、オブジェクト自体は書き換わっていません。
だから HOGE の引数宣言に var は必要ありません。

これが、HOGE 内で bmp に新しいインスタンスを設定する場合には、HOGE の引数宣言に var が必要になります。

より内部的な説明をするなら、Delphi のオブジェクトインスタンスはポインタだから、インスタンスを新規に
割り当てないのであれば var は必要ない。となります。

157:デフォルトの名無しさん
13/03/01 02:56:48.78 .net
うーん、分かったような分からないような、で御免なさい。

>>HOGE 内で bmp に新しいインスタンスを設定する場合には

bmpは、HOGEが登場してきた時点ですでに、どこかでCreateされたTBitmapなわけですよね。
それをたとえばHOGE内でbmp.Freeなんてやっちゃうとか、HOGE内であらためてbmp=TBitmap.Createやっちゃうとか、
そういうときにこそvarにする、ということでしょうか?

もしかしたら完全にトンチンカンなこと言ってるかもしれません。
アホな話持ち出して、まったくすみません。

158:154
13/03/01 03:21:38.95 .net
ちょっとだけわかったような(勘違いかもしれないけど)

TImageを引数にしてそこにBitmapを押し込む関数をいくつかつくったことがあるんです。
このときはvarにしてません。
この関数によってTimageの「値」はたしかに変わるんですよね。
でも、理屈云々の前に、varにしようなんて考えはまるで浮かばなかった。
だってこれ、ただそこにある箱じゃん、と。
それと同じように考えて(・・・本当にいいのかな?)
とりあえずおやすみなさい。

159:デフォルトの名無しさん
13/03/01 04:58:09.07 .net
>それをたとえばHOGE内でbmp.Freeなんてやっちゃうとか、HOGE内であらためてbmp=TBitmap.Createやっちゃうとか、
> そういうときにこそvarにする、ということでしょうか?

やってみそ。

160:デフォルトの名無しさん
13/03/01 10:30:28.53 .net
クラスは何もしなくても参照(アドレス渡し)なので、varをつけなくてもそのインスタンスの内容を
変えることができる。varをつけるとインスタンスを格納するためのポインタのアドレスが渡されるので、
インスタンスそのものを変更することができる(コンストラクタを呼び出して生成したインスタンスを
設定したり、デストラクタを呼び出してnilに設定したり)。
要はクラスをパラメータで渡すときは暗黙にvarがついていると思えばいいってこと。

161:デフォルトの名無しさん
13/03/01 10:58:39.08 .net
bmp: TBitmap って引数で渡すとbmpはポインタだから varもポインタ渡しで同じ意味になる

暗黙もへったくれもない常識だが・・・?

162:デフォルトの名無しさん
13/03/01 14:25:29.04 .net
ポインタのポインタだって。呼び出し元のbmpの参照先を
書き換えることができ、違うTBitMapにすることだってできる。

163:デフォルトの名無しさん
13/03/01 16:16:20.87 .net
そこにポインタを持ち込むと、分かる人と分からない人が出てくるから、
説明するときは考えちゃうんだよなぁ。
ネットだと、質問者の持ってる知識が分からない場合が多いから

164:154,155
13/03/01 22:57:48.49 .net
いくつか実験してみました。
基本がわかっていないので貧しいイメージしか出来ませんけど。
varをつければ製造元までさかのぼって変更できる、というひとまずの納得の仕方。

stringとかintegerとかは、初めて代入されたところが事実上の製造元。

TbitmapみたいなのはCreateされたところが製造元であとは飾りみたいなもの。
飾りというよりはコンテンツか。
それを変えるだけなら製造元まで遡る必要はない。

なんかまたバカまるだしなこと書いてるかも。

お騒がせしました。

165:154,155
13/03/01 23:33:40.18 .net
何度も面倒な話題ですみません。
下の関数の引数、varにしなくても、関数内で何度でも生まれ変われるみたいです(激しく混乱状態)

procedure TForm1.GEHO(objFile: OleVariant);
begin
objFile:=unassigned;
objFile:=CreateOleObject('Scripting.FileSystemObject');
if objFile.FileExists('C:\test0.txt') then
begin
ShowMessage('OK');
end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
MyFSO, MyFile: OleVariant;
begin
MyFSO:=CreateOleObject('Scripting.FileSystemObject');
MyFile:=MyFSO.CreateTextFile('C:\test0.txt', true);
MyFile.Write('test-test-test');
MyFile.Close;
GEHO(MyFile);
MyFile:=unassigned;
MyFSO:=unassigned;
end;

ただ現実の話として、こんな関数使うことがあるとは思えないんで、
ウザかったら放置してくれていいです。

166:デフォルトの名無しさん
13/03/02 00:16:21.00 .net
クラスはポインタで渡されるってことだ OleVariantもクラスだろ
StringやIntegerはデータ型であってクラスではないから別物

通常var渡しはサブルーチンから複数の戻り値を得るために使うもので、1個だけでいいなら
普通のfunctionで済むはず
クラスがいつCreateされるかよく考えないとメモリリークに悩まされるよ

167:デフォルトの名無しさん
13/03/05 14:05:17.30 .net
C++で作成されたDLLをDelphiで使用するにはどのように定義すれば良いのでしょうか?
DLLのソースにはextern "C"はついており、defファイルも存在しています。

168:164
13/03/05 15:09:31.68 .net
VC用のDLLでした

169:デフォルトの名無しさん
13/03/05 15:10:02.11 .net
VC++です・・・
何度もすみません

170:デフォルトの名無しさん
13/03/05 16:10:55.49 .net
URLリンク(docwiki.embarcadero.com)
手続きと関数(Delphi)
ライブラリからの関数のインポート

171:デフォルトの名無しさん
13/03/16 15:30:01.82 .net
'String'.Uppercase; ==> 'STRING'
3.Odd; ==> True
みたいにどうにかして順序型でメソッド呼べるようにする方法ないですか

172:デフォルトの名無しさん
13/03/16 15:45:17.91 .net
独自なStringクラスを作りゃええやん

173:デフォルトの名無しさん
13/03/26 18:50:40.41 .net
Delphiという言語の質問じゃないんですが、使い方で。

実行時にIDEが勝手に最大化されますよね?
これを止める方法をご存知のかたいますか?
現在使っているのはXE2です。

よろしくお願いします。

174:デフォルトの名無しさん
13/03/26 21:33:30.49 .net
今時のIDEは最大化してしまうのかよ
俺の知ってるDelphiは昔から
「環境オプション」→「コンパイルと実行」→
「実行時に最小化」&「実行時にデザイナを隠す」
といった遠慮がちな設定しかできないがw

175:デフォルトの名無しさん
13/03/26 21:35:19.80 .net
あ、もしかしてデスクトップスピード設定たらいうやつの
「デバッグ時のデスクトップに指定」で記憶してしまってるのかな?

176:デフォルトの名無しさん
13/03/30 11:03:18.03 .net
コミュ障プログラミング言語ってDelphi2009で作ったのな…
すげい。

177:デフォルトの名無しさん
13/03/30 16:57:41.44 .net
すみません教えてください

知り合いにプログラミングを誘われて、ずいぶん前にDelphi2010を購入しました。
最近までほおっておいたのですが、手元にあったDelphi2005プログラミングテクニック
を読みながら勉強を始めました。

Vol4にある5.4ディレクトリボックスのサンプルプログラムを見ながら
Imageにp.14の倍率とScrollBoxと倍率の選択をRadioGroupにしています。

わからないところですが、
1.Image1.Picture.Bitmapとありますが、Bitmapを消さないとjpgが表示されませんが、これは普通なのでしょうか?
2.最大に表示させてもフォームは最大になりますが、ほかのコンポーネントの表示サイズは変わりません。
フォームサイズのほかのコンポーネントを追随させる方法
3.RadioGroupを2行2列で表示する方法。
4.選択した項目を取得させる方法。ItemIndex ofで取得させる方法


178:でよいのでしょうか? ItemIndex ofで返ってきた値を変数に代入しても検出できません。 ダイアログで表示させても値が空白になっています。 ヒントだけでもかまいません。よろしくお願いいたします。



179:デフォルトの名無しさん
13/03/30 17:25:20.49 .net
2.Anchors
3.Columns
4.ItemIndex

180:デフォルトの名無しさん
13/03/30 17:38:45.29 .net
>>171,172さんありがとうございました。

172さんの言われたことが参考になりました。
結局、開発時にウィンドウの大きさとか変えても、
デバック時にわざわざ呼びなおしてくれるということですね。
DefaultLayoutというやつが元々最大化されている状態なので、
いつも最大化を解除していたのですが、解除した状態で
保存してやる必要があるということでした。

あとは好みの問題ですかね。

181:デフォルトの名無しさん
13/04/09 22:45:24.23 .net
ちょっと お知恵を拝借したいです
Delphi6
これまで比較的小さいバイナリデータを処理するのに
TMemoryStream で
MS_Base.LoadFromFile(FileName); // メモリ上にファイルを読み込んでから

MS_Base.Position := Address;
Bytes := 4;
MS_Base.Read(Buffer,Bytes);

という感じで開始ポインタと読み込みサイズを指定していたのですが、
今回、動画データなどの巨大ファイルから直接部分データを読み込むことをしようとしています。
(300MB 越えのデータを複数連続で読み込むと負荷が大きい為)

182:177
13/04/09 22:46:50.25 .net
例:
0000 : 52 49 46 46-7E B4 FD 0F-41 56 49 20-4C 49 53 54 : RIFF AVI LIST
0010 : 4E 01 00 00-68 64 72 6C-61 76 69 68 38 00 00 00

function TForm1.Analyze(FullFileName: String) :Boolean;
type
 IntFile = file of Integer;
var
 Byte : Integer;
 AData: IntFile;
begin
 AssignFile(AData,FullFileName);
try
 Reset(AData);
 Read(AData,Bytes);
 Memo_Debug.Lines.Add('0 = ' + IntToHex(Bytes,2));
 Read(AData,Bytes);
 Memo_Debug.Lines.Add('1 = ' + IntToHex(Bytes,2));
 Read(AData,Bytes);
 Memo_Debug.Lines.Add('2 = ' + IntToHex(Bytes,2));
 Seek(AData,4); // どこに飛ぶ?
 Read(AData,Bytes);
 Memo_Debug.Lines.Add('3 = ' + IntToHex(Bytes,2));
 Read(AData,Bytes);
 Memo_Debug.Lines.Add('4 = ' + IntToHex(Bytes,2));
 finally
  CloseFile(AData);
 end;
end;

183:177
13/04/09 22:53:45.20 .net
結果
0 = 46464952
1 = FFDB47E
2 = 20495641
3 = 14E    (前項から4バイト飛ばして読み込み)
4 = 6C726468

てっきり1-byte づつかと思えば、
4-bytes 分づつ読み込んでいるようなのですが、
① 2-bytes や 8-bytes など読み込む量を指定して変える方法
② アドレスを直接指定する方法
ありますか? あればその方法を知りたいのです。

情報データが動画に埋め込み方式の機械があって・・・必用な部分は量が知れているのですが
そこにたどり着くまでが大きいので

184:デフォルトの名無しさん
13/04/09 23:16:43.38 .net
TFileStreamを使わない理由がわからない

185:177
13/04/10 00:08:52.56 .net
>>180
もしかして TMemoryStream を TFileStream に変えたら使い方殆ど同じ?
ぶっちゃけ 「TFileStream」 という存在を知らなかった訳で
ちょっと調べてみま~・・・

186:デフォルトの名無しさん
13/04/10 00:24:47.66 .net
よく分からんが IntFile = file of Integer; だから1レコード四バイトで
アクセスしているだけだな。
ファイルを array of Integer でアクセスしているのと同じ。

バイト単位で処理したければ file of byte / file of char または file で。

187:177
13/04/10 00:39:20.45 .net
ヨメ ━ Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒(。A。) タ ━ ッ !

188:177
13/04/10 01:28:06.36 .net
ありがたう

189:デフォルトの名無しさん
13/04/10 07:53:23.46 .net
>>177
づつではなくずつだ。

190:デフォルトの名無しさん
2013/04


191:/19(金) 09:14:16.12 .net



192:デフォルトの名無しさん
13/04/19 12:59:50.13 .net
OnMouseDown/OnMouseMove/OnMouseUp

193:186
13/04/19 16:37:57.65 .net
>>187

>>186宛でしょうか?
やりたいことと言うのは、例えば、joytokeyの
左側設定ファイル選択の枠と右側のキー割り当ての枠の真ん中にある
マウスを近づけるとカーソルが←|→なようになる部分です。
名前が今ひとつ分からないので探しようがない状態です。
Windowsのマウスのプロパティーには、左右の拡大縮小とありましたが、
この言葉で調べてもヒットしませんでした。

194:186
13/04/19 16:54:55.46 .net
カーソルですが、
エクスプローラーのフォルダーとファイルエリアの境目とかの
←→な感じのものです。

195:デフォルトの名無しさん
13/04/19 18:32:27.48 .net
Splitter

196:デフォルトの名無しさん
13/04/20 09:08:49.68 .net
TPanelにファイルリストとイメージコンポを貼り付けるだけのことじゃないの?

197:デフォルトの名無しさん
13/04/20 20:51:20.85 .net
>>186
URLリンク(www1.axfc.net)
コンポーネントのインストールは必要ない

198:デフォルトの名無しさん
13/04/24 06:21:08.33 .net
計算式の置き換えで質問です。

地点A(経度x1, 緯度y1) から 地点B(経度x2, 緯度y2) の方角を導く。

Aの経度(x1) = lon="140.14055"
Aの緯度(y1) = lat="36.01708"
<trkpt lat="36.01708" lon="140.14055">

Bの経度(x2) = lon="140.14043"
Bの緯度(y2) = lat="36.01726"
<trkpt lat="36.01726" lon="140.14043">
 ↓
URLリンク(keisan.casio.jp)
方位角φ= 90-atan2(sin△x,cos(y1)tan(y2)-sin(y1)cos△x)
△x=x2-x1
 ↓サイトの結果(正解の答え)
方位角φ= 331.665281
図:AからBの方角: NW と N の間

199:193
13/04/24 06:22:48.57 .net
93.0678420663619
 ↑結果(間違え) Delphi への三角関数式の置き換えでどこが間違っているのでしょう?
uses
 SysUtils,Math;

function PointToDegree(Ax,Ay,Bx,By: String; Limit: Byte; North: Boolean): String;
var
 x1,y1,x2,y2,Degree : Extended;
begin
 Degree := 0;

 x1 := StrToFloatdef(Ax,0); // 地点A(経度x1)
 y1 := StrToFloatdef(Ay,0); // (緯度y1)
 x2 := StrToFloatdef(Bx,0); // 地点B(経度x2)
 y2 := StrToFloatdef(By,0); // (緯度y2)

 if (X1 <> 0) and (y1 <> 0) and (x2 <> 0) and (y2 <> 0) then
  begin
  // 方位角=90 - atan2(sin(x2-x1) ,cos(y1)tan(y2)-sin(y1)cos(x2-x1))
  Degree := 90 - ArcTan2(Sin(x2 - x1),Cos(y1) * Tan(y2) - Sin(y1) * Cos(x2 - x1));

 // Degree := Trunc(Degree * Power(10,Limit));
 // Degree := Degree / Power(10,Limit);
 // if North then Degree := 360 - Degree;
  end;
  Result := FloatToStr(Degree); // FormatFloat('0.00',Degree);
end;

200:デフォルトの名無しさん
13/04/24 06:44:13.07 .net
ラジアンって習うのは高校生だっけ?中学?

201:デフォルトの名無しさん
13/04/24 08:23:15.63 .net
>>195
高校


202:の理数系クラスだと思います。



203:デフォルトの名無しさん
13/04/24 09:57:51.14 .net
じゃあラジアン分からないんだね
まずはそこから勉強しよう

204:デフォルトの名無しさん
13/04/24 13:27:48.87 .net
Won'tYouStayForMe

205:デフォルトの名無しさん
13/04/24 17:29:49.47 .net
Delphi の三角関数は、ラジアン単位を引数としているので
度で表記された座礁は、変換が必要。
ラジアンという言葉の意味/定義を確認した上で、Math ユニットの DegToRad とかを
組み合わせてごらん。

206:デフォルトの名無しさん
13/04/24 18:11:52.38 .net
180度=1.0ラジコンだっけ?

207:デフォルトの名無しさん
13/04/24 18:36:52.73 .net
お帰りください

208:デフォルトの名無しさん
13/04/24 20:45:02.07 .net
 Degree := 0;
 x1 := DegToRad(StrToFloatdef(Ax,0)); // 地点A(経度x1)
 y1 := DegToRad(StrToFloatdef(Ay,0)); // (緯度y1)
 x2 := DegToRad(StrToFloatdef(Bx,0)); // 地点B(経度x2)
 y2 := DegToRad(StrToFloatdef(By,0)); // (緯度y2)

 if (X1 <> 0) and (y1 <> 0) and (x2 <> 0) and (y2 <> 0) then
  begin
  Degree := ArcTan2(Sin(x2 - x1),Cos(y1) * Tan(y2) - Sin(y1) * Cos(x2 - x1));
  Degree := 360 + RadToDeg(Degree);
  end;

一応こんな感じで数値が合うようになりました。
感謝

209:デフォルトの名無しさん
13/04/26 06:51:22.07 .net
DelphiXE4&FireMonkeyなんですが、
MediaPlayerControlってウィンドウサイズに合わせて映像を拡大できないのでしょうか?

210:デフォルトの名無しさん
13/04/26 21:50:10.98 .net
delwiki.infoどうなっちゃったの?

211:デフォルトの名無しさん
13/04/28 09:38:28.80 .net
XE2で
bds -r main
とかやって別プロファイルで起動するとGExpertsが起動しないんですが
どうやればプロファイル指定してGExperts組み込めるんですか

最悪レジストリのキー入れ替えてからインストールすれば
できそうな気もするんですがもうちょっとまともなやり方あったら教えて下さい

212:デフォルトの名無しさん
13/04/28 10:36:43.69 .net
別のログインユーザー作成

213:186
13/05/05 09:16:37.44 .net
>>190
どうもです。基礎的なコンポーネントだったんですね。
ただ、位置の制御に苦労しました。

>>191
Delphiでは、VCLを積み重ねても下のものとは原則干渉しない
と言うことを言葉では知っていましたが>>191を見てその意味を知りました。
サイトでは、Spliterで苦労している人は多いみたいで頭を抱えていましたが
Panelで弁当箱のように仕切れば良いんですね。

>>192
サンプルプログラムありがとうです。
非常に高度な技術が積めてあるのが判りました。
高度すぎて完全には判りませんでしたが、さらに勉強します。

今は、既存の構成を使ってmp3の再生に取りかかっています。
medeiaplayerを使っていますが、wavでは簡単に再生できますが、
mp3ではオブジェクトインスペクタのプロパティのFilenameでファイルを直接
指定すれば再生できますが、それ以外ではEMCIDeviceError発生します。
上手くファイル名が渡せていない感じがします。
これを解決する方法はありますか?

214:デフォルトの名無しさん
13/05/05 19:14:51.21 .net
MediaPlayer1.TimeFormat:=tfHMS;
MediaPlayer1.DeviceType:=dtAutoSelect;
MediaPlayer1.FileName:=FileName;
MediaPlayer1.Open;

215:186
13/05/06 10:56:36.48 .net
>>208
動きませんでした。
ただ、MediaPlayerを扱っているサイトのように
with MediaPlayer1 do
begin
FileName := filelistbox1.FileName;
Open;
Play;
とやったら動きました。
やっていることは同じのように見えますが…。

216:デフォルトの名無しさん
13/05/07 07:54:18.94 .net
MediaPlayer1.FileName:=FileName;

MediaPlayer1.FileName:=filelistbox1.FileName;
こうすればよかったんじゃね?

217:209
13/05/07 09:45:27.59 .net
それで動きそうな物なんですが、ダメだったんです。

Delphi2005プログラミングにあったような
画像ビュアーだったのでextractfileextで拡張子で
処理を分けています。bmp,jpg,pngはイメージに飛ばして
wavはsndPlaySoundで処理していましたが、mp3は扱えないそうなので
MediaPlayerを使って処理を試みましたが、
ただMediaPlayer1.FileName:=filelistbox1.FileName; としただけでは、
ファイル名や拡張子からはデバイスを判断できませんでしたと出てて
コンパイルすら出来ませんでした。
ただ、wavだけは簡単に再生できました。

これで、一週間くらい悩み続けました。
これでとりあえず動いていますが、with文を理解していないので
トラブルが起きたときに対処できません。

218:デフォルトの名無しさん
13/05/07 09:52:35.76 .net
エラーメッセージで原因分かってるじゃん
自動でデバイスが判断できないなら手動でやればいいだけの話でしょ
プログラミング言語の前に日本語の理解をできるようにしないと

219:209
13/05/07 17:03:16.17 .net
その、手動でやる方法が判らなかったんですよ。

肝心の日本語メッセージが抽象的すぎてわかんねーよ
mci周りのエラーだと言われてもmciのラッパーのmediaplayer
使ってんのにそんなこと言われても困る。
そんな感じ

wavだと>>211の方法で鳴らせるのにmp3だとエラー
>>212は馬鹿にしたいのだろうが
日本人なんしバカじゃないんだから、コンパイラの言っている意味はわかるよ

220:デフォルトの名無しさん
13/05/07 21:20:24.78 .net
with文を理解していないって、冗談でしょw

221:デフォルトの名無しさん
13/05/07 21:38:31.29 .net
URLリンク(docwiki.embarcadero.com)

222:192,208
13/05/07 21:59:37.87 .net
>>209
おれ、192,208 だけど( with 文知らないということで)
もしかして「動きませんでした。」って
MediaPlayer1.Play;
をしてないだけだったんではないよね?
>>207 で EMCIDeviceError が出るっていうからこれでも出る?って意味で
208 を書いたんだけど

223:デフォルトの名無しさん
13/05/07 22:01:23.04 .net
追記
>>209 は↓と同じ事を書いてるんだよ
MediaPlayer1.FileName := filelistbox1.FileName;
MediaPlayer1.Open;
MediaPlayer1.Play;

224:209
13/05/08 05:26:07.46 .net
>>214
Delphi2010を持っていたけど、4月くらいにふと思い立ってソフトを作り始めました。
今でもif文で'.'が必要だけどELSEがありましたとか言われてなんでだと思うとかそんなレベル。
文法そのものを完全理解していないので手探りでやっています。

>>216
元々は、wavを再生するために
sndPlaySound(Pchar(filelistbox1.FileName),SND_ASYNC) ;
を入れてました。
PlaySoundはmp3は鳴らせないよと言うことを聞いて
mediaplayerが一番簡単そうなので使い始めました。
MCIが使えれば言うことないのですが、いまいち判りませんでした。
そのときに入れていた物は、
mPlay.filename:=filelistbox1.FileName;
mPlay.open;
mPlay.Rewind;
mPlay.Play;

mPlayはMediaplayerのnameを変えたもの

この命令だけで再生されそうな物なんですが…。
DCCエラーでコンパイルされませんでした。
DeviceをdtWaveAudioにすればエラーは出なくなりますが
そうするとmp3が再生されないという…。
当時mp3を再生させるには、filenameプロパティに直接ファイルを指定しないと
無視されてました。

ダメじゃんと言うことがあればお願いいたします。

225:210
13/05/08 05:35:50.40 .net
いま、
>>209 のコードで動くと書いていることと、
>>217 のコードで動かないと書いていることが
矛盾していること。

「ファイル名や拡張子からはデバイスを判断できませんでした」
というメッセージは実行時のエラーメッセージで、
「コンパイルすら出来ませんでした」
というのは、実行前のコンパイルエラーのことだと推測するので、
混同している可能性があるということ。

そして、実行時のメッセージなどからは、>>208 の先頭2行のコードの追加を
Openの前に実行すれば状況が変化するか?
という、「いまどこ?」的な質問に対する実験結果の報告がないので、
このままでは現状打破できず、さてどうしようか。ということ。

他は省略

226:デフォルトの名無しさん
13/05/08 06:54:10.68 .net
DirectXを経由したほうが簡単に音を鳴らせる気がする

227:デフォルトの名無しさん
13/05/08 07:03:34.18 .net
こんなソース発見 delphi.about.com/od/multimedia/l/aa112


228:800c.htm



229:209
13/05/08 09:51:58.69 .net
>>219
mPlay.TimeFormat:=tfHMS;
mPlay.DeviceType:=dtAutoSelect;
mPlay.filename:=filelistbox1.FileName;
mPlay.open;
mPlay.Rewind;
mPlay.Play;

でも、EMCIDeviceErrorがモジュールview.exeの0x000EA7F2で発生しました。
指定したファイル名拡張子からデバイスの種類を判断できませんと表示されます。
でF9で走らせても、コンパイルしても
上記アプリケーションエラーが出てOKボタンを押すとIDEに戻ります。
コンポーネントとプロパティーをソースで指定することで
オブジェクトインスペクタの項目を書き換えることが出来るという
理解で間違っていないでしょうか?
せっかく教えて頂いたのに申し訳ありません。

>>220
この系統のソフトはDirectShowを使うのが一般的だという話を聞きましたが、
そこまでのスキルがなかったのでMediaPlayerを使いました。

>>221
ないわけがないと思って探していましたが、やっぱりあるんですね。こういうソフトが。
どうやってこういうサイトを探すんでしょうか?
日本語のサイトを探すだけじゃダメなんでしょうか。

230:222
13/05/08 09:56:49.66 .net
mPlay.DeviceType:=dtWaveAudio;
にするとコンパイルされますが、
wavは再生されますが、mp3は反応しません。
ファイルをダブルクリックしても何も起きません。

mPlay.DeviceType:=dtAutoSelect; で
FileNameプロパティに例えばc:\a.mp3
という感じで指定すると実行したときに即座に再生されます。
この後に他のmp3を選択すると再生されました。

231:デフォルトの名無しさん
13/05/08 21:07:45.88 .net
dtAutoSelectにしたってコンパイルはされるだろ
用語の使い方がおかしい
基礎から学び直せ

232:デフォルトの名無しさん
13/05/08 22:03:42.37 .net
コンパイルオプションの最適化を外して再構築しなおせばどうか

233:デフォルトの名無しさん
13/05/09 04:13:21.57 .net
>>224
基礎を学んでいる最中なんですが。
失礼しました。

234:デフォルトの名無しさん
13/05/09 10:21:48.11 .net
>>224
>>209のように別に作り直したら、
エラーが発生しました。

よくわかりません。

235:デフォルトの名無しさん
13/05/09 12:17:09.25 .net
>>224
ロダにあげたのでもしよかったら見てください
URLリンク(www1.axfc.net)

236:デフォルトの名無しさん
13/05/09 21:51:40.46 .net
>>228
Delphi2010って支援機能ついてるよね?(. 入れて待つとか Ctrl+Space)
Delphi 使いならパスカル表記しようよ、読みにくいから
で、最小限に切り出してテストしたんだけど(FileListBoxって何年ぶりに使ったろう…)
DeviceType無くてもあってもエラーは出ないね(XPで実行しても問題なかった)
if CompareText(TheExt,'.mp3')=0 then
//↑とか↓こうやれば大文字の拡張子も判別出来るよ
// if LowerCase(TheExt)='.mp3' then

「エラーが発生」は今までのように「デバイスを判断できませんでした」?
それともコンパイルエラー?
別の新しいプロジェクトを作成してとりあえず
MPlay: TMediaPlayer;
とボタン一つだけ貼り付けて
IDE でボタンをWクリック

procedure TForm1.Button1Click(Sender: TObject);
begin
with mPlay do
begin
FileName:='ここに実際のファイル名をフルパスで書く';
Open;
Rewind;
Play;
end;
end;
まずこれでちゃんと再生されるのかどうか確認する
IDE から F9 で実行してエラーが出ても exe 単体(Project2_b2.exe だっけ?)
をエクスプローラからWクリック実行ではエラーが出ないことがあるのでそれも確認
それでもエラーが出てここにまた報告するならその内容を正確に書くこと
エラーダイアログで Ctrl+C したらコピーできるときもある

237:デフォルトの名無しさん
13/05/09 23:10:22.51 .net
DeviceTypeはPCの環境設定に依存するからお前のPCで


238:問題ないから他でも問題ないとは限らない



239:デフォルトの名無しさん
13/05/10 05:56:44.41 .net
>>229
入力支援機能教えていた秋ありがとう
今までめんどくさいなとか思っていたのでかなり助かります。
拡張子の判断もありがようです。
これは、Delphi2005プログラミングテクニックからそのまま
持ってきた物なのでより効率の良い方法ですね。使わせて頂きます。

肝心のFileNameですが、
オブジェクトインスペクタでFilenameプロパティでファイルを直指定して
今回の場合だとwith文内で指定して
そのファイルを再生した後だとエラーが発生することもなく他のmp3ファイルも再生できます。

エラーについてはロダにあげた以外の物では、
FormにFileList一式とMediaplayerだけを貼り付けて
同じコードを書いてもコンパイル中にアプリケーションエラーが出ます。

ソースとバイナリ、エラーメッセージをキャプったものをロダに上げました。
お手数ですが、また見て頂けないでしょうか。
URLリンク(www1.axfc.net)

240:デフォルトの名無しさん
13/05/10 07:20:30.64 .net
>>229
新しいプロジェクトでの確認しましたが、
こちらは、IDEでもコマンドラインからでも正常に再生されます。
お手数おかけします。
URLリンク(www1.axfc.net)

241:デフォルトの名無しさん
13/05/10 08:41:48.22 .net
TMediaplayerではなく
TWindowsMediaPlayer(wmp.dll)を使えばいいのに
ずっと多機能だし、使いやすいのに

242:デフォルトの名無しさん
13/05/10 09:39:31.37 .net
>>233
WindowsMediaPlayerも考えて、ActiveXモジュール組み込みましたが、
どう使ったら良いのか判りませんでした。
playlistもどう扱ったら良いのか??な感じでした。

今、キーワードを変えて検索したら簡単なサンプルが判って
ファイルを固定することで再生することが出来ました。
使いこなしの方法がちょっと判りません。

初心者というのが免罪符になるとは思いませんが、
本当に勉強を初めて一月とかです。
不快に感じる方がいらっしゃると思いますが、ご容赦ください。

243:デフォルトの名無しさん
13/05/10 10:21:25.03 .net
TMediaplayerControlって、オリジナルのビデオサイズより拡大表示できないの?これ

244:229
13/05/10 19:07:21.64 .net
>>230
そーなのかありがとう
じゃあ配布目的とかでは使えないんだ
まあ俺はTMediaPlayer使わんけどな

245:229
13/05/10 19:22:08.94 .net
>>231
前は pas ファイルを読んだだけでレスしたが今度はちゃんと開いてみたよ
で、今度のエラーは手抜きのせいではないか?
TFileListBox.OnChange イベントというのはリスト内のファイルをクリックしたり
フォルダが変わったりしたとたんに発生するから最低でも拡張子の判断は必要だぞ
procedure TForm2.FileListBox1Change(Sender: TObject);
begin
//一行目にこれ↓
if CompareText(ExtractFileExt(FileListBox1.FileName),'.mp3')<>0 then exit;

それに前回はちゃんとフィルタ(ファイルマスク)設定してたようだけど今度はそれもしていない

あと、例外処理を勉強しよう
if CompareText(ExtractFileExt(FileListBox1.FileName),'.mp3')<>0 then exit;
try
with mPlay do
begin
FileName:=Filelistbox1.FileName;
Open;
Rewind;
Play;
end;
except
ShowMessage('再生時のエラー');
end;
こう書いて出てきたエラーが↑で自分で書いたエラーなら try ~ except の間で起こったと判断出来る
でも except ってのは本当はこんな風に逃げるだけの手段ではないんだよ

246:デフォルトの名無しさん
13/05/10 19:56:45.29 .net
>>237
レスどうもです。
>>231はFileListBox一式とMediaPlayerだけをFormに乗せただけの物です。
>>231>>229
procedure TForm1.Button1Click(Sender: TObject);文以下の
以下のソースを反映させた物です。
私の環境ではコンパイルが終わってアプリが起動するときにエラーが出ます。
出来たバイナリを起動しても同じです。

>>232>>229のFileNameに直接ファイルを指定したものです。
アーカイブ中にmp3ファイルが入っています。
この二つについてはフィルターをかけていません。
フィルターをかけたものを再アップします。
err2+filterフォルダーの物はうちではエラーになってしまう物
snd1フォルダーは添付のmp3ファイルを直うちした物です。
pathが判らないのでc:\00


247:0.mp3にしてあります。 http://www1.axfc.net/uploader/so/2897729 >>228の物は制作中の物なので拡張子での処理を分岐させるようにしてあります。 OnChangeについてはこのような変化が起きたときに発生する プロパティ項目がないわけがないと思って探していました。 例外処理についても必要性を感じていました。 画像部分を作っていたときには処理を確認するために デバッグ用の表示を作っていましたが、音声の方はそれ以前の出来だったので 何もしてありませんでした。 suggestionありがとうございます。勉強させて頂きます。



248:229
13/05/10 20:54:25.95 .net
わかったよ~(ヒントは今まで俺がレスしてきた中に全てあったよ)

「err2+filter」の方でエラーが出るのはアプリケーション起動時に TFileListBox.OnChand イベントが起きるから
(当然だよねコンポーネントが生成された時にはリストは空なんだから起動すれば DriveComboBox1 のドライブの
DirectoryListBox1 フォルダに移動して FileListBox1 のリストが更新される→ TFileListBox.OnChand 発生)
(あくまでも IDE で表示されているリストは IDE 上だけのもので起動時(生成時)は空だからね)

>>237 で(抜けてるよって)書くように指示した「拡張子の判断」がないから移動先の最初のファイルが mp3 じゃないのでエラーとなる
TFileListBox.OnChand 発生した時に選択されていなかったら FileListBox1.FileName は空文字になるし(あ、こっちか)

>>237 でもうひとつ「OnChange はリスト内容の変化で発生する」とも書いたね

オマケだけど
>pathが判らないのでc:\000.mp3にしてあります。
こういったときに便利な書き方
FileName:=ExtractFilePath(Application.ExeName)+'002.mp3';
      ↑~~~~~~~~~~~~~~ ↑~~~~~~~~~~~~~~~~~~
    後ろに\がつく「パス」 実行ファイルのフルパス
実行ファイルが「C:\Delphi\Project1.exe」なら「C:\Delphi\002.mp3」になる

これくらいでいいかな?

249:デフォルトの名無しさん
13/05/10 22:43:08.33 .net
>>239
仰ってる意味が分かりました。
拡張子を画像かどうかを評価して
違う場合にはwavかmp3なら強制的に
MediaPlayerに回しますが、FileListBoxの中身が空なので
MediaPlayerでは解釈できないと言うことで良いのでしょうか。

>>237の一行目にと言う命令を書き足したら
エラーを吐くことがなくなりました。
例外処理についても意味を体で覚えました。
おまけもありがとうございます。

やっぱりちゃんと言語ガイド読まなくてはなりません。
ありがとうございました。

250:229
13/05/10 23:42:57.67 .net
>>240
解決して何よりだ
ここまで付き合った甲斐があった

ひとつだけ
>MediaPlayerに回しますが、FileListBoxの中身が空なので
日本語的な問題なのかも知れないけど
最初にこのイベントに来た時は空からリストにファイル名が入った時なので
「FileListBoxの中身が空」ではない
あくまでも FileListBox1.FileName プロパティが「空文字」になっている(未選択状態だから)ということ

説明するより早いから新規プロジェクトのフォームに Memo1 FileListBox1 の二つを置く
フォームをWクリックして
procedure TForm1.FormCreate(Sender: TObject);
begin
FileListBox1.Directory:='e:\';
with Memo1.Lines do
begin
Clear;//メモをクリア
Add('01━FormCreate ここから');
Add('02━起動時のリスト:'+FileListBox1.Items.Text);
Add('03━選択されたファイル名:'+FileListBox1.FileName);
Add('04━FormCreate ここまで');
end;
end;
つづく

251:229
13/05/10 23:43:51.91 .net
FileListBox1 をWクリックして
procedure TForm1.FileListBox1Change(Sender: TObject);
begin
with Memo1.Lines do
begin
Add('05━FileListBox1Change ここから');
Add('06━OnChange 起動時のリスト:'+FileListBox1.Items.Text);
Add('07━OnChange 選択されたファイル名:'+FileListBox1.FileName);
Add('08━FileListBox1Change ここまで');
end;
end;
FileListBox1 を選択した状態でオブジェクトインスペクタのイベントタブを開く
OnClick の右側の空欄をWクリックして
procedure TForm1.FileListBox1Click(Sender: TObject);
begin
with Memo1.Lines do
begin
Add('09━FileListBox1Click ここから');
Add('10━OnClick 起動時のリスト;'+FileListBox1.Items.Text);
Add('11━OnClick 選択されたファイル名:'+FileListBox1.FileName);
Add('12━FileListBox1Click ここまで');
end;
end;
これでメモの内容を見ればイベントの起こっている順番とか内容とかがよく分かるはず

空文字がわかりにくいので↓にしても可
if FileListBox1.FileName='' then
Add('03━【何も選択されていない】'+FileListBox1.FileName) else
Add('03━選択されたファイル名:'+FileListBox1.FileName);

252:デフォルトの名無しさん
13/05/11 00:36:43.60 .net
エラーが起きるところでステップ実行をしなかったの??
FileNameがヌルになるならすぐわかりそうなものなのに
デバッグの仕方が根本的に変

253:デフォルトの名無しさん
13/05/11 01:18:17.09 .net
くだすれDelphi(超初心者用)

254:デフォルトの名無しさん
13/05/11 22:32:26.98 .net
>>241
サンプルソースありがとうございます。
mp3再生部を入れてからエラーが出て
一週間位悩んで質問しました。
最初はファイル名に絡むエラーだったので
ファイル名が上手くコンポーネントに渡していないなと言う
予想は立ちましたが、ネットでDelphiのmp3関係を扱っている
サイトで出てくるUnicodeが原因なのかと思って困ってました。

サンプルソースのおかげでFileListBoxの挙動がよくわかりました。
あらかじめFileListBoxのfilenameプロパティで適当なmp3ファイルを
設定しておくとエラーが発生せずに他のmp3ファイルを再生できたことの
理由がよくわかりました。
当然filenameプロパティを設定しないと起動時のフォルダー内にある
ファイル名は表示されていますが、選択していないので
>>243のnullが入っているのでエラーが出ていたという解釈で良いのでしょうか?

何を勉強しないと行けないのかが明確になりました。ありがとうございました。

255:245
13/05/11 22:53:48.08 .net
デバッガーのステップ実行のやり方が判ったので
値を監視してみたところエラーの出る寸前で
拡張子(theext)が''になっていてselfとsenderが
この位置からは参照できないと出ていました。

勉強になりました。

256:229
13/05/11 23:59:15.22 .net
自分のレベルも Delphi のバージョンもちゃんと最初に書いてるし
こうしてみろといわれたら素直に実行するし
質問者としては良質だと思ったよ
どんどん作って今後も Delphiライフを楽しんでくれ(^.^)/~~

257:デフォルトの名無しさん
13/05/12 00:00:10.47 .net
Delphi 全角になってた恥ずかしい

258:デフォルトの名無しさん
13/05/14 19:48:33.00 .net
上レスのMP3 の人とは別人です。
環境 Delphi 6
URLリンク(www1.axfc.net)

MP3 を
*.WAV (無圧縮 WAVE ADPCM ) モノラルにコンバートしたく
ビット/サンプル :16 bit/sample
サンプリング周波数 :44100 Hz
チャンネル数 :1 channels

MP3プレイヤーを作る>dllによる再生
URLリンク(www.sm.rim.or.jp)

MP3 Decode Library mp3dec
URLリンク(hp.vector.co.jp)
vbmp31615_fixed_20030921.lzh の
VBMP3.dll 改 Version 1.615.2003.0921 を使ってみています。

で、目的のフォーマット変換にたどり着けなくて
お知恵を拝借したいです。
この .dll の良い使い方とか、これ以外で組み込みやすいものなどあれば

最終目的は、変換したモノラル .wav から音声チャンク部分だけを取り出して
機器用の .pcm 音声ファイルを作るツールです。

259:デフォルトの名無しさん
13/05/14 21:38:42.36 .net
ffmpegで全部出来る

260:デフォルトの名無しさん
13/05/15 08:40:03.38 .net
フォーマット変換をするのは、再生とは別
VBMP3を使って出来る物ではないよ
両方のフォーマットを理解しないと。

URLリンク(www.marinecat.net)

それっぽいサイトを見つけたけどこれでもダメだろうな…。
午後のこーだーのソース読んでみたら

261:デフォルトの名無しさん
13/05/15 13:20:42.88 .net
mp3の再生ができるなら音をキャプチャすればいいんじゃないか

262:デフォルトの名無しさん
13/05/15 18:20:29.61 .net
>>251 >>252
MP3 のフォーマットが複数あって難解なので、既存の dll を利用したかったのです。
午後のソースも見てみましたが、お手上げですね。
デコード


263:機能があればと残念です・・・ lame_enc.dll とか 一応、>249 のソースで VBMP3 使用の MP3 -> Wave 変換保存は出来るので、 サンプリングレートなど細かな指定が出来れば良いのですけど。 一時ファイルとして(wav-stereo)出力 -> PCM 44.100kHz 16ビット ならば、読み込んで モノラル化して抽出 で、お茶濁し やってみます。 XP 付属のサウンドレコーダーをソフトから操作できれば楽なんですけどね WAVE MPEG Layer-3 22050Hz Stereo を読み込んで -> WAVE PCM 44.100kHz 16ビット モノラル wav での形式と属性変換が単体操作できるのですが、コマンドラインオプションが無さそうで。



264:デフォルトの名無しさん
13/05/16 08:16:21.01 .net
>>253
今どこまで実装できてるの?

265:249 253 です
13/05/16 19:42:40.64 .net
>>254
ソースと実行ファイル上げた方が良い?
素人趣味の1つなんで実装の無駄がちとハズカシイ(というか自分に解る限界だから仕方ないというか)

・現在
ListView にファイル情報のあてはめ (PCM/WAVE/MP3)
PCM/WAVE/MP3 音声再生
MP3 -> Wave 出力 >>249 と同じ VBMP3 手法のまま
モノラルWave -> 機器用の .pcm 音声ファイル用に抽出ファイル化

・次の着手予定
MP3 -> 作業フォルダにWave ファイル出力 -> Wave 読み込んで PCM ファイル化出力
元のMP3 が 128Kbps : 44100 Hz : Monaural だった場合、目的の.wav 物に VBMP3 がそのまま変換してくれるようで
変換後がステレオだった場合、チャンクのLRをゴニョって擬似モノラルにして抽出。

ps. >>249 で一部訂正
誤:*.WAV (無圧縮 WAVE ADPCM ) モノラル
正:*.WAV (無圧縮 WAVE PCM ) モノラル

266:デフォルトの名無しさん
13/05/16 20:15:14.36 .net
>>255
ffmpeg -i input.mp3 -ac 1 -ar 44100 -f s16le -acodec pcm_s16le output.pcm
出力ファイルを"-"にすれば結果が標準出力へ吐き出されるのでプログラムからパイプで受け取れる

267:249 253 です
13/05/16 23:38:15.05 .net
>>256 ども
コマンドラインで一発変換できますね
2バイト文字のファイル名にも対応しているようで
ShellExecute でいけるかやってみます。

>出力ファイルを"-"にすれば結果が標準出力へ吐き出されるのでプログラムからパイプで受け取れる
? 意味不明
クリップボードにバイナリファイルが格納される という意味ですか?

ファイル実体として出力はいるので
とりあえずフロントエンド?という利用方法で組んでみます。
ありがとう

268:デフォルトの名無しさん
13/05/17 00:28:18.21 .net
>>256じゃないけど、標準出力とかパイプとかせめて検索してほしいなぁ

269:デフォルトの名無しさん
13/05/18 03:19:43.51 .net
XE4&FireMonkeyで、FormのFullScreenがMacだと有効にならないんですが、
Macでフルスクリーンにする方法はありますか?

270:デフォルトの名無しさん
13/05/26 17:10:26.68 .net
setparentのusesって何を指定すれば良いですか?
window.setparentみたいなのもあるみたいですが、やりたいことは親フォームに貼り付けたパネルに子フォームをロードするというものです。
window.setparentを記述したら、usesの中のwinapi.windowsに赤の波線が出て、何だか良く判らなくなっています。
usesに何を指定すれば良いか教えてください。

271:デフォルトの名無しさん
13/05/26 17:12:46.07 .net
Frameでやれ

272:デフォルトの名無しさん
13/05/26 21:47:02.15 .net
他の掲示板に行きます

273:デフォルトの名無しさん
13/05/27 00:27:21.33 .net
裏技で派生先クラスから派生元のprivateメソッドを呼び出す方法ありませぬか?

274:デフォルトの名無しさん
13/05/27 01:22:27.42 .net
1.同一ユニット上に置く
2.クラスヘルパを使う
3.新しいRTTIを使う
ん~


275:あと何かあるかな



276:デフォルトの名無しさん
13/05/27 17:02:04.11 .net
オーバーライドするだけじゃないの?

277:デフォルトの名無しさん
13/05/28 19:52:06.64 .net
クラス設計やり直し。

278:デフォルトの名無しさん
13/05/28 23:03:18.64 .net
WM_で始まるメッセージとCM_で始まるメッセージって何が違うの?

279:デフォルトの名無しさん
13/05/29 05:09:30.73 .net
Windows のメッセージと
Control のメッセージ。

WM_ は OS が送ってくる。
CM_ は VCL が送ってくる。

CM_ は、単純なメソッド呼び出しに置き換えることが(多くの場合)可能だけど、
それをわざわざメッセージにすることで、WM_ に対応するメッセージハンドラと
同じ記述に統一することが出来る。

280:デフォルトの名無しさん
13/05/29 12:07:16.17 .net
そうでもない。

281:デフォルトの名無しさん
13/05/29 22:34:27.63 .net
TSplitterが置いてあるウィンドウがリサイズされるとき
変更前と変更後で分割率が同じになるようにするにはどうすれば良いんですか?

282:デフォルトの名無しさん
13/05/30 00:50:25.90 .net
TADO関係のコンポーネントを使って、Microsoft Accessの
データーベース上のクエリーのSQL文の取得か、クエリーの実行って、
できるでしょうか?

283:デフォルトの名無しさん
13/05/30 06:45:51.34 .net
>>270
FormのOnResizeで自前でコントロールのサイズを変更する

284:デフォルトの名無しさん
13/05/31 08:08:59.31 .net
それたぶんうまくいかない
OnResizeはサイズ変更された後に発生するイベントだから
何らかの方法で変更前のサイズを覚えておく必要があるのと、
一度変化した内部コントロールのサイズをまた変更することになるので
適切な手を打たないと猛烈にちらつく事になる

285:デフォルトの名無しさん
13/05/31 18:40:48.60 .net
分割率が同じならいいんだろ? 計算してポンだよ

286:デフォルトの名無しさん
13/05/31 22:23:55.60 .net
ではその計算してポンのコード書いてみれ

287:どや
13/05/31 23:50:53.77 .net
TForm1 = class(TForm)
 Panel1: TPanel; //Align=clClient;
 Splitter1: TSplitter; //Align=clRight;
 Memo1: TMemo; //Align=clRight;
 procedure FormResize(Sender: TObject);
 procedure Splitter1Moved(Sender: TObject);
private
 rp:Single;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  if rp <> 0 then
    Memo1.Width := Round(ClientWidth * rp);

  rp := (Memo1.Width / ClientWidth);
end;

procedure TForm1.Splitter1Moved(Sender: TObject);
begin
  rp := 0;
end;

288:276
13/05/31 23:52:09.02 .net
AlignプロパティはclXXXじゃなくてalXXXだった

289:デフォルトの名無しさん
13/06/03 16:30:38.06 .net
それ分割率がちょっとずつずれていくよね

290:デフォルトの名無しさん
13/06/03 21:30:54.18 .net
>>276のコードはちょっと変だと思うけど
OnResizeのタイミングでまったくちらつかないな
まあマシンに依るのかもしれんが
まあ、OnResize発生したらタイマー仕掛けて
一定時間OnResizeが発生しなかったら
画面を更新するっていう方法もあるだろうけど

291:デフォルトの名無しさん
13/06/05 00:00:12.75 .net
>>276
分割率をFormResizeで毎回計算するのはおかしいね
分割率を計算するのは、Splitterを動かして、分割率が変化したときだね

292:デフォルトの名無しさん
13/06/05 10:43:31.72 .net
それだと最初の計算はいつ行われる?
フォーム生成時にもリサイズイベントが起きるから厄介なことになりそう

293:デフォルトの名無しさん
13/06/05 11:55:59.43 .net
そこまでわかってるなら、生成~リサイズの間、と導き出されるわけだが

294:デフォルトの名無しさん
13/06/05 21:30:26.95 .net
>282
じゃあ具体的にコードとして書くと?

295:デフォルトの名無しさん
13/06/05 22:12:49.89 .net
282 じゃないけど
TForm の Create() の前に、OnReSize()が発生することなんてあり得るの?
ないだろ

296:デフォルトの名無しさん
13/06/07 18:30:49.23 .net
D7でIBXでFireBIrd2.5に接続しています
IBDataSetとIBQueryでFilterを使ってみたところまったく効果がありませんでした
IBTableに変えた�


297:ニころフィルターされました IBDataSetとIBQueryではFilterは使えないのでしょうか



298:デフォルトの名無しさん
13/06/07 18:36:55.06 .net
>>285
使えない。OnFilterRecordイベントに書かないとダメだったと思うよ。

299:デフォルトの名無しさん
13/06/08 18:58:42.90 .net
>>286
やはり使えませんか
DataSetProviderとClientDataSetを介すと使えるようなのでそれでやってみます

300:デフォルトの名無しさん
13/06/09 14:53:17.13 .net
>>287
>ClientDataSet
ライセンスに気をつけて。

301:デフォルトの名無しさん
13/06/14 12:19:35.60 .net
D7でゼロ除算例外が起きなくなりました
あるプロジェクトで
var
a : Double;
b,c : integer;
begin
 try
   a := b / c ;
 except
 a := 0;
 end;
end;
のようなコードを書いているのですがある時からaが0でなく-NANになるようになってしまいました
テスト用の簡単なプロジェクトを作ったらそっちでは例外が起きて0になっています
考えられる原因はなんでしょうか
プロジェクトのオプションはどちらも同じはずです
コンパイラ指令もいじっていません

302:デフォルトの名無しさん
13/06/14 12:26:09.67 .net
時間ない、だれかフォロー
Set8087( default8087) を

303:デフォルトの名無しさん
13/06/14 12:50:24.68 .net
>>290
計算前に
Set8087CW(Default8087CW);
といれて試してみましたが変わりませんでした

304:デフォルトの名無しさん
13/06/14 13:35:23.88 .net
初期化していないローカル変数はゼロになるとは限らない。
いままで、たまたま動いてた。

305:デフォルトの名無しさん
13/06/14 14:18:19.66 .net
>>292

データの中身は除算前に0であることを確認してます
試しに計算直前に0を代入してみましたがやはり例外は起きませんでした
以前コンパイルした物は同じデータで例外が起きてちゃんと0になるんですよ
だから何かの設定かと思ったんですが

306:デフォルトの名無しさん
13/06/14 14:33:10.66 .net
まずはちゃんとエラーを捕まえて except on e で e.Message を見てみる
ゼロ除算をわざとやるなら cに0を代入してみればいい

307:デフォルトの名無しさん
13/06/14 14:38:40.78 .net
>>294
だからエラーが起きないんです
もちろんcに0を入れても

308:デフォルトの名無しさん
13/06/14 14:44:08.52 .net
たぶん最適化のバグだと思う 最適化を外して再構築してみな
最適化したままデバッグしているとドツボにはまるよ

309:デフォルトの名無しさん
13/06/14 14:59:57.58 .net
a := b / c ; の行で生成される fdivp の命令の次の命令あたりで
ブレークポイントをかけて実行。そのとき
(1) コントロールワードの値にZeroDiv例外マスクがかかっているので、
(2) 例外が発生せず、浮動小数点スタックのトップの値が -NAN になった
という症状が発生しているのならば、Set8087CWで対応できるし、
そこでは停止せずに例外が発生して、どこかへ飛んで、-NAN を
浮動小数点スタックに積んでいるなら、それが原因。

310:デフォルトの名無しさん
13/06/14 15:24:35.48 .net
もどった。
D7 だから、昔からある機能で解決しなきゃいけないな。Math ユニットってあったけ?

try に入る前のところに

Set8087($1332);

を入れて。

-NAN になっているのだから演算は正しく行われて、Zero-div 例外がマスクされているだけ。
それを元に戻せばよし

311:デフォルトの名無しさん
13/06/14 15:48:34.76 .net
LoadLibrary 呼ぶと8087CWが変化することがあるので
前後にsave/restoreが必要という話か?

312:デフォルトの名無しさん
13/06/14 16:04:22.91 .net
比較的最近のだと SafeLoadLibrary ってのがあって CW の再設定をしてもらえる。
D7 にあるかどうかは忘れた。

Default8087 を設定しても直らなかった。ってことからすると、MSVC-DLL による 80887 再初期化とは
別の話で、OpenGL とか D3D あたりのユニットを最近追加したりしてないかな?

313:デフォルトの名無しさん
13/06/14 16:17:42.42 .net
色々テストしてみました
default8087cwをtryの外に出したら例外に飛ぶようになりました
ただまったく別の


314:フォームに例外を起こすコードを書いてもやはりdefault8087cwを入れないと 例外にならなかったのでプロジェクトのあちこちにあるこの処理を書き直すことを考えると頭が痛いです



315:デフォルトの名無しさん
13/06/14 16:26:30.48 .net
その場所だけでなくプロジェクトに新規追加したフォームでも起きるんで
プロジェクトオプションで何か設定があるのかもと思ったんですが
まったく同じコードを新規プロジェクトで実行すると例外になるんで

316:デフォルトの名無しさん
13/06/14 16:27:20.73 .net
つ バファリン

317:デフォルトの名無しさん
13/06/14 19:33:14.98 .net
原因判りました

IBXでIBQuery等をOpenするだけで例外をトラップしなくなります

例外を捉えていたテスト用のプロジェクトに単純なSELECT文のIBquery1つ置いてopenしたらダメになりました
何故だorz

同じexeファイルをコピーして試したところどうやらwinxpでは例外になるのにwin7ではだめなようです
頭痛いどころじゃなくなった

318:デフォルトの名無しさん
13/06/14 21:01:54.33 .net
ちょっと教えてください。

Win7で開発しています。

TListviewで各行の高さの30程度にし、SubItemなどの
長目のテキストを半角スペース付きで指定すると
そのスペース位置でうまく改行されます。

ところがXPで同じコードを実行しても改行されず
テキストの後半が「...」に置き換わります。
まあ、これが従来の表示形式だと思いますが。

この挙動が変わったのはOSのバージョンで言うと
どのあたりなのでしょうか?

それと、XPで何らかの方法で改行できないでしょうか?
やっぱりCustomDrawしか方法はないですか?

319:デフォルトの名無しさん
13/06/16 09:28:06.51 .net
以前mp3の実装の仕方を教えてもらった者です。

URLリンク(delphi.about.com)

のサイトにあるようなものを再現知るにはどうしたら良いのでしょう?
本当にどうしたら良いのか判らず…。

あとこのてのものをいじるにはポインタの知識が必要なのでしょうか?

基礎的な質問ですみません。

320:デフォルトの名無しさん
13/06/16 17:12:07.25 .net
再現手順がわりと丁寧に書かれているが?
手順のことを訊いているのではないのか?

321:デフォルトの名無しさん
13/06/16 20:38:55.88 .net
>>307
すいません。
一部のコンポーネントのnameを変更したら、
後はコピペで行けるのでしょうか?

赤線だらけで、何度やっても上手く行きません。
もう少しやってみます。

322:デフォルトの名無しさん
13/06/16 21:10:03.01 .net
片っ端にコピペをしたら無事コンパイルできました。
お騒がせしました。

323: ◆XcB18Bks.Y
13/06/16 22:26:33.28 .net
>>281-284
今更ですが最近似たようなプログラムを書いたので。

フォーム生成の後にリサイズイベントは起きますので
フォームのコンストラクターかOnCreateイベントハンドラで
割合を計算して記憶しておけば大丈夫みたい。

(フォームの宣言の一部)
private
 FMemoWidthRatio: single;
 procedure MemoryMemoWidthRatio;

(実現部)
procedure TForm1.FormCreate(Sender: TObject);
begin
 MemoryMemoWidthRatio;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
 Memo1.Width := round(ClientWidth * FMemoWidthRatio);
end;

procedure TForm1.MemoryMemoWidthRatio;
begin
 FMemoWidthRatio := Memo1.Width / ClientWidth;
end;

procedure TForm1.Splitter1Moved(Sender: TObject);
begin
 MemoryMemoWidthRatio;
end;

324:デフォルトの名無しさん
13/06/17 21:03:42.71 .net
WinXP D6 で質問です。

TListviewで ViewStyle := vsReport;
なかのグリッドのマスにマウスでポイントしてグリッドX,Yの位置を知る方法はありますか?
そしてその方法。

今は
ColumsClick := True; で上部のカラムを押してX軸を指定
procedure TForm1.ListViewColumnClick(Sender: TObject; Column: TListColumn);
begin
 // 略(エラー回避)
 ListSelectColumn := Column.Index;
end;

MultiSelect := True; で行にマウスを当ててY軸を指定
procedure TForm1.ListViewClick(Sender: TObject);
begin
 // 略(エラー回避)
 ListSelectIndex := ListView.Selected.Index;
end;

という方法を使ってX,Yを指定してからグリッドの項目に入力などをやっています。

325:デフォルトの名無しさん
13/06/17 21:38:56.98 .net
何が聞きたいのかいまいちわからないんだけど、GetItemAtとかGetNea


326:restItemとかが役に立たないかな?



327:デフォルトの名無しさん
13/06/18 00:33:54.71 .net
>>312
空の項目に文字を入れる場合の現状
>311 でX Yを決めている。

ListView.Items[Y2 行番号].SubItems.Strings[X3 カラム番号-1] := 'Y2 X3 のグリッド';

ListView.Items[ListSelectIndex].SubItems.Strings[ListSelectColumn-1] := 'Yn Xn のグリッド';

つまりマウスで表のマス目を直接1回で場所指定したいわけです。
今は横縦指定してからプルダウンメニューやボタン操作で入れる処理にしています。

328:デフォルトの名無しさん
13/06/18 00:37:02.48 .net
いやいや、日本語でおk

329:デフォルトの名無しさん
13/06/18 02:40:45.85 .net
ええと、言ってる内容がイマイチはっきりしないけど
Listview内の任意の場所をクリックして、その位置にある
Item(行)とSubItemの.Index(列)を知りたいってことですよね。

VBなんかだとGetSubItemAt(かな?)みたいな関数があるけど
Delphiに類似の関数ってあったけ?

でも、各カラムの幅は分かってるんだから、マウス位置のXから
すぐに求められるでしょう?

330:デフォルトの名無しさん
13/06/18 12:44:31.18 .net
これでどうよ

procedure TForm1.OnListViewMouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
var
 i,col,row: integer;
 columnX: Integer;
begin
 col := 0;
 row := ListView1.Selected.Index;
 columnX := ListView1.Columns[0].Width;

 for i := 0 to ListView1.Columns.Count do
 begin
  if (X < columnX) then break;
  columnX := columnX + ListView1.Columns[i].Width;
  Inc(col);
 end;

 ShowMessage('col=' + IntToStr(col) + ' row='+IntToStr(row));
end;

331:デフォルトの名無しさん
13/06/18 22:06:14.11 .net
めんどくさいことしなくても、
ListView_SubItemHitTest でOK

332:デフォルトの名無しさん
13/06/19 14:57:20.62 .net
D7でIBXのTIBDataSetでApplyUpdatesを実行してもUpdatesPendingがtrueのままなのですが
何をしたらFalseに戻るのでしょうか
戻らないとしたら更新の有無は何で判断したらいいでしょうか
データベースへの適用はCommitRetainingで行っています

333:デフォルトの名無しさん
13/06/19 16:28:23.27 .net
TIBCustomDataSet.ApplyUpdatesをステップ実行してみればわかるんじゃないかな。
ローカル変数のUpdateActionがuaSkipだとUpdatePendingがFalseにもどらないみたいだけど、
そうなる理由はOnUpdateErrorイベントハンドラに指定したコードによるみたい。

334:デフォルトの名無しさん
13/06/19 17:00:57.64 .net
>>319
ありがとうございます
アフタースクロールイベントでフィールドが変更されてしまっているのが原因でした
アフタースクロールで日付を分解してEditに入れてたのですが
EditのOnchangeでフィールドに書き込んでいたというおまぬけなことをやっていました

335:デフォルトの名無しさん
13/06/19 18:13:38.22 .net
>>316がバグってたので修正版

procedure TForm1.OnListViewMouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
var
 col,row: Integer;
 intX,columnX: Integer;
begin
 if (ListView1.Selected = nil) then exit;

 intX := X - ListView1.Selected.Position.X;
 row := ListView1.Selected.Index;
 columnX := 0;

 for col := 0 to ListView1.Columns.Count-1 do
 begin
  Inc(columnX, ListView1.Columns[col].Width);
  if (intX < columnX) then break;
 end;

 ShowMessage('col=' + IntToStr(col) + ' row=' + IntToStr(row));
end;

336:デフォルトの名無しさん
13/06/20 18:59:38.71 .net
D7でDBGridでtabキーを押すと次のレコードに移動するにはどうしたらいいでしょうか
出来ればコードを書かずに済む方法が知りたいです

337:デフォルトの名無しさん
13/06/20 19:25:49.46 .net
>>322
コードは書かなきゃ無理だろ。DBGridのOnKeyPressイベントに
if Key = #9 then DataSet.Nextってやればいいんじゃね?

338:デフォルトの名無しさん
13/06/20 19:59:27.78 .net
>>323
ありがとうございます
いや、手元にあるソースでコードにそれらしきものがないのに次のレコードに移動するのがあるんで
やり方が知りたかったんですよ
それらしいイベント記述もプロパティの設定もないもので
何か見落としてるんだと思うん


339:だけど とりあえずそのやり方でやってみます



340:デフォルトの名無しさん
13/06/20 22:03:47.51 .net
TDBGrid.Options
dgTabs 〔Tab〕キーおよび〔Shift〕+〔Tab〕キーを使って,グリッド内を移動できる

341:デフォルトの名無しさん
13/06/21 02:39:39.18 .net
>>321さん
返事が遅れましてすみません、ありがとうございます。
ListViewで col row が取得できるようになりました。

342:デフォルトの名無しさん
13/06/21 10:46:12.39 .net
322です
>>325
dgtabs=trueです

FalseにするとDBGrid内でtab移動せず他のコントロールに飛んでしまいました

DBGridのReadOnlyを切り替えているところをコメントアウトしたらタブで行移動しなくなったので
これが悪さしてるらしいが原理がわからん
当然編集中はReadOnly=Falseなのだがtabを押すとcolexitもColEnterも発生せずいきなりレコードが移動する
もしかしたら意図的にやってるのではなくDelphiのバグなのか?

343:デフォルトの名無しさん
13/06/22 18:39:47.00 .net
rtl170.bplってどこにおちてるんでしょうか

344:デフォルトの名無しさん
13/06/24 09:26:02.94 .net
System32

345:デフォルトの名無しさん
13/06/26 07:54:55.43 .net
>>237
かなり前の話ですが、
if CompareText(ExtractFileExt(FileListBox1.FileName),'.mp3')<>0 then exit;
での<>0の0は何を指しているのでしょう?

色々な文献で、ファイルにまつわる処理で
=0だったりというのが出てきますが、
ファイル名は文字ではないよな?と悩んでいます。

すみません。教えていただけないでしょうか。

346:デフォルトの名無しさん
13/06/26 08:50:24.43 .net
CompareTextの引数は文字列2つですが、この関数の戻り値は数値です。
URLリンク(docwiki.embarcadero.com)

347:デフォルトの名無しさん
13/06/26 10:56:38.04 .net
判りました。ありがとうございます。

勉強が足りないというレベルじゃないですね。
なんか根本的な物が分かっていない気がします。

348: ◆XcB18Bks.Y
13/06/26 15:58:29.31 .net
大丈夫ですよ。
文字列をパラメーターに取る関数の戻り値は別に文字列型ではなくてもいい、それだけです。

349:デフォルトの名無しさん
13/07/10 NY:AN:NY.AN .net
おはようございます
いつもお世話になっております
TMainMenuの子にショートカットキーCtrl + +を設定したいのですがエラーがでて設定ができません
設定できる方法があればご教授願いたいです
ちなみにCtrl + Num +ではないです

350:デフォルトの名無しさん
13/07/10 NY:AN:NY.AN .net
[ALT}+[F12]でdfmをテキスト表示してShortCutプロパティに直接16427を指定するんじゃ駄目?

351:デフォルトの名無しさん
13/07/10 NY:AN:NY.AN .net
>>355
レスありがとうございます
試してみましたができませんでした・・・
他のショートカットに使われる数字だと指定できるのですが16427だと
ショートカットの欄には何も表示されず空白のままで、実際にショート
カットキーを押してみても反応がありませんでした
ちなみにバージョンはDelphi6です

352:デフォルトの名無しさん
13/07/10 NY:AN:NY.AN .net
>Ctrl + Num +ではない
って言ってももう一つの方なら「Ctrl+;」ではないのか?
或いは「Shift+Ctrl+;」

テンキーの方なら↓
Test1.ShortCut:=ShortCut($6B, [ssCtrl]);
Test1.Caption:=Test1.Caption+#9+'Ctrl + +'+#0;

353: ◆XcB18Bks.Y
13/07/10 NY:AN:NY.AN .net
テンキーでない方の[+]って日本語キーボードとUSキーボードでは違うキーでしたよね。
どちらでも動くように作らないといけないかと思います。

ちなみに手元のTurbo Delphiでは
[;](セミコロン)キーなら単純に"Ctrl+;"で行けました。

354:デフォルトの名無しさん
13/07/10 NY:AN:NY.AN .net
現在のキーボードで、文字に対応するキーコードを調べるにはVkKeyScanを使う。
code := VkKeyScan('+'); // code: SmallInt
key_code := LoByte(code); // key_code: Word
shift := [ssCtrl]; // s


355:hift: TShiftState if (HiByte(code) and 1) <> 0 then Include(shift, ssShift); menu_item..ShortCut := ShortCut(key_code, shift); これでも設定できなかったら、OnShortcutとかOnKeyPressイベントで キーを受け取って自前で処理することになるかな。 (メニューやHintの文字列も自分で追加)



356:デフォルトの名無しさん
13/07/10 NY:AN:NY.AN .net
皆様沢山のレスありがとうございます
こんなにたくさんのレスをいただけるとは驚きました・・・
>>337,>>338さんのおっしゃる通りCtrl+;で実装できました
他のソフトだとCtrl++という表示が出ているという固定観念にとらわれてCtrl++を
表示させようと必死でした・・・
Ctrl++とCtrl+;の表示の違いについては気にしないのでCtrl+;で実装しようと思います
>>339さんの方法は今後もし同じようなことがあれば参考にさせていただきます
レスをして下さった皆様ありがとうございました

357:デフォルトの名無しさん
13/07/26 NY:AN:NY.AN .net
D7でプロジェクト全体で語句を一括置換したい場合どうすればいいでしょうか
IDEの置換だとunit単位でしかできないですよね

358:デフォルトの名無しさん
13/07/29 NY:AN:NY.AN .net
秀丸なりなんなり外部エディタで

359:デフォルトの名無しさん
13/07/29 NY:AN:NY.AN .net
delphiのかなり基本についての質問です。
使ってるバージョンは delphi 6 Personal です。
mp3プレイヤーを作りたいと頑張っていますが、”常にFormの状態を取得する”
というイベントがあるのか無いのか、またあるならばどのイベントかが分かりません。
どうすればできるでしょうか?

360:デフォルトの名無しさん
13/07/29 NY:AN:NY.AN .net
『常にFormの状態を取得する』ってなによ?自分用語じゃなくて他人に伝わるようにね。

361:デフォルトの名無しさん
13/07/29 NY:AN:NY.AN .net
すいませんでした。
自分じゃこれ以上の表現は難しいのでこの質問はやめにします。
スレ汚しすいませんでした。

362:デフォルトの名無しさん
13/07/29 NY:AN:NY.AN .net
TApplicationEvents.OnIdle

363:デフォルトの名無しさん
13/07/29 NY:AN:NY.AN .net
エスパー現る

364:デフォルトの名無しさん
13/07/30 NY:AN:NY.AN .net
>>346
ありがとうございます。

365:デフォルトの名無しさん
13/07/30 NY:AN:NY.AN .net
イベントドリブンなDELPHIでもメッセージをフックして独自な処理をすることもできる
なんのイベント探してるのか知らないけどOSが渡してくるメッセージのどれかだろうから
フォームの状態を常に監視的なことはもちろんできる

366:デフォルトの名無しさん
13/08/01 NY:AN:NY.AN .net
この程度でエスパー扱いか
顧客様はもっと意味がわからん要求してくるけどな

367:デフォルトの名無しさん
13/08/01 NY:AN:NY.AN .net
そのレスに何の意味があるの?

368:デフォルトの名無しさん
13/08/04 NY:AN:NY.AN .net
お前が釣れたんじゃねぇの?

369:デフォルトの名無しさん
13/08/04 NY:AN:NY.AN .net
そのレスに何の意味があるの?

370:デフォルトの名無しさん
13/08/06 NY:AN:NY.AN .net
 Delphi7 のユーザーなのですが、最新版の Delphi の TRichEdit は 7 に比べ格段に進化しているのでしょうか?
 また TEditor 以外の 有力なテキストエディタコンポはありますか?
 RichEdit も有力でかまいませんのでよいコンポがあったら紹介して下さい。

371:訂正
13/08/06 NY:AN:NY.AN .net
> RichEdit も有力でかまいませんのでよいコンポがあったら紹介して下さい。
RichEdit も有料でかまいませんのでよいコンポがあったら紹介して下さい。

372:デフォルトの名無しさん
13/08/07 NY:AN:NY.AN .net
TMaskEditで日付を入力しているのですが
一度入力してしまうと消してブランクにしたいと思っても入力値が不正ですとなってしまって抜けられなくなります
この場合入力を取り消す方法はないのでしょうか

373:デフォルトの名無しさん
13/08/07 NY:AN:NY.AN .net
>>354
超テキトーにお答えします。

>最新版の Delphi の TRichEdit は 7 に比べ格段に進化しているのでしょうか?
たぶん特に進化はしてないかと。トライアル版を試すとかヘルプを見るとか。
URLリンク(docwiki.embarcadero.com)

>また TEditor 以外の 有力なテキストエディタコンポはありますか?
TEditorが正式にUnicode対応するまで、決定版が無いような気がしたり。
TSonEditは、TEditorと同じくUnicode対応の可能性あり。
SynEdit
他にはエディタ真魚のTNotePadとか。たぶんまだまだあるでしょ。

>RichEdit も有料でかまいませんのでよいコンポがあったら紹介して下さい。
最近広告してるTRichEdit代替品。良いかまったく知らんけど。URLリンク(www.trichview.com)


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch