くだすれ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/? 自分の場合、壱弐参なんてのも数値として扱うようにしている(したい)からAPIだと望んだ結果を得られない
「数値もしくは数値に変換可能なもの」同士の比較の場合だけ整数として比較してる begin
var
i: Integer;
i := 0;
end;
コードフォーマッタ使うとこうなってしまうのだけどvarのあとで改行しない設定ってどこ? ttps://qiita.com/ht_deko/items/41e95154e8da2f901698
コメ欄w Sorry, my bad. My memory is confused. But, so what?
I mean, the fact is you humiliate Linus and Kernighan in such a way that they never know such a thing as you said.
たしかに恥ずかしい ちょっと教えてほしいんですが、社内イントラネット環境で50台くらいのクライアントPCと
1台のサーバーで双方向に情報をやり取りするVCLフォームアプリを作りたいですが
Delphiだと何使って構築するのが良いのでしょうか?
上からの命令でDelphi使うことなって調べてみたんですが、検索するとDataSnapとか
RESTとかのキーワードが出てきますが自分の経験がDelphi7でストップしていて
現状についていけてません。よろしくおねがいします。 >>767
情報のやり取りだけでは何とも言えんなー
それだけの要件だとIndyかWinsocksで通信したらええんちゃうってなる ふつーにIISで鯖立てて、httpでやりあえばよくね? CのDLLは普通にDelphiでも使える。
つまりcurlとかも普通に選択肢になると思う。 なんでDelphiが指定されたんだろう?
今まで使ってた訳じゃないのに ネィティブ系だと実質C++かDelphiかの選択肢しかなくね? >>767
Firebird + Apache + SOAP >>753
[Delphi]Windows XPの規則(自然順ソート・natural sort・natural ordering)ででファイル名をソートする
https://www.gesource.jp/weblog/?p=5947 >>774
DBはPostgreSQLかMariaDB UnZIP32.DLLとかUnRAR32.DLLでRARファイルの操作する場合の質問です
例えば
BOOL WINAPI UnrarCheckArchive(LPCSTR szFileName,const int iMode);
と定義されてるUnrarCheckArchive関数をDelphiで定義すると
UnrarCheckArchive: function(szFileName: LPCSTR; const iMode: integer): Boolean; stdcall;
こんな感じなって通常はこれで問題ないのですが、
Unicode文字(バ、ガなどの濁音とか)が混じってるファイル名の場合上手く行きません
szFileNameがLPCSTRだからAnsiString扱いなのでUnicodeのファイル名を渡せないのもの当然なのですが、
なにかプログラム側でできる回避策はないでしょうか? >>778
使用しているdelphiのバージョンを書いてください。
delphi2009前か後かで回答が変わるかもしれないからです。
UnrarChechArchive関数の仕様に基づいて型キャストしてやれば良さそうな気がします。
例えばnull終端wide stringという仕様なら、渡すファイル名をまずPWideCharにキャストして、さらにPAnsiCharにキャスト。 >>779
レスありがとうございます
使用してるDelphiは2010です
>UnrarChechArchive関数の仕様
szFileNameはLPCSTRなので32bit系のDLLではnull終端のAnsiChar配列(のポインタ)になってると思います
>渡すファイル名をまずPWideCharにキャストして、さらにPAnsiCharにキャスト。
var
Path : string;
UnrarCheckArchive(PAnsiChar(PWideChar(Path)), 0);
この型キャストでは残念ながら上手く行かないようです LongFileNameをShortFileNameに変換すると
幸せになれる >>781
ナイスアドバイスです
GetShortPathNameで上手く行きました
おかげさまで幸せになれました
ありがとうございました TDateTime datetime = VarToDateTime("令和元年5月10日9時10分15秒");
今はエラーが出るんだがそのうち対応されるのか? FormatDateTime('ge', Now);
レジストリに令和を加えてから上記を実行すると令1 って出るね いずれWindowsアップデートで対応するらしい
https://support.microsoft.com/ja-jp/help/4469068/summary-of-new-japanese-era-updates-kb4469068
コマンドプロンプトでこれを実行するとレジストリに追加される
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese\Eras /v "2019 05 01" /t REG_SZ /d "令和_令_Reiwa_R" vsIconかつAutoArrangeのListViewで、両端のアイテムを選択した状態で左右キーを押すと、
エクスプローラーなら上下の列に移動しますが、DelphiのTListViewだと無反応です
これをエクスプローラーに準拠の動作をさせるにはどうすればよいのでしょうか? 自己レスです
通常方向キーなどはVCL側で処理されてOnKeyPress、OnKeyDownなどではトラップできないので、Windowsメッセージを直接トラップすることでエクスプローラー準拠にできました
procedure WMKEYDOWN( var Msg : TWMKEYDOWN ); message CM_CHILDKEY;
procedure TForm1.WMKEYDOWN(var Msg: TWMKEYDOWN);
begin
case Msg.CharCode of
VK_LEFT :
左端か判別して左端なら上の列の右端に移動してResult := 0;
VK_RIGHT :
右端か判別して右端なら下の列の左端に移動してResult := 0;
end;
inherited;
end; 開発環境だと問題ないのですが
実行したいPCだと
「プロバイダーが見つかりません。正しくインストールされていない可能性があります。」と警告が出ます。
いくつかのDLLを使ってます。
どこから調べれば良いか???です。
開発環境は XE3 です。
何かヒントでもありませんか? 有り難うございます
警告メッセージは最初にググったのですが ピンとくる書込は見つけられませんでした
VBAは使ってないし・・
開発環境 Win7 x64 、実行環境 Win10 x64 です。
当初はそんな警告出てなかったのですが デバッグしてるうちに出るようになりました
困った・・・ とりあえず、「動いている状態」ってのに戻してみたらどうかね?
それが再現できるなら話は簡単になる コメント感謝します
DLL参照の プロパティ値代入を1行追加してから症状が出るようになった気がするのですが(自信なし)
それをコメントアウトしても症状が消えません
開発環境では出ないので厄介です
Delphiが タイプライブラリを自動で追加したり とか しないですよね? そうじゃなくて、前の状態のファイルとかシステム一式をバックアップから取り出せないの?
自動でバックアップしながらじゃないとソフト開発は効率わるいよ。 お付き合いホントに有り難うございます
開発環境と 実行環境が 1時間の移動距離にあるので
今現在出来てるテストが上記の書込でした
開発ファイル群は毎日のバックアップがあります
先ず、手元に現象を再現できる環境を構築しようと思ってます。
1度ビルドすると ソースの変更点をコメントアウトしても 元に戻らない
「何か」が有る可能性はあるのでしょうかね? どうせADOとかOLE DBとかそっちの問題だろ? >>795
四の五の言ってないでデータベースドライバ入れろ コメント有り難うございます
データベースドライバは入っています
入れ直すということでしょうか?
先の警告メッセージが出たあとOKを押すと 一見正常に動作しているように見えます。
そもそも警告が出始める前は 一通り正常に動作していました。
原因がわかりません。
旧ソースをビルドし直してテストしてみます。 データベースドライバが32bitか64bitなのかが開発環境と実行環境で違ってたら
そんなようなエラーが出たような気がするが >>799
コメント心から感謝します
警告メッセージをググると そんなことも書いてありました
只 当初は問題なく動作していたので 途中でドライバーが変わるようなことも考えにくいですよね
Delphiで書いた実行ファイル以外は一切環境を変えていませんので 謎です 32bit用ドライバ → system32 に入れる
64bit用ドライバ → wow64 に入れる
こういう勘違いをしてるアホは時々見かける アプリのバージョンを表示するコードが上手く行かないんで悩んだがどうやらデバッグ版とリリース版でバージョン情報が共有されない仕様になったんだな
デバッグ版、リリース版でそれぞれバージョン情報をオプション設定しなきゃならないんで面倒くさいわー
デフォの文字コードも英語版になってるしなんかいろいろ使いにくい>10.3 >>800
開発環境から実行した時に、モジュールのロードで始まる dll や bpl のロード情報を
コピペしてゆっくり眺めてみる begin
TStringList.Create.Add('メモリリークした');
end;
このメモリリークの型、内容、ソースコードの場所を検出してくれるツールで
フリーかつDelphi10.3で使えるものって何があるますか? >>805
これじゃあかんの?
EurekaLogでDelphiアプリケーションのメモリリークを検出する – 山本隆の開発日誌
https://www.gesource.jp/weblog/?p=4834 ところでandroidのメモリリークって
どうやって検出するの?
少なくとも標準のを書いておいても
今まで報告されたことないんだが > フリーかつDelphi10.3で使えるもの
バージョンアップについていけなくて大半の外部ツールやVCLは死亡中
有料ですら10.3に対応してないものが多い Delphiって有志による外部ツールやVCLで成り立っている文化なのに
メーカーはなんでそのことを理解してないんだろうなあ バージョン表記自体もわかりにくいんだよな・・・
8からいきなり2005になったと思ったらDelphi 2010を最後にDelphi XEシリーズになってそのままいくのかと思ったらXE8でうちどめして今度はDelphi 10に
10から11〜とメジャーバージョン上がっていくかと思ったらマイナーバージョンがメジャーアップデート相当でなんか末尾に都市名つけはじめたし
Delphi 10 Seattle
Delphi 10.1 Berlin
Delphi 10.2 Tokyo
Delphi 10.3 Rio >>811
エンバカデロが過去の歴史知らないから仕方ない RazorでVB.NET切られるかも知れないのね
まだDelphiの方がクロスプラットフォームで残るかも知れないね 質問、D6です
Clipboard関数
ANIS 半角アスキーテキスト(1行128バイト以下)をClipboard.AsTextで送らせます。
http://delfusa.main.jp/delfusafloor/archive/www.nifty.ne.jp_forum_fdelphi/faq/00058.htm
を参照しました。
uses節に 「Clipbrd」を追加
Clipboard.AsText := 'String変数';
これだと1秒ごとに送っているとすぐハングアップするので
AsTextより先にクリアさせるようにしてみました
Clipboard.Clear;
〜処理〜
Clipboard.AsText := 'String変数';
が
カウントさせてみると16回目ぐらいでハングアップしているようです。
上記の次ぎに
FormCreate内でClipboard.Create;
FormDestroy内最後にClipboard.Free;
を追加すると
79回目ぐらいで行ってハングアップします。
なにかスムーズにさせるコツみたいなのありますか? >>817
ハングアップ、って具体的にどうなってるの?
何かの勘違いじゃないの?
あとClipboard.CreateとClipboard.Freeは要らないと思う; >>817
ハングアップに対する回答ではないけど……
同じなのに入れ替える必要ないと思うので
if Clipboard.AsText <> 'String変数' then
入れた方がいいのでは? Lazarusで書き直してみるとかね。
D6ってユニコードAPIとかに対応してないと思うのでそれ関係じゃね? Excelが起動してるとクリップボードの扱いでトラブった覚えあるけど
そういう用途じゃないよね >79回目ぐらいで行ってハングアップします。
ハングアップが具体的にどういう状況かわからんので考えるだけ無駄だと思う てかソース見ると単純にapi呼び出してるだけだから
それってDelphiの問題なのか?
テストプログラムを他のPCで実行してチェックしてみるとかした? Delphi6とDelphi7のclipbrd.pas比べてみたらFClipboardとかFClipboardWindowの解放処理が追加されてるな。ひどすw 各位レスありがとうございました
>>819 ソレ入れてみます。
ソースも晒そうかとしてましたが
どこでハングアップしてるのかダミー表示させてたどり着き
結局、
クリップボードの処理いれたら顕在化したという
別の部分がエンバグしていたオチでした orz
何かクリップボード使う作法でもあるのか?と思っていたのでQしたわけです。
AsTextより先にClipboard.Clear;
FormCreate内でClipboard.Create;
FormDestroy内最後にClipboard.Free;
結果これは不要でした。
以下↓レスを書きこむ直前に↑脱したので遅くなりました
>818さん
(SSDで入れ替えXPの開発環境デスクトップと実行パソコン XPノート&XPモバイルとは別です)
ハングアップの具体的
・作ってる物(送り側 高bps GPSデータ1秒更新)Clipboard.AsText := 'String変数'; のアプリが>817 の挙動で反応しなくなり操作を受け付けなくなる。
・受け手ソフト(昔のナビ地図ソフト、デフォCOM In 4800bps / オプ Clipboard を)は反映も止るが動作は続けている。
・作ってる物(実行ファイル)を終了させるには[タスクマネージャ]から[アプリケーション]でなく[プロセス]から該当イメージ名を選んで[プロセスの終了]を行わないと終わらなくなる。 読み手に情報が伝わらない書き方だなあ
2、3年後に自分で読んでみるといいよ
まあ関心ないからどうでもいいけど >>827
他の環境(エディタ)だとちゃんと表示されるのに、って画像も提示してくれないと
そのフォントがそういうものなんだろ、としか思わない TrueTypeじゃないフォント使ってるのか?としか思わんな あるプロジェクトをまるごと新しいフォルダにコピーし
元のプロジェクトを温存したまま
新しいプロジェクトとして始めたいんですけど
IDEの機能として可能でしたっけ? あるプロジェクトをまるごと新しいフォルダにコピーし
元のプロジェクトを温存したまま
新しいプロジェクトとして始めてみろ そうすると、新しいフォルダのソースをいじっているつもりが、元のソースを変更してしまう。
*.dskファイルは消すこと。 丸っとコピーでプロジェクト系のファイルは修正すればいいよ 「プロジェクトのコピーを作成する」という機能が
発売20年以上経っても実装されてないとは信じられん >>839
Visual Studio にそういう機能ありますか? いや、要るだろ普通に 別バージョンとか作りたいときに
*.dsk消せば済むことだけど標準機能であればそれに越したことはない
VSは使ったことないから知らん てか初心者がプロジェクトの別名保存を誤解して
大変なことになりそう
自分もそうだったけどね >>830
D6 D7 だけど、(絶対パスがなければ)できる。
普段はプロジェクトとソースを保存するときの「名前を付けて保存」で
デフォルトのセーブ先から別のドライブのフォルダに指定してる。
そうするとプロジェクト毎のソースがフォルダ別に整理できる。
同じ系統のプログラム作成はベース部分まで作っておいて保存、
新規フォルダにコピーでクローンしてスタート。
現プロジェクト中に「名前を付けて保存」で対象移動先にセーブしてみたらどうですか?
この際の注意点として、
プロジェクトの保存だけでは足りない、ソースなどの保存の2回保存作業が必要。
始動は移動先のプロジェクトを指定する。
その後は全保存の1回で使えてる。
試す前にコピーで戻せるようにはしておくことです。 >>845
そんな手間かけるならエクスプローラでコピーすればいいだろ 各ファイルの役割をきちんと覚えること。
それができなくてプログラマーとか笑うしかない。
変な自動機能があるとその基本を忘れがちになる。 デスクトップ保存なんてしないからdskなんてできたことないわ
便利なのかあれ 今時使用言語は数個、開発環境も数種類さらにクラウドやら覚えることもりだくさん。
delphiしか触ってないなら、delphiの各ファイルの役割ぐらい覚えられるだろうが 皆、自称初心者のプロが作ったスパゲッティウンコに悩まされてきたからな >>851
だからさ、覚えるとかそういうことじゃない。
各ファイルの役割をきちんと知らないと
プログラマー生命そのものがあやうくなるんだって。
話題の dsk ファイルのはまったく要らない子だってことを知るのもそのひとつ。
例えばオープンソースに dsk ファイル含めて公開しちゃうと
パス名から身バレしちゃったりするリスクもあるわけよ。
言語によらず、プログラマ名乗るならそういうのに敏感になれということ。 MySQLやSQLiteをやろうとして挫折した人間です。
BDEというか、ParadoxのかわりにClientDatasetを使おうと思うんだけど、
設計時にDBコンポで表示できて便利だし、使ってる人いませんか?
.xmlファイルに書き出せるフィールドタイプに制限があるけど、それ以外は
TTableと同じように使える感じ >>857
CDSやFDMemTableは普通に使われてるかと? え?
delphiの各ファイルの役割をきちんと知らないと、プログラマー生命そのものが
危うくなっちゃうんですか???
そ、それはヤバイなぁ!
(か・・・片腹痛てぇ・・・中学生?) >>857
ふつうにカジュアルに使てるで
CDSは、ランタイムであるmidas.dllを同梱するか、MidasLibをどこかのソースファイルでusesに加えてあげる必要ありなので、TfdMemTableの方が楽なイメージ。
(古いシステムのお守りでCDS使うことの方が多いけど) ■ このスレッドは過去ログ倉庫に格納されています