くだすれDelphi(超初心者用)その55at TECH
くだすれDelphi(超初心者用)その55 - 暇つぶし2ch700:デフォルトの名無しさん
14/02/14 05:03:38.96 .net
>>655
仕事で使うとなると、自分が異動した後のことを考えて、マイナーな言語は上司が避ける傾向にありますので不安です。

701:デフォルトの名無しさん
14/02/14 05:04:40.22 .net
>>656
Delphiはどういうことが原因で使われていないのですか?

702:デフォルトの名無しさん
14/02/14 05:16:46.85 .net
結局、Microsoft、Sun、IBMのように、開発ツール以外もビジネスをやっている会社が、
C#、VB、javaを推奨するものだから、総合力でDelphiはビジネス的に不利になったということですか?

703:デフォルトの名無しさん
14/02/14 08:04:25.76 .net
ヘジルスバーグ引き抜き

704:デフォルトの名無しさん
14/02/14 08:12:54.74 .net
Standard Pascal は糞だけど Object Pascal は最強

705:デフォルトの名無しさん
14/02/14 08:18:57.12 .net
プログラマにとって重要なものは言語ではなくセンスだ。

706:デフォルトの名無しさん
14/02/14 09:05:51.61 .net
Delphiが


707:使われていないのは良さを理解できない世の中が悪い



708:デフォルトの名無しさん
14/02/14 09:24:08.60 .net
また変な人が痛いDel厨を演じてるようですな

709:デフォルトの名無しさん
14/02/14 10:15:42.79 .net
C言語厨よりマシ

710:デフォルトの名無しさん
14/02/14 11:01:16.56 .net
Microsoftの資本が入ったときに落ちぶれていく施策を採用させられたからですか?

711:デフォルトの名無しさん
14/02/14 11:03:54.79 .net
ネイティブアプリは業務アプリには危険という認識が広まったというのも一因かな。

712:デフォルトの名無しさん
14/02/14 11:31:37.50 .net
iOS/Androidの同一ソース開発が安定するようになると、もう少しメジャーになるのでしょうか?
今のところ、モバイル開発者がDelphiをやり出したという話はほとんど聞きません。

713:デフォルトの名無しさん
14/02/14 13:15:08.47 .net
やっぱり会社が変わりすぎたのが敗因かな
多プラットフォーム対応も方針が変わりすぎた
MSが.NET以降に手間取ってる隙がチャンスだったんだけど、
.NET版Pascalとか出しちゃうしチャンスを逃してる

714:デフォルトの名無しさん
14/02/14 14:51:04.95 .net
いい加減そういうのはエンバカデロスレでやってくれ
ここは言語やライブラリの使い方に関する質問スレだ
そういう質問をする気も答える気もないなら消えてくれ

>>648
TFlowLayoutには縦に並べる機能はないが、TFlowLayoutをTFlowLayoutの中に横に並べて、
1つずつTFlowLayoutBreakをすれば擬似的に縦に並ぶようにはなる
あとはこちらでは試してないけど、こういったのを作ってる人もいるから参考に
URLリンク(delphihaven.wordpress.com)

715:デフォルトの名無しさん
14/02/14 15:06:07.62 .net
複数のPCに導入する予定のプログラムで、
自作フォーム上にPDFを表示したいのですが、何か方法はありますでしょうか?
わかる方がいましたらご教示願います。

716:デフォルトの名無しさん
14/02/14 15:23:59.49 .net
>>682
adobe readerインスコしてTWebBrowser(もしくはTEmbeddedWebBrowser)

717:デフォルトの名無しさん
14/02/14 16:47:30.43 .net
>>682
PDFの操作をしたかったり、Adobe Readerに依存したくなければ、
Active PDFのようなフリーのコンポーネントを使う手もあります。

718:デフォルトの名無しさん
14/02/14 19:59:13.01 .net
ありがとうございます。683さんの方法で何とか実現できそうです。
もうひとつ質問なのですが、PDFの1ページ目のサムネイルを得る方法はないでしょうか?
Acrobatや有料コンポーネントなどを買えば可能なようですが、
予算的に厳しいため、できれば無料か、高くても数千円で済むようだとありがたいです。

719:デフォルトの名無しさん
14/02/14 21:13:23.26 .net
TWebBrowerに一度表示させてスクショを取るとか(キャプチャはWinAPIで出来る)

720:635
14/02/16 22:44:03.94 .net
素人な質問でごめんなさい。

あの Type というのは一体どういうものなんでしょう?
Var とかぶってるところもあるし、なんかイマイチ分からないですね。

721:デフォルトの名無しさん
14/02/16 23:00:35.65 .net
型宣言と変数宣言

722:635
14/02/16 23:03:36.67 .net
>>688
ありがとうございます。
でも、その 型宣言 というのがイメージが湧かないんですよ。
解説本見てもちゃんとした説明がないですし。

723:デフォルトの名無しさん
14/02/16 23:09:47.31 .net
Varが 変数を宣言するのに使う。

Typeが、型を宣言するのに使う。
構造体や配列、レコード型など
ユーザーが型を作ることが出来る。

724:デフォルトの名無しさん
14/02/16 23:16:15.37 .net
>>689
6のマニュアル 
URLリンク(www.dotup.org)

725:デフォルトの名無しさん
14/02/17 22:19:19.71 .net
Delphiって関数を使うときにその関数の記述部分が前にないといけないと聞いたのですが本当ですか?

726:デフォルトの名無しさん
14/02/17 22:59:23.87 .net
定義か宣言のいずれかが必要です。Cのように暗黙に関数を仮定することはできませんが、
(Cのプロトタイプ宣言に相当する)前方宣言を用意しておけばOKです。

727:デフォルトの名無しさん
14/02/18 09:53:18.79 .net
Cでいうところのヘッダーファイルがひとつにくっついてる感じ

728:デフォルトの名無しさん
14/02/18 11:14:18.03 .net
forward宣言はpascal本来の文法にもある
unitのinterface部のところはDelphi/Turbo Pascalの拡張じゃなかったかな

729:デフォルトの名無しさん
14/02/18 15:31:54.07 .net
>>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;

730:デフォルトの名無しさん
14/02/18 16:23:26.69 .net
>>696
誰もhoge荒らしにきいてないんだからさっさと消えろよ

731:635
14/02/18 19:51:53.15 .net
>>690
うーん。なんだか分かったようなわかんないような(←ほとんど分かってない)
ま、構造体も配列もまだ使う予定ないから、わかんなくても良しとしよう!
それにしても、みんな何であんなの簡単に使いこなせるんですかねぇ。

>>691
これは良いモノを教えていただきました。ブックマークしときますね^^

732:デフォルトの名無しさん
14/02/19 12:00:39.71 .net
消えるのはお前だな > 697

733:デフォルトの名無しさん
14/02/19 14:36:03.86 .net
はい…

734:デフォルトの名無しさん
14/02/20 15:55:16.23 .net
C#のusingみたいな機能ってありませんか?

735:デフォルトの名無しさん
14/02/20 17:45:42.75 .net
つ try...finally

736:デフォルトの名無しさん
14/02/20 17:49:50.70 .net
C#使いが今頃Delphi触り始めるっていうのは、モバイル向けか?
悪い事言わんから、やめといた方が良いと思う

737:デフォルトの名無しさん
14/02/20 21:28:00.12 .net
>>702
C#のtry-finallyとusingは等価ではないんですが、Delphiでは同じなんですか?

738:デフォルトの名無しさん
14/02/20 21:35:18.01 .net
>>703
そうなんですか?
資料は少ないですが、例えばHello wordlを作ってデプロイして起動するまでは
他の環境よりかなり楽だったので、普及して本とか増えてくれたら結構いいとこいくと思います

739:デフォルトの名無しさん
14/02/20 21:37:41.71 .net
>>704
usingそのものはないよ。

740:デフォルトの名無しさん
14/02/21 16:16:05.13 .net
>>703
なぜ?

741:デフォルトの名無しさん
14/02/21 16:36:56.94 .net
エンバカと一部ユーザー?が喧伝してる夢物語が実現するとは到底思えないから
Delphi,VCL,C++Builderは本当に素晴らしい物だと思うが、エンバカになってからの
状況見てると何も明るい材料が無い
俺はVCL,C++Bulder使いだから知らないだけかもしれないが、Delphiの方はそんなに良い状況なのか?

742:デフォルトの名無しさん
14/02/21 16:40:52.51 .net
エンバカスレは別にあるからそっち行ってくれ

743:デフォルトの名無しさん
14/02/21 16:42:59.99 .net
WindowsとLinuxで同じ事が出来なかった人達に、
iなんたらとAndroidなら同じ事が出来ると思うのか?
今のIDEの出来も、もうEclipseには置いて行かれている

744:デフォルトの名無しさん
14/02/21 18:55:34.45 .net
>>708>>710
関係ない話題を繰り返したいのであれば出て行ってください
あなたがどう思うかはこのスレには関係ありませんのでチラ裏か以下のスレでどうぞ
スレリンク(tech板)

745:デフォルトの名無しさん
14/02/21 22:10:23.17 .net
ウザい自治体の>>711はスルー�


746:ナ



747:デフォルトの名無しさん
14/02/21 22:15:19.02 .net
適材適所。

748:デフォルトの名無しさん
14/02/21 23:02:57.95 .net
>>711=自治体

749:デフォルトの名無しさん
14/02/24 16:21:29.26 .net
荒らしが何か言ってる

750:デフォルトの名無しさん
14/03/14 23:02:45.98 SeBq1h8L.net
初歩的な質問で申し訳ないですが...

スレッドの Create や Destroy はもしかして
メインスレッドで実行されるんですか?

751:デフォルトの名無しさん
14/03/15 16:30:17.49 +WFsYmz/.net
スレッドが、TThreadクラスの実装で使われてるOSのスレッドの事を意味するなら、
ソースを見るとスレッドの生成はTThreadのCreateコンストラクタで作成されているよーな。
つまり、君がTThreadのCreateを呼ぶタイミングで・・

752:デフォルトの名無しさん
14/03/15 18:14:43.10 1abxrNZC.net
>>717
ちょっと疑問に思ったのは、TThreadのconstructorなどで
メインスレッドの要素(VCLオブジェクトなど)へ直接アクセス
してもいいのか、それもとSynchronizeを使うべきかってことです。

それで、メインスレッドからTThreadをCreateする段階で
constructorもメインスレッドで実行されるのであれば、
constructor内でVCLオブジェクトに直接アクセスしても
問題ないですよね。

753:デフォルトの名無しさん
14/03/15 18:34:42.01 l3tZ6mor.net
逆に呼ぶだけで別スレッドで実行されるコンストラクタの作り方を知ってるなら教えて欲しい

754:デフォルトの名無しさん
14/03/15 19:22:59.24 +WFsYmz/.net
>メインスレッドからTThreadをCreateする段階で
>constructorもメインスレッドで実行されるのであれば、
>constructor内でVCLオブジェクトに直接アクセスしても
>問題ないですよね。
だ。問題ない。
別スレッドで実行されるのはoverrideするexecuteメソッド。
デストラクタはFreeOnTerminateの設定しだい

755:デフォルトの名無しさん
14/03/16 14:13:47.85 s2v9Bhoy.net
>>720
ありがとうございます。

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

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

メインスレッドから明示的に解放する場合は
メインスレッドでdestructorが実行されるってこと?

756:デフォルトの名無しさん
14/03/17 07:51:51.15 QpwZfi7l.net
FreeOnTerminate=trueは実質的に使い道がないからあまり悩むな

757:デフォルトの名無しさん
14/03/17 14:28:39.76 NiSgUcDM.net
使い道かなりあるだろ
お前が使いこなせてないだけ

758:デフォルトの名無しさん
14/03/18 06:53:32.63 ZB+Vqles


759:.net



760:デフォルトの名無しさん
14/03/18 06:56:53.03 ZB+Vqles.net
>>723
「かなり」はないな。
「わずか」に完全非同期のスレッドに使えるけどそれほど必要じゃないし
仮に必要としてもexe別にした方がいい事のほうが多い。

761:デフォルトの名無しさん
14/03/18 15:34:47.95 Qsk0Z8cy.net
必死の自演もむなしく…

762:デフォルトの名無しさん
14/03/18 19:17:52.57 ZB+Vqles.net
自演なら時間空けた上ID変えるはw

763:デフォルトの名無しさん
14/03/19 01:10:13.81 YMTMO1GO.net
>FreeOnTerminate=trueは実質的に使い道がないからあまり悩むな
プログラムで書くならFreeOnTerminate := true;なんだが。

>>724
>マジで行ってるならバグの元だからやめたほうがいいぞw
バグというよりコンパイルが通らないが...

764:デフォルトの名無しさん
14/03/19 01:46:57.53 X5Pm8TEB.net
:のあるなしとかそんなくだらない部分にしか反論できなければ無理してレスしなくていいんじゃ?見ててしらける。

765:デフォルトの名無しさん
14/03/19 07:21:28.20 2cESFier.net
例えばここ URLリンク(wiki.lazarus.freepascal.org)
のサンプルの中でFreeOnTerminate=trueにもかかわらず

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

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

などと平気でやっている。
MyThread が先に終了してたらMyThread.Terminateはアクセスバイオレーションだ!
つまりFreeOnTerminate=trueの時はメインスレッドからサブスレッドを制御するのは
サブスレッドの実体をメインスレッドに持っているだけではできないのだ。
そしてFreeOnTerminate=trueの唯�


766:黷フメリットは「処理が終わったら余分なメモリが空くこと」だが それはFreeOnTerminate=falseでもスレッドリストを作りガベージコレクトを適切に行うことで解決できる。 これらのことからするとFreeOnTerminate=trueは実質いらない子なのである。



767:デフォルトの名無しさん
14/03/19 07:30:16.83 2cESFier.net
ちなみに「スレッドリストを作りガベージコレクト」とは
単に、適当なタイミング(新しいスレッドを作るときとかタイマで10分毎とか、どうするかはプログラマの自由)で
if MyThread.finished then MyThread.Free;
とするだけのことである。
サブスレッドが複数なら
for i:= 0 to thredlist.count-1 do
if thredlist[i].finished then thredlist[i].Free;
とかね。

768:デフォルトの名無しさん
14/03/19 07:42:15.76 2cESFier.net
初心者スレなのでさらに正確に書くと
if Assigned(MyThread) and MyThread.finished then begin
MyThread.Free;
MyThread:= nil;
end;
か。
なお以前は
MyThread.Free;
MyThread:= nil;

FreeAndNil(MyThread);
にするとなぜかうまく行かなかったが今はどうか知らない。

769:デフォルトの名無しさん
14/03/19 08:22:24.10 2cESFier.net
なお、もちろん「少量のメモリ使用なんて気にしない」という
ならガベージコレクトは不要だ。
仮にサブスレッドが大量のメモリを使うとしても、executeの
最後でそれらを開放してやればいいだけの話なので
眠ってるスレッドが消費するメモリなんてたかが知れている。

770:デフォルトの名無しさん
14/03/19 10:31:13.07 Wx0a5I3W.net
まぁ初心者スレなのでFreeOnTerminateは普通Falseだろ、といわれりゃそうだけど、
>FreeOnTerminate=trueは実質的に使い道がないからあまり悩むな
は乱暴すぎるな。せめて"わからないうちはFalseで十分"くらいにしとけ。

771:デフォルトの名無しさん
14/03/19 14:33:07.91 NwQr/+gL.net
自論を守ることに必死になって本来使われるべき場面すら否定してるだけでしょ
バカはほっとけ

772:デフォルトの名無しさん
14/03/19 16:01:20.43 T8UZmlef.net
子スレッドを使う基本 = やらせて放置、終わったら「終わったよ」報告(1)をさせる

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

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


TThread のつくりがこういう使い方を想定して作られてるので、それに従うのが紛れがなくていいぞ。

773:デフォルトの名無しさん
14/03/19 19:46:18.29 2cESFier.net
>>735
「本来使われるべき場面」とは?
ちなみに私がバカというのはあたってますが、
ガベージコレクトを標準搭載している言語ではごく普通の手法なので「自論」ではないです。

>>736
それだとメインの旗を立てる際にsyncronizeしないと
いけないので私の提示したた手法より複雑になります。
そして「TThread のつくりがこういう使い方を想定して作られてる」というのは誤解と思われます。

774:デフォルトの名無しさん
14/03/19 22:17:04.02 VkMj3BIA.net
ちょっと教えてください

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も含みます

775:デフォルトの名無しさん
14/03/19 23:45:37.42 YMTMO1GO.net
>>729
だったら無視すればいいのにw

>>731-732 >MyThread.Free; >MyThread:= nil; Freeしてnilする間に呼ばれたらどうするの? こんな馬鹿の為にFreeOnTerminateは必要なのかなw



777:デフォルトの名無しさん
14/03/20 01:54:02.08 vqexB7VW.net
>738
64のプログラムがProgram Filesに、
32のプログラムはProgram Files(x86)、
で良いのでは?

778:デフォルトの名無しさん
14/03/20 07:01:48.61 6vGw0ZTO.net
>>739
Freeにはスレッドが終了するまで待つ処理が入ってますから問題無いですよ。
調べずに書く人はバカな私よりバカだと思います。

779:デフォルトの名無しさん
14/03/20 07:22:58.71 aCZWTFRX.net
そういうこと考えないでいいのが FreeOnTerminate

780:デフォルトの名無しさん
14/03/20 08:45:40.83 6vGw0ZTO.net
>>742
まあそうですが、その代わり>>736さんが適切に指摘されているような機能を実装する必要がありますから
結局面倒ですよね。

781:デフォルトの名無しさん
14/03/20 09:09:09.35 6vGw0ZTO.net
あと、考えるのが面倒、調べるのも面倒、でも心配というのなら
mythread.WaitFor;
mythread.Free;
mythread:= nil;
とすればよいだけの話です。

782:デフォルトの名無しさん
14/03/20 14:27:34.60 O3H8Rb0w.net
それスレッド使う意味なくね?トンデモすぎてもう本末転倒だよ…
お前の糞コードには文句言わないから、せめて何も知らない初心者は巻き込まないで

783:デフォルトの名無しさん
14/03/21 00:36:10.17 pbbcuVJV.net
>>741
>Freeにはスレッドが終了するまで待つ処理が入ってますから問題無いですよ。
えっ?本当に馬鹿なんだw
マルチスレッドの意味が分からないのかな?

Freeとnilの間と言う意味が分かってないんだね、こんな馬鹿が作ると
タイミングによって出たり出なかったりするバグを作りだして非常に迷惑するんだよな。

784:デフォルトの名無しさん
14/03/21 02:02:48.57 PlAj+MNn.net
そもそも初心者がマルチスレッドなんてやるの? そんなのできたら中級以上だよ

785:デフォルトの名無しさん
14/03/21 11:14:31.18 UsfjXS01.net
なんかあれだな   基本的に親スレから子スレをいじるのはご法度だよ

さわらぬスレにたたりなしって、知らんのか?

786:デフォルトの名無しさん
14/03/21 12:12:00.72 dYaCWWLA.net
ところで、>>741が言ってる

「Freeにはスレッドが終了するまで
待つ処理が入ってます」って本当なの?

787:デフォルトの名無しさん
14/03/21 14:07:24.14 aCiCqmdu.net
>>749
本当

788:デフォルトの名無しさん
14/03/21 21:20:49.05 dYaCWWLA.net
>>750
なるほど

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

てか、自分でFreeするんだったら
MyThread.Terminateなんか不要じゃん

789:デフォルトの名無しさん
14/03/21 22:15:52.10 aCiCqmdu.net
いや、それはまた別。Terminateのヘルプに書いてあるけど、
途中で処理をキャンセルしたい場合に使う。

790:デフォルトの名無しさん
14/03/22 20:11:57.19 458foGzL.net
でも途中キャンセルしたらほとんどの場合はそのままFreeするからやっぱりいらないよね

791:デフォルトの名無しさん
14/03/23 08:33:53.01 ZLskKlYl.net
いちどWinAPIだけでスレッド書いてみれば良い
意味がよく分かる

792:デフォルトの名無しさん
14/03/24 07:36:57.69 Eiiayiu7.net
>>746
終了したスレッドが勝手に動き出すとかないですから問題無いですよ。
あなたスレッドの動作や意味を間違えたますよね完全に。
多分Delphiしかできない人なんでしょうけど他言語も触ってみると良いですよ。

793:デフォルトの名無しさん
14/03/24 08:03:56.24 Eiiayiu7.net
>>748
それで顧客が納得してくれれば苦労はしないのです。
あなたが親子という概念を既に導入していることからも分かる通り
親側でクローズボタンが押されても子が終了するまで待つという
ようなプログラムではダメ出しされるのが通常だからです。
そこで
Mythread.terminate;

Mythread.free;
が必要になるわけですが
FreeOnTerminate=trueだとMythreadが終了してたらアクセスバイオレーションになるから
工夫が必要だよさあどうするというのがメインの論点です。

794:デフォルトの名無しさん
14/03/24 08:09:51.06 osm7C2MP.net
まさ


795:か仕事でマルチスレッドプログラム書いてて 同期オブジェクトやスレッド間通信用のメッセージングの仕組みを 用意してないとか言わないよな?



796:デフォルトの名無しさん
14/03/24 08:15:34.47 Eiiayiu7.net
ひとつの解決方法は >>736さんの提示された
FreeOnTerminate=trueのまま工夫する方法です。
もうひとつは私が提示したFreeOnTerminate=falseにして
必要ならガベージコレクト機能を組み込むという方法です。
あとは具体的解決方法も示さずバカだのアホだ
のいうだけの人が約1名いるという状況です。

797:デフォルトの名無しさん
14/03/24 08:22:55.85 Eiiayiu7.net
>>757
スレッド間通信もひとつの手ですね。
ただそこまで必要ないことのほうが多いです。
DelphiのThreadクラスの優秀さはスレッド間通信を使用しなくても簡単に
マルチスレッドアプリができるというところにあると思います。

なお、758は756の続きでありあなたへのレスではありません。

798:デフォルトの名無しさん
14/03/24 08:52:25.38 Eiiayiu7.net
>>757を受けてここまでの状況をまとめ直しました。

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

A1 >>736さんのようにFreeOnTerminate=trueでサブスレッド側からメイン側のフラグを操作する。
A2 >>757さんのようにFreeOnTerminate=trueで同期オブジェクトやスレッド間通信で処理する。
A3 FreeOnTerminate=falseにして、必要ならスレッドマネージャ(≒ガベージコレクト)機能を組み込む。
番外 具体的解決方法も示さずバカだのアホだのいうだけの人が約1名。

799:デフォルトの名無しさん
14/03/24 15:50:15.88 TTLwjTKi.net
Delphiハックで有名な人らがFreeOnTerminateはTrueのほうがよく使うと発言してる件

800:デフォルトの名無しさん
14/03/25 08:44:40.07 5thxtN7r.net
>>761
730で示したとおりLazarusのWikiでさえ間違ってますから
FreeOnTerminate=trueの方が多数派の可能性は十分あるでしょうね。
私も最初はFreeOnTerminate=trueから始め、A1やA2を採用しておりました
(なお、同期オブジェクトやスレッド間通信は今でも必要に応じて他の目的のために使うことがあります)。
スレッドマネージャ型に気づいたのは、他のガベージコレクション標準搭載言語でのスレッド処理や
ゲームプログラミング(擬似マルチスレッドですが)で最近?流行のオブジェクト管理方法に触れた時です。
眼から鱗でした。
初心者の方は、A1~A3型すべての親子型スレッドのサンプルを作ってみると勉強になると思います。

801:デフォルトの名無しさん
14/03/25 16:06:46.24 JWqzamQX.net
Delphiと関係ないLazarusのwikiを持ち出して間違ってると言われましても…
それ以外に自分の意見を補強できる資料が無かったんだろうけどw

802:デフォルトの名無しさん
14/03/26 00:02:18.41 3vOQuU/w.net
>>755
>終了したスレッドが勝手に動き出すとかないですから問題無いですよ。
誰もそんなことを問題にしていない。
Freeしてnilする間に使われたらどうするんだと言っている。
そんなプログラムを組んでいたらAccess Violationになるぞ。
こいつ本当にマルチスレッドのプログラムを作ったことがあるのか疑問だ?

803:デフォルトの名無しさん
14/03/26 00:17:56.35 PxlFEF9w.net
複数スレッドから読まれることを前提としてたら普通は一時変数に取ってnil入れてそれから解放するわな(FreeAndNilの実装)

804:デフォルトの名無しさん
14/03/26 00:47:26.59 qmu2UESc.net
まぁ、技術レベルが低くて代入演算子に:がないからコンパイルできないとか
本題と関係のない事にしか突っ込むしかできな奴が「マルチスレッドのプログラムを作ったことがあるの?」
と言ってもジョークにしか聞こえないけど。

805:デフォルトの名無しさん
14/03/26 08:11:38.29 r65XrFp2.net
>>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;

こいつ本当にマルチスレッドのプログラムを作ったことがあるのか疑問だ?

806:デフォルトの名無しさん
14/03/26 08:32:03.41 r65XrFp2.net
ちなみに上のプログラムは端折って書いているのでコンパイルできません。
初心者の方には申し訳ないですが是非自分でプログラムしてみてください。
なお、既に述べたとおり、ガベージコレクト部分(上のプログラムのTForm1.Timer1Timerメソッドの部分)
は必ずしも実装する必要はありません。

807:デフォルトの名無しさん
14/03/26 10:57:22.97 MFJ22iPr.net
だからさあ  メイン側で余計なことする必要なんぞない
タイマー持ち出すとか正気の沙汰じゃない

サブスレッドは仕事終わったら結果残して (残す必要もない場合だってある) 
ひっそりと自ら消えていけばいいだけだよ。

808:デフォルトの名無しさん
14/03/26 11:58:16.25 r65XrFp2.net
>>769
今後必要になった時に「そういえばあんな議論があったな」と思い出して
いただければ結構ですよ。A1~A3どれもやる必要がないのであれば
用いる必要がないのは当然です。
(あまりにも当然過ぎてあなたを除き誰もそこには疑問を持っておりません)

また、上のプログラムはあなたを含めた初心者宛ではなく
「本当にマルチスレッドのプログラムを作ったことがある」764さん宛のものですので
参考にしないでください。
なお、ガベージコレクトは必須ではないですし、タイマーでやらなければいけないという
ものでもありません(既に書きました)。ですから「タイマー持ち出すとか正気の沙汰じゃない」
という感想も全くマトハズレです。

809:デフォルトの名無しさん
14/03/26 12:04:58.57 r65XrFp2.net
>>763
出所(ソース)不明なだけでなく「Delphiハックで有名」という威光をバックに
自分の意見を補強するよりはだいぶマシかとw

810:デフォルトの名無しさん
14/03/26 14:58:18.26 zZlUGj+i.net
つまりどっちもどっちってことか
2chに書くような屑の言葉を信用するなってことだなw

811:デフォルトの名無しさん
14/03/26 18:00:37.20 r65XrFp2.net
>>763
あと、よく読めば分かると思いますが
自分の意見の補強ではなくむしろ相手の意見の補強に使ってるのですが・・・

812:デフォルトの名無しさん
14/03/26 19:34:57.44 BF9ctGYU.net
自分の望み通りの動作でバグ無く動きゃいいんだよ

813:デフォルトの名無しさん
14/03/26 19:56:45.56 KA6gGFh4.net
ていうかスレッドの質問って初歩的な質問なんですね。
私は業務でDelphiのプログラムを作ってますが、マルチスレッドの
プログラムなんぞ作ったことがありません。
最近の初心者のみなさんは素晴らしい技術をお持ちですね。

814:デフォルトの名無しさん
14/03/27 07:19:19.10 ArBm9NmN.net
そうですね!

815:デフォルトの名無しさん
14/03/27 14:13:11.20 5hMYU59G.net
自分は初心者だけど、ネット関連のアプリ作ってて
スレッドは多用するな

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

最悪でも1、2秒の停止時間に文句を言う利用者がいるからね

816:デフォルトの名無しさん
14/03/27 15:07:12.77 6x5K07pQ.net
>>775
それで質問はなんですか?
どうでもいい感想はチラシの裏にお願いします。

817:デフォルトの名無しさん
14/03/27 18:24:52.12 LkX3HMZn.net
>>778
お前を消す方法は?

818:デフォルトの名無しさん
14/03/27 19:31:29.40 6x5K07pQ.net
>>779
あなたが死ねば、色々まとめて消えます。

819:デフォルトの名無しさん
14/03/27 19:34:08.09 loEnDXuM.net
バグと共ににっちもさっちも往かず
沈みます
さようなら

820:デフォルトの名無しさん
14/03/27 19:45:12.28 c5YDAWUv.net
このスレには質問と回答以外は書いちゃダメらしいぞ。

821:デフォルトの名無しさん
14/03/27 19:51:43.82 ArBm9NmN.net
>>777
ネット系はスレッド必須っすよね。初心者で対応できるとはさすがです。
でもどこかでTerminate使うなら結局一緒では?
Free内部でTerminate呼んでるとこでその停止は生じてると思うんで。
Terminate使う必要のないプログラムならFreeも使う必要ないし。

822:デフォルトの名無しさん
14/03/28 01:28:31.10 wmf34mqq.net
>>767
764さん


823:が言っているのは、mythread.Free;とmythread:= nil;の間に別のスレットがmythreadを使うとAccess Violationになるということだと思います。



824:777
14/03/28 02:40:29.80 sGxVzfHB.net
>>783
自分のTThreadの理解が不十分なのかもしれないけど
明示的にFreeすると、メインスレッドでTThreadの解放まで
待たくちゃならないでしょ

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

それがイヤで、明示的にFreeで解放はしないんだけど、
自分の理解不足かな?

825:デフォルトの名無しさん
14/03/28 06:56:10.22 d6QGntWj.net
>>785
いやおそらく理解は十分だと思いますよ。
おそらくA3型を前提とした質問だと思うのでそうとして答えますね。
(もしそうでなかったら無視してください)
まず 767 の
TForm1.FormDestroy;
begin
if Assigned(Mythread) then mythread.Free;
end;
というFreeは、「親が子より先には死んではいけない」という親子型の基本理念を実現するものですので
ここでウェイトが生じうることは我慢して下さい。
逆に言えば FreeOnTerminate=true だとその理念が無いために A1型やA2型ではいろいろ苦労されてい
るはずです。
子が親の予想より早く死んでしまったためアクセスバイオレーションとなることは既に書きましたが
親が子の予想より早く死んでしまったためアクセスバイオレーションとなることもあるというわけです。

826:デフォルトの名無しさん
14/03/28 06:58:04.75 d6QGntWj.net
次に 767 の
TForm1.Timer1Timer;
begin
if Assigned(mythread) and mythread.finished then begin
mythread.Free;
mythread:= nil;
end;
という部分での Free ですがここはmythreadが処理を完了していますので
Freeでウエイトが生じることはないはずです。

827:デフォルトの名無しさん
14/03/28 07:07:12.92 d6QGntWj.net
最後に 767 の
TForm1.Button1click;
begin
if Assigned(mythread) then mythread.Free;
mythread:= TMyThread.create;
end;
という部分でのウェイトですがここはサブスレッドを1つだけに制限しているため
Freeして使いまわしているだけです。複数のサブスレッドを作るようにすればここでのFreeは不要です。
例えば、HTTPサーバーでリッスンするスレッドに接続要求があった時は接続可能な数まで
サブスレッドを作成するだけでいちいちFreeはしないと思います。

828:デフォルトの名無しさん
14/03/28 07:13:34.20 d6QGntWj.net
>>784
「別のスレットがmythreadを使う」というプログラムがよくわからないので
具体例を示していただけると幸いです。
FreeOnTerminate=trueだとそういうプログラムでも問題が生じないという
ところまで示していただけると多分今後スムーズに話が進みます。

829:デフォルトの名無しさん
14/03/28 07:24:05.61 d6QGntWj.net
>>784
なお、「別のスレットがmythreadを使う」がもし「子スレッドが複数いて子同士での通信」を意味するなら
mythreadを使うのではなくsyncronizeや同期オブジェクトやスレッド間通信を使ったほうがよいと思います。
それはFreeOnTerminate=trueでも同じのはずです。

830:デフォルトの名無しさん
14/03/28 07:56:07.60 oYluIFxT.net
うん、なんかファイト。

831:デフォルトの名無しさん
14/03/28 07:57:53.78 Dgxgcg2X.net
スレッドの管理は、スレッドリストっていう便利なものが用意されてるから使えばいい
問題の大半はこれで解決

832:デフォルトの名無しさん
14/03/28 10:41:40.30 MhBcNb1x.net
こんなの見つけた
URLリンク(homepage2.nifty.com)
ここはスレッドの事が書いてある

833:デフォルトの名無しさん
14/03/29 00:30:35.70 MLfxEq3F.net
>>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の常識的なルールもしらないとは。

834:デフォルトの名無しさん
14/03/29 00:31:24.90 MLfxEq3F.net
>768
>なお、既に述べたとおり、ガベージコレクト部分(上のプログラムのTForm1.Timer1Timerメソッドの部分)
自慢げにガベージコレクト、ガベージコレクトとうるさいが、その仕様は
ガベージコレクションじゃないと分かっていないのが痛いほど�


835:゚しい過ぎる。 >756 >それで顧客が納得してくれれば苦労はしないのです。 >親側でクローズボタンが押されても子が終了するまで待つという >ようなプログラムではダメ出しされるのが通常だからです。 お前が顧客に信用されていないだけだと思わないのか? 顧客も馬鹿じゃないんだから、必要なら待つ。 まっ普段から駄目な技術者は本当に必要なことをいっても信用してもらえないからな。 つまりお前は ・マルチスレッドのプログラムが作れない。 ・オブジェクト指向が理解出来ていない。 ・Delphi の基本的なルールもわからない。 ・客に信用されていない。 と言うことの、駄目駄目の三流技術者でいいんかな。



836:デフォルトの名無しさん
14/03/29 08:43:24.44 ss1xGzqs.net
>>794
>>795
えーはい、適当なプログラム、適当な命名、申し訳ありませんでした。
今後気をつけたいと思います。
「Freeしてnilする間に使われるからおかしい!」という主張は撤回された
ものと受け止めさせていただきます。

837:デフォルトの名無しさん
14/03/29 08:44:25.64 OI7JjiZi.net
どうでもいいがここは初心者の質問スレじゃなかったのかね?
まあ、今更Delphiやろうって奴も少ないだろうけどな。

838:デフォルトの名無しさん
14/03/29 08:58:08.53 ss1xGzqs.net
あ、それから、別に承継しなくても同じUnit内ならprivate内の項目でも自由に使えますよ。
釈迦に説法でしょうけど。

839:デフォルトの名無しさん
14/03/29 09:18:19.16 ss1xGzqs.net
>>797
質問者のレベルが高いと話のレベルも高くなるので難しそうに感じるかもしれませんが、
(質問者のレベルが低くすぎてもポイントがずれまくって難しそうに感じるか)
スレをたどってもらえればわかるように根っこはTThread初めの一歩!みたいな話ですから
初心者向けの話だと思いますよ。
ようは、「FreeOnTerminate=trueが便利そう!」と思ってそこからスタートするとはまるよ、
大したメリットもないんだからFreeOnTerminate=falseで十分だよ、という話です。
多分この話題はもう秋田という感じなのでしょうけど、
初心者を助けたいと思っているだけで自説を押し付けるとかそういう意図ではないので
質問等が消えれば消えますので少しだけ我慢を

840:デフォルトの名無しさん
14/03/29 10:02:01.17 UJJa62hD.net
善意でやってくれてるのは了解した。
ただこの先スレッドの話題がずっと続いたら本当に初歩の初歩の質問がしづらいかなと思っただけ。

841:デフォルトの名無しさん
14/03/29 10:17:55.10 CFiKeRo+.net
昔は質問スレが複数に分かれてたが、現在はスレタイの「超初心者用」に意味はない

842:デフォルトの名無しさん
14/03/29 10:35:32.59 4Djj1jA3.net
>ただこの先スレッドの話題がずっと続いたら本当に初歩の初歩の質問がしづらいかなと思っただけ。
>>795みたいに一人だけ煽ってる奴はいるが、これぐらいで質問できなくなるって、
そんなんじゃ世の中生きていけねぇだろ。配慮の仕方が間違ってるわ。

843:デフォルトの名無しさん
14/03/29 14:33:06.82 6fdBLR4+.net
>>786
>親が子の予想より早く死んでしまったためアクセスバイオレーションとなる

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

子が親をアクセスしたときのエラー?
子が親をアクセスしないでもエラーが出る?

844:デフォルトの名無しさん
14/03/29 19:49:54.14 ss1xGzqs.net
>>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;
とかやることですが、これだけではダメなことは既に指摘したとおりであり、
もうどうしていいかわからなくなりパニクる(私だけかもしれません)と
いうわけです。

845:803
14/03/30 00:49:20.37 wYL9BvPj.net
>>804
説明、ありがとうございます



846:タは、このスレッドの話題の発端となった>>716の質問者でもあります 実は初心者なのにネット関連のアプリを公開してしまって 今頃になって基本が分かってないことに気づき慌ててる... アプリ内でFreeOnTerminate := Trueで作ったワーカスレッドが 10近く常時動いてます 終了ボタンをクリックすると、終了を示すグローバル変数をセットし それ以降はワーカスレッドからメインスレッドへアクセスすることはない で、聞きたかったのは、親(メインスレッド)が子(ワーカスレッド)よりも 早く終了した場合(もしそんなことが内部的にあるのなら)、 やっぱマズイことがあるのかなってこと 今んとこ終了時にエラーが出たとか聞かないけど、ただ運が 良かっただけってこともあるし...



847:デフォルトの名無しさん
14/03/30 07:16:18.49 8jWWG5Ib.net
>>805
おそらく Form1、mythread などというDelphiレベルの話ではなく OS レベルでの話ということですよね。
私は調べたことがないので、直感でしかありませんが多分メインスレッドが先に終了することなどない
のではないでしょうか。有識者の解答をお待ちください。
いずれにせよそういう疑問を生じさせてしまうのは、死期がはっきりしないという
FreeOnTerminate := Trueの功罪だと私は思います。

848:デフォルトの名無しさん
14/03/30 12:50:46.18 B4XYVLF4.net
URLリンク(msdn.microsoft.com)

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

>>806
FreeOnTerminateの功罪って意味不明。FalseならどこかでFreeしなきゃいけないし、Trueなら
勝手にFreeされるので止めた後はアクセスしちゃいけない、それだけ。それにプロセスの終了時は
Windowsがリソースの回収を行うので実際はFalseでもFreeする必要がない(好みじゃないけど)。

849:デフォルトの名無しさん
14/03/30 16:53:22.21 8jWWG5Ib.net
>>807
意味は・・・また話がこじれそうなのでやめときます。

850:デフォルトの名無しさん
14/03/31 14:32:49.41 rltgWKkD.net
この話まだ引っ張ってたのか
頭の固いキチ○イがいると大変だな…

851:デフォルトの名無しさん
14/04/02 23:46:20.07 /gW5Cj+p.net
ちょっとお知恵をお貸しください

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

できれば、まったく同じ実行ファイルで実現したい

852:デフォルトの名無しさん
14/04/02 23:49:00.27 8b9j8yIQ.net
>>810
適当にテキストファイルでも何でもいいからファイルかフォルダを用意してそれがあれば二重起動可能にするとか
どうとでもなる

853:デフォルトの名無しさん
14/04/02 23:58:18.35 /gW5Cj+p.net
>>811
すばやいレス、ありがとうございます

その方向ですよね

あとは起動オプションを使うかですかね

854:デフォルトの名無しさん
14/04/03 00:49:18.37 HsT1tdMS.net
ミューテックス

855:デフォルトの名無しさん
14/04/03 01:38:25.85 CHv47MJA.net
DebugHook URLリンク(docwiki.embarcadero.com)

856:デフォルトの名無しさん
14/04/03 13:58:35.25 hMZDUBRj.net
>>814
ありがとうございます

ちょっと事情があって、開発環境のあるPCでは
Delphi IDE内で実行するときだけでなく
そのPC上で実行するすべての場合で
アプリの二重起動を可能にしたいので...

857:デフォルトの名無しさん
14/04/03 17:37:29.19 +zs34Az8.net
最近のDelphiはドットネットというのに乗せないと動かないとききました。

現状 Windows8.1 64bit の上でD6がいちおう動くようなのでとりあえず使ってるん


858:ですが、 やっぱり新しいのにしないとまずいことがあるのですかね? 機能的にはD6で十分なのです



859:デフォルトの名無しさん
14/04/03 20:36:01.67 Ug9VViSs.net
>>816
2004年くらいからタイムスリップしてきましたか?

860:デフォルトの名無しさん
14/04/03 21:14:58.98 e0k67vMi.net
おれもRAD XE2まで持ってるがDelphi7,CBuilder6ばっかり使ってるな

861:デフォルトの名無しさん
14/04/04 14:45:50.82 RM+Iq64G.net
6ではUnicodeにしかない文字を含むパスを渡されるとデフォルトでは読み込めないから
わざわざUnicodeに対応した処理を自分で実装しないといけないってのは面倒
自分専用ならパス側を書き換えて対処すればいいけど、外に出すアプリでそれは強要できないし6は正直無い
あと言語の拡張を考えると6と2009以降では生産性が倍以上は違うと思う
ただIDEの出来は6の方がよかった

862:デフォルトの名無しさん
14/04/04 15:30:05.33 YgvVnaBl.net
すみません、Delphi側でフォームを用意し、そこに入力した文字列を、ボタンを押す事によりFirefoxなどのブラウザの、例えば通販での個人情報入力フォームに反映させるようにしたいのですがどんなメソッドが必要でしょうか?

