くだすれDelphi(超初心者用)その57 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
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/?
begin //選択されているときに処理を行う if ListBox1.ItemIndex > -1 then begin //選択している文字列を取得 str := ListBox1.Items[ListBox1.ItemIndex]; //取得した文字列を追加 ListBox1.Items.Add(str); end; Label4.Caption := str; begin // APath内のディレクトリ内のファイルリスト作成 // [マイコンピュータ]等の特殊フォルダは指定しても無効 LFilesList := TDirectory.GetFiles(DirName); for LFileName in LFilesList do begin ListBox1.Items.Add(TPath.GetFileName(LFileName)); end; ListBox1.Items.EndUpdate; end; end; procedure TForm1.PlayBtnClick(Sender: TObject); var FileName1: string; begin mciSendString(PChar('open"' + FileName1 + '"type MEPGVideo' + 'alias MusicFile'), nil, 0, 0); // ~~~~~~~~~~~ mciSendString(PChar('play Musicfile from 0'), nil, 0, 0); end; 上記のチルダの部分あたりだと思うのですが… どうしてもわかりません。 >>465 自分もよく知らんので間違ってたらごめん >mciSendString(PChar('open"' + FileName1 + '"type MEPGVideo' + 'alias MusicFile'), nil, 0, 0); 'open"' じゃなくて 'open "' ではないだろうか コマンドの後に空白スペースが無いって事ね typeやaliasの前にもスペース無いけど >>465 これってかなり前にも指摘したような気がするが... まずはTEditをForm上に置いて実行時に TEdit.TextにPChar(...)の...部分をそのまま代入してみな それで問題なかったらMCIに送って >>466-467 レスどうもです。 >>465 以前FileListBoxで作ったときのものをそのままD&D時のパスを含むファイル名を渡しています。 >>467 TEditに代入しても動きません。途方に暮れています。 何年か選択したListBox ItemからMCIに渡す方法を探してますが、どうしてもわからないままでいます。 上に上げたロダはリロードするとファイルが落ちてくるようです。 お忙しいとこrとすみませんがよろしくお願いいたします。 aliasの前に半角スペースがない これじゃあMpegVideoAliasとか意味不明なtypeになる上にaliasが認識されないからMusicFileというaliasが未定義のまま渡される >>467 さんが指摘してるのはTEditに入れて表示された文字列が正しいコマンドかどうかチェックしろって事であって、代入したら動くんじゃないって言ってるわけじゃない >>462-465 こんなやっつけ仕事みたいなコードだと、何やってもダメだと思う >>469 >>467 さんの指摘を受けLabelに命令を代入しましたが、確かにおかしい命令を吐き出していました。 open ""type MEPGVideo alias MusicFile こんな表示をしています。 >>471 FileName1自体はあっちこっちで参照するので、Private 宣言部で定義させています。 私個人の予想では、ListBoxからうまくファイルのPATHを含むファイル名がうまく取得できていないためではないかと考えているのですが… 何が正しいのか正しくないのか、正しくないのは変数の中身なのかコードなのか渡し方かなのか、それとも別になにかなのかを探したら解決できる 正しいと思い込む前に確認する癖をつけましょう >>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;を消す >>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なんてのは関数内の一時的な変数として宣言しがちだと思うので >>472 やっつけ仕事に見えますか… これでも知恵絞って作ったものですので…。 いろいろのサイトで見つけたD&Dの使い方とかボリューム変更など90%位は流用しているため、 メソッドを記述している人がバラバラなので書き方に違和感を抱くこともあると思います。 アドバイスいただいた皆様ありがとうございました。 MCI諦めてSndPlaySound()を使うことで一応当初の目的は達成されました。 FileName1を掃除してSndPlaySoundのファイル名はFileName1を直接渡しました。 SndSoundPlayer()はmp3とかだめそうな気もするので、 MCIを直打ちしなければならないかもしれません。 メディアプレーヤーコンポ使えばmp3ほかいろいろ再生できますぜ >>477 >いろいろのサイトで見つけたD&Dの使い方とかボリューム変更など90%位は流用しているため、 >メソッドを記述している人がバラバラなので書き方に違和感を抱くこともあると思います。 わからないなら参照して勉強するのもいいけど「流用」するだけじゃ何年経っても自分の物にはならないよ ちゃんと使い方を理解して自分のコードに治さないと そうすれば変数かぶったりするのも避けられる あと変数は少々長くなってもあとで自分が見てわかるもっと意味のある名前にした方が読みやすくなるよ >>477 触発されて自分も作ってみた...ただFireMonkey版だけど 基本的な部分はMacOSでも動くと思う https://1drv.ms/u/s!ALhSqBFVHu2ZzRg 前からTDropTargetを使ってみたかっただけなんだけど 野球選手やサッカー選手に向いてるやつと向いてないやつがいるように プログラマーにも向いてるやつと向いてないやつがいる >>480 シンプルで必要十分な情報がまとまっていました。 このスレにいる皆様は、今回のMCI問題を含むVCLの操作ではなく、 細かい文法事項などはどこで習得されたのでしょうか? >>481 ずっとコンパイラーを使っていたのではなく、新しい攻略できたかもと散発的にいじってました。 本当に作りたいアプリがあるので、ご迷惑とは思っていますが、未だに食いついています。 リモコンで制御したいのと、巻き戻しがサポートされていれば、多分ここまでしつこくはなかったかもしれません。 >>484 >このスレにいる皆様は、今回のMCI問題を含むVCLの操作ではなく、 >細かい文法事項などはどこで習得されたのでしょうか? 勘とノリと勢いとGoogle先生 >>484 巻き戻しってもしかして逆再生? そりゃハードルが高すぎないか リモコンって以前はMediaCenterが対応してたね Delphiで今やるんだったら TTethering使ってスマホから操作かな @pikさんて何者なの? 本当にすごい人なの?実力あるの? なんか言ってることが胡散臭いんだけど すいません。教えてください この前の続きです。 D&D(例えば9.wav)をしてListBoxにフォルダのファイル一覧が抽出・表示されますが、 D&Dしたときに9.wavをハイライトさせるにはどうしたらいいでしょうか? ハイライトをさせないとMCIエラーが出てしまいます。 ファイルですが、 https://mega.nz/fm/KbRmkKiL よろしくお願いいたします。 現状でやりたいことは、送るで起動して音声ファイル(以下.wav)を再生させることです。 1.とりあえずアプリを起動させる 2..wavをD&Dでフォームに落とす 3.すかさずListBoxにカレントフォルダのファイルを列挙させる 4.D&Dで落とした.wavにハイライトさせる 5.自動的に.wavの再生開始 現在4でつまずいています。 .wavを送っても起動するだけで、ListBoxに反映されません。 ここがくクリアできれば拡張子連動も可能だと思いますが・ >>491-492 ログインしなくちゃいけないみたいなので落としてないけど 「ハイライトさせる」ってファイルを選択状態にするってことね? (プログラムする人間として質問するなら入門書なりを一冊通読してもう少し的確な言葉を憶えましょう) ListBox.Selected[Index]:=True;(選択状態) 「9.wav」が例えば3番目ならIndexに「2」を入れます(ゼロスタートなので) 一番目のファイルなら「0」です とりあえず試しておこうとDelphi5でやると範囲外エラーでますね ListBox1.Selected[1]:=True; これだけで Delphi2009だと問題ないのに?(**)? ListBox1.ItemIndex := ListBox1.Items.IndexOf('9.wav'); なるほどなー ListBoxとかもうずいぶん使ってなかったから忘れてたわー >>493 ハイライトではなく選択した(された)アイテムと表現すべきでした。 無事選択状態にすることができました。 別の問題で送るとD&Dが併用できない問題に苦慮しています。 (送るだとListBoxに反映されますがD&Dだと反映されない。) おそらく列挙の問題だと思いますが、今困っています。 以前作ったソースがすべてHDDのクラッシュで消えてしまったため どうしたらいいのかもわかっていません。 自分自身で調査をしますが、よいアドバイスいただければ幸いです。 不評でしたが、ロダを ttps://www.axfc.net/u/3905770?key=delphi 皆さんはDelphiの知識はどうやって得られましたか? コンパイラを使ったのが数年ぶりだとか、いいわけにはならないのですが やりたいことができずに悶々としています。 例えば、プログラミングバイブルを読破するとスキルが得られたりするものなのでしょうか? こちらもアドバイススをいただけますと幸いです。 >>496 もう仕様書作って金出してコード納品してもらった方が速い アドバイスも何も.... D&Dで取得したファイル名を そのメソッド内でのみ有効なローカル変数に代入して終わりなの? 変数のスコープを理解してないのかな てか、いろんなサンプルを参照して利用してるが 意味も分からずやってるでしょ 他人のコードを利用するなら まずそのコードを理解しようと努めないと 永久に進歩はないね >>496 >(送るだとListBoxに反映されますがD&Dだと反映されない。) D&Dを受け取る WMDropFiles 内にListBoxに反映させるコードが無いんだから反映されるわけが無い 動くまでいじくり倒すしかない。なんで動かなかったのかわかるまで調べる ListBoxへの反映の仕方が分かったので対処ができました。 ですが、曲名を集中管理している変数にLtstBoxのアイテムを代入しようとする StringtoTstringに互換性がありませんと表示され、他の曲への反映ができません。 聞くところによれば、ポインタの知識とオブジェクトへの深い理解が必要だと聞きました。 コメントをいただければと思いいます。 https://www.axfc.net/u/3908351?key=delphi 本当にポインターの知識が必要ならアプリを作るのには時期尚早なのかもしれません。 よろしくお願いいたします。 こんな文字列処理メインのコードにポインタの出番はないでしょう ListBoxの選択項目を取り出すのは、あなたが>>464 に書いている通り 問題はListBoxに追加した項目が保持してる内容 ファイル名? パス付き? あと老爺心で言うんだけど、メインの部分がまったく機能してないのに サブの部分を追加してるのはどうかと 全体の見通しが悪くなるだけだよ ドラッグ&ドロップと音量関係のルーチンのない状態で ListBoxの内容を完璧に再生できるように 新規プロジェクトから始めたほうがいいよ TString型からString型へのキャストはどうしたら良いのでしょうか? ずっとここで詰まっています。 コンパイラにはString型とTString型には互換性がないと怒られ Listbox.item.text みたいな感じにするとString型へ文字列が渡せません。 色々ネットで調べてみましたが、何か今ひとつ分からないままでいます。 本当か?本当にTStringとStringの違いがわかったのか? 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方 役に立つかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 401Z3 >>505 何年間も同じとこクルクル回って進歩してないな >>507 本当は分かっていません。 ただ、もう少し試行錯誤が必要だと判断しました。 TstringからStringに渡すのはそんなに難しいとは思えないのですが……。 >>509 コンパイラをいじっている時間があまりなくて 今回も数年ぶりに(昔このスレで正月に作ったメディアプレイヤー)触ってますので 進歩してなくて、さっぱり分からないことが相変わらず多いです。 >>510 値、配列、値のリストという概念があるとして stringはどれで Tstringはどれにあたるか分かる? "Tstring"という言葉が気持ち悪いので、そろそろ訂正してくだいませんか? >>510 あのな、良いこと教えてやる 一番薄い「言語ガイド」というマニュアルがあるからそれ読め 最初の1ページ目から最後のページまで全部読め 判らなくても良い、難しくても良い、とにかく1冊全部読め 読み終えた次の日から、きっと新しい世界が見えるはず 読まなきゃお前さん、一生そのままだぞ TStrings String型 TStringList AnsiString UTF8String・・・等々 いっぱいあるね >>510 名前が似ていても型が違うなら別物として考える 別物でも異なる型への変換方法が明示的に設定されていれば容易に渡すことが出来る TStrings と String は別物 じゃあTStrings から String に明示的な変換方法が設定されているのか?を調べれば解決する ヘルプを起動しTStringsと入力しろ そして戻り値がStringになっているメソッドを探せ どうでもいいことなんだが名前欄に自分のレス番号を入れるのは現在進行している質問の最初のレス番号を入れるべきだと思うんだ 今回のケースなら447ではなく505だな そうすることで主題となる質問を見ることが出来て、また辿ることが出来る 普通に教えてやりゃいいじゃんか sがついてるからstringが複数扱えるクラスなんだろ? 男のくせにチマチマ、ネチネチ、そりゃお前らは一生結婚できねぇわw はいはい まあ聞きまくるやつにも問題はありそうだが、 狭い世界のちんこい知識でどんだけ上から目線なんだろね あー そんなことを書くぐらいなら510に教えてあげればいいんじゃないの? しょせん目くそ鼻くそなのに、ずいぶんと上から目線だねw >>513 昔言語ガイド印刷してたのを忘れていました。 今読むと昔は分からなかったことが分かるようになってきました。 プロジェクトを作る前に最後まで読んでみます。 >>516 そう複数なんですよね!だからListBoxでindexで数字でターゲットを選べると言うことに気がつきました。 読みにくい文で済みません。 >>515 TStringで検索かけたところ膨大な数のメソッドが出てきて 悩んでいます。 まずは大事なことがたくさん書いてある言語ガイドをよく読んでから理解してから 再チャレンジします。 レスしてくれた皆様ありがとうございました。 >522 TStrings ですね。 複数のStringを束ねられるのでindexの数字で必要なオブジェクト(!?)を選択できるのですね。 今はプロジェクトを中断して言語ガイドを熟読しています。 今までで分からなかったことがしっかり書いてあるので 安易に入門書を読む前にこっちを読むべきでした。 初心者にはDelphi6あたりのHelpがいいんだけどな 最近のHelpは不親切で、基本がわかっていない初心者には使いづらいだろうなと思う 頑張れ‼??誰でも最初はなんも知らんからね ちゃんと覚えていろんなもん作れるようになってね >>524 Delphi6買っとけば良かったなと思っていたら、初心者の入門書に収録されていました。 早速インストールしてみます。 ですが、皆様はシステムライブラリのヘルプを見て手続きや関数などを覚えたのでしょうか? >>526 職業はコンピューター関係でなく、時間が空かないとコンパイラを使うのも 厳しいために今回は5年ぶりくらいにコンパイラーいじっていますので 最初になってしまいます。 普通こんだけ叩かれたらプログラミングを諦めてしまうと思いますが、 双六ゲームがどうしても作りたいのでかじりついて離れずにいます。 >>527 叩かれるのはどれだけ親切丁寧に説明しても同じ場所を延々ぐるぐる回り続けてるからだよ >>527 >Delphi6買っとけば良かったなと思っていたら、初心者の入門書に収録されていました。 本の名前教えて。 俺もDelphiのHELP欲しい。 >>510 、>>527 MCIさんでしょ? オーディオプレーヤは諦めて双六ゲームにしたの? >>530 下のURLの「Borland Delphi 6 ドキュメントアップデート #1」って ダウンロードしたら使えるんじゃ? もっとも .hlp はWindows10とかだと、そのままじゃ読めないと思けど http://support.embarcadero.com/jp/article/35932 このアップデートファイルは、Delphi 6 のライセンスユーザー向けに提供されるものです。 このファイルの使用に関しては、製品に同梱されたソフトウェアご使用条件に準じます。 >>533 アップデートファイルを単独で使用するなってこと? そもそもdelphi 6 personalってフリーなんだから その程度はいいんじゃない? Unicode 正式対応したのは どのバージョンから? >>531 MCIいじってますよ。 ただ今は、TStringsと戦ってます。 >>528 そうですね。 理解が追いついていかない。ふがいないなぁ。 >>538 string型のutf8化は2009から。 ucs2程度やwidestringであれば、少なくともdelphi7でも使えてる。 結局 >今回は5年ぶりくらいにコンパイラーいじっていますので 5年ぶりとかやる気ないだけだから教えるだけ無駄。 てか5年ぶりじゃないだろ 去年の夏も散々質問してたし その1、2年前も来てたし 思うに、やるときは集中的にやって初心者脱出しないと 永遠に初心者のままだろ 直そう直そうと思っている毎日使っている自作ソフト、最後にビルドしてからまもなく10年になるわぁ Delphiに直結する話題じゃないけど ちょっとお知恵を貸してください 公開してるDelphiで作ったツールがあるんですが ツール内にサポート用の掲示板みたいなのを実装したい 方法としてどんなのが考えられる? やっぱ最低でもcgi使えるサーバとか必要? >>548 1.適当に掲示板スクリプトを設置してTWebBrowserで表示 2.BaaS使ってRESTでやり取り 3.SQLにFireDACで直接接続 4.WindowsVPS(Linuxに吐けるならLinuxでも可)でDataSnap 好きなのをどうぞ >>548 まあ書き込みを送信する場所と書き込まれたものをダウンロードできる場所は必要だろう サーバ借りなくても個人が固定IP契約しているならそのIP宛にすることも出来るし 固定じゃなくてもダイナミックDNS使えるルータとか使っているならそれを利用するのも手 適当なレンタルサーバでも月2000円も掛からないからそういうの使うのがベストだけど というかしたらばあたりにスレ立ててそこを表示するようにするのはどう? 5chと違ってAPIいらんし レスが遅くなりました やっぱそんな感じですよね 配布サイトはcgi使えないのでレンタルサーバか自宅サーバですよね したらばはスクレイピングが可能だったらいいかも あとは、データは配布サイトに置いて投稿はメール経由かな よく考えたら、したらばはスクレイピング不要で 旧2ちゃんと同じでdatファイルを直接ダウンロードできるんでしたよね したらばにしようと思います p2pは理想だけど、開発側も利用者側も障害が大きすぎるような delphi10.2を使っています。 ActiveXのコンポーネントを追加するのにdclusr.dpkをあらかじめインストールしようとしても dclusr.dpkが正しくないとかのエラーが出てしまいます。 dclusr.dpkって他のPCに入っている同バージョンのものをコピーしてもいいものでしょうか? 全然的外れとは思うけど delphiを管理者権限で起動してる? 確認してみます。 コピーしようとしたpcはすんなり出来たので管理者とか気にしてませんでした。 ありがとうございます。 めっちゃ便利になった sc7b & i:: ; Ctrl+無変換+iでbeginを上方検索 ImeOff() if GetKeyState("Ctrl", "P") { send,^k8 send,^qfbegin{enter} send,^q8 send,^+l send,{home} } else send,{up} return sc7b & k:: ; Ctrl+無変換+kでendを下方検索 ImeOff() if GetKeyState("Ctrl", "P") { send,^qfend{enter} send,{left}{right} } else send,{down} return Indyのヘルプについて教えてください delphi 10.2.3を使っていて、IndyのIdCookieを使うのにヘルプを見たんですが どうも自動補完される項目とヘルプの内容が一致していないみたいです 事実、古いネット上のサンプルでもpropertyなどが認識できないと エラーが出るんですが、ヘルプにはちゃんと記載されています もしかして、ヘルプの内容がかなり古い? >>560 ありがとう 早速ダウンロードしてみます Delphi 10.2.3に付属しているIndyのヘルプのバージョン 10.1.5 >>560 に書いてあるところにあるやつは 10.5.8.3だね 10.1.5のヘルプは、実際にバンドルされているIndyとではいろいろと 違っている部分があるんで使えないんだよね エンバカはよくこんな状態で製品として出してるもんだと思う まぁIndyの公式Webページにあるヘルプが更新されずに放置状態なせいでもあるんだろうけど ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる