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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、もしくは
質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。

Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。


■Delphi XE3 Professional/Enterprise/Ultimate/Architect エディション
64bit Windows、Mac OS Xのアプリも開発可能。ライブラリのソースコード付き。アカデミックライセンス有り。
旧バージョン(XE2/XE/2010/2009/2007/Delphi 7)のライセンス取得とダウンロードが可能。(アカデミック不可)
http://www.embarcadero.com/jp/products/delphi

■Delphi XE3 Starter エディション
個人/5人以下の企業・組織向け。アップグレード価格(※)14700円。年間売上1000US$以内の商用開発可。
(※)Delphi、Visual Studio等の有償/無償の開発ツールユーザーが対象。インストール確認は特に行わない。
http://www.embarcadero.com/jp/products/delphi/starter

■Embarcadero RAD Studio XE3 (Delphi、C++Builder、HTML5 Builder等を含むビジュアル開発スイート)
http://www.embarcadero.com/jp/products/rad-studio


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

<過去スレ>
DelWiki (Delphi 関連の過去スレッド)
http://delwiki.info/?%E3%83%AA%E3%83%B3%E3%82%AF%2F%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%83%86%E3%82%A3%2FDelphi%20%E9%96%A2%E9%80%A3%E3%81%AE%E9%81%8E%E5%8E%BB%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89
2デフォルトの名無しさん:2012/11/17(土) 11:41:19.77
<関連スレ>
Embarcadero RAD Studio/Delphi/C++Builder その3
http://toro.2ch.net/test/read.cgi/tech/1346899529/

delphiで作った有名ソフトって何があるの?
http://toro.2ch.net/test/read.cgi/tech/1135654787/
【Delphi互換!?】FreePascal/Lazarus その2【GPL】
http://toro.2ch.net/test/read.cgi/tech/1261676778/

ネットワークゲーム作成のお勉強(Delphi専用スレ)
http://toro.2ch.net/test/read.cgi/gamedev/1028278884/
Delphiでアクションゲームが作りたい!! Part2
http://toro.2ch.net/test/read.cgi/gamedev/1027482533/
delphiでMMO
http://toro.2ch.net/test/read.cgi/gamedev/1072515100/


<兄弟スレ>
くだすれC++Builder(超初心者用)その5
http://toro.2ch.net/test/read.cgi/tech/1334982374/
3デフォルトの名無しさん:2012/11/17(土) 11:42:10.72
では質問をどうぞ。
4デフォルトの名無しさん:2012/11/17(土) 18:57:06.32
前スレ>>989から継続です。お願いします。

WinXP + delphi7(VCL)で開発します。

コンボボックスのコンポーネントで、なめらかな動きをしない
(スムーススクロールしない)ようなものはありませんか?
あるいは、作る方法はありませんか?

stackoverflow.com/questions/2968189/disable-mouse-scroll-wheel-in-combobox-vb-net
参考にして、WM_MOUSEWHEELを握りつぶすことはできました。
(ホイールが利かなくなりました。)

ただ、ホイールを無効化するのでなく、
ドロップダウンリストにスクロールバーが出ている状態においては、
リストを1行ずつスクロールさせたく思っております。

その際、スムーススクロールさせると、リストのスクロールが
目で追えなくなってしまうような描画をするので、それを対策したいと思っております。

コンボボックスに、StringGridにおけるTopRowプロパティのようなものがあれば、
対策できそうではあるんですけど、方法ありませんでしょうか?
5デフォルトの名無しさん:2012/11/17(土) 20:30:05.15
完全に握りつぶさないでItemIndexを加減すればいいんじゃね?
6デフォルトの名無しさん:2012/11/18(日) 11:56:00.24
TMainFormにアクセスするにはどうすればいいのでしょうか?
7デフォルトの名無しさん:2012/11/18(日) 12:23:10.99
Application.MainForm
8デフォルトの名無しさん:2012/11/18(日) 12:27:38.47
>>7
ありがとうございますm(__)m
9デフォルトの名無しさん:2012/11/18(日) 17:25:36.12
>>4
自分もコンボボックスに機能追加しようといろいろ研究してたので…。
前スレ975
>Windowsのパフォーマンスオプションで、「リストボックスを滑らかにスクロールする」の
>チェックを外せば、望み通りの動きなのですが。(マウスホイールによる動きが全然違います。)

それならいっそ SystemParametersInfoのSPI_SETLISTBOXSMOOTHSCROLLINGで外せば良いかと。
1つのコンボボックスのためにシステム全体を設定変更と、かなり強引ですが…。それがこちら。
http://pastebin.com/PmWkCB51
OnDropDown時にSPI_GETLISTBOXSMOOTHSCROLLINGで状態取得、その後外し、OnCloseUpで元に戻す。

>コンボボックスに、StringGridにおけるTopRowプロパティのようなものがあれば
あります。csSimpleにして ComboBox1.Perform(CB_SETTOPINDEX,50,0); すれば瞬間移動します。
ですが… csDropDownだと、どう使ったら良いやら? 難しそうです。
それに加えWM_MOUSEWHEELを真っ当に使わないでゴニョゴニョするのは、かなり大変かと。
10デフォルトの名無しさん:2012/11/19(月) 14:54:54.33
THotKeyで設定したホットキーが押されたときの動作を設定するにはどうすればいいのでしょうか?
11デフォルトの名無しさん:2012/11/19(月) 19:55:04.28
>>10
THotKeyのOnChangeイベント等で、HotKeyプロパティを以下のいずれかに設定します。

・ TActionList→TActionのShortCutプロパティ(実行内容はOnExecuteに記述)
・ TMainMenu→TMenuItemのShortCutプロパティ(実行内容はOnClickに記述)

ヘルプの「例」も見た方がいいけど分かりにくいかも。
12デフォルトの名無しさん:2012/11/19(月) 20:26:36.56
>>11
ありがとうございます!
134:2012/11/20(火) 01:30:53.63
>>9
コメントありがとうございます。

> それならいっそ SystemParametersInfoのSPI_SETLISTBOXSMOOTHSCROLLINGで外せば良いかと。
> 1つのコンボボックスのためにシステム全体を設定変更と、かなり強引ですが…。

1つの方法ではありますね。
ただ気がかりなのが、
1.ソフトが異常終了したときに、Windowsの設定が変わってしまう。
2.同様の設定をしているコンボボックスを画面内に複数載せる場合があることを考えると、
  コンボAのOnDropDownとコンボBのOnCloseUpが同時に発生したときの処理順が気がかり。
です。
144:2012/11/20(火) 01:36:13.18
>>9
> csSimpleにして ComboBox1.Perform(CB_SETTOPINDEX,50,0); すれば瞬間移動します。

参考にして、以下のようなオーバーライドを入れてみました。
すると、生成して1回目のホイールだけスムーススクロールして、
2回目のホイール以降からは、スムーススクロールしないという不思議な動きをしています。
動きとしては、非常に惜しいです。

procedure MyCombo.WndProc(var Message : TMessage);
var
iIdx : Integer;
Rotation : ShortInt;
begin
if (Message.Msg = WM_MOUSEWHEEL) then begin
if (DroppedDown) then begin
Rotation := Message.WParamHi;
iIdx := Self.Perform (CB_GETTOPINDEX, 0, 0);

if (Rotation > 0) then begin
iIdx := iIdx - 1;
end else begin
iIdx := iIdx + 1;
end;

Self.Perform(CB_SETTOPINDEX, iIdx, 0);
exit;
end;
inherited WndProc(Message);
end;
15デフォルトの名無しさん:2012/11/20(火) 14:29:08.05
TEditでhoge...○○と続く文のhogeの部分があれば実行されるようにしたいのですがどうすればいいのでしょうか?
16デフォルトの名無しさん:2012/11/20(火) 14:46:38.49
その質問の文章、自分で理解可能なのかよ?

それはともかくエスパーしてみると、
if Pos('hoge',Edit1.Text) = 1 then
で判定かな?
17デフォルトの名無しさん:2012/11/20(火) 14:52:52.73
>>16
すみません・・・

そのコードで試してみたところできました!
ありがとうございます!
18デフォルトの名無しさん:2012/11/20(火) 15:26:48.71
もう1つだけお願いします・・・
hogeから10文字までの文字を引数に格納するにはどうすればいいのでしょうか?
19デフォルトの名無しさん:2012/11/20(火) 16:39:29.40
引数に格納?? 変数に、のことかな。
hogeから? hogeを検索してってこと? それとも先の質問と同じくhogeは先頭にあるのか?
10文字まで?? 10文字なのか、インデックスで10文字目までなのか。
hogeを含むのか、含まないのか?

私のESP能力を全開にして導き出した回答。
Edit1からhogeを検索し、その位置からhogeを含んで10文字取り出す。

var
Str: String;
begin
Str:=Copy(Edit1.Text, Pos('hoge', Edit1.Text), 10);

Delphiもいいけど、日本語をがんばれ。
20デフォルトの名無しさん:2012/11/20(火) 16:43:18.70
>>19
ありがとうごいます!
日本語のほうも勉強したいと思います・・・
21デフォルトの名無しさん:2012/11/20(火) 22:09:23.89
超初心者の内容かと言われれば疑問ですが、ひとつ質問をしたいです。

INetCfgインタフェースなど、NetCfgX系の資源を利用できるDelphi用の定義ファイルってないでしょうか?
もしご存知の方は教えて下さい。探しても見つかりません…。
22デフォルトの名無しさん:2012/11/20(火) 23:09:35.61
if文に2つの条件をつけるにはどうすればいいのでしょうか?
23デフォルトの名無しさん:2012/11/20(火) 23:28:50.03
if (A=1) and (B=1) then
if (A=1) or (A=9) then
24デフォルトの名無しさん:2012/11/20(火) 23:29:40.24
>>23
できました
ありがとうございます!
25デフォルトの名無しさん:2012/11/21(水) 05:35:01.31
>>19 hogeが2個以上あったらどうする?
こういう処理はマッチングでやるしかないと思う Posでは物足りない
26デフォルトの名無しさん:2012/11/21(水) 06:17:18.19
>>25
言うは易しでコードで示さないと >>18 要求では >>19 で事足りている
27デフォルトの名無しさん:2012/11/21(水) 06:59:28.39
今足りても将来どうかな 先を見越した設計をしないと
String型を安易に使ってるのも危険な匂いがするんだけど DELPHIのバージョンで扱いが変わるし
28デフォルトの名無しさん:2012/11/21(水) 10:39:58.84
さっさとコード出せよks
29デフォルトの名無しさん:2012/11/21(水) 11:41:42.99
>>18を単純に解釈すると
hogeから始まる文字列の頭から10文字分を別の文字列に
コピーするにはどうしたらいいですか?

になるんだけど、これであってるかな。
3026:2012/11/21(水) 12:27:26.43
>>29
>15 の続きで >18 の流れだから
1.TEdit 文字列 [ hoge...○○   ] の中に「hoge」が入った文があれば実行する、にはどうするか?
2.上記の条件を満たした場合、「hoge」から10文字までの文字を変数に格納する、にはどうするか?

>17 でOKな返答がある為、Unicode 以前なら結果的にどうってこともないかと
var
 Str : String;
begin
 if Pos('hoge',Edit1.Text) > 0 then
  begin
  Str := Copy(Edit1.Text, Pos('hoge', Edit1.Text), 10);
  // 処理
  end;
end;

Edit1.Text → 結果
hoge0123456789 → hoge012345
012hoge0123456789 → hoge012345
01234hoge01 → hoge01
hogeあ1いうえ → hogeあ1い
31デフォルトの名無しさん:2012/11/21(水) 17:18:53.12
質問者はとうにいなくなってるのに周りの池沼共がギャーギャーうるさいな
こういうのよく見るけど何がしたいのかね?知識自慢?
32デフォルトの名無しさん:2012/11/22(木) 02:00:13.04
>>25=27=31
33デフォルトの名無しさん:2012/11/22(木) 09:02:26.64
delphixe2のListViewの横スクロールバー表示はどこで設定するの?
34デフォルトの名無しさん:2012/11/22(木) 11:28:29.47
ListViewのスクロールバーは勝手に出たり消えたりするから設定は無いんじゃない?
35デフォルトの名無しさん:2012/11/22(木) 19:02:10.57
レスありがとうございます。
スッキリしました。
36デフォルトの名無しさん:2012/11/22(木) 19:12:01.44
6の時みたいに無償化イベントないかなぁ
374:2012/11/23(金) 07:14:21.87
ComboBox1.Perform(CB_SETTOPINDEX,*,*)
を使用する方向でやっていましたが、結局改善しきれませんでした。

そのため、SPI_SETLISTBOXSMOOTHSCROLLINGのシステム設定を
変更する方法で回避することにしました。

ちなみに、私が懸念していた点について。
> 1.ソフトが異常終了したときに、Windowsの設定が変わってしまう。
プロファイルへの書き込みをしなければ、
Windowsを再起動したときに変更前の設定に戻るみたいですので
想定よりはましでした。

> 2.同様の設定をしているコンボボックスを画面内に複数載せる場合があることを考えると、
>  コンボAのOnDropDownとコンボBのOnCloseUpが同時に発生したときの処理順が気がかり。
通常のマウス操作では、コンボAのDropDownとコンボBのCloseUpを同時発生できないので、杞憂でした。

ありがとうございました。
38デフォルトの名無しさん:2012/11/24(土) 13:43:57.37
HTMLファイルのURLの部分のみ(複数のURL)を抜き出してlistboxに反映するにはどうすればいいのでしょうか?
39デフォルトの名無しさん:2012/11/24(土) 14:09:28.86
「<a」が出てきたら次の「>」までを抽出する
40デフォルトの名無しさん:2012/11/24(土) 14:14:43.00
>>39
そこまでは辿りついたのですがでどういう風に書けばいいのか分からず・・・
PosExを使うのでしょうか?
41デフォルトの名無しさん:2012/11/24(土) 15:04:41.10
正規表現ライブラリとか使うと幸せになれるよ
42デフォルトの名無しさん:2012/11/24(土) 18:33:28.25
URL抽出用のクラスを自作すりゃいい
43デフォルトの名無しさん:2012/11/24(土) 19:08:47.65
>>40
<a href="
から "> まで 抜くにしてもURLのリンク記述は相対パスが多いぞ
試しにこのアドレスの表示ページをブラウザのソース表示で見てみては?
http://toro.2ch.net/tech/subback.html

HTMLファイルを読み込んで抜き出すのに
テキストベースで処理するのかバイナリーベースで行うのかで違ってくるけど
てけとうに書いてみますた
44デフォルトの名無しさん:2012/11/24(土) 19:12:29.63
procedure TForm1.Button1Click(Sender: TObject);
var
MS_Base :TMemoryStream;
Buffer : array[0..MAX_PATH-1] of Byte;
BinarySize,Address : Int64;
Bytes : Integer;
Str : String;
Check1,Check2 : Boolean;
begin
MS_Base := TMemoryStream.Create;
MS_Base.LoadFromFile(ExtractFilePath(Application.ExeName) + 'subback.html'); // 保存してると思いねぇ

Check1 := False;
Check2 := False;
Str := '';
Bytes := 3;
Address := 0;
BinarySize := MS_Base.Size;
while Address < BinarySize do
begin
45デフォルトの名無しさん:2012/11/24(土) 19:14:00.78
MS_Base.Position := Address;
MS_Base.Read(Buffer,Bytes);
if Check1 and Check2 then
begin
if Buffer[0] = $22 then
begin
Check1 := False;
Check2 := False;
ListBox1.Items.Add(Str); // <a href=" 〜 中の部分 〜 "
Str := '';
Bytes := 3;
end else Str := Str + chr(Buffer[0]);
end;
if Check1 and (Check2 = False) then if Buffer[0] = $22 then Check2 := True;
if (Check1 = False) and (Buffer[0] = $3C) and (LowerCase(chr(Buffer[1])) = 'a') and (Buffer[2] = $20) then
begin
Check1 := True;
Bytes := 1;
end;
Address := Address + 1;
end;
MS_Base.Free;
end; // ここまで
46デフォルトの名無しさん:2012/11/24(土) 19:30:47.45
>>43-45
出来ました!
本当にありがとうございます
これで自分が思い描いたソフトが作成できそうです
47デフォルトの名無しさん:2012/11/24(土) 20:28:45.09
LOOP1:
if (DATA[i] = $3C) and
(DATA[i+1] = $61) and
(DATA[i+2] = $20) and
(DATA[i+3] = $68) and
(DATA[i+4] = $72) and
(DATA[i+5] = $65) and
(DATA[i+6] = $66) and
(DATA[i+7] = $3D) and
(DATA[i+8] = $22) then
begin
 i:=i+9;
 while (DATA[i] <> $22) do
 begin
  str:=str+chr(DATA[i]);
  Inc(i);
 end;
 ListBox1.Items.Add(str);
 str:='';
end;
Inc(i); if i>length(DATA) then exit;
goto LOOP1;
48デフォルトの名無しさん:2012/11/27(火) 19:29:35.25
Delphi XE3にてDeleteが使用できません。

while Pos('hoge', str) > 0 do Delete(str, Pos('hoge', str), 1);

以下の内容で実行すると
'Integer' と 'string' には互換性がありません
実パラメータが多すぎます
とでます
どうすれば実行されるようになるのでしょうか
49デフォルトの名無しさん:2012/11/27(火) 19:42:04.94
>>48
自己解決しました
ListBox1.Items do
の中に入れていたのでエラーが発生したみたいです
50デフォルトの名無しさん:2012/11/27(火) 20:08:00.88
System.deleteで解決できました。
51デフォルトの名無しさん:2012/11/27(火) 22:18:02.68
Win32_PnPEntity を使った接続デバイスの一覧で
http://stackoverflow.com/questions/12163106/getting-device-names-using-a-com-port-number-through-the-windows-api-in-delphi
ttp://stackoverflow.com/questions/1687239/getting-connected-usb-info-with-delphi-on-vista

機器名を個別に関連付けするのに
http://www.wmifun.net/library/win32_pnpentity.html
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 が複数行に渡っているため?だと思うのですが
取得する記述をどういうふうに書くのでしょうか?
52デフォルトの名無しさん:2012/11/27(火) 23:50:37.26
WMI Delphi Code CreatorとかMicrosoftのWMI Administrative Toolsに入っている
CIM Studioを使うと幸せになれるかも
53デフォルトの名無しさん:2012/11/28(水) 00:37:46.87
>>51
Win32_PnPEntity class (Windows)
http://msdn.microsoft.com/en-us/library/windows/desktop/aa394353(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は?
5451:2012/12/04(火) 20:27:08.89
>>53
規制で書けませんでした
OS は XP sp3 です。
Delphi は D6 です。
HardwareID は array なんですね。
HardwareID 部分を別アレイにするとしても変動する行数をどう取得するのやらさっぱり

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

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

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

大事なことだから、二回もWindows XPと書いてあるけど。
5651:2012/12/05(水) 03:14:00.05
>55
PnPEntity で取れるかどうかは別として
デバイスマネージャ上のプロパティ > 詳細 > ハードウェア ID
で OS から見たりした結果です。

XP でも項目と値は入っていますよ
57デフォルトの名無しさん:2012/12/05(水) 06:16:10.52
5851:2012/12/05(水) 21:48:09.23
>>57
目的が「機器名を個別に関連付けする」です。
その為に機器個別のメーカーが振ったローカル情報があれば取得したかったわけです。
A社の機器B 使われているI/O のチップF
C社の機器D 使われているI/O のチップF

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

USB Web カメラなどは接続の(画像サイズなど)リストが出る方法があるようですが
振り分けのターゲットは、USB 接続
CP210x USB to UART Bridge Controller
の先にいる機器です。
あきらめました
59デフォルトの名無しさん:2012/12/05(水) 22:09:15.88
>>56
なんかすれ違うなぁ。
いやXPではHardwareIDが無いなんて言ってないし、別の方法で確認したことは理解してましたよ。

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

分かってるなら私の読解力不足。失礼。
60デフォルトの名無しさん:2012/12/18(火) 00:06:09.01
質問です。

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

画像ビューアを作っています。ウィンドウにドロップされたフォルダを開き、ファイル一覧を得て、順番に表示し、必要に応じて画像を移動したり削除したりするものです。
61デフォルトの名無しさん:2012/12/18(火) 00:08:10.93
60 つづき。

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

よろしくお願いします。
62デフォルトの名無しさん:2012/12/18(火) 01:50:28.19
試しにどうでもいいデータでテストしてみればいいだけでは。
63デフォルトの名無しさん:2012/12/18(火) 05:25:00.09
時間がかかるって、ファイル何個で何秒?
FindNext以外の処理で重くなってる気がする FindNext自体は高速だろう
64デフォルトの名無しさん:2012/12/18(火) 05:40:04.99
エクスプローラ的なUIの画像ビュアーか いかにも面倒臭そう
そういうソフトだったVixってソースが何十万行もあったような・・・
6560:2012/12/18(火) 07:00:40.64
>>62
旧バージョンではフォルダを閉じずにファイル操作していましたが別に不都合は感じませんでした。
でも本当にそれでいいのか気になって一旦ファイル一覧を作ってフォルダを閉じてから操作するようにしました。
すると今度は待ち時間が発生するのでどうしたものかと。
6660:2012/12/18(火) 07:09:37.06
>>63-64
*.* で全てのエントリを拾って拡張子を調べて BMP, GIF, JPEG, PNG を選び TStringList に Add() しています。
ExtractFileExt(), LowerCase(), AnsiPos() をエントリの数だけ繰り返します。
コードの行数は三桁もないと思いますが while ループがあります。
実際にかかる時間は画像千枚くらいで十秒くらいでしょうか。
67デフォルトの名無しさん:2012/12/18(火) 08:59:41.58
Win限定ならFindNext使って列挙せずに、シェルAPI使おうぜ。そうすりゃ、エクスプローラとの
見た目の一貫性とかある程度取れる。

>>60
FindFirst,FindNextももちろんだが、ディレクトリのファイルを操作する
APIの呼び出し時にもちゃんと戻り値をチェックして行儀のよくプログラミング
しておけば別に問題ないと思うけど。
6860:2012/12/18(火) 09:42:46.02
>>67
ShellAPI ですね、調べてみます。
戻り値にも気を付けます。
いっそ、全てのファイルを取得してフォルダを閉じてから画像ファイルを選べばいいんじゃないかと思い当たりました。
69デフォルトの名無しさん:2012/12/18(火) 09:58:50.43
つか、Application.ProcessMessagesとかかっこ悪い事はやめよう。
ファイル操作がいったいなんなのかよくわからんけど、単純にサブスレッドで
列挙するだけなら、
http://pastebin.com/cPY8duNq
7060:2012/12/18(火) 16:41:59.29
>>69
ありがとうございます。
それも参考にしてなんとかしてみます。
71デフォルトの名無しさん:2012/12/25(火) 23:28:28.78
delphi6を使用しています。

var
Time : TDateTime;
str : String;

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

とすると、時、分、秒が表示されず数字のみの表示になってしまいます。
どうすれば時、分、秒が表示されるのでしょうか?
72デフォルトの名無しさん:2012/12/25(火) 23:32:00.10
>>71です。
'h''時''n''分''s''秒'で解決することができました。
73デフォルトの名無しさん:2012/12/25(火) 23:45:48.35
つ FormatDateTime
74デフォルトの名無しさん:2012/12/26(水) 02:45:33.20
そっちも問題は一緒ですけど
75デフォルトの名無しさん:2012/12/26(水) 18:34:08.08
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'のセクションはあります。
解決策をどなたか教えて頂けないでしょうか?
76デフォルトの名無しさん:2012/12/26(水) 18:46:02.48
デバッグ版DCU使ってSectionExistsの中にステップインしてみたら?
77デフォルトの名無しさん:2012/12/26(水) 19:03:34.31
>>75
根本的な解決にはならないけど代替案。

var hoge: Integer;

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

if hoge = -1 then
begin
// invalid
end
else
begin
// valid
end;
78デフォルトの名無しさん:2012/12/26(水) 19:28:08.38
>>76さんのやり方は出来ないことが判明したので、>>77さんの代替案を使用させて頂きます。
ありがとうございました!
79デフォルトの名無しさん:2012/12/26(水) 19:28:58.23
>>78です。
言葉足らずでした。
>>>76さんのやり方は出来ないことが判明したので
性格には>>76さんのやり方は私の環境では出来ないことが判明したので
でした。
80デフォルトの名無しさん:2012/12/26(水) 22:43:09.66
はぁ
81デフォルトの名無しさん:2012/12/27(木) 10:11:15.46
tがひとつ多いとかsが足りないとかいうしょーもないオチだったりして・・・
82デフォルトの名無しさん:2012/12/27(木) 10:39:42.33
出来ないだけじゃ分からん
83デフォルトの名無しさん:2012/12/28(金) 20:33:30.27
出来ないのは彼女です
84デフォルトの名無しさん:2012/12/30(日) 01:20:29.43
こんなアホそうなやつでも遭遇するバグだったら他の誰かがとっくに気付いてるし
85デフォルトの名無しさん:2013/01/16(水) 20:32:54.27
無償、もしくは非常に安価なバージョンは用意されていますか?
86デフォルトの名無しさん:2013/01/16(水) 21:13:03.38
Starter Editionってのがあったと思う。色々制限はあるだろうけど。
87デフォルトの名無しさん:2013/01/19(土) 01:45:04.23
何もないフォームに PaintBox を一つ貼り付けて、プログラムも OnPaint に

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

と書いただけの時、フォームのダブルバッファが True だと表示されないのはなぜ?
前はちゃんと出来ていたと思うのだけど・・・
8887:2013/01/19(土) 01:50:44.31
あ、バージョンは XE Starter です。
89デフォルトの名無しさん:2013/01/19(土) 08:45:42.15
事故解決しました・・・
90デフォルトの名無しさん:2013/01/24(木) 21:34:14.71
Windows 7 (32-bit/64-bit) 環境で Delphi 6 は、インストールと動作は可能でしょうか?

XP モードというものを入れないと使えない?とかありますか?
91デフォルトの名無しさん:2013/01/24(木) 21:47:48.13
>>90
今使ってるが問題なく使えている(win7 pro 64bit)
XPモードは使っていない
開発頑張ってね
92デフォルトの名無しさん:2013/01/24(木) 21:59:16.63
>>90
Delphi5Pro だけど Win7 32/64bit でちゃんと動いてるよ。
ただしプロジェクトファイルは Delphi 本体からでないと開けない。
F9 で実行中のウィンドウはファイルのドロップを受け付けない。
ヘルプファイルの挙動が時々不審。
この三つ以外は特に問題ない。
93デフォルトの名無しさん:2013/01/24(木) 23:42:16.76
>>91-92
ありがとうございます。 安心して機種移行するまで今のXP環境を使います。
最近の(64-bit)機種でXPのドライバが無いものなどがあるようなので
今使っているパソコンが壊れたら開発環境崩壊? かと
94デフォルトの名無しさん:2013/01/25(金) 00:18:01.99
Lazarusあかんの?
95デフォルトの名無しさん:2013/01/25(金) 19:44:18.45
横から便乗質問なんですが(私も Win7 64bit Delphi5Pro です)
最近急に .hlp の起動が遅くなりました
数ヶ月くらい前から急にです
秀丸から開いたりするとタイムアウトエラーになるほど遅いです
おそらく何かきっかけがあったんでしょうがググってもあまり良い情報は得られませんでした
>>92 さんはそんなことは起きていないですか?
96デフォルトの名無しさん:2013/01/25(金) 23:33:29.77
Delphi関係だけが遅いのですか。
ファイルのコピーとかは遅くないですか。
97デフォルトの名無しさん:2013/01/26(土) 00:38:16.19
>>95
92 です。
うちでは起動が遅いということはありません。
うちの不審な挙動とは F1 でヘルプを開こうとしたときに、クラスではなくプロパティやメソッドの名前にカーソルがあると開かないというものです。
98デフォルトの名無しさん:2013/01/26(土) 02:49:54.46
Windows 7 Pro 64bit に Delphi 7.1 をインストールして快適に使っています。

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

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

というメッセージダイアログが出てしまいます。ヘルプファイルのパス名から \ マークが
消えています。Windows 7 側の問題だと思いますが、このスレに解決方法をご存じの方
いらっしゃいますか?
9995:2013/01/26(土) 11:06:48.62
>>96-97
どもです
WinHelp は他に API32WH.HLP くらいしか使っていなかったのですが
今ほかの昭和なソフトで確認したら問題なかったです
秀丸に登録してみてもすぐに開きました
D5、D6、API32WH.HLP はドライブもフォルダも異なるので HDD の問題でもないと思うのですが
うまく開いていた頃はたまにオブジェクトインスペクタから開いた時に「追加情報はありません」と
出ていたくらいでその時はフォームのコンポーネントで F1 押せば正常に開いていました
100デフォルトの名無しさん:2013/01/28(月) 20:45:15.19
Dという言語がある。D1, D2があるから、
D5, D6なんてかかないほうがいいとおもう
101デフォルトの名無しさん:2013/01/28(月) 21:08:54.10
その弩マイナーな言語よりDはDelphiが先なんで
102デフォルトの名無しさん:2013/01/29(火) 02:25:38.68
DelphiをDなんて言う人滅多に見ないな
滅多にってか見た記憶がなかったわ
103デフォルトの名無しさん:2013/01/29(火) 05:51:22.40
だから何なの。D5,D6という記述は普通だけど。
104デフォルトの名無しさん:2013/01/29(火) 10:21:07.95
Delphiである前提条件下では普通だな。tipsやvclの対応表記とか。
ここもそうならそうでいいんじゃないの?
厳密に正否なんてないがDelphiスレでおかしいと思うのもどうかと思うが
普通とか言っちゃってるのも相当おかしい。
105デフォルトの名無しさん:2013/01/29(火) 11:33:33.01
検索のノイズになることを懸念しているのであれば、「D言語」で検索すれば問題ないんじゃない?
106デフォルトの名無しさん:2013/01/29(火) 20:17:22.90
>>104
お前の日本語の方がおかしい
10795:2013/01/29(火) 20:39:57.31
D言語が存在するのは承知していますが
パソ通時代から現在まで Delphi スレでのバージョン明記の目的でしか D5、D6 という書き方をしたことがありません
とかどうでも良いんですが
Help 問題は俺環みたいですねお騒がせしました
108デフォルトの名無しさん:2013/01/30(水) 22:32:42.43
ふぁっきんじゃっぷ
109デフォルトの名無しさん:2013/01/31(木) 22:06:32.93
Delphi のバージョン略を 他言語 D と混同するとか難癖つけるやつは
スレタイ100回音読しやがれ!
何の開発言語のスレだ ボケっが
110デフォルトの名無しさん:2013/01/31(木) 22:12:05.90
 
       ____
     /⌒  ⌒\ ホジホジ
   /( ●)  (●)\
  /::::::⌒(__人__)⌒::::: \  はいはい
  |    mj |ー'´      |
  \  〈__ノ       /
    ノ  ノ
111デフォルトの名無しさん:2013/01/31(木) 23:11:52.74
>>109
釣られちゃダメよ。
112デフォルトの名無しさん:2013/01/31(木) 23:22:09.92
pascalのくせに生意気だ
113デフォルトの名無しさん:2013/02/18(月) 07:30:58.90
あるテキストを読み込み空行があれば
行を詰めて書き直したい
----------------------------------
ファイルから一行読み込む
最初の一文字が<>空欄でなかったら
書き込む
----------------------------------

元のテキスト

aaaa

bbbb

cccc


結果
aaaa
bbbb
cccc

こんなプログラム書いてくれる親切な人いたらお願いします。
昔 turbo pascal (わかるかな?)というので数行で書けたのですが
by後期高齢者
114デフォルトの名無しさん:2013/02/18(月) 08:06:43.24
>>113
sl: TStringList;
i: Integer;

// Create して LoadFromFile

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

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

たぶんこんな感じ。
115デフォルトの名無しさん:2013/02/18(月) 08:18:48.55
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
116デフォルトの名無しさん:2013/02/18(月) 09:36:59.86
>>114
>>115
多謝、毎日実用させていただきます。
117デフォルトの名無しさん:2013/02/19(火) 08:30:33.31
最初の一文字が<>空欄でなかったら書き込む

この条件見落としてる人ばかりw 0点。<と>の判定を忘れてる
118デフォルトの名無しさん:2013/02/19(火) 11:21:59.30
>>117 は何か勘違いしているな。
依頼主の表現も悪かったが、それを読み解く能力の有無で >>114-115 と差がついてしまっているようだ。
コミュニケーションスキルは大事だということが理解できる事例。
119デフォルトの名無しさん:2013/02/19(火) 12:19:20.03
WindowsXPsp3、Delphi6 personalですが

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

アプリ本体と同一フォルダにファイルストリームでテキストファイルを生成してTStringListで読み込むことは出来ています
検索してもフォルダ内にファイルを作る方法がよく判りません
120デフォルトの名無しさん:2013/02/19(火) 12:33:37.60
>>119