質問が下手で申し訳ありません
ちなみにDelphi7をWindows7で使っています
よろしくお願いします

863:デフォルトの名無しさん
14/04/04 16:00:36.20 Lb1wU2ET.net
>>819
倍も違うほど何が変わった?

864:デフォルトの名無しさん
14/04/04 16:18:07.61 ebHBrSE5.net
>>820
FireFoxのことは知らないけど
TWebBrowserを使って、Formなどの要素に書き込んだり
ボタンを押す動作を制御することはできる

検索すれば、いろいろと出てくると思う

865:デフォルトの名無しさん
14/04/04 19:32:30.17 Io3jP59G.net
>6ではUnicodeにしかない文字を含むパスを渡されるとデフォルトでは読み込めないから
>わざわざUnicodeに対応した処理を自分で実装しないといけない
一発変換かますだけだろ
自分で実装する必要はないわな

866:デフォルトの名無しさん
14/04/04 23:54:12.31 HNmjO1Jh.net
え?「c:\☑\☒.txt」っていうファイルを D6 の TMemo に読み込むのに「一発変換」という
簡単な方法があるんですか?

867:デフォルトの名無しさん
14/04/05 07:09:19.43 Jx7qT/sh.net
そういうわながあるのか。。   しかしまあ困るというほどではないかも。

868:デフォルトの名無しさん
14/04/09 16:31:22.56 PRO2eP0Z.net
>>823
一発変換って何?
SJISに変換できない文字があったらVCLのLoadFromFileじゃ絶対読めないけど。
例えば自分で実装せずにTStringList.LoadFromFileする一発変換ってどうやるの?
仮にファイル名に使われている文字がSJISの仕様内におさまっても、
ファイルの中身がSJISに変換できないUnicodeテキストだったらどうやって表示するの?
これも一発変換で表示できるの?

869:デフォルトの名無しさん
14/04/09 16:58:18.78 5wEyC0tG.net
すでにツッコミが入ってるだろーが

870:デフォルトの名無しさん
14/04/09 18:09:07.64 LeGZTXio.net
おまいらマジに
GetShortPathName
で変換することを知らんのか
ってかここは超初心者用だったな

871:デフォルトの名無しさん
14/04/09 18:25:26.16 Kpy3Opz4.net
なんであんなに必死なんだ

872:デフォルトの名無しさん
14/04/09 18:30:35.62 PRO2eP0Z.net
>>828
もしかして今は短いパス名をサポートしない環境があるのを知らない?
ってここは超初心者用だったな、すまん

873:デフォルトの名無しさん
14/04/09 19:08:57.91 2PCUc7IP.net
とりあえずそんなおかしな名前付けるな で済む

874:デフォルトの名無しさん
14/04/09 21:31:16.62 XdnhU9kU.net
他国とのやりとりをしていると平気で出てくるんだよ
ファイル名もテキスト内容も>うにこ

875:デフォルトの名無しさん
14/04/09 23:34:49.77 klWzwYGP.net
ファイル名はWideStringに入れて、Create


876:FileWでファイルをオープンして、THandleStreamで扱う、ってことになるわな。



877:デフォルトの名無しさん
14/04/11 14:55:10.26 UXPfM29I.net
831にとってはおかしな名前でも、その国の人にとっては常用する普通の文字だしな
まさに井の中の蛙だねぇ…

878:デフォルトの名無しさん
14/04/15 21:00:02.58 y7/bYr71.net
>>835
すべてoffという特性は、TRadioButtonには適していないと思う。

複数のTSpeedButtonのGroupIndexを同一にし、かつAllowAllUpをTrueにしたほうが良い気がする。

879:デフォルトの名無しさん
14/04/15 21:00:35.52 pnw/AVzK.net
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;

880:デフォルトの名無しさん
14/04/15 21:44:38.50 WV05oYWg.net
ラジオボタンってなんでそう呼ばれるのか、若い人にはわからないよなぁとか思ったり

881:デフォルトの名無しさん
14/04/16 01:33:42.30 0PIdiqLV.net
>>835-837
やっぱラジオボタンだけじゃ無理っぽいですね。
チェックボックスのほうが無難かな...
ちょっと文字情報付のボタンが欲しかったんで

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

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

>>837
昔のラジカセのボタンみたいなもんでしょうか?
そういえば、カーラジオも選局ボタンがそんなんだったような

882:デフォルトの名無しさん
14/04/16 22:18:31.95 r3bnRP8n.net
質問です、
Windows7でRAD Studio XE5を使用し、FMXの練習をしています。
ttpwww.gesource.jpweblogp=6214
このページの下にあるサンプルアプリケーションのソースをそのままコピーしたのですが
DrawBitmapの部分で中身が空として扱われてしまいImageLargeが表示されませんでした
ImageSource,ImageSmallは正常に表示されます。
どのような原因だと思われるでしょうか。

883:デフォルトの名無しさん
14/04/20 12:24:07.84 sTP8AN8M.net
こちらの環境はWindows7,lazarus1.2です。
「デスクトップの表示」をしても消えないウインドウをつくりたいです。
昔は、TForm.createのなかでParentWindow:=FindWindow('Progman',NIL)という定番のやり方があったのですが、仕様が変わったらしくうまくいきません。
(窓が表示されない)
ネットで調べて、ProgmanのかわりにSHELLDELL_DefViewやWorkerWをいれてもだめでした。(デスクトップの表示できえる)
ParentWindow:=GetDesktopWindow();も試したのですがデスクトップの表示できえました。
ガジェットみたいに「デスクトップの表示」をしても消えないウインドウを作るにはどうしたらいいのでしょう。

884:デフォルトの名無しさん
14/04/21 14:17:40.96 p2n411o8.net
ここはDelphiスレです
Lazarusは専用スレがあるのでそちらへどうぞ

885:デフォルトの名無しさん
14/04/22 00:06:55.28 aZUtwyKC.net
つかWin32の質問だよな

886:デフォルトの名無しさん
14/04/22 00:33:15.43 1mdNhLZv.net
Delphi使いは心が狭いな

887:デフォルトの名無しさん
14/04/22 03:00:46.32 P7vsKsdx.net
心の面積とは関係ないような…

888:デフォルトの名無しさん
14/04/22 06:15:48.57 Wc/R4HT8.net
デスクトップの表示ってすべてのアプリを最小化してるのか?
なんらかのmessageが飛んできてるからそれを無視すりゃいい

889:デフォルトの名無しさん
14/04/22 10:23:00.24 Zs7S976a.net
マッピングからはずしてる。
ParentWindow:=nilにしてるという感じ。

890:デフォルトの名無しさん
2014/04/2


891:2(火) 12:29:37.74 ID:z8WHMXPV.net



892:デフォルトの名無しさん
14/04/22 13:47:00.21 0UJjYfLY.net
UFC 128 - : ジョン・ジョーンズ vs. マウリシオ・ショーグン
URLリンク(www.youtube.com)

893:デフォルトの名無しさん
14/04/22 21:34:26.20 aroCR4mU.net
>>840
壁紙に書いちゃえ

894:デフォルトの名無しさん
14/04/22 22:12:14.91 z8WHMXPV.net
天才現る

895:デフォルトの名無しさん
14/04/22 23:11:42.43 K9jQM/w0.net
>>840
WM_MOVEを監視して常にデスクトップ領域内に入るよう監視・調整する

896:デフォルトの名無しさん
14/04/23 06:55:12.12 7+voQcmr.net
>>846
マッピングをいじるわけではないだろう。
アエロなしだと'Progman'、アエロだと'WorkerW’の管理する窓が一番前にきて他の窓を隠す。

897:デフォルトの名無しさん
14/04/27 16:11:50.02 9pN9ZCWS.net
XE2で#20以下の文字をエスケープ、アンエスケープする関数が(なるべく標準で)あったら教えて下さい

'aaa'#13#10'bbb' <-> 'aaa#13#10bbb'

898:デフォルトの名無しさん
14/04/27 16:15:00.00 9pN9ZCWS.net
>'aaa'#13#10'bbb' <-> 'aaa#13#10bbb'

これはあくまで例で、書式の指定は特に無いです

899:デフォルトの名無しさん
14/04/27 16:51:21.96 sr/2zxN+.net
書式はなんでもいいから「#20以下だけ」ってことか・・
そんなものないと思うけどな

900:デフォルトの名無しさん
14/04/28 10:49:56.95 +tUkPlgE.net
XE6でLiveBindingをしているのですが
NumberBoxのValueなどを双方向にバインドすることは可能なのでしょうか

901:デフォルトの名無しさん
14/04/28 20:57:14.17 TqlVJspb.net
>>856
NumberBoxではなく、Gridだけど、UIコントロールのSynchプロパティをバインドするといいよ、ってのをマニュアルで見かけた。

多分ここ

URLリンク(docwiki.embarcadero.com)を使ったデータの同期

902:857
14/04/29 11:27:25.81 mwSTMqLJ.net
>>857
ありがとうございます!試してみます

903:857
14/04/30 19:50:18.37 IRsEECXr.net
>>857
自分はNumberBox(数値設定用コンポーネント)のValueのように、LiveBindingデザイナにデフォルトで表示されないメンバから
DBのフィールド等の値を変更したいと思っていまして、貼っていただいたURLの内容では目的が達せられませんでした。すみません。
ベタにコーディングするしか無いでしょうか。

904:デフォルトの名無しさん
14/05/01 22:30:17.61 31i14fQn.net
Delphi XE5 で Android アプリを作っています。
TMainMenu/TPopupMenu/TMenubar はモバイルに対応していないようですが、メニューボタンに対応させるにはどうすれば良いでしょうか。

905:デフォルトの名無しさん
14/05/04 20:43:23.18 LhkWbjgu.net
ホント、素人な質問で申し訳ないんだけど。。。

フォームにコンポーネント(って言うのかな。ラベルとかエディットとか)を貼り付ける
というとこまでは分かったんですが、そうするとDELPHIが自動的にプログラムを
書いてくれる。で、やたら(sender:tobject)というのが出てくるのですが、これって
何なのでしょう?
senderは送る者、tobjectはルートクラス? 何が何やら・・・

906:デフォルトの名無しさん
14/05/04 21:22:38.92 Hhfw7Ggo.net
多態性について学習するよろし。
型宣言が増えまくるのを抑止する手段>継承元クラスで一緒くたに扱う

907:デフォルトの名無しさん
14/05/04 21:42:22.72 LhkWbjgu.net
>>862
なかなか奥が深いですねぇ。
田舎住まいでしかもインターネットができないので調べるのも


