くだすれ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/?
2018/11/29(木) 00:17:09.19ID:3U/+XJ1L
ほらね
2018/11/29(木) 08:37:13.44ID:J6L5KB/r
>>708
そうなんだ

確かに「ターゲットプラットフォームの
バージョンごとにネイティブ」って書いてあるね

Windows 10 Desktop用に作ってあったとして
新たに8用と7用も作ってやらないとならないのか

こりゃちょっと大変な作業だ
2018/11/29(木) 15:25:33.53ID:yQEZusSx
>>712
デフォルトスタイルに設定するか、スタイルを保存して各プラットホームにマージしたらそんなに手間でもないよ
2018/11/29(木) 21:26:39.87ID:w2wW1sYB
>>713
ありがとう
マージできるんだ

何もわからないで始めたのがマズかった
715デフォルトの名無しさん
垢版 |
2018/12/05(水) 10:09:27.51ID:mTCdLhw6
DelphiXEを使ってます。
エクスプローラからプロジェクトファイルをダブルクリックしてDelphiが起動するのですが、
さらにもう一つ同じ操作で起動すると、先に起動したIDEのプロジェクトグループに追加され
てしまいます。2つ目のプロジェクトを別のIDE画面で起動したいのですが、そのような設定
があるのでしょうか?
2018/12/06(木) 13:52:27.48ID:DDjonqa2
無い
そういうものと思うしかない
2018/12/07(金) 09:21:09.18ID:2Avy4w/h
>>715
スタートメニューから起動してプロジェクトロードするしかない
レジストリをいじれば出来るかもしれないけど
2018/12/08(土) 09:28:52.05ID:p9Ru1ius
Rioの各デスクトップレイアウトを変更した後
それを保存する項目がメニューから消えたみたいですが?
2018/12/08(土) 13:38:29.09ID:NwPO1Ie0
>>718
つ ttps://qiita.com/ht_deko/items/573f7c11c15c46f895c6

のQ.7かな?
2018/12/08(土) 17:06:57.94ID:p9Ru1ius
>>719
ありがとうございました
できました

このボタンが関係するのかなとも思いましたが
Hintも非表示でスルーしてました
2018/12/12(水) 22:30:39.97ID:MSpbLBgR
エンタープライズコネクターのインストール方法教えて下さい。
ダウンロードしてsetup.exeを実行してパスを通すの?
2018/12/13(木) 09:33:41.92ID:+QyQFfQj
ちょっと教えてください

fmxのカスタムスタイル変更でコントロールの背景を変更するとき
Windows 10 Desktopstyle.pngとかWindows 7style.pngとか利用しますが
これってどこにあるの?

この画像を修正したいいんですがドライブの中を検索しても見つかりません
2018/12/13(木) 11:47:04.04ID:YCEJ54t4
Delphi10.3 Community Edition 入れてみた
オブジェクトインスペクタのイベントTabが開かないんだけど
俺だけ?
Delphi10.23 Community Editionでは問題なく選択できる
2018/12/13(木) 16:31:21.26ID:vV5HNjFS
10.23とかなり新しいから修正あったんだろ
2018/12/13(木) 18:38:58.45ID:YCEJ54t4
'イベント'の文字の所をクリックすると いけた
TABの色と右側空白の色が同じだったので、空白をクリックしていただけだったw
2018/12/13(木) 19:43:45.07ID:w3f+OOI4
クリックしてイベントTabを開けない方が難しいと思うw
2018/12/15(土) 02:19:47.94ID:bDhDTHwp
10.3でPostMessageを使ったメソッド、イベントハンドラ呼び出しの
標準のラッパーみたいのありますか

Call(Button1Click, [Sender]);

的な使い方ができるもの
2018/12/21(金) 18:01:03.17ID:cky1I29u
AndroidアプリのためにFMX.MEMOを使って
簡単なテキストエディタを作ろうと思ったが
いざAndroid上で動かすと、漢字入力の際
変換中の文字列の色が変化せずに困っている

