くだすれDelphi(超初心者用)その57 [無断転載禁止]©2ch.net

1デフォルトの名無しさん2016/10/13(木) 13:21:54.84ID:7i5E+q2+
Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、もしくは
質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。

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

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

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

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

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

<過去スレ>
DelWiki (Delphi 関連の過去スレッド)※行方不明
ttp://delwiki.info/?

472デフォルトの名無しさん2018/04/09(月) 15:46:39.00ID:sAzU0iCB
>>462-465
こんなやっつけ仕事みたいなコードだと、何やってもダメだと思う

473デフォルトの名無しさん2018/04/09(月) 15:48:10.00ID:qLOACt12
>>469
>>467さんの指摘を受けLabelに命令を代入しましたが、確かにおかしい命令を吐き出していました。
open ""type MEPGVideo alias MusicFile
こんな表示をしています。


>>471
FileName1自体はあっちこっちで参照するので、Private 宣言部で定義させています。
私個人の予想では、ListBoxからうまくファイルのPATHを含むファイル名がうまく取得できていないためではないかと考えているのですが…

474デフォルトの名無しさん2018/04/09(月) 15:52:07.60ID:3dFP9zTK
何が正しいのか正しくないのか、正しくないのは変数の中身なのかコードなのか渡し方かなのか、それとも別になにかなのかを探したら解決できる
正しいと思い込む前に確認する癖をつけましょう

475デフォルトの名無しさん2018/04/09(月) 18:30:51.81ID:BomKXXDR
>>473
>FileName1自体はあっちこっちで参照するので、Private 宣言部で定義させています。
あちこちで参照するってことは
procedure TForm1.FilesDropped(var Msg1: TWMDropFiles); で使われている FileName1:と
procedure TForm1.PlayBtnClick(Sender: TObject); で使われている FileName1: は同一のものということにしたいんだろ?
それぞれのプロシージャでFileName1: string;って宣言してたら「あちこちで参照する」ことは出来ないぞ

>Private 宣言部で定義させています。
とりあえずそれはそのまま、TForm1.FilesDropped()とTForm1.PlayBtnClick()の中で宣言しているFileName1: string;を消す

476デフォルトの名無しさん2018/04/09(月) 18:57:48.34ID:BomKXXDR
>>473
やっとソースDLできたw
ざっと見た限り

原因:
TForm1.FilesDropped()でFileName1 にファイル名を代入しているが、
この FileName1 はTForm1.FilesDropped()の中で宣言されているため
TForm1クラスのprivate部で宣言されたFileName1とは別物

対策:
TForm1.FilesDropped()の中で書かれている FileName1: string; という宣言を消す
そうすればTForm1クラスのprivate部で宣言されたFileName1に代入されることになり
TForm1.PlayBtnClick()で使われているFileName1と同じになる

原因:
>mciSendString(PChar('open"' + FileName1 + '"type MEPGVideo' + 'alias MusicFile'), nil, 0, 0);
いろいろ半角スペースが足りない、余分な文字列の連結

対策:
適宜スペースの追加、たぶん、こう?↓
mciSendString(PChar('open "' + FileName1 + '" type MEPGVideo alias MusicFile'), nil, 0, 0);

それと str : string; と LFileName: String; も重複して宣言されているので注意
strに関しては使用目的が分からんのでなんとも言えないけどLFileNameのような使い方をするのであれば
クラスでの宣言は消したほうが良いと思う(不必要にスコープ(参照できる範囲)を広げない)
FileName1にしてもクラス変数として使うのなら変数名を変えて分かりやすくしたほうがよいかと
xxxxx1とかxxxxx2なんてのは関数内の一時的な変数として宣言しがちだと思うので

477デフォルトの名無しさん2018/04/09(月) 19:52:13.89ID:gH9PL+mq
>>472
やっつけ仕事に見えますか…
これでも知恵絞って作ったものですので…。
いろいろのサイトで見つけたD&Dの使い方とかボリューム変更など90%位は流用しているため、
メソッドを記述している人がバラバラなので書き方に違和感を抱くこともあると思います。


アドバイスいただいた皆様ありがとうございました。
MCI諦めてSndPlaySound()を使うことで一応当初の目的は達成されました。

FileName1を掃除してSndPlaySoundのファイル名はFileName1を直接渡しました。
SndSoundPlayer()はmp3とかだめそうな気もするので、
MCIを直打ちしなければならないかもしれません。

478デフォルトの名無しさん2018/04/09(月) 20:33:17.20ID:luHmX43j
メディアプレーヤーコンポ使えばmp3ほかいろいろ再生できますぜ

479デフォルトの名無しさん2018/04/09(月) 22:09:32.86ID:qcsBHwDv
>>477
>いろいろのサイトで見つけたD&Dの使い方とかボリューム変更など90%位は流用しているため、
>メソッドを記述している人がバラバラなので書き方に違和感を抱くこともあると思います。