908:一苦労ですが、 今日は都会に来ているので本屋さんに行ってきます。多態性をキーワードに すればいいわけですね。ありがとです^^



909:デフォルトの名無しさん
14/05/04 22:00:57.52 gHxTmPz5.net
最近は本屋行かなくなっちゃったから分からないけど
あんまり本は頼りにならないというか
そもそも売ってないと思うよ
当時でさえそうだったんだから今はますます(略)
本屋より図書館の方がいいかも
まぁ置いてあればの話だけど
やっぱりネットが一番だと思うけどね

910:デフォルトの名無しさん
14/05/05 01:47:01.38 pYH7L/RU.net
昔はDelphiの入門書が結構あったのに最近見かけないね
入門する人がいなくなったのかな

で、技術評論社の「Delphiオブジェクト指向プログラミング」ってのに
お世話になった。もう15年以上も前の話だけど

911:デフォルトの名無しさん
14/05/05 07:18:01.71 vaZjyLth.net
漫画喫茶でもテキトーに入れば入門の情報はいくらでもある
要は自動生成されたコードの意味がわからんってことだろう

912:デフォルトの名無しさん
14/05/05 10:07:02.66 NN5JEBAd.net
>>865
当時 Delphi 関連書籍は流通を押さえてたソフトバンクの策略により書店から姿を消した
代わりにソフトバンクは全国の書店に VB 関連書籍をバラ撒いた

913:デフォルトの名無しさん
14/05/05 18:47:49.07 ztfUYVnN.net
なんでソフトバンクはそんな策略をしたの?
MSからお金を貰ったとか?

914:デフォルトの名無しさん
14/05/05 18:55:58.45 NN5JEBAd.net
>>868
当然、日本マイクロソフト社との裏取引があったのだろう

915:デフォルトの名無しさん
14/05/05 18:58:30.62 orKzLKCf.net
とりあえず、PDFで転がってるOh!No!のDelphi3 Q&A150選でも見とけ

古すぎてアレだがw

916:デフォルトの名無しさん
14/05/06 00:24:10.00 foRc8yiw.net
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では見つかりませんでした)を使う方法や、すべてのセルを変更する方法しか見つけられませんでした。

917:デフォルトの名無しさん
14/05/06 07:31:33.05 najLXRwS.net
SG.Columns[0].Canvas.Font.Name:= "ほにゃらら";
SG.Columns[0].Canvas.Font.Size:= ほにゃらら;

918:デフォルトの名無しさん
14/05/06 10:59:18.95 foRc8yiw.net
>>872
レスありがとうございます。

Font.Name は無かったので、Font.Family に親フォームと同じ値を入れ、
Font.Size にも親フォームと同じ値を入れて試しましたが結果は変わりませんでした。

919:デフォルトの名無しさん
14/05/06 12:38:28.72 w2wxRZ8k.net
>>867
これ本当なの?
マイクロソフトがそこまで脅威として見ていたのか

920:デフォルトの名無しさん
14/05/06 17:46:19.19 mrCqoALn.net
MSがその程度のことをしてもまったく不思議とは感じないのは確かだな
昔から脅迫にちかいことやりまくってるしな

921:デフォルトの名無しさん
14/05/06 19:03:16.28 IUxNATut.net
SB主導の方がしっくり来るな

922:デフォルトの名無しさん
14/05/06 23:14:09.67 4ff3GRht.net
ソフトバンクはその昔「一太郎」時代にも
えこひいきして他社製ワープロを奈落に突き落としたからな

923:デフォルトの名無しさん
2014/05/07


924:(水) 01:17:07.18 ID:XAsHeWQE.net



925:デフォルトの名無しさん
14/05/07 10:53:06.57 weHfcyWe.net
英語のキンドル本だけど
Delphi XE2 Foundations - Part 1~3
プロモーションで1冊分の料金しかかからなかったよ

926:デフォルトの名無しさん
14/05/07 14:29:26.05 9oyvw0L0.net
>>871
1はTStringGridの各セルにデータを表示した後で、
ループ最も幅の長いセルを見つけてそれに合わせればどうだろう
iColWidth := StringGrid1.Canvas.TextWidth(StringGrid1.Cells[i, j]);
if StringGrid1.ColWidth[i] < iColWidth then
 StringGrid1.ColWidth[i] := iColWidth;

2はonDrawCellイベントを使えばラクに実現出来る
Cell内にチェックボックスやゲージなんかも表示できる
onDrawCellイベントが無いなんて有りえない。見間違い。

927:デフォルトの名無しさん
14/05/07 15:03:37.64 63FuNV7B.net
>>880
固定長のものでも幅が合わないので質問しました。
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'まで入力して補完しようとした画面です。

URLリンク(i.imgur.com)

モバイル/デスクトップ共に同じでした。

928:デフォルトの名無しさん
14/05/07 20:06:01.19 q8kCwgwY.net
Delphi-MLの3751から3757の流れを見ろ。Canvas.Font.Assign(Font)としてからでないと
Canvas.TextWidth/TextHeightが正しくならないらしい。

929:デフォルトの名無しさん
14/05/08 08:09:33.30 Mn1gWHfA.net
>>882
アドバイスありがとうございます。
ですが効果が無いようです。

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

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

デスクトップアプリケーションの方は'あ'と'こ'が欠けた状態になりました。
これは枠の分を考慮していないので当然の結果です。
モバイルアプリケーションでは'あいうえお…'となりました。

930:デフォルトの名無しさん
14/05/08 20:33:41.04 xARMff45.net
ん?ボタンの枠のサイズを知りたいってこと?これはスタイルに依存することになりそうなんだが…

931:デフォルトの名無しさん
14/05/08 21:03:03.99 Mn1gWHfA.net
>>884
モバイルアプリケーションで、文字を描画するのに必要な幅(高さ)が間違って取得されるので、
正しい幅(高さ)を求めるにはどうすればよいかって質問です。

元の質問は >>871 です。

932:デフォルトの名無しさん
14/05/08 21:13:09.54 6IjhqXCv.net
TListViewでGroupViewを使用してグループ表示したいのですが、カスタムドローすると、描画がおかしくなります。
というより、各アイテムの描画する矩形を正しく取得できません。
OnCustomDrawItemや、OnAdvancedCustomDrawItemに渡されるパラメータに描画する矩形の
情報が渡されなくて、代わりに、TListItem.DisplayRectで取得しろ?みたいな感じがすべての元凶のような気がします。
Windowsメッセージレベルでは矩形の情報は含まれてるのに、それを全く使わず(TListItem.DisplayRect内部で呼ばれてる)ListView_GetItemRectを使うとかどんな設計なんでしょうか。
助けて下さい。

933:デフォルトの名無しさん
14/05/08 22:36:00.58 +w5OUIZN.net
>>885
いやだからなんでボタンで


934:試してうまくいかないっていってるの?StringGridで試したらどうなるのさ。



935:デフォルトの名無しさん
14/05/08 23:35:29.57 Mn1gWHfA.net
>>887
同じです。
TButtonに変更したのはTStringColumnがおかしいのではなく、Canvas.TextWidth / Canvas.TextHeight がおかしいというのを、最も標準的なコントロールで試したからです。

936:デフォルトの名無しさん
14/05/09 00:39:15.79 yuWrC3zX.net
そんなことをするよりは具体的にTextWidthが何を返したか等を記述した方がいいよね
ライブラリのソースを読むことはできても、実機で試せない人もいれば他の環境では再現しない可能性だってあるんだし
少なくとも効果があったかなかったかは問題を解決できてないあなたが勝手に判断したらまずいでしょ
TButtonでどうだったかを示されたところでTButtonはTButtonであってTStringGridじゃないし

937:デフォルトの名無しさん
14/05/09 01:18:37.86 /onGlIxd.net
てぇかここじゃなくてMLかフォーラムで聞いたほうがいいと思う。できれば最小限の再現コード付きで。

938:デフォルトの名無しさん
14/05/09 02:24:37.98 g/8QCC4u.net
>>886
TListviewのcustomdrawは自分も結構悩まされるな
色々検索しても、これはって言う回答はなかなか見つからない

最近は色々試行錯誤して(偶然)うまくいったのが回答だと考えてる

939:デフォルトの名無しさん
14/05/09 10:42:24.63 m3mnutMb.net
>>889
デスクトッププロジェクトとモバイルプロジェクトを作成し、双方に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;

結果が以下の画像です。(左がデスクトップ、右がモバイル)
URLリンク(i.imgur.com)

フォントが違うにもかかわらず、双方ともTextWidthは82.01123046875を返しています。
モバイルプロジェクトでは、TextWidthはあてにならないということなのでしょうか・・・

940:デフォルトの名無しさん
14/05/10 07:52:36.35 AvOE9ejC.net
偶然同じ値になるなどまずありえんわな。
そこを追求してかないと。

941:デフォルトの名無しさん
14/05/10 07:53:24.91 AvOE9ejC.net
仮に違うフォントが使われているとしたら、偶然同じ値になるなどまずありえんわな。
そこを追求してかないと。

942:デフォルトの名無しさん
14/05/10 09:16:54.90 mf5lm0WO.net
単位がピウセルじゃないから…

943:デフォルトの名無しさん
14/05/10 12:13:44.02 jNvYpmR+.net


944:デフォルトの名無しさん
14/05/10 17:08:42.21 hRNlgmq3.net
FireMonkeyよく知らないけど、そもそもコントロールのフォントとスタイルのフォントは別物だから当然じゃないの?
ちゃんとスタイル適用しないように設定変えてる?

945:デフォルトの名無しさん
14/05/14 16:33:02.91 fkiecfrZ.net
勤め先はPC関係でもなんでもないのですがdel7proがあります。
ネットで調べたらwin8の64bitでもインストOK、動作OKと書いてあるサイトがありました。
ウィンドハンドルとか調べるツールも動作するんでしょうか?
32bitのwindowsなら動く気がするのですが、64bitだとどうでしょうか?
インストールして自分で調べればいいのですが、会社のPCには気軽にソフトを
インストールしてはいけないので、教えてください。

946:デフォルトの名無しさん
14/05/14 18:21:44.15 Vdg2wSF3.net
>>898
Windows 7 64bit に Delphi 7 Pro を入れてバリバリ使っています
F1 キーの状況感知ヘルプが上手く動作しない以外は不都合を感じません

947:デフォルトの名無しさん
14/05/14 20:36:09.41 rcx5Ml4g.net
Turbo Delphi Explorerを古本の付録でインストールしてみましたが、許諾ファイルが手に入りません
何とか使う方法は無いですか?