普通は入力中の文字、文節の区切り、カーソル位置で
色が変わったり下線が表示されるが、周りの文字と同じままで
どこが入力中で、どこが文節の区切りなのか分からない
何か設定が足りないんだろうか?
(IMEはGoogle日本語入力です)
2018/12/22(土) 08:55:33.68ID:NdThNIsr
まあバグだろうね。欧米人はIMEとか使わないから
2019/01/20(日) 15:49:29.87ID:qfpRHOuf
D7 です。
それなりに以前の機器の古いバイナリデータの日時情報が 8 byte(64bit) Hex で記録されているのですが、
日付TDateTime型 に入れる式をどなたか分りませんでしょうか?

この形式のような気配なのですが
ttp://madia.world.coocan.jp/vb/vb_bbs2/200602/200602_06020084.html
>Windowsは、「1601年1月1日 00:00:00からの100ナノ秒単位の経過数」です。

実データ値
0x88D24B060812D480 : 2015/04/22 11:24:29 付近
0x88D24B0608AB6B00 : 次の変化 : 差分 int 10000000 = Hex 0x989680
 ↓
0x88D24B0628429380 : 2015/04/22 11:25:23 付近 : 最終

// UNIX 系の変換はこのような感じでやってたのですが
var
i64 : Int64;
la : Longword;
TextStr : String;
ULDateTime : TDateTime;
begin
i64 := StrToInt64('$' + Edit_Unix64bitDateTime.Text);
la := i64 div 1000;
ULDateTime := UnixToDateTime(la);
TextStr := FormatDateTime('YYYY/MM/DD HH:MM:SS',ULDateTime);
UNIX 系でのミリ秒含めでもなさそうでちょっとお手あげです。
2019/01/20(日) 18:16:00.16ID:pkTQkmr2
64bitの符号付きかね?

符号無しでも試してみれば?
732731
垢版 |
2019/01/20(日) 18:33:56.63ID:pkTQkmr2
整数型は、符号付き・符号無しのどちらか?
リトルエンディアン・ビッグエンディアンのどちらか?

そのサイトのソースコードを見ると、
unsigned long low, high;
unsigned は、符号無し

val[0〜3]がlow、[4〜7]がhigh、
0123_4567 が、low_high だから、ミドル(PDP)エンディアンか?

1234_ABCD を、ABCD_1234 にしているのか?

Wikipedia の「エンディアン」を参照して!
2019/01/20(日) 20:11:56.51ID:KDWvqb8v
D7から10.3comに変更してAndroidアプリでも作ろうかと気軽にチャレンジしたら
すげー苦労してる・・・
プロパティ名が微妙に違うしStringGridとかListviewみたいになってるし
ダイアログとかも面倒くせー
2019/01/20(日) 20:13:41.94ID:KDWvqb8v
すまんエン馬鹿スレと間違えた メッセージが分かりづれーよJane
735730
垢版 |
2019/01/21(月) 09:36:20.23ID:a6ON0eDT
詳細書き直し
古い規格データの機器からのバイナリデータ。
目的:古いデータを今の形式にする為。
日時部分を Delphi D7 で扱える ULDateTime : TDateTime; に入れたい。
問題点:時間部分の変換が分らない。

データブロックを構成する他の部分データ部分はリトルエンディアンで構成されている。

バイナリエディタで見ると不明で残る日時データ部分が8バイトの羅列。
 [0][1][2][3][4][5][6][7]
(1) "80 D4 12 08 06 4B D2 88"

データの変る区切りで (2)つ目の変化
(2) "00 6B AB 08 06 4B D2 88"

時間が進むごとに
[0] 側から加算されていく、よってこの部分もリトルエンディアンで構成。
1分に満たない時間変化で4バイト目も変っていく為 32bitではない。
2019/01/21(月) 09:40:36.46ID:p/5Zwz2x
Link先はUnix系だからこれでいけるようだけど違うみたいね