わからないなら参照して勉強するのもいいけど「流用」するだけじゃ何年経っても自分の物にはならないよ
ちゃんと使い方を理解して自分のコードに治さないと

そうすれば変数かぶったりするのも避けられる
あと変数は少々長くなってもあとで自分が見てわかるもっと意味のある名前にした方が読みやすくなるよ

480デフォルトの名無しさん2018/04/09(月) 22:24:15.00ID:8Wv+Mi08
>>477
触発されて自分も作ってみた...ただFireMonkey版だけど
基本的な部分はMacOSでも動くと思う

https://1drv.ms/u/s!ALhSqBFVHu2ZzRg

前からTDropTargetを使ってみたかっただけなんだけど

481デフォルトの名無しさん2018/04/09(月) 22:25:36.16ID:tj7dSTW0
この話題長いねぇ
ずーっと解決してない気がするw

482デフォルトの名無しさん2018/04/10(火) 07:46:44.60ID:M1dLQsHI
野球選手やサッカー選手に向いてるやつと向いてないやつがいるように
プログラマーにも向いてるやつと向いてないやつがいる

483デフォルトの名無しさん2018/04/10(火) 09:28:59.45ID:8aH9jq04
>>480
なかなか良い
センスあるな

4844472018/04/10(火) 17:57:58.95ID:ixHiVr8M
>>480
シンプルで必要十分な情報がまとまっていました。

このスレにいる皆様は、今回のMCI問題を含むVCLの操作ではなく、
細かい文法事項などはどこで習得されたのでしょうか?

>>481
ずっとコンパイラーを使っていたのではなく、新しい攻略できたかもと散発的にいじってました。
本当に作りたいアプリがあるので、ご迷惑とは思っていますが、未だに食いついています。

リモコンで制御したいのと、巻き戻しがサポートされていれば、多分ここまでしつこくはなかったかもしれません。

485デフォルトの名無しさん2018/04/10(火) 20:26:01.63ID:n/L+8J/R
>>484
>このスレにいる皆様は、今回のMCI問題を含むVCLの操作ではなく、
>細かい文法事項などはどこで習得されたのでしょうか?

勘とノリと勢いとGoogle先生

486デフォルトの名無しさん2018/04/10(火) 21:56:04.81ID:7q8c2f4e
>>484
巻き戻しってもしかして逆再生?
そりゃハードルが高すぎないか

487デフォルトの名無しさん2018/04/10(火) 22:06:00.62ID:BUevE+bD
>>484
VCLソース

488デフォルトの名無しさん2018/04/11(水) 07:06:25.31ID:Ma7OFF0j
リモコンって以前はMediaCenterが対応してたね

Delphiで今やるんだったら
TTethering使ってスマホから操作かな

489デフォルトの名無しさん2018/04/13(金) 00:04:40.08ID:QwQUx8hW
@pikさんて何者なの?

本当にすごい人なの?実力あるの?
なんか言ってることが胡散臭いんだけど

490デフォルトの名無しさん2018/04/17(火) 14:33:30.73ID:eYOCf7bm
>>489
直接本人に言えよ。陰湿な奴だな。

4914472018/04/18(水) 21:20:13.42ID:MII0lz02
すいません。教えてください
この前の続きです。

D&D(例えば9.wav)をしてListBoxにフォルダのファイル一覧が抽出・表示されますが、
D&Dしたときに9.wavをハイライトさせるにはどうしたらいいでしょうか?
ハイライトをさせないとMCIエラーが出てしまいます。

ファイルですが、
https://mega.nz/fm/KbRmkKiL
よろしくお願いいたします。

4924472018/04/19(木) 21:05:53.19ID:bgRnFwFv
現状でやりたいことは、送るで起動して音声ファイル(以下.wav)を再生させることです。

1.とりあえずアプリを起動させる
2..wavをD&Dでフォームに落とす
3.すかさずListBoxにカレントフォルダのファイルを列挙させる
4.D&Dで落とした.wavにハイライトさせる
5.自動的に.wavの再生開始

現在4でつまずいています。
.wavを送っても起動するだけで、ListBoxに反映されません。


ここがくクリアできれば拡張子連動も可能だと思いますが・

493デフォルトの名無しさん2018/04/21(土) 23:15:17.71ID:57zLglLu
>>491-492
ログインしなくちゃいけないみたいなので落としてないけど
「ハイライトさせる」ってファイルを選択状態にするってことね?
(プログラムする人間として質問するなら入門書なりを一冊通読してもう少し的確な言葉を憶えましょう)