948:デフォルトの名無しさん
14/05/14 21:05:14.25 fPvjsynC.net
URLリンク(reg.codegear.com)

949:デフォルトの名無しさん
14/05/14 22:53:04.28 rYa


950:htUE4.net



951:デフォルトの名無しさん
14/05/15 17:28:49.83 NpaGHGTx.net
ちょっと教えてください。

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

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

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

その他、不足してるファイルがありますか?

952:デフォルトの名無しさん
14/05/15 18:12:55.76 mqKLvEHr.net
なんで exe以外が必要? ていうかインストーラでまとめてリリースするやろ
ソースもつけるのなら、できたファイル全部だし、

953:デフォルトの名無しさん
14/05/15 18:24:36.25 NpaGHGTx.net
>>904
レスありがとうございます。

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

で、コンパイル等で生成されるファイルには、パス情報とか
個人情報が含まれてるのもあるみたいで、ソース配布には
最低限、どのファイルが必要なのかと思いまして。

954:デフォルトの名無しさん
14/05/15 19:06:54.73 YEyMKVb+.net
resは自分でリソース含めたりアイコン作ったりしていないのであれば
無くてもIDEが自動生成するからいらない場合もある
ソース部分は基本的に最初に挙げた3つでOK

955:デフォルトの名無しさん
14/05/15 19:14:24.12 c9jY4n9p.net
>>905
D6 だけど、*.dprojファイルはいらない。

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

この4つで良いと思う。
特別な外部コンポーネントを使ってるのなら
それの入手方法を知らせるなり、仲間内ならそのコンポーネントをセットで

956:デフォルトの名無しさん
14/05/15 19:42:27.16 J6CNeC2R.net
>>900
受付終了なので、正規手段では不可能
URLリンク(itpro.nikkeibp.co.jp)

URLリンク(keygens.nl)でパッチがダウンロード出来るが、利用は自己責任で

957:デフォルトの名無しさん
14/05/15 19:57:48.61 NpaGHGTx.net
>>906-908

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

ありがとうございました。

958:デフォルトの名無しさん
14/05/16 15:57:50.91 7/ABzJ5o.net
Delphi XE6のVCLでスタイルを適用すると、TEditのColorなどが全て統一されてしまうようなのですが、
個別に変更することは可能でしょうか?

959:デフォルトの名無しさん
14/05/18 13:19:59.16 OIeu8RRW.net
DelphiでHTMLタグをエスケープする関数とかありますか?

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

こういう変換をしたいんですけど、自前で書くしか方法はないんでしょうか。

960:デフォルトの名無しさん
14/05/18 17:37:31.86 VX0o3int.net
HTTPApp.pasにHTMLEncodeとHTMLDecodeがあるけど。

961:デフォルトの名無しさん
14/05/18 18:44:20.48 tiXNBR85.net
>>911
regular expression実装されてるからそれでやればいいと思うよ

962:デフォルトの名無しさん
14/05/18 20:59:01.20 zXBFYmAa.net
>>912
URLリンク(www.blackcatlab.com)
[Delphi] HTTPApp.HTMLEncodeの不具合

963:デフォルトの名無しさん
14/05/18 21:00:36.34 zXBFYmAa.net
2010以前なのかな
URLリンク(ht-deko.minim.ne.jp)

964:デフォルトの名無しさん
14/05/22 08:04:37.04 R/n1HVqS.net
なんと PeaZip は Lazarus製ではないですか!

965:デフォルトの名無しさん
14/05/24 15:36:40.50 YQpzfHL3.net
以前メディアプレイヤーで質問した者です。
色々調べた所MediaPlayer系をいじるのには
MCIを直接いじらなければならいようだという
ことが分かったのですが、
MCIについて勉強するに適したものはありますか?

WindowsMediaPlayerもボリュームコントロールを出来ないようでした。
もし、示唆等いただけましたらよろしくお願いいたします

966:デフォルトの名無しさん
14/05/24 15:49:44.54 hlo3j/US.net
URLリンク(www13.plala.or.jp)

967:デフォルトの名無しさん
14/05/25 09:03:44.57 WJDhxoAu.net
>>918
ありがとうございました。早速印刷しましたので勉強させていただきます。

968:デフォルトの名無しさん
14/05/26 14:39:58.61 svaviP7r.net
はるか昔に非推奨になって後は死に行くのみのAPIを今更勉強するの…?
それ以前にMCIじゃ個別の音量設定なんてできないし

969:デフォルトの名無しさん
14/05/26 19:50:32.54 rKneIVz3.net
delphiでオーディオ再生だとNewACってのがいいと思う
コンポーネント貼り付けて簡単に再生できるし

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

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


...って、動画も再生するんだっけ? じゃ、ダメだね

970:デフォルトの名無しさん
14/05/26 20:05:21.38 En0fnIi5.net
WMPとかFlashPlayerとかVLCとかをActiveX貼り付けで使えるけど、だめなん?

971:デフォルトの名無しさん
14/05/26 20:10:50.35 En0fnIi5.net
あとは html 吐いて、ブラウザで表示させるのが楽かも

972:デフォルトの名無しさん
14/05/28 06:26:39.46 B4+4ztrr.net
>>920
そうなんですか?
手持ちのソフトやサンプルソースが
MCI使っていたので…

他に良い制御系があるのでしょうか?

973:デフォルトの名無しさん
14/05/28 07:57:11.89 LKrLROO8.net
>>924
URLリンク(docwiki.embarcadero.com)

じゃダメ?

974:デフォルトの名無しさん
14/05/28 09:18:48.20 IF06EKAI.net
URLリンク(code.google.com)

975:デフォルトの名無しさん
14/05/28 09:33:36.36 IF06EKAI.net

ソース
URLリンク(code.google.com)

976:デフォルトの名無しさん
14/05/28 15:42:01.29 2wPOB5Uj.net
便乗して質問するけど
Media Foundationを簡単に扱える
コンポーネントって出てる?

977:デフォルトの名無しさん
14/05/28 23:57:18.16 hE6fxPKH.net
コンポーネントは出てないと思うが、そもそも基本的な事をするぐらいならMedia Foundationで簡単に扱えるし。
URLリンク(msdn.microsoft.com)
英語読むの苦にならないのならだけど

978:918
14/05/29 06:05:02.27 FkL52Gv9.net
>>925
Live 2chに変えたせいで>>918-922に気づきませんでした。

979:929
14/05/29 18:23:52.12 U5vZ2NRt.net
>>929
英語を読むのは平気だけど
アプリの中で効果音的にちょっとオーディオ再生するだけのために
Microsoftのサイトを読んでゼロからプログラミングするのは
少し効率が悪いかも

980:918
14/06/04 17:34:52.13 9Ld+1Bja.net
NewAC 2.61やっと見つけました。
使用方法とか説明しているサイトとか有るでしょうか?
やりたいことは、wavとmp3のコントロールです。

981:デフォルトの名無しさん
14/06/04 20:28:52.83 gFPb9jxH.net
recordと暗黙のキャスト使えば

s: TString;

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

とか書けそうだけど
TString, TInteger, TDoubleといった基本型のラッパーライブラリを
気合と根性で作ったものって無いの?

982:デフォルトの名無しさん
14/06/04 23:04:38.42 rS3+cXLk.net
>>933


983: 2010以降なら、record helperを使ってがんばって自前で用意、 XE3以降なら、各種recor helperが標準で用意されてるけど、 これらよりも前のバージョンでの利用を考えてる?



984:デフォルトの名無しさん
14/06/04 23:22:02.87 vvtrsgyN.net
>>932
NewAc261でWavやmp3を再生するだけだったら
デモアプリが参考になると思う

newac261.zip\newac261\demos\Players\AudioPlayer


あとはヘルプがhtmlファイルになってるので
index.htmlファイルから適当に

985:デフォルトの名無しさん
14/06/05 16:01:34.01 4fEc3xBU.net
最新の XE6 で作成したプロジェクトのソースをサンプルとして配布したいのですが、
XE5 以前(~2009 あたりまでを想定)で正常に読み込みできるのでしょうか。
使用しているコンポーネント等は標準的なものです。

986:デフォルトの名無しさん
14/06/05 16:05:17.90 D5lArFFw.net
そんなの内容にもよるから何とも言えないし、自分で試してみればいいだけのような
XE6持ってるならライセンスあるんだし

987:デフォルトの名無しさん
14/06/05 16:33:03.85 4fEc3xBU.net
>>937
おおせの通りなんですが、わざわざそのために昔のバージョンをインストール
するのもなあというのもありまして。
まあ Unicode 対応の 2009 と 64bit 対応の XE2 あたりを入れて試して
みます。

988:デフォルトの名無しさん
14/06/06 07:30:37.85 6OfeBEdh.net
>>934
サンクス
XE6Trial落としてみたけどいちいちTStringとか作らなくても
showmessage('hello'.length.tostring)
とか普通にできるように拡張されてるんだね
しかもXE3からとか
XE2買っちゃったのが悔やまれる…
XE6安いから買っちゃおうかな

989:デフォルトの名無しさん
14/06/07 08:00:41.45 6LoUSKZr.net
UTF16めっっちゃおせぇぇぇぇぇぇ

990:デフォルトの名無しさん
14/06/07 18:53:26.75 U8sWAyx/.net
Delphi7です
リッチエディットで任意の場所にある文字列の文字装飾を知るためには必ず選択状態にして
SelAttributesを見るしか方法はないのでしょうか?
例えば太字になっている部分を検索したり、書き換えたりするときに
プログラム内部で一文字ずつ選択して調べるのでしょうか?
長い文章だと相当時間がかかりそうです

991:918
14/06/09 13:01:16.65 K7gwbRPX.net
>>935
でもアプリをコンパイルしようとすると、コンポーネントが無いとか出てきてしまうんです。

992:デフォルトの名無しさん
14/06/09 13:07:06.72 fxFPhf5Y.net
コンポーネントが無いなら入れたらいいじゃない(高慢な感じで

993:デフォルトの名無しさん
14/06/09 15:18:14.49 HLpaXUPq.net
>>942
無いと指摘されたコンポーネントがNewACだったら
NewACが正しくインストールされてないんじゃないかな

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

それでもインストールできなかったら...\newac261\srcを
検索パスに追加する...

994:918
14/06/09 16:42:00.32 K7gwbRPX.net
>>944
英語がさっぱり…
何をしたら良いのかさっぱり分かりません…

995:デフォルトの名無しさん
14/06/09 16:55:05.37 fxFPhf5Y.net
エラーメッセージも書かずに質問とな
英語くらいgoogle先生とかexcite先生に訳してもらえ

996:デフォルトの名無しさん
14/06/09 19:46:39.50 u+LuodF+.net
codesite.exe -send hello
みたいに使えるCodeSiteLoggingのラッパーツールって無いですか

997:918
14/06/10 06:15:23.34 DxaG/FAR.net
プロジェクトを呼び出すと
クラスTVorbisInが見つかりません。エラーを無視して実行しますか?
注意:エラーを無視すると、コンポーネントまたはプロパティが失われる可能性があります

とでます。

NawAC6.1をインストールするにも解説しているサイトが無いのでどうしたら良いか…

998:デフォルトの名無しさん
14/06/10 06:30:57.98 VLOfpc1m.net
>>948
てか、コンポーネント/パッケージをインストールする方法をまず調べたら?
インストール方法は共通だよ

999:デフォルトの名無しさん
2014/0


1000:6/11(水) 19:30:47.40 ID:Bs2QtGfm.net



1001:デフォルトの名無しさん
14/06/11 21:06:23.57 0Fb7ZLHS.net
TRttiContext.GetTypesで型を列挙して、それぞれのTRttiTypeのTypeKindがtkClassかどうかで
クラスかどうかをチェックして、Handle.Nameでクラスの型名を取得して、TypeData.ParentInfoで
継承元クラスのTypeInfoを取得して、それをずっと辿って継承元にTMyBaseClassが出現するか、ってな
手順になるかな。もし具体的なコードが欲しければここじゃなくて公式フォーラムかMLにどうぞ。

1002:デフォルトの名無しさん
14/06/12 17:09:44.54 WVwRtvyG.net
列挙はともかく親までわざわざRTTIで辿らなくてもクラス参照取り出してInheritsFrom呼ぶだけでいいんじゃないの?

1003:デフォルトの名無しさん
14/06/12 17:14:45.28 rSU+gR4e.net
それもそうだね

1004:デフォルトの名無しさん
14/06/14 04:45:46.47 NSoK88RM.net
// 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;

1005:デフォルトの名無しさん
14/06/14 10:28:41.73 pZZwN6gt.net
Self.

1006:デフォルトの名無しさん
14/06/16 21:58:08.16 CcnTOfaT.net
inherited;
または
inherited Add(s);

1007:デフォルトの名無しさん
14/06/19 07:14:48.98 NCzAFLQA.net
inherited
はうまく行きませんでしたが(実行できたものの何も文字が入らなかった)
inherited Add(s);
はうまく行きました。ありがとうございます。

1008:デフォルトの名無しさん
14/06/19 13:56:12.16 5QFFttI7.net
初心者でとんちんかなことを言ってるかもしれませんが教えてください

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

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

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

効率のいいピクセル値の取得法を教えてください。
よろしくお願いします。

1009:デフォルトの名無しさん
14/06/19 17:54:59.52 9F/+Tvyf.net
GifだろうがJpegだろうが内部的にはBitmapでしょ

1010:デフォルトの名無しさん
14/06/19 19:34:44.51 5QFFttI7.net
>>959
そうですね。

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

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

pfDeviceって機種依存だと思いますが、1Pixelが何バイトかは
どこから分かるんでしょうか?
2回のScanLineして得たアドレスの差を画像の横幅で割る?

1011:デフォルトの名無しさん
14/06/20 09:42:53.62 TWd9CfnL.net
> TGifImage.Bitmap.PixelFormatを調べればいいのですか?
これじゃねーの?

1012:デフォルトの名無しさん
14/06/24 15:09:10.53 MRk4no2J.net
>>960
何か勘違いしてるがDDBを直接操作する手段は無いからScanLineでは当然触れない
ソースを見れば分かるとおりScanLineを呼び出した時点でDIBに変換されてる

1013:デフォルトの名無しさん
14/06/24 18:22:21.83 abfxo/wj.net
>>962
>勘違い...




1014:大いにありえます。DDBとかDIBとかはじめて聞きました 最終目的はネットからダウンロードしたGif画像を高速に スキャンすることです どうすれば高速に任意のピクセルの色情報を取得できるでしょうか? >ソースを見れば 残念ながらStarter使用者です。ソースは参照できません



1015:デフォルトの名無しさん
14/06/24 19:40:17.20 y6vzvZsg.net
>>962が言うには、ScanLineを呼び出せばDIBに変換されてるというらしいから、
ScanLineで1,2バイト適当に読んだ後に、PixelFormatをチェックしてみれば?
そしたらお望みのDIBのフォーマットになってるってことじゃね?

1016:デフォルトの名無しさん
14/06/24 20:02:10.28 y6vzvZsg.net
つか、TGifImageで適当な画像読んでもPixelFormatがpf8bitになってるけど。
どんな画像読んだんだ?

1017:デフォルトの名無しさん
14/06/24 22:44:28.85 abfxo/wj.net
>>965
たぶんアルファチャンネルの有無による違いかと

1018:デフォルトの名無しさん
14/06/25 15:24:02.24 2LLNN4pY.net
>>964
なんでそんな無駄なことするんだ
「お望みのDIBのフォーマット」が欲しいなら最初からPixelFormat弄ればいいだろ

1019:デフォルトの名無しさん
14/06/26 08:29:30.85 NGdvOluE.net
ScanLineする前にbitmap.PixelFormat := pf24bit で統一しておけばよさそう アルファチャンネルはいらないでしょ

1020:918
14/07/01 19:13:32.79 PUCNylXr.net
すみません。以前wav再生ソフトのボリュームコントロールの

1021:デフォルトの名無しさん
14/07/01 19:15:54.89 PUCNylXr.net
すみません。以前wav再生ソフトのボリュームコントロールの
質問した物です。

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

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

1022:デフォルトの名無しさん
14/07/01 21:24:31.31 aOmMjglY.net
ActiveX使えば簡単
SDKとか必要ない
ActiveXでプロジェクトに取り込めばOK

1023:デフォルトの名無しさん
14/07/02 09:28:10.80 fePmEt/5.net
でもSDKの資料がないと使い方が分からんね
WMPの資料はWindows7 SDKの資料の中にWMP SDKというのが入ってる
もちろん全部英語

1024:デフォルトの名無しさん
14/07/14 11:26:56.90 A2xnrbKD.net
D7でTEditのOnExitで入力内容のチェックをして正しくないときはフォーカスを移動しないようにしたかったのですが
うまくいきません
このような場合どこでチェックをしたらいいのでしょうか

1025:デフォルトの名無しさん
14/07/14 11:59:10.95 fik+oCj3.net
>>973
OnExitはフォーカスが移動したときに発生するイベントだからなぁ。
OnChangeでチェックする訳にはいかないの?
それかOnExitでチェックしたあとエラーだったら自分自身にSetFocusするとか。

1026:デフォルトの名無しさん
14/07/14 17:14:07.37 +5XDJE2M.net
ちなみにLazarusにはOnEditingDoneイベントというのがあるよ

1027:デフォルトの名無しさん
14/07/14 21:10:27.58 MBSGNiM/.net
あーそーですかー

1028:デフォルトの名無しさん
14/07/15 11:15:08.24 ar3EwYI5.net
>>974
どうもです
OnChangeだと1文字入力するごとに動いてしまうのでダメでした
OnExitで自分自身にSetFocusして戻ってこれましたっけ?
ダメだったような気がしたが何かミスってたのかな
またやってみます

>>975
Lazarusは使ったことないので

1029:デフォルトの名無しさん
14/07/15 11:29:48.33 /OAZiFpr.net
>>977
自分がD7で確認した限りでは上手くいったんだけど…。OnExitの発生する状況
にもよるんかね。
あとは面倒だけどOnChangeで色々と小細工をする。
有効な文字数になるまでチェック処理をスキップするとか
TEdit.Textの内容を保存しておいて前と同じだったらチェックしないとか

1030:デフォルトの名無しさん
14/07/15 13:50:36.17 XxK55HNo.net
フォーカス移動のメッセージを、メッセージループで無視してみるとか? フラグ使って
これなら入力チェックの結果をそのままフラグに使える

これはDelphiのどんなバージョンでも関係なくできる手法

1031:デフォルトの名無しさん
14/07/15 14:17:20.89 XxK55HNo.net
だいたいコンポーネントを細かく制御しようとしたら�


1032:<bセージループに手をつけざるをえない なんでもかんでもイベントドリヴンでお手軽にやれるわけじゃない OnChangeで、とか安易に考える人は、開発力が低く、不要にソースを複雑化してデスマーチに陥りがちだろう 細かい制御をするときは、イベントドリヴンな考えから離れてみるべきなんだよ ある程度経験ある人なら>>978をチラっと見て「こりゃデスマだな」って連想するよ



1033:デフォルトの名無しさん
14/07/15 14:21:51.02 ueYQQSJv.net
チェック処理が相当重く無い限りOnChangeで1文字ごとにチェックしてもたかが知れてるような

1034:デフォルトの名無しさん
14/07/15 14:37:28.53 /OAZiFpr.net
>>980
あなたが俺より開発力が高いのは分かるんだけどね、上の様な質問をしてくる
人にメッセージループを使いなさいとか言って伝わるんかね。
俺自身分からんからもし質問した人がそれで理解できるなら俺はもうロムってるよ。

1035:976
14/07/15 18:02:25.36 MNelpFeK.net
>>977
ソースを参考にすればいいだけなんで
使ったことのあるなしは関係ないよ

1036:デフォルトの名無しさん
14/07/15 20:06:33.85 TDrfNmAN.net
普通は糸口を教えてくれた人にお礼を言う
その糸口を調べてる、考える

1037:デフォルトの名無しさん
14/07/15 21:45:08.88 s3FJhuBU.net
まあ
結論としては
>>980
スレッドのタイトルさえ読むことができないバカ

1038:528
14/07/16 09:48:26.85 zPJuhVsB.net
>>528
以前にmp3とwavでボリュームコントロールが一本化できないことで質問した者です。
URLリンク(delphi.about.com)
ではmp3のボリュームコイントロールはできますが、wavには反応しません

>>533ではmp3が反応しません

wmpコンポーネントを埋め込んだときには両方に反応するようにできるでしょうか?
その場合の命令というのはどういった物になるのでしょうか?

1039:デフォルトの名無しさん
16/12/26 17:47:08.94 rjPaEzIFh
var
r: extended;
begin
r:= 9.6 - 9 - 0.6;
Memo1.Text:=FloatToStr(r)
end;

結果は 3.25260651745651E-19

そんなアホなと、vbsで同じことをやってみた。

Dim r
r = 9.6 - 9 - 0.6
MsgBox r

-3.33066907387547E-16
だとさ。

誰かひまなやつ理由を語り尽くせ。

1040:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


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