function bswap64(i: int64): int64;
begin
result := (i and $ff00000000000000) shr 56 or (i and $ff000000000000) shr 40 or
(i and $ff0000000000) shr 24 or (i and $ff00000000) shr 8 or
(i and $ff000000) shl 8 or (i and $ff0000) shl 24 or
(i and $ff00) shl 40 or (i and $ff) shl 56;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i64 : Int64;
d: double;
la: cardinal;
s : String;
dt : TDateTime;
begin
i64 := StrToInt64('$' + '6082D42A5A38C601');
i64 := bswap64(i64);
d := i64 * 1.0e-7;
d := d - 11644473600;

d := d /(24*60*60) + UnixDateDelta;
dt := FloatToDateTime(d);

// la := Trunc(d);
// dt := UnixToDateTime(la);

Edit2.Text := FormatDateTime('YYYY/MM/DD HH:MM:SS', dt);
end;
737730
垢版 |
2019/01/21(月) 09:56:47.94ID:/4Ne5b0H
パソコンで続きを書こうとしたらホスト規制の文字が出る
>736 考えてみます
738736
垢版 |
2019/01/22(火) 07:57:49.66ID:wlBx3Xs7
Q : 整数型は、符号付き・符号無しのどちらか?
A : いっさい不明

全差分 54秒 ほどの間に 1529 個ほどのデータ
時間文字の違いを抜き出し
time 1> 0x88D24B060812D480 : 2015/04/22 11:24:29 付近
time 2> 0x88D24B0608AB6B00
 〜
time end-1> 0x88D24B0627A9FD00
time end> 0x88D24B0628429380 : 2015/04/22 11:25:23 付近

2進数、8進数、10進数、16進数相互変換ツール
h ttp:〜(この〜〜は規制がどうたらこーたら表示)
符号なし10進数化で差分を求めると 10000000
これが1秒の更新と一致。

新展開
"00 40 E4 47 02 22 C1 08" : 終了段未計測の値、(データ無し)
0x08C1220247E44000
符号なし で変換 630822816000000000 ググるといくつも何かがHit
Calendar のどうたらこーたら英文一杯
2019/01/22(火) 20:50:24.33ID:zgLYWjKa
>>738
time2の値を0xffffffffffffffff-1(=0x7fffffffffffffff)でbit andを取ると、
0x8d24b0628429380

この値を.NET frameworkのDateTime型に渡してインスタンス化したところ、

2015/04/22 11:25:23
となり一致した。

.NET frameworkのDateTime型は、100nsecの分解能をもつグレゴリオ歴0001年1月1日 00:00:00からの経過時間

またほかの考察から、1sec=10000000であり、ちょうど100nsecの分解能とも一致している。
2019/01/22(火) 20:52:09.44ID:zgLYWjKa
>>738
データ点数1529は、
1529 = 54 * 28 + 1
なので、28Hzのクロックシグナルでログを取っているものと予想される
2019/01/22(火) 22:15:27.13ID:zgLYWjKa
>>738
日時の表現が.NET frameworkのDateTime互換と仮定すると、

>>739 では上位1bitを捨てたけど、実際には2bit捨てるのが正しい。

この2bitが何物かといえば、
時刻の種類を示すbit flagで、指定なし(0), utc(1), local(2)

例示された値の上位2bitは0b10(=2)なので、ローカルタイムだったのだろうと推測される。
742736
垢版 |
2019/01/23(水) 06:54:24.00ID:BnZEIkIf
>>739-741
ありがとうございます。
まとめるとこのような感じで上手くいくようです。
743736
垢版 |
2019/01/23(水) 06:56:58.78ID:BnZEIkIf
.NET frameworkのDateTime互換型と仮定 → (.Net型 非対応) Delphi TDateTime型

対象 : 0x88D24B0628429380 : 2015/04/22 11:25:23 付近
符号なしで推移

2000年1月1日 00:00:00 基準値 0x08C1220247E44000
差分
16進数 = 80112903E05E5380
10進数 = 9228202208084775808
02進数 = 1000000000010001001010010000001111100000010111100101001110000000
.NET frameworkのDateTime型は、100nsecの分解能をもつグレゴリオ歴0001年1月1日 00:00:00からの経過時間
時刻の種類を示すbit flagで、指定なし(0), utc(1), local(2)
値の上位2bitは0b10(=2)なので、ローカルタイム
上位2bit捨てる

2000/01/01 00:00:00 以降だけと仮定(計測機器データなので過去は無し)
1000000000010001001010010000001111100000010111100101001110000000
 00000000010001001010010000001111100000010111100101001110000000 = 4830171230000000 = 0x112903E05E5380

4830171230000000 / 10000 ms = 483017123000 {切捨て}

483017123000 (ms)
/1000 = 483017123 ...0 (ms)
/60 = 8050285 ...23 (sec)
/60 = 134171 ...25 (min)
/24 = 5590 ...11 (hour)
2000年1月1日 から 5590 日のローカルタイム経過日
744736
垢版 |
2019/01/23(水) 07:02:27.05ID:BnZEIkIf
.NET frameworkのDateTime互換型と仮定 → (.Net 非対応) Delphi TDateTime型
検証中
uses
// (略)
DateUtils,Math;

procedure TForm1.Button_Hex64Bit2000CalendarClick(Sender: TObject);
var
i64 : Int64;
// (略)
TextStr : String;
ULDateTime : TDateTime;
begin
i64 := StrToInt64('$' + Edit_Hex64BitDotNfDateTime.Text);
i64 := i64 - $08C1220247E44000;
TextStr := IntToHex(i64,16);

Memo1.Lines.Add(TextStr);
// Hex 16bit 文字→ 2bit String に変換
// 上位2bit 文字 で utc(1)00, local(2)10 を判定後削除
// i64 := 残りを 10進数数値に変換
// i64 := Trunc(i64/10000); // ミリ秒単位化

i64 := 483017123000; // (仮入れ)
ULDateTime := StrToDateTime('2000/01/01 00:00:00.000');
ULDateTime := IncMilliSecond(ULDateTime,i64);
TextStr := FormatDateTime('YYYY/MM/DD HH:MM:SS.ZZZ',ULDateTime);
Memo1.Lines.Add(TextStr);
end;
結果 : 2015/04/22 11:25:23.000
一致しました。
2019/01/24(木) 06:22:34.57ID:+IgQLcoJ
関数化したものを分けて書こうとすると
Sorry, you have been blocked
You are unable to access 5ch.net

>744 変更
i64 := i64 - $08C1220247E44000;
// Int64 → 2bit String に変換
TextStr := Int64ToBin(i64,False); // 他者さんの参照外部関数を改変
// 上位2bit 文字 で utc(1)00, local(2)10 を判定後削除
// 上位ゴミ'0'削除

// i64 := 残りを 10進数数値に変換
2019/01/24(木) 06:38:11.74ID:+IgQLcoJ
function DotNf64bitHexToDateTimeStr(Str8bytesHex : String; Flg,MS : Boolean) : String; // 8 Bytes Hex , Flg check , ms on(True/False)off
(省略 >744冒頭部分近似)
// i64 := 残りを 10進数数値に変換
ib := 0; // 頭"i"Int
ea := 0; // 頭"e"Extended
ilen := Length(TextStr);
for ia := ilen downto 1 do
begin
iBin := StrToIntDef(TextStr[ia],0);
ea := ea + ((power(2,ib)) * iBin);
ib := ib + 1;
end;
i64 := Trunc(ea / 10000); // ミリ秒単位化
ULDateTime := StrToDateTime(DateTimeStr);
ULDateTime := IncMilliSecond(ULDateTime,i64);
if MS then DateTimeStr := FormatDateTime('YYYY/MM/DD HH:MM:SS.ZZZ',ULDateTime);
if MS = False then DateTimeStr := FormatDateTime('YYYY/MM/DD HH:MM:SS',ULDateTime);
end;
if Flg then DateTimeStr := UL + DateTimeStr;
DotNf64bitHexToDateTimeStr := DateTimeStr;
end;
end.
2019/01/25(金) 06:18:32.24ID:/nan/z+i
補足