ListBox.Selected[Index]:=True;(選択状態)
「9.wav」が例えば3番目ならIndexに「2」を入れます(ゼロスタートなので)
一番目のファイルなら「0」です

とりあえず試しておこうとDelphi5でやると範囲外エラーでますね
ListBox1.Selected[1]:=True;
これだけで

Delphi2009だと問題ないのに?(**)?

494デフォルトの名無しさん2018/04/22(日) 09:43:57.64ID:/aj/ysEy
ListBox1.ItemIndex := ListBox1.Items.IndexOf('9.wav');

495デフォルトの名無しさん2018/04/22(日) 20:19:04.99ID:1p2Tkusj
なるほどなー
ListBoxとかもうずいぶん使ってなかったから忘れてたわー

4964472018/04/25(水) 06:26:09.01ID:LyLCajq/
>>493
ハイライトではなく選択した(された)アイテムと表現すべきでした。

無事選択状態にすることができました。
別の問題で送るとD&Dが併用できない問題に苦慮しています。
(送るだとListBoxに反映されますがD&Dだと反映されない。)
おそらく列挙の問題だと思いますが、今困っています。

以前作ったソースがすべてHDDのクラッシュで消えてしまったため
どうしたらいいのかもわかっていません。

自分自身で調査をしますが、よいアドバイスいただければ幸いです。
不評でしたが、ロダを
ttps://www.axfc.net/u/3905770?key=delphi

皆さんはDelphiの知識はどうやって得られましたか?
コンパイラを使ったのが数年ぶりだとか、いいわけにはならないのですが
やりたいことができずに悶々としています。

例えば、プログラミングバイブルを読破するとスキルが得られたりするものなのでしょうか?
こちらもアドバイススをいただけますと幸いです。

497デフォルトの名無しさん2018/04/25(水) 08:14:31.72ID:iILk6Jpy
>>496
もう仕様書作って金出してコード納品してもらった方が速い

498デフォルトの名無しさん2018/04/25(水) 10:12:58.53ID:KojXazHw
アドバイスも何も....

D&Dで取得したファイル名を
そのメソッド内でのみ有効なローカル変数に代入して終わりなの?

変数のスコープを理解してないのかな

てか、いろんなサンプルを参照して利用してるが
意味も分からずやってるでしょ

他人のコードを利用するなら
まずそのコードを理解しようと努めないと
永久に進歩はないね

499デフォルトの名無しさん2018/04/25(水) 10:43:12.40ID:8p1Sd4ST
>>496
>(送るだとListBoxに反映されますがD&Dだと反映されない。)

D&Dを受け取る WMDropFiles 内にListBoxに反映させるコードが無いんだから反映されるわけが無い

500デフォルトの名無しさん2018/04/26(木) 18:55:25.51ID:fqEKBH7q
動くまでいじくり倒すしかない。なんで動かなかったのかわかるまで調べる

5014472018/05/05(土) 11:10:08.17ID:pQ8nw+O2
ListBoxへの反映の仕方が分かったので対処ができました。
ですが、曲名を集中管理している変数にLtstBoxのアイテムを代入しようとする
StringtoTstringに互換性がありませんと表示され、他の曲への反映ができません。
聞くところによれば、ポインタの知識とオブジェクトへの深い理解が必要だと聞きました。
コメントをいただければと思いいます。
https://www.axfc.net/u/3908351?key=delphi

本当にポインターの知識が必要ならアプリを作るのには時期尚早なのかもしれません。
よろしくお願いいたします。

502デフォルトの名無しさん2018/05/05(土) 13:26:16.48ID:vbsrC7NJ
こんな文字列処理メインのコードにポインタの出番はないでしょう

ListBoxの選択項目を取り出すのは、あなたが>>464に書いている通り

問題はListBoxに追加した項目が保持してる内容
ファイル名? パス付き?

あと老爺心で言うんだけど、メインの部分がまったく機能してないのに
サブの部分を追加してるのはどうかと

全体の見通しが悪くなるだけだよ

ドラッグ&ドロップと音量関係のルーチンのない状態で
ListBoxの内容を完璧に再生できるように
新規プロジェクトから始めたほうがいいよ

503デフォルトの名無しさん2018/05/07(月) 08:05:08.09ID:bSchYp3+
ありがとう。C#で作り直すことにします。

504デフォルトの名無しさん2018/05/07(月) 18:43:31.79ID:RryMz2og
そうきたか www

5054472018/05/23(水) 05:43:33.84ID:IzxjocGr
TString型からString型へのキャストはどうしたら良いのでしょうか?

ずっとここで詰まっています。
コンパイラにはString型とTString型には互換性がないと怒られ
Listbox.item.text
みたいな感じにするとString型へ文字列が渡せません。
色々ネットで調べてみましたが、何か今ひとつ分からないままでいます。

