くだすれDelphi(超初心者用)その57 [無断転載禁止]©2ch.net

1デフォルトの名無しさん2016/10/13(木) 13:21:54.84ID:7i5E+q2+
Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、もしくは
質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。

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

■Delphi XE6 Professional/Enterprise/Ultimate/Architect エディション(トライアル版有)
64bit Windows、Mac OS XからiOS、Androidのアプリも開発可能。ライブラリのソースコード付き。アカデミックライセンス有り。
旧バージョン(XE6/5/4/3/2/XE/2010/2009/2007/Delphi 7)のライセンス取得とダウンロードが可能。(アカデミック不可)
ttp://www.embarcadero.com/jp/products/delphi

■Delphi XE6 Starter エディション
個人/5人以下の企業・組織向け。年間売上1000US$以内の商用開発可。
(※)Delphi、Visual Studio等の有償/無償の開発ツールユーザーが対象。インストール確認は特に行わない。
ttp://www.embarcadero.com/jp/products/delphi/starter

■Embarcadero RAD Studio XE6 (Delphi、C++Builder、HTML5 Builder等を含むビジュアル開発スイート)
ttp://www.embarcadero.com/jp/products/rad-studio

<前スレ>
くだすれDelphi(超初心者用)その56
http://echo.2ch.net/test/read.cgi/tech/1405783063/

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

2デフォルトの名無しさん2016/10/13(木) 13:27:38.39ID:rxboVzG1
クソスレ乙

3デフォルトの名無しさん2016/10/13(木) 13:43:32.62ID:7i5E+q2+
無料版の名称は Delphi 10 Starter Edition に変わっていたわ。

4デフォルトの名無しさん2016/10/15(土) 06:07:00.29ID:b/Ix7y8Q
stringのポインタを引数で使う時って何で@straaa[1]みたいに[1]をつけるの?

5デフォルトの名無しさん2016/10/15(土) 06:41:31.92ID:sr5ZMjEJ
PChar(straaa) じゃだめなん?
Hint: 空文字列の扱い

6デフォルトの名無しさん2016/10/15(土) 08:01:16.21ID:Wck8f7HF
>>4
今はAnsiStringなら>5でOK。
ShortStringだとstraaaa[0]に長さが入ってるので
@straaa だけだと PChar と互換性ないから

7デフォルトの名無しさん2016/10/17(月) 13:18:21.20ID:WrWXzKVd
>>5,6
ありがとう。
調べるワードありがとう

8デフォルトの名無しさん2016/10/17(月) 22:03:38.40ID:u9f1SlFV
有料版買えばandroidで動くプログラムをDelphiで作れるの?
Indyみたいなhttpコンポーネントって使えるのだろうか?

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

10デフォルトの名無しさん2016/10/17(月) 22:41:43.85ID:PmRH05Ee
cとかc++のenumって、Delphiの列挙型ということでいい?
集合とは違うんだよね?

11デフォルトの名無しさん2016/10/17(月) 22:42:37.41ID:DkHWfezI
そりゃ、Delphiの列挙の方でしょ

12デフォルトの名無しさん2016/10/17(月) 23:10:18.46ID:6Picysvx
ありがとう

13デフォルトの名無しさん2016/10/19(水) 10:47:08.64ID:4tgALgAo
ライトみたいに光る質感のコンポってありますか?

14デフォルトの名無しさん2016/10/22(土) 10:30:31.92ID:VBuj+teK
tabsheetの色を変えられるようにしたんだけど、clBtnFaceを指定しても白くなるんですけど何故でしょうか?
他の色は反映されます。
Delphi10.1Berlinを使っています。

15デフォルトの名無しさん2016/10/22(土) 10:35:27.82ID:VBuj+teK
バカみたいな質問をしてしまいました。
clBtnFace以外は反映されるのでプログラム的には間違いはないと思います。
clBtnFaceだけ弾かれる理由ってあるんでしょうか?

16デフォルトの名無しさん2016/10/22(土) 10:58:32.88ID:OrToTiIL
>>15
テーマが関係してるんじゃなかったっけ

17デフォルトの名無しさん2016/10/22(土) 11:01:18.05ID:AS0AO2zF
>>15
勘だけと、システムカラーだからOSのテーマカラーが優先されて使われてるんじゃないのかな?

18デフォルトの名無しさん2016/10/22(土) 11:34:02.15ID:VBuj+teK
ありがとうございます。
と言ってもどうしていいか分からないのでパネル貼ります。w

19デフォルトの名無しさん2016/10/23(日) 10:04:04.33ID:FT6Wwhog
昔Del7で作ったExcelを操作するプログラムを、Berlinで作り直したいんだけど今だとFirerDacを使うんですか?
取り敢えずやりたいことは、xlsxをcsvに変換したいだけなので簡単な方法があったら教えて下さい。

20デフォルトの名無しさん2016/10/23(日) 10:46:21.34ID:CGzeXgZh
ole

21デフォルトの名無しさん2016/10/23(日) 13:40:03.44ID:MP5NXD0l
今まで 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デフォルトの名無しさん2016/10/23(日) 14:13:58.96ID:gusT9oXO
>>21
propertyのGridLinesじゃないのか?
Delphi 10.1動かしてないから適当やけどw

23デフォルトの名無しさん2016/10/23(日) 15:14:16.61ID:MP5NXD0l
>>22
GridLines は False です。
試しに True にしても同じように 2pixel の区切り線が出ます。
他の人の環境では出ないのでしょうか?

24デフォルトの名無しさん2016/10/23(日) 15:28:26.85ID:MP5NXD0l

25デフォルトの名無しさん2016/10/23(日) 16:44:38.74ID:kZkGsd/R
ちょっと教えてください

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

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

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

26デフォルトの名無しさん2016/10/23(日) 16:54:42.26ID:CGzeXgZh
http://www.chrysocome.net/download
dd のソース見れ

27デフォルトの名無しさん2016/10/23(日) 18:18:46.84ID:j9LNItD5
cd-romだとWin32_CDROMDriveが使える

28デフォルトの名無しさん2016/10/23(日) 20:00:40.26ID:kZkGsd/R
ありがとうございました。
DelphiでWin32_CDROMDriveの使用例がありました。

29デフォルトの名無しさん2016/10/24(月) 02:18:05.54ID:Pol9g+IM
>>21 >>24
10.1 Starter で再現したことだけ報告しておきます。

30192016/10/24(月) 11:23:45.88ID:V1HEhUaE
>>20
ありがとうございます。

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

31デフォルトの名無しさん2016/10/24(月) 11:46:44.14ID:/o9Bzib3
>>30
Excelのタイプライブラリ取り込めばおk

もしくはFlexcel買うか

32192016/10/24(月) 12:20:49.82ID:V1HEhUaE
>>31
>Excelのタイプライブラリ取り込めばおk
おぉ、そんなのありましたね。
一気に進めそうです。
ありがとうございます。

33192016/10/25(火) 23:13:37.93ID:PC8b9+iO
oleコンテナだけでExcelのブックを表示できました。
昔とは違うんですね。
ただ、Excel本体も立ち上がってくるのですが、Excelは立ち上げずにブックを弄るにはどうしたらいいでしょうか?

34デフォルトの名無しさん2016/10/25(火) 23:23:00.70ID:9oSj5Tvc
Visisbleプロパティみたいのなかったっけ?

35デフォルトの名無しさん2016/10/25(火) 23:25:41.18ID:9oSj5Tvc
s多すぎた

36192016/10/26(水) 00:18:32.99ID:5VsTRTiY
>>34
ありがとうございます。
試してみます。

37デフォルトの名無しさん2016/10/26(水) 01:12:16.61ID:DnQDMwJL
>>36
当然だけどExcel入ってない環境では動かないからね

38デフォルトの名無しさん2016/10/26(水) 12:57:47.98ID:6SHMskVi
>Excelは立ち上げずに

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

39デフォルトの名無しさん2016/10/26(水) 12:59:55.89ID:yTRH6Fig
立ち上げずにコンテナになれるわけないことを暗に示しただけやない?

40デフォルトの名無しさん2016/10/28(金) 04:03:53.32ID:Jy3/QgVN
新しいDelpiのフォームの位置をドラッグで移動できないな???

どうして?