i64 := StrToInt64('$' + Str8bytesHex);
// Int64 → 2bit String に変換 'Int64ToBin' で検索先
// 上位2bit 文字 で utc(1)01, local(2)10 を判定
i64 := i64 - $08C1220247E44000;
// Int64 → 2bit String に変換
// 上位ゴミ'0'削除
// i64 := 残りを 10進数数値に変換

流れをこうしないと年日時の結果は同じでも
指定なし(0) 上位2bit 文字 '00' の場合
差し引き結果から'01'のutc判別となってしまう。
2019/01/26(土) 12:43:51.03ID:V7Vc5iY/
DocWikiの内容をzipファイルか何かで一括ダウンロードする方法あったら教えてください
2019/02/10(日) 07:14:24.28ID:RF523CmO
古いD6をまだ使っているが、エディタは VScode にDelphi extension入れて
使っている
デバッグはD6のIDEでやるしかないけど、両方立ち上げておけば
まあ使えますね
2019/02/10(日) 10:26:35.22ID:3PGMldSJ
俺もD6で、秀丸でコーディングしていたが、VSodeに切り替えてみようかな。
VSCodeは他の言語で使ってるので。
2019/02/10(日) 18:01:50.44ID:RF523CmO
VScodeの注意点: 別PCのファイルを開くと、変更が反映されない事象あり
自動保存されるけど、書きなおしたやつをまた開くと直っているように見えるのに、
実際は直ってないとか。 意味不明
2019/02/10(日) 20:08:43.74ID:RF523CmO
>>751 あっちとこっちで同時にファイル開いてたせいみたい
2019/02/17(日) 19:49:40.12ID:mFe1BbW0
別に今必要な事じゃないんだけど
エクスプローラーのファイル名で並べたら

ファイル1
ファイル2
・・
ファイル10

って並ぶでしょ。 これどんなロジックなんだろ
スマートな方法が思いつかないし興味ある
2019/02/17(日) 21:28:00.77ID:8qqWbI4p
自分は自作ソフトで似たようなことやってるけど
1文字単位での比較で数値同士の比較の場合に、その先の数値じゃなくなる前まで読んで整数にして比較ってしてる
小数点以下は1文字単位での比較として扱うので整数にしない

ただ 第11話 最終話 のような場合のロジックが面倒
2019/02/19(火) 06:54:39.26ID:9UQztg+8
VisualStudioでDelphi使えないかなぁ
2019/02/19(火) 08:12:14.24ID:BDyhgoG4
Delphi Community EditionとC++Builder Community Editionは同時にインストールできないんだな。
2019/02/19(火) 09:38:23.94ID:5KoJ2HbW
>>753
例えばこういうのは?
ファイル名文字列をバイト単位で数値化して加算
f0 = 0x65 + 0x30 = 101 + 48 = 149
f1 = 150
f2 = 151
f01 = 0x65 + 0x30 + 0x31 = 198
数値化した値で降順ソート

つまり
格納されてるファイル名を文字ではなく文字コードの数値合計でソート
2019/02/19(火) 09:58:03.22ID:5KoJ2HbW
補足
f01 = 0f1 = 1f0 になってしまうので
f(filename)文字列の桁数 len:=length(f) で文字列制限を設けて
for i:=1 to len do
if i<10 then a:=a+Ord(f[i])*10 else a:=a+Ord(f[i]);
適当処理
759753
垢版 |
2019/02/19(火) 16:58:58.81ID:kMKRA1xT
有り難うございます
おもしろい・・・
2019/02/19(火) 17:54:17.46ID:oJBYXncw
>>757
それだと

abcd5.txt
bbcd1.txt
というファイルがあった場合に

bbcd1.txt
abcd5.txt
という並び順になっちゃうんじゃね?
あくまで"文字列"+"数値" というファイル名に対して"文字列"で比較し、"文字列"が同一なら"数値"で比較する必要があると思うが