5064472018/05/23(水) 07:25:01.52ID:IzxjocGr
上の質問はスルーしてください

507デフォルトの名無しさん2018/05/23(水) 20:23:05.77ID:yohLywXT
本当か?本当にTStringとStringの違いがわかったのか?

508デフォルトの名無しさん2018/05/23(水) 20:31:59.75ID:Au5e7VGg
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

401Z3

509デフォルトの名無しさん2018/05/24(木) 00:26:07.03ID:X0Vr2UrM
>>505
何年間も同じとこクルクル回って進歩してないな

5104472018/05/24(木) 07:41:50.56ID:Xlbr0a9V
>>507
本当は分かっていません。
ただ、もう少し試行錯誤が必要だと判断しました。
TstringからStringに渡すのはそんなに難しいとは思えないのですが……。

>>509
コンパイラをいじっている時間があまりなくて
今回も数年ぶりに(昔このスレで正月に作ったメディアプレイヤー)触ってますので
進歩してなくて、さっぱり分からないことが相変わらず多いです。

511デフォルトの名無しさん2018/05/24(木) 07:51:45.33ID:UDepo1QV
>>510
値、配列、値のリストという概念があるとして stringはどれで Tstringはどれにあたるか分かる?

512デフォルトの名無しさん2018/05/24(木) 09:38:32.78ID:3hrzymd4
"Tstring"という言葉が気持ち悪いので、そろそろ訂正してくだいませんか?

513デフォルトの名無しさん2018/05/24(木) 09:47:02.42ID:1QuFgEhD
>>510
あのな、良いこと教えてやる

一番薄い「言語ガイド」というマニュアルがあるからそれ読め
最初の1ページ目から最後のページまで全部読め
判らなくても良い、難しくても良い、とにかく1冊全部読め

読み終えた次の日から、きっと新しい世界が見えるはず
読まなきゃお前さん、一生そのままだぞ

514デフォルトの名無しさん2018/05/24(木) 12:22:44.13ID:2pfDia9X
TStrings String型 TStringList AnsiString UTF8String・・・等々 いっぱいあるね

515デフォルトの名無しさん2018/05/24(木) 17:31:30.64ID:Pn5Zd5T4
>>510
名前が似ていても型が違うなら別物として考える
別物でも異なる型への変換方法が明示的に設定されていれば容易に渡すことが出来る
TStrings と String は別物
じゃあTStrings から String に明示的な変換方法が設定されているのか?を調べれば解決する
ヘルプを起動しTStringsと入力しろ
そして戻り値がStringになっているメソッドを探せ

どうでもいいことなんだが名前欄に自分のレス番号を入れるのは現在進行している質問の最初のレス番号を入れるべきだと思うんだ
今回のケースなら447ではなく505だな
そうすることで主題となる質問を見ることが出来て、また辿ることが出来る

516デフォルトの名無しさん2018/05/24(木) 18:32:52.16ID:Pmzmf4Ca
普通に教えてやりゃいいじゃんか
sがついてるからstringが複数扱えるクラスなんだろ?
男のくせにチマチマ、ネチネチ、そりゃお前らは一生結婚できねぇわw

517デフォルトの名無しさん2018/05/24(木) 18:38:26.23ID:Pn5Zd5T4
>>516
で、お前は何で教えてやらないの?

518デフォルトの名無しさん2018/05/24(木) 18:43:41.36ID:NEzd0Nja
本人だからさ

519デフォルトの名無しさん2018/05/24(木) 20:03:35.81ID:hm+d4/Zn
はいはい
まあ聞きまくるやつにも問題はありそうだが、
狭い世界のちんこい知識でどんだけ上から目線なんだろね

520デフォルトの名無しさん2018/05/24(木) 20:16:15.75ID:Pn5Zd5T4
あー
そんなことを書くぐらいなら510に教えてあげればいいんじゃないの?
しょせん目くそ鼻くそなのに、ずいぶんと上から目線だねw

5215102018/05/26(土) 04:35:23.77ID:4prcmauu
>>513
昔言語ガイド印刷してたのを忘れていました。
今読むと昔は分からなかったことが分かるようになってきました。
プロジェクトを作る前に最後まで読んでみます。

>>516
そう複数なんですよね!だからListBoxでindexで数字でターゲットを選べると言うことに気がつきました。
読みにくい文で済みません。

>>515
TStringで検索かけたところ膨大な数のメソッドが出てきて
悩んでいます。
まずは大事なことがたくさん書いてある言語ガイドをよく読んでから理解してから
再チャレンジします。

レスしてくれた皆様ありがとうございました。

522デフォルトの名無しさん2018/05/26(土) 16:36:32.52ID:ZcCwZUbS
だから TStringじゃない TStrings

新着レスの表示
レスを投稿する