TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼
【PHP】下らねぇ質問はここに書き込みやがれ 2
■WindowsCEプログラミング(EVC PB3含む)Ver2.2■
設計思想/ソフトウェア工学(UML, デザパタetc)
関数型言語一般
C++相談室 part136
テストしにくいコードをテストする方法教えて下さい
Java入門・初心者質問スレ Part.7
ふらっと C#,C♯,C#(初心者用) Part148
次世代言語18 Go Rust Elixir Kotlin TypeScript
2chの荒らし報告の書式対応のプログラム

くだすれDelphi(超初心者用)その57


1 :2016/10/13 〜 最終レス :2020/02/18
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.sc/test/read.cgi/tech/1405783063/

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

2 :
クソスレ乙

3 :
無料版の名称は Delphi 10 Starter Edition に変わっていたわ。

4 :
stringのポインタを引数で使う時って何で@straaa[1]みたいに[1]をつけるの?

5 :
PChar(straaa) じゃだめなん?
Hint: 空文字列の扱い

6 :
>>4
今はAnsiStringなら>5でOK。
ShortStringだとstraaaa[0]に長さが入ってるので
@straaa だけだと PChar と互換性ないから

7 :
>>5,6
ありがとう。
調べるワードありがとう

8 :
有料版買えばandroidで動くプログラムをDelphiで作れるの?
Indyみたいなhttpコンポーネントって使えるのだろうか?

9 :
>有料版買えばandroidで動くプログラムをDelphiで作れるの?
モバイルパック?だかなんだかを買わないといけないんじゃねぇか?
Starterでモバイルパックつかえなきゃ、Pro版も買わないといけんと。
>Indyみたいなhttpコンポーネントって使えるのだろうか?
Indy使わなくても最新のにはhttpのクライアントライブラリ含まれてるからそれ使えば?

10 :
cとかc++のenumって、Delphiの列挙型ということでいい?
集合とは違うんだよね?

11 :
そりゃ、Delphiの列挙の方でしょ

12 :
ありがとう

13 :
ライトみたいに光る質感のコンポってありますか?

14 :
tabsheetの色を変えられるようにしたんだけど、clBtnFaceを指定しても白くなるんですけど何故でしょうか?
他の色は反映されます。
Delphi10.1Berlinを使っています。

15 :
バカみたいな質問をしてしまいました。
clBtnFace以外は反映されるのでプログラム的には間違いはないと思います。
clBtnFaceだけ弾かれる理由ってあるんでしょうか?

16 :
>>15
テーマが関係してるんじゃなかったっけ

17 :
>>15
勘だけと、システムカラーだからOSのテーマカラーが優先されて使われてるんじゃないのかな?

18 :
ありがとうございます。
と言ってもどうしていいか分からないのでパネル貼ります。w

19 :
昔Del7で作ったExcelを操作するプログラムを、Berlinで作り直したいんだけど今だとFirerDacを使うんですか?
取り敢えずやりたいことは、xlsxをcsvに変換したいだけなので簡単な方法があったら教えて下さい。

20 :
ole

21 :
今まで Delphi 7 で作っていましたが、Delphi 10.1 に移行することにしました。

そこで、10.1のListViewの挙動について質問です。
D7では、以下のコードで ListItem の一行の背景全てが綺麗に塗りつぶされていましたが、
10.1では Caption と SubItems[0]、そして SubItems間で 2pixel の白い区切り線のようなものが出来てしまいます。
回避方法をご存知の人は教えて下さい。

procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if Not Odd(Item.Index) then
begin
with ListView1.Canvas do
begin
Brush.Style := bsSolid;
Brush.Color := clLime;
end;
end;
end;

22 :
>>21
propertyのGridLinesじゃないのか?
Delphi 10.1動かしてないから適当やけどw

23 :
>>22
GridLines は False です。
試しに True にしても同じように 2pixel の区切り線が出ます。
他の人の環境では出ないのでしょうか?

24 :
参考画像です。
http://fast-uploader.com/file/7032759494826/

25 :
ちょっと教えてください

CD-ROMドライブのデバイス名(「EX-DVD04K」とか)と
ドライブ名(「D」とか)の一覧を得たいんですが
それぞれ別の方法で取得できるんですが、
複数のCDドライブがあると、対応が分かりません(EX-DVD04K = D)。

たぶんAPIを使うことにあると思います。

似た質問はあったんですが、回答がない...
ttp://okwave.jp/qa/q1942763.html

26 :
http://www.chrysocome.net/download
dd のソース見れ

27 :
cd-romだとWin32_CDROMDriveが使える

28 :
ありがとうございました。
DelphiでWin32_CDROMDriveの使用例がありました。

29 :
>>21 >>24
10.1 Starter で再現したことだけ報告しておきます。

30 :
>>20
ありがとうございます。

delphiは久々なのでググりまくってる最中なんですが
Excelのコンポーネントとか有ったと思うんだけど今は無くなった?
悩んでてもしょうがないのでXRAYさんのサイト見ながらやってみます。

31 :
>>30
Excelのタイプライブラリ取り込めばおk

もしくはFlexcel買うか

32 :
>>31
>Excelのタイプライブラリ取り込めばおk
おぉ、そんなのありましたね。
一気に進めそうです。
ありがとうございます。

33 :
oleコンテナだけでExcelのブックを表示できました。
昔とは違うんですね。
ただ、Excel本体も立ち上がってくるのですが、Excelは立ち上げずにブックを弄るにはどうしたらいいでしょうか?

34 :
Visisbleプロパティみたいのなかったっけ?

35 :
s多すぎた

36 :
>>34
ありがとうございます。
試してみます。

37 :
>>36
当然だけどExcel入ってない環境では動かないからね

38 :
>Excelは立ち上げずに

って書いてあるのにVisible薦める香具師ってなんなの

39 :
立ち上げずにコンテナになれるわけないことを暗に示しただけやない?

40 :
新しいDelpiのフォームの位置をドラッグで移動できないな???

どうして?

41 :
>>40
「デフォルトレイアウト」から「クラシック(ドッキングなし)」に変えたら
Delphi7のような画面レイアウトになるけど、お望みの回答かどうかはわからない。

42 :
丸が幾つか描かれているbitmapがあるとして特定の丸の色を変えたいと思い、
丸の上にshapeの丸を置いて対応しました。
このbitmap上の丸とshapeをきっちり対応させる方法ってないですか?
bitmapの大きさ変えたりスクロールさせた時にshapeも追従させたいのですが。

43 :
>>42
丸を違う色でを塗りつぶすか
違う色で丸を再描画するとかダメ?

44 :
>>43
説明不足ですみません。
ビットマップの画像ファイルを貼り付けた状態と言うことでした。

45 :
>>44
じゃ、ビットマップ内の円を直接塗りつぶすのがいいよ?

モグラ叩き(?)みたいに動的に表示するんだったら
1) Bitmap0にオリジナルをロードしておいて
2) Bitmap1に都度コピーして任意の円を塗りつぶす
3) そんで最終的にPaintBoxのCanvasにコピーする
4) これを繰り返す

Shapeを使う必然性があるんだったら別だけどね

46 :
>>45
ありがとう!!
出来ました、

47 :
Delphi10のインストーラーが一瞬立ち上がってすぐ終了してしまうのですが原因がわかる方いませんか?
サポートサイトを見てもレジストリを触る事しか見当たりません。
どなたかよろしくお願いします。

48 :
パソコンが壊れとる

49 :
まずはdependencywalkerとか
あとウィルスチェックソフト止めるとか
ファイアウォール開いてみるとか

