【Delphi互換!?】FreePascal/Lazarus その2【GPL】
レス数が950を超えています。1000を超えると書き込みができなくなります。
>>772
youみたいに使ってる人がmantisに情報あげてかないと死滅するよ 旧Delphiみたいにウインドウバラバラがデフォルトなのがなあ FreePascalのメリットはLinuxで開発出来るぐらい? >>741
Community Edition出たぞ
Starter Editionはもうゴミ 最近のObjectPascal実装でそこそこ使えそうなのってこんなところ?
Delphi
FreePascal / Lazarus
Oxygene
PascalABC.NET / PascalSharp Oxygeneはいつの間にかフリーのコマンドライン版無くなったのね いつの間にやら Typhon なんてのが出てるやん。
って思ったら、2015 年にすでに話題に出てた orz
日本語情報が少ないね。 PythonのTyponかと思ったぜ
まぎらわしい Typhonは作者が基地外っぽくて常連達からは嫌われてるよ Lazarus 1.8.4でGUIアプリを作ろうとしているのですが、フォームデザイナーと実行後のアプリの大きさが違います(高さ、幅を400、400にしても600
、600くらいになります)
何故だか分かる方はいますか? .lfmを開く
HeightとWidthを希望する値に変える
保存する
Lazarus IDEをいったん閉じる ←たぶんこれ
xx.lpiまたはxx.lprをダブルクリック
構築 書き込みありがとうございます。上記試してみましたが変わりませんでした。どうもWindows10のディスプレイの拡大と関係があるみたいで、200%だとデザイナーの2倍の大きさになります。100%だとデザイナーと同じ大きさで実行されました。Lazarusのバグなんだと思います 高解像度ディスプレイで倍率を変える設定がWindowsにあってそれで色々迷惑することがある あー、それ Visual Studio でもなったな。最近のは直ってるのかな。 >>792
プロジェクトオプションのLCLスケーリング使用でデザイナーと同じ大きさで実行されました。ありがとうございます Lazarus Release Canditate 1 for 2.0 - October 14, 2018, 08:45:13 pm ネイティブコードにコンパイルできて
IDEでポトペタできて
オブジェクト指向できて
現在も開発が続いてる
無料な言語・開発環境
てFree Pascal以外にありますか? >>795
今はJavaScriptみたいなスクリプトか、
Javaみたいな仮想マシン用コンパイラが人気なので
ネィティブコードにコンパイルできる言語自体がそもそも少ないだろうな。
他の条件と合わせると、おそらくないと思う。 ネイティブコードにこだわる理由がわからない。
本当にネイティブコードが必要なシビアなことをしている人が
こんなところで尋ねるとは思えない。 >>795
Windowsに限らなければMac/IOSのObjective-C/Swiftが生き残ってる
iPhoneが流行ったのはJavaが主流だったガラケー/他社スマートフォンに比べて
高速(当時)なのも一因だぜ? 後はQtも一応そうかも
VCLや(Objective-C/Swiftの)CocoaがGUIオブジェクトをシリアライズしたリソースファイルを
アプリケーションに同梱する形式なのに対して
あっちは最終的にC++の生成コードに変換するという違いはある >>797
こんなとことは失礼な。
でも、こんだけ無料で優秀な言語やIDEが配布されている世で
Delphiの会社はよくやってられるなぁとは思う。 まぁ日本じゃMVPがあの程度のツール作って自慢するレベルだからな… >>802
RADじゃなくね?
外部ツールとしてデザイナはいくつかあるみたいではあるけど kotlin のネィティブ対応がよくなってきたらしいけど
ポトペタできるのかな?
Lazarus の kotlin 版ホスィ 型推論付きどこでも変数宣言はいつ実装されるんだろう。 Lazarus Release Candidate 2 for 2.0 - November 01, 2018, 11:00:40 am FPC3.2もそろそろ出すみたいだし、androidやiphone対応が本格化しますな AnchorDockingDsgnで我慢しろ
フォームは別ウィンドウだが sparta_DockedFormEditor でフォームもドッキングできるぞ。 Lazarus Release Candidate 3 for 2.0 - December 24, 2018, 11:32:30 am 今日、Lazarus 2.0.0 がリリースされたってよ。 昔Lazarusインストールしたらアンインストールできなくなったらから使うのやめた インストール先は C:\lazarus\2.0-3.2 とかにして、
起動するときは、
C:\lazarus\2.0-3.2\lazarus.exe --primary-config-path=c:\lazarus\2.0-3.2-config
としてconfig ファイルの格納先を個別に指定するのがおすすめ。
もちろん、インストーラが勧めてくる旧バージョンのアンインストールを実行しないこと。 --primary-config-pathはlazarus.cfgに書いてる Write once, run any architectureを目指すFree Pascalはもっと注目されていい FormatDateTimeとかでそもそも元号対応してるのWindows版だけなのな たいてい西暦しか使わないね。お役所の書類で仕方なくって感じかな。 Lazarus Release 2.0.2 - April 16, 2019, 10:34:02 am 久しぶりにLazToApkをバージョンアップしたら、ビルドの仕方が変わっていて使い方がわからず撃沈。
OldVersionもHPにないし困ったなあ。
昔のファイルがあればいいけどなあ、ハードディスク内を探してみるか。 この機会に手動ビルドを研究したほうがよい。
最近やってないけど大した手間じゃない。 巷によくある、 C++ で作った .so ファイルを apk にする手順を
Laz で作った .so ファイルと読み替えるだけ。 久々に使い始めたんだけど、ブレークした時にクラスのインスタンスの内部データって見られないんだっけ?
Integer とかの単純な変数は見られるんだけど、例えば TStringList のインスタンスに登録されてる文字列とか。
昔作ったプログラムを見てるんだけど、どうやったか覚えてない。 TpairSpitterの境界線の上に文字を置きたいのですが、どうしたら良いでしょうか。
境界線のつまみを隠したいのと文字を置きたいのが理由です。
アイデアをください。 >>835
TLabelでなくTStaticTextでとかそいうこと? >>836
labelでもpanelでもいいんだけど境界線の上に置きたい。
置こうとしても、隠れてしまって前面に出せないのでどうしたらいいかわからない。 当てずっぽうだけどParentをTpairSpitterにすれば実行時には上になる?ならないか? >>838
コンポーネントを継承してTMyPairSplitterみたいなもの作って
描画部分に手を加えたほうが応用も効くしソースもスッキリすると思う。 Lazarus 2.0.4 - July 25, 2019, 12:17:38 pm >>840
be planning やん。
be planning は便利でよく使う構文だからきっちり使えるようにしといたほうがいい >>841
ごめんなさい。寝ぼけてましたw
リリースされたと思って書き込んでしまったorz Lazarus Release 2.0.4 - August 06, 2019, 03:13:13 pm Lazrus Release 2.0.6 - November 01, 2019, 12:33:13 pm 最近Lararus使い始めたんですが、普通に使えるのでびっくりしました。
Delphiで演算子オーバーロードとか使いまくってるソースも問題ないし。
演算子オーバーロードなんて昔は「ソースが一読ではわかんなくなるから反対」なんて思ってたのに。 文字コードUTF8が標準なのでむしろDelphiより使いやすいと思いますよ。 作ったexeが20メガ超えててなんだかなぁ〜とおもた C#ですら数kbだからな
どうせ要らんもんリンクしてるんだろ C#は知ってても.NET Frameworkは知らなさそう デバッグ情報含んでるからストリップとスマートリンク有効にしろって昔からマニュアルに書いてあるぞ
UPXまでは別にやらんでもいいと思う >>849
小さくする設定もある。
コンパイルしたソフトを小さくするソフトもある。 Lazarus 側の言い分としては、最初からいろいろリンクしてるから、
これ以降機能追加してもサイズの増加は緩やかということらしいけど、
使いもしない機能リンクしないでほしいわな。 使いもしない機能はリンクしないよ。
ソースプリーズ。 >>859
書き方(翻訳の仕方?)のせいかもしれんが、使うからこそ組み込まれるのだよ。
コマンドラインアプリや、Windows API で自前のメインウィンドウだけしかないような
アプリを作って試してみればわかるが数キロバイトになる。 英語版見てみてみましたが、最新版はかなり内容が違う気がします。
英語版を参考にしたほうが良いと思います。 FPC 3.2.0 rc1 始まったで
ttps://forum.lazarus.freepascal.org/index.php/topic,49110.0.html >> 863
Free Pascal Compiler 今月新しいバージョンが出っぽいね
We are planning the next release: Lazarus 2.0.8 - April 02, 2020, 10:43:37 am
The Lazarus team has scheduled
Lazarus 2.0.8 for April 2020 (estimated 14th to 20th) コンパイラは3.0.4のままだけどね
FreePascalのリリースがまだかかりそうだから急遽決めたようだね
本来なら次はLazarus 2.2の予定だったみたい >>855
外字って、Unicodeにも私用領域ってあるよな。まああくまでも私用領域であって
外字専用に使うための領域ってわけではないが、そう使っても良いんだよな。 画面拡大してるとHI-DPI有効にしないとダイアログがでかくなるんすね。
はまりましたわ。 しらんまにFPC3.2出てましたね。Lazarusの先っちょも3.2対応だとか! FPC3.2はDynamicArrayに大分手が入ったみたいなので、この機会に不定長のビットマップ作成の
手持ちライブラリ書き換えてみるかな。
というか素直にFCL使えって話だが、FCLってFPCのコマンドラインアプリでも使えるの? 今の1個前のバージョンでLazarus&FPCの現状はどんなもんかと以前試してみたけど
10年前のDelphiにも遠く及ばない出来だったな
コンパイル速度、デバッグモードの開始、終了が遅く(終了からIDEの切り替えが特に遅い)
フォーム無しのプログラムでメッセージダイアログを出すとコマンドプロンプト画面が出る始末
今も改善されていないんだろうなぁ ソースコードもあるし、別に本家にご注進してもいいじゃん。
なんでそこで終わらなくても良くない? 2.0.10 アナウンスはまだだけどsouceforge で公開されたね Lazarus Release 2.0.10 - July 11, 2020, 10:55:58 am
もうリリースされたって書き込まれていたけど一応。 TMemo の表示領域を得たいのですが
var
R: TRect;
begin
R.Left := 0; R.Top := 0; R.Right: = 0; R.Bottom : =0;
Memo1.Perform(EM_GETRECT, 0, Longint(@R));
ShowMessage(Format('Left=%d, Top=%d, Right=%d, Bottom=%d', [R.Left, R.Top, R.Right, R.Bottom]));
end;
を実行すると Delphi 7 だと正しい値が得られるのに Lazarus 2.0.10 だと
Left=0, Top=0, Right=0, Bottom=0
になります。
正しい値を得る方法を教えていただけませんでしょうか。 SendMessage(Memo1.Handle, EM_GETRECT, 0, Longint(@R));
でよさそう >>880
ありがとうございます。
早速試してみたところ上手くいきました。 せっかくのオープンソースだし、
不具合っぽいのは本家に報告してあげるとよいよ Delphi6でさんざん書いてたのに長いことマイコンのほう(ArduinoやそのほかのC)ばっかりやってたからすっかりPascal忘れてるw
久々にPCのアプリ書こうと思っってLazarusはじめたらforやifですらあれどうだっけ?ってなってるよ TChartのチュートリアルを和訳してみたけどWikiに追加する方法がよくわからない FreePascalのXMLチュートリアル、サンプルのしょうもないミスを修正したいが
どうすりゃいいんでしょうか。
まぁPascal使うような極まりきった方々は別にミスあっても自分で修正するでしょうけど・・ マルチスレッドでレイトレーシングアプリを書いたが、LinuxでもWindowsでも
普通に動くんでビックリしましたわ。
マルチスレッド絡みだからOSとかの癖とかで差異があって大変だと思ってたので。
ちゃんとライブラリで差異を吸収してんですねぇ。 あまり大声で言うべきではないでしょうが、LazarusのGTK3サポート、
まだアルファ版というのがちょっと切ない。
自分の作るしょっぱいアプリだったらFreePascalのGTK3バインディングで
十分だろうからそっちから攻めるべきか。 ざっくり調べるとQtバインディングの方はQt6が最新でQt5はサポートしているということか。
であれば現状自分のしょっぱいLinuxアプリはQt5バインディングにしといた方が
良いかもしんないにゃー。
別にGTK2でも全く問題ないのですが・・・・ しかしGTK4が出てGTK2はEOLになった訳だが、ソースは公開されてるから永遠に使えるし、
別に自分の作るしょっぱいアプリなら見栄えとかも気にならない。
そりゃPython2が消えるのに時間かかるわけですわ。 とりあえずlazbuildでlpiファイルを指定してやればコマンドラインでビルド出来るのが
わかった。
これで素直にemacsでのコーディングにチャレンジできますな。 Lazarusからブランチされたと思しきCodeTyphon。
公式サイト見る限り、LazarusよりIDE環境は進んでそう。
https://www.pilotlogic.com/sitejoom/ Lazarusはシングルウインドウになったらええのに FAQ見るとシングルウィンドウにするんだー、だからペインドッキングのパッチは
ノーセンキューなんて書いてあるのにねー。
GTK3サポート共々今どんな塩梅なんですかね。 何を思ったかデスクトップPCをDebian/Linuxに、エディタはemacsでコーディングをしてる。
emacsのデフォルトはgnu-pascalサポートが入ってるのでObjectPascal拡張があると不便。
よくわからんまま、emacs delphi.elで検索かけてgithubにあるopacal.elを入れて
M-x opascal.elとしてみたら普通に動くようです。
そうまでしてなんでemacsで書かねばならんのかわからんのですが・・・ Lazarus Release 2.0.12 - February 24, 2021, 09:03:56 pm あ、もう出てたんですね。
リリースノート見る限りバグフィックスが主体であんまし新機能はなさ気な雰囲気ですが
使ってみた方いかがでしょうか。 windows10 で lazarus 2.0.12 を利用していますが、以下のようなコードの2か所で修飾子エラーになります
{MODE Delphi} なら大丈夫なのですが {$mode objfpc} の場合、どのように変更すればよろしいのでしょうか
type
PPHashItem = ^PHashItem;
PHashItem = ^THashItem;
THashItem = record
Next: PHashItem;
Key: string;
Value: Integer;
end;
TStringHash = class
private
Buckets: array of PHashItem;
protected
function Find(const Key: string): PPHashItem;
end;
function TStringHash.Find(const Key: string): PPHashItem;
var
Hash: Integer;
begin
Hash := HashOf(Key) mod Cardinal(Length(Buckets));
Result := @Buckets[Hash];
while Result^ <> nil do
begin
if Result^.Key = Key then <--- この部分が修飾子エラー
Exit
else
Result := @Result^.Next; <--- この部分も修飾子エラー
end;
end; Result^ を Result^^ にすればいいんじゃね? >>898
上手く行きました
ありがとうございました Delphiのライセンス切れてるし、Community Editionは毎回新バージョンに更新しないといけないから
これを機にFreePascalにしてみるか
貧弱なIDEはVSCodeで補えそうだし Lazarus Release 2.2.0 - January 05, 2022, 11:57:19 pm program MyProgram(input, output);
のようにプログラム名にパラメーターが付いたコードを見かけました。
Pascalの方言なのでしょうか?
それともFree Pascalでも見られるものでしょうか? >>904
質問に質問で返してすみませんが、あなたは
void int main( int argc, char *argc[])
はcの方言だと思いますか?
それともGNUCでも見られるものでしょうか void int mainってコンパイルエラーでは? Lazarus Release 2.2.2 - May 19, 2022, 09:26:08 am 本家のForum にレジストしても確認メールが届きません。
どうしたものでしょうか。
迷惑メールとかも見ましたし再送信とかも試しましたががまったく来ません。 Lazarus Release 2.2.4 - September 28, 2022, 10:08:10 am Lazarus製のアプリケーションのexeのショートカットをつくって実行時の
大きさを最小化としても最小化で起動しないのだがどうすればいいのかな >>913
Delphi ではプロジェクトファイルをごにょごにょしてたので
Lazarus では多分 .lpr ファイルにごにょごにょ
Application.CreateForm(TForm1, Form1);
//ここに↓これを入れて判断
if CmdShow = SW_MINIMIZE then Application.Minimize;
Application.Run; >>914
あいにく動作しませんでした
メインフォームのOnCreateイベントハンドラーに
case CmdShow of
SW_SHOWMINNOACTIVE: WindowState := wsMinimized;
SW_SHOWMAXIMIZED: WindowState := wsMaximized;
end;
と書いたらうまくいきました AmazonにKindle本として佐々木優という人が書いたLazurus・Free Pascalのセルフ出版の
本が何冊かのっている(読み放題のKindle Unlimited対象)
役に立つかどうかは別にして日本語の本というのはめずらしいかも >>916
応援の意味で何冊か買いました。Unlimited もいつ対象外になるかわからんし。 UbuntuでC++Builderを導入できなかったのでDelphiの本読んで勉強してます。
思い通りに動くと楽しいです。 サンプルの xmlstreaming を参考にして設定を書き出す処理を作ってます。
TComponent を継承して設定データのクラスを作ろうとしているんだけど、
その中にさらに TComponent 派生クラスを入れ子にすると、その項目が書き出されない。
入れ子のクラスを TPersistent 派生にすると書き出されるんだけど、項目名が
ドットで区切られた形でかなり違和感。
xmlstreaming の中でコメントアウトされている Form (Self) を書き出す処理を有効にしてみると、
入れ子のデータは「children」タグに囲われていい感じで出力されているんだけど、
どうやればできるんでしょうか? >>919
下記を付け加えると入れ子のデータも書き出された
読み込みが正常に行われるかは検証してない
procedure TMyComponent.GetChildren(Proc: TGetChildProc; Root: TComponent); //override;
var
i: Integer;
begin
if Self = Root then begin
for i:=0 to ComponentCount-1 do begin
Proc(Components[i]);
end;
end;
end; Rootってなんだろう?と思って書いてたコードが入ってた
procedure TMyComponent.GetChildren(Proc: TGetChildProc; Root: TComponent); //override;
var
i: Integer;
begin
for i:=0 to ComponentCount-1 do begin
Proc(Components[i]);
end;
end; >>921
ありがとうございます。書き出せました。
wiki のストリーミングのところ読んでもそんなこと書いてなかったけどな。
TWinControl に実装されてるから Form ならちゃんと書き出されたんですな。
人をハメようとしてるとしか思えないな。検索しても、英語の情報でも全然ないし。
とにかく、ありがとうございました。 これは壮観。過去50年以上にわたる「プログラミング言語の人気の変遷」をアニメで紹介するムービー【やじうまWatch】 - INTERNET Watch
s://internet.watch.impress.co.jp/docs/yajiuma/1463502.html
pascalって人気あったんだね インクリメンタルサーチの候補表示に TListBox を使っていて、
候補数が一定以下の場合は、数に合わせて ListBox の高さを調節したいと思っています。
Windows の場合は ItemHeight を使えばうまくいくようなのですが、Linux だと 0 が返ってきて
使えません。ほかにも ItemRect(0).Height の値も 0 ではないけど全然足りないし、
フォントの高さから計算できるかと思ったけど、同じ高さでもフォントが違うと
ListBox の項目の高さが微妙に違ったりしてこれもダメっぽい。
描画しているんだからどこかに情報があるんだと思うんですが、どこにあるんでしょう?
そもそもアプローチが間違っている? TOpenDialogのTitleプロパティがデフォルトの「ファイルを開く」のままOpenDialog1.Executeを実行すると、表示されたダイアログのキャプションが"Open existing file"と英語で表示されてしまいます。
これはLCLStrConstsユニットで rsfdOpenFile = 'Open existing file'; と定義されているのが原因のようですが、これをlclstrconsts.ja.poの「ファイルを開く」に置き換える方法を教えてください。 >>925
プロパティの設定が効かないってことかな? >>926
オブジェクトインスペクタでTitleを「画像ファイルを開く」など「ファイルを開く」以外にすればTitleがダイアログのキャプションに反映されます。
また、コードでOpenDialog1.Title := 'ファイルを開く'; を実行すればキャプションもそうなります。
ただ、コードを書かずにオブジェクトインスペクタで「ファイルを開く」を設定するだけだと「Open existing file」が表示されるというのが今回の問題です。
この症状はTDBNavigatorでも確認できていて、Hintsプロパティにはデフォルトで日本語のヒントが設定されているのにもかかわらず、実行すると英語のヒントが表示されてしまします。
その他MessageDlgのボタンが「はい」「いいえ」ではなく「Yes」「No」なのも同じ原因だと思います。 >>927
IDEの言語を日本語にしていると、TOpenDialogのTitleプロパティを「ファイルを開く」に設定してもデフォルトとみなされ設定ファイルに記録されず
アプリを国際化対応させてないと元のデフォルトである 'Open existing file' が表示されるみたい
したがって
解決法1
IDEの言語を日本語以外にして Titleプロパティを「ファイルを開く」に設定する
他のダイアログなどでも設定しないとならなかったり、根本解決ではない
解決法2
国際化対応(のふり):
1.どこかの uses節に DefaultTranslator を追加し、
2.実行ファイルがあるフォルダに languagesフォルダを作り、その中に lclstrconsts.ja.po をコピーする
でいいはずなんだけど、Windowsだと FCLの gettextユニットに日本語の言語コードを jp とする不具合があるので、次のように修正する
3.gettextユニットにある procedure GetLanguageIDs(var Lang, FallbackLang: string) の中の
LOCALE_SABBREVLANGNAME を LOCALE_SISO639LANGNAME に
LOCALE_SABBREVCTRYNAME を LOCALE_SISO3166CTRYNAME に書き換える
あとは gettextユニットをプロジェクトに追加してコンパイルするだけでいいはず
(gettextユニットを修正せずにファイル名を lclstrconsts.ja.po から lclstrconsts.jp.po にするだけでもいいけど)
gettextユニットの不具合のせいで国際化対応をどうやってもできなくて無駄に悩んだぞ
IDEの言語設定で Automaticで日本語にならないのも gettextユニットの不具合のせいじゃないのかなあ >>928
ありがとうございます。
lclstrconsts.jp.poにリネームする方法で試して無事日本語で表示されました。
TDBNavigatorのヒントとMessageDlgのボタンも同様です。 Lazarus Release 2.2.6 - March 09, 2023, 10:38:09 am 軽くていいな。ゲームエンジンなんかもあるようで欧州では使い手多いのか? https://www.tiobe.com/tiobe-index/
TIOBE Indexで常に10位前後を維持してるDelphi系のPascal言語もスゴいよな
信じがたい快挙 Windowsアプリを作ったら、とても遅いような気がするんだけど、まだ改善してないのかな? >>933
どんなプログラムを書いてどの言語と比較して遅いのかを書かないと答えは無理
C++/C言語と同等の速度にはならない
スクリプト言語よりは高速 >>933
他のプログラムはサクサク動くのにお前の作ったプログラムだけが遅いという場合は、
多分お前のプログラムの何かがおかしい。 Lazarus Release Candidate 1 of 3.0 - July 03, 2023, 02:10:30 pm なんか知らんけど山下って人に金払わんでも専ブラ作っていいみたくなったらしいから
Lazarusでなんか作るチャンスなんじゃねw Lazarus Release Candidate 2 of 3.0 - October 16, 2023, 11:19:47 am
The Lazarus team is glad to announce the second release candidate of Lazarus 3.0.
This release was built with FPC 3.2.2. Lazarus Release Candidate 2 of 3.0 - October 16, 2023, 11:19:47 am
The Lazarus team is glad to announce the second release candidate of Lazarus 3.0.
This release was built with FPC 3.2.2. Lazarus Release 3.0 - December 21, 2023, 05:13:29 pm
The Lazarus team is glad to announce the release of Lazarus 3.0.
This release was built with FPC 3.2.2. >>937
Siki 以上のものをサクッと作れる気がしねー…… N. Wirth 死去 2024/1/1 89歳.R.I.P.
失踪じゃないよ.逝去だよ. Pascalの始祖が伝説になっただけで開発者はご存命 なんじゃいヴィルト死去の話やったんかいヽ(`Д´)ノ passed away(消え去った)と書いてあったのでどこへ行ったのかと思った フリーパスカルに書いてあった
http://www.freepascal.org/
The creator of the Pascal Language, Niklaus Wirth, has passed away on January 1st. passed awayは日本語でいう亡くなったみたいに、丁寧な言い方なんだな
勉強になった Lazarus Release 3.2 - February 28, 2024, 04:35:50 pm
The Lazarus team is glad to announce the release of Lazarus 3.2.
This is a bugfix release and was built with FPC 3.2.2. レス数が950を超えています。1000を超えると書き込みができなくなります。