>>754の場合、数字が文字列の一部だった場合に正しくソートされないって問題があるけど
そういう場合のファイル名はあまり意味がないから気にしないようにしている
それと先頭が数字の場合は文字列の一部として扱ってる
2019/02/19(火) 19:07:51.51ID:0tdxPmy7
StrCmpLogicalW
2019/02/19(火) 19:34:05.73ID:oJBYXncw
自分の場合、壱弐参なんてのも数値として扱うようにしている(したい)からAPIだと望んだ結果を得られない
「数値もしくは数値に変換可能なもの」同士の比較の場合だけ整数として比較してる
2019/02/21(木) 17:17:10.52ID:2mlLSirQ
begin
  var
    i: Integer;
  i := 0;
end;
コードフォーマッタ使うとこうなってしまうのだけどvarのあとで改行しない設定ってどこ?
2019/03/12(火) 15:37:42.39ID:G73gvPJk
ttps://qiita.com/ht_deko/items/41e95154e8da2f901698
コメ欄w
765デフォルトの名無しさん
垢版 |
2019/03/12(火) 16:19:08.39ID:8KtfShI4
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.

たしかに恥ずかしい
2019/03/14(木) 12:21:21.05ID:w5DEurD7
結局なんだったのアレ?
2019/04/02(火) 23:02:52.38ID:Jpqx4ytb
ちょっと教えてほしいんですが、社内イントラネット環境で50台くらいのクライアントPCと
1台のサーバーで双方向に情報をやり取りするVCLフォームアプリを作りたいですが
Delphiだと何使って構築するのが良いのでしょうか?
上からの命令でDelphi使うことなって調べてみたんですが、検索するとDataSnapとか
RESTとかのキーワードが出てきますが自分の経験がDelphi7でストップしていて
現状についていけてません。よろしくおねがいします。
2019/04/03(水) 02:20:05.63ID:ZykPhSzn
>>767
情報のやり取りだけでは何とも言えんなー
それだけの要件だとIndyかWinsocksで通信したらええんちゃうってなる
2019/04/03(水) 05:47:42.38ID:qbGQvqkC
ふつーにIISで鯖立てて、httpでやりあえばよくね?
2019/04/03(水) 06:04:14.50ID:Vd76zIcd
CのDLLは普通にDelphiでも使える。
つまりcurlとかも普通に選択肢になると思う。
2019/04/03(水) 09:22:36.44ID:CI6gl4VO
なんでDelphiが指定されたんだろう?
今まで使ってた訳じゃないのに
2019/04/04(木) 06:32:46.99ID:HLoaCcLX
ネィティブ系だと実質C++かDelphiかの選択肢しかなくね?
2019/04/04(木) 19:27:06.29ID:GNoSo19c
そだねー
2019/04/12(金) 06:11:32.75ID:MYAmm+z/
>>767
Firebird + Apache + SOAP
2019/04/12(金) 06:17:57.84ID:MYAmm+z/
>>753
[Delphi]Windows XPの規則(自然順ソート・natural sort・natural ordering)ででファイル名をソートする
https://www.gesource.jp/weblog/?p=5947
2019/04/26(金) 08:30:46.09ID:l06kgRZY
>>767
https://www.embarcadero.com/jp/products/delphi/starter
Community Editionで使えるか試してみ
2019/04/26(金) 08:31:55.46ID:l06kgRZY
>>774
DBはPostgreSQLかMariaDB
2019/05/06(月) 11:11:11.14ID:WAQCiPA3
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のファイル名を渡せないのもの当然なのですが、
なにかプログラム側でできる回避策はないでしょうか?
2019/05/06(月) 12:25:07.78ID:a/Eukqc8
>>778
使用しているdelphiのバージョンを書いてください。
delphi2009前か後かで回答が変わるかもしれないからです。

UnrarChechArchive関数の仕様に基づいて型キャストしてやれば良さそうな気がします。
例えばnull終端wide stringという仕様なら、渡すファイル名をまずPWideCharにキャストして、さらにPAnsiCharにキャスト。
2019/05/06(月) 13:23:28.45ID:WAQCiPA3
>>779
レスありがとうございます
使用してるDelphiは2010です