作成も読み込みも、実行ファイルが置かれているディレクトリ + 'hoge\'で指定出来ない?
121デフォルトの名無しさん:2013/02/19(火) 12:59:18.98
>>119
実行ファイルのディレクトリはExtractFilePath(Application.ExeName)で
取得出来るよ。
122デフォルトの名無しさん:2013/02/19(火) 13:23:50.40
「最初の一文字が<>空欄」ってどういうことか。
<や>で始まる一行を削除したいんだろう もっといえば「複雑な削除条件を持たせたい」ってのが
本件の主軸。しかもその削除条件は変動的だろうさ EXEでやるのは間違い、PerlやRubyスクリプト
でやるべきだ それなら依頼主が言うようにたった数行でできるしいつでも変更できる
初心者が理解しがたいDownToの逆順ループとかやってるアホがいたけどw それで保守できるの?
いかにも仕様変更時に勘違いやバグが起きそうだ
123デフォルトの名無しさん:2013/02/19(火) 14:04:15.85
>>120-121
何と、あっさりと出来てしまいました
本当にありがとうございましたm(_ _)m
124デフォルトの名無しさん:2013/02/19(火) 15:13:21.51
ParamStr(0) も忘れないでください
125デフォルトの名無しさん:2013/02/19(火) 15:37:29.39
GetModuleFileNameも忘れないで
126デフォルトの名無しさん:2013/02/19(火) 15:51:33.71
>>122
いろいろと痛々しいから大人しくしていたほうがいいよ。
これ以上の議論はスレ違いなんで、あと一回捨て台詞吐いて消えな。
それについては反論しないから安心していいよ。
最後はお前さんの勝ちってことでいいからね。
127デフォルトの名無しさん:2013/02/19(火) 16:09:47.94
Ran ちゃん、ご苦労さま。
128デフォルトの名無しさん:2013/02/19(火) 18:02:53.69
>>122
依頼主が「多謝」っていってんのに何いってんのこいつ?
依頼主が何をいってるかわからないなら勝手に読み解くんじゃなくて
依頼主にたずねるのが常識だろ?
これだから引きこもりは嫌なんだよ。
129デフォルトの名無しさん:2013/02/19(火) 19:07:42.01
コミュ障なんだろ
ほっとけよ
130デフォルトの名無しさん:2013/02/19(火) 20:11:26.96
> 初心者が理解しがたいDownToの逆順ループ
Delphiの定石だと思うんだけど。
131デフォルトの名無しさん:2013/02/19(火) 23:03:04.68
StringListでDeleteするならDownToの方が安心だよね。
132デフォルトの名無しさん:2013/02/20(水) 08:46:09.55
定石とか安心とか、中級者がハマりがちな勘違い 上級者ほど基本に立ち返る
133デフォルトの名無しさん:2013/02/20(水) 11:43:06.50
削除時のdowntoは基本中の基本だけど?
134デフォルトの名無しさん:2013/02/20(水) 12:02:01.17
>>133
相手しちゃダメ。
135デフォルトの名無しさん:2013/02/22(金) 10:26:30.39
>>131
安心つか>>133の言うように、downtoでないとindexずれるよ
136デフォルトの名無しさん:2013/02/23(土) 20:44:31.31
会社でDelphi7使うことになって、勉強のために家のPCにもDelphiをインストールしたいです。
ただ、Delphi7はバージョンが古いようで、手にはいりません。
Delphi7と同じ感覚で使えるバージョンはありますか?
137デフォルトの名無しさん:2013/02/23(土) 21:44:26.66
>>136
Delphi6が無償で配布されているがそれじゃダメかな
コードの練習と各々の機能の理解はどのバージョンでも出来ると思うよ
138デフォルトの名無しさん:2013/02/23(土) 21:57:18.46
>>137
そのキャンペーンはとっくに終わっている
現在、無償の Delphi は存在しない
139デフォルトの名無しさん:2013/02/23(土) 22:11:14.70
>>138
そうだったのか
ならLazarusはどうかな?
140デフォルトの名無しさん:2013/02/24(日) 02:14:31.51
短発の仕事の為だけに1万くらいの最新の奴買う訳にはいかないよなw
141デフォルトの名無しさん:2013/02/24(日) 02:51:13.50
BCB 6 perはエンバカがキー公開してるけどD6はしてないんだな
http://delwiki.info/?Delphi%2FDelphi%206%2FDelphi%206%20Personal%20%E3%81%AE%E5%85%A5%E6%89%8B%E3%81%A8%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB

ライセンスに反しない手段だとCD付録の書籍探すしかないかな
コンポがインスコ出来ないTurbo Delphi Explorerは配布の時に
「ミラーリングして拡散してくれ」とか言ってたような気がするけど
ライセンス入手出来るのか知らない
142デフォルトの名無しさん:2013/02/24(日) 08:36:17.34
XEでも似たようなモンだろ? 体験版あるよ
えーと7とそっくりだったのは2010だっけか 6と7は文字コードの差とか内部的には違いが大きいはず
見た目は近いけど。複数のバージョン試して驚いたのがコンパイラがまったく進歩せず、6のソースが
ほとんど高速化しなかったこと その点を踏まえれば古いバージョンのままでも正解だと思う
143デフォルトの名無しさん:2013/02/24(日) 09:20:08.31
うちも未だに仕事では7なんだけど7ってやっぱ優秀なの?
何を持って優秀というかは自分でもわからんけど自宅では趣味性で最新版入れてるけど
特に顧客要件も関係ないのに頑なに7なんだよねぇ
144デフォルトの名無しさん:2013/02/24(日) 09:43:54.73
5が最強らしいけどユニコードががが……。
145デフォルトの名無しさん:2013/02/24(日) 16:28:20.99
>>143
優秀っていうより7からXP モードが搭載されて見た目がXPライクに作れる
それまでのは 画面のテーマで「Windows クラシック」なウィンドウ。
吐くコードが Windows 2000 でも動作可能で Win32API に気をつけて組めば
Win95 でも動くものを作れるので、雑多に混ざっているクライアント環境に渡すには強い。
MS visual studio は上位バージョンになっていくと過去OSで動かないコードになってく
146デフォルトの名無しさん:2013/02/24(日) 21:02:49.88
>>136
XE3買えば全てのバージョン使えるじゃん。
147デフォルトの名無しさん:2013/02/24(日) 21:37:35.70
未だに会社でDelphi7の環境ってことは、ライセンスに関してはゴニョゴニョって感じなのかな。
148デフォルトの名無しさん:2013/02/27(水) 06:21:33.20
ロングファイルネームや感じがダメなら hogeho~1.dbf とかの短縮名で
アクセスしちゃダメ何かね? MLの話題なんだけど...。
149デフォルトの名無しさん:2013/02/27(水) 06:44:36.34
ほっとけよ。>148
質問者も回答者も隠し球ばかり。

あの手のバグは FileMon つかって実際に開こうとしているファイルを「知る」のが最短の対応。
150デフォルトの名無しさん:2013/03/01(金) 00:16:17.49
すみません、実はかなり初歩的なことなんだろうと思うんですけど、
ゴチャゴチャやってるうちにわけわかんなくなっちゃいました。

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

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

この関数の引数であるbmpは var とかにしなきゃダメなんですか?
はっきりは分かりませんが、これでも動いてることは動いてるみたいなんです。
151デフォルトの名無しさん:2013/03/01(金) 00:21:31.54
HOGE の引数、 bmp を誰がいつ用意するか。を意識してみてください。
この場合の用意は、TBitmap のコンストラクターを呼ぶのは誰か。と言うことになります。
152デフォルトの名無しさん:2013/03/01(金) 00:56:00.06
アホでごめんなさい。ほんとにごめんなさい。
コンストラクタ、あたりの言葉の意味が・・・???程度のアホです。
大雑把にいうと以下のような使い方をしています。
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;

呼び出し先で値が変わっちゃうものは、今まで判で押したようにvarにしてたんですけど、
今回たまたまvar書き忘れてたことに気づいて、え、これでも動いてたの、と。
153デフォルトの名無しさん:2013/03/01(金) 01:42:05.90
HOGE の引数 bmp は、HOGE 実行中には「変更」されませんね。
bmp はオブジェクトを指していて、オブジェクト自身の持つデータ(プロパティやフィールド)は
変更されますが、オブジェクト自体は書き換わっていません。
だから HOGE の引数宣言に var は必要ありません。

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

より内部的な説明をするなら、Delphi のオブジェクトインスタンスはポインタだから、インスタンスを新規に
割り当てないのであれば var は必要ない。となります。
154デフォルトの名無しさん:2013/03/01(金) 02:56:48.78
うーん、分かったような分からないような、で御免なさい。

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

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

もしかしたら完全にトンチンカンなこと言ってるかもしれません。
アホな話持ち出して、まったくすみません。
155154:2013/03/01(金) 03:21:38.95
ちょっとだけわかったような(勘違いかもしれないけど)

TImageを引数にしてそこにBitmapを押し込む関数をいくつかつくったことがあるんです。
このときはvarにしてません。
この関数によってTimageの「値」はたしかに変わるんですよね。
でも、理屈云々の前に、varにしようなんて考えはまるで浮かばなかった。
だってこれ、ただそこにある箱じゃん、と。
それと同じように考えて(・・・本当にいいのかな?)
とりあえずおやすみなさい。
156デフォルトの名無しさん:2013/03/01(金) 04:58:09.07
>それをたとえばHOGE内でbmp.Freeなんてやっちゃうとか、HOGE内であらためてbmp=TBitmap.Createやっちゃうとか、
> そういうときにこそvarにする、ということでしょうか?

やってみそ。
157デフォルトの名無しさん:2013/03/01(金) 10:30:28.53
クラスは何もしなくても参照(アドレス渡し)なので、varをつけなくてもそのインスタンスの内容を
変えることができる。varをつけるとインスタンスを格納するためのポインタのアドレスが渡されるので、
インスタンスそのものを変更することができる(コンストラクタを呼び出して生成したインスタンスを
設定したり、デストラクタを呼び出してnilに設定したり)。
要はクラスをパラメータで渡すときは暗黙にvarがついていると思えばいいってこと。
158デフォルトの名無しさん:2013/03/01(金) 10:58:39.08
bmp: TBitmap って引数で渡すとbmpはポインタだから varもポインタ渡しで同じ意味になる

暗黙もへったくれもない常識だが・・・?
159デフォルトの名無しさん:2013/03/01(金) 14:25:29.04
ポインタのポインタだって。呼び出し元のbmpの参照先を
書き換えることができ、違うTBitMapにすることだってできる。
160デフォルトの名無しさん:2013/03/01(金) 16:16:20.87
そこにポインタを持ち込むと、分かる人と分からない人が出てくるから、
説明するときは考えちゃうんだよなぁ。
ネットだと、質問者の持ってる知識が分からない場合が多いから
161154,155:2013/03/01(金) 22:57:48.49
いくつか実験してみました。
基本がわかっていないので貧しいイメージしか出来ませんけど。
varをつければ製造元までさかのぼって変更できる、というひとまずの納得の仕方。

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

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

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

お騒がせしました。
162154,155:2013/03/01(金) 23:33:40.18
何度も面倒な話題ですみません。
下の関数の引数、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;

ただ現実の話として、こんな関数使うことがあるとは思えないんで、
ウザかったら放置してくれていいです。
163デフォルトの名無しさん:2013/03/02(土) 00:16:21.00
クラスはポインタで渡されるってことだ OleVariantもクラスだろ
StringやIntegerはデータ型であってクラスではないから別物

通常var渡しはサブルーチンから複数の戻り値を得るために使うもので、1個だけでいいなら
普通のfunctionで済むはず
クラスがいつCreateされるかよく考えないとメモリリークに悩まされるよ
164デフォルトの名無しさん:2013/03/05(火) 14:05:17.30
C++で作成されたDLLをDelphiで使用するにはどのように定義すれば良いのでしょうか?
DLLのソースにはextern "C"はついており、defファイルも存在しています。
165164:2013/03/05(火) 15:09:31.68
VC用のDLLでした
166デフォルトの名無しさん:2013/03/05(火) 15:10:02.11
VC++です・・・
何度もすみません
167デフォルトの名無しさん:2013/03/05(火) 16:10:55.49
http://docwiki.embarcadero.com/RADStudio/XE3/ja/%E6%89%8B%E7%B6%9A%E3%81%8D%E3%81%A8%E9%96%A2%E6%95%B0
手続きと関数(Delphi)
ライブラリからの関数のインポート
168デフォルトの名無しさん:2013/03/16(土) 15:30:01.82
'String'.Uppercase; ==> 'STRING'
3.Odd; ==> True
みたいにどうにかして順序型でメソッド呼べるようにする方法ないですか
169デフォルトの名無しさん:2013/03/16(土) 15:45:17.91
独自なStringクラスを作りゃええやん
170デフォルトの名無しさん:2013/03/26(火) 18:50:40.41
Delphiという言語の質問じゃないんですが、使い方で。

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

よろしくお願いします。
171デフォルトの名無しさん:2013/03/26(火) 21:33:30.49
今時のIDEは最大化してしまうのかよ
俺の知ってるDelphiは昔から
「環境オプション」→「コンパイルと実行」→
「実行時に最小化」&「実行時にデザイナを隠す」
といった遠慮がちな設定しかできないがw
172デフォルトの名無しさん:2013/03/26(火) 21:35:19.80
あ、もしかしてデスクトップスピード設定たらいうやつの
「デバッグ時のデスクトップに指定」で記憶してしまってるのかな?
173デフォルトの名無しさん:2013/03/30(土) 11:03:18.03
コミュ障プログラミング言語ってDelphi2009で作ったのな…
すげい。
174デフォルトの名無しさん:2013/03/30(土) 16:57:41.44
すみません教えてください

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

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

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

ヒントだけでもかまいません。よろしくお願いいたします。
175デフォルトの名無しさん:2013/03/30(土) 17:25:20.49
2.Anchors
3.Columns
4.ItemIndex
176デフォルトの名無しさん:2013/03/30(土) 17:38:45.29
>>171,172さんありがとうございました。

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

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

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

という感じで開始ポインタと読み込みサイズを指定していたのですが、
今回、動画データなどの巨大ファイルから直接部分データを読み込むことをしようとしています。
(300MB 越えのデータを複数連続で読み込むと負荷が大きい為)
178177:2013/04/09(火) 22:46:50.25
例:
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;
179177:2013/04/09(火) 22:53:45.20
結果
0 = 46464952
1 = FFDB47E
2 = 20495641
3 = 14E    (前項から4バイト飛ばして読み込み)
4 = 6C726468

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

情報データが動画に埋め込み方式の機械があって・・・必用な部分は量が知れているのですが
そこにたどり着くまでが大きいので
180デフォルトの名無しさん:2013/04/09(火) 23:16:43.38
TFileStreamを使わない理由がわからない
181177:2013/04/10(水) 00:08:52.56
>>180
もしかして TMemoryStream を TFileStream に変えたら使い方殆ど同じ?
ぶっちゃけ 「TFileStream」 という存在を知らなかった訳で
ちょっと調べてみま〜・・・
182デフォルトの名無しさん:2013/04/10(水) 00:24:47.66
よく分からんが IntFile = file of Integer; だから1レコード四バイトで
アクセスしているだけだな。
ファイルを array of Integer でアクセスしているのと同じ。

バイト単位で処理したければ file of byte / file of char または file で。
183177:2013/04/10(水) 00:39:20.45
ヨメ ━━ Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒(。A。) タ ━━ ッ !
184177:2013/04/10(水) 01:28:06.36
ありがたう
185デフォルトの名無しさん:2013/04/10(水) 07:53:23.46
>>177
づつではなくずつだ。
186デフォルトの名無しさん:2013/04/19(金) 09:14:16.12
>>174
どうもです。
やっと理解できてソフトに実装できました。
もう1つ教えてください。
scrollboxにimageコンポーネントを組み合わせています。
イメージコンポーネントのサイズをマウスで
左右や上下に変える方法というのはどうしたら良いのでしょうか?
本を見たりしましたが、どこにもなく困っています。
ウインドー左側にfilelistboxで右側にimageを貼り付けていますが、
imageのサイズを変えると、左側のfilelistboxの大きさが皮得る方法はありますか?
187デフォルトの名無しさん:2013/04/19(金) 12:59:50.13
OnMouseDown/OnMouseMove/OnMouseUp
188186:2013/04/19(金) 16:37:57.65
>>187

>>186宛でしょうか?
やりたいことと言うのは、例えば、joytokeyの
左側設定ファイル選択の枠と右側のキー割り当ての枠の真ん中にある
マウスを近づけるとカーソルが←|→なようになる部分です。
名前が今ひとつ分からないので探しようがない状態です。
Windowsのマウスのプロパティーには、左右の拡大縮小とありましたが、
この言葉で調べてもヒットしませんでした。
189186:2013/04/19(金) 16:54:55.46
カーソルですが、
エクスプローラーのフォルダーとファイルエリアの境目とかの
←→な感じのものです。
190デフォルトの名無しさん:2013/04/19(金) 18:32:27.48
Splitter
191デフォルトの名無しさん:2013/04/20(土) 09:08:49.68
TPanelにファイルリストとイメージコンポを貼り付けるだけのことじゃないの?
192デフォルトの名無しさん:2013/04/20(土) 20:51:20.85
>>186
ttp://www1.axfc.net/uploader/so/2875215.zip?key=kudadel
コンポーネントのインストールは必要ない
193デフォルトの名無しさん:2013/04/24(水) 06:21:08.33
計算式の置き換えで質問です。

地点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">
 ↓
http://keisan.casio.jp/exec/system/1257670779
方位角φ= 90-atan2(sin△x,cos(y1)tan(y2)-sin(y1)cos△x)
△x=x2-x1
 ↓サイトの結果(正解の答え)
方位角φ= 331.665281
図:AからBの方角: NW と N の間
194193:2013/04/24(水) 06:22:48.57
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;
195デフォルトの名無しさん:2013/04/24(水) 06:44:13.07
ラジアンって習うのは高校生だっけ?中学?
196デフォルトの名無しさん:2013/04/24(水) 08:23:15.63
>>195
高校の理数系クラスだと思います。
197デフォルトの名無しさん:2013/04/24(水) 09:57:51.14
じゃあラジアン分からないんだね
まずはそこから勉強しよう
198デフォルトの名無しさん:2013/04/24(水) 13:27:48.87
Won'tYouStayForMe
199デフォルトの名無しさん:2013/04/24(水) 17:29:49.47
Delphi の三角関数は、ラジアン単位を引数としているので
度で表記された座礁は、変換が必要。
ラジアンという言葉の意味/定義を確認した上で、Math ユニットの DegToRad とかを
組み合わせてごらん。
200デフォルトの名無しさん:2013/04/24(水) 18:11:52.38
180度=1.0ラジコンだっけ?
201デフォルトの名無しさん:2013/04/24(水) 18:36:52.73
お帰りください
202デフォルトの名無しさん:2013/04/24(水) 20:45:02.07
 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;

一応こんな感じで数値が合うようになりました。
感謝
203デフォルトの名無しさん:2013/04/26(金) 06:51:22.07
DelphiXE4&FireMonkeyなんですが、
MediaPlayerControlってウィンドウサイズに合わせて映像を拡大できないのでしょうか?
204デフォルトの名無しさん:2013/04/26(金) 21:50:10.98
delwiki.infoどうなっちゃったの?
205デフォルトの名無しさん:2013/04/28(日) 09:38:28.80
XE2で
bds -r main
とかやって別プロファイルで起動するとGExpertsが起動しないんですが
どうやればプロファイル指定してGExperts組み込めるんですか

最悪レジストリのキー入れ替えてからインストールすれば
できそうな気もするんですがもうちょっとまともなやり方あったら教えて下さい
206デフォルトの名無しさん:2013/04/28(日) 10:36:43.69
別のログインユーザー作成
207186:2013/05/05(日) 09:16:37.44
>>190
どうもです。基礎的なコンポーネントだったんですね。
ただ、位置の制御に苦労しました。

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

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

今は、既存の構成を使ってmp3の再生に取りかかっています。
medeiaplayerを使っていますが、wavでは簡単に再生できますが、
mp3ではオブジェクトインスペクタのプロパティのFilenameでファイルを直接
指定すれば再生できますが、それ以外ではEMCIDeviceError発生します。
上手くファイル名が渡せていない感じがします。
これを解決する方法はありますか?
208デフォルトの名無しさん:2013/05/05(日) 19:14:51.21
MediaPlayer1.TimeFormat:=tfHMS;
MediaPlayer1.DeviceType:=dtAutoSelect;
MediaPlayer1.FileName:=FileName;
MediaPlayer1.Open;
209186:2013/05/06(月) 10:56:36.48
>>208
動きませんでした。
ただ、MediaPlayerを扱っているサイトのように
with MediaPlayer1 do
begin
FileName := filelistbox1.FileName;
Open;
Play;
とやったら動きました。
やっていることは同じのように見えますが…。
210デフォルトの名無しさん:2013/05/07(火) 07:54:18.94
MediaPlayer1.FileName:=FileName;

MediaPlayer1.FileName:=filelistbox1.FileName;
こうすればよかったんじゃね?
211209:2013/05/07(火) 09:45:27.59
それで動きそうな物なんですが、ダメだったんです。

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

これで、一週間くらい悩み続けました。
これでとりあえず動いていますが、with文を理解していないので
トラブルが起きたときに対処できません。
212デフォルトの名無しさん:2013/05/07(火) 09:52:35.76
エラーメッセージで原因分かってるじゃん
自動でデバイスが判断できないなら手動でやればいいだけの話でしょ
プログラミング言語の前に日本語の理解をできるようにしないと
213209:2013/05/07(火) 17:03:16.17
その、手動でやる方法が判らなかったんですよ。

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

wavだと>>211の方法で鳴らせるのにmp3だとエラー
>>212は馬鹿にしたいのだろうが
日本人なんしバカじゃないんだから、コンパイラの言っている意味はわかるよ
214デフォルトの名無しさん:2013/05/07(火) 21:20:24.78
with文を理解していないって、冗談でしょw
215デフォルトの名無しさん:2013/05/07(火) 21:38:31.29
216192,208:2013/05/07(火) 21:59:37.87
>>209
おれ、192,208 だけど( with 文知らないということで)
もしかして「動きませんでした。」って
MediaPlayer1.Play;
をしてないだけだったんではないよね?
>>207 で EMCIDeviceError が出るっていうからこれでも出る?って意味で
208 を書いたんだけど
217デフォルトの名無しさん:2013/05/07(火) 22:01:23.04
追記
>>209 は↓と同じ事を書いてるんだよ
MediaPlayer1.FileName := filelistbox1.FileName;
MediaPlayer1.Open;
MediaPlayer1.Play;
218209:2013/05/08(水) 05:26:07.46
>>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プロパティに直接ファイルを指定しないと
無視されてました。

ダメじゃんと言うことがあればお願いいたします。
219210:2013/05/08(水) 05:35:50.40
いま、
>>209 のコードで動くと書いていることと、
>>217 のコードで動かないと書いていることが
矛盾していること。

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

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

他は省略
220デフォルトの名無しさん:2013/05/08(水) 06:54:10.68
DirectXを経由したほうが簡単に音を鳴らせる気がする
221デフォルトの名無しさん:2013/05/08(水) 07:03:34.18
こんなソース発見 delphi.about.com/od/multimedia/l/aa112800c.htm
222209:2013/05/08(水) 09:51:58.69
>>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
ないわけがないと思って探していましたが、やっぱりあるんですね。こういうソフトが。
どうやってこういうサイトを探すんでしょうか?
日本語のサイトを探すだけじゃダメなんでしょうか。
223222:2013/05/08(水) 09:56:49.66
mPlay.DeviceType:=dtWaveAudio;
にするとコンパイルされますが、
wavは再生されますが、mp3は反応しません。
ファイルをダブルクリックしても何も起きません。

mPlay.DeviceType:=dtAutoSelect; で
FileNameプロパティに例えばc:\a.mp3
という感じで指定すると実行したときに即座に再生されます。
この後に他のmp3を選択すると再生されました。
224デフォルトの名無しさん:2013/05/08(水) 21:07:45.88
dtAutoSelectにしたってコンパイルはされるだろ
用語の使い方がおかしい
基礎から学び直せ
225デフォルトの名無しさん:2013/05/08(水) 22:03:42.37
コンパイルオプションの最適化を外して再構築しなおせばどうか
226デフォルトの名無しさん:2013/05/09(木) 04:13:21.57
>>224
基礎を学んでいる最中なんですが。
失礼しました。
227デフォルトの名無しさん:2013/05/09(木) 10:21:48.11
>>224
>>209のように別に作り直したら、
エラーが発生しました。

よくわかりません。
228デフォルトの名無しさん:2013/05/09(木) 12:17:09.25
>>224
ロダにあげたのでもしよかったら見てください
ttp://www1.axfc.net/uploader/so/2896335
229デフォルトの名無しさん:2013/05/09(木) 21:51:40.46
>>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 したらコピーできるときもある
230デフォルトの名無しさん:2013/05/09(木) 23:10:22.51
DeviceTypeはPCの環境設定に依存するからお前のPCで問題ないから他でも問題ないとは限らない
231デフォルトの名無しさん:2013/05/10(金) 05:56:44.41
>>229
入力支援機能教えていた秋ありがとう
今までめんどくさいなとか思っていたのでかなり助かります。
拡張子の判断もありがようです。
これは、Delphi2005プログラミングテクニックからそのまま
持ってきた物なのでより効率の良い方法ですね。使わせて頂きます。

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

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

ソースとバイナリ、エラーメッセージをキャプったものをロダに上げました。
お手数ですが、また見て頂けないでしょうか。
http://www1.axfc.net/uploader/so/2897278
232デフォルトの名無しさん:2013/05/10(金) 07:20:30.64
>>229
新しいプロジェクトでの確認しましたが、
こちらは、IDEでもコマンドラインからでも正常に再生されます。
お手数おかけします。
http://www1.axfc.net/uploader/so/2897304
233デフォルトの名無しさん:2013/05/10(金) 08:41:48.22
TMediaplayerではなく
TWindowsMediaPlayer(wmp.dll)を使えばいいのに
ずっと多機能だし、使いやすいのに
234デフォルトの名無しさん:2013/05/10(金) 09:39:31.37
>>233
WindowsMediaPlayerも考えて、ActiveXモジュール組み込みましたが、
どう使ったら良いのか判りませんでした。
playlistもどう扱ったら良いのか??な感じでした。

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

初心者というのが免罪符になるとは思いませんが、
本当に勉強を初めて一月とかです。
不快に感じる方がいらっしゃると思いますが、ご容赦ください。
235デフォルトの名無しさん:2013/05/10(金) 10:21:25.03
TMediaplayerControlって、オリジナルのビデオサイズより拡大表示できないの?これ
236229:2013/05/10(金) 19:07:21.64
>>230
そーなのかありがとう
じゃあ配布目的とかでは使えないんだ
まあ俺はTMediaPlayer使わんけどな
237229:2013/05/10(金) 19:22:08.94
>>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 ってのは本当はこんな風に逃げるだけの手段ではないんだよ
238デフォルトの名無しさん:2013/05/10(金) 19:56:45.29
>>237
レスどうもです。
>>231はFileListBox一式とMediaPlayerだけをFormに乗せただけの物です。
>>231>>229
procedure TForm1.Button1Click(Sender: TObject);文以下の
以下のソースを反映させた物です。
私の環境ではコンパイルが終わってアプリが起動するときにエラーが出ます。
出来たバイナリを起動しても同じです。

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

>>228の物は制作中の物なので拡張子での処理を分岐させるようにしてあります。

OnChangeについてはこのような変化が起きたときに発生する
プロパティ項目がないわけがないと思って探していました。
例外処理についても必要性を感じていました。
画像部分を作っていたときには処理を確認するために
デバッグ用の表示を作っていましたが、音声の方はそれ以前の出来だったので
何もしてありませんでした。
suggestionありがとうございます。勉強させて頂きます。
239229:2013/05/10(金) 20:54:25.95
わかったよ〜(ヒントは今まで俺がレスしてきた中に全てあったよ)

「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」になる

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

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

やっぱりちゃんと言語ガイド読まなくてはなりません。
ありがとうございました。
241229:2013/05/10(金) 23:42:57.67
>>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;
つづく
242229:2013/05/10(金) 23:43:51.91
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);
243デフォルトの名無しさん:2013/05/11(土) 00:36:43.60
エラーが起きるところでステップ実行をしなかったの??
FileNameがヌルになるならすぐわかりそうなものなのに
デバッグの仕方が根本的に変
244デフォルトの名無しさん:2013/05/11(土) 01:18:17.09
くだすれDelphi(超初心者用)
245デフォルトの名無しさん:2013/05/11(土) 22:32:26.98
>>241
サンプルソースありがとうございます。
mp3再生部を入れてからエラーが出て
一週間位悩んで質問しました。
最初はファイル名に絡むエラーだったので
ファイル名が上手くコンポーネントに渡していないなと言う
予想は立ちましたが、ネットでDelphiのmp3関係を扱っている
サイトで出てくるUnicodeが原因なのかと思って困ってました。

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

何を勉強しないと行けないのかが明確になりました。ありがとうございました。
246245:2013/05/11(土) 22:53:48.08
デバッガーのステップ実行のやり方が判ったので
値を監視してみたところエラーの出る寸前で
拡張子(theext)が''になっていてselfとsenderが
この位置からは参照できないと出ていました。

勉強になりました。
247229:2013/05/11(土) 23:59:15.22
自分のレベルも Delphi のバージョンもちゃんと最初に書いてるし
こうしてみろといわれたら素直に実行するし
質問者としては良質だと思ったよ
どんどん作って今後も Delphiライフを楽しんでくれ(^.^)/~~
248デフォルトの名無しさん:2013/05/12(日) 00:00:10.47
Delphi 全角になってた恥ずかしい
249デフォルトの名無しさん:2013/05/14(火) 19:48:33.00
上レスのMP3 の人とは別人です。
環境 Delphi 6
ttp://www1.axfc.net/uploader/so/2902405.zip?key=P3

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

MP3プレイヤーを作る>dllによる再生
http://www.sm.rim.or.jp/~shishido/mp3dev1.html

MP3 Decode Library mp3dec
http://hp.vector.co.jp/authors/VA011457/
vbmp31615_fixed_20030921.lzh の
VBMP3.dll 改 Version 1.615.2003.0921 を使ってみています。

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

最終目的は、変換したモノラル .wav から音声チャンク部分だけを取り出して
機器用の .pcm 音声ファイルを作るツールです。
250デフォルトの名無しさん:2013/05/14(火) 21:38:42.36
ffmpegで全部出来る
251デフォルトの名無しさん:2013/05/15(水) 08:40:03.38
フォーマット変換をするのは、再生とは別
VBMP3を使って出来る物ではないよ
両方のフォーマットを理解しないと。

http://www.marinecat.net/free/windows/mct_free.htm

それっぽいサイトを見つけたけどこれでもダメだろうな…。
午後のこーだーのソース読んでみたら
252デフォルトの名無しさん:2013/05/15(水) 13:20:42.88
mp3の再生ができるなら音をキャプチャすればいいんじゃないか
253デフォルトの名無しさん:2013/05/15(水) 18:20:29.61
>>251 >>252
MP3 のフォーマットが複数あって難解なので、既存の dll を利用したかったのです。
午後のソースも見てみましたが、お手上げですね。
デコード機能があればと残念です・・・ 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 での形式と属性変換が単体操作できるのですが、コマンドラインオプションが無さそうで。
254デフォルトの名無しさん:2013/05/16(木) 08:16:21.01
>>253
今どこまで実装できてるの?
255249 253 です:2013/05/16(木) 19:42:40.64
>>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 ) モノラル
256デフォルトの名無しさん:2013/05/16(木) 20:15:14.36
>>255
ffmpeg -i input.mp3 -ac 1 -ar 44100 -f s16le -acodec pcm_s16le output.pcm
出力ファイルを"-"にすれば結果が標準出力へ吐き出されるのでプログラムからパイプで受け取れる
257249 253 です:2013/05/16(木) 23:38:15.05
>>256 ども
コマンドラインで一発変換できますね
2バイト文字のファイル名にも対応しているようで
ShellExecute でいけるかやってみます。

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