41デフォルトの名無しさん2016/10/30(日) 03:41:18.12ID:5WyC57Kn
>>40
「デフォルトレイアウト」から「クラシック(ドッキングなし)」に変えたら
Delphi7のような画面レイアウトになるけど、お望みの回答かどうかはわからない。

42デフォルトの名無しさん2016/10/30(日) 08:46:34.99ID:GMyWViLu
丸が幾つか描かれているbitmapがあるとして特定の丸の色を変えたいと思い、
丸の上にshapeの丸を置いて対応しました。
このbitmap上の丸とshapeをきっちり対応させる方法ってないですか?
bitmapの大きさ変えたりスクロールさせた時にshapeも追従させたいのですが。

43デフォルトの名無しさん2016/10/30(日) 12:44:13.74ID:+fHRwEF9
>>42
丸を違う色でを塗りつぶすか
違う色で丸を再描画するとかダメ?

44422016/10/30(日) 13:14:20.67ID:VzVr3D3G
>>43
説明不足ですみません。
ビットマップの画像ファイルを貼り付けた状態と言うことでした。

45デフォルトの名無しさん2016/10/30(日) 15:20:00.36ID:+fHRwEF9
>>44
じゃ、ビットマップ内の円を直接塗りつぶすのがいいよ?

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

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

46422016/10/31(月) 20:22:37.53ID:I4hSi9OL
>>45
ありがとう!!
出来ました、

47デフォルトの名無しさん2016/11/01(火) 14:44:48.26ID:aPCKG/Vh
Delphi10のインストーラーが一瞬立ち上がってすぐ終了してしまうのですが原因がわかる方いませんか?
サポートサイトを見てもレジストリを触る事しか見当たりません。
どなたかよろしくお願いします。

48デフォルトの名無しさん2016/11/01(火) 15:13:15.36ID:p35VuLBk
パソコンが壊れとる

49デフォルトの名無しさん2016/11/01(火) 17:44:57.98ID:wawt2m9n
まずはdependencywalkerとか
あとウィルスチェックソフト止めるとか
ファイアウォール開いてみるとか