>UnrarChechArchive関数の仕様
szFileNameはLPCSTRなので32bit系のDLLではnull終端のAnsiChar配列(のポインタ)になってると思います


>渡すファイル名をまずPWideCharにキャストして、さらにPAnsiCharにキャスト。
var
Path : string;
UnrarCheckArchive(PAnsiChar(PWideChar(Path)), 0);

この型キャストでは残念ながら上手く行かないようです
2019/05/06(月) 20:04:43.46ID:6T4so0Ox
LongFileNameをShortFileNameに変換すると
幸せになれる
2019/05/06(月) 20:48:15.87ID:WAQCiPA3
>>781
ナイスアドバイスです
GetShortPathNameで上手く行きました

おかげさまで幸せになれました
ありがとうございました
2019/05/10(金) 10:35:30.18ID:VUdPAgci
TDateTime datetime = VarToDateTime("令和元年5月10日9時10分15秒");
今はエラーが出るんだがそのうち対応されるのか?
2019/05/10(金) 20:47:06.76ID:bRXsPgWN
FormatDateTime('ge', Now);

レジストリに令和を加えてから上記を実行すると令1 って出るね
2019/05/11(土) 03:08:09.14ID:KNhq3FbT
いずれ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"
2019/05/12(日) 18:37:34.16ID:Kr8GnLfu
vsIconかつAutoArrangeのListViewで、両端のアイテムを選択した状態で左右キーを押すと、
エクスプローラーなら上下の列に移動しますが、DelphiのTListViewだと無反応です
これをエクスプローラーに準拠の動作をさせるにはどうすればよいのでしょうか?
787786
垢版 |
2019/05/15(水) 06:10:55.25ID:jY9AnPp4
自己レスです
通常方向キーなどは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;
2019/05/15(水) 06:39:29.51ID:jY9AnPp4
訂正

Result := 1;でした
2019/05/26(日) 19:04:45.15ID:Nlo0sxin
開発環境だと問題ないのですが
実行したいPCだと
「プロバイダーが見つかりません。正しくインストールされていない可能性があります。」と警告が出ます。
いくつかのDLLを使ってます。
どこから調べれば良いか???です。
開発環境は XE3 です。

何かヒントでもありませんか?
2019/05/26(日) 20:54:01.76ID:zVm0Vl5m
>>789
メッセージググればそのまま出てくるけどVBA関連では?
こことか
https://ameblo.jp/realsystems/entry-11946216560.html
2019/05/26(日) 21:22:58.51ID:Nlo0sxin
有り難うございます
警告メッセージは最初にググったのですが ピンとくる書込は見つけられませんでした
VBAは使ってないし・・
開発環境 Win7 x64 、実行環境 Win10 x64 です。
当初はそんな警告出てなかったのですが デバッグしてるうちに出るようになりました

困った・・・
2019/05/27(月) 06:55:38.20ID:+4vJq2r8
とりあえず、「動いている状態」ってのに戻してみたらどうかね?
それが再現できるなら話は簡単になる
2019/05/27(月) 09:20:16.88ID:ywThIruX
コメント感謝します
DLL参照の プロパティ値代入を1行追加してから症状が出るようになった気がするのですが(自信なし)
それをコメントアウトしても症状が消えません
開発環境では出ないので厄介です
Delphiが タイプライブラリを自動で追加したり とか しないですよね?
2019/05/27(月) 09:39:37.30ID:+4vJq2r8
そうじゃなくて、前の状態のファイルとかシステム一式をバックアップから取り出せないの?
自動でバックアップしながらじゃないとソフト開発は効率わるいよ。
2019/05/27(月) 11:28:59.51ID:ywThIruX
お付き合いホントに有り難うございます
開発環境と 実行環境が 1時間の移動距離にあるので
今現在出来てるテストが上記の書込でした
開発ファイル群は毎日のバックアップがあります
先ず、手元に現象を再現できる環境を構築しようと思ってます。

