くだすれ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/? >>378 Itemsプロパティではなく、内部で管理している配列を直接返すListプロパティを介してもテンポラリーのコピー発生するんだっけ? ちょっとうろ覚え。 Delphi 10.2 Update 1で実行しています。 log.d('error だめぽ'); 上記コードをiPhone実機で実行して Xcode -> Window -> Devicesに表示されている実機のログを確認すると 以下のように全角文字が文字化けします。 2017/09/23 14:35:21 Project1[7478]: error \M-c\M^A\240\M-c\M^B\M^A\M-c\M^A\M-= 解決策をご存知の方がいらっしゃいましたらお助けくださいませm(_ _)m エスケープ文字をデコードすると e3 81 a0 e3 82 81 e3 81 bd なので、UTF-8 ですかね。 エスケープ文字への変換がログの前後かは切り分けてみましょう。od -x で16進表示すると、 \M-c のところが、e3 なのか 5c 5d 2d 63 なのかでわかるでしょう。 前者なら、ログを出力するツールの性格(ASCII以外は変換とか)、 後者ならコンソールへ出力するツールの変換ですかね。 前者なら、デコードツールでも作ってみれば。 \Mは、0x80を or するメタキーを併用したキー入力の名残りで、Emacs/GNU系の方言です。 \M-c は 0x80 + 'c' = 0xe3 、\M^A は 0x80 + 0x01 (Control-A) = 0x81、\240は8進表記なので 0xa0 >>381 詳細に解説いただきありがとうございます! >\M-c のところが、e3 なのか 5c 5d 2d 63 なのかでわかるでしょう。 od -xのやり方が分からなかったのでログをテキストで保存して バイナリエディタで確認したところ5c 4d 2d 63でした。 これは表示する側の問題ということですよね? あの後、XCodeでNSLogでデバッグログを出力する簡単なプログラムを書いて確認したところ XCode上のデバッグコンソールには日本語が文字化けしないで出力されますが Xcode -> Window -> Devicesに表示されている実機のログでは日本語が文字化けしたので 表示側の問題なのかなと思います。 日本語が表示できないのは不便なので解決できるとうれしいですが こういう場合、難しいのでしょうか。 >>382 面倒だから試してないけど NSstr使うとかAnsiStringに一旦格納して出力するとか しまった。前後逆でした。e3 のままなら無変換。 で、ちょっと古いけどXcode6.3.2+ios8.3では日本語表示できてます。 >>383 ご回答ありがとうございます! NSstrを使ってlog.dで出力しようとするとコンパイラに怒られてしまいましたorz AnsiStringを試したところ出力文字は変化しましたが文字化けは改善されませんでした。 >>384 ご回答ありがとうございます! なるほど。 現在の環境がXCode8.3 + iOS8.3なので少し古いXCodeを使って試してみようと思います。 iOSってTBannerAdを使ってAdmob表示できないんですか? docWiki見たらiOSはiAdを使う前提の説明しかなくて・・・ Delphi10.2ってxcode9.0に対応してる? すみません。どうしたりいいのか分からずに書き込みさせてください。 お伺いします。 https://www.axfc.net/u/3858375?key=delphi アーカイブpass=123456 ですが、AというフォルダにB.zipC.zipD.zip・・・というファイルが入っています。 これにB.zipというファイルをフォームにD&Dで落とすと 1:q:\A\B.zip 2:q:\a 3:q:\a\ と表示されます。 そして、Button1を押すとバイナリがあるフォルダのファイルの数を報告します。 欲しい機能はB.zipをフォームにD&DをしたときにC.zip,D..zip のAフォルダ内のファイルのすべてをListBox表示に表示させるにはどうしたらよいでしょうか? 最近いろいろやっているのですが、今ひとつ解決できないため、 教えていただけないでしょうか? >>392 TDirectory.GetFilesとExtractFilePath すみません。エロい方教えてください。 s := 'ABC'#13#10; という文字列を、SJISの16進文字列に変換して、 '4142430D0A' にしたいのですが、やり方がわかりません。 どう書けばよいのでしょうか? D5でよければこんな感じでできるかな procedure TForm1.FormCreate(Sender: TObject); var s, s2: string; i: Integer; begin s := 'ABC'#13#10; s2 := ''; for i := 1 to Length(s) do begin s2 := s2 + IntToHex(Ord(s[i]), 2); end; ShowMessage(s2); end; >>396 Delphi6でできました。ありがとう。 これ、XE5でも動くのかな? >>397 自分で試すこともしないのか 試すことができないなら気にしなくてよくないか すみません。 気にしなきゃいけない状況です。 で、XE5は今環境がないのです。。。 (仕事場が2つあり、いまXE5がない方に常駐しているので) firemonkeyって一度置いたコンポーネントって削除できないの? .┌┐ / / ./ / i | ( ゜Д゜) |(ノi |) | i i \_ヽ_,ゝ U" U imagelistを使うと削除できないみたいです。 選択範囲には継承されたコンポーネント ImageList1 が含まれているため削除できません。. これって返品で金返してくれないかな >>406 うちではそんな現象出ないけどバージョンは? >>406 お前それTFrameの中にあるやつを継承先から削除しようとしてんじゃねーの 皆さ、レスありがとうございます。 バージョンは10.2です。 試した感じではボタンだけの貼り付け、削除はできる。 ImageListはListに画像を追加すると削除できなくなります。 その状態になるとボタンの削除もできなくなります。 ImageListの画像リストを削除してもダメです。 Delphiはそんなに触ってないので設定は初期値のままです。 何か最近ヘルプ表示したままdelphi終了しようとすると ヘルプの終了処理に手間取ってdelphiがなかなか終了しない 心当たりはFCUへのアップデートとMS VisualStudioの再インストールだが... ググったけどdelphiの正規表現しか出てこないです。 サイトとか教えてください。 >>414 System.RegularExpressions TRegistryをもちいて、 レジストリの情報を拾いたいのですが、 レジストリ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanesers\Eras ひろいたい情報 名前、データ 1868 01 01, 明治_明_Meiji_M 1912 07 30,大正_大_Taisho_T const AppKey='\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanesers\Eras'; var Reg:TRegistry; begin Reg:=TRegistry.Create; try Reg.RootKey:=HKEY_LOCAL_MACHINE; if Reg.OpenKey(AppKey,False) then begin この後どうすればいいんでしょう? Reg.GetValueNames(MEMO.Lines); としてもMEMOには何もかえってこないのです。 キーが違うようです。 AppKey='\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese\Eras'; >>418 その通りでした。 Reg.OpenKey で戻りを気にしていなかったので、悩み続けてしまいました。 ありがとうございます。感謝です。 Calender、Japaneseもわかってない人は論外 昔あったdelphiのフリーコンポーネントを集めたサイトって無くなっちゃた? 古くからのDelphiコンポーネントが全て置いてある アーカイブ的なサイトってないんだろうか ふと思ったけどTImageListじゃなく TSoundListコンポーネントってない? 用途はありそうだが てかTImageListってどういう仕組みで 画像を保持してるんだろう Tetheringコンポーネントを使ってアプリ間データ共有を試してるんだけど コンポーネントをフォームに置くだけでusesに追加される IPPeerClient/Serverファイルがないって怒られるんだけど Starterだと実はTetheringコンポーネントは使えない? >>426 テザリングの項目がStarterは空欄になってるから多分使えない >>427 そうだよね だったらTetheringコンポーネントなんか 選択できなくすればいいのに ただSystem.Tether.*.dcuはすべて揃ってるぽいんだよな 質問させてください。 仮想通貨取引所で資産状況を見るプログラムを書こうとしているんですがうまくいきません。 エラーメッセージが、Signature mismatchとでます。 var s,nonce,key,secret:string; PostURL : String; PostStream : TStringList; ResStream : TStringStream; begin PostURL := 'https://api.zaif.jp/tapi' ; PostStream := TStringList.Create; ResStream := TStringStream.Create(''); IdHTTP1.HTTPOptions := IdHTTP1.HTTPOptions - [hoForceEncodeParams]; nonce := DateTimeToUnix(Now,true).ToString(); IdHTTP1.Request.ContentType:='application/json'; IdHTTP1.Request.CharSet:='uft-8'; PostStream.Add('method' + HTTPEncode('get_info2')); PostStream.Add('nonce' + HTTPEncode(nonce)); idhttp1.Request.CustomHeaders.AddValue('Key','XXXXXXXXXXx'); idhttp1.Request.CustomHeaders.AddValue('Sign','XXXXXXXXXXXX'); IdHTTP1.Post(PostURL, PostStream, ResStream); showmessage(ResStream.DataString); end; C#では以下のように書くらしいのですが、ご教示願えないでしょうか。 https://kokenji.net/zaif-api/ >>429 せめtw署名生成ルーチンくらい書こうぜブラザー たぶんHmacSHA256やとは思うが >>430 ありがとうございます。 SHA256でメッセージ暗号化するってことでしょうか? それとも別の通信するのに必要な処理でしょうか? 仮想通貨って電気代が安い国の人がが圧倒的に有利だよね >>431 URLから察するにZaifやと思うが、公式のAPIリファレンスまず読もうや リファレンスで書いてる事がわからないなら都度質問したらええ 今の状況を人は丸投げと言う >>432 自分で太陽光とか風とか地熱とか利用して発電できるならそいつが一番有利 Delphi 10.2 Tokyo で、 @クラス定義部分で Ctrl+Shift+C を押してメソッド実装部を自動生成すること Aメソッド呼び出し部分でCtrl+クリック で定義部にジャンプすること ができないのですが、できるようにする方法はありますか? >>436 ふむ。結局中国が一人勝ちして終わりやな。 >>437 うちはできるからおま環 ショートカットの設定とか見直したらええんちゃう >>439 俺環とわかり、ありがたし。 サンキュ! そうです。 Starterです。 無料のやつです。 Starterは支援機能削られてる コード補完、ライブコードテンプレート、リファクタリング、コマンドラインツール、コード整形、クラスエクスプローラ、ユニットテスト、翻訳ツールなどの支援機能 コード補完はつけて欲しかったね そうなんですか・・・ コード補完がないのはキツいなぁ。 Starterまじでコード補完ないんだww ひでぇww fmxで実行時に複数のpanelを動的に作成し その背景を別の色にしたいんだけど 設計時にpanelのカスタムスタイルを変更するのは簡単だけど 実行時に変更する方法が分からない 検索すると質問は結構あるけど 答えは古いバージョン対応みたいで うまく機能しない 誰かヒントをお願いします どうしても分からないため、教えてください。 アプリとしては、D&DでFoamに落としたときにTListboxにカレントフォルダのファイルを列挙します。 とんちんかんなメソッドでもとかもか構わないので、是非ともお願いいたします。 procedure TForm1.FormCreate(Sender: TObject); begin DragAcceptFiles(Handle, TRUE); end; procedure TForm1.FormDestroy(Sender: TObject); begin DragAcceptFiles(Handle, FALSE); end; procedure TForm1.FilesDropped(var Msg1: TWMDropFiles); var FNameSize: UINT; Count: UINT; FileName: array [0 .. 255] of Char; FileName1: string; LFilesList: TStringDynArray; LFileName: String; begin FileName1 := ''; try Count := DragQueryFile(Msg1.Drop, $FFFFFFFF, nil, 0); // A if Count > 1 then Abort; // B FNameSize := DragQueryFile(Msg1.Drop, 0, nil, 0) + 1; // C DragQueryFile(Msg1.Drop, 0, FileName, FNameSize); // D FileName1 := StrPas(FileName); // E finally DragFinish(Msg1.Drop); // F end; if FileName1 = '' then Exit; Label1.Caption := FileName1; DirName := ExtractFileDir(FileName1); Label2.Caption := DirName; begin // APath内のディレクトリ内のファイルリスト作成 // [マイコンピュータ]等の特殊フォルダは指定しても無効 LFilesList := TDirectory.GetFiles(LDir); for LFileName in LFilesList do begin ListBox1.Items.Add(TPath.GetFileName(LFileName)); end; ListBox1.Items.EndUpdate; end; end; >>443 Starterにはコード整形というのはないのですか、一生懸命探してしまった(笑) CodeFormatterありがたい! ☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の 両院で、改憲議員が3分の2を超えております。 『憲法改正国民投票法』、でググってみてください。国会の発議は すでに可能です。平和は勝ち取るものです。お願い致します。☆☆ 10.2.3出たな でー、インストール時にもインストール後の「プラットフォームの管理」にもAndroidとかiOSのが出ないんだけどどうなってるんや?(Pro Ed. D6に入れて使ってるIndy10 https対応してたのね。 dllをexeと一緒に置いておくだけ、あちこちで書かれてるIOHandlerを差換えって 必要ないのね。 すみません教えてください。 長いこと格闘していたのですが、どうしても攻略できません。 ソフトとしてはwavファイルをD&Dでフォームに落とすと、このフォルダー内のファイルをTListBox内に列挙して フォーム落としたファイルをMCIを使って再生させるというものです。 只、落としたファイルをファイルPATHで渡しても何も起こらず苦慮しております。 長いこと何やってたんだと叱責を受けるかもしれませんが、よろしくお願いいたします。 意味のとりにくい文章で申し訳ありません。 ttps://www.axfc.net/u/3901529?key=delphi >>459 ダウンロードはメンド 問題の部分だけでも書いて >>459 ダウンロード全然始まんないぞ てかアップローダ選ぼうぜ ちょっと長いのですが… procedure TForm1.FilesDropped(var Msg1: TWMDropFiles); var FNameSize: UINT; Count: UINT; FileName: array [0 .. 255] of Char; FileName1: string; LFilesList: TStringDynArray; LFileName: String; str : string; begin FileName1 := ''; try Count := DragQueryFile(Msg1.Drop, $FFFFFFFF, nil, 0); // A if Count > 1 then Abort; // B FNameSize := DragQueryFile(Msg1.Drop, 0, nil, 0) + 1; // C DragQueryFile(Msg1.Drop, 0, FileName, FNameSize); // D FileName1 := StrPas(FileName); // E finally DragFinish(Msg1.Drop); // F end; if FileName1 = '' then Exit; DirName := ExtractFileDir(FileName1); Label2.Caption := FileName1; // ファイル名 Label3.Caption := DirName; // フォルダーパス\なし 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ほかいろいろ再生できますぜ ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる