TurboPASCAL
↓
ObjectPASCAL
↓
Delphi ←いまここ
最新OSでもまともに動くMacやiPhoneアプリを作れるの?
あくまで自分の経験した範囲内だがDelphiで作ったFMXアプリは
Windows版アプリは多少バグを見逃してても動くことがあるけど
MacOS版は少しでもバグが残ってるとアプリが強制終了される
まあバグが残ってること自体ダメなんだが
規模が大きいアプリだとゼロにするのは中々難しい
ちなみに自分はWindows版とMacOS版を必ず作るようにし
可能であればモバイル版アプリも作ってる
(そういえばVCL版アプリはもう何年も作ってないな)
昔からだけどコンポーネントの登録などの時DElphiのパッケージファイル(拡張子 .dpk)が
ちょくちょく壊れるのは何なんだろうな。
{$IFNDEF CPUX64}〜{$ENDIF}とかで条件指定していたり、改行コードがLFのみのを読込ませたりすると、
一部文字が脱落(end. → d.)とか余計な文字が付加されたりする。
dpkファイルを作り直して、.dprjファイルを削除して復旧させてるが発生条件が
つかめないんだよな。 読込んだ時点で既に壊れてるから。
>>9
俺もそれ遭遇したわ
先頭の2文字くらい消えるのな >>9-10
>先頭の2文字くらい消えるの
ファイルのテキストフォーマットが
"ANSI" か "UTF-8(BOM 付き)" の違いじゃないのかな?
"UTF-8" 系Unicodeはバイナリエディタで見ると
先頭2バイトが非テキストのバイナリーコード
それを基本にして内部で"ANSI"扱いなら"ANSI"タイプを突っ込むと
頭2バイトが消えてしまうことに・・・
たしかWindows8かそこら辺からUnicodeが基本になったんじゃなかったっけ?
.dpk とかテキストは一度メモ帳に読み込んでみて"名前を付けて保存"の選択で
(Win メモ帳では)元ファイルの文字コードが選択されているから判別も楽ですよ。 >>10
requires が o quiresとか、containsが ontains、 end.が d.
とかいうパターンが多い感じ
>>11
ファイルの先頭が化けるとかならわかるんだけど大抵が、requires句、contains句
最後の end.で、それ以外は containsセクションに書いた {$IFDEF 〜}が
消えたりするんですよね。 それ以外の部分は化けた経験なし。
タイミングとしては読込んだ直後、ビルドPlatformを切り替えたり Release、Debugを
切り替えた後。
コンポーネントのビルド以外では発生したことないんですよね。 >>11
ごめん先頭じゃなくて行頭な >>12の通り
犠牲になるのはend required contains
RADStudioはプラットフォームとビルド構成変えるとプロジェクト変更するからその時に一緒に書き換えてるかもね IDEの品質はとにかくクソだ
11なんて、ヘルプが10.4のままだからな
>>14
Indyのヘルプが10.1.5のもので全く使い物にならないのにバンドルし続けているのも
改善されないよな。現在入っている10.6.2とは関数の呼び出しパラメーターとか変わってて
役に立たない。 >>15
Indyのヘルプ、タイムスタンプだけは更新されてるな 前スレ998です
> Windows 7 for x64-Based Systems 用更新プログラム (KB3140245)
Easy Fixとレジストリ追加だけではダメでこれ適用で無事GetItサーバーに接続できました
アドバイスありがとうございました
>>12
まあ改行を飛ばすときにCRLFのつもりで2バイト(Unicodeなら4バイト)飛ばしちゃってるんだろうね >>18
デフォルトでBOM付きUTF-8の .dprjファイルと ansiな.dpkファイルの組み合わせに問題があるのかな
エディタのデフォルトを UTF-8に設定しておくのが無難なんだろうか はっきり喋れる次期 MVP 山下氏のほうが、何もしない旧 MVP の「彼」より良いな。
英断を支持します。
>>14
10.4はISOに日本語ヘルプが入ってなかったりするしな >>26
10.4はGetItで更新できたけど、今回はQPから勝手にダウンロードしてレジストリ書き換えろだからな
しかもレジストリ書換の説明が間違ってる Delphi 10.3でビルドしたプログラムをWindows11で動かすと
Enabled := falseにしたBitBtnに背景が透けて見えるな
TEdgeBrowserでUserAgentの変更は可能でしょうか?
Delphi 10.4.2 Community Edition で
// 63 になる
WriteLn(CountTrailingZeros64(UInt64($8000000000000000)));
// 64 になる
var AValue: UInt64 := UInt64($8000000000000000);
WriteLn(CountTrailingZeros64(AValue));
というように違う結果が返されます。
AValueがUInt32より大きいと64になるようです。
使い方が間違っているのでしょうか?
>>31
Delphi 10.4.2 Community Editionで試してみたけど
どちらも 63になったよ。
GetItから落とせる Delphi 10.4.2 Community Edition Patch 1.0 というやつは当ててる? 数秒間待つ関数が欲しいんだけど何かない?
メインスレッドのUI動作とかを邪魔しないやつ
(Sleepはナシの方向で)
できればWindowsに依存しないで
Windowsに依存しないという事は関数内でメッセージボックスでも表示させて
時計みて待ち時間過ぎたらボタン押すぐらいじゃないかと思ったけど
メッセージボックスもWindows依存だからこれもだめか
というかDelphiがWindows依存だからおかしい話だな
>>34
Timerも考えたんだけど、一つの関数内で数秒待ちたいと思ったので
そんな用途はないのかなぁ
>>35
言葉が適切でなかった、ごめん
Windows APIを使わないって意味
FMXアプリで使いたいので
Windows APIを使う例は見つけた
// sleep for 5 seconds without freezing
var Start, Elapsed: DWORD;
Start := GetTickCount;
Elapsed := 0;
repeat
if MsgWaitForMultipleObjects(0, Pointer(nil)^, FALSE, 5000-Elapsed, QS_ALLINPUT)
<> WAIT_OBJECT_0 then Break;
Application.ProcessMessages;
Elapsed := GetTickCount - Start;
until Elapsed >= 5000; Delphi11でGEtItからSysToolsをインストールしようとすると
以下のようなところでコンパイルエラーになるな
変数c はCharで、エラーはラベルの二重定義エラー
case c of
#130 : bcDigits[bcDigitPos + 1] := 98; {rest are manufactured characters}
#131 : bcDigits[bcDigitPos + 1] := 97;
#132 : bcDigits[bcDigitPos + 1] := 96;
#133 : bcDigits[bcDigitPos + 1] := 98;
(以下略)
#nnnがAnsiコードページに存在しないキャラクタだと'?'に変換されてしまうせいかな
Delphi はもちろん、Flutter や Unity, Flash, Android Studio, Xcode, Xamarin,
C++ + SDK なんかでアプリを作ってきたが、色々やってみたことで、なんかもう どんな環境
でもアプリ作れそうな気になる。好き嫌いはあれどね。
>>32
ありがとうございます。
Patch は適用してなかったので適用してみましたが、結果に変化はありませんでした。
Delphi 10.4.2 Community Edition の再インストールを行ってもダメでした。
別の PC でも同様に試しましたがダメでした。なぜだろう...
試したソースはこれです。(debug, x64)
program Project340;
{$APPTYPE CONSOLE}
uses System.SysUtils;
begin
WriteLn(CountTrailingZeros64(UInt64($8000000000000000)));
var AValue: UInt64 := UInt64($800000000);
WriteLn(CountTrailingZeros64(AValue));
WriteLn(sLineBreak + '終了するには Enter キーを押してください . . . ');
ReadLn;
end.
実行環境は Windows 10 Pro x64 (21H1), Intel(R) Core(TM) i7 CPU >>39
64bitビルドでしたか。
64bitでビルドすると確かにそうなるな。
32bitでビルドするとどちらも63が返ってきますね
ちなみにDelphi11でも同様に64bitビルドだと63と64になる。
あとデータを$0000000000000001にしてCountLeadingZeros64した場合は
どちらも63で正しい値が返ってくる。
なんかバグっぽいですね。 >>31
デバッグ実行してCPUウィンドウで逆アセンブルを見ると、
CountTrailingZeros64の実体は、
bsf eax, [rbp+$38] のニモニック1行に集約される
(周りのソースによってはオペランドは変わるかも)
ここ、64bit値を第2オペランドに取るには
bsf rax, [rbp+$38]じゃないといけないんじゃないかな >>41
CountTrailingZeros64は組み込み関数でインラインで挿入されるみたいだから
ソース置き換えもできないようだからエンバカが直さないとどうにもならなそうだね。
この関数Delphi11でもHelpにも記載されていないから使ってる人いないんだろうな。 ちょっと教えてください
Macのラベル(?)みたいに枠内に入らないとき
右端を[aaa...]にするのではなく、真ん中を[aaa...bbb]とするような
ラベルって実現可能でしょうか?
>>43
TLAbelに EllipsisPosition ってプロパティがあってそれでできたと思うよ >>42
まあソースのどっかにこう追加して元の関数を置き換えちゃえばいいんじゃないかな。
元の関数の戻り値の仕様が分からなかったけどバグのコードがeaxに値を返そうとするなら4byte整数だよね。
符号が問題になることはないはずだし。
{$IFDEF CPUX64}
function CountTrailingZeros64(AValue: UInt64): Integer;
asm
bsf rax, rcx
jnz @notZero
mov rax, $0000000000000040
@notZero:
end;
{$ENDIF CPUX64} >>45
なるほど
これなら大丈夫みたいですね
私は質問主ではないですが勉強になりました >>39
FMXで使えるかワカランけど
こんなんじゃダメなのか
uses System.DateUtils;
procedure Wait10sec;
var EndTime: TDateTime;
begin
EndTime := IncSecond(Now, 10);
while (EndTime > Now) do begin
Application.ProcessMessages;
end;
end; community editionって2台のマシンにインストールできます?
同じユーザー名で
なぜだかSydney IDEがWindows 11上で動作が不安定なので
別マシンのWindows10上で検証したいので
何かWindows10上のRioで作成したプロジェクト(複数)を
WIndows11上のSydneyで開いてFMX Listviewを削除しようとすると
IDEで「項目が見つかりません」エラーが発生
それ以降、IDEが不安定に。最悪IDEがクラッシュする
Pascalが情報処理技術者試験の受験言語だったら状況は違ってたのにな
前にSydney IDEでListviewが削除できなくなったと報告した者だけど
Windows 10とWindows 11にそれぞれRioとSydneyをインストールし検証してみた
結局、RioでDynamicAppearance.適用とスタイル変更したFMXのListviewが
SydenyのIDEデザイン画面でコントロールの削除不可能でIDEがクラッシュした
その他の条件があるのかもしれないが
少なくともWindowsのバージョンによる影響ではなかった
最終的には、fmxファイルからListviewを削除し、スタイルを全削除して作成しなおした 太った方のmvp、Delphi愛してるならウンコアプリとか自慢しないでほしい
関係ないけど、暇なんでDelphiで5chブラウザ作ってた
TNetHTTPClientは書き込みでproxyエラーが出るな
(ヘルプの意味が分からない)
TIdHTTPはWindowsとMacで書き込めるけど
Android64でOpenSSLライブラリがうまく動作しない
今出回ってるAndroid用のライブラリは32ビット専用なのか?
>>58
API使ってないから公開できない(自分用)
履歴をOneDriveに保存するから全端末で同期できる
>>56
GetItにあるはず
Communityには無いよ >>56
10.3 Communityではあったんだけど 10.4 Communityではなくなってるね。(Professionalではある)
同様に Bonus KSVCも10.4 Communityでは落とせなくなってる >>62
10.3のCommunityでは使えたのか
今はアップデートサブスクリプション期間でないと駄目だね やっぱCS Expressはもう使えないのか
C:\Program Files (x86)\Raize\CS5\Lib\RX10.3\Win32
に無理やりパス通しても駄目だった
アプデ待つかと思ったら時代はすでに11だった…
呼び出し箇所広範囲に修正すんのくっそだるい…
communityもtrialもダウンできないなんとかしてくれ
シリアルとダウン来た
ありがとうmvp
でもダウンロードエリアでisoってもう手に入らないってこと?
買ったバージョンですらダウンロードエリアだと
サブスク更新しろって出てダメなの?もうダメなの?
質問
今日びDoubleBufferedをtrueにするメリットつて何?
>>70
falseにしてみたが、まったく違いがわからないんだよ >>71
そもそもDoubleBufferedが何しているかは理解しているの? >>72
ヘルプ見て理解はしている、しかし効果がわからない 最近の普通のPCなら、falseでもちらつかないんじゃない?
ListViewで、ちらつきを抑えたい時に使ったよーな
Panelとかで頻繁に更新するテキストデータとかはDoubleBuffered有効にしててもちらつくんだよな
DoubleBufferedつかうとWin11で描画がおかしくなるという話題が出てるけど
DoubleBuffered関係なく、SpeedボタンやBitButtonなどのイメージを
貼付けることができるボタンに背景が透過表示されてしまうな。
Delphi10.4でビルドしてもDelphi11でビルドしても同様
とりあえず今作ってるソフトはWindows11を対応OSから外しておいた方がよさそう
最近はFMXでしか作ってないけどFMXでは11で特に問題ないな
てかFMXにはDoubleBufferedってプロパティがなかったような
>>77
フォームとか通常のコンポーネントはそうだけどビットマップイメージを扱うやつはTrueが初期値になってる >DoubleBuffered関係なく、SpeedボタンやBitButtonなどのイメージを
>貼付けることができるボタンに背景が透過表示されてしまうな。
再現できないが。背景、ってフォームに独自に画像を書いている?
それとも、フォームの裏の、Windows のデスクトップ等が出ちゃうの?
>>82
フォームに色を付けて、その上にBitButton貼り付けたのをWin10上でビルド
そのバイナリーをWin11で実行
ボタンを押すとフォームの色が透けて見える >82
MVP 方面から来ました。QP に入れていただけますか?
doublebufferedで消えるちらつきの大半は
背景消去→塗りつぶしの途中が表示されてしまう物だけど、
Windows Vistaでウィンドウの表示方法が変わって
全体がリフレッシュされる機会が減り、あまり意識する必要がなくなった。
そもそも大きくて描画が遅いコントロールがなければ目立たない。
ただし今でも、
例えばTImageやTListViewを使うならちらつき抑止を意識する必要がある。
>>84
QPは本名出ちゃうからな
5chに書いてるの特定されるのは嫌なんで誰か現象確認できた人にお願いしたいな その一言書いたことでもうあなたがQPに書くこと出来ますね
ちらつきの問題は10.3では問題なく10.4から発生する様になった気がする。
10.4は明らかにDouleBuffered の効果が無い。
>>88
効果が無い、と言うのは、ちらつく、と言う意味? いま、Delphi 10.3.3 Rio Community Edition を使わせてもらっていますが、もう直ぐ使用期限がきます。
このまま(10.3.3のまま)使用を続けたいのでエンバカにライセンス申請したのですが送られるシリアルは10.4.2のものです。
どうしたら新しい10.3.3のシリアルをもらえますか?どなたか詳しい方教えてください。
>>92
これを何度もよんで反省しろ。
Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、もしくは
質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。 ほかの技術的なことならともかく、ライセンス関連は権利所有者に誘導するほうが良いと思うよ。
>>95
それは読んだんだ。
「解説」には、
「使用されているCommunity Editionのライセンスの期限が切れた後に、
新しいCommunity Editionのライセンスを取得していただくことで、
継続してお使いいただくことができます。」
つまり、新バージョンのCommunity Editionと解釈できます。
しかし、「解決」では、
現在利用しているCommunity Editionのライセンス期限が切れてから、
下記の作業を行ってください。
1.Community Editionに再度登録する(新しいシリアルナンバーが発行されます)
2.ライセンスマネージャーを起動する
3.右側メニュー「削除」を選択し、古いライセンスを削除する
4.右側メニュー「登録」を選択し、新しいライセンスを登録する
これを読むと現状バージョンを継続できるようにも解釈できる。新しいシリアルナンバーが
どうやって発行されるかは不明。エンバカの言う「Community Edition」とは
ライセンスを貰うHPのことなのか?ね。
>92のエンバカに聞けというのが理解できる。
ライセンス期限が切れたらやってみるわ。
何か勘違いしてるかね? >>96
多分、エンバカの言う「Community Edition」とは
ライセンスを貰うHPのことだね。PCにインストされているCEではないね。
10.3は終了ということだね。 クリーンアンインストールして前のシリアルで入れ直せば?
>>100
スタートメニューの中にアンインストールがあるよ APIフックしてOSの時刻ごまかす類のクラックソフトはあるんだろうけど
特定のアプリに対してだけ有効に出来たりするのかな
もちろん悪用は遺憾ね
>>102
ソフトに期限があるんじゃなくてシリアルに期限があるんだから無理だよね ところで、設定移行ツールというのがエンバカから提供されてるけど、
これってどこまで移行してくれるの?
自分で入れたコンポーネントやパッケージ(Indyとか)も移行してくれるの?
移行ツール使って10.3→10.4に移したら初回起動時エラーでまくった
>>105
コンポーネントやパッケージは入れ直しだね
以前はマイナーバージョンアップの場合は、ISOイメージからインストールすれば
コンポーネントなどは再インストールしなくても使えてたんだけどISOイメージからのインストールも
GetItと同方式になってからは西院ストーしないとダメになった
非常に面倒くさい。 10.4からクラシックスタイルが使えなくなったのか
不便だなあ
こんなんじゃ、ますますDelphi離れ進むんじゃないの。
円バカさん、コンポやパッケージがすんなりインストール出来るようにしてから、いろいろやってくれよ。
めんどいなぁもう。
DelphiはもうC#への移行とか、VB.NETへの移行しか案件無い
個人でちょっとしたツール作るにはPython/C#/C/C++あたりが便利
>>112
お前がPython/C#/C/C++あたりで作ったちょっとしたツールのうpよろ。 Delphi5ProからDelphi10CEへ乗り換えようとしてるけど使いにくくて挫折しそう
コードテンプレートの登録方法が面倒すぎる
D5だったら、コードをコピペして名前と説明入力してすぐ登録できたのに
D10はxml形式でダイアログ一つ出て来ない 今時エディタ上で手打ちかよ
使いにくさというか無駄に手間が増えていくのは Visual Studio も似たようなもんだな
MVP 方面からお知らせ
2021年度 Delphi Advent Calender 参加者募集しています。
まだ6人しか参加されていません。ぜひともご参加を。
>>114
随分前に諦めてバージョンアップする度「ツールメニュー」に
テンプレファイル
......\HIDEMARU.EXE
......\Delphi5\Bin\delphi32.dci
って入れてるわ
検索やコピペの手間がいるけど >>117
ユーザー後退が進んでるな
まあC#やVB.NETにはもう勝てないだろうな >>120
高いもんなDelphi Professional が税込20万円オーバーだもん
Ent.とかは別としてProは10万円以下じゃないと新規はむつかしいだろう
Visual StudioのStand-aloneライセンスが6万円台なんだから 程々の金額でカネ出して買ったら、使ってみようと思う
学生の頃買った Delphiがそうだった
いくつかDelphi→C#とかDelphi→VB.NETって案件有るんだけど
応募するか迷うな
手間かかりそうだし
DelphiからC#やVB.NETはめちゃくちゃ遅くなると思うんだけどそこは問題にならないんだねぇ
自分は速度が必要な案件でDelphi使い続けてるけどこういうのは少ないんだろうなぁ
>>127
実行速度よりメンテナンス要員理由でしょ C#やVB.NET要員はスキルが低いと思うぞw
Delphi要員こそ至高のプログラマでは?
10年ぶりにver6インスコしたんだけど、ボーランド・デベロッパーズ・ネットワークの
アカウントに登録したメアドがどのメアドだったか、それとパスワードも思い出せなくて
使用許諾未完了 orz
DM送ってくれていればメアドだけは判明するんだが・・・
使っていたと思われるメールアカウントの履歴を調べていくソフトを
Delphi Community Edition作ってみたら?
そうだな、よくよく考えてみれば何も無理してVer6を弄るよりも、最新のCommunity Editionで
1年間使ってみる方が良いよなw BDEだって非推奨だし。
今DELPHI使うフリーソフト作成者は何人くらい?
>>132
前に認証リセットしてくれってメール出したら、その時はリセットしてくれたけど
許諾なしでも機能制限はないからそのまま使え的なことを言われた。 >>136
そんなもん誰にも答えられないと思うけど
ただ1人以上であることは確か (C#+VB.NET)/2=Delphiと言うイメージなんだが
世間のイメージは違うのな
クラスの構成なんかモロなんだけど、Action コンポーネントはないんだよな。
便利だと思うんだけど。
世間ってのが何を指すのか分からないけど
プログラマだったら名前ぐらい知ってると思う
非プログラマだったら知らなくて当然
Delphiの案件探しても.NETへの移行案件ぐらいしか無いよ
速度遅くてもマイクロソフト謹製の方が良い、と言うのが世間の評価かと
>>146
まあクライアント側を C# .NET の一択でというのは日本企業らしいよな。
多くの日本人は、海外のものならアメリカ臭いものを受け入れる間口しかなく、
ヨーロッパのラテン・フレーバーが漂うDelphiには慣れていない。 >>148
こういう馬鹿しか残っていないから廃れるのは当たり前 >>148
ラテンてこんなイメージしかないわ
,.‐‐、 ,.--、
く__,.ヘヽ. / ,ー、 〉
', ! / /´
-‐'`ー':::::::::ー'::::::::'-、
.::::::::::::::::::::::::::::::::::::::::::::::ヽ
/::::::::::::::::::::::::::::::::::::::::::::::::::::l
/:::::::::::::::::::::::::::::::::::::::::::::::::::::::l
:|:::::::::::::/´´´/ `゙ヽ、、:::::::::::::|
|::::::::/iil==、、 、==lllll、l:::::::::::;
(( |:::::/ ィ'ロヽ ! /<ロフヽ 'l:::::::ll
rヽヽヽ. l:.:::[ ´´ } |i、`` }:《'"i
i ヽ」ζ) ヽ~l /// (。..。)、/// llゝ''/ /\ ))
ヽ ヽノ ヽl .. _ __ ..、 /-' /i、.κi
i ̄i ヽ : 'ヽエエノヽ 〃 ヽ,i"/
/ i .ヽ ´~~` /|/ ./"'i
/__i ヽ __// 、 _/ i
i ノ⌒"'r"⌒ヽ--、`ヽ|-⌒r "⌒'λ ̄i
ゝ、_ ヽ、 , ' ヽ/^' ヽ、 .i ))
"'ヾ.. , r"r" ,,..,;.,,ヽ,,.,ゞゞ ノ"'''" ̄ヽ,
ミ r'"⌒ヽ\ ゞ'" "ノゝ / ヽ ̄
r'"⌒ヽ `' ヽi i i┬くi i i i ヾ⌒ヽ i
r',"⌒ヽ,, . \_/i i i i i i i i i ⌒ヽiレ
レヽ.,__ "''ー- / / / /--- o
,,,.,""''ー/⌒゚ヽ .ヽ 丶 ヽ。o゚ o 彡
r'," "'o゚イ o゚ .o゚__ヽ ___/`rーo o o
レ`ーイ"'/ o゚ oヽ 金 ゙ヾo  ̄"'ヽ.,
i o゚ o゚\§§ ゚o "'ヽ,
ヽ ゚o >>153
会社の経営が最終的におフランスのお坊ちゃまのノリで破綻・・・その前のリストラを機に開発メンバーとともにMSへ。
素晴らしいじゃないか。 よく分からない現象に出会ったので質問です。Delphi 10.4.2で以下のコードが l.List[0].a := 200; の行でコンパイルエラーになり、
TInner.bの定義を例えばStringにすればコンパイルできるようになる。取得アクセサのあるレコード型プロパティは
戻り値はコピー渡しなのでそのメンバに直接代入しても無意味でStringで通る方がおかしいのかもしれないけど、
Listは動的配列で参照渡しなので、List[0]のメンバの変更はTListの中身をきちんと変更できると考えるとよく分からない。
また、関係ないメンバに型パラメータを使っているかいないかでコンパイル可否が変わるのは意図した仕様ではない可能性を感じる。
なぜこうなるか、分かる人がいたら教えてください。
ちなみにb: Tのままコンパイル通すのは、無理矢理だけど PInteger(@l.List[0].a)^ := 200; とすればResultに200が返ります。
ListではなくItemsプロパティの場合は戻り値がコピーなのでこれでもできないんですよね。(コンパイルは通るけどResultに100が返る)
uses System.Generics.Collections;
type TOuter<T> = class
type TInner = record
a: integer;
b: T; //ここを b: String;に変えるとコンパイル可
end;
function Test: Integer;
end;
function TOuter<T>.Test: Integer;
var
l: TList<TInner>;
t: TInner;
begin
l := TList<TInner>.Create;
t.a := 100;
l.Add(t);
l.List[0].a := 200; //ここでコンパイルエラー(E2064 代入できない左辺値です)
Result := l[0].a;
l.Free;
end;
オレ初心者だから間違ってるかもだけど
ジェネリック・リストはポインタと違って
読み出しのみだと思ったけど
その後、>>155からもう少し色々な類似ケースで挙動を調査しました。しばらくして頭の中が整理できたらまとめます。
>>156
その通りでTList<T>.Listプロパティは読み込み専用ですが、型がarrayofTという動的配列で参照型なので、
Listプロパティから変更できないのは動的配列の実体があるアドレスへのポインタだけで、
ポインタの先にある実体であるList[index]の中身は変更できます。
例えば、L: TList<Integer>の場合、L.List := [10];というコードはコンパイルできませんが
L.List[0] := 10;はコンパイルでき、L[0]が10になるという印象通りの動作をします(代入時点のL.Countが0でなければ)。
これはプロパティの型がクラスである場合は読み込み専用でもそのプロパティのプロパティやフィールドに書き込めるのと同じです。
(クラスも参照型)
ちなみに読み取り専用プロパティの挙動はエラーE2064の説明に以下のように文書化されています。
「Delphi 2010 以降では、読み取り専用プロパティが公開するレコードのメンバに値を
代入しようとしたときにも、コンパイラが E2064 を出力します。 」
なお実際には書き込み可のプロパティでもエラーになりますし、試したところ2010より前のDelphiでもエラーになります。 Windows10で動いているDelphi6製のアプリがあるんだが
Windows11でも普通に動くんかな?
動くように作ってあれば動くしそうでないなら動かない
テストしろ
Delphi6までが花だったな、、
あの当時はVB4,5,6よりDelphiだったな
6でほとんど完成してるしね
その後で大きく変わったのは2009のUnicodeくらいか
あと64bit対応
UbuntuにもLazarusを入れちゃった。
VCLと同じ様にフォームやGUI要素のCanvasにDrawやLineなんかで描画出来るのな。
>>163
6はPersonalで触れた人が多いからそんな印象があるかもしれないけど、
基本の完成は3か5じゃないかな。
むしろ、凋落を決定的にした8とは比べものにならないけど
6のCLXは今も続く迷走と混乱の始まりでもある気が。
まあそれでも5,6,7の頃が良かったかと言われると
ジェネリックスと無名メソッドとRTTI以前には戻りたくない。 CLXなんて誰も使ってないし知らねーよww
VCLは6で完成してる
Actionは5からで、6で洗練された
C++使いだからDelphiの言語機能は知らんが、俺もC++03のBCC32には絶対戻れない
BoostからもBANされたし
Sydneyの高DPI対応だけどマウス位置がヘンだね
PopupMenuをコントロールに登録して右クリックしても
違った位置に表示されるし
コントロール上でマウスホイールを操作しても
スクロールされない
(コントロール外の「ある位置」でスクロールできるが)
LocalToAbsoluteで手動でポップアップ可能だけど
こんどはMacだと標準DPIでおかしくなる・・・
Alexandriaで改善されてる?
6とか言ってるやつらは結局ヴァージョンアップについていけない頭が硬いやつ。
FMXを使え無い奴らが傷を舐め合ってるのは醜いですね。
文字関係ないなら Delphi5
UniCode 使うなら Delphi2009
泥も対応するなら Community Edition
>>173
「FMXなんて使い物にならない」が正解だろ
漢字変換時の色表示がまともに出来ないからメモ帳アプリ一つ作れない
欧米文字圏向けの機能であって実質日本語対応できてない >>175
確かに日本語でガシガシ入力するようなアプリには向かないね
FMXについて分からないときに検索すると
日本語サイトがほとんどヒットしないから
日本じゃ使ってる人が少ないかな?
自分はVCLで公開してたツールをFMXに書き換えた
macOS版も公開できたんで良かったと思ってるよ 以前URLMemo開発中って聞いてたけど
その後どうなったんだろう?
ちょっと期待してたんだけど
WindowsMediaPlayerで、動画のサムネイルの作り方知りませんか?
やり方を教えてください。
>>180
Delphiで?WindowsMediaPlayerで? >>158
DelphiってWin32の上に作られてるんだから動くんじゃね ここさ、低レベルの質問にも答えられる奴いないんだ。
閉めたら。
何年も前からいるMediaPlayerオジサンだと思う
>>184
答える義務があると思ってんの?
馬鹿なの? てか今更ActiveXなんか使いたいととは思わない
まあ最悪、APIでウィンドウ・キャプチャして
コントール位置から画像を取得し
縮小すればサムネールになるのでは?
DRMの制約がばければ簡単にやれる
>>188
そう言う話が欲しかったんだよ。
ありがとう。 ID:IgilbmVIとID:xoa25m9yは同じ人?それとも別人?
いずれにしろdelphiユーザーのレベルが落ちた現実は間違いない。
>>192
みんな.NET移行したからな
スピード遅くてもマイクロソフト純正を皆選んだ 例年なら11月頃出ていた翌年のRoad mapすら出てないもんな。
?,へ、 /^i
?|?\〉`ヽ-―ー--< 〈\?|
?7? ?,?--?、,?--- 、 ?ヽ
?/ ?/? \、i,?,ノ ? ?ヽ ?ヽ
?| ?(-=・=-? -=・=-? ) |? あらいぐま Pascal
/ 彡 /?▼ ヽ ミミ 、?
く彡彡 ?_/\_ ミミミ ヽ
`< ? ? ミミ彳ヘ
? > ? ___/ \
/ 7 \
| /
.NETに移行するにはどうしたらいいですか?
お金かかりますか?
VisualStudioにもCommunity版があるから無料で始められるんじゃね
どんな回答を期待しているかわからんけど>>200の通り開発ツールは無料がある
Delphiのソースの移行をいってるならそりゃかかるだろうとしかいえない Delphi→VB.NET移行やってるソフトウェアハウスは存在する
>>202
わざわざ糞から大糞に移行してんのか?w 質問です、お願いします。
Delphi6
普通のWindows メインフォーム表示のプログラムです。
コマンドラインでパラメータ付き起動自動処理させると
処理が終わるまでメインフォームが表示されません。
(Q1) メインフォームが表示されきってから処理に自動移行させるにはどういうソースにすればいいんでしょうか?
ググっても「メインフォーム非表示で処理をしたい」系統は拾えるのですが
処理中の経過インジケータ(ProgressBar)などを表示させたいのに
TForm1.FormCreate 最終に引数があれば→コマンドライン自動処理→プログラム自動終了
処理終わるまで非表示状態でプログラム終了時にチラっとフォームが表示されて終わってしまう。
(Q2) パラメータ -? /? など使用方法文字をWindowsのコマンドプロンプト画面に表示させるには?
uses
〜, SysUtils, 〜;
(略)
procedure TForm1.FormCreate(Sender: TObject);
if 0 < ParamCount then CmdLines;
end;
procedure TForm1.CmdLines;
begin
Application.ShowMainForm := True; // 有効指定にしても表示されなかった
// メインフォーム表示まで待機させたい
// 各種処理
Writeln('-? Question'); // 表示テスト 結果: I/O エラー (105)
end;
>>204
確か起動時の最後のイベントはOnShowかOnActivateだったはず
起動時のイベントにコードを書いたときは、それが終了しないと
フォームの表示までたどり着かないんじゃないかな
さらに処理中にフォーム/コントロールを更新するには適宜
Application.ProcessMessages;
を挿入するとか... イベント内でやるよりスレッド立ち上げた方がよい気がす
>>204
(Q1)
まだ出てない方法としては、Application.OnIdleで処理を行う。
このイベントは、何かの処理が全て終わって入力を受け付け始める寸前に発生する。
何かの処理には起動も含まれるので、起動処理が完全に終わった時点で初回の呼び出しが発生する。
初回のイベント時に、次から呼び出されないようにフラグを立てたりApplication.OnIdle=nilとしておく必要あり。
このような再発生防止が必要なのは他のTForm.OnShowやOnActivateでも同じ。
(Q2)
Writelnの出力先になる標準出力があるのはコンソールアプリだけなので、
VCLフォームアプリケーションでWritelnを使いたければdprファイルの2行目に{$APPTYPE CONSOLE}を追加する。
ただしこの方法ではGUIから起動してもコマンドプロンプトが開くので、
それが嫌な場合はWin32APIのCreateToolhelp32SnapshotやAttachConsoleを調べて、
自身の親プロセスがコマンドプロンプトなら標準入力を開いて書き込みをするコードを自力で書く。