ファイル実体として出力はいるので
とりあえずフロントエンド?という利用方法で組んでみます。
ありがとう
258デフォルトの名無しさん:2013/05/17(金) 00:28:18.21
>>256じゃないけど、標準出力とかパイプとかせめて検索してほしいなぁ
259デフォルトの名無しさん:2013/05/18(土) 03:19:43.51
XE4&FireMonkeyで、FormのFullScreenがMacだと有効にならないんですが、
Macでフルスクリーンにする方法はありますか?
260デフォルトの名無しさん:2013/05/26(日) 17:10:26.68
setparentのusesって何を指定すれば良いですか?
window.setparentみたいなのもあるみたいですが、やりたいことは親フォームに貼り付けたパネルに子フォームをロードするというものです。
window.setparentを記述したら、usesの中のwinapi.windowsに赤の波線が出て、何だか良く判らなくなっています。
usesに何を指定すれば良いか教えてください。
261デフォルトの名無しさん:2013/05/26(日) 17:12:46.07
Frameでやれ
262デフォルトの名無しさん:2013/05/26(日) 21:47:02.15
他の掲示板に行きます
263デフォルトの名無しさん:2013/05/27(月) 00:27:21.33
裏技で派生先クラスから派生元のprivateメソッドを呼び出す方法ありませぬか?
264デフォルトの名無しさん:2013/05/27(月) 01:22:27.42
1.同一ユニット上に置く
2.クラスヘルパを使う
3.新しいRTTIを使う
ん〜あと何かあるかな
265デフォルトの名無しさん:2013/05/27(月) 17:02:04.11
オーバーライドするだけじゃないの?
266デフォルトの名無しさん:2013/05/28(火) 19:52:06.64
クラス設計やり直し。
267デフォルトの名無しさん:2013/05/28(火) 23:03:18.64
WM_で始まるメッセージとCM_で始まるメッセージって何が違うの?
268デフォルトの名無しさん:2013/05/29(水) 05:09:30.73
Windows のメッセージと
Control のメッセージ。

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

CM_ は、単純なメソッド呼び出しに置き換えることが(多くの場合)可能だけど、
それをわざわざメッセージにすることで、WM_ に対応するメッセージハンドラと
同じ記述に統一することが出来る。
269デフォルトの名無しさん:2013/05/29(水) 12:07:16.17
そうでもない。
270デフォルトの名無しさん:2013/05/29(水) 22:34:27.63
TSplitterが置いてあるウィンドウがリサイズされるとき
変更前と変更後で分割率が同じになるようにするにはどうすれば良いんですか?
271デフォルトの名無しさん:2013/05/30(木) 00:50:25.90
TADO関係のコンポーネントを使って、Microsoft Accessの
データーベース上のクエリーのSQL文の取得か、クエリーの実行って、
できるでしょうか?
272デフォルトの名無しさん:2013/05/30(木) 06:45:51.34
>>270
FormのOnResizeで自前でコントロールのサイズを変更する
273デフォルトの名無しさん:2013/05/31(金) 08:08:59.31
それたぶんうまくいかない
OnResizeはサイズ変更された後に発生するイベントだから
何らかの方法で変更前のサイズを覚えておく必要があるのと、
一度変化した内部コントロールのサイズをまた変更することになるので
適切な手を打たないと猛烈にちらつく事になる
274デフォルトの名無しさん:2013/05/31(金) 18:40:48.60
分割率が同じならいいんだろ? 計算してポンだよ
275デフォルトの名無しさん:2013/05/31(金) 22:23:55.60
ではその計算してポンのコード書いてみれ
276どや:2013/05/31(金) 23:50:53.77
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;
277276:2013/05/31(金) 23:52:09.02
AlignプロパティはclXXXじゃなくてalXXXだった
278デフォルトの名無しさん:2013/06/03(月) 16:30:38.06
それ分割率がちょっとずつずれていくよね
279デフォルトの名無しさん:2013/06/03(月) 21:30:54.18
>>276のコードはちょっと変だと思うけど
OnResizeのタイミングでまったくちらつかないな
まあマシンに依るのかもしれんが
まあ、OnResize発生したらタイマー仕掛けて
一定時間OnResizeが発生しなかったら
画面を更新するっていう方法もあるだろうけど
280デフォルトの名無しさん:2013/06/05(水) 00:00:12.75
>>276
分割率をFormResizeで毎回計算するのはおかしいね
分割率を計算するのは、Splitterを動かして、分割率が変化したときだね
281デフォルトの名無しさん:2013/06/05(水) 10:43:31.72
それだと最初の計算はいつ行われる?
フォーム生成時にもリサイズイベントが起きるから厄介なことになりそう
282デフォルトの名無しさん:2013/06/05(水) 11:55:59.43
そこまでわかってるなら、生成〜リサイズの間、と導き出されるわけだが
283デフォルトの名無しさん:2013/06/05(水) 21:30:26.95
>282
じゃあ具体的にコードとして書くと?
284デフォルトの名無しさん:2013/06/05(水) 22:12:49.89
282 じゃないけど
TForm の Create() の前に、OnReSize()が発生することなんてあり得るの?
ないだろ
285デフォルトの名無しさん:2013/06/07(金) 18:30:49.23
D7でIBXでFireBIrd2.5に接続しています
IBDataSetとIBQueryでFilterを使ってみたところまったく効果がありませんでした
IBTableに変えたところフィルターされました
IBDataSetとIBQueryではFilterは使えないのでしょうか
286デフォルトの名無しさん:2013/06/07(金) 18:36:55.06
>>285
使えない。OnFilterRecordイベントに書かないとダメだったと思うよ。
287デフォルトの名無しさん:2013/06/08(土) 18:58:42.90
>>286
やはり使えませんか
DataSetProviderとClientDataSetを介すと使えるようなのでそれでやってみます
288デフォルトの名無しさん:2013/06/09(日) 14:53:17.13
>>287
>ClientDataSet
ライセンスに気をつけて。
289デフォルトの名無しさん:2013/06/14(金) 12:19:35.60
D7でゼロ除算例外が起きなくなりました
あるプロジェクトで
var
a : Double;
b,c : integer;
begin
 try
   a := b / c ;
 except
 a := 0;
 end;
end;
のようなコードを書いているのですがある時からaが0でなく-NANになるようになってしまいました
テスト用の簡単なプロジェクトを作ったらそっちでは例外が起きて0になっています
考えられる原因はなんでしょうか
プロジェクトのオプションはどちらも同じはずです
コンパイラ指令もいじっていません
290デフォルトの名無しさん:2013/06/14(金) 12:26:09.67
時間ない、だれかフォロー
Set8087( default8087) を
291デフォルトの名無しさん:2013/06/14(金) 12:50:24.68
>>290
計算前に
Set8087CW(Default8087CW);
といれて試してみましたが変わりませんでした
292デフォルトの名無しさん:2013/06/14(金) 13:35:23.88
初期化していないローカル変数はゼロになるとは限らない。
いままで、たまたま動いてた。
293デフォルトの名無しさん:2013/06/14(金) 14:18:19.66
>>292

データの中身は除算前に0であることを確認してます
試しに計算直前に0を代入してみましたがやはり例外は起きませんでした
以前コンパイルした物は同じデータで例外が起きてちゃんと0になるんですよ
だから何かの設定かと思ったんですが
294デフォルトの名無しさん:2013/06/14(金) 14:33:10.66
まずはちゃんとエラーを捕まえて except on e で e.Message を見てみる
ゼロ除算をわざとやるなら cに0を代入してみればいい
295デフォルトの名無しさん:2013/06/14(金) 14:38:40.78
>>294
だからエラーが起きないんです
もちろんcに0を入れても
296デフォルトの名無しさん:2013/06/14(金) 14:44:08.52
たぶん最適化のバグだと思う 最適化を外して再構築してみな
最適化したままデバッグしているとドツボにはまるよ
297デフォルトの名無しさん:2013/06/14(金) 14:59:57.58
a := b / c ; の行で生成される fdivp の命令の次の命令あたりで
ブレークポイントをかけて実行。そのとき
(1) コントロールワードの値にZeroDiv例外マスクがかかっているので、
(2) 例外が発生せず、浮動小数点スタックのトップの値が -NAN になった
という症状が発生しているのならば、Set8087CWで対応できるし、
そこでは停止せずに例外が発生して、どこかへ飛んで、-NAN を
浮動小数点スタックに積んでいるなら、それが原因。
298デフォルトの名無しさん:2013/06/14(金) 15:24:35.48
もどった。
D7 だから、昔からある機能で解決しなきゃいけないな。Math ユニットってあったけ?

try に入る前のところに

Set8087($1332);

を入れて。

-NAN になっているのだから演算は正しく行われて、Zero-div 例外がマスクされているだけ。
それを元に戻せばよし
299デフォルトの名無しさん:2013/06/14(金) 15:48:34.76
LoadLibrary 呼ぶと8087CWが変化することがあるので
前後にsave/restoreが必要という話か?
300デフォルトの名無しさん:2013/06/14(金) 16:04:22.91
比較的最近のだと SafeLoadLibrary ってのがあって CW の再設定をしてもらえる。
D7 にあるかどうかは忘れた。

Default8087 を設定しても直らなかった。ってことからすると、MSVC-DLL による 80887 再初期化とは
別の話で、OpenGL とか D3D あたりのユニットを最近追加したりしてないかな?
301デフォルトの名無しさん:2013/06/14(金) 16:17:42.42
色々テストしてみました
default8087cwをtryの外に出したら例外に飛ぶようになりました
ただまったく別のフォームに例外を起こすコードを書いてもやはりdefault8087cwを入れないと
例外にならなかったのでプロジェクトのあちこちにあるこの処理を書き直すことを考えると頭が痛いです
302デフォルトの名無しさん:2013/06/14(金) 16:26:30.48
その場所だけでなくプロジェクトに新規追加したフォームでも起きるんで
プロジェクトオプションで何か設定があるのかもと思ったんですが
まったく同じコードを新規プロジェクトで実行すると例外になるんで
303デフォルトの名無しさん:2013/06/14(金) 16:27:20.73
つ バファリン
304デフォルトの名無しさん:2013/06/14(金) 19:33:14.98
原因判りました

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

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

同じexeファイルをコピーして試したところどうやらwinxpでは例外になるのにwin7ではだめなようです
頭痛いどころじゃなくなった
305デフォルトの名無しさん:2013/06/14(金) 21:01:54.33
ちょっと教えてください。

Win7で開発しています。

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

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

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

それと、XPで何らかの方法で改行できないでしょうか?
やっぱりCustomDrawしか方法はないですか?
306デフォルトの名無しさん:2013/06/16(日) 09:28:06.51
以前mp3の実装の仕方を教えてもらった者です。

ttp://delphi.about.com/od/adptips2006/qt/mediaplayer_vol.htm

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

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

基礎的な質問ですみません。
307デフォルトの名無しさん:2013/06/16(日) 17:12:07.25
再現手順がわりと丁寧に書かれているが?
手順のことを訊いているのではないのか?
308デフォルトの名無しさん:2013/06/16(日) 20:38:55.88
>>307
すいません。
一部のコンポーネントのnameを変更したら、
後はコピペで行けるのでしょうか?

赤線だらけで、何度やっても上手く行きません。
もう少しやってみます。
309デフォルトの名無しさん:2013/06/16(日) 21:10:03.01
片っ端にコピペをしたら無事コンパイルできました。
お騒がせしました。
310 ◆XcB18Bks.Y :2013/06/16(日) 22:26:33.28
>>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;
311デフォルトの名無しさん:2013/06/17(月) 21:03:42.71
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を指定してからグリッドの項目に入力などをやっています。
312デフォルトの名無しさん:2013/06/17(月) 21:38:56.98
何が聞きたいのかいまいちわからないんだけど、GetItemAtとかGetNearestItemとかが役に立たないかな?
313デフォルトの名無しさん:2013/06/18(火) 00:33:54.71
>>312
空の項目に文字を入れる場合の現状
>311 でX Yを決めている。

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

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

つまりマウスで表のマス目を直接1回で場所指定したいわけです。
今は横縦指定してからプルダウンメニューやボタン操作で入れる処理にしています。
314デフォルトの名無しさん:2013/06/18(火) 00:37:02.48
いやいや、日本語でおk
315デフォルトの名無しさん:2013/06/18(火) 02:40:45.85
ええと、言ってる内容がイマイチはっきりしないけど
Listview内の任意の場所をクリックして、その位置にある
Item(行)とSubItemの.Index(列)を知りたいってことですよね。

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

でも、各カラムの幅は分かってるんだから、マウス位置のXから
すぐに求められるでしょう?
316デフォルトの名無しさん:2013/06/18(火) 12:44:31.18
これでどうよ

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;
317デフォルトの名無しさん:2013/06/18(火) 22:06:14.11
めんどくさいことしなくても、
ListView_SubItemHitTest でOK
318デフォルトの名無しさん:2013/06/19(水) 14:57:20.62
D7でIBXのTIBDataSetでApplyUpdatesを実行してもUpdatesPendingがtrueのままなのですが
何をしたらFalseに戻るのでしょうか
戻らないとしたら更新の有無は何で判断したらいいでしょうか
データベースへの適用はCommitRetainingで行っています
319デフォルトの名無しさん:2013/06/19(水) 16:28:23.27
TIBCustomDataSet.ApplyUpdatesをステップ実行してみればわかるんじゃないかな。
ローカル変数のUpdateActionがuaSkipだとUpdatePendingがFalseにもどらないみたいだけど、
そうなる理由はOnUpdateErrorイベントハンドラに指定したコードによるみたい。
320デフォルトの名無しさん:2013/06/19(水) 17:00:57.64
>>319
ありがとうございます
アフタースクロールイベントでフィールドが変更されてしまっているのが原因でした
アフタースクロールで日付を分解してEditに入れてたのですが
EditのOnchangeでフィールドに書き込んでいたというおまぬけなことをやっていました
321デフォルトの名無しさん:2013/06/19(水) 18:13:38.22
>>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;
322デフォルトの名無しさん:2013/06/20(木) 18:59:38.71
D7でDBGridでtabキーを押すと次のレコードに移動するにはどうしたらいいでしょうか
出来ればコードを書かずに済む方法が知りたいです
323デフォルトの名無しさん:2013/06/20(木) 19:25:49.46
>>322
コードは書かなきゃ無理だろ。DBGridのOnKeyPressイベントに
if Key = #9 then DataSet.Nextってやればいいんじゃね?
324デフォルトの名無しさん:2013/06/20(木) 19:59:27.78
>>323
ありがとうございます
いや、手元にあるソースでコードにそれらしきものがないのに次のレコードに移動するのがあるんで
やり方が知りたかったんですよ
それらしいイベント記述もプロパティの設定もないもので
何か見落としてるんだと思うんだけど

とりあえずそのやり方でやってみます
325デフォルトの名無しさん:2013/06/20(木) 22:03:47.51
TDBGrid.Options
dgTabs 〔Tab〕キーおよび〔Shift〕+〔Tab〕キーを使って,グリッド内を移動できる
326デフォルトの名無しさん:2013/06/21(金) 02:39:39.18
>>321さん
返事が遅れましてすみません、ありがとうございます。
ListViewで col row が取得できるようになりました。
327デフォルトの名無しさん:2013/06/21(金) 10:46:12.39
322です
>>325
dgtabs=trueです

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

DBGridのReadOnlyを切り替えているところをコメントアウトしたらタブで行移動しなくなったので
これが悪さしてるらしいが原理がわからん
当然編集中はReadOnly=Falseなのだがtabを押すとcolexitもColEnterも発生せずいきなりレコードが移動する
もしかしたら意図的にやってるのではなくDelphiのバグなのか?
328デフォルトの名無しさん:2013/06/22(土) 18:39:47.00
rtl170.bplってどこにおちてるんでしょうか
329デフォルトの名無しさん:2013/06/24(月) 09:26:02.94
System32
330デフォルトの名無しさん:2013/06/26(水) 07:54:55.43
>>237
かなり前の話ですが、
if CompareText(ExtractFileExt(FileListBox1.FileName),'.mp3')<>0 then exit;
での<>0の0は何を指しているのでしょう?

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

すみません。教えていただけないでしょうか。
331デフォルトの名無しさん:2013/06/26(水) 08:50:24.43
CompareTextの引数は文字列2つですが、この関数の戻り値は数値です。
ttp://docwiki.embarcadero.com/Libraries/XE4/ja/System.SysUtils.CompareText
332デフォルトの名無しさん:2013/06/26(水) 10:56:38.04
判りました。ありがとうございます。

勉強が足りないというレベルじゃないですね。
なんか根本的な物が分かっていない気がします。
333 ◆XcB18Bks.Y :2013/06/26(水) 15:58:29.31
大丈夫ですよ。
文字列をパラメーターに取る関数の戻り値は別に文字列型ではなくてもいい、それだけです。
334デフォルトの名無しさん:2013/07/10(水) NY:AN:NY.AN
おはようございます
いつもお世話になっております
TMainMenuの子にショートカットキーCtrl + +を設定したいのですがエラーがでて設定ができません
設定できる方法があればご教授願いたいです
ちなみにCtrl + Num +ではないです
335デフォルトの名無しさん:2013/07/10(水) NY:AN:NY.AN
[ALT}+[F12]でdfmをテキスト表示してShortCutプロパティに直接16427を指定するんじゃ駄目?
336デフォルトの名無しさん:2013/07/10(水) NY:AN:NY.AN
>>355
レスありがとうございます
試してみましたができませんでした・・・
他のショートカットに使われる数字だと指定できるのですが16427だと
ショートカットの欄には何も表示されず空白のままで、実際にショート
カットキーを押してみても反応がありませんでした
ちなみにバージョンはDelphi6です
337デフォルトの名無しさん:2013/07/10(水) NY:AN:NY.AN
>Ctrl + Num +ではない
って言ってももう一つの方なら「Ctrl+;」ではないのか?
或いは「Shift+Ctrl+;」

テンキーの方なら↓
Test1.ShortCut:=ShortCut($6B, [ssCtrl]);
Test1.Caption:=Test1.Caption+#9+'Ctrl + +'+#0;
338 ◆XcB18Bks.Y :2013/07/10(水) NY:AN:NY.AN
テンキーでない方の[+]って日本語キーボードとUSキーボードでは違うキーでしたよね。
どちらでも動くように作らないといけないかと思います。

ちなみに手元のTurbo Delphiでは
[;](セミコロン)キーなら単純に"Ctrl+;"で行けました。
339デフォルトの名無しさん:2013/07/10(水) NY:AN:NY.AN
現在のキーボードで、文字に対応するキーコードを調べるにはVkKeyScanを使う。
code := VkKeyScan('+'); // code: SmallInt
key_code := LoByte(code); // key_code: Word
shift := [ssCtrl]; // shift: TShiftState
if (HiByte(code) and 1) <> 0 then Include(shift, ssShift);
menu_item..ShortCut := ShortCut(key_code, shift);

これでも設定できなかったら、OnShortcutとかOnKeyPressイベントで
キーを受け取って自前で処理することになるかな。
(メニューやHintの文字列も自分で追加)
340デフォルトの名無しさん:2013/07/10(水) NY:AN:NY.AN
皆様沢山のレスありがとうございます
こんなにたくさんのレスをいただけるとは驚きました・・・
>>337,>>338さんのおっしゃる通りCtrl+;で実装できました
他のソフトだとCtrl++という表示が出ているという固定観念にとらわれてCtrl++を
表示させようと必死でした・・・
Ctrl++とCtrl+;の表示の違いについては気にしないのでCtrl+;で実装しようと思います
>>339さんの方法は今後もし同じようなことがあれば参考にさせていただきます
レスをして下さった皆様ありがとうございました
341デフォルトの名無しさん:2013/07/26(金) NY:AN:NY.AN
D7でプロジェクト全体で語句を一括置換したい場合どうすればいいでしょうか
IDEの置換だとunit単位でしかできないですよね
342デフォルトの名無しさん:2013/07/29(月) NY:AN:NY.AN
秀丸なりなんなり外部エディタで
343デフォルトの名無しさん:2013/07/29(月) NY:AN:NY.AN
delphiのかなり基本についての質問です。
使ってるバージョンは delphi 6 Personal です。
mp3プレイヤーを作りたいと頑張っていますが、”常にFormの状態を取得する”
というイベントがあるのか無いのか、またあるならばどのイベントかが分かりません。
どうすればできるでしょうか?
344デフォルトの名無しさん:2013/07/29(月) NY:AN:NY.AN
『常にFormの状態を取得する』ってなによ?自分用語じゃなくて他人に伝わるようにね。
345デフォルトの名無しさん:2013/07/29(月) NY:AN:NY.AN
すいませんでした。
自分じゃこれ以上の表現は難しいのでこの質問はやめにします。
スレ汚しすいませんでした。
346デフォルトの名無しさん:2013/07/29(月) NY:AN:NY.AN
TApplicationEvents.OnIdle
347デフォルトの名無しさん:2013/07/29(月) NY:AN:NY.AN
エスパー現る
348デフォルトの名無しさん:2013/07/30(火) NY:AN:NY.AN
>>346
ありがとうございます。
349デフォルトの名無しさん:2013/07/30(火) NY:AN:NY.AN
イベントドリブンなDELPHIでもメッセージをフックして独自な処理をすることもできる
なんのイベント探してるのか知らないけどOSが渡してくるメッセージのどれかだろうから
フォームの状態を常に監視的なことはもちろんできる
350デフォルトの名無しさん:2013/08/01(木) NY:AN:NY.AN
この程度でエスパー扱いか
顧客様はもっと意味がわからん要求してくるけどな
351デフォルトの名無しさん:2013/08/01(木) NY:AN:NY.AN
そのレスに何の意味があるの?
352デフォルトの名無しさん:2013/08/04(日) NY:AN:NY.AN
お前が釣れたんじゃねぇの?
353デフォルトの名無しさん:2013/08/04(日) NY:AN:NY.AN
そのレスに何の意味があるの?
354デフォルトの名無しさん:2013/08/06(火) NY:AN:NY.AN
 Delphi7 のユーザーなのですが、最新版の Delphi の TRichEdit は 7 に比べ格段に進化しているのでしょうか?
 また TEditor 以外の 有力なテキストエディタコンポはありますか?
 RichEdit も有力でかまいませんのでよいコンポがあったら紹介して下さい。
355訂正:2013/08/06(火) NY:AN:NY.AN
> RichEdit も有力でかまいませんのでよいコンポがあったら紹介して下さい。
RichEdit も有料でかまいませんのでよいコンポがあったら紹介して下さい。
356デフォルトの名無しさん:2013/08/07(水) NY:AN:NY.AN
TMaskEditで日付を入力しているのですが
一度入力してしまうと消してブランクにしたいと思っても入力値が不正ですとなってしまって抜けられなくなります
この場合入力を取り消す方法はないのでしょうか
357デフォルトの名無しさん:2013/08/07(水) NY:AN:NY.AN
>>354
超テキトーにお答えします。

>最新版の Delphi の TRichEdit は 7 に比べ格段に進化しているのでしょうか?
たぶん特に進化はしてないかと。トライアル版を試すとかヘルプを見るとか。
http://docwiki.embarcadero.com/Libraries/XE4/ja/Vcl.ComCtrls.TRichEdit

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

>RichEdit も有料でかまいませんのでよいコンポがあったら紹介して下さい。
最近広告してるTRichEdit代替品。良いかまったく知らんけど。http://www.trichview.com/
358デフォルトの名無しさん:2013/08/07(水) NY:AN:NY.AN
>>356
「入力を取り消す」が、有無を言わさず元に戻す、という意味ならこんな感じで。
type
TMaskEdit = class(Mask.TMaskEdit)
protected
procedure ValidateError; override;
end;

type
TForm1 = class(TForm)
  …

implementation

procedure TMaskEdit.ValidateError;
begin
Self.Reset;
end;


こんなのもあった。

"必須入力自動キャンセル MaskEdit"
http://delfusa.main.jp/delfusafloor/archive/www.nifty.ne.jp_forum_fdelphi/samples/01118.html
359デフォルトの名無しさん:2013/08/12(月) NY:AN:NY.AN
>>357
 亀だけどサンクス。
 TEditor を使っている TeraPad の作者がいまだに Delphi4 で開発を継続しているのにちょっとびっくりした。
 OS は Windows 7 らしい。私の OS も Windows 7(64bit)なんだけど、Delphi 5 の動きは少し怪しい。32
ビット版の Windows 7 だったらいいのかな?
360デフォルトの名無しさん:2013/08/12(月) NY:AN:NY.AN
>>359
Delphi5 on Windows7 については知らぬ。

それより、TRichEditなら JEDI JVCL - TJvRichEditに言及するのを忘れてた。
VCL標準のは
>TRichEdit はリッチ エディット 2.0 をサポートします。
とのことだが、何をどうサポートしてるのか不明。大昔の機能しかないように見える。