1度ビルドすると ソースの変更点をコメントアウトしても 元に戻らない
「何か」が有る可能性はあるのでしょうかね?
2019/05/27(月) 12:32:39.96ID:9qF1YjML
どうせADOとかOLE DBとかそっちの問題だろ?
2019/05/27(月) 13:08:16.22ID:AYKzEEPJ
>>795
四の五の言ってないでデータベースドライバ入れろ
798789
垢版 |
2019/05/27(月) 16:22:46.11ID:ywThIruX
コメント有り難うございます

データベースドライバは入っています
入れ直すということでしょうか?

先の警告メッセージが出たあとOKを押すと 一見正常に動作しているように見えます。
そもそも警告が出始める前は 一通り正常に動作していました。

原因がわかりません。
旧ソースをビルドし直してテストしてみます。
799デフォルトの名無しさん
垢版 |
2019/05/27(月) 20:19:06.04ID:zpIi4cEd
データベースドライバが32bitか64bitなのかが開発環境と実行環境で違ってたら
そんなようなエラーが出たような気がするが
800789
垢版 |
2019/05/27(月) 20:33:13.36ID:ywThIruX
>>799
コメント心から感謝します

警告メッセージをググると そんなことも書いてありました
只 当初は問題なく動作していたので 途中でドライバーが変わるようなことも考えにくいですよね
Delphiで書いた実行ファイル以外は一切環境を変えていませんので 謎です
801デフォルトの名無しさん
垢版 |
2019/05/28(火) 00:25:44.07ID:M3HPfliA
32bit用ドライバ → system32 に入れる
64bit用ドライバ → wow64 に入れる

こういう勘違いをしてるアホは時々見かける
2019/05/28(火) 00:29:31.95ID:Ht1RoDma
そういう命名にしたMSが最高のアホだろ
2019/05/28(火) 08:25:10.69ID:m8dRe03e
アプリのバージョンを表示するコードが上手く行かないんで悩んだがどうやらデバッグ版とリリース版でバージョン情報が共有されない仕様になったんだな
デバッグ版、リリース版でそれぞれバージョン情報をオプション設定しなきゃならないんで面倒くさいわー
デフォの文字コードも英語版になってるしなんかいろいろ使いにくい>10.3
2019/05/28(火) 09:12:35.07ID:WeI/rfn2
>>800
開発環境から実行した時に、モジュールのロードで始まる dll や bpl のロード情報を
コピペしてゆっくり眺めてみる
805デフォルトの名無しさん
垢版 |
2019/05/29(水) 05:48:35.44ID:PLjjs/Q6
begin
TStringList.Create.Add('メモリリークした');
end;

このメモリリークの型、内容、ソースコードの場所を検出してくれるツールで
フリーかつDelphi10.3で使えるものって何があるますか?
2019/05/29(水) 11:15:02.18ID:+DJjCaX6
>>805
これじゃあかんの?

EurekaLogでDelphiアプリケーションのメモリリークを検出する – 山本隆の開発日誌
https://www.gesource.jp/weblog/?p=4834
2019/05/29(水) 12:20:29.95ID:nxMyfbFc
くたばれDelphiに見えた
2019/05/31(金) 07:36:06.37ID:L7xGWFvw
僕が高校生の頃の記事を紹介されても・・・
2019/05/31(金) 11:36:16.19ID:wXpLEcKn
ところでandroidのメモリリークって
どうやって検出するの?
少なくとも標準のを書いておいても
今まで報告されたことないんだが
2019/06/04(火) 18:44:33.74ID:UGFk7I+U
> フリーかつDelphi10.3で使えるもの

バージョンアップについていけなくて大半の外部ツールやVCLは死亡中
有料ですら10.3に対応してないものが多い
2019/06/04(火) 22:27:56.89ID:2iRNEsdQ
Delphiって有志による外部ツールやVCLで成り立っている文化なのに
メーカーはなんでそのことを理解してないんだろうなあ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況