50 :
お客様にエスパーの方はいらっしゃりませんかー(棒

51 :
馬鹿には無理

52 :
符号付きのダブルワードとか言うデータを扱う事になったんだけど、普通に数値が相手から送られて来ると思ったら
16Bit毎に分かれて、しかも、-だと65535とか-が付かない値が送られてくるんだけどプロの人はどうやってるの?

ググったら変換の考え方は分かったんだけど、プログラムをどう書けば良いかわからん。

Delphiって16進数とかに変換すると文字列になるでしょ?
文字列をどうやれば計算に使えるの?

53 :
16bitでわかれるって
65535,65535
っていう意味?
だったら
0xffff,0xffff
で1dwordだから
リトルエンディアンなら
(dword)((a[0]<<16) | a[1])
で済むはず

54 :
ああ逆ω
(dword)((a[1]<<16) | a[0])

55 :
早速、ありがとうございます!!
式の意味がわからないw
調べ倒します。

65535,65535に分かれるんですが、-の時には両方2の補数がナンタラカンタラ変換された10進数が送られてきます。

また、分からないことがあったら宜しくお願いします。

56 :
SmallInt変数に代入すればいいんじゃない?

var
si: SmallInt;

si := StrToInt('$' + Edit1.Text); // 16進数の文字列
si := StrToInt(Edit1.Text); // 10進数の文字列
Edit2.Text := IntToStr(si);

...こう云うことじゃないの?

57 :
こういうあほと仕事したくないな

58 :
やってみたらあっさりできました。
右や左にシフトさせるだけで、マイナスも簡単に処理できました。
2の補数とかそういうことはDelphiが内部で勝手にやってくれるという認識でOK?
10進数のまま処理ができるのは他の言語でも一緒?

59 :
>Delphiが内部で勝手にやってくれる

その認識はおかしい

「Delphiは何もしない」が正しい

60 :
>>59
そうなんですか?
プログラムとして読み取る時は上位の16bitを
a:=a shl 16;
で左にシフトさせて
c:=a + b;
で、cにダブルワードの数値がマイナス値も含めて正しく入ったのでdelphiが勝手に処理してるのかなと思いました。
プログラムとしてはこれでOKですか?

61 :
+ b でも良いかも知れないが or b の方が良くね

62 :
符号付きのDWORDって4バイトの整数とは違うの?

63 :
DWORDというかWORDが符号なし整数値やろ
BYTEはunsigned char
WORDはunsigned short
DWORDはunsigned long
UINTはunsigned int
いずれも符号なし整数

64 :
DWORDは符号なしだけど
送られてくるデータはDWORDだけど符号を扱うっつってんだから
普通に中身はintだろ
intにキャストすれば万事OK

65 :
曖昧すぎるんだ

>普通に数値が相手から送られて来ると思ったら
>16Bit毎に分かれて、しかも、-だと65535とか-が付かない値が送られてくるんだけど

66 :
>>60
同じ数値型変数でも a の型を変えてビット数や符号付きかどうかが変わると結果も変わる。

67 :
>>66
仰る意味が分かりました。
符号付き16BitのデータをLongに入れるとマイナスが判断されず16Bitのプラス値が入る。
Smallintに入れるとマイナスを認識する。
と言う事で、扱うデータにあった型の変数に代入する、
もしくはデータの符号の位置が変数の左端に入るように
シフトさせるとプラマイを勝手に判断してくれると言う事で良いでしょか?

68 :
>>67
勝手に、というか、歴史的なものでもあるんだが、そもそもコンピュータは符号について考慮できない。
というのはビットのON/OFFしかないからだ。かといって計算ではマイナスの値も考慮する必要がある。
ということで色々あって、結局今のコンピュータでは高速に計算する場合はこういう手法を使うことになった。
(低速になってもいいが精度が必要な場合にBCDにするとか、他の方法もあるがちょっとそれは置いておく)。

1. 0/1が表せるビットを束ねてまとめて2進数として大きな数値も表せるようにする。
2. 0の時は全てのビットが0になる。
3. 0の状態で1を引いた時、つまり-1は全ビットが1になる。
4. 更に1引いた場合は符号なし整数の時と同じ計算で1を引く。
5. 1番上のビットが1の場合はその値はマイナス、0の場合はプラス。

なので例えば8bit符号付整数は -128 〜 127 までが表せるが、-128の時は2進だと 10000000 になっている。
127 は 01111111 になっている。

画面に10進数に変換して出す場合はまず最上位ビットを見て1ならばマイナス記号を出しプラスならば何も出さない。
次に最上位ビットが1ならば全ビットを反転させた後に1を足す(符号をマイナスからプラスに変換する)。
その後10で割った余りを数字の文字に変換して出し10で割るというのを0になるまで繰り返すが、これだと
逆順になるので再帰処理にするかバッファに入れておいて逆順に出すか少しテクニックが必要。

69 :
コンピューター工学
ASM
2の補数
・・・・いろいろ学ばないと分からないかも
一番いいのは痛い目食わないと覚えられないかも
趣味なら?

70 :
>>68
結果がたまたま合ってるが過程がめちゃくちゃの典型的な悪文

71 :
じゃあおまえが書けよ

72 :
わしもそう思う
しかし、理解すべきは、型の互換性や代入の互換性についての処理系の決め事であって、
動作原理やらは趣味の領域。

73 :
変数の宣言で符号有り、無しのどちらの宣言しても
キャストでどうとでもなるから、くよくよするな
var
i : LongInt;

キャストで
LongWord(i)
出来るから

74 :
スレチ

75 :
D7のクイックレポートで質問です
現在単純な一覧を作っているのですが、罫線で全体の外枠を太く、明細行の仕切りを細く描きたいと思っています
Bandのフレームを外枠にして明細行は左右だけフレームで描き、下部にQrshapeを置いてやってみたのですが
その明細行がページの最終行かどうか判断する方法がわからず
外枠の下を印刷できません
各ページの行数は不定です
何かいい方法は無いでしょうか


もう一つ、グループで小計を印刷したいのですが、その際小計行は太線で囲みたいと思います
小計行はグループフッターで印刷し四方をフレームで囲ってみたところ明細行のShapeとフレームが重なって
小計行の上の線だけ少し太く印刷されてしまいました
うまいやり方は無いでしょうか

よろしくお願いします

76 :
済みませんもう一点ありました
グループではなくページの小計を印刷したいのですが、ページフッターだと明細行と離れて印刷されてしまいます
何かいい方法は無いでしょうか

77 :
仮想のイーサネットインターフェース(NIC)の作り方って知りませんか?
linuxだと簡単にできるらしいけど、windowsでできるコンポとかコマンドとかないのかな?

78 :
softetherみたいなの?

79 :
そういうのいじってみたい
仮想NICというかループバックていうのはMS純正でできるのが分かった

80 :
ソース公開されてるだろ

81 :
https://www.embarcadero.com/products/rad-studio/features
RAD Studioの体験版ってDelphi XE2と共存できる?
体験版試して環境壊したら面倒だから躊躇してる
買うなら完全上書きで移行でも良いんだけど
xamarinみたいにハマるならやめたい

82 :
canvasやcaptionを持ってないコントロール上に文字描こうと思ったら、LABELを被せるのが一番簡単?

83 :
そりゃ、ポトペタしてプロパティ変更するだけだから、10秒で終わるし。

84 :
動的に沢山作ったコントロールの破棄方法を教えて下さい。
作っ時にTLISTに入れておいて、破棄する時にリストから引っ張り出してfreeでいいですか?

85 :
TObjectListに入れておけば、リストをクリアするだけでOK

86 :
>>81
XE2とは共存できる。
10.1Berlinの他のグレードとは共存できない。

87 :
>>85
ありがとうございます!

88 :
>>86
ありがとう!入れてみてすんなりスマホアプリ作れたら買おうっと

89 :
16万かー 高すぎる
昔の4万位ならまた買いたいと思っていたのに、これじゃ無理だわ
C#ならタダだから、こっちで我慢する

90 :
すごく初歩な事だと思うんだけど、フォームを最大にした状態でコントロールを配置するにはどうしたら良いですか?

91 :
えっ?

92 :
フォームデザイナは消せない?
フォームデザイナの中で少なからずスクロールさせるのがうざくて。

93 :
もっと大きいディスプレイを使う

94 :
えっ?そう言う事じゃないw

95 :
コンポーネントパレットのコンポーネントをダブルクリックすればいいんじゃね。

96 :
最大化した状態を想定してコントロールを配置したい?
...ということでもなよね

97 :
>>96
そう言う事です。
俺、相当変なこと聞いてる?

98 :
フォームのサイズに追随するように作るから
わざわざ最大化で考えたりしない

99 :
>>97
自分だけが使うんだったら、最大化を想定して
コントロールの絶対位置を決めることもありだけどね

でも、どのような環境で使われるか分からない場合
フォームの最大化への対応は結構難しいと思う

まあコントロールのAlignでフォームサイズに
追随するだけでいいなら簡単だけど...

100 :
>>98,99
ありがとうございます。
大きなディスプレイ使います。w

101 :
ふーん

102 :
>>100
4Kディスプレイを買うのかな?

103 :
4Kディスプレイはプログラミングする上で非常に作業性が高まって
生産能力が跳ね上がるからアリだな
たくさんの資料と開くのはマルチディスプレイでも出来なくないけど
4Kディスプレイは縦が長いのが素晴らしい

一つ問題があるとしたら
自分のソフトを4Kディスプレイで最大化したら
描画が追い付かなくなってカクカクになるという事実に気づいてしまうこと
ただし、MS謹製のエクスプローラでもカクカクになるぐらいなので
本当の意味で4K対応のソフトはそんなに多くないし
気にしなくてもよいのかもしれんが、どーなんだろ
アンチエイリアスのかかった文字の描画がとにかく遅い
1FPSぐらいになって操作困難だ

104 :
k-ブルが糞なんじゃね

105 :
サブスクリプションって、アップデート2をインスコすれば
勝手にライセンス適用してくれるの?

106 :
フォームに入力した数値を保存する方法を教えてください。

107 :
>>106
フォーム(上のエディットコンポ)に入力した数値を(ファイルに)保存する方法ということかしら?

簡単な一例。
フォームにエディットコンポEdit1とボタンButton1があるとしてボタンを押したらエディットコンポに入力されたテキスト(数値でなくても同じ)をファイルに保存する。

procedure TForm1.Button1Click(Sender: TObject);
var
 sl: TStringList;
begin
 sl := TStringList.Create;
 try
  // 入力された文字列を取り出し(数値だろうと扱いは文字列)、文字列リストに追加
  sl.add(Edit1.Text);
  // 文字列リストの内容をファイルに保存(ここでは実行ファイルと同じフォルダーにした)
  sl.SaveToFile(ChangeFileExt(Application.ExeName, '.txt'));
 finally
  sl.Free;
 end;
end;

108 :
ありがとうございます。
ちょっとやってみます。

109 :
TFile使ったら1行で書けるかも

110 :
TEdit.Lines自体がTStringsだからSaveToFile持ってるんじゃなかったかな

111 :
昔のDelphiしかないので最近のはわかりません、あしからず。
昔のでもメモコンポならLines.SaveToFile(ファイル名)できますね。

112 :
TEditにLinesプロパティってなくね?

113 :
TEditにはLinesはないね
もともと1行編集ボックスだからね

TEditの内容を保存するんだったら
TStringList.に読み込んでSaveToFile()を使うか
TFile.WriteAllText()を使うかだね

まあ後者のほうが簡単だけど

114 :
TFileってのは最近できたのか
TFileStreamとは別物なんだな?

115 :
TFile はDelphi2010からだって
TFileStreamとは別物
http://docwiki.embarcadero.com/Libraries/Seattle/en/System.IOUtils.TFile
System.IOUtils自体が2010からの追加らしい

116 :
パスワードがかかっているExcelファイルを開ける時にパスワードを入れる方法を教えて下さい。
delphi からパスワード無しファイルを操作する事は出来ています。

117 :
>>116
どういうやりかたで
「delphi からパスワード無しファイルを操作する事は出来ています。」
ができているのかしらんけど

OLEオートメーションを使っているなら、
xlApp.Workbooks.Open(FileName, UpdateLinks, ReadOnly, Format,
Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin,
Delimiter, Editable, Notify, Converter, AddToMRU)


excelを持ってないなら
?FlexCel for VCL / FireMonkey
を使うとか 

118 :
D6の使用許諾コードって今でも都連だね 知らなかったわ

119 :
なぜに今さらD6?
新しいの無料になってなかったっけ

120 :
RXバグだらけで使いづらいよ

121 :
具体的にどんなバグ?

122 :
ボタンの色の変更ってTButtonから派生させて改造しないとダメ?

123 :
結局どんなバグがあったんだろう

124 :
こんなバグ
http://gigazine.net/news/20161201-windows-10-upgrade-bitlocker-bypass/

125 :
WindowsのバグとRadStudioになんの関係が?

126 :
7以降アップデートしてないんだけど
すると良いことある?

127 :
人に依る

128 :
ユニコード対応がなんたらうんたら

129 :
Delphi2.0 の高速コンパイルは素晴らしかった

130 :
>>128
Unicode対応なんだ・・・TNTいらなくなるのか
これだけでも少し便利そうだな・・ありがと考えてみる

131 :
新機能使わなきゃそりゃあってもしょうがないけど、
さすがに7からならアップグレードすりゃ色んな新機能がわんさかだと思うよ。
古い新機能ではUnicodeから始まってWin64bit対応やOSX対応、ジェネリックやら
Vistaとかの新コントール。
http://docwiki.embarcadero.com/RADStudio/Berlin/ja/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8
から新機能のページだけを過去のバージョンにさかのぼってみていけばいい。

132 :
コードエディタの進化は効率アップにもなるしやっぱ良いよ

133 :
Editへの入力時のキーバッファをキャンセルする方法を教えて下さい。
今、バーコード入力するソフトを書いているのですが、担当者をComboboxで選択していないと
EditをクリアしてShowMessageを表示するつもりです。
EditをクリアしてMessageを出す事自体は出来ているのですが、バーコードから送られるデータの
最後にCRがついてきて(バーコードリーダーが付けてきます。)、多分このCRがShowMessageに
送られてShowMessageが勝手に消えてしまうようなのです。
イベントはKeyPressを使っています。
Windows7 Delphi10.1の環境です。
よろしくお願いします

134 :
何がききたいのかようわからん。

135 :
「Editへの入力時のキーバッファをキャンセルする方法を教えて下さい。」
後ろにごちゃごちゃよくわからん説明が書いてあるけどこれが聞きたいの?

単に入力された文字をキャンセルならKeyPressのイベントでKeyパラメータに
Key := #00とか代入すればいいんじゃなかったっけ?
if Key = 'A' then
 Key := #00;
すりゃ、Aの文字が入力できなくる

このことじゃなかったらもっと適格に書いてくれんとわからん。

136 :
ありがとうございます。
バーコードから送られてくる文字を全てキャンセルしたいのです。
一文字ずつチェックするのではなく、一気に送られて来た文字を消す方法はありませんか?
宜しくお願いします。

137 :
>>136
CRって復帰コードのことだろ?
最後にCRがついてくるなら、それが送られてくる最後の文字
なら、それが送られてきたら Key には0入れて Edit.Text := ""; でよかんべ

138 :
こんなんじゃだめなの?

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_RETURN then begin
ShowMessage('Enter!');
Edit1.Clear;
end;
end;

139 :
ありがとうございます。
出来ました。
条件に合わなかったら入力したらいけないと変な思い込みをしてました。
助かりました。

140 :
キーバッファw

141 :
えっ?

142 :
ラジオボタンって大きくならない?

143 :
できません。

大きなラジオボタンの絵を描くならできます(ちょっと気持ち悪いので注意)。

procedure TForm1.FormPaint(Sender: TObject);
begin
 DrawFrameControl(Canvas.Handle, ClientRect, DFC_BUTTON, DFCS_BUTTONRADIO or DFCS_CHECKED);
end;

procedure TForm1.FormResize(Sender: TObject);
begin
 Invalidate; // フォームの再描画をWindowsに促す。
end;

144 :
Berlin update2 のFireMonkeyで
Listbox.Items.Exchangeメソッドが動作しないXE2では動くのに

145 :
お前が悪い

146 :
質問です

147 :
関連付けされてるファイルを起動するのは ShellExecute でできますが
例えば abc.csv ファイルを .txt で関連付けされてるアプリケーションで
開く簡単な方法はあるでしょうか

148 :

Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、もしくは
質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。

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



149 :
>>147
簡単には無いと思う。
レジストリ開いて関連付け調べてabc.csvを引数にそのプロセスを起動させる。

150 :
拡張子に関連付けされた実行ファイル名の取得
http://mrxray.on.coocan.jp/Delphi/plSamples/480_GetFullExePath.htm

151 :
>>149-150
サンキュー参考になりそう

ちなみに xray さん元気そうでなにより

152 :
私はFindExecutable APIで拡張子".txt"のダミーのファイル名を渡して…というところまで考えていたのですが、そのものずばりなAPIがあるのですね。

153 :
Cのライブラリで
const char *ss[] = {"abc", "def", "xyz", NULL};
を引数として要求するAPIがあるのですがDelphiからは
どうやって定義すればよいでしょう?

154 :
ポインタのポインタ

155 :
array of PChar

156 :
>>154
>>155
ありがとう。
array of は内部的にはポインタなんですね。上手く動作しました。

157 :
 IntArray: array[0..99, 0..99] of Integer;

 AI :IntArray;
 P  :Pointer;
 Fs :TFileStream;
 i,j :Integer;

  for i := 0 to 99 do
   for j := 0 to 99-1 do
    AI[i,j] := Random(1000)+50;

  Fs.Write(AI[0,0], SizeOf(Integer)*L );
  Fs.Write(AI, SizeOf(Integer)*L );    ………(#)
のどちらでも OK ですが、これは AI[0,0] と AI のアドレスが同じというだけで
  AI[0,0] = AI
ではないのですから、(#)の記述は AI という '配列名' はポインタのように感じられます。しかし、
  P := AI;
とするとコンパイラに怒られます。Delphi の '静的配列名' はポインタではないのしょうか。

158 :
Fs.Writeの引数の型宣言みろ

159 :
 引数は型なしパラメータだから、実際にはパラメータのアドレスが Fs.Write に渡され、
そのアドレスが処理対象になる。つまりそこに必要なサイズのメモリ領域が正しく確保さ
れていれば、その領域がどのような型なのかは関係ないということか。

 結局 Delphi の '静的配列名' はポインタではないんだね。

160 :
P := Pointer(AI);

161 :
後に誰かの参考になるかもしれないので少し詳しく書いておきます。

Cで作成されたDLL内の関数の.hファイルの定義が
void hoge(const char **hage);
となっていて、
const char *ss[] = {"abc", "def", "xyz", NULL};
hoge(ss);
という使用例が書かれてたところ、

procedure hoge(hage: array of PAnsiChar); cdecl; external 'kage.dll';

hoge(['abc', 'def', 'xyz', nil]);

で上手く動作しました。ペコリ。

162 :
さんざん概出

163 :
>>162
そうですか。スレ汚し失礼しました。ペコリ

164 :
 TreeView をデザイン時にフォームに貼り付けてできたアプリを終了するとき
 TreeView の各ノードが保持するデータ(TreeView1.Items[n].data が保持しているデータ)
も自動的に廃棄されるのですか?

165 :
>>164
TTreeNode::Data が保持するデータはプログラマが明示的に破棄しないとダメ。

166 :
>>165
 ありがとう。
 以下のような感じでいいのですかな?

//TNodeData は TreeNode.Data が保持するデータのクラス

//+----------- FormDestroy ------------+
procedure TForm1.FormDestroy(Sender: TObject);
i: Integer;
begin
with TreeView1 do
for i = 0 to Items.Count - 1 do
TNodeData(Items[i].Data).Free;

//TreeView1.Items.Clear; 不要
end;

 あるいは TreeView のOnDeletion を使って

//+-------------- TreeViewDeletion --------------+
procedure Form1.TreeView1Deletion(Sender: TObject; Node: TTreeNode);
begin
if Assigned(Node.Data) then
TNodeData(Node.Data).Free;
end;

167 :
>>166
そんな感じ。

168 :
スレッドを使ったプログラムで、スレッド内にある未使用の変数をコメントアウトしたら、
終了する時にアクセスバイオレーションが出るんだけど、こんな事ってあるの?
プライベートに宣言してあるからメインとかが絡んでる事は無いのだけど。

169 :
コメントアウトされた変数が確保していたメモリ域のおかげで
偶然アクセス違反が発生しない状態になってるとかじゃね?
要はコメントアウトしていなくてもコーディングミスで不正なメモリアクセスしている状態なのかも

170 :
こんな時間にありがとう!
そんな事があり得るんですか。
難しいなぁ。

171 :
あり得るというより一番多いパターンだったり

172 :
「参照」とポインタの話か? 慣れるまで結構厄介だからな。

173 :
ちょっと教えてください

自分自身(実行ファイル)を再起動する方法を教えてください
ちなみに二重起動を禁止したアプリでです
できれば再起動用の別アプリを使用しないのが理想的です...

174 :
>>173
自分自身が起動するときだけ二重起動許可して起動確認できたら自分を閉じる

175 :
>>174
ありがとうございます。
やはりその方向ですか。

リスタート後に最初のインスタンスのiniファイルを読み込みたいで
Mutexのチェックの前に最初のインスタンスの終了を待つ処理が
必要かなと漠然と考えていたんですが...

簡単でスマートな方法はないんですね

176 :
>>175
自分(プロセスA)が自分(プロセスB)を起動するときに、コマンドラインで /restart というようなコマンドを渡す。
プロセスBは /restart ってコマンドを受け取ったら、Mutexの所有権を得るまで待機する。(再起動処理)
プロセスAはMutexの所有権を開放する。
/restartを受け取らなかった場合は、Mutexの所有権を得られなかった場合は終了する。(二重起動防止)

177 :
>>176
そうですね

Mutexが取得できるまで待機すればいいですよね
終了待ちをもっと複雑な方法で考えてました
ありがとうございます

178 :
よろしくお願いします。
『レコード型Aを利用する、クラスA』を自作したとします。
そして、『このクラスAとほとんど同じ機能を持つが、レコード型Bを利用する、別のクラス』を作りたいとします。
この場合、どう記述するのが効率良いでしょうか。

例えば、よくサンプルで見る、TListのItemにレコード型のポインタを使ってデータを入れる場合。
type
// レコード型A
PTRecA = ^TRecA;
TRecA = record
// 略
end;
// レコード型B
PTRecB = ^TRecB;
TRecB = record
// 略
end;

// クラスA・・・レコード型Aを利用
TClassA = class(TList)
 procedure SetItem(Rec: TRecA);
 function GetItems(Index: Integer): TRecA;
end;
// クラスB・・・レコード型Bを利用
TClassB = class(TList)
 procedure SetItem(Rec: TRecB);
 function GetItems(Index: Integer): TRecB;
end;

上記の様に、クラスAとクラスBで似た様なコードの重複が多い場合、
クラスの定義をもっと効率良く記述できる方法があれば教えていただきたいです。

179 :
delphi ジェネリックスでググる

180 :
クラスの継承を使えないか?
レコードのほうに「違い」を押し込んでクラスにして継承して、クラスは共用とできないか?
そもそもクラスとレコードに分ける必要があるのか?
などなど

181 :
レコード型をクラスのメンバとしてポインタで管理して
そのポインタの実体を操作する仮想メソッドなどを作る。

182 :
firemonkeyを使ってandroid向けのゲームを作り始めましたが
いきなり躓いて困ってます。

ゲームループのスレッドを作って描画を行っていますが
TBitmapがスレッドセーフでないため描画処理が正常に行えません。

firemonkeyでゲームを作る場合はメインスレッドのみで作るのでしょうか。

183 :
lockしてもダメ?

184 :
DrawGridのセルの色を取得する方法を教えて下さい。
どのセルに何色を塗ったか記憶しているのですか、
もっと簡単に知る方法があると思い質問させてもらいました。
宜しくお願いします。

185 :
>>182
スレッド側でBitmap描画してからSynchronize使ってメインスレッドのBitmapに転送すれ

186 :
>>183
Delphi6の時はCanvas.Lockがあったと思いますが
今使ってるDelphi10.1ではLockが見つからなくて・・・

187 :
>>185
スレッド側で描画用のBitmapをCreateしてWidth、Heightを設定した段階で
EBitmapSizeTooBigの例外が発生してしまうため、そこまで辿り着けなくて困ってます。

188 :
例外の種類見る限り、スレッドと関係なさそうに見えるが。
ビットマップが大きすぎるってWidthとHeightをいくつに設定しようとしたの?

189 :
>>188
サイズは350x450なのでたぶん大きすぎることはないと思います。
メインスレッドで動作させた場合は、例外が発生することなく動作するので
メインスレッド以外ではTBitmapは使えないのかと・・・

また、Windowsでは正常に動作してAndroidで動作させると例外が発生するため
Android固有の問題なのかなと思いまして

190 :
>>186
map/unmap

191 :
>>189
AndroidのThreadで発生するってQPに上がってるからVOTEしとけばそのうち治るんじゃないかな
そのうち。

192 :
Delのバグかよ

193 :
>>190
教えていただいたものを使って処理を行ってみましたがダメでした。


>>191
期待しないで待つことにします。


別スレッドでの処理を諦めてとりあえずメインスレッドで全て行うようにします。
相談に乗っていただいた方々ありがとうございました!

194 :
Delphi 10.1 BerlinのStarterでチュートリアルをやってます。
http://docwiki.embarcadero.com/RADStudio/Berlin/ja/ユーザー アクションに対する応答をコード エディタでコーディングする(IDE チュートリアル)
このページの中ほどまで進んだら
[dcc32 エラー] TextEditorUnit.pas(94): E2003 未定義の識別子 : 'TDialogServiceSync'
というエラーが表示されてしまいます。
どうしたら修正できるのでしょうか?

195 :
>>194
ここで引っかかってるのかな?
UserResponse := TDialogServiceSync.MessageDialog(
'File already exists. Do you want to overwrite?',
TMsgDlgType.mtInformation, mbYesNo, TMsgDlgBtn.mbYes, 0);

TDialogServiceSync はFire Monkeyでしか使えないからvclプログラムではエラーになって当然かも。
チュートリアルのソースコードって色々バグってるからなぁ…
とりあえず

UserResponse := MessageDlg(
'File already exists. Do you want to overwrite?',
TMsgDlgType.mtInformation, [mbYes, mbNo], 0);

と書き換えたらエラー出なくなると思う。

196 :
クラスファンクションなのかそれは?

197 :
>>195
ありがとうございました。早速試してみましたが、
[dcc32 エラー] TextEditorUnit.pas(99): E2003 未定義の識別子 : 'mbYes'
[dcc32 エラー] TextEditorUnit.pas(99): E2250 指定された引数で呼び出すことのできるオーバーロード関数 'MessageDlg' が定義されていません
[dcc32 警告] TextEditorUnit.pas(99): W1000 シンボル 'MessageDlg' を使用することは推奨されていません : 'Use FMX.DialogService methods'
とエラーが出てコンパイルが通りませんでした。

FireMonkeyはデフォルトで使えるのかと思ってました。いろいろと無知すぎるので
もうちょっと分かりやすいところから勉強しなおしてみます。

198 :
>>197
その警告が出るって事はFire Monkeyの方なのか。
だったらそこは元の>>194の命令でいいはず。

usesの所に FMX.DialogService.Sync が記載されているか確認して
なければ追加。

199 :
スレッドからサブフォームを表示する事は可能ですか?
他の機器から特定の信号が来たら、警告画面みたいなのを表示しようとして
スレッドで信号監視してフォーム表示のつもりがうまくいきません。
なのでメインフォームにタイマー置いてタイマーイベントで信号監視しています。
ヘルプを読むとスレッドからフォームはコントロール出来ないような事が書いてあったのですが、皆さんならどうしますか?

200 :
表示するだけなんでしょ?

自分だったらpostmessage

201 :
ごめん

post-/sendmessageにはwm_closeみたいな表示するメッセージはなかった

独自のメッセージを定義して受け取った側でshowするか
showwindow(async)を使うかだね

202 :
>>199
TThread.Synchronizeで、メインスレッドに切り替えてから、引数で渡されたコールバックメソッド(手続き)でサブフォームを表示させるとか

203 :
>>198
エラーが消えて無事に動きました。
ありがとうございます。

こういうのはIDEが教えてくれるのかと思って
いましたが、有料版だとそういう機能は
あるんでしょうかねー

204 :
>>203
関数や手続きが定義されていないってエラーが出たときはその関数などのヘルプを見て
そこに書いてあるユニット名が自分のプログラムのuses節に書かれているか調べるといいよ。

205 :
>>200,202
ありがとうございます。
教えてもらった方法を調べながらやってみます。

206 :
TShellCtrlコンポーネントって、デモに含まれるものなんだよね なんでVCLに含めなかった??

207 :
>>199
Queue関数。
http://www.gesource.jp/weblog/?p=538

208 :
マルチスレッドが終了したかどうか確認するのに、フラグで確認してるんだけど、
なんかもっとスマートな方法ってありませんか?
ググったらWaitForが出て来たのですが、hoge.WaitForとしてもハンドルエラーとか出て使えませんでした。
宜しくお願いします。

209 :
何があなたのスマートの基準なのか?
フラグは別に悪くないと思うけど。

210 :
freeが一番確実じゃない?

211 :
>>208
hogeってTThread?
そんだったらTThread.FreeOnTerminateをTrueにしてるから、
スレッドが終了してFreeされてるから、ハンドルエラーと出てくるんだろう。
FreeOnTerminiateをFalseにすればOK(そのかわりTThreadの破棄は自分でやる必要がある)。

212 :
終了したか確認するのにWaitForしたら確認じゃなく待機しちゃってダメじゃないのかと思うけど。
FreeOnTerminiate:=true;で OnTerminateイベントでフラグ立てるので良くないかい?
あとはメインフォームに終了通知としてメッセージ送るとか。
Win32API使うのOKなら FreeOnTerminiate:=false; にして
スレッドハンドルに対して WaitForSingleObject (タイムアウトは0に設定)使い
WAIT_OBJECT_0が返るかWAIT_TIMEOUTが返るか確認する。
もしくはGetExitCodeThread関数を使うとかかな。

213 :
そういやスレッドの終わり方の議論が2、3年前にあったな

214 :
FreeOnTerminateが使えない?とかいう議論じゃなかったっけw

215 :
FreeOnTerminiate:=true;で OnTerminateイベントでフラグ立てる

に賛成。簡単確実。

216 :
>>215
そのフラグの排他制御は簡単じゃないよ

217 :
ああOnTerminate 内はメインスレッドか。
なら簡単だわ。メンゴ。
昔はOnTerminateイベント無かった希ガス

218 :
おはようございます。
皆さん、ありがとうございます。
フラグがやはり良さげなんですね。

もう1つ教えて下さい。
スレッドの中で
try
stringlist:=TStringList.Create;
while not Terminete do
begin
何かの処理
end;
finally
stringlist.free;
End;
とした時に、TermineteをTrueにして終了するとfinallyの処理をしてくれません。
異常終了した時はfinallyの処理をしてくれます。
stringlistの解放はOnTermineteでするのが普通なのでしょうか?

219 :
>>218
構文が変だよ

tryが抜けてる

220 :
>>219
tryはあるが?

221 :
>とした時に、TermineteをTrueにして終了するとfinallyの処理をしてくれません。
んなわけない。ちゃんとfinallyの処理するはずだからもっとしっかり確認しよう。

>フラグがやはり良さげなんですね。
もうちょっと具体的にスレッド終わった後何したいのかとか書いてくれんと答えようがねぇ。

222 :
>>220
ホントだtryはあった...でも
最近のdelphiは仕様が変わったのか...

念のため例外処理入れてみたら?

list=:tstringlist.create;
try try
while not terminated do begin ...end;
// ここで正常処理終了のフラグをセット
except....end;
finally list.free; end;

223 :
>>218
>TermineteをTrueにして終了するとfinallyの処理をしてくれません。
どうやって確認したの?
あとTThreadの派生クラスならTerminateはメソッドとTerminatedプロパティが使える。

>stringlistの解放はOnTermineteでするのが普通なのでしょうか?
そんなことはない。

224 :
昔昔、QuadrupleDを使ってやってたサウンドの再生を最新のDelphiでやりたいんですが、使えるライブラリを探してます。

・複数のwaveファイルをマルチチャネルで読み込んでそれぞれ別個に再生したい
・チャネル単位でループ再生、ピッチ変更、音量変更がしたい

あるかな…(´・ω・`)

225 :
ブレーク入れてね
ステップで見るときブレーク入れないと
見かけ飛ばすから

226 :
フラグの排他制御は簡単だと思うが。
boolean変数一個なら読み書きは1命令で、割り込まれることはないだろうし
書く前に消されちゃうようなコードを書かなければいいだけ。

227 :
>>226
きちんとした知識がある人にとっては簡単だよね

228 :
フラグをグローバルやメインフォームなどに
持たせるのはなんか古臭いという気持ちはある

229 :
元号変わったらどうすっかな
D7だと対応できんだろ

230 :
>>229
元号とか使わないか
自力で変換

OSの機能を使ってるんだったら大丈夫か
ただvistaも今春でサポート終了するけど

231 :
Berlin試したみたけど以前ここで言った
gifアニメのバグが解消されてないな

232 :
string、ansichar、pansicharの型キャストってどうやるの?
暗黙の型キャストの警告を消したいんだけど、ググってstrpcopyとかのサンプルを実行しても消えない。

233 :
>>232
string(ansistring変数)とかで消えない?

234 :
具体的なコードを挙げてみては?

235 :
Konopkaコンポーネントのアンインストール方法を教えて下さい。
インストール中に異常終了したのでアンインストールしたいのですが、
アンインストールも途中終了してしまって、行き詰ってしまいました。
よろしくお願いします。

236 :
>>235
マイドキュメント\Embarcadero\Studio\18.0\CatalogRepositoryにあるKonopkaのフォルダと
パブリックのドキュメント\Embarcadero\Studio\18.0\CatalogRepositoryにあるKonopkaの
リポジトリデータを削除すればよかったと思う。(心配ならバックアップとっといてね)

konopka、インストール失敗するとアンインストールもできなくなるんだよね。

237 :
>>236
ありがとうございます。
助かりました。

238 :
入力の支援機能で出て来た候補にカーソルを合わせて、
ピリオド打ったら選んだ候補が入力される設定ってどこにありますか?
ベルリンのup2を入れたのですが、最初は良かったのにいつの間にかピリオドで選択されなくなってしまいました。

239 :
StringGridのセルをデータの合わせて塗りつぶすことをしています。
タイマーイベントで0.2秒毎にデータに変化がなくても一旦デフォルト色にしてから他の色を塗っています。
そのせいだと思うのですがセルの選択ができません。
セルをランダムに色を塗りつつ、セルの選択もできるようにするにはどうしたらいいでしょうか?

240 :
おんどろーせる

241 :
TSringGridのOnDrawCellイベントの引数で渡されるTGridDrawStateで、選択されたかどうか判断できる。
選択されてないときだけ、色を変更するよろし。

242 :
>>240.241
ありがとうございます。
まだ、試してませんがどういうコードを書けば良いか案が浮かびました。

243 :
タイマーで200ミリ秒ずつやってるところが壮絶にまぬけっぽい 小学生以下の知能

244 :
Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、もしくは
質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。

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

245 :
昨日はありがとうございました。
TSringGridの特定のセルに数値を書き込むのにDrawTextを使って右寄せで書き込んでいます。
この書き込んだ数値を後から取得することってできますか?
セルにHintみたいに埋め込めたら簡単なんですけどググっても分かりませんでした。

>>243
シーケンサーの信号状態を監視するんで手っ取り早くタイマー使ってます。

246 :
その「数値」はどこにしまってあるの? それは自分で世話するしかない。
DrawTextは文字列を描画するだけで、何書いたかなんてどこにも覚えていないよ。

247 :
StringGridなんだから、Cellsプロパティを通して、文字列として各セルにでも入れときゃいいんでね?(ハナホジ

248 :
>>245
格納するオブジェクトも実装したらいいんじゃ

249 :
整数ならcellのobjects(だったっけかな)に入れときゃ良いじゃん

250 :
vs2015アンインスコしたらDel10.1でコンパイルできなくなった。
Del再インスコするしかない?

251 :
環境変数消されてるとか?

252 :
>>251
ありがとうございます。
調べてみます。

253 :
スレッド1で変数aの値を読み書きしていてスレッド2では変数aを読み込みしかしない場合って干渉対策って必要?

254 :
うん

255 :
ありがとうございます。
干渉対策じゃなくて排他処理っていうんですね。
失礼しました。
各スレッドで共有する変数を集めたUnitに変数aを宣言して使っています。
この変数aを複数のスレッドからアクセスする場合、Synchronizeを使うのでしょうか?
SynchronizeはスレッドからVCLを描画する場合に使うと書いてあったので、フラグを立てるとかして
排他処理をするのでしょうか?

256 :
クリティカルセクションでも使えばいい、どっかで
CS := TCricalSection.Create()で作っておいて、

同時にアクセスされたら困るところで
CS.Enter();
try
 共有リソースの変数Aにアクセスなど
finally
 CS.Leave();
end;

257 :
まぁ、他にもSyncObjs.pasにTInterlockedとかあるけど、
そこは自分で頑張ってくれ

258 :
>>255
Synchronize内の処理はメインスレッドでの処理となるから
同時アクセスがありえなくなるということらしいよ

259 :
皆さん、ありがとうございます。
これから調べて確認しようと思うのですが、最後に1つ教えて下さい。
シンクロナイズを使い過ぎるとマルチスレッドの意味が無くなるとヘルプに書いてありました。
クリティカルセクション等は使い過ぎてもメインフォームの反応が悪くなるとかそういう事が無くなる、若しくは低減されるとかあるのでしょうか?
もし、それならクリティカルセクション等を推奨すると思うので使い過ぎはやはりダメとは思いますがどうなんでそょう?

260 :
どこからが使いすぎだと思う?

261 :
>>259
ウインドウ描画などしているスレッドが「メインVCLスレッド」。
要するにメッセージループが動作しているスレッド。
Synchronizeはこのメッセージループに「渡したプロシージャの処理を任せる」ため
Synchronizeを多用すると「メインフォームの反応が悪くなる」という状況を生む。
Synchronizeはあくまで変数のアクセスと言った軽い処理に限定すればいい。
この場合、メッセージループがウィンドウメッセージを処理する合間に変数へのアクセスを処理する程度なので
その程度で「メインフォームの反応が悪くなる」ということはないだろう。
ただ、もし重たい処理を任せてしまうと、フォームのイベントで処理するのと同じになってしまう。
(フォームなどコンポーネントのイベントはメインVCLスレッドで動作している)
この場合メインフォームの反応が悪くなる。

クリティカルセクションはメッセージループとか関係ないので、それによってメインフォームの反応が悪くなるということはない。
ただ例外として、メインVCLスレッドでクリティカルセクションを使うと、
他のスレッドが使用中はメインVCLスレッドは待機してしまうのでメインフォームの反応が悪くなることはある。

262 :
>>259
問題は「使い過ぎ」の定義だと思うけど
僕は1つ1つの処理の長さが長くなってしまった場合をいってるのではないかと思う。
同時処理といっても現実は短い処理が交互に行われるのをスレッドと称しているだけであって
それを否定するようなプログラミングはもはやスレッドではないということではないかと。

263 :
あ、もしかしたら質問に答えてなかったかな?
つまりsyncronizeだろうがcsだろうが
占有状態が長くなるようなロジックになるなら同じことだ

264 :
>>262
今のcpuは普通にマルチコア、マルチスレッドじゃない?
同時に動いてんじゃない?

265 :
>>264
そういう御仁が現れるだろうなとは思ってた。
申し訳ないがマルチコアなどの詳細な仕組みが現話題の結論に
影響を与えるものではないので無視させてもらいます。

266 :
OSのタスクスケジューリングやスレッド、Delphiのメインスレッドの話がごっちゃ混ぜになっててカオスカオス

267 :
細かい処理が交互にっていつの時代のタスク割り当ての話してるんだ

268 :
>マルチコアなどの詳細な仕組みが現話題の結論に影響を与えるものではない

今の話題においてこれは正しいと思う。

>同時処理といっても現実は短い処理が交互に行われるのをスレッドと称しているだけであって
この話も同じく、“現話題の結論に影響を与えるものではない”

269 :
中途半端に説明するからややこしくなる
SynchronizeにしろCriticalSectionにしろDelphiのメインスレッドが処理待ちになる状況ができれば反応は悪化する

くらいでイナフ

270 :
>>262が変な説明を入れたのが元凶だ

271 :
>>269
メインに限らないっしょ。同期されたサブスレッド間でも片方が長い処理すれば片方は待ちになるわけだし。

272 :
>>271
メインスレッドを待機が発生するスレッドと置き換えて考えたら良いだけの話であってそのあたりは柔軟に考えてくだちい

まー、サブスレッド同士が待機しあって停滞しててもメインスレッドがそこに巻き込まれてなければ(見かけ上は)レスポンスの悪化とかは無いけどね

273 :
結局「スレッド」という英単語が同いう意味かってだけだね。
あと例えば一度にたくさんのログインがあるサーバーなんかは
スレッドたくさん作ることによるメモリの圧迫が指摘されてて
メッセージ処理型に回帰してるよね。
つまり同時(的な)処理においてスレッドが万能ってわけじゃない
ことも知ってたほうがよいよね。

274 :
で、そのメモリ圧迫とやらは今回の質問のどこにかすっているのかね?

275 :
どんどん話題がすり変わっていくな

276 :
>>262
が悔し紛れに難癖つけてるだけっしょ

277 :
予想どおりの反応ですw

278 :
10.2tokyo入れて見たんだけど、10.1でgetitから入れたコンパーネントが入れられなくてプロジェクト開けられない。
エンバカ何なんだ?

279 :
>>278
よくある
Getitじゃなくて配布元からダウンロードして入れたらOk

280 :
StarterのBerlinをTokyoにするんだけど
いったんBerlinをアンインストールするんだっけ?

281 :
StarterのBerlinをインストールしたままTokyoをインストール出来ましたし、同時に起動出来ました。

公式ブログには逆の順番(Tokyo→Berlin)でのインストールは、
お勧めしませんって書いてました。

282 :
>>281
ありがとう

上書きインストールされないってことか...

283 :
2007からXEにあげるのに、いまさらながらユニコードに取り組むんですが、
・フォーム上で入力されるのはUTF-16
・UnicodeStringで保持するのはUTF-16
・ソースはUTF-8
の違いがあるようなのですが、ソースでリテラルで記述したUFT-8の文字を
コンポーネントのテキストやUnicodeStringに代入したりするとごちゃ混ぜに
なってしまうんですか?

284 :
文字コードを確認してみたのですが
var
c: Char;
begin
c := 'あ';
ShowMessage(Format('%x',[(Ord(c))]);

のソースで、ソースをバイナリエディタで見てみると、'あ'の部分
のコードはUTF-8ですが、Ord(c)はUTF-16のコードでした。
これは、勝手に文字コードの変換が掛かるのですか?

285 :
こう言うとアレだけど
普通に使うときはユニコードとか
意識する必要ないんじゃない?

286 :
>>285
例えば、

s := Edit1.Text + 'が入力文字列';

のような場合だと、sにUTF-8の文字コードとUTF-16の文字コードが混在して
まずいような気がするのですが、プログラム動かしてみると、コンパイル時に
ソースコードでの文字列はUTF-16に変換してるのかな?と思ったのですが。

287 :
便乗失礼します。
2009以降
・ShowMessageの内部では、UnicodeStringとして表示する文字列を処理します。
ってことだったと思うのでUTF-16変換されてるのかと

異なるコード間では暗黙の変換される
でよかったでしょうか?
どこまで変換されるのかは確認してないのと、
Chr関数とか文字数、Byte数を数えるときに気をつけて考えておく、くらいでしか認識してないのですが

https://edn.embarcadero.com/jp/article/38783
https://edn.embarcadero.com/jp/article/38791

288 :
>>287
リンク先を読んでみると、文字列の代入時に変換してるみたいですね。
ありがとうございます。

289 :
>>286
大丈夫
ソースファイルがutf8とか意識しないほうがいいよ

文字列リテラルもstring変数もunicodeだよ

290 :
>>288
内部でどう処理してるのか知らないけど
このケースだと代入時(実行時)に変換してるのかな?

実行ファイルの最後に定数が保存されてたと思うけど
すでにunicodeになってたような気がする

291 :
>>285
逆に、常に意識してないと嵌まることがあるよ。

292 :
コンパイル時に変換

293 :
>>288
リンク先を読んでみると、「すでにUnicodeとして扱われている」ってのが分かると思うんだが。

>Delphi 2009で、内部的に大きく変わっています。Delphi 2009では、Unicodeを標準文字列型として採用しているために、このコードで使われている文字列はすべてUnicodeです。
>Sに代入している ‘Hello, World.’ は、Unicodeです。

ソースの文字コードがなんであれ、リテラル文字列の扱いはUnicode。

C++Builderで扱う場合はLが付いているかいないかでリテラル文字列の扱いが変わると思う。

294 :
てか簡単なサンプル作って試せば済むことじゃん

昔のバージョンのdelphiで
文字コードを意識する必要があるケース以外
最近のバージョンのdelphiでも
unicodeであることは考えなくていいんじゃない

295 :
真に気を付けないといけないのは1文字に複数文字が入ってるサロゲートペア

見た目が同じだからハマる

「ば」と「ば」が違う文字とかわっかんねーよ

296 :
正直UTF8で統一したほうがよかったと思う

297 :
>>295
最後の行は「ば」?
これってサロゲートペアなのか?
それとも別の文字が化けた?

それと
内部の文字列がunicodeになった話と
unicode文字列を処理する話は
微妙に違う話だぞ?

298 :
UTF16も実は可変長という落ちなんだからややこしくなっただけだと思う

299 :
>>297
2chだと化ける可能性あるから両方サロゲートペアじゃないよ

入力ソフトによってはかな入力するとサロゲートペアになるんよ
んでUTF16の入力を受け付けるもんだからそのままDBに格納したりしてあとで検索にひっかからないとか
コードの仕様で言うならIF条件すり抜けたりとか

おかげでEditのTextとか必ずUTF8Stringに代入する癖がついてしまった

300 :
は̋

301 :
>>295
それ、ちょっと間違ってるな。
そのケースはサロゲートペアじゃないだろ。
サロゲートペアは単にUTF-16の2バイトのコードユニットで2つのコードユニットで
1文字を表すケースの事でしょ。

「ば」の話は合成文字だか結合文字だかそっちの話じゃん。

302 :
>299
>おかげでEditのTextとか必ずUTF8Stringに代入する癖がついてしまった
だから、それも全然関係ないから。UTF-8だから解決するというのは勘違いだから。
合成文字の問題は「正規化」使って解決する問題。

303 :
>>302
はしょってるから書いてないけど正規化もしてるよ

文字での説明に重箱の隅つつかないでくださいな
気にしないでやってるとそういう問題(にぶつかる可能性)もあるよって話です

304 :
言葉の使い方が完璧に間違ってるのに重箱のすみつつかないでっていわれてもなぁ・・

君たちが議論してる「ぱ」と「は」+「゜」はサロゲートペアと全然関係ないんだけどな。
合成済み文字と基底文字と結合文字の話で合って、
サロゲートペアと全く関係ない。

305 :
つまりこれこれこういう問題があってこうしましたって1から10まではしょらず正しい言葉をつかって説明しないとここには書き込むなって事ね。了解。




めんどくせ

306 :
完全に言葉の定義を間違ってるんだから、教えてあげただけじゃねぇかよ。

別に間違ってたことに対して、「おまえら馬鹿?」みたいなくだらい煽りとか
俺はする気ねぇし。丁寧な言葉で教えてあげたら、その言いぐさ。

307 :
君たち ではない。

308 :
言葉の定義とやらが間違ってたとしても、
バグの原因になる事のコメントは個人的に大歓迎(こなみかん

309 :
俺には難しい話をしてるけど、文字扱うには正規化とやらをやって、utf8とか16とかに統一してから加工したり検索したりしないとハマるってこと?

310 :
サロゲートペアに関連してだけど
MECUtilsとか使ってやったりするの?

今まであんまり意識したことないから
注意喚起は嬉しいけどメンドクサ過ぎるね

311 :
Unicode化の弊害というかなんというかだけど、
マルチデバイスも相まって想定外の変な文字が入る確率っていうのは
確かに飛躍的に増えてる・・・気がする。

312 :
>>310
そんなの使わなくても普通は標準であるだろ。
Character.pasに必要なのそろってる。
TCharacter.IsSurrogate()

313 :
>>312
TCharctorなんてものはない

System.Charactor.IsSurrogate(廃止)
もしくは
TCharHelper

314 :
おっと綴り間違ってたな
System.Characterだな。また重箱の隅つつかれるところだった

315 :
そうなんだ。それはすまん。XE3以降買ってなくて
最新のもってなくて。

316 :
今ってディスプレイのアスペクト比が数種類あるけど、皆さんは画面のデザインってどうしてますか?
16:9に合うようにデザインしてる?
それとも、フォームの設定とかで実行時にある程度アスペクト比に合わせてくれる設定とかってある?

317 :
時代は可変

318 :
>>316
全画面表示させない

319 :
>>316
意味分からないが。
ウインドウサイズ自体固定させないし、
Align プロパティを使って固定部分とそうでない部分とを分けるし
プラスTSplitterでユーザの好みにさせたりもするし。
動画や画像でもないならアスペクト比なんて気にしないんじゃないのか。

320 :
やっぱ、全画面表示させないが簡単でいいな

321 :
>>316
ファイアーモンキーならTScaleLayout使って無理やり対応した事もあります

322 :
メモリーリークの場所ってdelphiに標準で入ってるリークを監視するやつのフルバージョン入れないと分からない?

323 :
Delphi10.1でのフル機能のfastmm4の使い方を教えてください。
メモリーリークのメッセージは出るのですが、テキストファイルが作成されないです。
よろしくお願いします。

324 :
DatetimetostringとFormatDateTimeの違いって
procedureであるか、Functionであるか、だけですか?
(引数は異りますが)

325 :
>>324
引数が違うって分かれば
自ずと...

326 :
>>325
すみません、質問をはしおりすぎでした。

procedure DateTimeToString(var Result: string; const Format: string; DateTime: TDateTime);
function FormatDateTime(const Format: string; DateTime: TDateTime): string;

上記2つ、使用目的はいっしょですよね。
なぜに同じような目的の手続きと関数が用意されているのか?
と思った次第です。

FormatDateTimeだと、
showmessage(FormatDateTime(....));とできますが、

DateTimeToStringだと、
var
DTstr :String;
Begin
DateTimeToString(DTstr, .....);
Showmessage(DTstr);
となるので、DTstr分手間がかかるなと思ってました。

327 :
何かとの互換性でどうしてもDT2strが欲しかったんじゃないかね

328 :
>>323
http://mrxray.on.coocan.jp/Delphi/Others/UsageFastMM.htm

ここに書いてある手順でやってみた?

329 :
>>326
ソースコード見てみると
FormatDateTimeはDateTimeToStringを呼び出しているだけ。
たぶん利便性(使い分けできるように)の問題だと思う。

ちなみに以下の関数が内部的にDateTimeToStringを呼び出すだけで実装されている。
function DateToStr(const DateTime: TDateTime): string;
function TimeToStr(const DateTime: TDateTime): string;
function DateTimeToStr(const DateTime: TDateTime): string;
function FormatDateTime(const Format: string; DateTime: TDateTime): string;

また同名の関数で引数の最後にTFormatSettings型が追加されたバージョンも
内部的にTFormatSettings型を引数に持つDateTimeToStringを呼び出しているだけ。

330 :
>>329
なるほど、参考になりました。ありがとうございます。

331 :
>>328
FastMM4のデモで試した結果、ソースの所のFastMM4 in 'FastMM4.pas'をSharememに変えたらリークの場所がわかる余裕になりました。
Sharememが何かはわかりません。w
円バカのサイトに載ってたのでやって見たらなんとか動作したって感じです。

332 :
delphi10.1までは問題なかったのにdelphi10.2にしてから
stylebookで指定したstyleが一部反映されなくなりました。

tabcontrolのタブがandroid実機で実行すると
styleが反映されずデフォルトのタブになってますorz

対処方法とか分かる方いらっしゃいますか?
暫くは10.1を使い続けるしかないですかね・・・

333 :
>>332
Android用のスタイルを一旦削除してマージ

334 :
>>333
アドバイスありがとうございます。

Android用スタイルを削除してマージしてみましたが結果は同じでしたorz

もう少し詳細に書くとIDE上ではタブにもスタイルが反映されているが
ビルドしてAndroid実機で動かすとアクティブなタブだけが
デフォルトになってしまう状態です。

同じプロジェクトをDelphi10.1でビルドし直してAndroid実機で動かすと
アクティブなタブも含めてに正常にスタイルが反映されてます。

また、スタイルに使用しているファイルは「AquaGraphite.style」を
使用していますが他のスタイルファイルを使っても同様の結果でした。

実機はXperia Z3ですが他に持っていないので他機種でどうなるかは未検証です。

335 :
>>333
すいませんTabControlのみしかない最小限のプロジェクトで試したら
正常にスタイルが反映されているのが確認できました。

変な設定がどこかで生きているのだと思います。
失礼しましたm(_ _)m

336 :
メッセージダイアログやショーメッセージで改行を
使うとメモリリークが出るけどなんで?

337 :
バグってんじゃね

338 :
delphiがバグってる?
新規作成でシンプルな状態でやってもメモリーリークのメッセージが出るんだけど、どうすりゃ良いんだろう。
俺だけ?

339 :
メモリーリークを調べているのですが
MessageDlg(IntToStr(123),mtConfirmation, [mbOK, mbCancel], 0);
IntToStr(123)が原因でメモリーリークが起きるみたいです。
Delphiのバグ?コードがダメ?

340 :
ソースみれば?

341 :
336ではないけどソースコード見てみた
ポイントになりそうなところがアセンブリで書かれてた

342 :
それがどうかしたか

343 :
1. MessageDlg と同じ引数を持つ、そのユニット内にローカルな関数を書いて、MessageDlg のせいかどうか調べる。
2. IntToStr と同じ引数を持ち、適当な文字列を返す関数を同様に書いてみる。
3. コンソールアプリケーションのプロジェクトを作成して、1.を行って調べてみる。
4. 同様に IntToStr も行ってみる。

344 :
どのバージョンで発生したのかしら?
こちらのTurbo Delphiは
ReportMemoryLeaksOnShutdown := True;
で再現せず。

345 :
昔の経験
マルチスレッド内で間違った呼びし、クリティカルセクションの間違った実装

346 :
「IntToStr(123)が原因でメモリーリークが起きる」
と判断した理由を開示せよ

347 :
32biでも64bitでもinteger型は32bitですか?
Pointer型(とPtrInt型)だけが変化すると考えてよいのでしょうか?

348 :
-1 を代入する
pointer を求める
pointer + 0 と pointer + 3 と pointer + 7 あたりを見る

0 を代入する
pointer を求める
pointer + 0 と pointer + 3 と pointer + 7 あたりを見る

349 :
Integer は 32 だけど LongInt は 32 とは限らない

350 :
>>349
そんなことどこにも書いてないけどホント?
ttp://docwiki.embarcadero.com/RADStudio/Berlin/ja/32_%E3%83%93%E3%83%83%E3%83%88_Delphi_%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE_64_%E3%83%93%E3%83%83%E3%83%88_Windows_%E3%81%B8%E3%81%AE%E5%A4%89%E6%8F%9B

351 :
そのページは、たぶん、Win32->Win64 だけの頃のやつ。

http://docwiki.embarcadero.com/RADStudio/Tokyo/ja/Delphi_%E5%9E%8B%E3%81%A8_C%2B%2B_%E5%9E%8B%E3%81%AE%E3%83%9E%E3%83%83%E3%83%94%E3%83%B3%E3%82%B0
ここで、C の long は、Wind64 では 32-bit、iOS64/Linux64では 64-bit。

とか

http://docwiki.embarcadero.com/RADStudio/Tokyo/ja/%E5%8D%98%E7%B4%94%E5%9E%8B%EF%BC%88Delphi%EF%BC%89

とか

352 :
>>351
iOSだけ特殊な感じ?変なの。
LongIntとLongWordは使わないほうがよさげですね。何でこんな変な仕様にしたんだろ。

353 :
あ、iOSにはLinux系も含まれるんですか?
その辺のあやふやさも嫌な感じですね。

354 :
シンエディットでプロシージャの名前とファンクションの名前を色分けするような使い方をしたいのですが、
シンジェネラルに設定するキーワードの種類を増やす事はでききませんか?
継承してシンジェネラルも自分で作らないと無理でしょうか?

355 :
シンエディットて何?

356 :
SynEditのことらしい
これをカタカナで書く感覚が分からん

357 :
すまん。
あんまり、キーボードとかスマフォの画面とか触れないから音声のやつで入力した。

358 :
キーボードが苦手なプログラマw

359 :
>>358

360 :
これがアスペか・・

361 :
昔MCIをいじっていた者です。覚えている人いるかな?
4年くらいメソッドを書いてなくて、送るでwavを聞きたいなって思って久しぶりにコンパイラを触りました。
何をするソフトなのかというとフォームに対してD&DしてTListにD&D元のファイルのフォルダの
ファイル名を取得するソフトなんですが、なぜうまくいかないかわからなくて…。
指摘していただければ幸いです。

362 :
unit Unit1;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs,ShellAPI, Vcl.StdCtrls;

type
TForm1 = class(TForm)
Label1: TLabel;
ListBox1: TListBox;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
function SearchFile(SearchDir: string):integer; //SearchDir 検索対象のフォルダ
{ Private 宣言 }
protected
procedure FilesDropped(var Msg1:TWMDropFiles); message WM_DROPFILES;
public
{ Public 宣言 }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

363 :
procedure TForm1.Button1Click(Sender: TObject);
var
FileCount :integer;
begin
ListBox1.Clear;
//実行ファイルのあるディレクトリのファイルを列挙
FileCount :=SearchFile(ExtractFilePath(Application.ExeName));
ShowMessageFmt('%d個のファイルが見つかりました。',[FileCount]);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle, TRUE);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
DragAcceptFiles(Handle, FALSE);
end;

364 :
procedure TForm1.FilesDropped(var Msg1:TWMDropFiles);
var
FNameSize: UINT;
Count : UINT;
FileName : array[0..255] of Char;
FileName1: 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;
end;

end.

365 :
とこでfmxアプリをタスクトレイに収める方法はないですか?

探すとロシアのサイトにコンポーネントがあったけど
他に方法はないでしょうか?

366 :
>>365
Windows専用だけどいい?

367 :
>>366
ええもちろん

例えばバックグラウンドでネットにアクセスして
通知したりポップアップしたりする感じ

Androidだとserviceを使うんでしょうが
Windowsデスクトップだとタスクトレイに
常駐させるくらいしか思いつかない

こういうWindowsアプリをfmxで作る場合
どうするんでしょうか?

368 :
>>367
WinAPI.WindowsをUSESしてタスクバーから消したいアプリケーションのHWND取得してShowWindow(HWND,SW_HIDE);をぶちかます

タスクトレイにアイコン表示させたりする場合はコード記述でもできるけど面倒だからMonkeyMixerか何か使ってVCLを混在させてTTrayIcon使う

369 :
>>368
ありがとう

MonkeyMixerを調べて見ます

370 :
TTrayIconはVCL依存がほとんどないから、切り出して使った方が余計なユニットがリンクされなくていいと思う
自分はそうしてる

371 :
教えてください。

fmxで矩形以外の多角形領域を
Bitmap(.Canvas)間でコピーするには
どうしたらいいでしょう?

Helpを探したんですが見つけられませんでした

苦肉の策で矩形領域を別のBitmapにコピーし
対象の多角形領域外を完全透過に塗りつぶして
それを最終的に目的のBitmapにコピーしてます

よろしくお願いします

372 :
fmxねぇ...

実行ファイルのサイズが
vclの倍以上になるのはビックリ

でもvirustotalなんかでの誤検知は
確実に減るな

373 :
DBCtrlのKeyPressメソッドで出てくる
^H  ^V  ^X
とかって何を指してるんですか?それぞれ16進で、8,16,18の値なんですが。
ポインタの逆参照以外で ”^” の使い方はヘルプにも無いのですが。

374 :
H 48h
V 56h
X 58h
ctrl+H で 08h
ctrl+V で 16h
ctrl+X で 18h

375 :
>>374
コントロールキーを押しながら…の記述に ”^” を使うということですか。
ありがとうございます。

376 :
ちょっと教えてください

ジェネリクスなTListにレコード型を格納しておいて
後でレコード内の一部のフィールドを修正したい場合
どうすればいいんでしょうか

やっぱレコード全体を取り出して、修正後に全体を書き戻す?

377 :
うまくいくかはわからないが、
lst: TList<THoge>なリストがあるとして、

for i :=0 to lst.Count-1 do begin
lst.List[i].SomeField := v;
end;

のように、レコードのコピーが発生しないようにすればもしや。

378 :
デフォルトプロパティ List[i] に相当する List.Items[i] の
read関数 function TList<T>.GetItem(Index: Integer): T; は、戻り値が
左辺値ではないので、どうしても一時変数が必要です。

379 :
>>378
Itemsプロパティではなく、内部で管理している配列を直接返すListプロパティを介してもテンポラリーのコピー発生するんだっけ?
ちょっとうろ覚え。

380 :
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

381 :
エスケープ文字をデコードすると 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

382 :
>>381
詳細に解説いただきありがとうございます!

>\M-c のところが、e3 なのか 5c 5d 2d 63 なのかでわかるでしょう。

od -xのやり方が分からなかったのでログをテキストで保存して
バイナリエディタで確認したところ5c 4d 2d 63でした。
これは表示する側の問題ということですよね?

あの後、XCodeでNSLogでデバッグログを出力する簡単なプログラムを書いて確認したところ
XCode上のデバッグコンソールには日本語が文字化けしないで出力されますが
Xcode -> Window -> Devicesに表示されている実機のログでは日本語が文字化けしたので
表示側の問題なのかなと思います。

日本語が表示できないのは不便なので解決できるとうれしいですが
こういう場合、難しいのでしょうか。

383 :
>>382
面倒だから試してないけど
NSstr使うとかAnsiStringに一旦格納して出力するとか

384 :
しまった。前後逆でした。e3 のままなら無変換。

で、ちょっと古いけどXcode6.3.2+ios8.3では日本語表示できてます。

385 :
>>383
ご回答ありがとうございます!
NSstrを使ってlog.dで出力しようとするとコンパイラに怒られてしまいましたorz
AnsiStringを試したところ出力文字は変化しましたが文字化けは改善されませんでした。

>>384
ご回答ありがとうございます!
なるほど。
現在の環境がXCode8.3 + iOS8.3なので少し古いXCodeを使って試してみようと思います。

386 :
iOSってTBannerAdを使ってAdmob表示できないんですか?
docWiki見たらiOSはiAdを使う前提の説明しかなくて・・・

387 :
Delphi10.2ってxcode9.0に対応してる?

388 :
すみません。どうしたりいいのか分からずに書き込みさせてください。

389 :


390 :
もちつけ!

391 :
したり顔

392 :
お伺いします。
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表示に表示させるにはどうしたらよいでしょうか?

最近いろいろやっているのですが、今ひとつ解決できないため、
教えていただけないでしょうか?

393 :
>>392
TDirectory.GetFilesとExtractFilePath

394 :
すみません。エロい方教えてください。

s := 'ABC'#13#10;

という文字列を、SJISの16進文字列に変換して、
  '4142430D0A'
にしたいのですが、やり方がわかりません。
どう書けばよいのでしょうか?

395 :
これか?
http://docwiki.embarcadero.com/Libraries/Tokyo/ja/System.Classes.BinToHex

396 :
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;

397 :
>>396
Delphi6でできました。ありがとう。
これ、XE5でも動くのかな?

398 :
>>397
自分で試すこともしないのか
試すことができないなら気にしなくてよくないか

399 :
すみません。
気にしなきゃいけない状況です。
で、XE5は今環境がないのです。。。
(仕事場が2つあり、いまXE5がない方に常駐しているので)

400 :
>>399
じゃあ行ってから試せ

401 :
xcode9に対応した?

402 :
firemonkeyって一度置いたコンポーネントって削除できないの?

403 :
>>402
そんなバナナ

404 :
猿だけに…

405 :
         .┌┐
        / /
      ./ / i
      | ( ゜Д゜) 
      |(ノi  |)
      |  i  i
      \_ヽ_,ゝ
        U" U

406 :
imagelistを使うと削除できないみたいです。

選択範囲には継承されたコンポーネント ImageList1 が含まれているため削除できません。.

これって返品で金返してくれないかな

407 :
>>406
うちではそんな現象出ないけどバージョンは?

408 :
>>406
お前それTFrameの中にあるやつを継承先から削除しようとしてんじゃねーの

409 :
すーぐ返金返金言うてからに

410 :
皆さ、レスありがとうございます。
バージョンは10.2です。
試した感じではボタンだけの貼り付け、削除はできる。
ImageListはListに画像を追加すると削除できなくなります。
その状態になるとボタンの削除もできなくなります。
ImageListの画像リストを削除してもダメです。
Delphiはそんなに触ってないので設定は初期値のままです。

411 :
何か最近ヘルプ表示したままdelphi終了しようとすると
ヘルプの終了処理に手間取ってdelphiがなかなか終了しない

心当たりはFCUへのアップデートとMS VisualStudioの再インストールだが...

412 :
firemonkeyで正規表現ってできる?

413 :
>>412
できる

414 :
ググったけどdelphiの正規表現しか出てこないです。
サイトとか教えてください。

415 :
>>414
System.RegularExpressions

416 :
有難うございます。

417 :
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には何もかえってこないのです。

418 :
キーが違うようです。
AppKey='\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese\Eras';

419 :
>>418
その通りでした。
Reg.OpenKey で戻りを気にしていなかったので、悩み続けてしまいました。
ありがとうございます。感謝です。

420 :
誰か行かないの?
https://techplay.jp/event/639177
https://techplay.jp/event/641383

421 :
Calender、Japaneseもわかってない人は論外

422 :
昔あったdelphiのフリーコンポーネントを集めたサイトって無くなっちゃた?

423 :
古くからのDelphiコンポーネントが全て置いてある
アーカイブ的なサイトってないんだろうか

424 :
ふと思ったけどTImageListじゃなく
TSoundListコンポーネントってない?
用途はありそうだが

てかTImageListってどういう仕組みで
画像を保持してるんだろう

425 :
DSPとかtorrysとか懐かしいな

426 :
Tetheringコンポーネントを使ってアプリ間データ共有を試してるんだけど
コンポーネントをフォームに置くだけでusesに追加される
IPPeerClient/Serverファイルがないって怒られるんだけど

Starterだと実はTetheringコンポーネントは使えない?

427 :
>>426
テザリングの項目がStarterは空欄になってるから多分使えない

428 :
>>427
そうだよね

だったらTetheringコンポーネントなんか
選択できなくすればいいのに

ただSystem.Tether.*.dcuはすべて揃ってるぽいんだよな

429 :
質問させてください。
仮想通貨取引所で資産状況を見るプログラムを書こうとしているんですがうまくいきません。
エラーメッセージが、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/

430 :
>>429
せめtw署名生成ルーチンくらい書こうぜブラザー
たぶんHmacSHA256やとは思うが

431 :
>>430
ありがとうございます。
SHA256でメッセージ暗号化するってことでしょうか?
それとも別の通信するのに必要な処理でしょうか?

432 :
仮想通貨って電気代が安い国の人がが圧倒的に有利だよね

433 :
>>431
URLから察するにZaifやと思うが、公式のAPIリファレンスまず読もうや
リファレンスで書いてる事がわからないなら都度質問したらええ
今の状況を人は丸投げと言う

434 :
買っとけよ
https://www.packtpub.com/all?search=Delphi

435 :
漬物石

436 :
>>432
自分で太陽光とか風とか地熱とか利用して発電できるならそいつが一番有利

437 :
Delphi 10.2 Tokyo で、

  @クラス定義部分で Ctrl+Shift+C を押してメソッド実装部を自動生成すること
  Aメソッド呼び出し部分でCtrl+クリック で定義部にジャンプすること

ができないのですが、できるようにする方法はありますか?

438 :
>>436
ふむ。結局中国が一人勝ちして終わりやな。

439 :
>>437
うちはできるからおま環
ショートカットの設定とか見直したらええんちゃう

440 :
>>439
俺環とわかり、ありがたし。
サンキュ!

441 :
Starterじゃないの?

442 :
そうです。
Starterです。
無料のやつです。

443 :
Starterは支援機能削られてる
コード補完、ライブコードテンプレート、リファクタリング、コマンドラインツール、コード整形、クラスエクスプローラ、ユニットテスト、翻訳ツールなどの支援機能

コード補完はつけて欲しかったね

444 :
そうなんですか・・・
コード補完がないのはキツいなぁ。

445 :
Starterまじでコード補完ないんだww
ひでぇww

446 :
5年間Starter使ってるけど
もう慣れた

447 :
fmxで実行時に複数のpanelを動的に作成し
その背景を別の色にしたいんだけど

設計時にpanelのカスタムスタイルを変更するのは簡単だけど
実行時に変更する方法が分からない

検索すると質問は結構あるけど
答えは古いバージョン対応みたいで
うまく機能しない

誰かヒントをお願いします

448 :
>>447
TRectangleマジおすすめ

449 :
>>448
バッチリだった
ありがとう

450 :
どうしても分からないため、教えてください。
アプリとしては、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 := '';

451 :
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;

452 :
>>443
Starterにはコード整形というのはないのですか、一生懸命探してしまった(笑)
CodeFormatterありがたい!

453 :
LDirはどこで定義されてんだ?

454 :
メモリー共有が簡単に出来るクラスってある?

455 :
>>454
ググったら、名前付きパイプによるプロセス間通信見つけた。

http://francois-piette.blogspot.jp/2013/04/inter-process-communication-using-pipes.html?m=1

使ったことないので、使い心地までは分かりかねます。

456 :
☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆

457 :
10.2.3出たな

でー、インストール時にもインストール後の「プラットフォームの管理」にもAndroidとかiOSのが出ないんだけどどうなってるんや?(Pro Ed.

458 :
D6に入れて使ってるIndy10 https対応してたのね。
dllをexeと一緒に置いておくだけ、あちこちで書かれてるIOHandlerを差換えって
必要ないのね。

459 :
すみません教えてください。
長いこと格闘していたのですが、どうしても攻略できません。

ソフトとしてはwavファイルをD&Dでフォームに落とすと、このフォルダー内のファイルをTListBox内に列挙して
フォーム落としたファイルをMCIを使って再生させるというものです。

只、落としたファイルをファイルPATHで渡しても何も起こらず苦慮しております。
長いこと何やってたんだと叱責を受けるかもしれませんが、よろしくお願いいたします。
意味のとりにくい文章で申し訳ありません。

ttps://www.axfc.net/u/3901529?key=delphi

460 :
>>459
ダウンロードはメンド

問題の部分だけでも書いて

461 :
>>459
ダウンロード全然始まんないぞ
てかアップローダ選ぼうぜ

462 :
ちょっと長いのですが…

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;

463 :
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; // フォルダーパス\なし

464 :
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;

465 :
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;

上記のチルダの部分あたりだと思うのですが…
どうしてもわかりません。

466 :
>>465
自分もよく知らんので間違ってたらごめん

>mciSendString(PChar('open"' + FileName1 + '"type MEPGVideo' + 'alias MusicFile'), nil, 0, 0);

'open"' じゃなくて 'open "' ではないだろうか
コマンドの後に空白スペースが無いって事ね
typeやaliasの前にもスペース無いけど

467 :
>>465
これってかなり前にも指摘したような気がするが...

まずはTEditをForm上に置いて実行時に
TEdit.TextにPChar(...)の...部分をそのまま代入してみな

それで問題なかったらMCIに送って

468 :
>>466-467
レスどうもです。

>>465
以前FileListBoxで作ったときのものをそのままD&D時のパスを含むファイル名を渡しています。
>>467
TEditに代入しても動きません。途方に暮れています。
何年か選択したListBox ItemからMCIに渡す方法を探してますが、どうしてもわからないままでいます。

上に上げたロダはリロードするとファイルが落ちてくるようです。

お忙しいとこrとすみませんがよろしくお願いいたします。

469 :
aliasの前に半角スペースがない
これじゃあMpegVideoAliasとか意味不明なtypeになる上にaliasが認識されないからMusicFileというaliasが未定義のまま渡される

470 :
>>467さんが指摘してるのはTEditに入れて表示された文字列が正しいコマンドかどうかチェックしろって事であって、代入したら動くんじゃないって言ってるわけじゃない

471 :
FileName1のスコープが問題何じゃねーの?

472 :
>>462-465
こんなやっつけ仕事みたいなコードだと、何やってもダメだと思う

473 :
>>469
>>467さんの指摘を受けLabelに命令を代入しましたが、確かにおかしい命令を吐き出していました。
open ""type MEPGVideo alias MusicFile
こんな表示をしています。


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

474 :
何が正しいのか正しくないのか、正しくないのは変数の中身なのかコードなのか渡し方かなのか、それとも別になにかなのかを探したら解決できる
正しいと思い込む前に確認する癖をつけましょう

475 :
>>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 :
>>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 :
>>472
やっつけ仕事に見えますか…
これでも知恵絞って作ったものですので…。
いろいろのサイトで見つけたD&Dの使い方とかボリューム変更など90%位は流用しているため、
メソッドを記述している人がバラバラなので書き方に違和感を抱くこともあると思います。


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

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

478 :
メディアプレーヤーコンポ使えばmp3ほかいろいろ再生できますぜ

479 :
>>477
>いろいろのサイトで見つけたD&Dの使い方とかボリューム変更など90%位は流用しているため、
>メソッドを記述している人がバラバラなので書き方に違和感を抱くこともあると思います。

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

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

480 :
>>477
触発されて自分も作ってみた...ただFireMonkey版だけど
基本的な部分はMacOSでも動くと思う

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

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

481 :
この話題長いねぇ
ずーっと解決してない気がするw

482 :
野球選手やサッカー選手に向いてるやつと向いてないやつがいるように
プログラマーにも向いてるやつと向いてないやつがいる

483 :
>>480
なかなか良い
センスあるな

484 :
>>480
シンプルで必要十分な情報がまとまっていました。

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

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

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

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

勘とノリと勢いとGoogle先生

486 :
>>484
巻き戻しってもしかして逆再生?
そりゃハードルが高すぎないか

487 :
>>484
VCLソース

488 :
リモコンって以前はMediaCenterが対応してたね

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

489 :
@pikさんて何者なの?

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

490 :
>>489
直接本人に言えよ。陰湿な奴だな。

491 :
すいません。教えてください
この前の続きです。

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

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

492 :
現状でやりたいことは、送るで起動して音声ファイル(以下.wav)を再生させることです。

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

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


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

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

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

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

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

494 :
ListBox1.ItemIndex := ListBox1.Items.IndexOf('9.wav');

495 :
なるほどなー
ListBoxとかもうずいぶん使ってなかったから忘れてたわー

496 :
>>493
ハイライトではなく選択した(された)アイテムと表現すべきでした。

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

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

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

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

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

497 :
>>496
もう仕様書作って金出してコード納品してもらった方が速い

498 :
アドバイスも何も....

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

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

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

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

499 :
>>496
>(送るだとListBoxに反映されますがD&Dだと反映されない。)

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

500 :
動くまでいじくり倒すしかない。なんで動かなかったのかわかるまで調べる

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

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

502 :
こんな文字列処理メインのコードにポインタの出番はないでしょう

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

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

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

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

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

503 :
ありがとう。C#で作り直すことにします。

504 :
そうきたか www

505 :
TString型からString型へのキャストはどうしたら良いのでしょうか?

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

506 :
上の質問はスルーしてください

507 :
本当か?本当にTStringとStringの違いがわかったのか?

508 :
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

401Z3

509 :
>>505
何年間も同じとこクルクル回って進歩してないな

510 :
>>507
本当は分かっていません。
ただ、もう少し試行錯誤が必要だと判断しました。
TstringからStringに渡すのはそんなに難しいとは思えないのですが……。

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

511 :
>>510
値、配列、値のリストという概念があるとして stringはどれで Tstringはどれにあたるか分かる?

512 :
"Tstring"という言葉が気持ち悪いので、そろそろ訂正してくだいませんか?

513 :
>>510
あのな、良いこと教えてやる

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

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

514 :
TStrings String型 TStringList AnsiString UTF8String・・・等々 いっぱいあるね

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

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

516 :
普通に教えてやりゃいいじゃんか
sがついてるからstringが複数扱えるクラスなんだろ?
男のくせにチマチマ、ネチネチ、そりゃお前らは一生結婚できねぇわw

517 :
>>516
で、お前は何で教えてやらないの?

518 :
本人だからさ

519 :
はいはい
まあ聞きまくるやつにも問題はありそうだが、
狭い世界のちんこい知識でどんだけ上から目線なんだろね

520 :
あー
そんなことを書くぐらいなら510に教えてあげればいいんじゃないの?
しょせん目くそ鼻くそなのに、ずいぶんと上から目線だねw

521 :
>>513
昔言語ガイド印刷してたのを忘れていました。
今読むと昔は分からなかったことが分かるようになってきました。
プロジェクトを作る前に最後まで読んでみます。

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

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

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

522 :
だから TStringじゃない TStrings

523 :
>522
TStrings ですね。
複数のStringを束ねられるのでindexの数字で必要なオブジェクト(!?)を選択できるのですね。
今はプロジェクトを中断して言語ガイドを熟読しています。
今までで分からなかったことがしっかり書いてあるので
安易に入門書を読む前にこっちを読むべきでした。

524 :
初心者にはDelphi6あたりのHelpがいいんだけどな
最近のHelpは不親切で、基本がわかっていない初心者には使いづらいだろうなと思う

525 :
頑張れ‼誰でも最初はなんも知らんからね
ちゃんと覚えていろんなもん作れるようになってね

526 :
何年「最初」を繰り返してるのだろうかー

527 :
>>524
Delphi6買っとけば良かったなと思っていたら、初心者の入門書に収録されていました。
早速インストールしてみます。
ですが、皆様はシステムライブラリのヘルプを見て手続きや関数などを覚えたのでしょうか?

>>526
職業はコンピューター関係でなく、時間が空かないとコンパイラを使うのも
厳しいために今回は5年ぶりくらいにコンパイラーいじっていますので
最初になってしまいます。

普通こんだけ叩かれたらプログラミングを諦めてしまうと思いますが、
双六ゲームがどうしても作りたいのでかじりついて離れずにいます。

528 :
>>527
叩かれるのはどれだけ親切丁寧に説明しても同じ場所を延々ぐるぐる回り続けてるからだよ

529 :
ほんそれ
話聴かない奴は叩かれる

530 :
>>527

>Delphi6買っとけば良かったなと思っていたら、初心者の入門書に収録されていました。

本の名前教えて。
俺もDelphiのHELP欲しい。

531 :
>>510>>527
MCIさんでしょ?
オーディオプレーヤは諦めて双六ゲームにしたの?

532 :
>>530
下のURLの「Borland Delphi 6 ドキュメントアップデート #1」って
ダウンロードしたら使えるんじゃ?
もっとも .hlp はWindows10とかだと、そのままじゃ読めないと思けど

http://support.embarcadero.com/jp/article/35932

533 :
このアップデートファイルは、Delphi 6 のライセンスユーザー向けに提供されるものです。
このファイルの使用に関しては、製品に同梱されたソフトウェアご使用条件に準じます。

534 :
ナンセンスなラ(略)

535 :
>>533
アップデートファイルを単独で使用するなってこと?

そもそもdelphi 6 personalってフリーなんだから
その程度はいいんじゃない?

536 :
>>361 この人まだいるんだね(笑)

537 :
オマエモナ

538 :
Unicode 正式対応したのは
どのバージョンから?

539 :
>>532

ありがとう!

540 :
>>531
MCIいじってますよ。
ただ今は、TStringsと戦ってます。

>>528
そうですね。
理解が追いついていかない。ふがいないなぁ。

541 :
>>538
2009じゃね?

542 :
>>538
string型のutf8化は2009から。
ucs2程度やwidestringであれば、少なくともdelphi7でも使えてる。

543 :
結局
>今回は5年ぶりくらいにコンパイラーいじっていますので
5年ぶりとかやる気ないだけだから教えるだけ無駄。

544 :
てか5年ぶりじゃないだろ
去年の夏も散々質問してたし
その1、2年前も来てたし

思うに、やるときは集中的にやって初心者脱出しないと
永遠に初心者のままだろ

545 :
直そう直そうと思っている毎日使っている自作ソフト、最後にビルドしてからまもなく10年になるわぁ

546 :
違った、2005年なので13年経過。。。

547 :
痴呆が始まってるな

548 :
Delphiに直結する話題じゃないけど
ちょっとお知恵を貸してください

公開してるDelphiで作ったツールがあるんですが
ツール内にサポート用の掲示板みたいなのを実装したい

方法としてどんなのが考えられる?

やっぱ最低でもcgi使えるサーバとか必要?

549 :
>>548
1.適当に掲示板スクリプトを設置してTWebBrowserで表示

2.BaaS使ってRESTでやり取り

3.SQLにFireDACで直接接続

4.WindowsVPS(Linuxに吐けるならLinuxでも可)でDataSnap

好きなのをどうぞ

550 :
>>548
まあ書き込みを送信する場所と書き込まれたものをダウンロードできる場所は必要だろう
サーバ借りなくても個人が固定IP契約しているならそのIP宛にすることも出来るし
固定じゃなくてもダイナミックDNS使えるルータとか使っているならそれを利用するのも手
適当なレンタルサーバでも月2000円も掛からないからそういうの使うのがベストだけど

というかしたらばあたりにスレ立ててそこを表示するようにするのはどう?
2chと違ってAPIいらんし

551 :
>>549
cef4delphiがよいよ

552 :
レスが遅くなりました

やっぱそんな感じですよね
配布サイトはcgi使えないのでレンタルサーバか自宅サーバですよね
したらばはスクレイピングが可能だったらいいかも

あとは、データは配布サイトに置いて投稿はメール経由かな

553 :
P2P

554 :
よく考えたら、したらばはスクレイピング不要で
旧2ちゃんと同じでdatファイルを直接ダウンロードできるんでしたよね

したらばにしようと思います


p2pは理想だけど、開発側も利用者側も障害が大きすぎるような

555 :
delphi10.2を使っています。
ActiveXのコンポーネントを追加するのにdclusr.dpkをあらかじめインストールしようとしても
dclusr.dpkが正しくないとかのエラーが出てしまいます。
dclusr.dpkって他のPCに入っている同バージョンのものをコピーしてもいいものでしょうか?

556 :
全然的外れとは思うけど
delphiを管理者権限で起動してる?

557 :
確認してみます。
コピーしようとしたpcはすんなり出来たので管理者とか気にしてませんでした。
ありがとうございます。

558 :
めっちゃ便利になった

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

559 :
Indyのヘルプについて教えてください

delphi 10.2.3を使っていて、IndyのIdCookieを使うのにヘルプを見たんですが
どうも自動補完される項目とヘルプの内容が一致していないみたいです

事実、古いネット上のサンプルでもpropertyなどが認識できないと
エラーが出るんですが、ヘルプにはちゃんと記載されています

もしかして、ヘルプの内容がかなり古い?

560 :
>>559

ここからダウンロードとすといいよ
Delphi についてくるのよりは新しいと思う

https://code.google.com/archive/p/indydocs/downloads

561 :
Indyはしょっちゅう引数とか変えるからねー

562 :
>>560
ありがとう
早速ダウンロードしてみます

563 :
Delphi 10.2.3に付属しているIndyのヘルプのバージョン 10.1.5
>>560に書いてあるところにあるやつは 10.5.8.3だね

10.1.5のヘルプは、実際にバンドルされているIndyとではいろいろと
違っている部分があるんで使えないんだよね
エンバカはよくこんな状態で製品として出してるもんだと思う
まぁIndyの公式Webページにあるヘルプが更新されずに放置状態なせいでもあるんだろうけど

564 :
OutputDebugString(v: TValue);
みたいなのを作りたいんですが
vが配列だろうがレコードだろうがクラスだろうが文字列化するサンプルコードがあったら教えてください

565 :
バージョンはXE8でお願いします

566 :
オブジェクトと普通の変数はさすがに分けないとな

567 :
case VarType(バリアント型) of
varNull: 〜;
varSmallint,varInteger,varshortint,varByte,
varword,varlongword,varint64,varqword: 〜;
varSingle,varDouble,vardecimal: 〜;
varBoolean: 〜;
varArray: 〜
else 〜
end;

みたいなのはどうか

568 :
fmxのlistviewで遊んでんだけど
各Itemの高さがvariableだと
ScrollToが正しく機能しないな

てか希望する行にプログラムでジャンプできない
これって...

569 :
昨日からずっと悩んでたんだけど原因が分かった
Itemを追加した直後にScrollToを実行していたのがマズかった

というのも個々のItemの高さの計算をUpdateObjects
イベントで行っているので、いったんシステムに制御を戻して
すべてのItemの高さを計算させた後でないと
ScrollToを正確にできないじゃないかと

570 :
CMY

571 :
CMY

572 :
        lヽ ノ l        l l l ヽ   ヽ
  )'ーーノ(  | |  | 、      / l| l ハヽ  |ー‐''"l
 / C  | | |/| ハ  / / ,/ /|ノ /l / l l l| l  C ヽ
 l   ・  i´ | ヽ、| |r|| | //--‐'"   `'メ、_lノ| /  ・  /
 |  M  l  トー-トヽ| |ノ ''"´`   rー-/// |  M |
 |  ・   |/     | l ||、 ''"""  j ""''/ | |ヽl  ・ |
 |  Y   |       | l | ヽ,   ―   / | | l  Y  |
 |   !!  |     / | | |   ` ー-‐ ' ´|| ,ノ| | |  !! |
ノー‐---、,|    / │l、l         |レ' ,ノノ ノハ、_ノヽ
 /        / ノ⌒ヾ、  ヽ    ノハ,      |
,/      ,イーf'´ /´  \ | ,/´ |ヽl      |
     /-ト、| ┼―- 、_ヽメr' , -=l''"ハ    |  l
   ,/   | ヽ  \  _,ノーf' ´  ノノ  ヽ   | |
、_    _ ‐''l  `ー‐―''" ⌒'ー--‐'´`ヽ、_   _,ノ ノ
   ̄ ̄   |           /       ̄

573 :
炎猿でwindows以外のOSアプリ開発している人にお聞きしたいのですが、スマフォとかがアップデートされた場合動かなくなるとか、デバッグ出来なくなるとか不都合はないですか?

574 :
ドラクエにいそうだな
炎猿

575 :
まぁそんな致命的そうな問題あるなら既に話題になってるだろう。それぐらいの信仰心ないならエンバカ製品使わない方がいい。

576 :
そうとも言い切れんから困る

577 :
OpenGLが枯れてるからあまり心配なさそう

578 :
AppleはMetal必須化するけどちゃんとコンパイラ出してくれるのかな

579 :
OpenGLから、Vulkanに移り行きそうな流れだし、Androidもサポートしてるから、安泰とは言えないかも・・・。

580 :
以前作ってたメディアプレイヤーですが、あるていどは出来上がったのでご評価いただければと思います。

https://www.axfc.net/u/3921358?key=delphi

今のところ.wav限定です。

既知の不具合
notfyを自前で無理矢理作っていて機能していない
トラックバーで自由にスライダーが動かせない(経過時間の方)

よろしくお願いいたします。

581 :
以前作ってたメディアプレイヤーですが、あるていどは出来上がったのでご評価いただければと思います。

https://www.axfc.net/u/3921358?key=delphi

今のところ.wav限定です。

既知の不具合
notfyを自前で無理矢理作っていて機能していない
トラックバーで自由にスライダーが動かせない(経過時間の方)

よろしくお願いいたします。

582 :
D6です。
既存の .dll を調べて exports 関数の受け渡しの型やパラメータを知るやり方はありますか?

昔の物で ナビンユーというパソコン用ナビソフトがあって、
それ用に市販GPSレシーバーと繋ぐ .dll を過去有志により幾つか作られてフリー公開されていました。
当時はWin95-98全盛からWin2k〜xp以降期ほどで
COM ポートが1〜6番?まで ボーレートも9600bpsまでというOS?の制約を引きずってさらに 4800bps固定のTokyo測地系(日本ローカル)という物で
ニフティサーブも終わり多くのフリーツールと共に作者さん達も消えていきました。

年数が過ぎ、性能も良く価格もお手ごろ感なGPSロガー兼GPSレシーバーが巷に溢れると
今度は通信速度が9600bpsが最低クラス機種、良い物は 38400bps や 57600bps で WGS84測地系(世界基準) なんてものでして
それらを使うには、
D7環境用で公開されていた TComPort という COM 1〜256 ポート番号、300〜256000bps までのフリー物があり入れて
自作の高速COMポート←→低速COMポート受け渡し&測地系座標変換プログラム と 仮想COMポートを使ってました。
接続がそうとう手間で使用はお蔵入りに・・・。
最近になって dll の作成を思い立ち
要は、TComPort を使って自作の .dll が作れないものかと

.dll の exports 関数名に関しては、ResHacker というフリーツールで
GpsdevClose
GpsdevGetSupportedDevice
GpsdevOpen
GpsdevSetGeodeticSystem
GpsdevSetInitialPosition
この5つということは確定しています。
適当な型で宣言してコンパイルしてダンプリストで比較してみましたが分らず・・。

一応入手していた公開最終版の.dllを2種類zip圧縮でUPしておきます。
ttp://www1.axfc.net/u/3921897.zip
KNLink の方はDelphiで作られているそうです。
誰か型が分れば他の有志が開発しやすい用に晒してくださるとありがたいです。

583 :
https://msdn.microsoft.com/ja-jp/library/67wc07b9.aspx
http://gimite.net/bcbqtree/qtreemain.cgi?mode=thread&thread=257
https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_61/rzaik/rzaikapigrphdrfile.htm
https://forum.dlang.org/post/mailman.637.1295116422.4748.digitalmars-d-learn@puremagic.com
http://bcbjournal.org/articles/vol4/0012/Using_Visual_C_DLLs_with_CBuilder.htm

584 :
Introducing Delphi and C++Builder Community Edition
https://community.embarcadero.com/blogs/entry/introducing-delphi-cplusplusbuilder-community-edition

Community EditionをDLしようとレジストの際に電話番号ではじかれます
なにか方法があるのでしょうか?

585 :
>>584
ログインしてからダウンロードすると良いかもしれない

586 :
>>585
thx
出来ました

587 :
firemonkeyでWindowsとAndroidアプリを作るとき
SpeedButton用の画像のサイズって
どのくらいにすればいいの?

StyleLookupにないんでGoogleのフリーアイコンを
使おうと思ってるんだが

588 :
Dependency Walker
ttps://www.off-soft.net/ja/software/develop2/depens.html

Visual Studio 付属 dumpbin
というのでも関数名だけしかワカンネ

ILSpy_Master_2.3.0.1827_Binaries 起動できない。
Visual Studio 付属 Ildasm もダメっぽい。

暑くてなーんも進まない

589 :
DLL調べるならデバッガで追いかければいいんじゃない? OllyDbgとかで

590 :
質問です。
他言語の計算式が解らず置き換える場合のデルファイ式はどういう構成になるのでしょうか?
えぬじーだらけで書き込めないのでソース含んだテキストのアプロダアドレスは以下に書いています。
https://agree.2ch.sc/test/read.cgi/mango/1532726276/389

ひっかかりだらけで掲示板が使いにくくなってますね。
マンゴー板絞り込みスレを経由すれば書けるということだね

591 :
めんどくさっ

592 :
今見てみたけど4バイトの浮動小数点数と各バイトの相互変換だよな

共用体使えば式は不要だと思う
可変長レコード(だっけ?)で検索

593 :
Delphiで書けないんだったら、日本語で何がしたいのか書けよ。
Perl語なんて俺は知らんから。
f: single;
f := StrToInt( '$'+ '4D' );

で, fに77が入る。
int -> sigle は暗黙の型変換でいけるが逆は要関数呼び出し(キャスト禁止)。

594 :
>592-583
ややこしくてすみません。
https://agree.2ch.sc/test/read.cgi/mango/1532726276/496
↑元ソースあどれすも記載しました。

>>592 ありがとうございます。夜にでも調べてみます。

595 :
>>592
どうやら>590 先のサブルーチンはズラして60進法座標にしてるだけのようです。
バイナリ読み込んで浮動小数点数にするパールの変換方式がまださっぱり分りませんが、適当にがんばります。
Delphi の Single 〜 Extended とか浮動小数点数を16進バイナリに直接相互変換みたいな内部関数ってありましたっけ?
現状D7でIEEE754-SingleとDouble は外部関数で使っていてそれだけでかなりサイズが大きくなってしまう。

 浮動小数点型の数値はメモリ上でどのように格納されているのか C C++
 2. 浮動小数点型の値のメモリ上での並び
 ttps://qiita.com/nia_tn1012/items/340a1f0ad71bf6085f7f
 元の値 : 1.024000
 内部表現の値 : 3F83126F
    ↑
この例では、IEEE754-Single でした。

>>593
IEEE754 単精度浮動小数点数(float)の文字列とかいろいろ入れても
ただの整数になるようですが?

var
f: Single;
begin
Edit_Single.Clear;
if (Edit_IEEE754_HexSingle.Text <> '') and (StrToIntdef('$' + Edit_IEEE754_HexSingle.Text,-1) <> -1) then
f := StrToInt( '$'+ Edit_IEEE754_HexSingle.Text );
Edit_Single.Text := FloatToStr(f);
end else Edit_Single.Text := '入力エラー';
end;

596 :
>595
パールスレでの名前欄 「427です」 がそのまま入ってしまいました。
>>590 です

597 :
Delphiの逆コンパイラでおすすめって何になるの?

598 :
超初心者スレだから許して のしつもんです。
Win10の開発は初めてです。
昔で言う .ini なんかはどこに置くのが基本ですか?
レジストリ使わない場合・・。
publicには Appdata とかないみたいだし。

Pathの 記述とか??
今でも TIniFile とか使いますか?

599 :
>>598
exeと同じフォルダ

600 :
>>598
%appdata%にアプリケーションのフォルダ作って保存

601 :
回答有り難うございます。
とっても参考になりました。

ユーザー別なら %appdata%\appname\
ユーザー共通なら %ProgramData%\appname\

って感じで 良いみたいですね。

602 :
確かプラットフォームごとのパスを取得する関数が用意されてたような

603 :
iniファイル便利か

604 :
>>603
PCが壊れたとき等、環境移行はローテクの方が・・

605 :
レジストリなんか使わない。
XMLなんか使わない。
やっぱりINIがいい。

606 :
「プロジェクトから削除」で削除したunit2,unit3って結局生きてる?
unit1で参照してるからコンパイルしたらエラーが出ると思ったら何も出なかった。
プロジェクトの削除ってどう言うこと?

607 :
そもそも
システムと連携でもしない限り
レジストリ使う必要が無いと思うんだが
自動的に何も考えずにレジストリ使ってるのが多いと思う

608 :
>>606
プロジェクトツリーから削除されるだけで参照は自分で削除しないといけないよ

609 :
>>608
有難う

610 :
(アン)インストーラが付属しないツールで
設定をレジトリとかexeフォルダ以外のフォルダに保存したりとか
何考えてるのか分からないのもあるからな

611 :
>>598 >>601
Win8.1以降でiniファイルは取り扱いが難儀になったので
TIniFileでも拡張子を別のものにすると素直に使える。
例えば .env とか
.ini でトラブルになる挙動としては
管理者権限でプログラムを動かすとiniは書き出せるけどD&Dできなかったり
ユーザー権限で動かすとiniが書き込み変更できなくてエラーになったりする。

612 :
インストールフォルダ自体がドキュメントフォルダ強制とかもあるな

613 :
>>611
virtualstoreに入ってしまったものを
間違って元のディレクトリ名で見に行くと

「書き込み変更できなくてエラーになったり」

するね

614 :
>>613 >>598
こんな感じでやってます。
env : 「environment 環境」の略を当ててます。

procedure TForm1.SaveSettings;
var
Log_IniFile: TIniFile;
ia : Integer;
begin
Log_IniFile := TIniFile.Create(ChangeFileExt(Application.ExeName, '.env')); // .env ← .ini
try
// [window]
Log_IniFile.WriteString('window', 'x0', IntToStr(Form1.Left));
Log_IniFile.WriteString('window', 'y0', IntToStr(Form1.Top));
// [〜〜]
finally
Log_IniFile.Free;
end;
end;

615 :
WriteInteger使えよww

616 :
レジストリを汚しまくるのは好かん!

617 :
>>616
ほんそれ

618 :
スレッドオブジェクトで外部機器と通信するコンポーネント(自分で取り込んだactivexです)を使いたいのですが、
フォームがないのでcreateの引数って何にしたら良いでしょうか?
サブのフォームをvisible:= falseにして、そこに配置した方が良いでしょうか?

619 :
引数はnilでok
必要ならparentを指定する

620 :
>>619
有難うございました。

621 :
十数年ぶりにコード書いてます。

Delphi7 のソースを XE3 で書き直そうとしてますが ???です。
XE3は 買ったきり手つかずだったものを初めて使ってます。

ShortDateFormat、LongDateFormat、ShortDayNames が未定義の識別子エラーとなります。

uses には SysUtils が有ります。
どんな原因が有り得ますでしょうか?

挫けそうですw

622 :
単純な変数から変更されているので、
FormatSettings.ShortDateFormat
のようにしてみてくだされ。

623 :
速攻でスゲー! 解決しました!

HELP の ”親” ってのを 見なきゃイケなかったのね
有り難うございます。

それにしてもHELP が いちいちHTMLソースが表示されて
”制限されたコンテンツの表示” ってクリックしなきゃなのは しんどい・・・

624 :
618です。
マルチスレッドで自分で取り込んだActiveXコントロールを使えるようにはなったのですが
不定期にEAccess Violationが出るので調べたら、このコントロールはSTA モデルとなっていました。
自分にはActiveXの知識があまりなくマルチスレッドで使用するにはCOM 関数のCoMarshalInterThreadInterfaceInStream,
CoGetInterfaceAndReleaseStream を使うのかな?ということまではわかりました。
ただ、参考にしたサイトには「インタフェースポインタを他のアパートメントに渡す場合,インタフェースポインタをマーシャリング
する必要があります。」と書いてありましたが理解できていません。
多分、各スレッドでCreateするのではなく1つのコントロールを各スレッドで使い回すのかなと思っています。
Delphiではどうするのか、とっかかりだけでも教えてください。
よろしくお願いします。

625 :
C#にしたら

626 :
そのまんまでしょうに。アパートメントをまたぐ場合はマーシャリングしなきゃいけない。
http://eternalwindows.jp/com/apartment/apartment02.html
で、CoMarshalInterThreadInterfaceInStreamでIStreamのバイトストリームに変換する。
で、そのストリームをアパートメントの異なる別スレッドに渡してそこでバイトストリームから元のオブジェクトに戻す。

コントロールのスレッドモデルより、各スレッドをどう初期化しかかがまず重要。
Comを使うときは各スレッドでCoInitialize(Ex)を呼ばなきゃいけんが、それでスレッドのアパートメントを指定する。

https://docs.microsoft.com/en-us/windows/desktop/com/processes--threads--and-apartments
読めば書いてある

627 :
>>597
未だに見つけられていない

DeDe 3.50.02 Build 1619 for Windows
ttp://www.softpedia.com/get/Programming/Debuggers-Decompilers-Dissasemblers/DeDe.shtml

Delphi製のバイナリを解析する方法
ttp://peryaudo.hatenablog.com/entry/20110105/1294209734
>DeDeのprojectタブを使うと、
>ディスアセンブルされたx86のコードをコメントでくくっただけのpasとデコンパイルされたdfmをファイルに落とせる。

x86コードを直接見てもワケワカメ

628 :
FireMonkeyのStringGridでマウスカーソル直下のセルの特定の仕方を教えてください。
マウスの座標は取得できています。
よろしくお願いします。

629 :
CellByPoint

630 :
ありがとうございました。
一応は取得できるのですが、セル内のマウスカーソルの場所によって、セルが特定できたり
できなかったりという感じです。
また、列の位置は左端なら本来は0だと思うのですが1が返ってきます。
行は先頭行が16と返ってきます。
MousePos := Screen.MousePos;
StringGrid1.CellByPoint(MousePos.X,dMousePos.Y,ColNo,RowNo);
上記のようなプログラムですが、マウスの位置の取得方法が間違っているのでしょうか?

631 :
onMouseMoveでテストしてみて

632 :
ローカル座標に変換する必要あんでね?

633 :
>>630
>MousePos := Screen.MousePos;
この段階でマウス座標はスクリーン座標(スクリーンの左上を起点とする座標)なので
クライアント座標(この場合、StringGrid1の左上を起点とする座標に変換しないとダメだよ
VCLならStringGridにScreenToClientというメソッドがあるんだけど
FireMonkeyのことはよく知らんけど似たような(もしくは同名の)メソッドがあるんじゃないかな

634 :
てかコントロール上のマウス位置から何なしようってときに
スクリーン座標が出てくる訳が分からない

635 :
皆さん、ありがとうございます。
まだ、解決できていないのですがまずはお礼まで。
ローカル座標はScreenToClientと同じ名前のものがあったので使ってみたのですが
うまくいきませんでした。
VCLの方だときちんとカーソル下のセルを正確に取得できるのに。
FireMonkey難しい。

636 :
こんなんじゃだめなの?
TForm1 = class(TForm)
private
{ private 宣言 }
procedure StringGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single);

implementation
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.OnMouseMove := StringGrid1MouseMove;
end;

procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single);
var ACol, ARow: integer;
begin
if StringGrid1.CellByPoint(X, Y, ACol, ARow) then
Edit1.Text := Format('Col:%d, Row:%d', [ACol, ARow]);
end;

カーソル下のセルを正確に取得できてるよ

637 :
>>636
ありがとうございます。
やりたいことができました。
>>631
ヒントもらっていたのに申し訳ありません。

あくまでもコントロール上の座標を取らないといけないということですね。
ScreenToClientはアプリのウィンド上の座標と言うことで良いでしょうか?

638 :
なんで未だにデルファイなんかやっとるんやおまいら?

639 :
いろいろな言語使えるけどDelphiがベストだと思うから

640 :
>>638
てかそんな話はエンバカスレでどうぞ

641 :
Delphiは討たれる

642 :
>>641

643 :
SKRegExpの作者はどこに行ったの?

644 :
今頃デルファイの10.2.3をインストールしようと思うんですが、サイトに書いてあるように一旦10.2をアンインストールしないとまずいですか?
一旦アンインストールした場合サードパーティーのコンポーネントはやはり再インストールしないとダメですか?
10.2.3をインストールしたら復活するとかは無いですかね?

645 :
>>644
別のプログラムとしてインストールされるからTokyo用のコンポーネントは再インストール必須
別に10.2を残してても共存はできる

646 :
なんか共存できんかった

647 :
同居出来ないってCPB CEでも入ってるのか?

648 :
BerlinとTokyoは共存できるけどToky同士は共存できなかったはず
10.2から10.2.3は設定データなどを残してアンインストール、インストールで普通に移行できたよ
CDイメージからのインストールの場合だけどね

Webインストールの場合はそれができないんだったっけ

649 :
サードパーティのコントロールが消えるのが嫌でアンインストールせずやってしまった。orz

650 :
ツールパレットにはコンポーネントのアイコンがきちんと表示されているんだけど、フォームに配置するとアイコンが見えない位小さくなってしまうんだけどなんで?

651 :
>>650
老眼かい?
他人にはあんたの見て思ってる物が大きいか小さいかなんてエスパーでもないから分らない。
画面キャプチャーでもして画像貼れ

652 :
そうか、ご苦労

653 :
フォームにアイコンだけ表示されるやつは
OnCreateで手動で追加する形でずっとやってるから
どうでもいいは

654 :
>>650
4Kモニターを使っているのかい?

655 :
そして
ふてくされて二度と来ないコミュ障であった

656 :
かわいそう・・・

657 :
意外とみんな覗いてんな

658 :
モニタにもっと顔を近づけるんだよ きっと見れるよ

659 :
モニタよモニタよモニタさん

660 :
マルチデバイスのソフトを初めて作ろうと思っています。
コントロールの配置に関して質問なのですが、とりあえずPC用かスマフォ用を作ってその後、
各デバイス用に配置しなおして再コンパイルする手順でいいでしょうか?

661 :
まずalignの使い方かな

662 :
>>660
FireUI

663 :
有難うございます。
調べて勉強します。

664 :
何かウェルカムページを開きたびに
セキュリティ警告が出るんだが

665 :
>>664
SSL証明書が期限切れたから更新あうるまで待ってってMCさんが

666 :
>>665
なるほど

今日はvclとfmxアプリ間のメッセージングのテストやってて
切り替えるたんびにダイアログが何度も出てイヤんなる

667 :
ブラウザのタイトルを取得したいんですけど、

WebBrowser1.Document.Titleだと、
'TWebBrowser' は 'Document' という名前のメンバを含んでいません

WebBrowser1.OLEObject.Document.Titleだと、
'TWebBrowser' は 'OLEObject' という名前のメンバを含んでいません

ってなるんです。
usesに何か足りませんか?

uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
FMX.Edit, FMX.Controls.Presentation, FMX.WebBrowser;

Delphi 10.2 Community Edition

668 :
解決しました。
VLCじゃやないやつで作ろうとしてたみたいです!

669 :
FMXでLabelのバックカラーの変更って出来ない?
今はPanelの色を変えて、その上に貼り付けてるんだけど。

670 :
>>669
labelのスタイルに背景ってないからムリじゃないかな

あとpanelよりtlayoutの上にtrectangleのせて
さらにlabelはったほうが柔軟性が高い

671 :
>>670
TRectangle、オブジェクトエクスプローラからなら子に色んな物入れられるよ
(要するにTRectangleがTLayoutのように使える)

672 :
>>669
XE5までの知識しかないが、
TStyleBook割り当てて、そっちで対応するんじゃなかったかな?

673 :
>>671
ホントだ

TPopupなんかもHelpじゃ実行時にParentを操作して
コントロールを乗っけるって書いてあって
使い勝手が悪いと感じてたんだけど
同じ方法で設計時にコントロールを配置できたりするんだよな

674 :
皆さん、ありがとうございました。
Rectangleって楽ですね。
もう一つ教えて下さい。
panddingとかmarginsを設定して0に元に戻すと隣のコントロールと隙間が空いたままになるのは自分だけ?

675 :
訂正です。
panddingとかmarginsを設定して実行。
その後、全部0に戻して実行しても隙間が空いたままです。

676 :
>>675
fmxのmarginはちょっとバグってる気がする

その例と同じかどうか分からないけど
複数のspeedbuttonをalignをleftにして並べて
ボタンのmarginを一度設定すると
marginを解除しても
ボタンの左半分くらいがマウスに反応しなくなる

いろいろやってると何かのきっかけで正常になったりする

677 :
上にスタイルの話があるけど
スタイルで背景色を変えたら
Windows10以外では適用されてなかった

コンパイルのしかたかなぁ

最近公開したソフトで
ユーザに指摘されて初めて気づいたよ

678 :
結局プログラムで指定すれば配置されるので我慢します

679 :
fmxでのフォームの最小化と復帰だけど
コードだけでで問題なく動作する?

WindowState := TWindowState.wsMinimize;
WindowState := TWindowState.wsNormal;
でできるはずなんだけどね
何かうまく機能したりしなかったり

680 :
本棚からDelphi7体験版が出てきたのでインストールしようとしたら、
ライセンス取得のところでエラーが出て使用することができません。
今更ながら、使うことは不可能なのでしょうか?

DelphiXEで非Unicodeのソースが作れればそれでも構わないのですが。

681 :
今ならフリーのDelphiありますよ

682 :
すみません非Unicodeと限定されている意味がわからないので現行のものではダメなのかも知れませんね

683 :
使用許諾コードがメールで送られてくる登録フォームならある
今でも機能してるのか知らんけど
http://support.embarcadero.com/jp/install/product

684 :
>>683
良くサイトを見たら、体験版の承認キーの発行は終了しているみたいです。
せっかく教えていただいたのにすみません。

685 :
FMXをタッチパネルついてるWindows10で動作させるとTListViewとかが勝手にタッチパネル用のスタイルになるのどうにかならんかなぁ
Scrollbarが表示されない上にタッチパネル操作になるから操作が統一できない・・・
デバイス自体を無効にしたらタッチパネルじゃないスタイルで動作するけどなんだかなー

686 :
ListBoxの項目にFocusを付与したいのですが、3,4日うまくいかず困っています。
クリック以外の方法でListBoxにFocusを付与する方法というのはありますか?

687 :
ListBox1.ItemIndex:=3;
ListBox1.SetFocus;
ってこと?
なんか以前にもこんな質問あったような気がするが

688 :
>>687
どうもです。
ただ、マウスクリックするとFocusが出ますが、ListBoxの他の所をクリックすると消えちゃうんですよね…。

689 :
>>688
そりゃそうだ
他のフォーカスを持つ所をクリックすればフォーカス移る

何がしたいのかわからない
「ウィンドウ ハンドルを持つコンポーネント」の意味を理解してますか?
例えばここ http://delfusa.main.jp/delfusafloor/archive/VA009712_take/delphi/kabeapp.htm

ListBox以外にフォーカス動かしたくないんなら
他の全てをフォーカスを持たないSpeedButtonとかメニューやツールバーとかにするしかない
或いは他を Enabled:=Falseにするとか

690 :
こんな物を作っていました。
ttp://www1.axfc.net/u/3946835.zip?key=123456
既知の不具合
下手にいじると簡単にバックグラウンドプロセスに行ってしまう。

Focusについてですが、このアプリはFocusが残る物をベースに作りました。
新しく作り直した物がListboxをクリックすると一瞬だけFocusが表示されるのですが
すぐ消えてしまうと言うよく分からない現象が起きていました。

よろしかったらご評価いただければ幸いです。

もう我流は辞めてTurboDelphi〜を参考書に勉強したいと思います。

691 :
大事なことを忘れていました。

このアプリはエクスプローラ上で.wavファイルを選択し「送る」もしくはアイコンでD&Dすると再生を始めます。
またアプリを起動して、エクスプローラからフォームに直接D&Dすると曲を演奏します。

よろしくお願いいたします。

692 :
例のお方か
まだやってたのはちょっとビックリ

693 :
そうですよ。まだやってました。石の上にも3年と言う言葉もありますし
おかげさまで、プログラミング技法の第一巻の半分くらいまでは理解できるようになりました。
今度はちゃんと基礎からやり直したいと思います。

あげたファイルはアルファー版ほどの出来ですが、今の知識で作った物です。
ご興味がありましたら、ご評価をよろしくお願いいたします。

694 :
>>685
確かにスクロールバーが通常は非表示だけど
そんなに違いがあったっけ?

自分としてはマウスホイールでスクロールしてるときも
スクロールバーが非表示なのがあれだけど

695 :
>>694
マウスでドラッグしたらスクロールできたり(タッチパネル式だからマウスでスクロールバー操作するのとは逆の動きする)、スクロールバーが表示されてるときにクリックしても反応なかったり
OS側で常にスクロールバー表示しても非表示とか

レガシーな入力デバイスが主なプラットホームでは切り替えられるようにしといて欲しい・・・

696 :
>>695
てかいま自分が作ってるfmxアプリをwindowsタブレットで動かしてみると
listviewとかのタッチでのスクロールには少し違和感があるね
android上とは明らかに違う操作感だ

697 :
>>690
ごめん俺687と689を書いた者だけど自分の勉強以外で人のソース読むほど時間はないんだ
と書きながらも流し読みだけでもしようかと開いてみたら
「404 Not Foundファイルが見つかりません」

>新しく作り直した
と書かれているがそれは今までのソースのつぎはぎコピペではなく自分で理解しながら書き起こしたものですか?
それならば不具合が出たとしても何をググって調べればいいかわかると思います

プログラミング技法って昔持ってた記憶があるけど一度通読したあと埃かぶってたまま引っ越しの時に捨てたくらいいまいちな本だった記憶
自分はやっぱり最初は「はじめてのDelphi」が一番わかりやすかったし
「Delphiオブジェクト指向プログラミング」でVCL読むようになって
「インサイドDelphi」とか「シェルプログラミング入門」が楽しく読めるようになった

そうです私もおじさんです

698 :
>>690
何をしたいのか分からないよ?
focusって言葉がそもそも違うんじゃない?

もし何らかの理由で本当にlistboxにfocusを与えたまま
維持したいんだけど、できないんだったら
他のコントロールがfocusを奪ってるんでしょ

それを調べたらいいんじゃない?

699 :
>>697
自分なんか「おじさん」じゃなくて
60過ぎのジイサンだよ

と言ってもdelphi歴は短いけどね
今はfmxにハマってる

700 :
ListBoxってフォーカスの有無で外観が変わったっけ?
フォーカスがなくなって困ることってある?

701 :
ご評価していただいた皆様ありがとうございます。
このソフトを作るときは、巻き戻し・プログレスバー移動自由自在・リモコン対応
を目標に作り始めましたが、どれ一つも実現できませんでした。
MCIを使っての巻き戻しは、テープ系なら可能みたいですがMpegではデバイスが対応していないので無理。プログレスバーでの移動はどんなに大変なのかは、DelphiでDVDプレイヤーを作った方のサイトがあるのでそちらを参照してください。
大本のVolume制御以外は自分で実装しましたが、新しく別プロジェクトを作って試作してめどが立ってから導入しましたが、何故か思ったように動かず。
前半はMCIに翻弄され後半はインターフェースに苦しみ、メディアプレイヤーはもう少し修行を重ねてから、作りたいと思います。
愚痴めいた内容ですみません。

色々アドバイスをしてくれた皆様、特に質問を投げかけたときに、コマンドを一言つぶやいていただいた方、自分で使い方を調べることで理解が進みました。
スレ汚し失礼しました。

702 :
3行で頼む

703 :
教えてくれた皆さんありがとう
つかれた
mp3再生君にはかないませんでした。

こんな感じで

704 :
>>702
おまえ1行じゃねえか

705 :
>>513

706 :
そうでした。
Object Pascal言語ガイドを少し腰を据えて読んで理解したいと思います。

707 :
前も言ったような気がするけど
fmxのコントロールのカスタムスタイルって
Windowsだと10でしか有効にならなくない?

設定した背景色とか8.1や7じゃ消えてるし

708 :
>>707
Windowsのバージョンで別々に設定できる反面、Windows10専用で設定されてるのに気付かないと別の環境では変な表示になっちゃうよね

709 :
MCI君をいじると擁護する単発が現れるのももう恒例行事になってきた。

710 :
え?誰が擁護してる?

711 :
ほらね

712 :
>>708
そうなんだ

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

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

こりゃちょっと大変な作業だ

713 :
>>712
デフォルトスタイルに設定するか、スタイルを保存して各プラットホームにマージしたらそんなに手間でもないよ

714 :
>>713
ありがとう
マージできるんだ

何もわからないで始めたのがマズかった

715 :
DelphiXEを使ってます。
エクスプローラからプロジェクトファイルをダブルクリックしてDelphiが起動するのですが、
さらにもう一つ同じ操作で起動すると、先に起動したIDEのプロジェクトグループに追加され
てしまいます。2つ目のプロジェクトを別のIDE画面で起動したいのですが、そのような設定
があるのでしょうか?

716 :
無い
そういうものと思うしかない

717 :
>>715
スタートメニューから起動してプロジェクトロードするしかない
レジストリをいじれば出来るかもしれないけど

718 :
Rioの各デスクトップレイアウトを変更した後
それを保存する項目がメニューから消えたみたいですが?

719 :
>>718
つ ttps://qiita.com/ht_deko/items/573f7c11c15c46f895c6

のQ.7かな?

720 :
>>719
ありがとうございました
できました

このボタンが関係するのかなとも思いましたが
Hintも非表示でスルーしてました

721 :
エンタープライズコネクターのインストール方法教えて下さい。
ダウンロードしてsetup.exeを実行してパスを通すの?

722 :
ちょっと教えてください

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

この画像を修正したいいんですがドライブの中を検索しても見つかりません

723 :
Delphi10.3 Community Edition 入れてみた
オブジェクトインスペクタのイベントTabが開かないんだけど
俺だけ?
Delphi10.23 Community Editionでは問題なく選択できる

724 :
10.23とかなり新しいから修正あったんだろ

725 :
'イベント'の文字の所をクリックすると いけた
TABの色と右側空白の色が同じだったので、空白をクリックしていただけだったw

726 :
クリックしてイベントTabを開けない方が難しいと思うw

727 :
10.3でPostMessageを使ったメソッド、イベントハンドラ呼び出しの
標準のラッパーみたいのありますか

Call(Button1Click, [Sender]);

的な使い方ができるもの

728 :
AndroidアプリのためにFMX.MEMOを使って
簡単なテキストエディタを作ろうと思ったが
いざAndroid上で動かすと、漢字入力の際
変換中の文字列の色が変化せずに困っている

普通は入力中の文字、文節の区切り、カーソル位置で
色が変わったり下線が表示されるが、周りの文字と同じままで
どこが入力中で、どこが文節の区切りなのか分からない
何か設定が足りないんだろうか?
(IMEはGoogle日本語入力です)

729 :
まあバグだろうね。欧米人はIMEとか使わないから

730 :
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 系でのミリ秒含めでもなさそうでちょっとお手あげです。

731 :
64bitの符号付きかね?

符号無しでも試してみれば?

732 :
整数型は、符号付き・符号無しのどちらか?
リトルエンディアン・ビッグエンディアンのどちらか?

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

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

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

Wikipedia の「エンディアン」を参照して!

733 :
D7から10.3comに変更してAndroidアプリでも作ろうかと気軽にチャレンジしたら
すげー苦労してる・・・
プロパティ名が微妙に違うしStringGridとかListviewみたいになってるし
ダイアログとかも面倒くせー

734 :
すまんエン馬鹿スレと間違えた メッセージが分かりづれーよJane

735 :
詳細書き直し
古い規格データの機器からのバイナリデータ。
目的:古いデータを今の形式にする為。
日時部分を 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ではない。

736 :
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;

737 :
パソコンで続きを書こうとしたらホスト規制の文字が出る
>736 考えてみます

738 :
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 のどうたらこーたら英文一杯

739 :
>>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の分解能とも一致している。

740 :
>>738
データ点数1529は、
1529 = 54 * 28 + 1
なので、28Hzのクロックシグナルでログを取っているものと予想される

741 :
>>738
日時の表現が.NET frameworkのDateTime互換と仮定すると、

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

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

例示された値の上位2bitは0b10(=2)なので、ローカルタイムだったのだろうと推測される。

742 :
>>739-741
ありがとうございます。
まとめるとこのような感じで上手くいくようです。

743 :
.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 日のローカルタイム経過日

744 :
.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
一致しました。

745 :
関数化したものを分けて書こうとすると
Sorry, you have been blocked
You are unable to access 2ch.sc

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

// i64 := 残りを 10進数数値に変換

746 :
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.

747 :
補足

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判別となってしまう。

748 :
DocWikiの内容をzipファイルか何かで一括ダウンロードする方法あったら教えてください

749 :
古いD6をまだ使っているが、エディタは VScode にDelphi extension入れて
使っている
デバッグはD6のIDEでやるしかないけど、両方立ち上げておけば
まあ使えますね

750 :
俺もD6で、秀丸でコーディングしていたが、VSodeに切り替えてみようかな。
VSCodeは他の言語で使ってるので。

751 :
VScodeの注意点: 別PCのファイルを開くと、変更が反映されない事象あり
自動保存されるけど、書きなおしたやつをまた開くと直っているように見えるのに、
実際は直ってないとか。 意味不明

752 :
>>751 あっちとこっちで同時にファイル開いてたせいみたい

753 :
別に今必要な事じゃないんだけど
エクスプローラーのファイル名で並べたら

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

って並ぶでしょ。 これどんなロジックなんだろ
スマートな方法が思いつかないし興味ある

754 :
自分は自作ソフトで似たようなことやってるけど
1文字単位での比較で数値同士の比較の場合に、その先の数値じゃなくなる前まで読んで整数にして比較ってしてる
小数点以下は1文字単位での比較として扱うので整数にしない

ただ 第11話 最終話 のような場合のロジックが面倒

755 :
VisualStudioでDelphi使えないかなぁ

756 :
Delphi Community EditionとC++Builder Community Editionは同時にインストールできないんだな。

757 :
>>753
例えばこういうのは?
ファイル名文字列をバイト単位で数値化して加算
f0 = 0x65 + 0x30 = 101 + 48 = 149
f1 = 150
f2 = 151
f01 = 0x65 + 0x30 + 0x31 = 198
数値化した値で降順ソート

つまり
格納されてるファイル名を文字ではなく文字コードの数値合計でソート

758 :
補足
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]);
適当処理

759 :
有り難うございます
おもしろい・・・

760 :
>>757
それだと

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

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

>>754の場合、数字が文字列の一部だった場合に正しくソートされないって問題があるけど
そういう場合のファイル名はあまり意味がないから気にしないようにしている
それと先頭が数字の場合は文字列の一部として扱ってる

761 :
StrCmpLogicalW

762 :
自分の場合、壱弐参なんてのも数値として扱うようにしている(したい)からAPIだと望んだ結果を得られない
「数値もしくは数値に変換可能なもの」同士の比較の場合だけ整数として比較してる

763 :
begin
  var
    i: Integer;
  i := 0;
end;
コードフォーマッタ使うとこうなってしまうのだけどvarのあとで改行しない設定ってどこ?

764 :
ttps://qiita.com/ht_deko/items/41e95154e8da2f901698
コメ欄w

765 :
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.

たしかに恥ずかしい

766 :
結局なんだったのアレ?

767 :
ちょっと教えてほしいんですが、社内イントラネット環境で50台くらいのクライアントPCと
1台のサーバーで双方向に情報をやり取りするVCLフォームアプリを作りたいですが
Delphiだと何使って構築するのが良いのでしょうか?
上からの命令でDelphi使うことなって調べてみたんですが、検索するとDataSnapとか
RESTとかのキーワードが出てきますが自分の経験がDelphi7でストップしていて
現状についていけてません。よろしくおねがいします。

768 :
>>767
情報のやり取りだけでは何とも言えんなー
それだけの要件だとIndyかWinsocksで通信したらええんちゃうってなる

769 :
ふつーにIISで鯖立てて、httpでやりあえばよくね?

770 :
CのDLLは普通にDelphiでも使える。
つまりcurlとかも普通に選択肢になると思う。

771 :
なんでDelphiが指定されたんだろう?
今まで使ってた訳じゃないのに

772 :
ネィティブ系だと実質C++かDelphiかの選択肢しかなくね?

773 :
そだねー

774 :
>>767
Firebird + Apache + SOAP

775 :
>>753
[Delphi]Windows XPの規則(自然順ソート・natural sort・natural ordering)ででファイル名をソートする
https://www.gesource.jp/weblog/?p=5947

776 :
>>767
https://www.embarcadero.com/jp/products/delphi/starter
Community Editionで使えるか試してみ

777 :
>>774
DBはPostgreSQLかMariaDB

778 :
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のファイル名を渡せないのもの当然なのですが、
なにかプログラム側でできる回避策はないでしょうか?

779 :
>>778
使用しているdelphiのバージョンを書いてください。
delphi2009前か後かで回答が変わるかもしれないからです。

UnrarChechArchive関数の仕様に基づいて型キャストしてやれば良さそうな気がします。
例えばnull終端wide stringという仕様なら、渡すファイル名をまずPWideCharにキャストして、さらにPAnsiCharにキャスト。

780 :
>>779
レスありがとうございます
使用してるDelphiは2010です

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


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

この型キャストでは残念ながら上手く行かないようです

781 :
LongFileNameをShortFileNameに変換すると
幸せになれる

782 :
>>781
ナイスアドバイスです
GetShortPathNameで上手く行きました

おかげさまで幸せになれました
ありがとうございました

783 :
TDateTime datetime = VarToDateTime("令和元年5月10日9時10分15秒");
今はエラーが出るんだがそのうち対応されるのか?

784 :
FormatDateTime('ge', Now);

レジストリに令和を加えてから上記を実行すると令1 って出るね

785 :
いずれ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"

786 :
vsIconかつAutoArrangeのListViewで、両端のアイテムを選択した状態で左右キーを押すと、
エクスプローラーなら上下の列に移動しますが、DelphiのTListViewだと無反応です
これをエクスプローラーに準拠の動作をさせるにはどうすればよいのでしょうか?

787 :
自己レスです
通常方向キーなどは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;

788 :
訂正

Result := 1;でした

789 :
開発環境だと問題ないのですが
実行したいPCだと
「プロバイダーが見つかりません。正しくインストールされていない可能性があります。」と警告が出ます。
いくつかのDLLを使ってます。
どこから調べれば良いか???です。
開発環境は XE3 です。

何かヒントでもありませんか?

790 :
>>789
メッセージググればそのまま出てくるけどVBA関連では?
こことか
https://ameblo.jp/realsystems/entry-11946216560.html

791 :
有り難うございます
警告メッセージは最初にググったのですが ピンとくる書込は見つけられませんでした
VBAは使ってないし・・
開発環境 Win7 x64 、実行環境 Win10 x64 です。
当初はそんな警告出てなかったのですが デバッグしてるうちに出るようになりました

困った・・・

792 :
とりあえず、「動いている状態」ってのに戻してみたらどうかね?
それが再現できるなら話は簡単になる

793 :
コメント感謝します
DLL参照の プロパティ値代入を1行追加してから症状が出るようになった気がするのですが(自信なし)
それをコメントアウトしても症状が消えません
開発環境では出ないので厄介です
Delphiが タイプライブラリを自動で追加したり とか しないですよね?

794 :
そうじゃなくて、前の状態のファイルとかシステム一式をバックアップから取り出せないの?
自動でバックアップしながらじゃないとソフト開発は効率わるいよ。

795 :
お付き合いホントに有り難うございます
開発環境と 実行環境が 1時間の移動距離にあるので
今現在出来てるテストが上記の書込でした
開発ファイル群は毎日のバックアップがあります
先ず、手元に現象を再現できる環境を構築しようと思ってます。

1度ビルドすると ソースの変更点をコメントアウトしても 元に戻らない
「何か」が有る可能性はあるのでしょうかね?

796 :
どうせADOとかOLE DBとかそっちの問題だろ?

797 :
>>795
四の五の言ってないでデータベースドライバ入れろ

798 :
コメント有り難うございます

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

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

原因がわかりません。
旧ソースをビルドし直してテストしてみます。

799 :
データベースドライバが32bitか64bitなのかが開発環境と実行環境で違ってたら
そんなようなエラーが出たような気がするが

800 :
>>799
コメント心から感謝します

警告メッセージをググると そんなことも書いてありました
只 当初は問題なく動作していたので 途中でドライバーが変わるようなことも考えにくいですよね
Delphiで書いた実行ファイル以外は一切環境を変えていませんので 謎です

801 :
32bit用ドライバ → system32 に入れる
64bit用ドライバ → wow64 に入れる

こういう勘違いをしてるアホは時々見かける

802 :
そういう命名にしたMSが最高のアホだろ

803 :
アプリのバージョンを表示するコードが上手く行かないんで悩んだがどうやらデバッグ版とリリース版でバージョン情報が共有されない仕様になったんだな
デバッグ版、リリース版でそれぞれバージョン情報をオプション設定しなきゃならないんで面倒くさいわー
デフォの文字コードも英語版になってるしなんかいろいろ使いにくい>10.3

804 :
>>800
開発環境から実行した時に、モジュールのロードで始まる dll や bpl のロード情報を
コピペしてゆっくり眺めてみる

805 :
begin
TStringList.Create.Add('メモリリークした');
end;

このメモリリークの型、内容、ソースコードの場所を検出してくれるツールで
フリーかつDelphi10.3で使えるものって何があるますか?

806 :
>>805
これじゃあかんの?

EurekaLogでDelphiアプリケーションのメモリリークを検出する – 山本隆の開発日誌
https://www.gesource.jp/weblog/?p=4834

807 :
くたばれDelphiに見えた

808 :
僕が高校生の頃の記事を紹介されても・・・

809 :
ところでandroidのメモリリークって
どうやって検出するの?
少なくとも標準のを書いておいても
今まで報告されたことないんだが

810 :
> フリーかつDelphi10.3で使えるもの

バージョンアップについていけなくて大半の外部ツールやVCLは死亡中
有料ですら10.3に対応してないものが多い

811 :
Delphiって有志による外部ツールやVCLで成り立っている文化なのに
メーカーはなんでそのことを理解してないんだろうなあ

812 :
バージョン表記自体もわかりにくいんだよな・・・
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

813 :
>>811
エンバカデロが過去の歴史知らないから仕方ない

814 :
戦争を知らない〜子供たち〜さ〜

815 :
RazorでVB.NET切られるかも知れないのね
まだDelphiの方がクロスプラットフォームで残るかも知れないね

816 :
【出資】松本卓朗 人工知能詐欺【注意】
https://rio2016.2ch.sc/test/read.cgi/rikei/1560859403/

817 :
質問、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回目ぐらいで行ってハングアップします。

なにかスムーズにさせるコツみたいなのありますか?

818 :
>>817
ハングアップ、って具体的にどうなってるの?
何かの勘違いじゃないの?

あとClipboard.CreateとClipboard.Freeは要らないと思う;

819 :
>>817
ハングアップに対する回答ではないけど……
同じなのに入れ替える必要ないと思うので
if Clipboard.AsText <> 'String変数' then
入れた方がいいのでは?

820 :
Lazarusで書き直してみるとかね。
D6ってユニコードAPIとかに対応してないと思うのでそれ関係じゃね?

821 :
Excelが起動してるとクリップボードの扱いでトラブった覚えあるけど
そういう用途じゃないよね

822 :
>79回目ぐらいで行ってハングアップします。

ハングアップが具体的にどういう状況かわからんので考えるだけ無駄だと思う

823 :
てかソース見ると単純にapi呼び出してるだけだから
それってDelphiの問題なのか?

テストプログラムを他のPCで実行してチェックしてみるとかした?

824 :
Delphi6とDelphi7のclipbrd.pas比べてみたらFClipboardとかFClipboardWindowの解放処理が追加されてるな。ひどすw

825 :
各位レスありがとうございました
>>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 を)は反映も止るが動作は続けている。
・作ってる物(実行ファイル)を終了させるには[タスクマネージャ]から[アプリケーション]でなく[プロセス]から該当イメージ名を選んで[プロセスの終了]を行わないと終わらなくなる。

826 :
読み手に情報が伝わらない書き方だなあ
2、3年後に自分で読んでみるといいよ

まあ関心ないからどうでもいいけど

827 :
RADStudioで指定できるまともなフォントないの?
https://i.imgur.com/DF2S9Si.jpg
https://i.imgur.com/FBhZpX7.jpg

828 :
>>827
他の環境(エディタ)だとちゃんと表示されるのに、って画像も提示してくれないと
そのフォントがそういうものなんだろ、としか思わない

829 :
TrueTypeじゃないフォント使ってるのか?としか思わんな

830 :
あるプロジェクトをまるごと新しいフォルダにコピーし
元のプロジェクトを温存したまま
新しいプロジェクトとして始めたいんですけど
IDEの機能として可能でしたっけ?

831 :
>>830
できる

832 :
面倒だからフォルダごと圧縮比して保存しといた

833 :
勿論な事だけど絶対パスとか注意

834 :
>>831
どうやってやるの?

835 :
あるプロジェクトをまるごと新しいフォルダにコピーし
元のプロジェクトを温存したまま
新しいプロジェクトとして始めてみろ

836 :
そうすると、新しいフォルダのソースをいじっているつもりが、元のソースを変更してしまう。
*.dskファイルは消すこと。

837 :
>>830
できない

838 :
丸っとコピーでプロジェクト系のファイルは修正すればいいよ

839 :
「プロジェクトのコピーを作成する」という機能が
発売20年以上経っても実装されてないとは信じられん

840 :
pythonでスクリプトでも書けば一発

841 :
>>839
いらないからだよ。

842 :
>>839
Visual Studio にそういう機能ありますか?

843 :
いや、要るだろ普通に 別バージョンとか作りたいときに
*.dsk消せば済むことだけど標準機能であればそれに越したことはない

VSは使ったことないから知らん

844 :
てか初心者がプロジェクトの別名保存を誤解して
大変なことになりそう

自分もそうだったけどね

845 :
>>830
D6 D7 だけど、(絶対パスがなければ)できる。
普段はプロジェクトとソースを保存するときの「名前を付けて保存」で
デフォルトのセーブ先から別のドライブのフォルダに指定してる。
そうするとプロジェクト毎のソースがフォルダ別に整理できる。
同じ系統のプログラム作成はベース部分まで作っておいて保存、
新規フォルダにコピーでクローンしてスタート。

現プロジェクト中に「名前を付けて保存」で対象移動先にセーブしてみたらどうですか?
この際の注意点として、
プロジェクトの保存だけでは足りない、ソースなどの保存の2回保存作業が必要。
始動は移動先のプロジェクトを指定する。
その後は全保存の1回で使えてる。
試す前にコピーで戻せるようにはしておくことです。

846 :
>>845
そんな手間かけるならエクスプローラでコピーすればいいだろ

847 :
>>846
>>836を防ぐため

848 :
各ファイルの役割をきちんと覚えること。
それができなくてプログラマーとか笑うしかない。
変な自動機能があるとその基本を忘れがちになる。

849 :
デスクトップ保存なんてしないからdskなんてできたことないわ
便利なのかあれ

850 :
>>848
ほんそれ
https://code-examples.net/ja/q/847e26

851 :
今時使用言語は数個、開発環境も数種類さらにクラウドやら覚えることもりだくさん。

delphiしか触ってないなら、delphiの各ファイルの役割ぐらい覚えられるだろうが

852 :
848ってすごく偉そうだけど、偉い人なんですか?

853 :
みんな初心者に厳しいな

854 :
皆、自称初心者のプロが作ったスパゲッティウンコに悩まされてきたからな

855 :
まぁ、日本じゃMVPがあの程度の低能だからな

856 :
>>851
だからさ、覚えるとかそういうことじゃない。
各ファイルの役割をきちんと知らないと
プログラマー生命そのものがあやうくなるんだって。
話題の dsk ファイルのはまったく要らない子だってことを知るのもそのひとつ。
例えばオープンソースに dsk ファイル含めて公開しちゃうと
パス名から身バレしちゃったりするリスクもあるわけよ。
言語によらず、プログラマ名乗るならそういうのに敏感になれということ。

857 :
MySQLやSQLiteをやろうとして挫折した人間です。

BDEというか、ParadoxのかわりにClientDatasetを使おうと思うんだけど、
設計時にDBコンポで表示できて便利だし、使ってる人いませんか?

.xmlファイルに書き出せるフィールドタイプに制限があるけど、それ以外は
TTableと同じように使える感じ

858 :
>>857
CDSやFDMemTableは普通に使われてるかと?

859 :
え?

delphiの各ファイルの役割をきちんと知らないと、プログラマー生命そのものが
危うくなっちゃうんですか???

そ、それはヤバイなぁ!
(か・・・片腹痛てぇ・・・中学生?)

860 :
>>857
ふつうにカジュアルに使てるで

CDSは、ランタイムであるmidas.dllを同梱するか、MidasLibをどこかのソースファイルでusesに加えてあげる必要ありなので、TfdMemTableの方が楽なイメージ。
(古いシステムのお守りでCDS使うことの方が多いけど)

861 :
>>857
インメモリDBとして使用してるから、xmlの書き出しについてはよくわかりません。

862 :
>>856
趣味でマターリやってる日曜プログラマに
そこまでの責務を負わされたら趣味じゃなくなってしまうんですが

863 :
>>860
確かmidas.dllは静的リンクできるはず

864 :
midas.dllは無料版では同梱不可?
といっても買ったD6でやるので、だいじょうぶだけど。

静的リンクって、exe一体化もできるということ?

865 :
>>864
そそ、uses MIDASLIB; でEXEの中に入る

866 :
D6でも出来ました
ちなみに .xml に保存だと、他で流用するのが楽かもしれないなあと

867 :
xmlで保存するとcdsの3倍に膨れるので、普段は.cdsでやるようですね。

868 :
>>862
中学生か?とか、日曜プログラマなんで、とかで
現実逃避してんじゃないよまったく。
だから何をやってもだめなんだよおまえは。
少しはラグビー選手を見習えよ。

869 :
中学生が日曜にいじってるチクビー選手が何だって?

870 :
ラグビーどこから出てきたw

871 :
ラグビーとか何の興味も無いわw
どっかで何か大会でもやってんの?

872 :
>>868
いや日曜プログラマとか趣味の世界だから
現実逃避してもいいんだよ

趣味ってそういうもんでしょ

873 :
趣味ならどんなやり方でも何でもやればいい
仕事の規約みたいなの押し付けてくるの嫌い
ビジネス系と分けた方が良いんじゃないかと時折思うけど
ビジネス板ってそういうじゃないんだよね?

874 :
超初心者用スレだった。
悪かった。今は反省している。

875 :
>>874
おまいが本物の848だとは思えない

876 :
D6を使っている初心者なんですが、ローカルファイルで使うTClientDatasetでは
SQL文を使ってなにかすることってできないのでしょうか?
Filterプロパティとか、項目リンクでやる?
あと、トランザクションも無い?

877 :
>>876
できない
Yes
ない

878 :
以前Delohi7 は 使ってました
今回 Win10にして DelphiXE3の中古を買いました

いきなりつまずいて dclusr.dpk のインストールができません
C:\Program Files (x86) 以下への書き込み権限がないのが理由のようです
Win10へのXE3のセットアップで こつのようなものが有りましたら教えてください

879 :
>>878
インストーラを「管理者として実行」すれば良いと思う

880 :
ありがとうございます

正しいのかは解りませんが
bds.exe のプロパティを 「管理者権限で実行」 にしたら
とりあえず うまくいってます

881 :
管理者権限が必要なフォルダにちゃんとファイルが入ったかな?
できればアンインストールしてから再度管理者権限でインストールし直した方がいいと思うよ

882 :
CE10.3+Update2のライセンスがあと21日で切れると言われたんだけど
一旦アンインストールして10.3.2入れ直せばいいの?

10.4リリース前にライセンス切れ起こされても困る

883 :
https://forest.watch.impress.co.jp/docs/news/1133620.html
みんな、伝説のデルファイさんが
ついに公開されたぞw

884 :
何年前のニュースよ

885 :
誤爆w

886 :
でるほいでるほい。

887 :
https://mevius.2ch.sc/test/read.cgi/tech/1532750539/

の次スレ立ててそこでヤレ

888 :
今Delphiを勉強しています。
使っている本は日経BPのカンタンDelphiプログラミングです

24ページの
SchFile := ChangeFileWxt(Application.Exename, '*.txt';
でどうしてもSchFileのところで赤波線が出てしまいます。

現在生きているDelphiでどう治せばいいのか調べていますが
これだけは出てきません。

ご存じの方教えていただけないでしょうか?

889 :
>>888
ChangeFileWxtがTypo
ChangeFileExtが正解

890 :
>>888
ChangeFileWxtがTypo
ChangeFileExtが正解

891 :
Timeoutエラーで再投稿選んだら2重になった(´・ω・`)

892 :
優しすぎ

893 :
そこらへんの関数は古いので実戦ではTPath使っとけ
http://docwiki.embarcadero.com/Libraries/Rio/ja/System.IOUtils.TPath.ChangeExtension

894 :
>>888
セミコロン前に)も足りない

895 :
>>893
関係ないけどIOutilsとShapeにTPathの名前空間設定してるってほんと

896 :
>>895

こいつらのことか?

http://docwiki.embarcadero.com/Libraries/Rio/ja/System.IOUtils.TPath

http://docwiki.embarcadero.com/Libraries/Rio/ja/FMX.Objects.TPath

897 :
delphicbuilder10_3_3*_isoってどこにあるの?

898 :
>>897
edn

899 :
isoだとなんかメリットあるの?いつもexeのほうでインストールしてるけど…

900 :
>>899
レジストリの仕様がWebとISOで(何故か)違うから一回インストールしたらずっとそっちを使わないと不具合出る

901 :
エンバカのインストーラーって昔から何かに付け問題起こすよなあ

902 :
VSのトラブルの方が多い

903 :
黒金特売
https://www.packtpub.com/catalogsearch/result/?q=Delphi&product_type_filter=Book

904 :
WindowsUpdateの方が多い

905 :
community使ってんだけど
事前に10.3.2アンインストールしたほうがいい?

906 :
>>905
Yes

907 :
>>906
ありがと

908 :
Black Friday discounts from Delphi related third party vendors
https://www.ideasawakened.com/post/black-friday-discounts-from-delphi-related-third-party-vendors

909 :
また新たなバグかよ
まったく安定しないな

910 :
CnPack-Options-Editor Enhancements-Othersにフリーカーソル無効化機能あんのか

911 :
// 渡した引数をとにかくJsonObjectに変換する
class function TJsonUtil.ToJsonObject<T>(AValue: T): TJsonObject;
begin
// AValueをTValueに変換
var v := TValue.From<T>(AValue);
Result := TJsonObject.Create;
// todo: Resultにvをセットしたい
end;
ってどうやって実装すれば良いんでしょうか?
TConverter = class
FValue: TValue;
end;
を噛ませればObjectToJsonObjectできるんですができれば直接やりたいです
使用例
ToJsonObject(123) // int
ToJsonObject(RegexpResult) // record
ToJsonObject(Form1) // object

912 :
Delphi 10.3.3 Community Edition インストールできたのですが
GetItから、Konopkaと Radiant Shapesを インストールしてみました。
この時のコンポーネントパレットの数は65です、
ここで、新規作成で Windows VCL アプリケーション作成すると
コンポーネントパレットの数は49に減少します。
減った分16にはRadiant ShapesやTeeChartLite等々が含まれます。

これは このバージョンには適合しないコンポーネント、ということなのでしょうか?

913 :
訂正
×ここで、新規作成で Windows VCL アプリケーション作成すると
〇ここで、新規作成で Windows VCL アプリケーションを立ち上げると

914 :
解決
消えたのは マルチデバイス アプリ用のコンポーネントでした。

でもRadiant Shapesのコンポーネントアイコンが全部同じなのを何とかしてほしい。

915 :
ついていけません

916 :
「ライセンス有効期限切れの事前通知」ダイアログが出たので
「新しいCommnunity Editionライセンスを要求」をクリックしたのですが
開いたページにそれらしい項目が見当たりません。
どうすればよいのでしょうか。

917 :
すいません、解決しました。

DL時にメールが来ていてそこにシリアルがついていましたので
「ライセンスの操作」→「登録」でこのシリアルを入力して解決しました。

918 :
TeeChart をいろいろ調べてるんですが、例えば .NET の Chart コントロールにある
ChartAreas コレクションみたいにグラフを増やすことはできない?
素直に複数の TeeChart を貼るしかないのかな。

919 :
http://docwiki.embarcadero.com/images/RADStudio/Rio/j/b/b5/ObjInspKH.png
オブジェクトインスペクタのフィルターボックスで絞り込んだあとに
キーボード操作で通常のグリッド部分にフォーカス移す方法ないですか?

920 :
Embarcaスレもうないの?

921 :
>>920
まぁ日本じゃMVPがあのキモ男だからな

922 :
isoが7GBでそっ閉じ

923 :
>>920
無い
立たない

924 :
もうここがDlephi総合スレって事でいいのかな

925 :
営業担当がどんどんやめてく...

ttps://twitter.com/IchihanaMiwa/status/1213026105281540096
(deleted an unsolicited ad)

926 :
IDE Fix Pack作ってた人、どうしちゃったのかなー

927 :
IDE Fix Pack って、ほんとに効果ある?

928 :
>IDE Fix Pack って、ほんとに効果ある?
たぶん無い。少なくとも俺の環境では効果がない。
けど悪くもならないのでまぁお守り扱いで使っている。

929 :
型推論のインライン変数書くと、ビルドは通るのにエディタではエラー表示になる。なんでや。

930 :
>>929
エディタのエラーインサイト(だったかな?)が対応していないから
エラーインサイトを切ればエラー表示はされなくなるけどいつ直るんだろうね?

931 :
>>930
Castaliaいじれる技術者まだ残ってるのかが心配

932 :
>>930
マジか。そんな状態でリリースするとは、なかなかやりおる。
直るまでインライン変数とかはやめておこう。

933 :
>>932
10.3のときにインライン変数が実装されたのに、10.3Release1、Release2、Release3ときて
いっこうに直ってないからな。 10.4で直るかどうかも危ぶまれる

934 :
CarsyBdeって使ってる人いる?めっちゃ怪しそうなんやが

935 :
嬉し恥ずかしド素人です^^
delphiで簡単な画像を描いて、JW_CADに読み込ませたいです。
とりあえず、Form1のイベントでonpaintをformpaintにすればcanvasが使えるのはわかりました。
それでline.toを使って画像はできました。
問題は、それをどうやってJW_CADに読み込ませればいいのでしょう?
あたま、こんぐらがってます。

936 :
>CarsyBdeって使ってる人いる?めっちゃ怪しそうなんやが
インストーラーにマルウェアもどきが入っているので、ファイルを展開して自分でインストールするべき。
あと、日本語関係ドライバが入っていないから日本語ソートはできないよ

937 :
そうなんだありがとう
地道にfiredacに置き換えますわ

938 :
メモリリークを内蔵のFastMMでチェックしたらUnicodeStringやUnknownでリーク発生というよく分からない表示がされたので、
FastMM4のフルデバッグモードでチェックしたところこんなログが出ましたが、ソースのどこでリークしてるのかさっぱり不明で困ってます
どのpasファイルの何行目とか出ない場合のリークはどこを修正したらよいのでしょうか?

A memory block has been leaked. The size is: 36

This block was allocated by thread 0x51BC, and the stack trace (return addresses) at the time was:
4070F2
40C0EE
708321 [Unknown function at TMethodImplementationIntercept]
77276DF3 [Unknown function at GetThreadDesktop]
77276E44 [Unknown function at GetThreadDesktop]
77BFF8FA [ZwCallbackReturn]
77276E57 [Unknown function at GetThreadDesktop]
77BF011A [KiUserCallbackDispatcher]
77280E28 [ShowWindow]
62A6A9 [Unknown function at TMethodImplementationIntercept]
62A81C [Unknown function at TMethodImplementationIntercept]

The block is currently used for an object of class: Unknown

939 :
サブスクリプションって更新してる?
社内用プログラムの修正でたまに使う程度なので
年10万はちょっとなぁ・・・

940 :
TMS のWeb Coreってのを最近見つけた。
Intrawebと同じくpascal→JavaScriptみたいなんだけどかなり完成度は高い
気軽にDelphi+PascalベースでWebアプリを創りたいときにはいいよ、コンポーネントも自作できるみたいだし
サブスクリプションは入ってませんよ
新規機能を必要としない、ちょっとした改修メインならあまり必要はないんじゃないかな?
法人ベースなら10万ははした金だけど、生きたお金とも言えないんで払わないようにしてる

941 :
大政翼賛イベント、終わり。
斜陽の会社と製品買うのはいいけど、買うだけで統合とかシナジーとかできないよなぁ。
元技術者たちが全員いなくなった sencha なんかどうするきだろう

942 :
>>938
自分もちょっとメモリーリークで悩んでるんだけど
delphi versionとかvcl/fmx とか少し情報もらえる?

943 :
>>942
Delphi10.3.3でVCLアプリです

手がかり求めて海外のフォーラム情報を調べたら.MAPまたは.TDSファイルを作成するとより詳しく調べられるらしいです

944 :
というわけでプロジェクトのオプションのコンパイル→リンカでマップやTDSを有効にするとより詳しく調べられました

945 :
D7で作ったプログラムをD10に移行中ですがDBGRIDのカラムタイトルの色が変更できません
プロパティで何を指定しても白のままです
どうしたらいいのでしょうか

946 :
>>945
FixedColorの2つ上にDrawingStyleというのがある

947 :
>>946
ありがとうございます
変更できました

948 :
D6からアップデートしてないユーザーなんだけど、いろいろ古すぎて苦しい。
C#は多少いじれるようになった。
RDBはいじらない、ネットから情報を取ってきたり、お絵かきプログラム中心。
新しいプロジェクトを始めるのに C#と、Tokyo? Berlin?やりだすのとどっちが楽だろうか

949 :
全く新しくていいなら C# だな。
Delphi は時代に追従しきれていない感じ。がんばってはいるけど。

自分も遊びでは Delphi 使ってる。

950 :
>>948
Lazarus

951 :
FreePascalの次のリリースはジェネリクスがDelphi互換になってますますDelphiに近くなるよ
去年中にリリースと言われて現在もまだリリースされてないけど

952 :
>>948
間違いなくC#
余裕があるならdelphiやりなされ

953 :
開発環境が数GBダウンロード必須って
ハナから無理

954 :
C#って見かけは小さいけど
環境は馬鹿みたいにデカすぎる

955 :
>>954
プリインストール済みの.Net Frameworkとメモ帳で開発コストゼロや!

956 :
Delphi の方が重いと思うがなあ。

957 :
Indy10のhttpsで使うdllが最新版に入れ替わっちゃうとおかしくなる不具合ではまり。
2018年ごろのやつに差換えたら動くようになった。
TLS1.2まではいけるからしばらくは持ちこたえられそう

958 :
>>957
Delphiのバージョンがいくつか、何に使ってるかわからんけどもTNetHttp系に差し替えを検討したら?

959 :
>>957
それって既知の問題としてどこかに書かれてる?
公開してるアプリでは問題は起こってないけど
何らかの条件があるんだろうか?

960 :
Indy10ってまだ10.3に対応してなかったような
対応版でたの?

961 :
Rioでdebug releaseのモード切り替えると固まるのは俺だけ?

962 :
>>960
Indy10がRioに対応してるかってこと?
Rioに付属してるIndyは10.6だよ?

963 :
>>962
そうだったのか
付属のはもっと古いバージョンかと思ってた

964 :
どの「コミュニティ」に行っても、同じ人たちしかいないのって、よーするに人材枯渇かね?

965 :
まぁ日本じゃMVPがあのキモさだからな

966 :2020/02/18
>>957
IOHandler.SSLOptions.Method := sslvSSLv23;
で、dllが持ってる強度の高い方から順に試すんじゃなかったっけ
関係なかったらゴメン

Smalltalk総合 Squeak Pharo
【QBASIC互換!?】FreeBasic【GPL】 2
【Win/Mac/Linux/Android/iOS】 Qt 総合スレ 18
なあ、再帰関数好きな人いる? パート3
Excel VBA 質問スレ Part65
パチンコ、パチスロの基盤のプログラム 2
【QBASIC互換!?】FreeBasic【GPL】
【Alloy】形式言語による仕様記述【VDM】
「コンパイラ・スクリプトエンジン」相談室16
洋書推薦図書/洋書必読書のためのスレッド 1
--------------------
【2018】ロレチョン今年初の自爆【障害者】
【新潟静岡】テレ東系・独立局が欲しい15【京都広島】
【破滅が来たりて】歴戦王ネルギガンテ、地獄すぎるwwwwwwwwwwwwww【喇叭を鳴らす】 Part.3
シグマレンズってどうですか? Part15
【戯れ言】どうでもいいようなことを報告するスレ27
【韓国】 漢方医学、そして高麗医学〜漢方は中国医学ではなく「大きな医学」という意味★2[09/12]
【アンジュルム】むろたんこと室田瑞希ちゃんを応援してみよう【ハッピー】 Part.169
【韓国】「民主・平和・人権・法の支配・自由の5原則に基づいて韓日関係の発展を」[06/16]
小沢さん怪しくない?
仙台育英の蹴りより東海大相模田中のスライディングの方が悪質じゃないか?
【復縁方法を考える】その3
【PC】Onnerwatch晒しスレ part4
台湾の一人当たりGDPって低いね
【40代】40歳を過ぎたひきこもり【part32】idなし
史上最低の作戦・ヤフオク仕様改悪問題総合スレ 63
ベテラングループV6のすごいところを教えてくれ
【PS4】FIFA20 リーグスレ Part24
SHISHAMO 19匹目
【SKE48】赤枝里々奈応援スレPart2【グラビア進出】
岩手のバスを語り隊 PART 21
TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