50デフォルトの名無しさん2016/11/01(火) 18:11:10.46ID:MBBNR+y9
お客様にエスパーの方はいらっしゃりませんかー(棒

51デフォルトの名無しさん2016/11/01(火) 18:13:18.08ID:by7jiIas
馬鹿には無理

52デフォルトの名無しさん2016/11/03(木) 13:26:56.03ID:2mKhPyDG
符号付きのダブルワードとか言うデータを扱う事になったんだけど、普通に数値が相手から送られて来ると思ったら
16Bit毎に分かれて、しかも、-だと65535とか-が付かない値が送られてくるんだけどプロの人はどうやってるの?

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

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

53デフォルトの名無しさん2016/11/03(木) 13:32:53.30ID:6FeMk1RE
16bitでわかれるって
65535,65535
っていう意味?
だったら
0xffff,0xffff
で1dwordだから
リトルエンディアンなら
(dword)((a[0]<<16) | a[1])
で済むはず

54デフォルトの名無しさん2016/11/03(木) 13:33:58.48ID:6FeMk1RE
ああ逆ω
(dword)((a[1]<<16) | a[0])

55デフォルトの名無しさん2016/11/03(木) 13:41:15.66ID:2mKhPyDG
早速、ありがとうございます!!
式の意味がわからないw
調べ倒します。

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

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

56デフォルトの名無しさん2016/11/03(木) 16:09:43.66ID:nO9s2Og+
SmallInt変数に代入すればいいんじゃない?

var
si: SmallInt;

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

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

57デフォルトの名無しさん2016/11/03(木) 16:20:54.86ID:KRq5Cur1
こういうあほと仕事したくないな

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

59デフォルトの名無しさん2016/11/03(木) 18:32:31.39ID:Vzj8eJlj
>Delphiが内部で勝手にやってくれる

その認識はおかしい

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

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

61デフォルトの名無しさん2016/11/03(木) 19:18:10.90ID:KRq5Cur1
+ b でも良いかも知れないが or b の方が良くね

62デフォルトの名無しさん2016/11/03(木) 19:21:51.74ID:cIZsGa0I
符号付きのDWORDって4バイトの整数とは違うの?

63デフォルトの名無しさん2016/11/03(木) 19:44:23.50ID:ieIIzjtH
DWORDというかWORDが符号なし整数値やろ
BYTEはunsigned char
WORDはunsigned short
DWORDはunsigned long
UINTはunsigned int
いずれも符号なし整数

64デフォルトの名無しさん2016/11/03(木) 20:02:43.66ID:URbOgVYK
DWORDは符号なしだけど
送られてくるデータはDWORDだけど符号を扱うっつってんだから
普通に中身はintだろ
intにキャストすれば万事OK

65デフォルトの名無しさん2016/11/03(木) 21:13:18.27ID:iYejUQc8
曖昧すぎるんだ

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

66デフォルトの名無しさん2016/11/05(土) 12:52:45.83ID:edcXpxnV
>>60
同じ数値型変数でも a の型を変えてビット数や符号付きかどうかが変わると結果も変わる。

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

68デフォルトの名無しさん2016/11/06(日) 04:28:48.06ID:nNdE2u+1
>>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デフォルトの名無しさん2016/11/06(日) 09:03:20.09ID:j4rRKkND
コンピューター工学
ASM
2の補数
・・・・いろいろ学ばないと分からないかも
一番いいのは痛い目食わないと覚えられないかも
趣味なら?

70デフォルトの名無しさん2016/11/06(日) 09:31:18.68ID:rGVVvSQ9
>>68
結果がたまたま合ってるが過程がめちゃくちゃの典型的な悪文

71デフォルトの名無しさん2016/11/07(月) 02:58:59.60ID:k8MgRjfU
じゃあおまえが書けよ

72デフォルトの名無しさん2016/11/07(月) 07:51:58.89ID:MiZ0k8Uw
わしもそう思う
しかし、理解すべきは、型の互換性や代入の互換性についての処理系の決め事であって、
動作原理やらは趣味の領域。

73デフォルトの名無しさん2016/11/07(月) 11:31:55.07ID:VvMqHJ76
変数の宣言で符号有り、無しのどちらの宣言しても
キャストでどうとでもなるから、くよくよするな
var
i : LongInt;

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

74デフォルトの名無しさん2016/11/07(月) 16:11:14.00ID:iTWgrf69
スレチ

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


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

よろしくお願いします

76デフォルトの名無しさん2016/11/09(水) 16:14:12.62ID:i2gLSeC7
済みませんもう一点ありました
グループではなくページの小計を印刷したいのですが、ページフッターだと明細行と離れて印刷されてしまいます
何かいい方法は無いでしょうか

77デフォルトの名無しさん2016/11/18(金) 05:32:26.95ID:mITFokzs
仮想のイーサネットインターフェース(NIC)の作り方って知りませんか?
linuxだと簡単にできるらしいけど、windowsでできるコンポとかコマンドとかないのかな?

78デフォルトの名無しさん2016/11/18(金) 16:27:06.42ID:vbdBJsNN
softetherみたいなの?

79デフォルトの名無しさん2016/11/18(金) 17:38:12.72ID:mITFokzs
そういうのいじってみたい
仮想NICというかループバックていうのはMS純正でできるのが分かった

80デフォルトの名無しさん2016/11/18(金) 19:29:30.81ID:e+81aozX
ソース公開されてるだろ

81デフォルトの名無しさん2016/11/20(日) 12:26:46.05ID:n8KZIrdr
https://www.embarcadero.com/products/rad-studio/features
RAD Studioの体験版ってDelphi XE2と共存できる?
体験版試して環境壊したら面倒だから躊躇してる
買うなら完全上書きで移行でも良いんだけど
xamarinみたいにハマるならやめたい

82デフォルトの名無しさん2016/11/20(日) 12:33:25.79ID:omU4WGo2
canvasやcaptionを持ってないコントロール上に文字描こうと思ったら、LABELを被せるのが一番簡単?

83デフォルトの名無しさん2016/11/20(日) 12:37:35.32ID:sLB4mNYr
そりゃ、ポトペタしてプロパティ変更するだけだから、10秒で終わるし。

84デフォルトの名無しさん2016/11/21(月) 02:06:39.96ID:9bjfwpvu
動的に沢山作ったコントロールの破棄方法を教えて下さい。
作っ時にTLISTに入れておいて、破棄する時にリストから引っ張り出してfreeでいいですか?

85デフォルトの名無しさん2016/11/21(月) 06:45:32.74ID:6Naumri0
TObjectListに入れておけば、リストをクリアするだけでOK

86デフォルトの名無しさん2016/11/21(月) 08:34:01.10ID:3YAs2dXK
>>81
XE2とは共存できる。
10.1Berlinの他のグレードとは共存できない。

87デフォルトの名無しさん2016/11/21(月) 08:43:29.76ID:sE1stBxO
>>85
ありがとうございます!

88デフォルトの名無しさん2016/11/21(月) 23:48:31.13ID:eSdu1Qd7
>>86
ありがとう!入れてみてすんなりスマホアプリ作れたら買おうっと

89デフォルトの名無しさん2016/11/22(火) 11:23:52.32ID:J8mgYJIF
16万かー 高すぎる
昔の4万位ならまた買いたいと思っていたのに、これじゃ無理だわ
C#ならタダだから、こっちで我慢する

90デフォルトの名無しさん2016/11/22(火) 13:02:30.45ID:d73nUv9a
すごく初歩な事だと思うんだけど、フォームを最大にした状態でコントロールを配置するにはどうしたら良いですか?

91デフォルトの名無しさん2016/11/22(火) 13:11:22.55ID:qW+6ZAFd
えっ?

92デフォルトの名無しさん2016/11/22(火) 16:00:58.51ID:d73nUv9a
フォームデザイナは消せない?
フォームデザイナの中で少なからずスクロールさせるのがうざくて。

93デフォルトの名無しさん2016/11/22(火) 16:20:11.79ID:Pvp5yOqg
もっと大きいディスプレイを使う

94デフォルトの名無しさん2016/11/22(火) 17:14:24.12ID:d73nUv9a
えっ?そう言う事じゃないw

95デフォルトの名無しさん2016/11/22(火) 18:10:29.79ID:kKFxgFqP
コンポーネントパレットのコンポーネントをダブルクリックすればいいんじゃね。

96デフォルトの名無しさん2016/11/22(火) 18:15:01.08ID:jjDYJ6Bv
最大化した状態を想定してコントロールを配置したい?
...ということでもなよね

97デフォルトの名無しさん2016/11/22(火) 20:43:49.84ID:d73nUv9a
>>96
そう言う事です。
俺、相当変なこと聞いてる?

98デフォルトの名無しさん2016/11/22(火) 20:54:34.84ID:1EZz+VvR
フォームのサイズに追随するように作るから
わざわざ最大化で考えたりしない

99デフォルトの名無しさん2016/11/22(火) 21:23:29.12ID:jjDYJ6Bv
>>97
自分だけが使うんだったら、最大化を想定して
コントロールの絶対位置を決めることもありだけどね

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

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

100デフォルトの名無しさん2016/11/22(火) 22:15:22.90ID:d73nUv9a
>>98,99
ありがとうございます。
大きなディスプレイ使います。w

101デフォルトの名無しさん2016/11/22(火) 23:16:57.50ID:qW+6ZAFd
ふーん

102デフォルトの名無しさん2016/11/23(水) 13:06:18.51ID:tPiPFLaf
>>100
4Kディスプレイを買うのかな?

103デフォルトの名無しさん2016/11/23(水) 13:16:56.95ID:wddBimUU
4Kディスプレイはプログラミングする上で非常に作業性が高まって
生産能力が跳ね上がるからアリだな
たくさんの資料と開くのはマルチディスプレイでも出来なくないけど
4Kディスプレイは縦が長いのが素晴らしい

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

104デフォルトの名無しさん2016/11/23(水) 14:35:16.76ID:XEgR0M7V
k-ブルが糞なんじゃね

105デフォルトの名無しさん2016/11/24(木) 21:31:04.24ID:EbGC2MML
サブスクリプションって、アップデート2をインスコすれば
勝手にライセンス適用してくれるの?

106デフォルトの名無しさん2016/11/26(土) 08:53:16.82ID:SyGP2pYs
フォームに入力した数値を保存する方法を教えてください。

107デフォルトの名無しさん2016/11/26(土) 10:20:52.50ID:RLaeAJYk
>>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デフォルトの名無しさん2016/11/26(土) 10:35:43.40ID:SyGP2pYs
ありがとうございます。
ちょっとやってみます。

109デフォルトの名無しさん2016/11/26(土) 23:59:22.61ID:+C/v9Yiv
TFile使ったら1行で書けるかも

110デフォルトの名無しさん2016/11/27(日) 21:47:18.22ID:G948Ts5Y
TEdit.Lines自体がTStringsだからSaveToFile持ってるんじゃなかったかな

1111072016/11/27(日) 22:12:21.76ID:Vd8hDN3e
昔のDelphiしかないので最近のはわかりません、あしからず。
昔のでもメモコンポならLines.SaveToFile(ファイル名)できますね。

112デフォルトの名無しさん2016/11/28(月) 01:18:24.55ID:uacaeDTN
TEditにLinesプロパティってなくね?

113デフォルトの名無しさん2016/11/28(月) 13:10:31.06ID:/4N3P5Kl
TEditにはLinesはないね
もともと1行編集ボックスだからね

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

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

114デフォルトの名無しさん2016/11/28(月) 22:30:06.28ID:4Blidc3O
TFileってのは最近できたのか
TFileStreamとは別物なんだな?

115デフォルトの名無しさん2016/11/29(火) 05:29:51.70ID:W5POPsuB
TFile はDelphi2010からだって
TFileStreamとは別物
http://docwiki.embarcadero.com/Libraries/Seattle/en/System.IOUtils.TFile
System.IOUtils自体が2010からの追加らしい

116デフォルトの名無しさん2016/11/29(火) 11:14:31.26ID:Ln/aQe4r
パスワードがかかっているExcelファイルを開ける時にパスワードを入れる方法を教えて下さい。
delphi からパスワード無しファイルを操作する事は出来ています。

117デフォルトの名無しさん2016/11/30(水) 09:51:10.70ID:YyN+WuPe
>>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デフォルトの名無しさん2016/12/01(木) 19:46:00.26ID:D32vS8+n
D6の使用許諾コードって今でも都連だね 知らなかったわ

119デフォルトの名無しさん2016/12/02(金) 19:55:58.69ID:DITubkqg
なぜに今さらD6?
新しいの無料になってなかったっけ

120デフォルトの名無しさん2016/12/02(金) 23:02:38.10ID:p/xrLFXH
RXバグだらけで使いづらいよ

121デフォルトの名無しさん2016/12/02(金) 23:39:57.49ID:LMsZph5A
具体的にどんなバグ?

122デフォルトの名無しさん2016/12/03(土) 09:26:01.40ID:lQCz0lUj
ボタンの色の変更ってTButtonから派生させて改造しないとダメ?

123デフォルトの名無しさん2016/12/04(日) 00:23:15.66ID:VbxK6ZGr
結局どんなバグがあったんだろう

124デフォルトの名無しさん2016/12/04(日) 00:50:42.52ID:Zv4y5DXv

125デフォルトの名無しさん2016/12/04(日) 01:14:11.69ID:VbxK6ZGr
WindowsのバグとRadStudioになんの関係が?

126デフォルトの名無しさん2016/12/04(日) 20:23:52.39ID:DHDwgClI
7以降アップデートしてないんだけど
すると良いことある?

127デフォルトの名無しさん2016/12/05(月) 16:25:17.26ID:dF177W8B
人に依る

128デフォルトの名無しさん2016/12/05(月) 20:51:09.49ID:u75Tu5Z4
ユニコード対応がなんたらうんたら

129デフォルトの名無しさん2016/12/05(月) 22:36:44.05ID:Yjl942ym
Delphi2.0 の高速コンパイルは素晴らしかった

130デフォルトの名無しさん2016/12/05(月) 22:44:55.05ID:FaC7RcWw
>>128
Unicode対応なんだ・・・TNTいらなくなるのか
これだけでも少し便利そうだな・・ありがと考えてみる

131デフォルトの名無しさん2016/12/05(月) 23:11:20.14ID:3xjBziHl
新機能使わなきゃそりゃあってもしょうがないけど、
さすがに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デフォルトの名無しさん2016/12/06(火) 00:07:34.75ID:cx3pcX82
コードエディタの進化は効率アップにもなるしやっぱ良いよ

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

134デフォルトの名無しさん2016/12/06(火) 18:16:56.25ID:B1jaM3TV
何がききたいのかようわからん。

135デフォルトの名無しさん2016/12/06(火) 18:24:00.95ID:B1jaM3TV
「Editへの入力時のキーバッファをキャンセルする方法を教えて下さい。」
後ろにごちゃごちゃよくわからん説明が書いてあるけどこれが聞きたいの?

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

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

136デフォルトの名無しさん2016/12/06(火) 19:02:50.65ID:GBHXmuqR
ありがとうございます。
バーコードから送られてくる文字を全てキャンセルしたいのです。
一文字ずつチェックするのではなく、一気に送られて来た文字を消す方法はありませんか?
宜しくお願いします。

137デフォルトの名無しさん2016/12/06(火) 19:18:11.18ID:BLWAVjyu
>>136
CRって復帰コードのことだろ?
最後にCRがついてくるなら、それが送られてくる最後の文字
なら、それが送られてきたら Key には0入れて Edit.Text := ""; でよかんべ

138デフォルトの名無しさん2016/12/06(火) 20:03:14.51ID:4bwuxuwQ
こんなんじゃだめなの?

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

139デフォルトの名無しさん2016/12/06(火) 20:26:28.30ID:GBHXmuqR
ありがとうございます。
出来ました。
条件に合わなかったら入力したらいけないと変な思い込みをしてました。
助かりました。

140デフォルトの名無しさん2016/12/07(水) 09:03:33.62ID:gTqL7Hsg
キーバッファw

141デフォルトの名無しさん2016/12/07(水) 09:09:12.00ID:fnsUACzH
えっ?

142デフォルトの名無しさん2016/12/07(水) 09:47:59.67ID:7C3MKHBs
ラジオボタンって大きくならない?

143デフォルトの名無しさん2016/12/07(水) 16:09:50.00ID:1k8Mb6um
できません。

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

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デフォルトの名無しさん2016/12/08(木) 15:42:09.36ID:G/Oz9Gxc
Berlin update2 のFireMonkeyで
Listbox.Items.Exchangeメソッドが動作しないXE2では動くのに

145デフォルトの名無しさん2016/12/09(金) 16:34:59.90ID:G3AX0Oay
お前が悪い

146デフォルトの名無しさん2016/12/10(土) 23:22:51.23ID:KMGjeMy/
質問です

147デフォルトの名無しさん2016/12/10(土) 23:33:56.35ID:KMGjeMy/
関連付けされてるファイルを起動するのは ShellExecute でできますが
例えば abc.csv ファイルを .txt で関連付けされてるアプリケーションで
開く簡単な方法はあるでしょうか

148デフォルトの名無しさん2016/12/11(日) 06:10:35.77ID:RsXQTiEs

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

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


149デフォルトの名無しさん2016/12/11(日) 12:45:00.53ID:DKctrae4
>>147
簡単には無いと思う。
レジストリ開いて関連付け調べてabc.csvを引数にそのプロセスを起動させる。

150デフォルトの名無しさん2016/12/11(日) 16:52:57.05ID:uXWnPaTO
拡張子に関連付けされた実行ファイル名の取得
http://mrxray.on.coocan.jp/Delphi/plSamples/480_GetFullExePath.htm

151デフォルトの名無しさん2016/12/11(日) 18:44:37.29ID:IZotsPxu
>>149-150
サンキュー参考になりそう

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

152デフォルトの名無しさん2016/12/12(月) 14:28:19.03ID:JuHHFpqe
私はFindExecutable APIで拡張子".txt"のダミーのファイル名を渡して…というところまで考えていたのですが、そのものずばりなAPIがあるのですね。

153デフォルトの名無しさん2016/12/15(木) 11:41:17.48ID:KMS/yunp
Cのライブラリで
const char *ss[] = {"abc", "def", "xyz", NULL};
を引数として要求するAPIがあるのですがDelphiからは
どうやって定義すればよいでしょう?

154デフォルトの名無しさん2016/12/15(木) 12:42:40.01ID:jYtTego3
ポインタのポインタ

155デフォルトの名無しさん2016/12/15(木) 21:30:43.84ID:esnvxFap
array of PChar

156デフォルトの名無しさん2016/12/16(金) 08:13:11.02ID:khJxMTBU
>>154
>>155
ありがとう。
array of は内部的にはポインタなんですね。上手く動作しました。

157デフォルトの名無しさん2016/12/16(金) 13:53:20.44ID:bP8vH7ub
 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デフォルトの名無しさん2016/12/16(金) 13:58:41.71ID:n8JQ6xp/
Fs.Writeの引数の型宣言みろ

159デフォルトの名無しさん2016/12/16(金) 14:20:04.02ID:bP8vH7ub
 引数は型なしパラメータだから、実際にはパラメータのアドレスが Fs.Write に渡され、
そのアドレスが処理対象になる。つまりそこに必要なサイズのメモリ領域が正しく確保さ
れていれば、その領域がどのような型なのかは関係ないということか。

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

160デフォルトの名無しさん2016/12/16(金) 14:32:37.28ID:HmHblg1G
P := Pointer(AI);

1611532016/12/16(金) 16:08:44.84ID:khJxMTBU
後に誰かの参考になるかもしれないので少し詳しく書いておきます。

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デフォルトの名無しさん2016/12/16(金) 16:14:50.71ID:n8JQ6xp/
さんざん概出

1631532016/12/17(土) 10:45:35.06ID:1MhgkvS0
>>162
そうですか。スレ汚し失礼しました。ペコリ

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

165デフォルトの名無しさん2016/12/18(日) 18:51:06.13ID:U6l2OwGO
>>164
TTreeNode::Data が保持するデータはプログラマが明示的に破棄しないとダメ。

166デフォルトの名無しさん2016/12/18(日) 20:05:19.93ID:SM4ZDbUW
>>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デフォルトの名無しさん2016/12/18(日) 20:17:52.63ID:U6l2OwGO
>>166
そんな感じ。

168デフォルトの名無しさん2016/12/20(火) 23:16:00.88ID:ifPrFvUo
スレッドを使ったプログラムで、スレッド内にある未使用の変数をコメントアウトしたら、
終了する時にアクセスバイオレーションが出るんだけど、こんな事ってあるの?
プライベートに宣言してあるからメインとかが絡んでる事は無いのだけど。

169デフォルトの名無しさん2016/12/20(火) 23:35:38.32ID:qjg7YQIs
コメントアウトされた変数が確保していたメモリ域のおかげで
偶然アクセス違反が発生しない状態になってるとかじゃね?
要はコメントアウトしていなくてもコーディングミスで不正なメモリアクセスしている状態なのかも

170デフォルトの名無しさん2016/12/20(火) 23:43:04.81ID:ifPrFvUo
こんな時間にありがとう!
そんな事があり得るんですか。
難しいなぁ。

171デフォルトの名無しさん2016/12/21(水) 12:39:12.66ID:kCrlwcjM
あり得るというより一番多いパターンだったり

172デフォルトの名無しさん2016/12/21(水) 14:28:11.26ID:yxrWTbmA
「参照」とポインタの話か? 慣れるまで結構厄介だからな。

173デフォルトの名無しさん2016/12/21(水) 17:50:14.49ID:69vl5rId
ちょっと教えてください

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

174デフォルトの名無しさん2016/12/21(水) 18:38:54.87ID:3rWlzZt5
>>173
自分自身が起動するときだけ二重起動許可して起動確認できたら自分を閉じる

175デフォルトの名無しさん2016/12/21(水) 21:13:47.15ID:69vl5rId
>>174
ありがとうございます。
やはりその方向ですか。

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

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

176デフォルトの名無しさん2016/12/21(水) 21:25:28.28ID:GvkBvmPc
>>175
自分(プロセスA)が自分(プロセスB)を起動するときに、コマンドラインで /restart というようなコマンドを渡す。
プロセスBは /restart ってコマンドを受け取ったら、Mutexの所有権を得るまで待機する。(再起動処理)
プロセスAはMutexの所有権を開放する。
/restartを受け取らなかった場合は、Mutexの所有権を得られなかった場合は終了する。(二重起動防止)

177デフォルトの名無しさん2016/12/21(水) 23:03:33.63ID:V2gs4HSo
>>176
そうですね

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

178デフォルトの名無しさん2016/12/22(木) 20:53:24.89ID:GbxNFxpQ
よろしくお願いします。
『レコード型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デフォルトの名無しさん2016/12/22(木) 20:58:35.19ID:T2mCxqBZ
delphi ジェネリックスでググる

180デフォルトの名無しさん2016/12/24(土) 05:08:06.07ID:dJj6Jdn2
クラスの継承を使えないか?
レコードのほうに「違い」を押し込んでクラスにして継承して、クラスは共用とできないか?
そもそもクラスとレコードに分ける必要があるのか?
などなど

181デフォルトの名無しさん2016/12/24(土) 16:48:03.74ID:NvTs06qg
レコード型をクラスのメンバとしてポインタで管理して
そのポインタの実体を操作する仮想メソッドなどを作る。

182デフォルトの名無しさん2016/12/24(土) 23:24:23.58ID:SRluPO+r
firemonkeyを使ってandroid向けのゲームを作り始めましたが
いきなり躓いて困ってます。

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

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

183デフォルトの名無しさん2016/12/25(日) 02:11:22.91ID:dFY2jBPw
lockしてもダメ?

184デフォルトの名無しさん2016/12/25(日) 09:12:26.41ID:LRNNB7e/
DrawGridのセルの色を取得する方法を教えて下さい。
どのセルに何色を塗ったか記憶しているのですか、
もっと簡単に知る方法があると思い質問させてもらいました。
宜しくお願いします。

185デフォルトの名無しさん2016/12/25(日) 09:56:13.82ID:HB1HITh4
>>182
スレッド側でBitmap描画してからSynchronize使ってメインスレッドのBitmapに転送すれ

186デフォルトの名無しさん2016/12/25(日) 09:59:02.44ID:BtIm+2Ns
>>183
Delphi6の時はCanvas.Lockがあったと思いますが
今使ってるDelphi10.1ではLockが見つからなくて・・・

187デフォルトの名無しさん2016/12/25(日) 10:11:02.14ID:BtIm+2Ns
>>185
スレッド側で描画用のBitmapをCreateしてWidth、Heightを設定した段階で
EBitmapSizeTooBigの例外が発生してしまうため、そこまで辿り着けなくて困ってます。

188デフォルトの名無しさん2016/12/25(日) 10:30:12.14ID:rexwkbDx
例外の種類見る限り、スレッドと関係なさそうに見えるが。
ビットマップが大きすぎるってWidthとHeightをいくつに設定しようとしたの?

189デフォルトの名無しさん2016/12/25(日) 10:36:40.00ID:BtIm+2Ns
>>188
サイズは350x450なのでたぶん大きすぎることはないと思います。
メインスレッドで動作させた場合は、例外が発生することなく動作するので
メインスレッド以外ではTBitmapは使えないのかと・・・

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

190デフォルトの名無しさん2016/12/25(日) 12:33:01.08ID:dFY2jBPw
>>186
map/unmap

191デフォルトの名無しさん2016/12/25(日) 17:27:44.55ID:HB1HITh4
>>189
AndroidのThreadで発生するってQPに上がってるからVOTEしとけばそのうち治るんじゃないかな
そのうち。

192デフォルトの名無しさん2016/12/25(日) 17:59:22.97ID:YEQFz9Pa
Delのバグかよ

193デフォルトの名無しさん2016/12/25(日) 18:04:15.67ID:BtIm+2Ns
>>190
教えていただいたものを使って処理を行ってみましたがダメでした。


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


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

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

195デフォルトの名無しさん2017/01/01(日) 00:51:30.42ID:u9hnImCi
>>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デフォルトの名無しさん2017/01/02(月) 05:54:12.25ID:IPXAtosy
クラスファンクションなのかそれは?

1971942017/01/02(月) 12:22:05.25ID:THkmnZCs
>>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デフォルトの名無しさん2017/01/02(月) 20:49:19.17ID:7Rs/ksIu
>>197
その警告が出るって事はFire Monkeyの方なのか。
だったらそこは元の>>194の命令でいいはず。

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

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

200デフォルトの名無しさん2017/01/04(水) 23:19:05.87ID:07zJ2hFc
表示するだけなんでしょ?

自分だったらpostmessage

201デフォルトの名無しさん2017/01/04(水) 23:55:57.26ID:07zJ2hFc
ごめん

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

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

202デフォルトの名無しさん2017/01/05(木) 00:45:48.42ID:sWl9IbhJ
>>199
TThread.Synchronizeで、メインスレッドに切り替えてから、引数で渡されたコールバックメソッド(手続き)でサブフォームを表示させるとか

2031942017/01/05(木) 06:34:16.06ID:KgVZC7r0
>>198
エラーが消えて無事に動きました。
ありがとうございます。

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

204デフォルトの名無しさん2017/01/05(木) 07:19:36.75ID:DrifgVvY
>>203
関数や手続きが定義されていないってエラーが出たときはその関数などのヘルプを見て
そこに書いてあるユニット名が自分のプログラムのuses節に書かれているか調べるといいよ。

2051992017/01/05(木) 09:38:01.68ID:u8XERnLo
>>200,202
ありがとうございます。
教えてもらった方法を調べながらやってみます。

206デフォルトの名無しさん2017/01/08(日) 16:20:11.76ID:lAdNqeO/
TShellCtrlコンポーネントって、デモに含まれるものなんだよね なんでVCLに含めなかった??

207デフォルトの名無しさん2017/01/09(月) 14:24:09.01ID:KdQvIKlc

208デフォルトの名無しさん2017/01/10(火) 11:27:52.10ID:D5z5IiVv
マルチスレッドが終了したかどうか確認するのに、フラグで確認してるんだけど、
なんかもっとスマートな方法ってありませんか?
ググったらWaitForが出て来たのですが、hoge.WaitForとしてもハンドルエラーとか出て使えませんでした。
宜しくお願いします。

209デフォルトの名無しさん2017/01/10(火) 12:33:32.63ID:8tL5nmKS
何があなたのスマートの基準なのか?
フラグは別に悪くないと思うけど。

210デフォルトの名無しさん2017/01/10(火) 17:34:35.55ID:cSdSlPHe
freeが一番確実じゃない?

211デフォルトの名無しさん2017/01/10(火) 17:41:03.73ID:9hDOaePS
>>208
hogeってTThread?
そんだったらTThread.FreeOnTerminateをTrueにしてるから、
スレッドが終了してFreeされてるから、ハンドルエラーと出てくるんだろう。
FreeOnTerminiateをFalseにすればOK(そのかわりTThreadの破棄は自分でやる必要がある)。

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

213デフォルトの名無しさん2017/01/10(火) 18:56:40.06ID:XaHxjxQc
そういやスレッドの終わり方の議論が2、3年前にあったな

214デフォルトの名無しさん2017/01/10(火) 19:15:27.36ID:9hDOaePS
FreeOnTerminateが使えない?とかいう議論じゃなかったっけw

215デフォルトの名無しさん2017/01/10(火) 21:06:50.37ID:8tL5nmKS
FreeOnTerminiate:=true;で OnTerminateイベントでフラグ立てる

に賛成。簡単確実。

216デフォルトの名無しさん2017/01/11(水) 07:54:30.57ID:7+b9GoiT
>>215
そのフラグの排他制御は簡単じゃないよ

217デフォルトの名無しさん2017/01/11(水) 08:27:35.32ID:7+b9GoiT
ああOnTerminate 内はメインスレッドか。
なら簡単だわ。メンゴ。
昔はOnTerminateイベント無かった希ガス

2182082017/01/11(水) 08:51:02.04ID:jn+AzvnI
おはようございます。
皆さん、ありがとうございます。
フラグがやはり良さげなんですね。

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

219デフォルトの名無しさん2017/01/11(水) 12:16:51.30ID:CK/PUOqI
>>218
構文が変だよ

tryが抜けてる

220デフォルトの名無しさん2017/01/11(水) 14:34:41.49ID:Rshx8mvt
>>219
tryはあるが?

221デフォルトの名無しさん2017/01/11(水) 14:43:08.49ID:mOqhfYH5
>とした時に、TermineteをTrueにして終了するとfinallyの処理をしてくれません。
んなわけない。ちゃんとfinallyの処理するはずだからもっとしっかり確認しよう。

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

222デフォルトの名無しさん2017/01/11(水) 17:34:02.96ID:y79IyYLw
>>220
ホントだtryはあった...でも
最近のdelphiは仕様が変わったのか...

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

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

223デフォルトの名無しさん2017/01/11(水) 18:26:26.78ID:tCuecbSb
>>218
>TermineteをTrueにして終了するとfinallyの処理をしてくれません。
どうやって確認したの?
あとTThreadの派生クラスならTerminateはメソッドとTerminatedプロパティが使える。

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

224デフォルトの名無しさん2017/01/11(水) 18:29:24.22ID:+wq8yOB3
昔昔、QuadrupleDを使ってやってたサウンドの再生を最新のDelphiでやりたいんですが、使えるライブラリを探してます。

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

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

225デフォルトの名無しさん2017/01/11(水) 21:03:36.27ID:go3Ym2g4
ブレーク入れてね
ステップで見るときブレーク入れないと
見かけ飛ばすから

226デフォルトの名無しさん2017/01/12(木) 06:31:56.17ID:a5xM53E0
フラグの排他制御は簡単だと思うが。
boolean変数一個なら読み書きは1命令で、割り込まれることはないだろうし
書く前に消されちゃうようなコードを書かなければいいだけ。

227デフォルトの名無しさん2017/01/12(木) 07:43:07.08ID:pteiZ85t
>>226
きちんとした知識がある人にとっては簡単だよね

228デフォルトの名無しさん2017/01/13(金) 08:37:54.09ID:ZuNdbFdt
フラグをグローバルやメインフォームなどに
持たせるのはなんか古臭いという気持ちはある

229デフォルトの名無しさん2017/01/14(土) 13:08:24.40ID:gjFRSJdj
元号変わったらどうすっかな
D7だと対応できんだろ

230デフォルトの名無しさん2017/01/14(土) 13:25:01.19ID:h3eR+GmF
>>229
元号とか使わないか
自力で変換

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

231デフォルトの名無しさん2017/01/17(火) 17:31:21.77ID:O6RaaTFv
Berlin試したみたけど以前ここで言った
gifアニメのバグが解消されてないな

232デフォルトの名無しさん2017/01/18(水) 13:40:10.70ID:YhLwefSp
string、ansichar、pansicharの型キャストってどうやるの?
暗黙の型キャストの警告を消したいんだけど、ググってstrpcopyとかのサンプルを実行しても消えない。

233デフォルトの名無しさん2017/01/19(木) 15:50:04.40ID:5UKguDxp
>>232
string(ansistring変数)とかで消えない?

234デフォルトの名無しさん2017/01/20(金) 09:53:10.19ID:1eiriAuJ
具体的なコードを挙げてみては?

235デフォルトの名無しさん2017/01/27(金) 12:59:02.17ID:/S2JEwyl
Konopkaコンポーネントのアンインストール方法を教えて下さい。
インストール中に異常終了したのでアンインストールしたいのですが、
アンインストールも途中終了してしまって、行き詰ってしまいました。
よろしくお願いします。

236デフォルトの名無しさん2017/01/27(金) 14:49:41.44ID:5OkJm/3R
>>235
マイドキュメント\Embarcadero\Studio\18.0\CatalogRepositoryにあるKonopkaのフォルダと
パブリックのドキュメント\Embarcadero\Studio\18.0\CatalogRepositoryにあるKonopkaの
リポジトリデータを削除すればよかったと思う。(心配ならバックアップとっといてね)

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

2372352017/01/27(金) 22:35:47.30ID:/S2JEwyl
>>236
ありがとうございます。
助かりました。

238デフォルトの名無しさん2017/02/01(水) 09:20:48.68ID:5qzbuLNZ
入力の支援機能で出て来た候補にカーソルを合わせて、
ピリオド打ったら選んだ候補が入力される設定ってどこにありますか?
ベルリンのup2を入れたのですが、最初は良かったのにいつの間にかピリオドで選択されなくなってしまいました。

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

240デフォルトの名無しさん2017/02/06(月) 20:35:02.64ID:iNTq03fP
おんどろーせる

241デフォルトの名無しさん2017/02/06(月) 20:38:57.75ID:U9v8FdBr
TSringGridのOnDrawCellイベントの引数で渡されるTGridDrawStateで、選択されたかどうか判断できる。
選択されてないときだけ、色を変更するよろし。

2422392017/02/06(月) 22:36:47.54ID:xOrt0AYX
>>240.241
ありがとうございます。
まだ、試してませんがどういうコードを書けば良いか案が浮かびました。

243デフォルトの名無しさん2017/02/07(火) 04:11:46.40ID:odr3U2KT
タイマーで200ミリ秒ずつやってるところが壮絶にまぬけっぽい 小学生以下の知能

244デフォルトの名無しさん2017/02/07(火) 07:48:29.48ID:uL0lBsbg
Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、もしくは
質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。

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

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

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

246デフォルトの名無しさん2017/02/07(火) 21:01:48.32ID:qgMFF5pP
その「数値」はどこにしまってあるの? それは自分で世話するしかない。
DrawTextは文字列を描画するだけで、何書いたかなんてどこにも覚えていないよ。

247デフォルトの名無しさん2017/02/07(火) 22:53:48.58ID:GEF3mu7C
StringGridなんだから、Cellsプロパティを通して、文字列として各セルにでも入れときゃいいんでね?(ハナホジ

248デフォルトの名無しさん2017/02/08(水) 07:16:05.46ID:3kd0dWw+
>>245
格納するオブジェクトも実装したらいいんじゃ

249デフォルトの名無しさん2017/02/12(日) 16:38:05.20ID:iYdKWxWq
整数ならcellのobjects(だったっけかな)に入れときゃ良いじゃん

250デフォルトの名無しさん2017/02/26(日) 22:21:06.30ID:S5w82ICF
vs2015アンインスコしたらDel10.1でコンパイルできなくなった。
Del再インスコするしかない?

251デフォルトの名無しさん2017/02/26(日) 22:23:37.25ID:8hwVjJWR
環境変数消されてるとか?

252デフォルトの名無しさん2017/02/26(日) 23:37:41.28ID:S5w82ICF
>>251
ありがとうございます。
調べてみます。

253デフォルトの名無しさん2017/03/14(火) 14:46:39.28ID:SzM2z6wx
スレッド1で変数aの値を読み書きしていてスレッド2では変数aを読み込みしかしない場合って干渉対策って必要?

254デフォルトの名無しさん2017/03/14(火) 15:58:50.80ID:vbV/Jpv3
うん

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

256デフォルトの名無しさん2017/03/14(火) 23:05:45.72ID:137tpMLx
クリティカルセクションでも使えばいい、どっかで
CS := TCricalSection.Create()で作っておいて、

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

257デフォルトの名無しさん2017/03/14(火) 23:07:46.72ID:137tpMLx
まぁ、他にもSyncObjs.pasにTInterlockedとかあるけど、
そこは自分で頑張ってくれ

258デフォルトの名無しさん2017/03/15(水) 07:56:13.67ID:OMQXGO2Q
>>255
Synchronize内の処理はメインスレッドでの処理となるから
同時アクセスがありえなくなるということらしいよ

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

260デフォルトの名無しさん2017/03/16(木) 17:53:22.67ID:Xe646fvV
どこからが使いすぎだと思う?

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

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

262デフォルトの名無しさん2017/03/17(金) 07:45:46.44ID:88SBOT8h
>>259
問題は「使い過ぎ」の定義だと思うけど
僕は1つ1つの処理の長さが長くなってしまった場合をいってるのではないかと思う。
同時処理といっても現実は短い処理が交互に行われるのをスレッドと称しているだけであって
それを否定するようなプログラミングはもはやスレッドではないということではないかと。

263デフォルトの名無しさん2017/03/17(金) 09:01:04.72ID:88SBOT8h
あ、もしかしたら質問に答えてなかったかな?
つまりsyncronizeだろうがcsだろうが
占有状態が長くなるようなロジックになるなら同じことだ

264デフォルトの名無しさん2017/03/17(金) 17:25:37.85ID:c2lVMe4f
>>262
今のcpuは普通にマルチコア、マルチスレッドじゃない?
同時に動いてんじゃない?

265デフォルトの名無しさん2017/03/18(土) 10:42:58.16ID:TEQZ8ThN
>>264
そういう御仁が現れるだろうなとは思ってた。
申し訳ないがマルチコアなどの詳細な仕組みが現話題の結論に
影響を与えるものではないので無視させてもらいます。

266デフォルトの名無しさん2017/03/18(土) 11:15:40.91ID:uhuX0RUO
OSのタスクスケジューリングやスレッド、Delphiのメインスレッドの話がごっちゃ混ぜになっててカオスカオス

267デフォルトの名無しさん2017/03/18(土) 11:18:08.58ID:At1yjhtj
細かい処理が交互にっていつの時代のタスク割り当ての話してるんだ

268デフォルトの名無しさん2017/03/18(土) 17:26:39.99ID:qhwfKSm6
>マルチコアなどの詳細な仕組みが現話題の結論に影響を与えるものではない

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

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

269デフォルトの名無しさん2017/03/18(土) 17:42:46.56ID:uhuX0RUO
中途半端に説明するからややこしくなる
SynchronizeにしろCriticalSectionにしろDelphiのメインスレッドが処理待ちになる状況ができれば反応は悪化する

くらいでイナフ

270デフォルトの名無しさん2017/03/18(土) 23:22:19.03ID:toYG3enn
>>262が変な説明を入れたのが元凶だ

271デフォルトの名無しさん2017/03/19(日) 10:14:13.46ID:pPSf+p35
>>269
メインに限らないっしょ。同期されたサブスレッド間でも片方が長い処理すれば片方は待ちになるわけだし。

272デフォルトの名無しさん2017/03/19(日) 10:31:00.81ID:Zac56zGn
>>271
メインスレッドを待機が発生するスレッドと置き換えて考えたら良いだけの話であってそのあたりは柔軟に考えてくだちい

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

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

274デフォルトの名無しさん2017/03/19(日) 16:36:19.37ID:z/4QTPa3
で、そのメモリ圧迫とやらは今回の質問のどこにかすっているのかね?

275デフォルトの名無しさん2017/03/19(日) 18:47:31.53ID:Zac56zGn
どんどん話題がすり変わっていくな

276デフォルトの名無しさん2017/03/20(月) 01:59:24.49ID:Qzpue34I
>>262
が悔し紛れに難癖つけてるだけっしょ

277デフォルトの名無しさん2017/03/20(月) 07:33:47.40ID:/HDavIr2
予想どおりの反応ですw

278デフォルトの名無しさん2017/03/23(木) 17:32:52.95ID:0AhE1jWZ
10.2tokyo入れて見たんだけど、10.1でgetitから入れたコンパーネントが入れられなくてプロジェクト開けられない。
エンバカ何なんだ?

279デフォルトの名無しさん2017/03/24(金) 07:00:18.71ID:w0n9pMnW
>>278
よくある
Getitじゃなくて配布元からダウンロードして入れたらOk

280デフォルトの名無しさん2017/03/25(土) 07:13:02.05ID:Hlan26fq
StarterのBerlinをTokyoにするんだけど
いったんBerlinをアンインストールするんだっけ?

281デフォルトの名無しさん2017/03/28(火) 04:59:23.66ID:by30piXi
StarterのBerlinをインストールしたままTokyoをインストール出来ましたし、同時に起動出来ました。

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

282デフォルトの名無しさん2017/03/28(火) 10:13:09.88ID:o61kLVYu
>>281
ありがとう

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

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

2842832017/03/31(金) 10:42:53.79ID:SnNLRdP6
文字コードを確認してみたのですが
var
c: Char;
begin
c := 'あ';
ShowMessage(Format('%x',[(Ord(c))]);

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

285デフォルトの名無しさん2017/03/31(金) 11:27:56.20ID:tBgePiep
こう言うとアレだけど
普通に使うときはユニコードとか
意識する必要ないんじゃない?

2862832017/03/31(金) 11:48:21.75ID:SnNLRdP6
>>285
例えば、

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

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

287デフォルトの名無しさん2017/03/31(金) 12:08:45.28ID:YNGnrt5P
便乗失礼します。
2009以降
・ShowMessageの内部では、UnicodeStringとして表示する文字列を処理します。
ってことだったと思うのでUTF-16変換されてるのかと

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

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

2882832017/03/31(金) 12:14:44.98ID:SnNLRdP6
>>287
リンク先を読んでみると、文字列の代入時に変換してるみたいですね。
ありがとうございます。

289デフォルトの名無しさん2017/03/31(金) 12:27:36.02ID:tBgePiep
>>286
大丈夫
ソースファイルがutf8とか意識しないほうがいいよ

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

290デフォルトの名無しさん2017/03/31(金) 12:33:03.27ID:tBgePiep
>>288
内部でどう処理してるのか知らないけど
このケースだと代入時(実行時)に変換してるのかな?

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

291デフォルトの名無しさん2017/04/01(土) 09:16:09.24ID:FVobg3nm
>>285
逆に、常に意識してないと嵌まることがあるよ。

292デフォルトの名無しさん2017/04/01(土) 11:20:45.32ID:1uakO4Jp
コンパイル時に変換

293デフォルトの名無しさん2017/04/01(土) 14:47:04.87ID:MIBbFxu2
>>288
リンク先を読んでみると、「すでにUnicodeとして扱われている」ってのが分かると思うんだが。

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

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

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

294デフォルトの名無しさん2017/04/01(土) 16:29:34.25ID:xnSlrZsr
てか簡単なサンプル作って試せば済むことじゃん

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

295デフォルトの名無しさん2017/04/01(土) 21:40:45.92ID:JcotD4lU
真に気を付けないといけないのは1文字に複数文字が入ってるサロゲートペア

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

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

296デフォルトの名無しさん2017/04/02(日) 09:37:47.98ID:OL+frmBm
正直UTF8で統一したほうがよかったと思う

297デフォルトの名無しさん2017/04/02(日) 09:38:21.10ID:WSPdqmkD
>>295
最後の行は「ば」?
これってサロゲートペアなのか?
それとも別の文字が化けた?

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

298デフォルトの名無しさん2017/04/02(日) 09:40:01.86ID:OL+frmBm
UTF16も実は可変長という落ちなんだからややこしくなっただけだと思う

299デフォルトの名無しさん2017/04/02(日) 10:43:02.23ID:3chV0onz
>>297
2chだと化ける可能性あるから両方サロゲートペアじゃないよ

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

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

300デフォルトの名無しさん2017/04/02(日) 11:06:40.43ID:5Z3z/Zq2
は̋

301デフォルトの名無しさん2017/04/02(日) 12:55:55.04ID:n+5RCyoZ
>>295
それ、ちょっと間違ってるな。
そのケースはサロゲートペアじゃないだろ。
サロゲートペアは単にUTF-16の2バイトのコードユニットで2つのコードユニットで
1文字を表すケースの事でしょ。

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

302デフォルトの名無しさん2017/04/02(日) 13:01:11.75ID:n+5RCyoZ
>299
>おかげでEditのTextとか必ずUTF8Stringに代入する癖がついてしまった
だから、それも全然関係ないから。UTF-8だから解決するというのは勘違いだから。
合成文字の問題は「正規化」使って解決する問題。

303デフォルトの名無しさん2017/04/02(日) 13:05:11.00ID:3chV0onz
>>302
はしょってるから書いてないけど正規化もしてるよ

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

304デフォルトの名無しさん2017/04/02(日) 13:10:15.31ID:n+5RCyoZ
言葉の使い方が完璧に間違ってるのに重箱のすみつつかないでっていわれてもなぁ・・

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

305デフォルトの名無しさん2017/04/02(日) 13:13:23.66ID:3chV0onz
つまりこれこれこういう問題があってこうしましたって1から10まではしょらず正しい言葉をつかって説明しないとここには書き込むなって事ね。了解。




めんどくせ

306デフォルトの名無しさん2017/04/02(日) 13:17:10.52ID:n+5RCyoZ
完全に言葉の定義を間違ってるんだから、教えてあげただけじゃねぇかよ。

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

307デフォルトの名無しさん2017/04/02(日) 13:20:18.66ID:8zECKtY8
君たち ではない。

308デフォルトの名無しさん2017/04/02(日) 13:23:02.99ID:JDqJ1ftS
言葉の定義とやらが間違ってたとしても、
バグの原因になる事のコメントは個人的に大歓迎(こなみかん

309デフォルトの名無しさん2017/04/02(日) 14:03:03.40ID:iqf+IrkA
俺には難しい話をしてるけど、文字扱うには正規化とやらをやって、utf8とか16とかに統一してから加工したり検索したりしないとハマるってこと?

310デフォルトの名無しさん2017/04/02(日) 17:46:06.81ID:WSPdqmkD
サロゲートペアに関連してだけど
MECUtilsとか使ってやったりするの?

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

311デフォルトの名無しさん2017/04/02(日) 18:37:26.81ID:9KwT0wNW
Unicode化の弊害というかなんというかだけど、
マルチデバイスも相まって想定外の変な文字が入る確率っていうのは
確かに飛躍的に増えてる・・・気がする。

312デフォルトの名無しさん2017/04/02(日) 20:31:47.10ID:n+5RCyoZ
>>310
そんなの使わなくても普通は標準であるだろ。
Character.pasに必要なのそろってる。
TCharacter.IsSurrogate()

313デフォルトの名無しさん2017/04/02(日) 20:47:01.04ID:3chV0onz
>>312
TCharctorなんてものはない

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

314デフォルトの名無しさん2017/04/02(日) 20:48:31.98ID:3chV0onz
おっと綴り間違ってたな
System.Characterだな。また重箱の隅つつかれるところだった

315デフォルトの名無しさん2017/04/02(日) 21:07:50.79ID:n+5RCyoZ
そうなんだ。それはすまん。XE3以降買ってなくて
最新のもってなくて。

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

317デフォルトの名無しさん2017/04/03(月) 14:57:16.50ID:r7DyphN2
時代は可変

318デフォルトの名無しさん2017/04/03(月) 17:20:51.81ID:vwU/OCff
>>316
全画面表示させない

319デフォルトの名無しさん2017/04/03(月) 18:42:50.88ID:gM/woy0K
>>316
意味分からないが。
ウインドウサイズ自体固定させないし、
Align プロパティを使って固定部分とそうでない部分とを分けるし
プラスTSplitterでユーザの好みにさせたりもするし。
動画や画像でもないならアスペクト比なんて気にしないんじゃないのか。

320デフォルトの名無しさん2017/04/03(月) 21:28:02.74ID:r3n0H3vn
やっぱ、全画面表示させないが簡単でいいな

321デフォルトの名無しさん2017/04/04(火) 06:32:18.18ID:vjUtddW+
>>316
ファイアーモンキーならTScaleLayout使って無理やり対応した事もあります

322デフォルトの名無しさん2017/04/12(水) 07:11:34.88ID:lM5IX7kk
メモリーリークの場所ってdelphiに標準で入ってるリークを監視するやつのフルバージョン入れないと分からない?

323デフォルトの名無しさん2017/04/16(日) 12:03:24.01ID:he8BFR5v
Delphi10.1でのフル機能のfastmm4の使い方を教えてください。
メモリーリークのメッセージは出るのですが、テキストファイルが作成されないです。
よろしくお願いします。

324デフォルトの名無しさん2017/04/17(月) 16:51:42.85ID:y+L9zWaz
DatetimetostringとFormatDateTimeの違いって
procedureであるか、Functionであるか、だけですか?
(引数は異りますが)

325デフォルトの名無しさん2017/04/17(月) 17:16:23.94ID:tXRogAtk
>>324
引数が違うって分かれば
自ずと...

326デフォルトの名無しさん2017/04/17(月) 20:24:58.64ID:y+L9zWaz
>>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デフォルトの名無しさん2017/04/18(火) 09:41:09.25ID:phVpBhu/
何かとの互換性でどうしてもDT2strが欲しかったんじゃないかね

328デフォルトの名無しさん2017/04/18(火) 15:11:31.58ID:nhn9im/Y
>>323
http://mrxray.on.coocan.jp/Delphi/Others/UsageFastMM.htm

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

329デフォルトの名無しさん2017/04/18(火) 18:41:12.40ID:EH33vxsU
>>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を呼び出しているだけ。

330324,3262017/04/19(水) 09:04:32.22ID:/KRyUyJO
>>329
なるほど、参考になりました。ありがとうございます。

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

332デフォルトの名無しさん2017/04/23(日) 00:33:57.32ID:h9OMGlcp
delphi10.1までは問題なかったのにdelphi10.2にしてから
stylebookで指定したstyleが一部反映されなくなりました。

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

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

333デフォルトの名無しさん2017/04/23(日) 01:24:14.01ID:6D2X13Ox
>>332
Android用のスタイルを一旦削除してマージ

3343322017/04/23(日) 07:38:09.47ID:h9OMGlcp
>>333
アドバイスありがとうございます。

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

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

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

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

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

3353322017/04/23(日) 07:50:06.92ID:h9OMGlcp
>>333
すいませんTabControlのみしかない最小限のプロジェクトで試したら
正常にスタイルが反映されているのが確認できました。

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

336デフォルトの名無しさん2017/04/27(木) 08:22:37.61ID:rpeb1FWf
メッセージダイアログやショーメッセージで改行を
使うとメモリリークが出るけどなんで?

337デフォルトの名無しさん2017/04/27(木) 12:14:19.99ID:nqOtHEIU
バグってんじゃね

3383362017/04/27(木) 12:36:20.33ID:axAm+D16
delphiがバグってる?
新規作成でシンプルな状態でやってもメモリーリークのメッセージが出るんだけど、どうすりゃ良いんだろう。
俺だけ?

3393362017/04/28(金) 22:34:22.04ID:WI3n6xVG
メモリーリークを調べているのですが
MessageDlg(IntToStr(123),mtConfirmation, [mbOK, mbCancel], 0);
IntToStr(123)が原因でメモリーリークが起きるみたいです。
Delphiのバグ?コードがダメ?

340デフォルトの名無しさん2017/04/30(日) 09:29:58.72ID:kcq5sr/L
ソースみれば?

341デフォルトの名無しさん2017/04/30(日) 11:59:29.48ID:0p25w19v
336ではないけどソースコード見てみた
ポイントになりそうなところがアセンブリで書かれてた

342デフォルトの名無しさん2017/04/30(日) 12:08:19.89ID:VPr4LyhY
それがどうかしたか

343デフォルトの名無しさん2017/04/30(日) 23:16:41.78ID:rKLNeW5H
1. MessageDlg と同じ引数を持つ、そのユニット内にローカルな関数を書いて、MessageDlg のせいかどうか調べる。
2. IntToStr と同じ引数を持ち、適当な文字列を返す関数を同様に書いてみる。
3. コンソールアプリケーションのプロジェクトを作成して、1.を行って調べてみる。
4. 同様に IntToStr も行ってみる。

344デフォルトの名無しさん2017/04/30(日) 23:36:32.18ID:5yRtGq51
どのバージョンで発生したのかしら?
こちらのTurbo Delphiは
ReportMemoryLeaksOnShutdown := True;
で再現せず。

345デフォルトの名無しさん2017/05/02(火) 01:47:15.38ID:As8TBna0
昔の経験
マルチスレッド内で間違った呼びし、クリティカルセクションの間違った実装

346デフォルトの名無しさん2017/05/02(火) 08:06:56.48ID:Hq/uPbjy
「IntToStr(123)が原因でメモリーリークが起きる」
と判断した理由を開示せよ

347デフォルトの名無しさん2017/05/24(水) 11:04:03.05ID:ipeCfZP9
32biでも64bitでもinteger型は32bitですか?
Pointer型(とPtrInt型)だけが変化すると考えてよいのでしょうか?

348デフォルトの名無しさん2017/05/24(水) 11:54:37.27ID:4nncZNTT
-1 を代入する
pointer を求める
pointer + 0 と pointer + 3 と pointer + 7 あたりを見る

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

349デフォルトの名無しさん2017/05/25(木) 14:51:52.47ID:qme3C1o0
Integer は 32 だけど LongInt は 32 とは限らない

350デフォルトの名無しさん2017/05/26(金) 08:47:10.54ID:trsKQBBQ
>>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デフォルトの名無しさん2017/05/26(金) 10:06:17.71ID:gif2nYmV
そのページは、たぶん、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デフォルトの名無しさん2017/05/26(金) 10:13:55.43ID:trsKQBBQ
>>351
iOSだけ特殊な感じ?変なの。
LongIntとLongWordは使わないほうがよさげですね。何でこんな変な仕様にしたんだろ。

353デフォルトの名無しさん2017/05/26(金) 10:22:32.82ID:trsKQBBQ
あ、iOSにはLinux系も含まれるんですか?
その辺のあやふやさも嫌な感じですね。

新着レスの表示
レスを投稿する