それに対し、TJvRichEditはRichEdit(2.0 & 3.0)の機能をほぼ網羅してる。
背景色・リンク(イベント)・複数回Undo・ズーム・アンダーラインの種類と色、などなど。
http://wiki.delphi-jedi.org/wiki/JVCL_Help:TJvRichEdit
http://wiki.delphi-jedi.org/wiki/Category:JvRichEdit.pas_Classes
http://wiki.delphi-jedi.org/wiki/JVCL_Help:TJvCustomRichEdit
361デフォルトの名無しさん:2013/08/25(日) NY:AN:NY.AN
Delphi XE3とか既にインストールされてるのですが、今から、古いバージョンの
Delphi2009とかをインストールしても問題ないでしょうか??
ファイルの関連付けは変わりそうですが。
362デフォルトの名無しさん:2013/08/25(日) NY:AN:NY.AN
ご想像の通りあまりお勧めできないかなぁ。大丈夫かもしれないけど。
あとからXE3を修復セットアップかけてみるとか…?
363デフォルトの名無しさん:2013/08/25(日) NY:AN:NY.AN
やっぱ、おすすめできないですよね。
いざとなったら、仮想マシンの方で頑張ってみます。
364デフォルトの名無しさん:2013/08/25(日) NY:AN:NY.AN
問題になりそうなのはヘルプ、関連づけ、同梱されてるサードパーティ製品くらいかな。
でも動いてる環境に影響がありそうなことはしたくはないよね。
365デフォルトの名無しさん:2013/08/25(日) NY:AN:NY.AN
環境変数もあるか。
366デフォルトの名無しさん:2013/08/27(火) NY:AN:NY.AN
エンバカが Delphi 買ったのって、エンバカのツールが Delphi で書かれていたからなんだって。
すごいね
367デフォルトの名無しさん:2013/08/27(火) NY:AN:NY.AN
         _人人人人人人人人人人人人人人人_
        >   そうなんだ、すごいね!      <
       ´ ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
            __、、=--、、         __
           /    ・ ゙!       /・   `ヽ
           | ・   __,ノ       (_    ・ |
           ヽ、 (三,、,         _)    /
            /ー-=-i''       (____,,,.ノ
            |__,,/          |__ゝ
             〉  )          (  )
368デフォルトの名無しさん:2013/08/29(木) NY:AN:NY.AN
初めまして
過去ログみてsystem32を見てみたのですがrtl170.bplが見当たりません
どこにありますか…?
369デフォルトの名無しさん:2013/08/29(木) NY:AN:NY.AN
>>368
いや、あんた使ってるDelphiのバージョンとか 、
何をしたらどんなエラーが出るとか書かないとエスパー降臨待ちになるで
370デフォルトの名無しさん:2013/08/29(木) NY:AN:NY.AN
>>368
すいません。
Delphi絡みというよりも、やっているPCゲームでrtl170.bplを要求されてしまって
ぐぐってもなかなかでてこないときに>>328に辿り着いたので安易に質問してしまいました
そもそもrtl170.bplというファイル自体がよくわかりません…
371デフォルトの名無しさん:2013/08/29(木) NY:AN:NY.AN
ゲームメーカーに問い合わせるしかないんじゃね?
372デフォルトの名無しさん:2013/08/29(木) NY:AN:NY.AN
>>370
作者に連絡してリリースビルドかつランタイム同梱形式でコンパイルしてもらうか、
配布用ランタイムパッケージつくってもらえ
373デフォルトの名無しさん:2013/09/04(水) 10:38:23.26
整数とかの変数名のあたまにマイナス符号つけるやり方って昔からあった?
374デフォルトの名無しさん:2013/09/04(水) 11:58:48.55
ごめん、君の言ってることがわからない > 373

AnotherIntVariable := - IntVariable;

ってこと?
375デフォルトの名無しさん:2013/09/11(水) 11:16:41.24
TPopupMenuを上に展開するのってどうやるのでしょうか
376デフォルトの名無しさん:2013/09/11(水) 13:11:42.47
>>375
カーソルの上の方にということならそのように座標をを指定するだけ。
377デフォルトの名無しさん:2013/09/11(水) 13:35:00.78
>>376
popupメソッドだと左上が基点になんですが、
デスクトップで右クリックしたときに出るメニューみたいに
左下や右下を基点にする方法はありますか?
378デフォルトの名無しさん:2013/09/11(水) 13:49:17.25
PopupMenu1.Popup(0, 0);が左上だから
PopupMenu1.Popup(0, 768);で左下
PopupMenu1.Popup(1024, 768);で右下にならない?
379デフォルトの名無しさん:2013/09/11(水) 23:03:04.06
> デスクトップで右クリックしたときに出るメニューみたいに
画面下にはみ出しそうだと勝手に上向きに調整されるだけ
逆に画面上につっかえるような指定すると、どう頑張っても下向きにされるはず
380デフォルトの名無しさん:2013/09/12(木) 01:05:31.45
>>377-379
強制的に、またはデフォルトで左下や右下を基点にしたい、って意味なのかな?
どうしてそんな必要があるのか分からんけど。
381375:2013/09/13(金) 18:17:19.80
フォームの下のほうに配置したボタンでポップメニューを出すようにしてるんですが、
通常はボタンの左下を基点に表示するようにしてるけど、
メニューが多くなって上に展開されたときにボタンが隠れてしまうので、
はじめからボタンの上方向に展開できればと思ったのです。
382デフォルトの名無しさん:2013/09/13(金) 19:43:33.26
DephiにC++のコピーコンストラクタみたいな物は無いのでしょうか?
もしくは代わりになりそうな機能
383デフォルトの名無しさん:2013/09/13(金) 23:18:35.26
ない
自分でoverloadしたコンストラクタを実装か、Assignを実装して内容をコピる

かなぁ。あとは高度なrecord型を使う
384デフォルトの名無しさん:2013/09/15(日) 23:26:29.21
iPhoneをターゲットとした開発を考えています。
xcode(昔のVC6.0のようなRADとはほど遠い開発環境)に苦痛を感じています。
iPhone向けのDelphiはいわゆるRADなのでしょうか?

Windows版はDelphi6Personalの時に使っていたので
同じように開発できるならpro版を買おうと思っています。
385デフォルトの名無しさん:2013/09/15(日) 23:46:20.96
>>384
RADだよ。制限も多いけど。
386デフォルトの名無しさん:2013/09/16(月) 02:22:34.88
>>384
解説本が出てるから見てみたら。
http://www.embarcadero.com/jp/products/delphi/ios-development
387デフォルトの名無しさん:2013/09/17(火) 09:03:42.93
iOSはPro版だけじゃ駄目だから気をつけて
388デフォルトの名無しさん:2013/09/24(火) 21:59:38.74
iOS/Android開発するには最低おいくら掛かりますか?
個人的に触ってみるつもりです。(トライアル版は今落としてます)
XE5 Starter版でも「XE5 Starter ESD アップグレード」なるものを当てれば
iOS/Android開発できる??
とんちんかんな質問ですんません
389デフォルトの名無しさん:2013/09/24(火) 23:11:50.03
iOS/Android開発するにはDelphi Pro+Mobile-Addonが最低条件。DEKOさんとこの

ttp://ht-deko.minim.ne.jp/ft1309.html#130912

で『2009 以前のバージョンまたは新規購入の方: モバイル開発環境あり』のところを参照。
ご新規さんだと157,700円が最安値かな(全然安くねーとは思うが)。
390デフォルトの名無しさん:2013/09/24(火) 23:16:31.95
あーあとiOSの場合はAppleにも冥加金を払う必要があるんで。iOSデベロッパプログラム、年8,400円だとさ。
ちなみにMac(OSX)とは別立てね。
391デフォルトの名無しさん:2013/09/24(火) 23:26:36.74
>>388
Starterではまったくダメです。Mobile Add-On Packの要件外なので。
>「XE5 Starter ESD アップグレード」なるものを当てれば
いや、それが普通のStarter版ですよ。
(他の有償/無償の開発ツールユーザーが対象。インストール確認は特に行わないはず。だから…。)

しかし、、、目が飛び出そうな価格に驚いたでしょ(笑)
392デフォルトの名無しさん:2013/09/25(水) 08:26:14.01
アイフォン用のアプリを登録するだけでも金がかかる、と アホ臭い
393デフォルトの名無しさん:2013/09/25(水) 08:55:33.28
いつの時代から来たんだ…w
394デフォルトの名無しさん:2013/09/25(水) 23:18:19.52
>>389-391
うーむ高いですねぇ、ひとまずiOS/Android開発は諦めます。
Delphi XE5 Pro単体でも10万円ってのも痛いっす(自分は新規購入です)
Starterは将来モバイル開発したくなったとき、ゴミと化してしまうので買うに買えませんしね・・・
ご親切に回答ありがとうございました!
395デフォルトの名無しさん:2013/09/25(水) 23:27:47.30
少なくともまだ買わないのが正解。
買う場合はXE7あたりになってもっと安定してから。
396デフォルトの名無しさん:2013/09/27(金) 20:32:06.35
Delphi の exe って無駄に大きいけど、小さくするのは難しいんですか。
ネット検索すると小さくする方法がいくつかあったけど、なんか面倒。

普通にコンパイルして小さくなるようなバージョンを開発してほしい。
397デフォルトの名無しさん:2013/09/27(金) 23:09:04.54
基本的には無理
EXE自体にフォームなどのリソースを全部リンクする構造なんで

VBみたいにライブラリをランタイムとして提供すればある程度は小さくなるけど
トータルで見ればむしろデカくなる上配布が面倒になる

EXEパッカーという手もあるがセキュリティソフトの誤爆率が大幅上昇するのでお勧めしない
398デフォルトの名無しさん:2013/09/28(土) 03:20:24.42
そうですね。
っていうか、今時サイズ気にします?
本当に動きに差異が無いなら、小さい方が良いのは理解します。
でも、それを検証するのも面倒だし、そんなこと気にしている暇があるなら、
もっと、他の事に時間を費やした方が宜しいかと。。。

まぁ、XE4で、空のexe作った時のサイズには、流石に驚愕しましたが。
Debugだからだったのね。Releaseにしたら、気にならないよ。
399デフォルトの名無しさん:2013/09/28(土) 08:27:13.11
Delphi XE5 で人生初 Android アプリを作ったら 30M 超えてて泣いた
400デフォルトの名無しさん:2013/09/28(土) 09:13:16.04
30Mなんて今どきジュースも買えんだろ
401デフォルトの名無しさん:2013/09/28(土) 11:43:30.30
Androidアプリでも30MBはデカすぎ
402デフォルトの名無しさん:2013/09/28(土) 12:37:49.15
昔と違って HDD 容量も大きくなったけど
やっぱり1本で 30 M超えると「ちょっと大きいよね」と思ってしまう。
業務用アプリだと1だけでは無いので余計困る。
403デフォルトの名無しさん:2013/09/28(土) 19:34:27.02
MS: TMemoryStream;
MS.SaveToFile(FileName);
これって内部的にどうやってるの?
del6perでソース無いので教えてください。
404デフォルトの名無しさん:2013/09/28(土) 20:06:19.23
>>403
>del6perでソース無いので教えてください。
↓ほとんど同じですからどうぞ。

■OpenCLX
http://sourceforge.jp/projects/sfnet_openclx/
OpenCLX-0.1ALPHA.tar.gz
\OpenCLX-0.1ALPHA.tar\OpenCLX-0.1ALPHA\rtl\common\Classes.pas

■FreeCLX
http://sourceforge.jp/projects/sfnet_freeclx/
freeclx-k1-2.2.4-4.tar.gz
\freeclx-k1-2.2.4-4.tar\freeclx\rtl\Classes.pas
405403:2013/09/28(土) 22:04:52.38
d、DLしました。
色々研究できそうです。
406デフォルトの名無しさん:2013/09/30(月) 11:22:58.53
android用のリリースビルドで30M?
なら確かに厳しい、、、
407デフォルトの名無しさん:2013/10/05(土) 18:39:19.34
Debugビルドでないの?
Winの場合はDebugとReleaseで全然サイズ違うよ
408デフォルトの名無しさん:2013/10/06(日) 16:52:58.64
デュアルモニタ環境で開発していて気付いたのですが
TPopupMenu.Popup(X, Y)でホップアップメニューを表示させるとき、
モニタ1(プライマリ)上では正常に表示されるのに
モニタ2上で表示させようとすると必ずモニタ1に表示されてしまいます。

何か設定が足りないのでしょうか?
どなたか何か情報お持ちでしたら教えてください。
409デフォルトの名無しさん:2013/10/06(日) 17:11:48.11
バージョンくらい書けよ
410デフォルトの名無しさん:2013/10/06(日) 17:33:37.19
スパンモードってことだよね
PopupMenu1.Popup(2000,100);で普通にセカンドモニタに出てくるけど
(X,Y)はどうやって計算してる?
TScreen.DesktopTop や TScreen.DesktopWidth とか
function DeskTop:TRect;
begin
//タスクバーなどを除いたデスクトップのワークエリアを取得
SystemParametersInfo(SPI_GETWORKAREA, 0, @Result, 0);
end;
とかの組み合わせを間違ってないかな?
411408:2013/10/06(日) 19:46:06.91
>>409-410 返信ありがとうございます。

バージョンはXE5で、FireMonkeyデスクトップアプリケーションで作ってます。

> (X,Y)はどうやって計算してる?
Screen.MousePosでX,Yもってきてます。
(数値の直入力も試してます)

私のモニタの配置が
[モニタ2][モニタ1]
というようになってまして、
配置を
[モニタ1][モニタ2]
としたところ正常に表示できました。

うーん・・・
412デフォルトの名無しさん:2013/10/06(日) 20:58:55.38
ついでにOSも…
413408:2013/10/06(日) 23:27:28.67
OSはWindows 7 Professional 64bitっす
414デフォルトの名無しさん:2013/10/07(月) 14:22:44.65
ひょっとしてモニタ2の座標はマイナスかな
415408:2013/10/07(月) 21:16:31.52
>>414 そです、マイナスです
416デフォルトの名無しさん:2013/10/08(火) 01:04:16.67
そういうのVCLならライブラリの中に潜っていって調べるのが当たり前だったけど、
Firemonkeyの中を見たらまるっきり構成が変わってて知らない土地に来たみたいな感覚だな。
マルチプラットフォームだしなかなか手が出しにくいな。
417デフォルトの名無しさん:2013/10/09(水) 09:53:35.37
パーティションツールとかによくある、
サイズを拡縮できるバーみたいなのってどうやって作るの?
418デフォルトの名無しさん:2013/10/09(水) 10:05:49.74
>>417
よくあるじゃ分からない。
本当にやりたいなら、詳しい説明画像とか作って示す手間をかけてくれ。
419デフォルトの名無しさん:2013/10/09(水) 10:21:58.27
>>417
標準コントロールじゃないので自分で作れ
コントロールの縁付近でマウスを押されたら
カーソル移動移動に合わせてコントロール伸縮するように
作ればいいんじゃないかな
420デフォルトの名無しさん:2013/10/09(水) 10:43:32.24
SplitterとPanelを並べれば似たような事が出来るかも?
421デフォルトの名無しさん:2013/10/09(水) 11:50:18.23
標準にはないのね。ありがd
422デフォルトの名無しさん:2013/10/09(水) 11:54:49.30
しょーがないんだけど、一般的な業務アプリで使わなさそうなGUIは
自分で何とかしないと駄目なんだよね
俺は今ビデオ編集みたいなタイムラインが必要で困ってる
423デフォルトの名無しさん:2013/10/09(水) 12:02:09.60
そうそう、そんなイメージ。タイムライン
やっぱpanelとsplitterかな。
他にいいアイデアない?くだすれ思考で。
424デフォルトの名無しさん:2013/10/09(水) 12:19:20.87
さっさとつくって公開してくれや。
425デフォルトの名無しさん:2013/10/09(水) 12:20:29.27
描画とクリックだけでしょ。作ったほうが簡単
426デフォルトの名無しさん:2013/10/09(水) 12:55:28.08
1
OnMouseDown で座標を記憶し OnMouseUp で座標を引き算してコントロールの位置や大きさを整える。

2
必要に応じてカーソルも変える。

3
ちょっと贅沢したければOnMouseUp での整形を OnMouseMove でやる。

TSplitter は扱いづらいので自作がお勧め。
427 ◆rW3tmvmDLc :2013/10/09(水) 16:46:41.76
>>425
うちもそう思いますが描画とマウス操作だけなら自分でコンポを書くほうが楽だと思います。

unit unko;

interface

uses
 SysUtils, Classes, Controls, Graphics;

type
 TUnko = class(TGraphicControl)
 private
  FDragging: boolean;
 protected
  procedure Paint; override;
  procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer); override;
  procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer); override;
 public
  constructor Create(AOwner: TComponent); override;
 end;

implementation

constructor TUnko.Create(AOwner: TComponent);
begin
 inherited; //
 Width := 128; Height := 128;
end;

(つづく)
428 ◆rW3tmvmDLc :2013/10/09(水) 16:49:38.52
>>427
文章がおかしかった、ごめんなさい。

おそらく何から手を付けていいかわからないと思いますので
クソみたいなサンプルを作ってみました。(以下、>>427の続き)

procedure TUnko.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); // マウスボタンが押された時に呼び出される。
begin
 if Button = mbLeft then
 begin
  FDragging := True; // 「左ボタンでドラッグしてます」
  Invalidate; // Windowsに「適当なタイミングで再描画してね!」とリクエストする
 end;
 inherited;
end;

procedure TUnko.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); // マウスボタンが離された時に呼び出される。
begin
 if Button = mbLeft then
 begin
  FDragging := False; // 「ドラッグはやめました」
  Invalidate;
 end;
 inherited;
end;

(続く)
429 ◆rW3tmvmDLc :2013/10/09(水) 16:52:25.76
>>428の続き)

procedure TUnko.Paint; // ここで描画する
begin
 if FDragging then // 「ドラッグ中?」
 begin
  Canvas.Pen.Color := clRed;
  Canvas.Brush.Color := clYellow;
  Canvas.Rectangle(ClientRect);
  Canvas.Font.Color := clRed;
  Canvas.TextOut(2, 2, 'ぶりっ!');
 end
 else
 begin
  Canvas.Pen.Color := clYellow;
  Canvas.Brush.Color := clGray;
  Canvas.Rectangle(ClientRect);
  Canvas.Font.Color := clYellow;
  Canvas.TextOut(2, 2, 'うんこ');
 end;
end;

end.

(続く)
430 ◆rW3tmvmDLc :2013/10/09(水) 16:57:13.87
>>429の続き)

呼び出しサンプル…といっても生成するだけですが

uses (中略), unko;

type
 TForm1 = class(TForm)
 private
  FUnko: TUnko;
 public
  constructor Create(AOwner: TComponent); override;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

constructor TForm1.Create(AOwner: TComponent);
begin
 inherited;
 FUnko := TUnko.Create(Self);
 FUnko.Parent := Self;
end;

>>427-429のうちコードのところだけをコピペ、
見やすくするために全角空白にしているところを半角空白かタブに置換して、
unko.pasで保存すれば使えるはず。
431デフォルトの名無しさん:2013/10/09(水) 17:15:24.33
たいしたもんだ
家に来て妹をファックしていいぞ
432デフォルトの名無しさん:2013/10/09(水) 17:33:09.82
高見盛似のな
433デフォルトの名無しさん:2013/10/09(水) 17:54:52.62
ドラッグ中のESCキーとか、Alt+TABとか、
ウィルスバスター起動してフォーカス持ってかれたとか
この辺どうなの?
434デフォルトの名無しさん:2013/10/10(木) 05:21:34.02
XE5で作ったAndroidアプリがデカすぎて、
実機での起動時のロード時間がえらいかかるらしいってほんまでっか?
435デフォルトの名無しさん:2013/10/10(木) 06:10:39.26
デバッグビルドはね
436デフォルトの名無しさん:2013/10/10(木) 07:01:24.90
厳密にはガセ
ADB / USB ケーブルによるファイル転送と APK ファイルの展開/デジタル署名の検証に
時間がかかるだけで、いったんアプリを転送して展開してしまえばネーティブコード(笑)なので
デバッグビルドでもリリースビルドでも差はない。

まぁデバッグ時には毎回(コードを変更していなくても)アンインストール、インストール、APK 署名検証、APK から
ファイルの展開/抽出をするので、おそいといえば遅い。
437デフォルトの名無しさん:2013/10/10(木) 07:25:39.18
なる
438デフォルトの名無しさん:2013/10/10(木) 15:05:07.64
なる
439デフォルトの名無しさん:2013/10/11(金) 13:57:17.85
with文の式を指す予約語とかある?selfみたいな
440デフォルトの名無しさん:2013/10/11(金) 17:00:50.84
式じゃなくてオブジェクトですね。
ないんです、すみません。
441デフォルトの名無しさん:2013/10/11(金) 19:35:39.45
やっぱ欲しいよね、アレ
with TStringList.Create do とかした時に Strings 引数で他に飛ばす時とか
でもないんだよね
しかも今後は with 文自体が非推奨になっていくみたいだし……
442デフォルトの名無しさん:2013/10/14(月) 03:33:41.73
Withはミスりやすいから仕方ない。
完全に被らないようにするか、Withしてない方にSelfだの付ければ良い
443デフォルトの名無しさん:2013/10/15(火) 12:27:08.34
エディタの進化でwithはいらん子だわな
444 ◆rW3tmvmDLc :2013/10/17(木) 17:26:29.50
うちは逆にwithを使うようになってます。ただし

・使わないとえらい長たらしくてわかりにくい場合
・ピンポイントでのみ使う(長いbegin〜endブロックでは使わない)
・パラメーターが1つ(つまり with Untara, Kantara do などとはしない)

のすべてを満たす場合だけです。たとえば

if opAruFlag in MainData.Untara.Kantara.Options then
 MainData.Untara.Kantara.Options := MainData.Untara.Kantara.Options - [opAruFlag]
else
 MainData.Untara.Kantara.Options := MainData.Untara.Kantara.Options + [opAruFlag];



with MainData.Untara.Kantara do
 if opAruFlag in Options then
  Options := Options - [opAruFlag]
 else
  Options := Options + [opAruFlag];

こうするような場合。
445デフォルトの名無しさん:2013/10/17(木) 20:34:04.70
with ListBox do Selected[ItemIndex]:=True;
これは一番よく使うパターンだけど ItemIndex は入力支援で出てこないんだよね
446デフォルトの名無しさん:2013/10/18(金) 16:16:05.43
with使うとブレークした時にカーソル合わせても値が表示されないからクソ
447デフォルトの名無しさん:2013/10/18(金) 18:35:12.94
というか入力支援捨ててまで使おうとする奴はアホ
448デフォルトの名無しさん:2013/10/18(金) 20:18:16.28
フラグを足し引きしてるのがすんごい違和感ある or,xor,andだろ
449デフォルトの名無しさん:2013/10/18(金) 21:06:52.48
これは集合型ですから。
>>444
Include、Excludeを使うとさらに良くなるかな?
450デフォルトの名無しさん:2013/10/18(金) 22:57:41.69
俺は全然、集合型を足しひきするのはOK
451デフォルトの名無しさん:2013/10/19(土) 00:24:53.69
D7でボタンを押すとファイル選択のダイアログを表示する処理で
OpenDialog1.FileName := FName; //デフォルトのファイル名 
if OpenDialog1.Execute then
begin
//処理
end;
といったコードを書いているのですが一部のwindows7でダイアログが表示されなっくて困っています
同じバイナリで表示されるPCと表示されないPCがあります
同様の現象に遭遇したことがある方、解決方法をご存知でしたら教えてください
452デフォルトの名無しさん:2013/10/19(土) 19:23:02.07
最小限再現するコードがほぼそれだけなら
「表示されないPCが」おかしい
453デフォルトの名無しさん:2013/10/20(日) 02:00:53.23
初めましてTurbo delphiで時たまプログラミング遊びしている者です。
今作成しているプログラムで壁にぶつかってしまったのでなにかヒントを頂けると嬉しいです。

特定フォルダ内のexeファイルのパスを拾って、ボタン1つで起動させるソフトを作っています。
メモ帳やペイント、その他多くのソフトは想定通り起動してくれるのですが、
JAVAで作られたexeソフト?だけ実行しようとしても
「アプリケーションの実行に失敗しました。」と出て実行することができません。
他のソフト起動に試した関数は以下の三種類です。

  CreateProcess
  ShellExecute
  WinExe

ネット検索をしても上記3つの関数しか提示されていなくどういうアプローチで修正すればよいかわからず困惑しています。
似た事例を経験されて解決方法をご存じの方がいらっしゃいましたら是非ともご教示願いたいです。
どうかよろしくお願いします。
454デフォルトの名無しさん:2013/10/20(日) 02:17:45.88
javaでexeってLaunch4jとかそんなの?
455デフォルトの名無しさん:2013/10/20(日) 02:23:48.32
起動できないソフトの名前を書くように
456デフォルトの名無しさん:2013/10/20(日) 02:25:49.71
>>453
正解は知らないけど、ShellExecuteに絞ってやったほうがいい。
 ダブルクリックで起動できる = 「ファイル名を指定して実行」で起動できる = ShellExecuteで起動できる
…のはずだから。

ShellExecuteも様々なパラメータ指定のやり方があるから、あらゆる方法を試したら。
今はどうやってるの?
457デフォルトの名無しさん:2013/10/20(日) 02:35:13.02
こんな深夜に皆さん本当にありがとうございます。

>>454さん
申し訳ありません
私はJAVAに詳しく無くて詳細はわからないのですが、
そのソフトの同一階層にjreというフォルダがあったり
.jarや.jsといった拡張子ファイルがあるのでjavaで作ったソフト?なのかなと思って書かさせて頂きました。

>>455さん
申し訳ありません
『TimeManager』という勤怠管理ソフトです。
ttp://www.vector.co.jp/soft/winnt/business/se483090.html

>>456さん
情報ありがとうございます。ShellExecuteで色々試してみます。
今の方法を示します

exedatはstring型でファイルのパス名が入っています。

ShellExecute(Handle,'open',PChar(exedat),'',
// PChar(ExtractFilePath(Application.Exename)),SW_SHOWDEFAULT);

です。
情けない話で、APIはまだあまり理解していないので下記サイトのコピペで実行しています。
ttp://www.wwlnk.com/boheme/delphi/tips/tec0120.htm
458デフォルトの名無しさん:2013/10/20(日) 02:48:26.24
とりあえず、ワケ分からないで付けてる「既定のディレクトリ名」は外そう。
ただし、試してないよ。
ShellExecute(Handle, 'open', PChar(exedat), '', nil, SW_SHOWDEFAULT);
459デフォルトの名無しさん:2013/10/20(日) 02:56:31.43
>>458さん
ありがとうございます。
第五引数をnilにしましたが残念ながら結果は変わらず「アプリケーションの実行に失敗しました」でした。
ご助言誠にありがとうございます。

普段使用しているランチャーソフトからはパスを拾って普通に実行できるので
外部ソフトからの起動ができないわけではないと思うのですが…
460デフォルトの名無しさん:2013/10/20(日) 03:03:44.38
exedatの中身はどうなってるの?
それを「ファイル名を指定して実行」で起動する?
461デフォルトの名無しさん:2013/10/20(日) 03:18:45.06
>>460さん
ありがとうございます。
ブレークポイントを置いて確認したところ想定通りのパスが入っていました。
加えて、試しにコピーして「ファイル名を指定して実行」を実施した所しっかり起動しました。
ご助言ありがとうございます。
462デフォルトの名無しさん:2013/10/20(日) 03:21:32.26
では、これは?
ShellExecute(Handle, nil, PChar(exedat), nil, nil, SW_SHOWDEFAULT);

空文字が見苦しいからnilで統一した。どっちでも受け付ける…と思う。
463デフォルトの名無しさん:2013/10/20(日) 03:33:00.63
>>462さん
ありがとうございます。
結果は同じく「アプリケーションの実行に失敗しました」でした。

起動が上手くいかないフォルダに別のソフトのexeファイルを入れて
それに対して実行できるか試してみましたが、別のexeファイルなら想定通り実行出来ました。

また、第六引数の表示状態の指示も下記サイトに表記の全6パターン全て試しましたが実行できませんでした。
ttp://eternalwindows.jp/winbase/window/window03.html
464デフォルトの名無しさん:2013/10/20(日) 03:39:56.23
難しいねぇ。
当該のソフトは軽い気持ちで入れたくない量(嫌な予感)なので、パスさせて。
お役に立てなくてすまぬ。

他、心当たりある人助けてあげて。
465デフォルトの名無しさん:2013/10/20(日) 03:48:25.11
>>464さん
こんなに深夜遅くまでご教示くださり誠にありがとうございました

たった今無事に当該exeファイルを想定通り起動することが出来ました。
ttp://www.wwlnk.com/boheme/delphi/tips/tec0260.htm
に記載のCreateProcessを用いて下記のコードで実行してみたところ

  GetStartupInfo(SI); //他アプリの起動
  CreateProcess (PChar(exedat), '', nil, nil, False, 0, nil, PChar('C:\Program Files\MOBWAYS\TimeManager\'), SI, PI);

無事目的のexeファイルを起動することが出来ました。
手持ちの参考書『カンタン!Delphiプログラミング』には第8引数に「 CREATE_DEFAULT_ERROR_MODE」と記載してあったのですが
上記のようにカレントフォルダを指定してあげると想定通りの起動を得ることが出来ました(まだ難しくて理解できていないです)。
まだまだわからないことだらけで情けない限りです。


繰り返し、>>464さん夜分遅くまでお付き合い下さり
本当に、本当にありがとうございました。

スレを長レスで乱して申し訳ありませんでした。
皆様ありがとうございました。
466デフォルトの名無しさん:2013/10/20(日) 03:54:31.39
>>465
ほー、そうなんだ。
無駄なことさせたようで悪かったね。ごめんなさい。
とにかく目的が果たせて良かった。
467デフォルトの名無しさん:2013/10/20(日) 03:58:05.95
>>466さん
とんでもないです
問題点を精査するアプローチを学べました。
大変参考になりました。本当にありがとうございます。
468 ◆rW3tmvmDLc :2013/10/21(月) 16:33:49.96
>>449
Inludde/Exclude手続きが使えるのは集合型「変数」のみで
集合型「プロパティ」には使えません。

集合演算子に xor があったらありがたかったです。
469デフォルトの名無しさん:2013/10/21(月) 17:39:48.66
初めまして。
VCLフォームアプリケーションで書いたプログラムをFireMonkeyモバイルアプリケ

ーションに移植しようとしているものです。

【症状】
PaintBox.Canvas.Pixels[x,y]のPixelsがエラーメッセージ E2003 未定義の識別

子を吐き出し、詰まっております。

【質問内容】
PixelsはVCLフォームアプリケーションでしか使用できないものなのでしょうか?
また、そうであるとすれば、PaintBoxに点を描画できる方法はあるのでしょうか?

何かご存知の方、ご教示頂けると幸いと存じます。
470デフォルトの名無しさん:2013/10/21(月) 18:36:30.52
Googleってご存知でしょうか?
もしご存知であれば"FireMonkey Pixels"で検索することはできないのでしょうか?
471デフォルトの名無しさん:2013/10/21(月) 20:07:15.70
個人情報抜かれるから無理ですね。
472デフォルトの名無しさん:2013/10/21(月) 23:14:40.14
高橋(智)です
ソースは画像でうpしてます(笑)
473デフォルトの名無しさん:2013/10/22(火) 05:08:56.42
高橋さんって嫌われているの?
474デフォルトの名無しさん:2013/10/22(火) 06:04:41.26
遊ばれてるだけだろ。あまり愛想のいい人じゃないけど、嫌いじゃない。
475デフォルトの名無しさん:2013/10/22(火) 23:33:52.71
じゃあ DEKO さんと Mr.XRAY さんは?
476デフォルトの名無しさん:2013/10/24(木) 23:33:52.26
ネチネチ。
477デフォルトの名無しさん:2013/10/31(木) 23:10:39.41
XE2のフォーマッタで
datetimetostr -> DateTimeToStr
というのをやるオプションってないんですか?
XE3以降では出来たりしますか?
478デフォルトの名無しさん:2013/11/02(土) 07:56:58.37
ちょっと教えてください。

Win7(x64)上のXEで
TListviewのOnCustomDrawSubItemを使って
各行のSubItemに図形を描いています。

これ自体は正常に描けているんですが、
本来、Windowsに任せているハズのCaptionが
マウスを上に持ってくると文字背景が黒くなり
テキストを判別できなくなります。

で、Captionも自力で描こうとOnCustomDrawItemを使うと、
こんどはOnCustomDrawSubItemがまったく機能しなくなります。

OnCustomDraw...って、どうやって使うんでしょうか?
479478:2013/11/02(土) 08:45:01.40
>>478で質問した者です

ここに回答がありました
ttp://stackoverflow.com/questions/8192961/is-there-a-bug-in-the-delphi-list-view-control-when-using-custom-drawing

で、イベントの最後に
SetBkMode(Sender.Canvas.Handle, TRANSPARENT)
を追加すると上手く行きました
480デフォルトの名無しさん:2013/11/06(水) 19:26:53.35
DelphiのTFormのLeftとかWidthって実際の値とは違うの?

Windows 7で2つのFormをピッタリ並べたいんだけど
LeftとWidthだけ使うと、Form同士が微妙に重なってる

実際に画面キャプチャして調べると、LeftもWidthも
設定した値と違ってるんだけど...
(外枠相当が数値に反映されてない?)

Formの位置やサイズを正確に調べる方法ってありますか?
481デフォルトの名無しさん:2013/11/06(水) 19:31:56.33
left,top
width,height
482デフォルトの名無しさん:2013/11/06(水) 19:48:02.82
>>480
重なってると思ってる部分は単なる影だろ
Aero切るかクラシック表示にして試してから言え
483デフォルトの名無しさん:2013/11/06(水) 19:59:11.78
>>480
フォームを一つだけ最大化して、その値を半分にしてはどうかな。
484デフォルトの名無しさん:2013/11/06(水) 20:02:08.09
Win32APIのAdjustWindowRectExが現実とは異なる値を返している(かパラメータが正しくない)んじゃないかな。
485デフォルトの名無しさん:2013/11/06(水) 20:39:52.11
>>480
ここにVista以降のウィンドウサイズについて詳しく書いてある
ttp://mrxray.on.coocan.jp/Delphi/plSamples/368_ScreenCaptureTest.htm

ここに出てる2つのAPI使って枠のサイズを計算する
確かWindows 7で5ピクセルだと思った(うろ覚え)

ウィンドウを並べるんだったら右側のウィンドウ位置を
左のウィンドウのLeft+Width+10とする
486480:2013/11/06(水) 21:08:02.18
すばやい回答ありがとうございます。

>>485
試しに10足してみると2つのFormがピッタリ並んだ
APIとかまだ使ったことないけど挑戦してみる

ありがとう
487デフォルトの名無しさん:2013/11/07(木) 10:06:13.17
Form.Widthはクライアント領域の幅で、枠は考慮しない これは常識だけど・・・?
488デフォルトの名無しさん:2013/11/07(木) 10:09:14.72
常識だったのか…?
489デフォルトの名無しさん:2013/11/07(木) 10:12:43.14
クライアント領域の幅ってForm.ClientWidthじゃなかったっけ?
490デフォルトの名無しさん:2013/11/07(木) 16:10:24.72
そうだね。そっちが常識。>>487は…(笑)
491デフォルトの名無しさん:2013/11/08(金) 01:54:51.72
そういえばScreenSnapをtrueにしてると
Formがスクリーン端に吸着するとき
枠が外にはみ出すんだよな

それ以来ScreenSnapは使わなくなった
492デフォルトの名無しさん:2013/11/08(金) 14:39:53.52
Delphiの「Windows○○対応」は表面上だけだからな
本来はOSや状態による差をVCL内部で考慮するのが当然なんだが
493デフォルトの名無しさん:2013/11/09(土) 02:02:37.76
>本来はOSや状態による差をVCL内部で考慮する
もう何年も前に、そういった思想は破棄されている
ただまぁ昔話は止めておけ
494デフォルトの名無しさん:2013/11/09(土) 14:40:32.88
は?
495デフォルトの名無しさん:2013/11/10(日) 13:18:16.26
ところでScreenSnapってどんな実装になってるの?
自分はStarterだからソースを参照できない

TFormを継承して、外枠の幅を考慮してスナップさせる
クラスを作るのって簡単そう?
496デフォルトの名無しさん:2013/11/11(月) 02:42:49.00
簡単
WM_WINDOWPOSCHANGING
とかでぐぐれば、いくらでも例が出てくるだろう
497デフォルトの名無しさん:2013/11/11(月) 05:34:05.14
>>495 汚いソースで恥ずかしいけど、Del7のを参考にしてみた
uses DWMAPI;
FSnapBuffer: integer FScreenSnap: boolean; FFrameSize: integer;
procedure WMWindowPosChanging(var Message: TWMWindowPosChanging); message WM_WINDOWPOSCHANGING;

function GetWindowFrame(Handle: THandle): integer;
var R1, R2: TRect;
begin
result := 0; try
if Win32MajorVersion >= 6 then begin
DwmGetWindowAttribute(Handle, DWMWA_EXTENDED_FRAME_BOUNDS, @R2, SizeOf(TRect));
GetWindowRect(Handle, R1);
result := Abs(R2.Left - R1.Left);
end; except end; end;

procedure TForm.FormCreate(Sender: TObject);
begin
FSnapBuffer := 20; FScreenSnap := true; FFrameSize := GetWindowFrame(Handle);
end;

procedure TForm.WMWindowPosChanging(var Message: TWMWindowPosChanging);
procedure HandleEdge(var Edge: Integer; SnapToEdge: Integer; SnapDistance: Integer = 0);
begin if (Abs(Edge + SnapDistance - SnapToEdge) < FSnapBuffer) then Edge := SnapToEdge - SnapDistance; end;
var fx, fy, fwidth, fheight: integer;
begin
if FScreenSnap and ((Message.WindowPos^.X <> 0) or (Message.WindowPos^.Y <> 0)) then
with Message.WindowPos^, Monitor.WorkareaRect do begin
fx := x - FFrameSize; fy := y - FFrameSize; fwidth := Width + FFrameSize + FFrameSize; fheight := Height + FFrameSize + FFrameSize;
HandleEdge(fx, Left, Monitor.WorkareaRect.Left); HandleEdge(fy, Top, Monitor.WorkareaRect.Top);
HandleEdge(fx, Right, fWidth); HandleEdge(fy, Bottom, fHeight);
x := fx + FFrameSize; y := fy + FFrameSize;
end; inherited; end;
498497:2013/11/11(月) 05:41:55.66
>>497のを誰か添削してくれない?
Win7上でちょっと動きがぎこちないんだけど
499デフォルトの名無しさん:2013/11/12(火) 06:24:41.56
4月に画像ビュアーで質問したものです。
立て込んでいた仕事が一段落したので
作っていたソフトの改良をしたいと考えています。

DirectoryListBoxでダブルクリックしないと
FilelistBoxにファイルが表示されません。
シングルクリックにする方法はありますか?
イベントにOnClickがあるのでできそうな気がしますが、
何を書いたらいいのか分かりません。

コンパイラはDelphi XE4です。
よろしくお願いいたします。
500デフォルトの名無しさん:2013/11/12(火) 14:11:19.69
>>499
オブジェクトインスペクタで DirectoryListBox1.FileList:=FileListBox1 を設定してる
ということですか? 前提条件を書いてくださいね。
特にDirectoryListBoxやFileListBoxはWin3.1時代のコンポーネントみたいだから、
使ってる人がほとんどいないと思うので、なおさら。。。。

細かいこと言わないなら、OnClickに DirectoryListBox1.OpenCurrent(); でどうですか。

あと画像ファイルを開くなら、TOpenPictureDialogというのもありますよ。
501デフォルトの名無しさん:2013/11/12(火) 19:50:15.30
シングルクリック時にダブルクリックイベントを呼べばいいんでわ
502デフォルトの名無しさん:2013/11/13(水) 18:41:24.62
>>500-501
ありがとうございます。
DirectoryListBox1.FileList:=FileListBox1
は設定してあります。

インターフェースはListboxで十分で、
選択したjpg,pngファイルをImageに渡しているだけのソフトです。
wavとmp3のサポートしています。

元々はVecterにあるListというソフトを見本にして
勉強のためにDelphiで作っていました。
4月に発生していた原因不明のmp3が再生できないというエラーは
作り直していたら出なくなりました。

ロダにあげたので、もし良かったらアドバイスをいただけないでしょうか?
http://www1.axfc.net/u/3087170.rar
よろしくお願いいたします。
503デフォルトの名無しさん:2013/11/13(水) 20:34:10.84
以前もレスしたお人好しだが今回は時間がないので
ReadMeとUnit1_01.pasだけ目を通した

他の人も書かれたように「DirectryListBox」「FileListBox」は Windows3.1時代のもの
その当時はシングルクリックでフォルダ(ディレクトリ)を開くという考え自体がなかった
敢えてするなら
procedure TForm1.DirectoryListBox1Click(Sender: TObject);
begin
(Sender as TDirectoryListBox).OpenCurrent;
end;
もし他の人にも使ってもらうなら「シングルクリックで開く」と設定で選べるようにするべきだ

>mp3のタグ
「Delphi ID3Tag」でググれ
俺は自分用なので「AudioInfo」というコンポーネントを使ってる

「Delphi 関連づけ」でググれ

>次のファイルを自動で演奏
TMediaPlayer.OnNotify をヘルプで読むなりググるなり


以前も書いたけど人にソースを読んでもらうなら読みやすいように
filelistbox1.FileName→ FileListbox1.FileName;
コード補完機能を使ってちゃんと書いてくれ
TMediaPlayerだけMPlayに名前を変えてるけどw
TButton何個も載せるならわかりやすい名前を付けよう
ZoomButton とか UpdateButton とか
格段に読みやすくなる
504デフォルトの名無しさん:2013/11/13(水) 21:15:19.15
>>503
ありがとうございます。
以前お世話になりました。

大文字の問題は教えていただいた後に
拡張子のエラーなどの問題を解決するため
3〜4回作り直しています。全部作り直ししました。

知人にインターフェースがわかりにくい
と指摘され作り直していたらコンパイルすらできなくなって
消しちゃったので教えていただいた頃のソースです。

ゴールについてですが、私がソフトに盛り込みたい内容で
私の宿題だったので、この点についても教えていただき
ありがとうございました。

タグについても、全部手打ちしなければならないと思っていたので
AudioInfoの情報ありがとうございます。早速調べてみます。

関連づけについては、コマンドラインオプションの実装と
フォルダー内のファイルを全て検出して読み出す必要があると考えています。
505デフォルトの名無しさん:2013/11/14(木) 16:24:14.77
>>503
ただいま確認できました。
onClickを選択してもonChangeになって
原因が分かるまで時間がかりました。

>TButton何個も載せるならわかりやすい名前を付けよう
コード補完と併せて勉強させていただきました。
ありがとうございました。

必要な機能を実装できるよう更に勉強いたします。
506デフォルトの名無しさん:2013/11/17(日) 19:36:38.02
十数年前までVB6で業務アプリを作っていました。
その頃delphiも少しやっていました。
最近になってまた業務アプリ(windows)を定期的に作ることになりました。
delphi、vb.net、python、java、c#、rubyなど、どれを使おうか悩んでいます。
皆さんのお考えをお聞かせください。
ちなみにvb6ではスパゲティープログラムを作ってしまう程度のスキルです
507デフォルトの名無しさん:2013/11/17(日) 20:01:18.63
>>506
業務アプリがどのようなものかによります。
社内で使うものでコマンドラインでいいなら適当なスクリプト言語を。
スクリプトでは都合が悪いなら Delphi がコンパイルも動作も速くてお薦めです。
売り物として作るなら GUI が必要になってくると思うので C# が一番。VB でも可。
.net を嫌う向きには VC++ のアンマネージドコードか Delphi の二択になります。
プラットフォームが Windows 限定ならわざわざ Java を選ぶことはありません。
私なら Perl と Delphi と VC# を適宜使い分けます。
スキルなんて少しでもやる気があればいくらでも伸びるので気にせず選びましょう。
508デフォルトの名無しさん:2013/11/18(月) 11:05:40.05
業務アプリ向けでこだわりが無いなら今ならC#一択でしょ?
509デフォルトの名無しさん:2013/11/18(月) 18:06:28.92
>>507,508
ありがとうございます。
C#はMS社の新技術にこれからどんどん付いていく自信がありません。
.net frameworkにも抵抗があります。
その点delphiはwinアプリは枯れているような印象があります。
oleオートメーションでwordやexcelを操作する予定です。
delphiはすべてのoleオートメーションの機能を使えるでしょうか?
また近年マイナーになっているのが気になります。
510507:2013/11/18(月) 19:10:01.10
>>509
お使いの Delphi がどこまで ole オートメーションに対応しているのかは存じませんが、そういう業務ならば Delphi でやってみれば良いと思います。
しかし MS 純正ソフト同士の方が色々と都合が良いのではないかと思うので、少しずつ C# にも触れて慣れていってはいかがでしょうか。
.net は近頃のマシンパワーならもたつきは気になりませんよ。
511デフォルトの名無しさん:2013/11/18(月) 21:04:59.02
>>510
ありがとうございます
その線で行きたいと思います
ただMS社のC#研修を受けたときにチンプンカンプンだったので苦労してもおぼえられるかなと思っています
また、.netは新しいWindowsが出るたびに.netのバージョンを上げないといけないようなイメージがあります
ところで今後のモバイル開発を考えた場合delphiがまた人気が出るような気もしますがFireMonkeyの完成度が高くないようであまりメジャーにはなっていないようですね
人気が出そうですかねぇ?
512507:2013/11/19(火) 00:45:16.67
>>511
うちの Delphi は 5Pro なので最近のことはわかりません。
ウェブ用にはメモ帳で Perl で CGI を書くくらいですね。
513デフォルトの名無しさん:2013/11/21(木) 23:54:06.72
>506
迷わずC#と言っておく。業務ソフトは性能よりも生産性重視すべきだから
OLEオートメーションとの相性も良好

VCLをある程度知ってるなら.NET Frameworkはすぐに身につく
…事情知らない奴はパクリにしか見えない位そっくり
Delphiがマイナーになっていくのも同じ事情

>.netは新しいWindowsが出るたびに.netのバージョンを上げないといけないようなイメージがあります
むしろそれはやらない方がいい。VS2005であと15年は戦える
514デフォルトの名無しさん:2013/11/22(金) 01:48:34.30
>>513
以前C#でexcel操作するサンプルコード見たことあるんだけど
オブジェクトの階層たどっていくのにいちいち
try{・・・}finary のネストが必要でこりゃ面倒だなと思ったんだけど
その辺は解消されてるの?もしくはそれがあってもC#のほうがいいの?
excelとか扱うならVBのほうがいいんじゃねえのと思ったりもするんだけど。
515デフォルトの名無しさん:2013/11/22(金) 11:18:13.53
C#ならusing?
VB.netはやめとけ
516デフォルトの名無しさん:2013/11/22(金) 15:14:14.34
>>514
C#は自身が持つGCとOLEの参照カウントは全く別物だから、
実質的に自分で参照カウントを操作する必要があって激しく面倒。
http://blogs.msdn.com/b/office_client_development_support_blog/archive/2012/02/10/office-part1.aspx

VB(.netではない)やDelphiで自動化されてる部分をいちいち自前でやる必要があるから、
これら二つに比べたら圧倒的に使いづらく、これを相性がいいと言ってる人間がいたら頭がおかしい。
517デフォルトの名無しさん:2013/11/24(日) 21:09:25.11
>>503
レスありがとうございます。
wav再生系統を分離してちまちま作っていました。

TMediaPlayer.OnNotifyですが、
MediaPlayerに対して何かのイベントを起こして
そのイベントが正常に終わったときに
NotifyValueに成功の値が設定されるという
理解でよろしいでしょうか。

正常に終わったときにFileListBox内の
上下方向への移動をソフト内部でできるでしょうか?
無理矢理キー入力されたことにして動かす引かないのでしょうか?

ファイルをあげています。
http://www1.axfc.net/u/3097406
DLkey:delphi
またアドバイスをいただけないでしょうか。
よろしくお願いいたします。
518デフォルトの名無しさん:2013/11/25(月) 13:40:33.02
Notifyイベントで再生終了を知るためには、再生前にMediaPlayer1.Notify := false; しておく
Playの後でNotify := trueにすればいい そうじゃないとPlayイベントも受け取ってしまうから

with MediaPlayer1 do
begin
 FileName := FileListBox1.FileName;
 Notify := false;
 Open;
 Play;
 Notify := true;
end;

で、Notifyイベント側で次の曲をFileNameにセットすればいい
519デフォルトの名無しさん:2013/11/26(火) 10:09:49.01
>>518
ありがとうございます。
海外のNotifyの使い方を説明しているところを見ても
今ひとつ分からなかったのですが
解説していただいのでよくわかりました。

これが分かったので、今まで今ひとつだった
TMediaPlayerのプレイリストの意味が分かりました。
あらかじめカレントフォルダ内のファイルをプレイリストとして
読み込んでおいてトラックが終了したらNotifyを検出して
Nextすると言うことでいいでしょうか。
520デフォルトの名無しさん:2013/12/01(日) 11:11:13.96
>>518
ずっと次に渡すファイルを取得する方法を考えていましたが、
Notifyイベントを取得したらTMediaPlayerからFileListBoxの
カーソルを下にずらすようにすればいいのでしょうか?

ヘルプ見ても半分くらい空白なので困ってます。
521デフォルトの名無しさん:2013/12/01(日) 18:27:47.51
新規のテスト用のプロジェクトを作っておいて
新しいことを試すときはそちらでやってみるんだ
procedure TForm1.Button1Click(Sender: TObject);
begin
 if FileListBox1.ItemIndex=FileListBox1.Items.Count-1 then
  FileListBox1.ItemIndex:=0 else FileListBox1.ItemIndex:=FileListBox1.ItemIndex+1;
end;
522デフォルトの名無しさん:2013/12/01(日) 19:10:08.93
>>521
ありがとうございます。
ボタンの前曲、次曲の操作を実装することができました。

上下キーでFileListBox内のカーソルを動かす機能を
入れたときに何かから-1(+1)すればいいことは分かっていましたが、
ItemIndexはヘルプになかったので分かりませんでした。
このプロパティは一般的な命令なんでしょうか?
523デフォルトの名無しさん:2013/12/02(月) 21:56:43.31
TComboBox、TListBox、RadioGroup に共通のプロパティだ
Delphi5 か Delphi6 あたりのヘルプなら調べやすいんだけどね、どこかで手に入らんかな
で↑のヘルプなら「TFileListBox プロパティ」を開くと「TCustomListBox からの継承」で分類されて「ItemIndex」がある

「TFileListBox」でググると一番上に docwiki.embarcadero の「Vcl.FileCtrl.TFileListBox - XE2 API Documentation」がでる
そこのプロパティを見ても TFileListBox 固有のものしか書かれていないがコンポーネントってのは継承元のプロパティも使えるので
最初の Vcl.FileCtrl.TFileListBox ページの継承元のひとつである「TCustomListControl」を開いてみる
Vcl.Controls.TCustomListControl のプロパティにぽつんと一つだけ ItemIndex が出てくる

まぁこれじゃあ探せんわなぁw
524デフォルトの名無しさん:2013/12/03(火) 08:34:52.71
リストビューのコンポーネントにもあるよ つかリストにインデクスがあるのは当然の話で
インデクスのプロパティがあるはずだって探していくのがまっとうな手順
525デフォルトの名無しさん:2013/12/03(火) 21:12:50.35
オブジェクトの継承についてわかりやすいのがあった
http://codezine.jp/article/detail/7423
これの 3 あたり
526デフォルトの名無しさん:2013/12/04(水) 12:06:25.93
初心者に当然とか言われましても…
527デフォルトの名無しさん:2013/12/04(水) 21:20:57.51
とあるリストのの禁書目録
528デフォルトの名無しさん:2013/12/15(日) 10:34:36.44
>>523
遅くなってすみません
>>522を投稿した後にRadioGroupにもItemIndexあったよなと思い
しばらくいじっていました。
意味は分かりますが理解するには時間が掛かりそうです。
若い頃に比べてやっぱり頭が固くなっているのを実感しています。

>>522で分かりましたと言ってから、そのファイルがなく
昨日までFileListBoxのカーソルが移動し続けて
タスクマネージャからソフトを止めないと終了できなくなったり
MCIのエラーが出てたりして途方に暮れていました。

ずっと4月の頃のログと最近のログを見ながら
いじり回してやっと>>239の意味が理解できました。

本題なんですが、いろいろいじってやっとボリュームコントロールが
実装できるところまで行きましたが、mp3だとボリュームコントロールが
できますがwavだとできません。
たぶんmp3で出ていたエラーの逆のことが起きているのではないかと思いますが
絞り切れていません。
もう一度ロダにあげます。ご指導いただけないでしょうか?
http://www1.axfc.net/u/3115934.zip
passはdelphiです。
よろしくお願いします。
529デフォルトの名無しさん:2013/12/15(日) 10:41:18.68
続き
delphi4からdelphi2010でもかなりインターフェースが変わって戸惑いましたが、
XE4になって更に分かりにくくなりました。

>>525
書き込みしていただいたときに見ました。
ほかの本だと結構苦労している部分でしたが
シンプルに書いてあるので分かりました。
理解するには自分でVCLを作らないと分からないんだろうなとは思います。
530デフォルトの名無しさん:2013/12/15(日) 13:37:04.11
Delphiってなんて読むんですか?
531デフォルトの名無しさん:2013/12/15(日) 14:00:51.62
>>530
「でるふぁい」。エンバカの人は「る」のとこにアクセントがくる読み方をしてる。
532デフォルトの名無しさん:2013/12/15(日) 20:44:31.55
Google 翻訳で発音してみる
533デフォルトの名無しさん:2013/12/15(日) 21:09:08.87
すまん、Delphi は 〜Delphi5、2005、2007、2009 しか持っていないから
そのプロジェクトは開けない
sound.pas
Unit1.pas
をサラッと観たけど sound.pas はそのまま流用してる?
以前書いた「AudioInfo」はタグ表示くらいにしか使っていないがそこに入っていたのかな?

んで Wave の音量調節も最低限動くソース
(Vista 以前と以降ではちょっと条件が違うから XP ではダメかも知れない、いけるかも知れない)
・行数制限があるから二つに分ける
・半角空白二つを全角一つに置換してるので了承してくれ

  MediaPlayer: TMediaPlayer;
  TrackBar: TTrackBar;
  Button1: TButton;
  procedure Button1Click(Sender: TObject);
  procedure TrackBarChange(Sender: TObject);
---------------------------------------------
implementation

{$R *.DFM}

uses MMSystem{waveOutSetVolume に必要};
534デフォルトの名無しさん:2013/12/15(日) 21:09:52.33
//続き
var
 WaveDevID: Word;

//実際にVolumeをセットする手続き
function VolumeChange(Pos: Integer):Boolean; //Posはパーセント
var
 LV,RV: Word;
 dwVolume: DWORD;
begin
 LV := ($FFFF*Pos ) div 100;
 RV := ($FFFF*Pos ) div 100;
 dwVolume := (DWORD(LV) shl 16) Or RV;  {LとRの値を代入}
 Result:=waveOutSetVolume(WaveDevID, dwVolume)=0;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 with MediaPlayer do
 begin
  FileName:='E:\DATA\wave\KAYOWAI.WAV';//実際に存在するファイル
  Open;
  Play;
 end;
end;

procedure TForm1.TrackBarChange(Sender: TObject);
begin
 VolumeChange((Sender as TTrackBar).Position);
end;
535デフォルトの名無しさん:2013/12/15(日) 21:54:07.91
>>533
何度もお伺いして申し訳ありません。
hUnit1.pasはいつの間にか勝手に作ったファイルです。

本体はsound.pasです。
このファイルは以前見ていただいたソースから
3〜4回作り替えています。
MCIのエラーやスキップするとカーソルが
勝手に動くようになったりしてました。

Delphi2010からXE4に移行したときにUsesが全部書き変わっていて
互換性がない(ように見える)とヘルプがVCLとFMXが混在していて
VCLが異常に少ない感じです。

エラーの発生が新しく作り直すと出なくなったり。

ソースありがとうございます。
早速試してみます。

AudioInfoはしつこく探しましたがないようです。
ttp://yakki.digi2.jp/vobaudioinfo/でしょうか
タグに関しては、record型で作るという方法もありますが、
一回ソースを見ましたが途方に暮れています。
536デフォルトの名無しさん:2013/12/16(月) 21:21:32.26
>>535
AudioInfo はドメインもなくなってるみたいだから
「Delphi MP3ファイルのIDタグ」でググって出てきた
http://drang.s4.xrea.com/program/tips/id3tag/id3tag_func_v2.html
http://drang.s4.xrea.com/program/tips/id3tag/id3tag_write.html
ここらへんで
537デフォルトの名無しさん:2013/12/17(火) 22:29:08.65
複数のユニットからインスタンスを共有したいときって
そのインスタンスをグローバルで生成してusesで参照するだけでも良い?
それともどこか基準になるユニットで生成してそれぞれのユニットに渡すほうが良い?
538デフォルトの名無しさん:2013/12/17(火) 23:35:14.88
好きなようにすればええ
539デフォルトの名無しさん:2013/12/18(水) 12:01:44.89
グローバルで作ったインスタンスは
他から参照する場合それっていう保証はないんじゃまいか
540デフォルトの名無しさん:2013/12/18(水) 15:26:27.57
お、おう
541デフォルトの名無しさん:2013/12/18(水) 20:33:37.51
LogList:TStringList
みたいなのなら普通にグローバル
542デフォルトの名無しさん:2013/12/19(木) 08:50:32.92
そのLogListを他unitから参照したときに、生成されたものだという保証があるのか知りたい
543デフォルトの名無しさん:2013/12/19(木) 11:51:14.71
ご冗談を(笑)
544デフォルトの名無しさん:2013/12/19(木) 13:11:45.92
initialization ?
545デフォルトの名無しさん:2013/12/19(木) 13:50:39.91
ALogList: TStringList;

function LogList: TStringList;
begin
if not Assigned(ALogList) then ALogList:= TstringList.Create;
Result:= ALogList;
end;
546デフォルトの名無しさん:2013/12/19(木) 14:56:44.83
インスタンスが生成されたかってのはAssignedでいいけど
例えば”何枚も同時表示することがあるForm2”のグローバルでLogList作ったら
どのLogListを指してるか分からないよね?
547デフォルトの名無しさん:2013/12/19(木) 15:11:02.41
それは設計がおかしい、という話にはならないの?
548デフォルトの名無しさん:2013/12/19(木) 15:24:34.50
それぞれのForm2のアドレスを保持しておいてTForm2(SaveP).LogListとかって
アクセスする。
549デフォルトの名無しさん:2013/12/19(木) 15:41:44.44
そもそも特定クラスの下にある変数をグローバル変数とは呼ばない
550デフォルトの名無しさん:2013/12/19(木) 16:00:45.92
>>546
それ、ただのメモリリーク
551デフォルトの名無しさん:2013/12/19(木) 17:41:23.48
1個のTStringListを使いまわすなら簡単な話だけど、「インスタンスを共有」の意味がわからない
継承とか参照はオブジェクト指向の用語だけど共有なんて聞き覚えがないぞw
552デフォルトの名無しさん:2013/12/19(木) 22:29:31.58
>>551
普通にある、君に知識がないだけだ。

「インスタンスを共有」と聞いたら
SingletonパターンやFlyweightパターンなど
少し知識がある人なら思い浮かべると思うが。

>>546
>インスタンスが生成されたかってのはAssignedでいいけど
クラスを生成したものがインスタンス。
インスタンスを生成することはない。
553デフォルトの名無しさん:2013/12/19(木) 22:40:59.71
なら最初からパターン名で伝えればいいじゃん
少し知識があるならそっちの方が伝わるでしょ
あとインスタンスが生成されたなんてのは逆に普通の言い回しで、そこに突っ込んでる意味が分からないけど?
ひょっとして馬鹿なの?
554デフォルトの名無しさん:2013/12/19(木) 23:26:31.69
>クラスを生成
これ、意味違わね?
555デフォルトの名無しさん:2013/12/20(金) 00:37:16.19
『クラスから(クラスの)インスタンスを生成』とは言うが、『クラスを生成』とは言わんな
556デフォルトの名無しさん:2013/12/20(金) 00:59:26.00
クラスのインスタンスを生成
インスタンスの生成
かと

クラスの生成
は変
557デフォルトの名無しさん:2013/12/20(金) 04:13:22.53
>>552
君の知識は少し足りなかったようだね^^;
558デフォルトの名無しさん:2013/12/20(金) 15:17:06.42
>>552
クラスを実体化したものがインスタンス。
クラスを生成することはない。
559デフォルトの名無しさん:2013/12/20(金) 16:32:18.32
>>552 はいいとして
>>546 みたいなことが想定されるなら
グローバルで共有はやめておけってことでおk?
560デフォルトの名無しさん:2013/12/20(金) 16:57:39.38
というか似たようなソフトのソース見つけてコピペってポンだろ。速攻できそう
561デフォルトの名無しさん:2013/12/20(金) 19:13:17.81
>>559
そんなことが想定されるようでは設計の段階でおかしい
562デフォルトの名無しさん:2013/12/20(金) 19:33:23.67
>>559はそう言ってるように思うんだがw
563デフォルトの名無しさん:2013/12/20(金) 22:26:42.20
>>556
日本語が変だぞw
564デフォルトの名無しさん:2013/12/20(金) 22:54:38.34
>>562
お前は日本語の読解力を身につけろw
565デフォルトの名無しさん:2013/12/20(金) 23:00:56.43
>>563
おまえの頭が悪すぎるだけかと
566デフォルトの名無しさん:2013/12/20(金) 23:35:31.65
あ、うん…
なんか触れちゃいけないところに触れちゃったみたいでごめん…
567デフォルトの名無しさん:2013/12/21(土) 01:09:42.54
バーーーーーカ
568デフォルトの名無しさん:2013/12/21(土) 03:02:01.00
そうですね
569デフォルトの名無しさん:2013/12/21(土) 09:26:25.64
頭の悪いレスって引くわw

一人で何を興奮してるんだ?
570デフォルトの名無しさん:2013/12/21(土) 10:35:59.34
>>569
お前は自分のレスにも引いてるってことか
大変だな
571デフォルトの名無しさん:2013/12/21(土) 10:59:30.67
>お前は自分のレスにも引いてるってことか
"にも"って、「自分も頭の悪い」という自覚はあるのか?
572デフォルトの名無しさん:2013/12/21(土) 11:22:58.87
的外れな質問を書き込む初心者の方が数段ましだよな。
概念とか定義とかいいから具体的にどうコードを書くのかと言う話をしようぜ。
573デフォルトの名無しさん:2013/12/21(土) 15:53:12.48
>>571
興奮しすぎて日本語が変だぞw
574デフォルトの名無しさん:2013/12/21(土) 16:16:19.75
ALogList: TStringList;

function LogList: TStringList;
begin
if not Assigned(ALogList) then ALogList:= TstringList.Create;
Result:= ALogList;
end;
575デフォルトの名無しさん:2013/12/21(土) 19:17:21.95
>>574
VCLがやっちゃってるからこういう書き方する人多いけど、実はLogList.Freeとされてしまった場合、
その確認もできない、インスタンスの再生成もできない、欠陥コードなんだよね
implementation内でTStringListを継承して、そのDestroyでALogListをクリアするように直せば多少はましになるよ
576デフォルトの名無しさん:2013/12/22(日) 07:45:36.93
>>VCLがやっちゃってるからこういう書き方する人多いけど、実はLogList.Freeとされてしまった場合、
>>その確認もできない、インスタンスの再生成もできない、欠陥コード
そんな事みんな気付いてるだろ。現状、そこまで厳密にやらなくてもいいと思ってるから、
上のコードですましてるだけで。
577デフォルトの名無しさん:2013/12/22(日) 11:01:50.69
listの使い回しとか持ち主がわからない作り方が欠陥
578デフォルトの名無しさん:2013/12/22(日) 12:06:00.92
CreateやFreeした相手が知りたければそういうクラスを作れば済む話
579デフォルトの名無しさん:2013/12/22(日) 12:28:16.20
何事も適材適所だよ。
1つのコードが全てのニーズに答えられるということはまずないし、
全てのニーズに答えられないからといって悪いコードというわけでもない。
580デフォルトの名無しさん:2013/12/22(日) 15:42:43.85
>>572
スイマセン。確かにそうなので
581デフォルトの名無しさん:2013/12/22(日) 19:05:24.59
ちょっと教えてください。

ポインタの有効/無効を判定する関数にAssignedってありますけど
これって (P <> nil) と同じですよね。

ポインタ変数自体が有効なデータを指しているかどうかを
判定する方法ってあります?
582デフォルトの名無しさん:2013/12/22(日) 23:52:00.27
通常のポインタであればAssignedと<> nilは同じ。
でもポインタが示している場所が有効かどうかを知る方法は一般的には存在しない。
Delphiならバッファオーバフローとかでポインタ変数の中身を吹っ飛ばしてしまったりしない限り
無効な場所を指すことはないしな。解放済のメモリへのアクセスはFastMMで検出できるかもしれん。
583デフォルトの名無しさん:2013/12/23(月) 00:59:01.89
>>575
これいいな
基本生成しちゃったらアプリケーション終了までメモリを占有されるけど、
これなら好きな時に解放してもいいまた必要になれば使えるし
584デフォルトの名無しさん:2013/12/23(月) 01:01:16.21
>>581
そんな判定が必要になる方がおかしいので、
判定方法より設計を見直すことの方が大事
585デフォルトの名無しさん:2013/12/23(月) 07:46:05.85
Delphi6を使っているのですが、最新版のものがどれほど進化しているのか
気になっています。
(購入検討中)

1.VCLは充実してきていますか?
2.オンラインヘルプは親切になっていますか?
3.開発環境(IDE)はサクサク動きますか?

知っている方おりましたら教えてください。
586デフォルトの名無しさん:2013/12/23(月) 08:34:52.83
>>581
有効なデータとは何かをまずは定義してくれ。
587デフォルトの名無しさん:2013/12/23(月) 08:35:07.43
>>585
30日間フル機能のトライアル版があるから試してみたらいいじゃん
588デフォルトの名無しさん:2013/12/23(月) 12:50:48.34
そうですね。そうします。
589デフォルトの名無しさん:2013/12/24(火) 14:21:09.90
>>582
そうですか、やっぱり方法はないですよね。

>>584
おっしゃるとおりです。
590デフォルトの名無しさん:2013/12/26(木) 07:00:48.71
最新版はAndroidのネイティヴコード(ARM)が吐けるっていうからすごい進歩だと思う
ようつべにプレゼンの様子がある
591デフォルトの名無しさん:2013/12/26(木) 14:44:09.25
ただ動くのと実用的に使えるかは大違い。
592デフォルトの名無しさん:2013/12/26(木) 16:40:12.52
おっと、Xamarinの悪口はそこまでだ
593デフォルトの名無しさん:2013/12/29(日) 22:17:38.31
てか、オレなんか高くてProさえ買えない
いまだXE Starterでフリーソフト作ってる

Androidアプリを作るにはPro+アルファだろ
とても手が出せない
594デフォルトの名無しさん:2013/12/30(月) 03:33:32.10
>>593
来年末までの辛抱
595デフォルトの名無しさん:2013/12/30(月) 21:57:20.31
え?なんか出んの?
596デフォルトの名無しさん:2013/12/31(火) 06:50:34.96
オレなんか高くてXE Starterさえ買えない
Lazarus(FPC)でフリーソフト作ってる。
オレのやりたいレベルでは、機能的にほぼ不足はない。
パフォーマンスにはやや不満があるが。
597デフォルトの名無しさん:2013/12/31(火) 19:01:08.90
>>596
Lazarusはどのバージョン使うのがおすすめ?
うちで1.0.14とか1.2.0RC1使おうとするとまともにデバッグできんのよ。
598喪中の名無しさん:2014/01/01(水) 02:44:09.95
>>597
デバッグって、Andoroidのデバッグ?
ならAndoroid用の開発はしてないんで、わかりませんが。

こちらのいまのWin32用の開発環境は1.0.6(FPC2.6.0)です。Lazarus自体も安定してます。
別にこのバージョンにこだわってるわけじゃなくて、特に不具合もないので使ってるだけですが。
Win7に移行したあと、J++ランタイムとか入れるのが嫌だったのでTurbo Delから乗り換えて、
0.9.30辺りから常用していますが、私用であれば十分使いものになると思いますよ。
599デフォルトの名無しさん:2014/01/05(日) 08:56:10.57
すごいなこれ
600デフォルトの名無しさん:2014/01/05(日) 16:33:51.89
Delphi使いです。

Win32のGUIアプリを作る場合、Lazarusに対するDelphiのアドバンテージは何?

Wikiで調べる限り、Lazarusで十分でありDelphiのアドバンテージは無いように
思えるのですが・・・
601デフォルトの名無しさん:2014/01/05(日) 17:43:05.75
じゃあ実際に作ってみればいいんじゃない?
602デフォルトの名無しさん:2014/01/05(日) 19:51:10.08
インストールして学習して作成するのが大変なので、
識者にお聞きしているんですよ、クソガキ君。
603デフォルトの名無しさん:2014/01/05(日) 19:53:26.25
>>600
思ったとおりだよ
604デフォルトの名無しさん:2014/01/05(日) 19:54:18.98
Delphiのアドバンテージは日本語の情報が多いということぐらいかな
605デフォルトの名無しさん:2014/01/06(月) 01:38:33.54
>インストールして学習して作成するのが大変なので、
答え自分で出してるじゃん
自分の考えてることが自分で分からないとか病院行った方がいいんじゃないかな?
606デフォルトの名無しさん:2014/01/06(月) 06:14:05.28
>>603, 604
レスありがとう。

Webで拾ったソース付きのDelphi用コンポーネントをLazarusに
インストールすることはできるのでしょうか?
607デフォルトの名無しさん:2014/01/06(月) 07:49:06.09
>>606
そのままではほぼできないと思って良いよ。
移植して腕を磨くのが吉。
608デフォルトの名無しさん:2014/01/06(月) 18:43:00.61
>>605
ここでは誰でもなりすまし出来るから
609デフォルトの名無しさん:2014/01/06(月) 19:18:38.60
>>607
そうですか。
移植したのがどっかのサイトに集まっていれば良いのにね。
610デフォルトの名無しさん:2014/01/27(月) 14:00:12.68
XE3 を買ってみました。
7 からの移行なので戸惑ってますが、
コードウインドウとフォームのウインドウは並べて表示って、出来無くなったんでしょうか?
611デフォルトの名無しさん:2014/01/27(月) 14:45:07.87
フローティングデザイナでググれ
それよりなんでわざわざ2世代も前のXE3なんかを買ったのかが知りたい
612デフォルトの名無しさん:2014/01/27(月) 15:01:03.58
単にXE5のtypoでしょう
XE3ってまだ買えるの?
613デフォルトの名無しさん:2014/01/27(月) 16:43:44.64
パッケージならまだ普通にあるんだが
Amazonでも売ってるし
614デフォルトの名無しさん:2014/01/28(火) 00:37:22.78
>611
どもども。
何とかなりました。

XE3 は ずいぶん前にヤフオクで、安かったので買いました。
Por が 4万弱でした。
615デフォルトの名無しさん:2014/01/28(火) 20:47:12.12
ぽぅっ!
616デフォルトの名無しさん:2014/01/29(水) 01:10:57.60
4万が安いとかいう金銭感覚
617デフォルトの名無しさん:2014/01/29(水) 02:20:45.21
貧乏人はMSの無料環境でも使ってればいいんじゃないすかね?(鼻ほじ
618デフォルトの名無しさん:2014/01/29(水) 17:46:47.39
ちょっとTPageControlのTTabSheetの色について教えてください。

TTabSheetの色って、昔はclBtnFaceだったと思うんですが
今は白色ですよね(Windowsのテーマに依存してる?)

TPanelなどのほとんどのコントロールは上に配置しても透過されて
背景が同じ色になるんですが、一部のもの(TLinkLabelとか)は
背景がclBtnFaceのままで、かなり違和感があります。

で、今はテーマのOn/Offを調べてColorプロパティを適当に
設定してますが、その時点でのTTabSheetの本当の色って
どこかから取得できます?
619デフォルトの名無しさん:2014/02/05(水) 12:05:53.54
質問です。
VB6のソースコードをDelphiのソースに変換してくれるいいツールをご存じな方はおられないでしょうか?
有料でもかまいません。
もちろん変換後に作業がたくさん発生することはわかっています。
VBto Converterを使ってみましたが、文字コードの影響か、ソースが途中で切れてしまいます。
書き直した方が早いというのももっともだと思いますが・・・
620デフォルトの名無しさん:2014/02/05(水) 14:33:13.89
書き直したほうが早い
621デフォルトの名無しさん:2014/02/06(木) 01:43:18.94
そういうツールをVBで作ればええやん
622デフォルトの名無しさん:2014/02/06(木) 02:01:46.81
>>619
有料で請け負うよ
623デフォルトの名無しさん:2014/02/06(木) 07:44:34.44
>>622
有料で請け負う場合は書き直すの?
624デフォルトの名無しさん:2014/02/06(木) 07:48:35.80
>>621
VB6で?
スレ的にはDelphiでなのでは?
っていうか、コンバーターは誰も使ったことないの?
625デフォルトの名無しさん:2014/02/06(木) 12:16:20.90
…馬鹿なの?
626デフォルトの名無しさん:2014/02/06(木) 12:48:23.16
>>619
コンバーターを利用するのもなかなか捨てたもんではないぞ。
VBto Converterの以前のバージョンは途中で切れていたが、最新版は途中で切れたりしなくてなかなかよい。
トライアル版は600行までっていう制限があるが、VB6のソースファイルを分割して別々に変換して後で連結すれば問題なし。
もちろん後で作業がいくつもあるのだが、スクラッチから始めるよりも楽だと思う。
627デフォルトの名無しさん:2014/02/06(木) 13:55:02.39
まさかの自演
628デフォルトの名無しさん:2014/02/06(木) 14:40:25.82
規模は?
629デフォルトの名無しさん:2014/02/06(木) 18:39:06.45
ロジックが長いプログラムだったら、コンバーターを使う意味もあるかもな
630デフォルトの名無しさん:2014/02/06(木) 20:41:46.64
delphi to vb は有るが
bv to delphi 無い
今時ベンダーが依頼しない
個人の趣味はあるかもしれないが
631デフォルトの名無しさん:2014/02/07(金) 04:40:09.93
>>630
VB6だったらVBへの移行がベスト?
632デフォルトの名無しさん:2014/02/07(金) 08:12:10.56
死ねゴミ
633デフォルトの名無しさん:2014/02/07(金) 13:04:25.23
>>631
VBに移行するにしても普通書き直した方が早いな。
移行しないという選択肢があるならそのままVB6にしておけば?
634デフォルトの名無しさん:2014/02/07(金) 13:20:13.00
つうかVBスレで聞けよ
635デフォルトの名無しさん:2014/02/11(火) 20:32:16.32
プログラムなんてTK-80 BS BASIC以来なんで、今時の言語見てもじぇんじぇん分かりません。

そんな俺の野望はNゲージの電車をPCで動かすことなんですが、(DCモーターを
チョッパ制御するだけです)、DELPHIでUSBを制御するのはどうしたらいいんでしょ?
636デフォルトの名無しさん:2014/02/11(火) 22:18:39.07
単にUSBで通信するなら

WinUSB Interface for Delphi
ttp://sourceforge.net/projects/winusb-delphi/

TWINUSB BULK通信コンポーネント
ttp://www.csd.co.jp/contents05.html

このあたりかな。
637デフォルトの名無しさん:2014/02/12(水) 17:33:58.54
>>630
Delphi10年以上前にやってた者だけどDelphiってそんなに厄介者になってるのか…
VB.NETなんかデプロイがたいへんそうなんだけどな
638635:2014/02/12(水) 18:32:23.49
>>636
ありがとうございます。
でも、なんだか難しそうですね。上のは英語だし、下のは有料かぁ。。。
僕の想像では、Cの fprint の書式をうにゃうにゃするみたいな感じで、テキトーにI/Oにアクセス
できるのかなと思っていたのですが、ドライバを別に用意しないといけないのですか。
ハードル高いです。

>>637
delphiかっこいいと思うんですけどねぇ。なんで流行らないんだろ。
639デフォルトの名無しさん:2014/02/12(水) 20:36:07.37
CSDさんのは使うだけならただですが…(ソースは有償)。

VB6はどっちに行くにも変換じゃ済まないので不良資産化してますな。
Delphiはバージョンアップだけで基本的にそのまま動くけど。
640デフォルトの名無しさん:2014/02/13(木) 00:18:30.15
>>637
いいか悪いかという問題ではなく、VBを使える人間はいるがDelを使える奴がいないからVBに変換したいって会社があるってことだな
641デフォルトの名無しさん:2014/02/13(木) 00:35:29.93
>>638
Delphiが流行らないのは値段が高いし、迷走したし、知名度低いし、VB6ほど気軽に使えないし、コードの見た目良くないし。
642デフォルトの名無しさん:2014/02/13(木) 00:57:59.42
>>641
お前馬鹿? Delphi ほど美しいコードは他にないだろ?
643デフォルトの名無しさん:2014/02/13(木) 02:58:40.54
いまさらVB6とか老害すぎて乾いた笑いしか出ない
644デフォルトの名無しさん:2014/02/13(木) 07:36:30.72
>>642
どんなところが?
645デフォルトの名無しさん:2014/02/13(木) 07:47:08.48
とりあえずCの
i =2;
で代入はおかしい
646デフォルトの名無しさん:2014/02/13(木) 10:42:04.59
キチガイアンチは頼むからエンバカスレに引きこもってろよ
お前がいくら屑でも、最低限のルールくらい守れるだろ?
それともスレ違いかどうかも理解できないほど判断力が低下してるのか?
647デフォルトの名無しさん:2014/02/13(木) 13:35:33.89
>>646
なぜ流行っていないかということは超初心者の疑問だから扱ってもいいんじゃない?
648デフォルトの名無しさん:2014/02/13(木) 14:32:50.10
質問です
FireMonkeyのTFlowLayoutは横に並べるのはわかったんですが、
縦に順に並べるにはどうしたらいいでしょうか?
バージョンはXE5です
649デフォルトの名無しさん:2014/02/13(木) 17:47:23.67
というか流行る必要ってなくね?
むしろ流行ってほしくない
650デフォルトの名無しさん:2014/02/13(木) 18:05:53.05
流行りものをありがたがる男の人って…
651635:2014/02/13(木) 18:59:12.40
>>639
そうでしたか。じゃぁ、それを使ってみることにします。

>>641
素人さんなんで、CもPASCALも似たようなもんと思えてしまう^^;
プロから見れば違うんだろうけど。
とりあえず、Cの { } がヤなんですね。ミミズののたくったみたい。
652デフォルトの名無しさん:2014/02/13(木) 20:20:41.03
>>649
初心者としては個人や企業で使っている人が余りにも少ないと他の言語を覚えた方がいいのではないかと不安になります
653デフォルトの名無しさん:2014/02/13(木) 21:21:10.59
杞憂でしょう
654デフォルトの名無しさん:2014/02/13(木) 21:25:39.88
そうですか、安心しました
655デフォルトの名無しさん:2014/02/13(木) 23:01:43.84
利用者が少ないから使わないってくだらん
知名度を理由に貶す奴は頭弱そう
656デフォルトの名無しさん:2014/02/13(木) 23:19:17.08
>>652
その感覚は重要
使われてないのにはそれなりに理由があるからね

□産み出されたばかりで知名度が低くて使われていな場合
ドキュメントが少ない

□それそのものが糞だから使われていない場合


他にもあるだろうけど、良いものならみんなが使ってるよ
657デフォルトの名無しさん:2014/02/14(金) 00:03:49.33
なるほどね
じゃあ間違いなくこのスレのみんなが使ってるDelphiは良いものってことか
658デフォルトの名無しさん:2014/02/14(金) 00:08:12.08
Delphiは良いもの。はっきりわかんだね。
659デフォルトの名無しさん:2014/02/14(金) 00:16:40.58
そうですか、安心しました
660デフォルトの名無しさん:2014/02/14(金) 00:19:07.86
みんなが使ってるものだから安心感がある
理由なんてそれ以外全部後付け
661デフォルトの名無しさん:2014/02/14(金) 00:19:47.57
DelphiってWindows向けのソフトウェアしか開発できないんですよね?
これからはマルチプラットフォームの時代だと思うので、他の言語を覚えた方がいいのではないかと不安になります
662デフォルトの名無しさん:2014/02/14(金) 00:23:42.50
>>661
その感覚は重要
でも今はWindows以外にMac OS XやiOSにAndroidと、複数の環境へのクロスコンパイルに対応しているからね

□各OSで用意されている言語を使う場合
それぞれの言語を習得する必要あり、OSごとにアプリケーションを作り直さなくてはならない

□Delphiを使う場合
FireMonkeyというマルチプラットフォームに対応したフレームワークのおかげでワンソースでOK

他にもあるだろうけど、良いものだからみんなが使ってるよ
663デフォルトの名無しさん:2014/02/14(金) 00:24:34.17
マルチプラットフォーム対応=もっさりアプリだから使いたくない
664デフォルトの名無しさん:2014/02/14(金) 00:25:20.98
Javaのことですねわかります
665デフォルトの名無しさん:2014/02/14(金) 00:39:22.48
Cのソースきったなすぎて目が腐る
あの構文に何の疑問も感じない人間は美意識どうかしてる
666デフォルトの名無しさん:2014/02/14(金) 00:52:39.86
>>663
JVMはダメだよね
やっぱりネイティブじゃないと♪
667デフォルトの名無しさん:2014/02/14(金) 05:00:38.64
>>662
> 良いものだからみんなが使ってるよ
「良いもの」には同意だが、「みんなが使ってる」にははげしく同意できない。
668デフォルトの名無しさん:2014/02/14(金) 05:03:38.96
>>655
仕事で使うとなると、自分が異動した後のことを考えて、マイナーな言語は上司が避ける傾向にありますので不安です。
669デフォルトの名無しさん:2014/02/14(金) 05:04:40.22
>>656
Delphiはどういうことが原因で使われていないのですか?
670デフォルトの名無しさん:2014/02/14(金) 05:16:46.85
結局、Microsoft、Sun、IBMのように、開発ツール以外もビジネスをやっている会社が、
C#、VB、javaを推奨するものだから、総合力でDelphiはビジネス的に不利になったということですか?
671デフォルトの名無しさん:2014/02/14(金) 08:04:25.76
ヘジルスバーグ引き抜き
672デフォルトの名無しさん:2014/02/14(金) 08:12:54.74
Standard Pascal は糞だけど Object Pascal は最強
673デフォルトの名無しさん:2014/02/14(金) 08:18:57.12
プログラマにとって重要なものは言語ではなくセンスだ。
674デフォルトの名無しさん:2014/02/14(金) 09:05:51.61
Delphiが使われていないのは良さを理解できない世の中が悪い
675デフォルトの名無しさん:2014/02/14(金) 09:24:08.60
また変な人が痛いDel厨を演じてるようですな
676デフォルトの名無しさん:2014/02/14(金) 10:15:42.79
C言語厨よりマシ
677デフォルトの名無しさん:2014/02/14(金) 11:01:16.56
Microsoftの資本が入ったときに落ちぶれていく施策を採用させられたからですか?
678デフォルトの名無しさん:2014/02/14(金) 11:03:54.79
ネイティブアプリは業務アプリには危険という認識が広まったというのも一因かな。
679デフォルトの名無しさん:2014/02/14(金) 11:31:37.50
iOS/Androidの同一ソース開発が安定するようになると、もう少しメジャーになるのでしょうか?
今のところ、モバイル開発者がDelphiをやり出したという話はほとんど聞きません。
680デフォルトの名無しさん:2014/02/14(金) 13:15:08.47
やっぱり会社が変わりすぎたのが敗因かな
多プラットフォーム対応も方針が変わりすぎた
MSが.NET以降に手間取ってる隙がチャンスだったんだけど、
.NET版Pascalとか出しちゃうしチャンスを逃してる
681デフォルトの名無しさん:2014/02/14(金) 14:51:04.95
いい加減そういうのはエンバカデロスレでやってくれ
ここは言語やライブラリの使い方に関する質問スレだ
そういう質問をする気も答える気もないなら消えてくれ

>>648
TFlowLayoutには縦に並べる機能はないが、TFlowLayoutをTFlowLayoutの中に横に並べて、
1つずつTFlowLayoutBreakをすれば擬似的に縦に並ぶようにはなる
あとはこちらでは試してないけど、こういったのを作ってる人もいるから参考に
http://delphihaven.wordpress.com/2013/02/03/writing-a-simple-firemonkey-tlistlayout-implementation/
682デフォルトの名無しさん:2014/02/14(金) 15:06:07.62
複数のPCに導入する予定のプログラムで、
自作フォーム上にPDFを表示したいのですが、何か方法はありますでしょうか?
わかる方がいましたらご教示願います。
683デフォルトの名無しさん:2014/02/14(金) 15:23:59.49
>>682
adobe readerインスコしてTWebBrowser(もしくはTEmbeddedWebBrowser)
684デフォルトの名無しさん:2014/02/14(金) 16:47:30.43
>>682
PDFの操作をしたかったり、Adobe Readerに依存したくなければ、
Active PDFのようなフリーのコンポーネントを使う手もあります。
685デフォルトの名無しさん:2014/02/14(金) 19:59:13.01
ありがとうございます。683さんの方法で何とか実現できそうです。
もうひとつ質問なのですが、PDFの1ページ目のサムネイルを得る方法はないでしょうか?
Acrobatや有料コンポーネントなどを買えば可能なようですが、
予算的に厳しいため、できれば無料か、高くても数千円で済むようだとありがたいです。
686デフォルトの名無しさん:2014/02/14(金) 21:13:23.26
TWebBrowerに一度表示させてスクショを取るとか(キャプチャはWinAPIで出来る)
687635:2014/02/16(日) 22:44:03.94
素人な質問でごめんなさい。

あの Type というのは一体どういうものなんでしょう?
Var とかぶってるところもあるし、なんかイマイチ分からないですね。
688デフォルトの名無しさん:2014/02/16(日) 23:00:35.65
型宣言と変数宣言
689635:2014/02/16(日) 23:03:36.67
>>688
ありがとうございます。
でも、その 型宣言 というのがイメージが湧かないんですよ。
解説本見てもちゃんとした説明がないですし。
690デフォルトの名無しさん:2014/02/16(日) 23:09:47.31
Varが 変数を宣言するのに使う。

Typeが、型を宣言するのに使う。
構造体や配列、レコード型など
ユーザーが型を作ることが出来る。
691デフォルトの名無しさん:2014/02/16(日) 23:16:15.37
692デフォルトの名無しさん:2014/02/17(月) 22:19:19.71
Delphiって関数を使うときにその関数の記述部分が前にないといけないと聞いたのですが本当ですか?
693デフォルトの名無しさん:2014/02/17(月) 22:59:23.87
定義か宣言のいずれかが必要です。Cのように暗黙に関数を仮定することはできませんが、
(Cのプロトタイプ宣言に相当する)前方宣言を用意しておけばOKです。
694デフォルトの名無しさん:2014/02/18(火) 09:53:18.79
Cでいうところのヘッダーファイルがひとつにくっついてる感じ
695デフォルトの名無しさん:2014/02/18(火) 11:14:18.03
forward宣言はpascal本来の文法にもある
unitのinterface部のところはDelphi/Turbo Pascalの拡張じゃなかったかな
696デフォルトの名無しさん:2014/02/18(火) 15:31:54.07
>>692
宣言が前方にある必要があるだけで、実装の記述が前方にある必要はないよ
ついでに言えば、実装の方は下記のように引数や戻り値を全部省略して書いてもいい

function Test(A, B: Integer; C: string = 'test'): string; forward;

procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage(Test(1, 2, '3'));
end;

function Test;
begin
 Result := 'hoge';
end;
697デフォルトの名無しさん:2014/02/18(火) 16:23:26.69
>>696
誰もhoge荒らしにきいてないんだからさっさと消えろよ
698635:2014/02/18(火) 19:51:53.15
>>690
うーん。なんだか分かったようなわかんないような(←ほとんど分かってない)
ま、構造体も配列もまだ使う予定ないから、わかんなくても良しとしよう!
それにしても、みんな何であんなの簡単に使いこなせるんですかねぇ。

>>691
これは良いモノを教えていただきました。ブックマークしときますね^^
699デフォルトの名無しさん:2014/02/19(水) 12:00:39.71
消えるのはお前だな > 697
700デフォルトの名無しさん:2014/02/19(水) 14:36:03.86
はい…
701デフォルトの名無しさん:2014/02/20(木) 15:55:16.23
C#のusingみたいな機能ってありませんか?
702デフォルトの名無しさん:2014/02/20(木) 17:45:42.75
つ try...finally
703デフォルトの名無しさん:2014/02/20(木) 17:49:50.70
C#使いが今頃Delphi触り始めるっていうのは、モバイル向けか?
悪い事言わんから、やめといた方が良いと思う
704デフォルトの名無しさん:2014/02/20(木) 21:28:00.12
>>702
C#のtry-finallyとusingは等価ではないんですが、Delphiでは同じなんですか?
705デフォルトの名無しさん:2014/02/20(木) 21:35:18.01
>>703
そうなんですか?
資料は少ないですが、例えばHello wordlを作ってデプロイして起動するまでは
他の環境よりかなり楽だったので、普及して本とか増えてくれたら結構いいとこいくと思います
706デフォルトの名無しさん:2014/02/20(木) 21:37:41.71
>>704
usingそのものはないよ。
707デフォルトの名無しさん:2014/02/21(金) 16:16:05.13
>>703
なぜ?
708デフォルトの名無しさん:2014/02/21(金) 16:36:56.94
エンバカと一部ユーザー?が喧伝してる夢物語が実現するとは到底思えないから
Delphi,VCL,C++Builderは本当に素晴らしい物だと思うが、エンバカになってからの
状況見てると何も明るい材料が無い
俺はVCL,C++Bulder使いだから知らないだけかもしれないが、Delphiの方はそんなに良い状況なのか?
709デフォルトの名無しさん:2014/02/21(金) 16:40:52.51
エンバカスレは別にあるからそっち行ってくれ
710デフォルトの名無しさん:2014/02/21(金) 16:42:59.99
WindowsとLinuxで同じ事が出来なかった人達に、
iなんたらとAndroidなら同じ事が出来ると思うのか?
今のIDEの出来も、もうEclipseには置いて行かれている
711デフォルトの名無しさん:2014/02/21(金) 18:55:34.45
>>708>>710
関係ない話題を繰り返したいのであれば出て行ってください
あなたがどう思うかはこのスレには関係ありませんのでチラ裏か以下のスレでどうぞ
http://toro.2ch.net/test/read.cgi/tech/1382605000/
712デフォルトの名無しさん:2014/02/21(金) 22:10:23.17
ウザい自治体の>>711はスルーで
713デフォルトの名無しさん:2014/02/21(金) 22:15:19.02
適材適所。
714デフォルトの名無しさん:2014/02/21(金) 23:02:57.95
>>711=自治体
715デフォルトの名無しさん:2014/02/24(月) 16:21:29.26
荒らしが何か言ってる
716デフォルトの名無しさん:2014/03/14(金) 23:02:45.98 ID:SeBq1h8L
初歩的な質問で申し訳ないですが...

スレッドの Create や Destroy はもしかして
メインスレッドで実行されるんですか?
717デフォルトの名無しさん:2014/03/15(土) 16:30:17.49 ID:+WFsYmz/
スレッドが、TThreadクラスの実装で使われてるOSのスレッドの事を意味するなら、
ソースを見るとスレッドの生成はTThreadのCreateコンストラクタで作成されているよーな。
つまり、君がTThreadのCreateを呼ぶタイミングで・・
718デフォルトの名無しさん:2014/03/15(土) 18:14:43.10 ID:1abxrNZC
>>717
ちょっと疑問に思ったのは、TThreadのconstructorなどで
メインスレッドの要素(VCLオブジェクトなど)へ直接アクセス
してもいいのか、それもとSynchronizeを使うべきかってことです。

それで、メインスレッドからTThreadをCreateする段階で
constructorもメインスレッドで実行されるのであれば、
constructor内でVCLオブジェクトに直接アクセスしても
問題ないですよね。
719デフォルトの名無しさん:2014/03/15(土) 18:34:42.01 ID:l3tZ6mor
逆に呼ぶだけで別スレッドで実行されるコンストラクタの作り方を知ってるなら教えて欲しい
720デフォルトの名無しさん:2014/03/15(土) 19:22:59.24 ID:+WFsYmz/
>メインスレッドからTThreadをCreateする段階で
>constructorもメインスレッドで実行されるのであれば、
>constructor内でVCLオブジェクトに直接アクセスしても
>問題ないですよね。
だ。問題ない。
別スレッドで実行されるのはoverrideするexecuteメソッド。
デストラクタはFreeOnTerminateの設定しだい
721デフォルトの名無しさん:2014/03/16(日) 14:13:47.85 ID:s2v9Bhoy
>>720
ありがとうございます。

以前より疑問に思ってたことで
これでスッキリしました。

>デストラクタはFreeOnTerminateの設定しだい

メインスレッドから明示的に解放する場合は
メインスレッドでdestructorが実行されるってこと?
722デフォルトの名無しさん:2014/03/17(月) 07:51:51.15 ID:QpwZfi7l
FreeOnTerminate=trueは実質的に使い道がないからあまり悩むな
723デフォルトの名無しさん:2014/03/17(月) 14:28:39.76 ID:NiSgUcDM
使い道かなりあるだろ
お前が使いこなせてないだけ
724デフォルトの名無しさん:2014/03/18(火) 06:53:32.63 ID:ZB+Vqles
>>723
冗談だろw
マジで行ってるならバグの元だからやめたほうがいいぞw
725デフォルトの名無しさん:2014/03/18(火) 06:56:53.03 ID:ZB+Vqles
>>723
「かなり」はないな。
「わずか」に完全非同期のスレッドに使えるけどそれほど必要じゃないし
仮に必要としてもexe別にした方がいい事のほうが多い。
726デフォルトの名無しさん:2014/03/18(火) 15:34:47.95 ID:Qsk0Z8cy
必死の自演もむなしく…
727デフォルトの名無しさん:2014/03/18(火) 19:17:52.57 ID:ZB+Vqles
自演なら時間空けた上ID変えるはw
728デフォルトの名無しさん:2014/03/19(水) 01:10:13.81 ID:YMTMO1GO
>FreeOnTerminate=trueは実質的に使い道がないからあまり悩むな
プログラムで書くならFreeOnTerminate := true;なんだが。

>>724
>マジで行ってるならバグの元だからやめたほうがいいぞw
バグというよりコンパイルが通らないが...
729デフォルトの名無しさん:2014/03/19(水) 01:46:57.53 ID:X5Pm8TEB
:のあるなしとかそんなくだらない部分にしか反論できなければ無理してレスしなくていいんじゃ?見ててしらける。
730デフォルトの名無しさん:2014/03/19(水) 07:21:28.20 ID:2cESFier
例えばここ http://wiki.lazarus.freepascal.org/Multithreaded_Application_Tutorial/ja
のサンプルの中でFreeOnTerminate=trueにもかかわらず

procedure TForm1.FormDestroy(Sender: TObject);
begin
MyThread.Terminate;

// FreeOnTerminate が true であれば、以下の記述は必要ありません。
// MyThread.Free;
inherited;
end;

などと平気でやっている。
MyThread が先に終了してたらMyThread.Terminateはアクセスバイオレーションだ!
つまりFreeOnTerminate=trueの時はメインスレッドからサブスレッドを制御するのは
サブスレッドの実体をメインスレッドに持っているだけではできないのだ。
そしてFreeOnTerminate=trueの唯一のメリットは「処理が終わったら余分なメモリが空くこと」だが
それはFreeOnTerminate=falseでもスレッドリストを作りガベージコレクトを適切に行うことで解決できる。
これらのことからするとFreeOnTerminate=trueは実質いらない子なのである。
731デフォルトの名無しさん:2014/03/19(水) 07:30:16.83 ID:2cESFier
ちなみに「スレッドリストを作りガベージコレクト」とは
単に、適当なタイミング(新しいスレッドを作るときとかタイマで10分毎とか、どうするかはプログラマの自由)で
if MyThread.finished then MyThread.Free;
とするだけのことである。
サブスレッドが複数なら
for i:= 0 to thredlist.count-1 do
if thredlist[i].finished then thredlist[i].Free;
とかね。
732デフォルトの名無しさん:2014/03/19(水) 07:42:15.76 ID:2cESFier
初心者スレなのでさらに正確に書くと
if Assigned(MyThread) and MyThread.finished then begin
MyThread.Free;
MyThread:= nil;
end;
か。
なお以前は
MyThread.Free;
MyThread:= nil;

FreeAndNil(MyThread);
にするとなぜかうまく行かなかったが今はどうか知らない。
733デフォルトの名無しさん:2014/03/19(水) 08:22:24.10 ID:2cESFier
なお、もちろん「少量のメモリ使用なんて気にしない」という
ならガベージコレクトは不要だ。
仮にサブスレッドが大量のメモリを使うとしても、executeの
最後でそれらを開放してやればいいだけの話なので
眠ってるスレッドが消費するメモリなんてたかが知れている。
734デフォルトの名無しさん:2014/03/19(水) 10:31:13.07 ID:Wx0a5I3W
まぁ初心者スレなのでFreeOnTerminateは普通Falseだろ、といわれりゃそうだけど、
>FreeOnTerminate=trueは実質的に使い道がないからあまり悩むな
は乱暴すぎるな。せめて"わからないうちはFalseで十分"くらいにしとけ。
735デフォルトの名無しさん:2014/03/19(水) 14:33:07.91 ID:NwQr/+gL
自論を守ることに必死になって本来使われるべき場面すら否定してるだけでしょ
バカはほっとけ
736デフォルトの名無しさん:2014/03/19(水) 16:01:20.43 ID:T8UZmlef
子スレッドを使う基本 = やらせて放置、終わったら「終わったよ」報告(1)をさせる

メインから終わらせたければ「終わってくださいお願いします」フラグを立てる =
  AThread,Terminate; を呼ぶなど。

(1)の旗はメイン側の場所に作っておく、旗が立ったら次へ。
インスタンスの破棄は子スレッドに任す


TThread のつくりがこういう使い方を想定して作られてるので、それに従うのが紛れがなくていいぞ。
737デフォルトの名無しさん:2014/03/19(水) 19:46:18.29 ID:2cESFier
>>735
「本来使われるべき場面」とは?
ちなみに私がバカというのはあたってますが、
ガベージコレクトを標準搭載している言語ではごく普通の手法なので「自論」ではないです。

>>736
それだとメインの旗を立てる際にsyncronizeしないと
いけないので私の提示したた手法より複雑になります。
そして「TThread のつくりがこういう使い方を想定して作られてる」というのは誤解と思われます。
738デフォルトの名無しさん:2014/03/19(水) 22:17:04.02 ID:VkMj3BIA
ちょっと教えてください

Delphi7で作成した32ビットアプリケーションをx64のWOW64環境で動かすのですが
プログラムからProgram Files(64ビット用),SYSTEM32のリソース用EXE,DLLをロードする必要があり

SYSTEM32の方は"%WinDir%\Sysnative"でいけるのですが
Program FilesはProgram Files (x86)にリダイレクトされてしまします
Wow64DisableWow64FsRedirectionやリンクを使わない方法ってありますか?

動作環境の方はNT系のx86(NT4以降),x64(XP以降)サーバーOSも含みます
739デフォルトの名無しさん:2014/03/19(水) 23:45:37.42 ID:YMTMO1GO
>>729
だったら無視すればいいのにw

>>731-732
>MyThread.Free;
>MyThread:= nil;
Freeしてnilする間に呼ばれたらどうするの?
こんな馬鹿の為にFreeOnTerminateは必要なのかなw
740デフォルトの名無しさん:2014/03/20(木) 01:54:02.08 ID:vqexB7VW
>738
64のプログラムがProgram Filesに、
32のプログラムはProgram Files(x86)、
で良いのでは?
741デフォルトの名無しさん:2014/03/20(木) 07:01:48.61 ID:6vGw0ZTO
>>739
Freeにはスレッドが終了するまで待つ処理が入ってますから問題無いですよ。
調べずに書く人はバカな私よりバカだと思います。
742デフォルトの名無しさん:2014/03/20(木) 07:22:58.71 ID:aCZWTFRX
そういうこと考えないでいいのが FreeOnTerminate
743デフォルトの名無しさん:2014/03/20(木) 08:45:40.83 ID:6vGw0ZTO
>>742
まあそうですが、その代わり>>736さんが適切に指摘されているような機能を実装する必要がありますから
結局面倒ですよね。
744デフォルトの名無しさん:2014/03/20(木) 09:09:09.35 ID:6vGw0ZTO
あと、考えるのが面倒、調べるのも面倒、でも心配というのなら
mythread.WaitFor;
mythread.Free;
mythread:= nil;
とすればよいだけの話です。
745デフォルトの名無しさん:2014/03/20(木) 14:27:34.60 ID:O3H8Rb0w
それスレッド使う意味なくね?トンデモすぎてもう本末転倒だよ…
お前の糞コードには文句言わないから、せめて何も知らない初心者は巻き込まないで
746デフォルトの名無しさん:2014/03/21(金) 00:36:10.17 ID:pbbcuVJV
>>741
>Freeにはスレッドが終了するまで待つ処理が入ってますから問題無いですよ。
えっ?本当に馬鹿なんだw
マルチスレッドの意味が分からないのかな?

Freeとnilの間と言う意味が分かってないんだね、こんな馬鹿が作ると
タイミングによって出たり出なかったりするバグを作りだして非常に迷惑するんだよな。
747デフォルトの名無しさん:2014/03/21(金) 02:02:48.57 ID:PlAj+MNn
そもそも初心者がマルチスレッドなんてやるの? そんなのできたら中級以上だよ
748デフォルトの名無しさん:2014/03/21(金) 11:14:31.18 ID:UsfjXS01
なんかあれだな   基本的に親スレから子スレをいじるのはご法度だよ

さわらぬスレにたたりなしって、知らんのか?
749デフォルトの名無しさん:2014/03/21(金) 12:12:00.72 ID:dYaCWWLA
ところで、>>741が言ってる

「Freeにはスレッドが終了するまで
待つ処理が入ってます」って本当なの?
750デフォルトの名無しさん:2014/03/21(金) 14:07:24.14 ID:aCiCqmdu
>>749
本当
751デフォルトの名無しさん:2014/03/21(金) 21:20:49.05 ID:dYaCWWLA
>>750
なるほど

ほとんどTThreadとか使わないんだけど
改めてHelpを見ると書いてあるね

てか、自分でFreeするんだったら
MyThread.Terminateなんか不要じゃん
752デフォルトの名無しさん:2014/03/21(金) 22:15:52.10 ID:aCiCqmdu
いや、それはまた別。Terminateのヘルプに書いてあるけど、
途中で処理をキャンセルしたい場合に使う。
753デフォルトの名無しさん:2014/03/22(土) 20:11:57.19 ID:458foGzL
でも途中キャンセルしたらほとんどの場合はそのままFreeするからやっぱりいらないよね
754デフォルトの名無しさん:2014/03/23(日) 08:33:53.01 ID:ZLskKlYl
いちどWinAPIだけでスレッド書いてみれば良い
意味がよく分かる
755デフォルトの名無しさん:2014/03/24(月) 07:36:57.69 ID:Eiiayiu7
>>746
終了したスレッドが勝手に動き出すとかないですから問題無いですよ。
あなたスレッドの動作や意味を間違えたますよね完全に。
多分Delphiしかできない人なんでしょうけど他言語も触ってみると良いですよ。
756デフォルトの名無しさん:2014/03/24(月) 08:03:56.24 ID:Eiiayiu7
>>748
それで顧客が納得してくれれば苦労はしないのです。
あなたが親子という概念を既に導入していることからも分かる通り
親側でクローズボタンが押されても子が終了するまで待つという
ようなプログラムではダメ出しされるのが通常だからです。
そこで
Mythread.terminate;

Mythread.free;
が必要になるわけですが
FreeOnTerminate=trueだとMythreadが終了してたらアクセスバイオレーションになるから
工夫が必要だよさあどうするというのがメインの論点です。
757デフォルトの名無しさん:2014/03/24(月) 08:09:51.06 ID:osm7C2MP
まさか仕事でマルチスレッドプログラム書いてて
同期オブジェクトやスレッド間通信用のメッセージングの仕組みを
用意してないとか言わないよな?
758デフォルトの名無しさん:2014/03/24(月) 08:15:34.47 ID:Eiiayiu7
ひとつの解決方法は >>736さんの提示された
FreeOnTerminate=trueのまま工夫する方法です。
もうひとつは私が提示したFreeOnTerminate=falseにして
必要ならガベージコレクト機能を組み込むという方法です。
あとは具体的解決方法も示さずバカだのアホだ
のいうだけの人が約1名いるという状況です。
759デフォルトの名無しさん:2014/03/24(月) 08:22:55.85 ID:Eiiayiu7
>>757
スレッド間通信もひとつの手ですね。
ただそこまで必要ないことのほうが多いです。
DelphiのThreadクラスの優秀さはスレッド間通信を使用しなくても簡単に
マルチスレッドアプリができるというところにあると思います。

なお、758は756の続きでありあなたへのレスではありません。
760デフォルトの名無しさん:2014/03/24(月) 08:52:25.38 ID:Eiiayiu7
>>757を受けてここまでの状況をまとめ直しました。

Q 親子型スレッドを作るにはどうればいいの?

A1 >>736さんのようにFreeOnTerminate=trueでサブスレッド側からメイン側のフラグを操作する。
A2 >>757さんのようにFreeOnTerminate=trueで同期オブジェクトやスレッド間通信で処理する。
A3 FreeOnTerminate=falseにして、必要ならスレッドマネージャ(≒ガベージコレクト)機能を組み込む。
番外 具体的解決方法も示さずバカだのアホだのいうだけの人が約1名。
761デフォルトの名無しさん:2014/03/24(月) 15:50:15.88 ID:TTLwjTKi
Delphiハックで有名な人らがFreeOnTerminateはTrueのほうがよく使うと発言してる件
762デフォルトの名無しさん:2014/03/25(火) 08:44:40.07 ID:5thxtN7r
>>761
730で示したとおりLazarusのWikiでさえ間違ってますから
FreeOnTerminate=trueの方が多数派の可能性は十分あるでしょうね。
私も最初はFreeOnTerminate=trueから始め、A1やA2を採用しておりました
(なお、同期オブジェクトやスレッド間通信は今でも必要に応じて他の目的のために使うことがあります)。
スレッドマネージャ型に気づいたのは、他のガベージコレクション標準搭載言語でのスレッド処理や
ゲームプログラミング(擬似マルチスレッドですが)で最近?流行のオブジェクト管理方法に触れた時です。
眼から鱗でした。
初心者の方は、A1〜A3型すべての親子型スレッドのサンプルを作ってみると勉強になると思います。
763デフォルトの名無しさん:2014/03/25(火) 16:06:46.24 ID:JWqzamQX
Delphiと関係ないLazarusのwikiを持ち出して間違ってると言われましても…
それ以外に自分の意見を補強できる資料が無かったんだろうけどw
764デフォルトの名無しさん:2014/03/26(水) 00:02:18.41 ID:3vOQuU/w
>>755
>終了したスレッドが勝手に動き出すとかないですから問題無いですよ。
誰もそんなことを問題にしていない。
Freeしてnilする間に使われたらどうするんだと言っている。
そんなプログラムを組んでいたらAccess Violationになるぞ。
こいつ本当にマルチスレッドのプログラムを作ったことがあるのか疑問だ?
765デフォルトの名無しさん:2014/03/26(水) 00:17:56.35 ID:PxlFEF9w
複数スレッドから読まれることを前提としてたら普通は一時変数に取ってnil入れてそれから解放するわな(FreeAndNilの実装)
766デフォルトの名無しさん:2014/03/26(水) 00:47:26.59 ID:qmu2UESc
まぁ、技術レベルが低くて代入演算子に:がないからコンパイルできないとか
本題と関係のない事にしか突っ込むしかできな奴が「マルチスレッドのプログラムを作ったことがあるの?」
と言ってもジョークにしか聞こえないけど。
767デフォルトの名無しさん:2014/03/26(水) 08:11:38.29 ID:r65XrFp2
>>764
「使われる」とはどういう意味ですか?
例えば以下のプログラムで誰がFreeしてnilする間に使うのですか?

TForm1=class
button1: TButton;
timer1: TTimer;
private
mythread: TMythread;
end;

TForm1.Button1click;
begin
if Assigned(mythread) then mythread.Free;
mythread:= TMyThread.create;
end;

TForm1.Timer1Timer;
begin
if Assigned(mythread) and mythread.finished then begin
mythread.Free;
mythread:= nil;
end;

TForm1.FormDestroy;
begin
if Assigned(Mythread) then mythread.Free;
end;

こいつ本当にマルチスレッドのプログラムを作ったことがあるのか疑問だ?
768デフォルトの名無しさん:2014/03/26(水) 08:32:03.41 ID:r65XrFp2
ちなみに上のプログラムは端折って書いているのでコンパイルできません。
初心者の方には申し訳ないですが是非自分でプログラムしてみてください。
なお、既に述べたとおり、ガベージコレクト部分(上のプログラムのTForm1.Timer1Timerメソッドの部分)
は必ずしも実装する必要はありません。
769デフォルトの名無しさん:2014/03/26(水) 10:57:22.97 ID:MFJ22iPr
だからさあ  メイン側で余計なことする必要なんぞない
タイマー持ち出すとか正気の沙汰じゃない

サブスレッドは仕事終わったら結果残して (残す必要もない場合だってある) 
ひっそりと自ら消えていけばいいだけだよ。
770デフォルトの名無しさん:2014/03/26(水) 11:58:16.25 ID:r65XrFp2
>>769
今後必要になった時に「そういえばあんな議論があったな」と思い出して
いただければ結構ですよ。A1〜A3どれもやる必要がないのであれば
用いる必要がないのは当然です。
(あまりにも当然過ぎてあなたを除き誰もそこには疑問を持っておりません)

また、上のプログラムはあなたを含めた初心者宛ではなく
「本当にマルチスレッドのプログラムを作ったことがある」764さん宛のものですので
参考にしないでください。
なお、ガベージコレクトは必須ではないですし、タイマーでやらなければいけないという
ものでもありません(既に書きました)。ですから「タイマー持ち出すとか正気の沙汰じゃない」
という感想も全くマトハズレです。
771デフォルトの名無しさん:2014/03/26(水) 12:04:58.57 ID:r65XrFp2
>>763
出所(ソース)不明なだけでなく「Delphiハックで有名」という威光をバックに
自分の意見を補強するよりはだいぶマシかとw
772デフォルトの名無しさん:2014/03/26(水) 14:58:18.26 ID:zZlUGj+i
つまりどっちもどっちってことか
2chに書くような屑の言葉を信用するなってことだなw
773デフォルトの名無しさん:2014/03/26(水) 18:00:37.20 ID:r65XrFp2
>>763
あと、よく読めば分かると思いますが
自分の意見の補強ではなくむしろ相手の意見の補強に使ってるのですが・・・
774デフォルトの名無しさん:2014/03/26(水) 19:34:57.44 ID:BF9ctGYU
自分の望み通りの動作でバグ無く動きゃいいんだよ
775デフォルトの名無しさん:2014/03/26(水) 19:56:45.56 ID:KA6gGFh4
ていうかスレッドの質問って初歩的な質問なんですね。
私は業務でDelphiのプログラムを作ってますが、マルチスレッドの
プログラムなんぞ作ったことがありません。
最近の初心者のみなさんは素晴らしい技術をお持ちですね。
776デフォルトの名無しさん:2014/03/27(木) 07:19:19.10 ID:ArBm9NmN
そうですね!
777デフォルトの名無しさん:2014/03/27(木) 14:13:11.20 ID:5hMYU59G
自分は初心者だけど、ネット関連のアプリ作ってて
スレッドは多用するな

ちなみに、スレッドの解放にFreeは使わない
理由は、解放中、メインスレッドが停止するから

最悪でも1、2秒の停止時間に文句を言う利用者がいるからね
778デフォルトの名無しさん:2014/03/27(木) 15:07:12.77 ID:6x5K07pQ
>>775
それで質問はなんですか?
どうでもいい感想はチラシの裏にお願いします。
779デフォルトの名無しさん:2014/03/27(木) 18:24:52.12 ID:LkX3HMZn
>>778
お前を消す方法は?
780デフォルトの名無しさん:2014/03/27(木) 19:31:29.40 ID:6x5K07pQ
>>779
あなたが死ねば、色々まとめて消えます。
781デフォルトの名無しさん:2014/03/27(木) 19:34:08.09 ID:loEnDXuM
バグと共ににっちもさっちも往かず
沈みます
さようなら
782デフォルトの名無しさん:2014/03/27(木) 19:45:12.28 ID:c5YDAWUv
このスレには質問と回答以外は書いちゃダメらしいぞ。
783デフォルトの名無しさん:2014/03/27(木) 19:51:43.82 ID:ArBm9NmN
>>777
ネット系はスレッド必須っすよね。初心者で対応できるとはさすがです。
でもどこかでTerminate使うなら結局一緒では?
Free内部でTerminate呼んでるとこでその停止は生じてると思うんで。
Terminate使う必要のないプログラムならFreeも使う必要ないし。
784デフォルトの名無しさん:2014/03/28(金) 01:28:31.10 ID:wmf34mqq
>>767
764さんが言っているのは、mythread.Free;とmythread:= nil;の間に別のスレットがmythreadを使うとAccess Violationになるということだと思います。
785777:2014/03/28(金) 02:40:29.80 ID:sGxVzfHB
>>783
自分のTThreadの理解が不十分なのかもしれないけど
明示的にFreeすると、メインスレッドでTThreadの解放まで
待たくちゃならないでしょ

たとえば、Terminateを実行したとき、たまたまアクセス中で
さらにサーバの状況が悪くてIndyがタイムアウトを消化中だと
ワーカスレッド内でTerminatedを評価するまで、かなり時間が
かかるケースとかない?

それがイヤで、明示的にFreeで解放はしないんだけど、
自分の理解不足かな?
786デフォルトの名無しさん:2014/03/28(金) 06:56:10.22 ID:d6QGntWj
>>785
いやおそらく理解は十分だと思いますよ。
おそらくA3型を前提とした質問だと思うのでそうとして答えますね。
(もしそうでなかったら無視してください)
まず 767 の
TForm1.FormDestroy;
begin
if Assigned(Mythread) then mythread.Free;
end;
というFreeは、「親が子より先には死んではいけない」という親子型の基本理念を実現するものですので
ここでウェイトが生じうることは我慢して下さい。
逆に言えば FreeOnTerminate=true だとその理念が無いために A1型やA2型ではいろいろ苦労されてい
るはずです。
子が親の予想より早く死んでしまったためアクセスバイオレーションとなることは既に書きましたが
親が子の予想より早く死んでしまったためアクセスバイオレーションとなることもあるというわけです。
787デフォルトの名無しさん:2014/03/28(金) 06:58:04.75 ID:d6QGntWj
次に 767 の
TForm1.Timer1Timer;
begin
if Assigned(mythread) and mythread.finished then begin
mythread.Free;
mythread:= nil;
end;
という部分での Free ですがここはmythreadが処理を完了していますので
Freeでウエイトが生じることはないはずです。
788デフォルトの名無しさん:2014/03/28(金) 07:07:12.92 ID:d6QGntWj
最後に 767 の
TForm1.Button1click;
begin
if Assigned(mythread) then mythread.Free;
mythread:= TMyThread.create;
end;
という部分でのウェイトですがここはサブスレッドを1つだけに制限しているため
Freeして使いまわしているだけです。複数のサブスレッドを作るようにすればここでのFreeは不要です。
例えば、HTTPサーバーでリッスンするスレッドに接続要求があった時は接続可能な数まで
サブスレッドを作成するだけでいちいちFreeはしないと思います。
789デフォルトの名無しさん:2014/03/28(金) 07:13:34.20 ID:d6QGntWj
>>784
「別のスレットがmythreadを使う」というプログラムがよくわからないので
具体例を示していただけると幸いです。
FreeOnTerminate=trueだとそういうプログラムでも問題が生じないという
ところまで示していただけると多分今後スムーズに話が進みます。
790デフォルトの名無しさん:2014/03/28(金) 07:24:05.61 ID:d6QGntWj
>>784
なお、「別のスレットがmythreadを使う」がもし「子スレッドが複数いて子同士での通信」を意味するなら
mythreadを使うのではなくsyncronizeや同期オブジェクトやスレッド間通信を使ったほうがよいと思います。
それはFreeOnTerminate=trueでも同じのはずです。
791デフォルトの名無しさん:2014/03/28(金) 07:56:07.60 ID:oYluIFxT
うん、なんかファイト。
792デフォルトの名無しさん:2014/03/28(金) 07:57:53.78 ID:Dgxgcg2X
スレッドの管理は、スレッドリストっていう便利なものが用意されてるから使えばいい
問題の大半はこれで解決
793デフォルトの名無しさん:2014/03/28(金) 10:41:40.30 ID:MhBcNb1x
こんなの見つけた
http://homepage2.nifty.com/meiwadensokuki/TThread_1.html
ここはスレッドの事が書いてある
794デフォルトの名無しさん:2014/03/29(土) 00:30:35.70 ID:MLfxEq3F
>>767
TForm2 = class(TForm1)
private
function Gatmythread: TMythread;
public
property mythreadA: TMythread read Gatmythread;
end;
function TForm2.Gatmythread: TMythread;
begin
Result := mythread;
end;
これで理解できるか、それとも意味がわからないか?
しかし、いきなりスレッドをprivateフィールドにるすろとは必死すぎるだろう。

オブジェクト指向は継承されても大丈夫なように作るのがわかっていないようだ。
オブジェクト指向のプログラムもろくに理解出来ないとは。
あとフィールドは頭文字はFだ、Delphiの常識的なルールもしらないとは。
795デフォルトの名無しさん:2014/03/29(土) 00:31:24.90 ID:MLfxEq3F
>768
>なお、既に述べたとおり、ガベージコレクト部分(上のプログラムのTForm1.Timer1Timerメソッドの部分)
自慢げにガベージコレクト、ガベージコレクトとうるさいが、その仕様は
ガベージコレクションじゃないと分かっていないのが痛いほど悲しい過ぎる。

>756
>それで顧客が納得してくれれば苦労はしないのです。
>親側でクローズボタンが押されても子が終了するまで待つという
>ようなプログラムではダメ出しされるのが通常だからです。
お前が顧客に信用されていないだけだと思わないのか?
顧客も馬鹿じゃないんだから、必要なら待つ。
まっ普段から駄目な技術者は本当に必要なことをいっても信用してもらえないからな。

つまりお前は
・マルチスレッドのプログラムが作れない。
・オブジェクト指向が理解出来ていない。
・Delphi の基本的なルールもわからない。
・客に信用されていない。
と言うことの、駄目駄目の三流技術者でいいんかな。
796デフォルトの名無しさん:2014/03/29(土) 08:43:24.44 ID:ss1xGzqs
>>794
>>795
えーはい、適当なプログラム、適当な命名、申し訳ありませんでした。
今後気をつけたいと思います。
「Freeしてnilする間に使われるからおかしい!」という主張は撤回された
ものと受け止めさせていただきます。
797デフォルトの名無しさん:2014/03/29(土) 08:44:25.64 ID:OI7JjiZi
どうでもいいがここは初心者の質問スレじゃなかったのかね?
まあ、今更Delphiやろうって奴も少ないだろうけどな。
798デフォルトの名無しさん:2014/03/29(土) 08:58:08.53 ID:ss1xGzqs
あ、それから、別に承継しなくても同じUnit内ならprivate内の項目でも自由に使えますよ。
釈迦に説法でしょうけど。
799デフォルトの名無しさん:2014/03/29(土) 09:18:19.16 ID:ss1xGzqs
>>797
質問者のレベルが高いと話のレベルも高くなるので難しそうに感じるかもしれませんが、
(質問者のレベルが低くすぎてもポイントがずれまくって難しそうに感じるか)
スレをたどってもらえればわかるように根っこはTThread初めの一歩!みたいな話ですから
初心者向けの話だと思いますよ。
ようは、「FreeOnTerminate=trueが便利そう!」と思ってそこからスタートするとはまるよ、
大したメリットもないんだからFreeOnTerminate=falseで十分だよ、という話です。
多分この話題はもう秋田という感じなのでしょうけど、
初心者を助けたいと思っているだけで自説を押し付けるとかそういう意図ではないので
質問等が消えれば消えますので少しだけ我慢を
800デフォルトの名無しさん:2014/03/29(土) 10:02:01.17 ID:UJJa62hD
善意でやってくれてるのは了解した。
ただこの先スレッドの話題がずっと続いたら本当に初歩の初歩の質問がしづらいかなと思っただけ。
801デフォルトの名無しさん:2014/03/29(土) 10:17:55.10 ID:CFiKeRo+
昔は質問スレが複数に分かれてたが、現在はスレタイの「超初心者用」に意味はない
802デフォルトの名無しさん:2014/03/29(土) 10:35:32.59 ID:4Djj1jA3
>ただこの先スレッドの話題がずっと続いたら本当に初歩の初歩の質問がしづらいかなと思っただけ。
>>795みたいに一人だけ煽ってる奴はいるが、これぐらいで質問できなくなるって、
そんなんじゃ世の中生きていけねぇだろ。配慮の仕方が間違ってるわ。
803デフォルトの名無しさん:2014/03/29(土) 14:33:06.82 ID:6fdBLR4+
>>786
>親が子の予想より早く死んでしまったためアクセスバイオレーションとなる

レベルの低い初心者の質問者で申し訳ないけど
このエラーって、どんな感じのエラー?

子が親をアクセスしたときのエラー?
子が親をアクセスしないでもエラーが出る?
804デフォルトの名無しさん:2014/03/29(土) 19:49:54.14 ID:ss1xGzqs
>>803
いえいえ「分かる人にはこれだけでわかるだろうけどわからない人も多いかもな・・・」
と思いながら書いた部分を指摘された的確な質問です。
例えばA1型で行こうと決めて(また適当なプログラムですみません)、
procedure TMyThread.execute
begin
Form1.MyThreadFinish:=false;
try

finally
Form1.MyThreadFinish:=true; (1)
end;
end;
とかやっただけだと(1)の部分でご指摘のエラーが発生する可能性があります。
そこでこれを避けようと、真っ先に気づくのは既出のように
procedure TForm1.destroy
begin
Mythread.terminate;
end;
とかやることですが、これだけではダメなことは既に指摘したとおりであり、
もうどうしていいかわからなくなりパニクる(私だけかもしれません)と
いうわけです。
805803:2014/03/30(日) 00:49:20.37 ID:wYL9BvPj
>>804
説明、ありがとうございます
実は、このスレッドの話題の発端となった>>716の質問者でもあります

実は初心者なのにネット関連のアプリを公開してしまって
今頃になって基本が分かってないことに気づき慌ててる...

アプリ内でFreeOnTerminate := Trueで作ったワーカスレッドが
10近く常時動いてます

終了ボタンをクリックすると、終了を示すグローバル変数をセットし
それ以降はワーカスレッドからメインスレッドへアクセスすることはない

で、聞きたかったのは、親(メインスレッド)が子(ワーカスレッド)よりも
早く終了した場合(もしそんなことが内部的にあるのなら)、
やっぱマズイことがあるのかなってこと

今んとこ終了時にエラーが出たとか聞かないけど、ただ運が
良かっただけってこともあるし...
806デフォルトの名無しさん:2014/03/30(日) 07:16:18.49 ID:8jWWG5Ib
>>805
おそらく Form1、mythread などというDelphiレベルの話ではなく OS レベルでの話ということですよね。
私は調べたことがないので、直感でしかありませんが多分メインスレッドが先に終了することなどない
のではないでしょうか。有識者の解答をお待ちください。
いずれにせよそういう疑問を生じさせてしまうのは、死期がはっきりしないという
FreeOnTerminate := Trueの功罪だと私は思います。
807デフォルトの名無しさん:2014/03/30(日) 12:50:46.18 ID:B4XYVLF4
ttp://msdn.microsoft.com/ja-jp/library/cc429099.aspx

少なくとも >>805 で問題になることはない。ただグローバル変数ではなく同期オブジェクトを使うのが
望ましい。

>>806
FreeOnTerminateの功罪って意味不明。FalseならどこかでFreeしなきゃいけないし、Trueなら
勝手にFreeされるので止めた後はアクセスしちゃいけない、それだけ。それにプロセスの終了時は
Windowsがリソースの回収を行うので実際はFalseでもFreeする必要がない(好みじゃないけど)。
808デフォルトの名無しさん:2014/03/30(日) 16:53:22.21 ID:8jWWG5Ib
>>807
意味は・・・また話がこじれそうなのでやめときます。
809デフォルトの名無しさん:2014/03/31(月) 14:32:49.41 ID:rltgWKkD
この話まだ引っ張ってたのか
頭の固いキチ○イがいると大変だな…
810デフォルトの名無しさん:2014/04/02(水) 23:46:20.07 ID:/gW5Cj+p
ちょっとお知恵をお貸しください

アプリで二重起動防止とか、よくありますが
たとえば自分のPC(開発環境)だけは
二重起動を可能にする方法とかあります?

できれば、まったく同じ実行ファイルで実現したい
811デフォルトの名無しさん:2014/04/02(水) 23:49:00.27 ID:8b9j8yIQ
>>810
適当にテキストファイルでも何でもいいからファイルかフォルダを用意してそれがあれば二重起動可能にするとか
どうとでもなる
812デフォルトの名無しさん:2014/04/02(水) 23:58:18.35 ID:/gW5Cj+p
>>811
すばやいレス、ありがとうございます

その方向ですよね

あとは起動オプションを使うかですかね
813デフォルトの名無しさん:2014/04/03(木) 00:49:18.37 ID:HsT1tdMS
ミューテックス
814デフォルトの名無しさん:2014/04/03(木) 01:38:25.85 ID:CHv47MJA
815デフォルトの名無しさん:2014/04/03(木) 13:58:35.25 ID:hMZDUBRj
>>814
ありがとうございます

ちょっと事情があって、開発環境のあるPCでは
Delphi IDE内で実行するときだけでなく
そのPC上で実行するすべての場合で
アプリの二重起動を可能にしたいので...
816デフォルトの名無しさん:2014/04/03(木) 17:37:29.19 ID:+zs34Az8
最近のDelphiはドットネットというのに乗せないと動かないとききました。

現状 Windows8.1 64bit の上でD6がいちおう動くようなのでとりあえず使ってるんですが、
やっぱり新しいのにしないとまずいことがあるのですかね?

機能的にはD6で十分なのです
817デフォルトの名無しさん:2014/04/03(木) 20:36:01.67 ID:Ug9VViSs
>>816
2004年くらいからタイムスリップしてきましたか?
818デフォルトの名無しさん:2014/04/03(木) 21:14:58.98 ID:e0k67vMi
おれもRAD XE2まで持ってるがDelphi7,CBuilder6ばっかり使ってるな
819デフォルトの名無しさん:2014/04/04(金) 14:45:50.82 ID:RM+Iq64G
6ではUnicodeにしかない文字を含むパスを渡されるとデフォルトでは読み込めないから
わざわざUnicodeに対応した処理を自分で実装しないといけないってのは面倒
自分専用ならパス側を書き換えて対処すればいいけど、外に出すアプリでそれは強要できないし6は正直無い
あと言語の拡張を考えると6と2009以降では生産性が倍以上は違うと思う
ただIDEの出来は6の方がよかった
820デフォルトの名無しさん:2014/04/04(金) 15:30:05.33 ID:YgvVnaBl
すみません、Delphi側でフォームを用意し、そこに入力した文字列を、ボタンを押す事によりFirefoxなどのブラウザの、例えば通販での個人情報入力フォームに反映させるようにしたいのですがどんなメソッドが必要でしょうか?

質問が下手で申し訳ありません
ちなみにDelphi7をWindows7で使っています
よろしくお願いします
821デフォルトの名無しさん:2014/04/04(金) 16:00:36.20 ID:Lb1wU2ET
>>819
倍も違うほど何が変わった?
822デフォルトの名無しさん:2014/04/04(金) 16:18:07.61 ID:ebHBrSE5
>>820
FireFoxのことは知らないけど
TWebBrowserを使って、Formなどの要素に書き込んだり
ボタンを押す動作を制御することはできる

検索すれば、いろいろと出てくると思う
823デフォルトの名無しさん:2014/04/04(金) 19:32:30.17 ID:Io3jP59G
>6ではUnicodeにしかない文字を含むパスを渡されるとデフォルトでは読み込めないから
>わざわざUnicodeに対応した処理を自分で実装しないといけない
一発変換かますだけだろ
自分で実装する必要はないわな
824デフォルトの名無しさん:2014/04/04(金) 23:54:12.31 ID:HNmjO1Jh
え?「c:\☑\☒.txt」っていうファイルを D6 の TMemo に読み込むのに「一発変換」という
簡単な方法があるんですか?
825デフォルトの名無しさん:2014/04/05(土) 07:09:19.43 ID:Jx7qT/sh
そういうわながあるのか。。   しかしまあ困るというほどではないかも。
826デフォルトの名無しさん:2014/04/09(水) 16:31:22.56 ID:PRO2eP0Z
>>823
一発変換って何?
SJISに変換できない文字があったらVCLのLoadFromFileじゃ絶対読めないけど。
例えば自分で実装せずにTStringList.LoadFromFileする一発変換ってどうやるの?
仮にファイル名に使われている文字がSJISの仕様内におさまっても、
ファイルの中身がSJISに変換できないUnicodeテキストだったらどうやって表示するの?
これも一発変換で表示できるの?
827デフォルトの名無しさん:2014/04/09(水) 16:58:18.78 ID:5wEyC0tG
すでにツッコミが入ってるだろーが
828デフォルトの名無しさん:2014/04/09(水) 18:09:07.64 ID:LeGZTXio
おまいらマジに
GetShortPathName
で変換することを知らんのか
ってかここは超初心者用だったな
829デフォルトの名無しさん:2014/04/09(水) 18:25:26.16 ID:Kpy3Opz4
なんであんなに必死なんだ
830デフォルトの名無しさん:2014/04/09(水) 18:30:35.62 ID:PRO2eP0Z
>>828
もしかして今は短いパス名をサポートしない環境があるのを知らない?
ってここは超初心者用だったな、すまん
831デフォルトの名無しさん:2014/04/09(水) 19:08:57.91 ID:2PCUc7IP
とりあえずそんなおかしな名前付けるな で済む
832デフォルトの名無しさん:2014/04/09(水) 21:31:16.62 ID:XdnhU9kU
他国とのやりとりをしていると平気で出てくるんだよ
ファイル名もテキスト内容も>うにこ
833デフォルトの名無しさん:2014/04/09(水) 23:34:49.77 ID:klWzwYGP
ファイル名はWideStringに入れて、CreateFileWでファイルをオープンして、THandleStreamで扱う、ってことになるわな。
834デフォルトの名無しさん:2014/04/11(金) 14:55:10.26 ID:UXPfM29I
831にとってはおかしな名前でも、その国の人にとっては常用する普通の文字だしな
まさに井の中の蛙だねぇ…
835デフォルトの名無しさん:2014/04/15(火) 16:54:12.03 ID:0UAnlUDx
あのー、ちょっと聞きたいことがあるんですが

TRadioButtonのOn/Offを自分で制御することはできます?

やりたいのは、2つのボタンで、両方ともOnだけは不可だけど
いずれかかがOn、または両方ともOffは可としたいんですが...
836デフォルトの名無しさん:2014/04/15(火) 21:00:02.58 ID:y7/bYr71
>>835
すべてoffという特性は、TRadioButtonには適していないと思う。

複数のTSpeedButtonのGroupIndexを同一にし、かつAllowAllUpをTrueにしたほうが良い気がする。
837デフォルトの名無しさん:2014/04/15(火) 21:00:35.52 ID:pnw/AVzK
procedure TForm1.Button1Click(Sender: TObject);
begin
RadioButton1.Checked:=not RadioButton1.Checked;
end;

TRadioGroup も考えてみて
procedure TForm1.Button2Click(Sender: TObject);
begin
if RadioGroup1.ItemIndex<0 then
RadioGroup1.ItemIndex:=0 else
RadioGroup1.ItemIndex:=-1;
end;
838デフォルトの名無しさん:2014/04/15(火) 21:44:38.50 ID:WV05oYWg
ラジオボタンってなんでそう呼ばれるのか、若い人にはわからないよなぁとか思ったり
839デフォルトの名無しさん:2014/04/16(水) 01:33:42.30 ID:0PIdiqLV
>>836-837
やっぱラジオボタンだけじゃ無理っぽいですね。
チェックボックスのほうが無難かな...
ちょっと文字情報付のボタンが欲しかったんで

どれか1つのボタンだけOnで、そのOnのボタンをクリックすると
それもOffになって、全部Offを許容するって感じで

ちょっとコンポーネント調べたんですが、そんなのないですね

>>838
昔のラジカセのボタンみたいなもんでしょうか?
そういえば、カーラジオも選局ボタンがそんなんだったような
840デフォルトの名無しさん:2014/04/16(水) 22:18:31.95 ID:r3bnRP8n
質問です、
Windows7でRAD Studio XE5を使用し、FMXの練習をしています。
ttpwww.gesource.jpweblogp=6214
このページの下にあるサンプルアプリケーションのソースをそのままコピーしたのですが
DrawBitmapの部分で中身が空として扱われてしまいImageLargeが表示されませんでした
ImageSource,ImageSmallは正常に表示されます。
どのような原因だと思われるでしょうか。
841デフォルトの名無しさん:2014/04/20(日) 12:24:07.84 ID:sTP8AN8M
こちらの環境はWindows7,lazarus1.2です。
「デスクトップの表示」をしても消えないウインドウをつくりたいです。
昔は、TForm.createのなかでParentWindow:=FindWindow('Progman',NIL)という定番のやり方があったのですが、仕様が変わったらしくうまくいきません。
(窓が表示されない)
ネットで調べて、ProgmanのかわりにSHELLDELL_DefViewやWorkerWをいれてもだめでした。(デスクトップの表示できえる)
ParentWindow:=GetDesktopWindow();も試したのですがデスクトップの表示できえました。
ガジェットみたいに「デスクトップの表示」をしても消えないウインドウを作るにはどうしたらいいのでしょう。
842デフォルトの名無しさん:2014/04/21(月) 14:17:40.96 ID:p2n411o8
ここはDelphiスレです
Lazarusは専用スレがあるのでそちらへどうぞ
843デフォルトの名無しさん:2014/04/22(火) 00:06:55.28 ID:aZUtwyKC
つかWin32の質問だよな
844デフォルトの名無しさん:2014/04/22(火) 00:33:15.43 ID:1mdNhLZv
Delphi使いは心が狭いな
845デフォルトの名無しさん:2014/04/22(火) 03:00:46.32 ID:P7vsKsdx
心の面積とは関係ないような…
846デフォルトの名無しさん:2014/04/22(火) 06:15:48.57 ID:Wc/R4HT8
デスクトップの表示ってすべてのアプリを最小化してるのか?
なんらかのmessageが飛んできてるからそれを無視すりゃいい
847デフォルトの名無しさん:2014/04/22(火) 10:23:00.24 ID:Zs7S976a
マッピングからはずしてる。
ParentWindow:=nilにしてるという感じ。
848デフォルトの名無しさん:2014/04/22(火) 12:29:37.74 ID:z8WHMXPV
教えてくれないと入金催促画面が作れません!!!
849デフォルトの名無しさん:2014/04/22(火) 13:47:00.21 ID:0UJjYfLY
UFC 128 - : ジョン・ジョーンズ vs. マウリシオ・ショーグン
https://www.youtube.com/watch?v=wia_sFsAf6g
850デフォルトの名無しさん:2014/04/22(火) 21:34:26.20 ID:aroCR4mU
>>841
壁紙に書いちゃえ
851デフォルトの名無しさん:2014/04/22(火) 22:12:14.91 ID:z8WHMXPV
天才現る
852デフォルトの名無しさん:2014/04/22(火) 23:11:42.43 ID:K9jQM/w0
>>841
WM_MOVEを監視して常にデスクトップ領域内に入るよう監視・調整する
853デフォルトの名無しさん:2014/04/23(水) 06:55:12.12 ID:7+voQcmr
>>847
マッピングをいじるわけではないだろう。
アエロなしだと'Progman'、アエロだと'WorkerW’の管理する窓が一番前にきて他の窓を隠す。
854デフォルトの名無しさん:2014/04/27(日) 16:11:50.02 ID:9pN9ZCWS
XE2で#20以下の文字をエスケープ、アンエスケープする関数が(なるべく標準で)あったら教えて下さい

'aaa'#13#10'bbb' <-> 'aaa#13#10bbb'
855デフォルトの名無しさん:2014/04/27(日) 16:15:00.00 ID:9pN9ZCWS
>'aaa'#13#10'bbb' <-> 'aaa#13#10bbb'

これはあくまで例で、書式の指定は特に無いです
856デフォルトの名無しさん:2014/04/27(日) 16:51:21.96 ID:sr/2zxN+
書式はなんでもいいから「#20以下だけ」ってことか・・
そんなものないと思うけどな
857デフォルトの名無しさん:2014/04/28(月) 10:49:56.95 ID:+tUkPlgE
XE6でLiveBindingをしているのですが
NumberBoxのValueなどを双方向にバインドすることは可能なのでしょうか
858デフォルトの名無しさん:2014/04/28(月) 20:57:14.17 ID:TqlVJspb
>>857
NumberBoxではなく、Gridだけど、UIコントロールのSynchプロパティをバインドするといいよ、ってのをマニュアルで見かけた。

多分ここ

http://docwiki.embarcadero.com/RADStudio/XE5/ja/LiveBinding_を使ったデータの同期
859857:2014/04/29(火) 11:27:25.81 ID:mwSTMqLJ
>>858
ありがとうございます!試してみます
860857:2014/04/30(水) 19:50:18.37 ID:IRsEECXr
>>858
自分はNumberBox(数値設定用コンポーネント)のValueのように、LiveBindingデザイナにデフォルトで表示されないメンバから
DBのフィールド等の値を変更したいと思っていまして、貼っていただいたURLの内容では目的が達せられませんでした。すみません。
ベタにコーディングするしか無いでしょうか。
861デフォルトの名無しさん:2014/05/01(木) 22:30:17.61 ID:31i14fQn
Delphi XE5 で Android アプリを作っています。
TMainMenu/TPopupMenu/TMenubar はモバイルに対応していないようですが、メニューボタンに対応させるにはどうすれば良いでしょうか。
862デフォルトの名無しさん:2014/05/04(日) 20:43:23.18 ID:LhkWbjgu
ホント、素人な質問で申し訳ないんだけど。。。

フォームにコンポーネント(って言うのかな。ラベルとかエディットとか)を貼り付ける
というとこまでは分かったんですが、そうするとDELPHIが自動的にプログラムを
書いてくれる。で、やたら(sender:tobject)というのが出てくるのですが、これって
何なのでしょう?
senderは送る者、tobjectはルートクラス? 何が何やら・・・
863デフォルトの名無しさん:2014/05/04(日) 21:22:38.92 ID:Hhfw7Ggo
多態性について学習するよろし。
型宣言が増えまくるのを抑止する手段>継承元クラスで一緒くたに扱う
864デフォルトの名無しさん:2014/05/04(日) 21:42:22.72 ID:LhkWbjgu
>>863
なかなか奥が深いですねぇ。
田舎住まいでしかもインターネットができないので調べるのも一苦労ですが、
今日は都会に来ているので本屋さんに行ってきます。多態性をキーワードに
すればいいわけですね。ありがとです^^
865デフォルトの名無しさん:2014/05/04(日) 22:00:57.52 ID:gHxTmPz5
最近は本屋行かなくなっちゃったから分からないけど
あんまり本は頼りにならないというか
そもそも売ってないと思うよ
当時でさえそうだったんだから今はますます(略)
本屋より図書館の方がいいかも
まぁ置いてあればの話だけど
やっぱりネットが一番だと思うけどね
866デフォルトの名無しさん:2014/05/05(月) 01:47:01.38 ID:pYH7L/RU
昔はDelphiの入門書が結構あったのに最近見かけないね
入門する人がいなくなったのかな

で、技術評論社の「Delphiオブジェクト指向プログラミング」ってのに
お世話になった。もう15年以上も前の話だけど
867デフォルトの名無しさん:2014/05/05(月) 07:18:01.71 ID:vaZjyLth
漫画喫茶でもテキトーに入れば入門の情報はいくらでもある
要は自動生成されたコードの意味がわからんってことだろう
868デフォルトの名無しさん:2014/05/05(月) 10:07:02.66 ID:NN5JEBAd
>>866
当時 Delphi 関連書籍は流通を押さえてたソフトバンクの策略により書店から姿を消した
代わりにソフトバンクは全国の書店に VB 関連書籍をバラ撒いた
869デフォルトの名無しさん:2014/05/05(月) 18:47:49.07 ID:ztfUYVnN
なんでソフトバンクはそんな策略をしたの?
MSからお金を貰ったとか?
870デフォルトの名無しさん:2014/05/05(月) 18:55:58.45 ID:NN5JEBAd
>>869
当然、日本マイクロソフト社との裏取引があったのだろう
871デフォルトの名無しさん:2014/05/05(月) 18:58:30.62 ID:orKzLKCf
とりあえず、PDFで転がってるOh!No!のDelphi3 Q&A150選でも見とけ

古すぎてアレだがw
872デフォルトの名無しさん:2014/05/06(火) 00:24:10.00 ID:foRc8yiw
FMX.Grid.TStringGrid を使っていて2つほどわからないので教えてください。
Delphi XE5 です。

1.文字列がちょうどおさまるようにセルの幅、高さを変えたい。

SG.RowHeight := SG.Columns[0].Canvas.TextHeight('W');
SG.Columns[0].Width := SG.Columns[0].Canvas.TextWidth('99/99 99:99');

とやっていますが、高さは半分、幅は2/3ぐらいになってしまいます。
マージンは0でやっているはずですが、確認することがあればおしえてください。

2.行毎に背景色を指定したい。

いろいろググったのですが、OnDrawCell(XE5では見つかりませんでした)を使う方法や、すべてのセルを変更する方法しか見つけられませんでした。
873デフォルトの名無しさん:2014/05/06(火) 07:31:33.05 ID:najLXRwS
SG.Columns[0].Canvas.Font.Name:= "ほにゃらら";
SG.Columns[0].Canvas.Font.Size:= ほにゃらら;
874デフォルトの名無しさん:2014/05/06(火) 10:59:18.95 ID:foRc8yiw
>>873
レスありがとうございます。

Font.Name は無かったので、Font.Family に親フォームと同じ値を入れ、
Font.Size にも親フォームと同じ値を入れて試しましたが結果は変わりませんでした。
875デフォルトの名無しさん:2014/05/06(火) 12:38:28.72 ID:w2wxRZ8k
>>868
これ本当なの?
マイクロソフトがそこまで脅威として見ていたのか
876デフォルトの名無しさん:2014/05/06(火) 17:46:19.19 ID:mrCqoALn
MSがその程度のことをしてもまったく不思議とは感じないのは確かだな
昔から脅迫にちかいことやりまくってるしな
877デフォルトの名無しさん:2014/05/06(火) 19:03:16.28 ID:IUxNATut
SB主導の方がしっくり来るな
878デフォルトの名無しさん:2014/05/06(火) 23:14:09.67 ID:4ff3GRht
ソフトバンクはその昔「一太郎」時代にも
えこひいきして他社製ワープロを奈落に突き落としたからな
879デフォルトの名無しさん:2014/05/07(水) 01:17:07.18 ID:XAsHeWQE
>>868が事実かは知らないけど、SBはMSからマニュアル類を請け負ってたので
独断で便宜を図っても不思議ではない
気になる人は電脳曼陀羅事件を調べるといいかも
880デフォルトの名無しさん:2014/05/07(水) 10:53:06.57 ID:weHfcyWe
英語のキンドル本だけど
Delphi XE2 Foundations - Part 1〜3
プロモーションで1冊分の料金しかかからなかったよ
881デフォルトの名無しさん:2014/05/07(水) 14:29:26.05 ID:9oyvw0L0
>>872
1はTStringGridの各セルにデータを表示した後で、
ループ最も幅の長いセルを見つけてそれに合わせればどうだろう
iColWidth := StringGrid1.Canvas.TextWidth(StringGrid1.Cells[i, j]);
if StringGrid1.ColWidth[i] < iColWidth then
 StringGrid1.ColWidth[i] := iColWidth;

2はonDrawCellイベントを使えばラクに実現出来る
Cell内にチェックボックスやゲージなんかも表示できる
onDrawCellイベントが無いなんて有りえない。見間違い。
882デフォルトの名無しさん:2014/05/07(水) 15:03:37.64 ID:63FuNV7B
>>881
固定長のものでも幅が合わないので質問しました。
1.はどうやらモバイルアプリケーション開発では正確な TextWidth が返ってこないことが原因のようです。
デスクトップアプリケーション開発では以下の内容でほぼぴったりになりました。
ただ、'+8'もどこかのマージンだと思うので、参照で求めたいのです。

str := 'あいうえおかきくけこ';
StringGrid1.RowHeight := StringGrid1.Columns[0].Canvas.TextHeight(str) + 8;
StringGrid1.Columns[0].Width := StringGrid1.Columns[0].Canvas.TextWidth(str) + 8;
StringGrid1.Cells[0,0] := str;

onDrawCell ですが、やはり見つかりません。'onD'まで入力して補完しようとした画面です。

ttp://i.imgur.com/sXyDyk7.png

モバイル/デスクトップ共に同じでした。
883デフォルトの名無しさん:2014/05/07(水) 20:06:01.19 ID:q8kCwgwY
Delphi-MLの3751から3757の流れを見ろ。Canvas.Font.Assign(Font)としてからでないと
Canvas.TextWidth/TextHeightが正しくならないらしい。
884デフォルトの名無しさん:2014/05/08(木) 08:09:33.30 ID:Mn1gWHfA
>>883
アドバイスありがとうございます。
ですが効果が無いようです。

フォームにButton1を貼り付け、次のコードを実行しました。

Button1.Text := 'あいうえおかきくけこ';
Button1.Canvas.Font.Assign(Button1.Font);
Button1.Width := Button1.Canvas.TextWidth(Button1.Text);

デスクトップアプリケーションの方は'あ'と'こ'が欠けた状態になりました。
これは枠の分を考慮していないので当然の結果です。
モバイルアプリケーションでは'あいうえお…'となりました。
885デフォルトの名無しさん:2014/05/08(木) 20:33:41.04 ID:xARMff45
ん?ボタンの枠のサイズを知りたいってこと?これはスタイルに依存することになりそうなんだが…
886デフォルトの名無しさん:2014/05/08(木) 21:03:03.99 ID:Mn1gWHfA
>>885
モバイルアプリケーションで、文字を描画するのに必要な幅(高さ)が間違って取得されるので、
正しい幅(高さ)を求めるにはどうすればよいかって質問です。

元の質問は >>872 です。
887デフォルトの名無しさん:2014/05/08(木) 21:13:09.54 ID:6IjhqXCv
TListViewでGroupViewを使用してグループ表示したいのですが、カスタムドローすると、描画がおかしくなります。
というより、各アイテムの描画する矩形を正しく取得できません。
OnCustomDrawItemや、OnAdvancedCustomDrawItemに渡されるパラメータに描画する矩形の
情報が渡されなくて、代わりに、TListItem.DisplayRectで取得しろ?みたいな感じがすべての元凶のような気がします。
Windowsメッセージレベルでは矩形の情報は含まれてるのに、それを全く使わず(TListItem.DisplayRect内部で呼ばれてる)ListView_GetItemRectを使うとかどんな設計なんでしょうか。
助けて下さい。
888デフォルトの名無しさん:2014/05/08(木) 22:36:00.58 ID:+w5OUIZN
>>886
いやだからなんでボタンで試してうまくいかないっていってるの?StringGridで試したらどうなるのさ。
889デフォルトの名無しさん:2014/05/08(木) 23:35:29.57 ID:Mn1gWHfA
>>888
同じです。
TButtonに変更したのはTStringColumnがおかしいのではなく、Canvas.TextWidth / Canvas.TextHeight がおかしいというのを、最も標準的なコントロールで試したからです。
890デフォルトの名無しさん:2014/05/09(金) 00:39:15.79 ID:yuWrC3zX
そんなことをするよりは具体的にTextWidthが何を返したか等を記述した方がいいよね
ライブラリのソースを読むことはできても、実機で試せない人もいれば他の環境では再現しない可能性だってあるんだし
少なくとも効果があったかなかったかは問題を解決できてないあなたが勝手に判断したらまずいでしょ
TButtonでどうだったかを示されたところでTButtonはTButtonであってTStringGridじゃないし
891デフォルトの名無しさん:2014/05/09(金) 01:18:37.86 ID:/onGlIxd
てぇかここじゃなくてMLかフォーラムで聞いたほうがいいと思う。できれば最小限の再現コード付きで。
892デフォルトの名無しさん:2014/05/09(金) 02:24:37.98 ID:g/8QCC4u
>>887
TListviewのcustomdrawは自分も結構悩まされるな
色々検索しても、これはって言う回答はなかなか見つからない

最近は色々試行錯誤して(偶然)うまくいったのが回答だと考えてる
893デフォルトの名無しさん:2014/05/09(金) 10:42:24.63 ID:m3mnutMb
>>890
デスクトッププロジェクトとモバイルプロジェクトを作成し、双方にTStringGrid/TButtonを貼り付け、
TStringGridは項目の追加でTStringColumnを1つ追加しています。
コードは同じで

procedure TForm2.Button1Click(Sender: TObject);
var
str:string;
begin
str := 'あいうえおかきくけこ';

Button1.Text := str;
Button1.Canvas.Font.Assign(Button1.Font);
Button1.Width := Button1.Canvas.TextWidth(str);

StringGrid1.RowCount := 2;
StringGrid1.Columns[0].Canvas.Font.Assign(Button1.Font);
StringGrid1.Columns[0].Width := StringGrid1.Columns[0].Canvas.TextWidth(str);
StringGrid1.Cells[0,0] := str;
StringGrid1.Cells[0,1] := StringGrid1.Columns[0].Canvas.TextWidth(str).ToString;
end;

結果が以下の画像です。(左がデスクトップ、右がモバイル)
ttp://i.imgur.com/wxIk829.png

フォントが違うにもかかわらず、双方ともTextWidthは82.01123046875を返しています。
モバイルプロジェクトでは、TextWidthはあてにならないということなのでしょうか・・・
894デフォルトの名無しさん:2014/05/10(土) 07:52:36.35 ID:AvOE9ejC
偶然同じ値になるなどまずありえんわな。
そこを追求してかないと。
895デフォルトの名無しさん:2014/05/10(土) 07:53:24.91 ID:AvOE9ejC
仮に違うフォントが使われているとしたら、偶然同じ値になるなどまずありえんわな。
そこを追求してかないと。
896デフォルトの名無しさん:2014/05/10(土) 09:16:54.90 ID:mf5lm0WO
単位がピウセルじゃないから…
897デフォルトの名無しさん:2014/05/10(土) 12:13:44.02 ID:jNvYpmR+
898デフォルトの名無しさん:2014/05/10(土) 17:08:42.21 ID:hRNlgmq3
FireMonkeyよく知らないけど、そもそもコントロールのフォントとスタイルのフォントは別物だから当然じゃないの?
ちゃんとスタイル適用しないように設定変えてる?
899デフォルトの名無しさん:2014/05/14(水) 16:33:02.91 ID:fkiecfrZ
勤め先はPC関係でもなんでもないのですがdel7proがあります。
ネットで調べたらwin8の64bitでもインストOK、動作OKと書いてあるサイトがありました。
ウィンドハンドルとか調べるツールも動作するんでしょうか?
32bitのwindowsなら動く気がするのですが、64bitだとどうでしょうか?
インストールして自分で調べればいいのですが、会社のPCには気軽にソフトを
インストールしてはいけないので、教えてください。
900デフォルトの名無しさん:2014/05/14(水) 18:21:44.15 ID:Vdg2wSF3
>>899
Windows 7 64bit に Delphi 7 Pro を入れてバリバリ使っています
F1 キーの状況感知ヘルプが上手く動作しない以外は不都合を感じません
901デフォルトの名無しさん:2014/05/14(水) 20:36:09.41 ID:rcx5Ml4g
Turbo Delphi Explorerを古本の付録でインストールしてみましたが、許諾ファイルが手に入りません
何とか使う方法は無いですか?
902デフォルトの名無しさん:2014/05/14(水) 21:05:14.25 ID:fPvjsynC
903デフォルトの名無しさん:2014/05/14(水) 22:53:04.28 ID:rYahtUE4
>>899
そういえばどうなんだろうと昔 Delphi5 で作成した Handle、Caption 取得するソフトを動かしてみた
64bit ソフトの情報も問題なく取得できました
904デフォルトの名無しさん:2014/05/15(木) 17:28:49.83 ID:NpaGHGTx
ちょっと教えてください。

自分で開発したアプリを人に上げるとき
含める必要のあるファイルは何でしょう?

*.pas、*.dfm、*.dpr、*.resファイルは必要ですよね

*.dprojファイルも必要ですか?

その他、不足してるファイルがありますか?
905デフォルトの名無しさん:2014/05/15(木) 18:12:55.76 ID:mqKLvEHr
なんで exe以外が必要? ていうかインストーラでまとめてリリースするやろ
ソースもつけるのなら、できたファイル全部だし、
906デフォルトの名無しさん:2014/05/15(木) 18:24:36.25 ID:NpaGHGTx
>>905
レスありがとうございます。

実行ファイルではなく、ソースを配布したいと思いまして...

で、コンパイル等で生成されるファイルには、パス情報とか
個人情報が含まれてるのもあるみたいで、ソース配布には
最低限、どのファイルが必要なのかと思いまして。
907デフォルトの名無しさん:2014/05/15(木) 19:06:54.73 ID:YEyMKVb+
resは自分でリソース含めたりアイコン作ったりしていないのであれば
無くてもIDEが自動生成するからいらない場合もある
ソース部分は基本的に最初に挙げた3つでOK
908デフォルトの名無しさん:2014/05/15(木) 19:14:24.12 ID:c9jY4n9p
>>906
D6 だけど、*.dprojファイルはいらない。

*.dpr
*.pas、*.dfm、*.res

この4つで良いと思う。
特別な外部コンポーネントを使ってるのなら
それの入手方法を知らせるなり、仲間内ならそのコンポーネントをセットで
909デフォルトの名無しさん:2014/05/15(木) 19:42:27.16 ID:J6CNeC2R
>>901
受付終了なので、正規手段では不可能
http://itpro.nikkeibp.co.jp/article/MAG/20070626/275987/

http://keygens.nl/でパッチがダウンロード出来るが、利用は自己責任で
910デフォルトの名無しさん:2014/05/15(木) 19:57:48.61 ID:NpaGHGTx
>>907-908

リソースには何も登録してないので
*.pas、*.dfm、*.dprファイルのみにします。

ありがとうございました。
911デフォルトの名無しさん:2014/05/16(金) 15:57:50.91 ID:7/ABzJ5o
Delphi XE6のVCLでスタイルを適用すると、TEditのColorなどが全て統一されてしまうようなのですが、
個別に変更することは可能でしょうか?
912デフォルトの名無しさん:2014/05/18(日) 13:19:59.16 ID:OIeu8RRW
DelphiでHTMLタグをエスケープする関数とかありますか?

< --> &lt;
> --> &gt;
& --> &amp;
" --> &quot;

こういう変換をしたいんですけど、自前で書くしか方法はないんでしょうか。
913デフォルトの名無しさん:2014/05/18(日) 17:37:31.86 ID:VX0o3int
HTTPApp.pasにHTMLEncodeとHTMLDecodeがあるけど。
914デフォルトの名無しさん:2014/05/18(日) 18:44:20.48 ID:tiXNBR85
>>912
regular expression実装されてるからそれでやればいいと思うよ
915デフォルトの名無しさん:2014/05/18(日) 20:59:01.20 ID:zXBFYmAa
916デフォルトの名無しさん:2014/05/18(日) 21:00:36.34 ID:zXBFYmAa
917デフォルトの名無しさん:2014/05/22(木) 08:04:37.04 ID:R/n1HVqS
なんと PeaZip は Lazarus製ではないですか!
918デフォルトの名無しさん:2014/05/24(土) 15:36:40.50 ID:YQpzfHL3
以前メディアプレイヤーで質問した者です。
色々調べた所MediaPlayer系をいじるのには
MCIを直接いじらなければならいようだという
ことが分かったのですが、
MCIについて勉強するに適したものはありますか?

WindowsMediaPlayerもボリュームコントロールを出来ないようでした。
もし、示唆等いただけましたらよろしくお願いいたします
919デフォルトの名無しさん:2014/05/24(土) 15:49:44.54 ID:hlo3j/US
920デフォルトの名無しさん:2014/05/25(日) 09:03:44.57 ID:WJDhxoAu
>>919
ありがとうございました。早速印刷しましたので勉強させていただきます。
921デフォルトの名無しさん:2014/05/26(月) 14:39:58.61 ID:svaviP7r
はるか昔に非推奨になって後は死に行くのみのAPIを今更勉強するの…?
それ以前にMCIじゃ個別の音量設定なんてできないし
922デフォルトの名無しさん:2014/05/26(月) 19:50:32.54 ID:rKneIVz3
delphiでオーディオ再生だとNewACってのがいいと思う
コンポーネント貼り付けて簡単に再生できるし

再生できるには*.wav、*.mp3、*.wmaなどなど
ボリュームや再生速度も簡単に指定できる
自作のフリーソフトで使ってるけど結構いいよ

難点はDirectSound終了でNewACの開発も終了しちゃったこと


...って、動画も再生するんだっけ? じゃ、ダメだね
923デフォルトの名無しさん:2014/05/26(月) 20:05:21.38 ID:En0fnIi5
WMPとかFlashPlayerとかVLCとかをActiveX貼り付けで使えるけど、だめなん?
924デフォルトの名無しさん:2014/05/26(月) 20:10:50.35 ID:En0fnIi5
あとは html 吐いて、ブラウザで表示させるのが楽かも
925デフォルトの名無しさん:2014/05/28(水) 06:26:39.46 ID:B4+4ztrr
>>921
そうなんですか?
手持ちのソフトやサンプルソースが
MCI使っていたので…

他に良い制御系があるのでしょうか?
926デフォルトの名無しさん:2014/05/28(水) 07:57:11.89 ID:LKrLROO8
927デフォルトの名無しさん:2014/05/28(水) 09:18:48.20 ID:IF06EKAI
928デフォルトの名無しさん:2014/05/28(水) 09:33:36.36 ID:IF06EKAI
929デフォルトの名無しさん:2014/05/28(水) 15:42:01.29 ID:2wPOB5Uj
便乗して質問するけど
Media Foundationを簡単に扱える
コンポーネントって出てる?
930デフォルトの名無しさん:2014/05/28(水) 23:57:18.16 ID:hE6fxPKH
コンポーネントは出てないと思うが、そもそも基本的な事をするぐらいならMedia Foundationで簡単に扱えるし。
http://msdn.microsoft.com/library/windows/desktop/ms694197%28v=vs.85%29.aspx
英語読むの苦にならないのならだけど
931918:2014/05/29(木) 06:05:02.27 ID:FkL52Gv9
>>926
Live 2chに変えたせいで>>919-922に気づきませんでした。
932929:2014/05/29(木) 18:23:52.12 ID:U5vZ2NRt
>>930
英語を読むのは平気だけど
アプリの中で効果音的にちょっとオーディオ再生するだけのために
Microsoftのサイトを読んでゼロからプログラミングするのは
少し効率が悪いかも
933918:2014/06/04(水) 17:34:52.13 ID:9Ld+1Bja
NewAC 2.61やっと見つけました。
使用方法とか説明しているサイトとか有るでしょうか?
やりたいことは、wavとmp3のコントロールです。
934デフォルトの名無しさん:2014/06/04(水) 20:28:52.83 ID:gFPb9jxH
recordと暗黙のキャスト使えば

s: TString;

s := 'hello';
if s.pos('e')>0 then...

とか書けそうだけど
TString, TInteger, TDoubleといった基本型のラッパーライブラリを
気合と根性で作ったものって無いの?
935デフォルトの名無しさん:2014/06/04(水) 23:04:38.42 ID:rS3+cXLk
>>934
2010以降なら、record helperを使ってがんばって自前で用意、
XE3以降なら、各種recor helperが標準で用意されてるけど、
これらよりも前のバージョンでの利用を考えてる?
936デフォルトの名無しさん:2014/06/04(水) 23:22:02.87 ID:vvtrsgyN
>>933
NewAc261でWavやmp3を再生するだけだったら
デモアプリが参考になると思う

newac261.zip\newac261\demos\Players\AudioPlayer


あとはヘルプがhtmlファイルになってるので
index.htmlファイルから適当に
937デフォルトの名無しさん:2014/06/05(木) 16:01:34.01 ID:4fEc3xBU
最新の XE6 で作成したプロジェクトのソースをサンプルとして配布したいのですが、
XE5 以前(〜2009 あたりまでを想定)で正常に読み込みできるのでしょうか。
使用しているコンポーネント等は標準的なものです。
938デフォルトの名無しさん:2014/06/05(木) 16:05:17.90 ID:D5lArFFw
そんなの内容にもよるから何とも言えないし、自分で試してみればいいだけのような
XE6持ってるならライセンスあるんだし
939デフォルトの名無しさん:2014/06/05(木) 16:33:03.85 ID:4fEc3xBU
>>938
おおせの通りなんですが、わざわざそのために昔のバージョンをインストール
するのもなあというのもありまして。
まあ Unicode 対応の 2009 と 64bit 対応の XE2 あたりを入れて試して
みます。
940デフォルトの名無しさん:2014/06/06(金) 07:30:37.85 ID:6OfeBEdh
>>935
サンクス
XE6Trial落としてみたけどいちいちTStringとか作らなくても
showmessage('hello'.length.tostring)
とか普通にできるように拡張されてるんだね
しかもXE3からとか
XE2買っちゃったのが悔やまれる…
XE6安いから買っちゃおうかな
941デフォルトの名無しさん:2014/06/07(土) 08:00:41.45 ID:6LoUSKZr
UTF16めっっちゃおせぇぇぇぇぇぇ
942デフォルトの名無しさん:2014/06/07(土) 18:53:26.75 ID:U8sWAyx/
Delphi7です
リッチエディットで任意の場所にある文字列の文字装飾を知るためには必ず選択状態にして
SelAttributesを見るしか方法はないのでしょうか?
例えば太字になっている部分を検索したり、書き換えたりするときに
プログラム内部で一文字ずつ選択して調べるのでしょうか?
長い文章だと相当時間がかかりそうです
943918:2014/06/09(月) 13:01:16.65 ID:K7gwbRPX
>>936
でもアプリをコンパイルしようとすると、コンポーネントが無いとか出てきてしまうんです。
944デフォルトの名無しさん:2014/06/09(月) 13:07:06.72 ID:fxFPhf5Y
コンポーネントが無いなら入れたらいいじゃない(高慢な感じで
945デフォルトの名無しさん:2014/06/09(月) 15:18:14.49 ID:HLpaXUPq
>>943
無いと指摘されたコンポーネントがNewACだったら
NewACが正しくインストールされてないんじゃないかな

一度アンインストールして、再インストール

それでもインストールできなかったら...\newac261\srcを
検索パスに追加する...
946918:2014/06/09(月) 16:42:00.32 ID:K7gwbRPX
>>945
英語がさっぱり…
何をしたら良いのかさっぱり分かりません…
947デフォルトの名無しさん:2014/06/09(月) 16:55:05.37 ID:fxFPhf5Y
エラーメッセージも書かずに質問とな
英語くらいgoogle先生とかexcite先生に訳してもらえ
948デフォルトの名無しさん:2014/06/09(月) 19:46:39.50 ID:u+LuodF+
codesite.exe -send hello
みたいに使えるCodeSiteLoggingのラッパーツールって無いですか
949918:2014/06/10(火) 06:15:23.34 ID:DxaG/FAR
プロジェクトを呼び出すと
クラスTVorbisInが見つかりません。エラーを無視して実行しますか?
注意:エラーを無視すると、コンポーネントまたはプロパティが失われる可能性があります

とでます。

NawAC6.1をインストールするにも解説しているサイトが無いのでどうしたら良いか…
950デフォルトの名無しさん:2014/06/10(火) 06:30:57.98 ID:VLOfpc1m
>>949
てか、コンポーネント/パッケージをインストールする方法をまず調べたら?
インストール方法は共通だよ
951デフォルトの名無しさん:2014/06/11(水) 19:30:47.40 ID:Bs2QtGfm
type
TMyClass = class(TMyBaseClass);
...
initialization
RegisterMyClass(TMyClass);

この手の登録処理を省きたいんですが
RTTI使って全クラスを列挙してTMyBaseClassの派生クラスを抽出する方法ないですか?
952デフォルトの名無しさん:2014/06/11(水) 21:06:23.57 ID:0Fb7ZLHS
TRttiContext.GetTypesで型を列挙して、それぞれのTRttiTypeのTypeKindがtkClassかどうかで
クラスかどうかをチェックして、Handle.Nameでクラスの型名を取得して、TypeData.ParentInfoで
継承元クラスのTypeInfoを取得して、それをずっと辿って継承元にTMyBaseClassが出現するか、ってな
手順になるかな。もし具体的なコードが欲しければここじゃなくて公式フォーラムかMLにどうぞ。
953デフォルトの名無しさん:2014/06/12(木) 17:09:44.54 ID:WVwRtvyG
列挙はともかく親までわざわざRTTIで辿らなくてもクラス参照取り出してInheritsFrom呼ぶだけでいいんじゃないの?
954デフォルトの名無しさん:2014/06/12(木) 17:14:45.28 ID:rSU+gR4e
それもそうだね
955デフォルトの名無しさん:2014/06/14(土) 04:45:46.47 ID:NSoK88RM
// TStringsを乗っ取るサンプル
type
 TStringsHelper = class helper for TStrings
  procedure Add; overload;
  procedure Add(s: String); overload;
  procedure Add(fmt: String; args: array of const); overload;
 end;

{ TStringsHelper }

procedure TStringsHelper.Add;
begin
 Add('');
end;

procedure TStringsHelper.Add(s: String);
begin
 Add(s); ← ここでオリジナルのTStrings.Addを呼び出すのってどうやるの?
end;

procedure TStringsHelper.Add(fmt: String; args: array of const);
begin
 Add(Format(fmt, args));
end;
956デフォルトの名無しさん:2014/06/14(土) 10:28:41.73 ID:pZZwN6gt
Self.
957デフォルトの名無しさん:2014/06/16(月) 21:58:08.16 ID:CcnTOfaT
inherited;
または
inherited Add(s);
958デフォルトの名無しさん:2014/06/19(木) 07:14:48.98 ID:NCzAFLQA
inherited
はうまく行きませんでしたが(実行できたものの何も文字が入らなかった)
inherited Add(s);
はうまく行きました。ありがとうございます。
959デフォルトの名無しさん:2014/06/19(木) 13:56:12.16 ID:5QFFttI7
初心者でとんちんかなことを言ってるかもしれませんが教えてください

TGifImage.Bitmap.ScanLineを使いたいんですが、
このときの色深度はどうなってるんでしょうか?

TGifImage.Bitmap.PixelFormatを調べればいいのですか?
それともPixelFormatを明示的に、たとえばpf24Bitにすればいいの?

Gifだから本来pf8Bitだと思うんですが、得られた値を
パレット色で変換するのですか(GlobalColorMap.Colors[]など)?

効率のいいピクセル値の取得法を教えてください。
よろしくお願いします。
960デフォルトの名無しさん:2014/06/19(木) 17:54:59.52 ID:9F/+Tvyf
GifだろうがJpegだろうが内部的にはBitmapでしょ
961デフォルトの名無しさん:2014/06/19(木) 19:34:44.51 ID:5QFFttI7
>>960
そうですね。

ダウンロードしてGif.LoadFromStream(TMemoryStream)後、
PixelFormatはpfDeviceになってました。

で、ScanLineで試したところ、pf32Bit相当のフォーマットでした。

pfDeviceって機種依存だと思いますが、1Pixelが何バイトかは
どこから分かるんでしょうか?
2回のScanLineして得たアドレスの差を画像の横幅で割る?
962デフォルトの名無しさん:2014/06/20(金) 09:42:53.62 ID:TWd9CfnL
> TGifImage.Bitmap.PixelFormatを調べればいいのですか?
これじゃねーの?
963デフォルトの名無しさん:2014/06/24(火) 15:09:10.53 ID:MRk4no2J
>>961
何か勘違いしてるがDDBを直接操作する手段は無いからScanLineでは当然触れない
ソースを見れば分かるとおりScanLineを呼び出した時点でDIBに変換されてる
964デフォルトの名無しさん:2014/06/24(火) 18:22:21.83 ID:abfxo/wj
>>963
>勘違い...

大いにありえます。DDBとかDIBとかはじめて聞きました
最終目的はネットからダウンロードしたGif画像を高速に
スキャンすることです

どうすれば高速に任意のピクセルの色情報を取得できるでしょうか?



>ソースを見れば

残念ながらStarter使用者です。ソースは参照できません
965デフォルトの名無しさん:2014/06/24(火) 19:40:17.20 ID:y6vzvZsg
>>963が言うには、ScanLineを呼び出せばDIBに変換されてるというらしいから、
ScanLineで1,2バイト適当に読んだ後に、PixelFormatをチェックしてみれば?
そしたらお望みのDIBのフォーマットになってるってことじゃね?
966デフォルトの名無しさん:2014/06/24(火) 20:02:10.28 ID:y6vzvZsg
つか、TGifImageで適当な画像読んでもPixelFormatがpf8bitになってるけど。
どんな画像読んだんだ?
967デフォルトの名無しさん:2014/06/24(火) 22:44:28.85 ID:abfxo/wj
>>966
たぶんアルファチャンネルの有無による違いかと
968デフォルトの名無しさん:2014/06/25(水) 15:24:02.24 ID:2LLNN4pY
>>965
なんでそんな無駄なことするんだ
「お望みのDIBのフォーマット」が欲しいなら最初からPixelFormat弄ればいいだろ
969デフォルトの名無しさん:2014/06/26(木) 08:29:30.85 ID:NGdvOluE
ScanLineする前にbitmap.PixelFormat := pf24bit で統一しておけばよさそう アルファチャンネルはいらないでしょ
970918:2014/07/01(火) 19:13:32.79 ID:PUCNylXr
すみません。以前wav再生ソフトのボリュームコントロールの
971デフォルトの名無しさん:2014/07/01(火) 19:15:54.89 ID:PUCNylXr
すみません。以前wav再生ソフトのボリュームコントロールの
質問した物です。

WindowsMediaPlayerコンポーネントを使おうかと思っていますが、
日本語のSDKって手に入るのでしょうか?
ボリュームコントロールは簡単にできる物でしょうか?

よろしくお願いいたします。
972デフォルトの名無しさん:2014/07/01(火) 21:24:31.31 ID:aOmMjglY
ActiveX使えば簡単
SDKとか必要ない
ActiveXでプロジェクトに取り込めばOK
973デフォルトの名無しさん
でもSDKの資料がないと使い方が分からんね
WMPの資料はWindows7 SDKの資料の中にWMP SDKというのが入ってる
もちろん全部英語