(クロス)オープンソースコンパイラ FreePascal [i386/68K/PPC/ARM/SPARC]
http://www.freepascal.org/
オープンソース開発ライブラリ等 [IDE/GUI環境 Lazarus]
http://www.lazarus.freepascal.org/
FreePascal/Lazarusのメーリングリスト(Pascalにホエロ!)
ttp://www.freeml.com/lazarus
Q:これで作ったソフトは自動的にGPLになるの?
A:制限付き LGPL だから、自分が作ったソースは GPL にする必要は無い
例え FreePascal 付属のライブラリにリンクしていても GPL にはしなくて良い
http://www.freepascal.org/faq.html#general-license
【Delphi互換!?】FreePascal/Lazarus その2【GPL】
2009/12/25(金) 02:46:18
562デフォルトの名無しさん
2015/12/10(木) 13:51:45.92ID:wPB2XwQl ラザルス/パスカルの入門用の日本語の書籍ってある?
563デフォルトの名無しさん
2015/12/10(木) 13:51:47.70ID:B0WYbo6E lazarusでopen janeをコンパイル出来ませんか?
564デフォルトの名無しさん
2015/12/10(木) 16:05:19.78ID:wwtNApqI >>562
パスカル言語自体の入門なら、古いDelphi用の書籍を図書館で借りたり
古本屋でゲットすれば十分だと思うよ。
stringがUTF16でなくUTF8だというのさえ気をつければ
なんとかなると思うよ。
IDEの使い方の入門は、DelphiやVS C#などのIDE使ったことある人なら
適当に触ってるうちになんとかなると思うよ。
パスカル言語自体の入門なら、古いDelphi用の書籍を図書館で借りたり
古本屋でゲットすれば十分だと思うよ。
stringがUTF16でなくUTF8だというのさえ気をつければ
なんとかなると思うよ。
IDEの使い方の入門は、DelphiやVS C#などのIDE使ったことある人なら
適当に触ってるうちになんとかなると思うよ。
565デフォルトの名無しさん
2015/12/10(木) 16:13:28.25ID:wwtNApqI >>563
修正無しでコンパイルはできないと思うよ。
でもC++から移植するよりは絶対楽だから勉強のつもりで移植してみるのはいいかもね。
他人のコードを見るのが何よりも勉強になるし。
ちなみに今からラザロで新規プロジェクト作るなら先日出たばかりの
Lazarus 1.6RC1 で作り始めたほうが絶対によいと思うよ。
FPC 3.0、特にコードページ文字列型にフル対応してるから。
修正無しでコンパイルはできないと思うよ。
でもC++から移植するよりは絶対楽だから勉強のつもりで移植してみるのはいいかもね。
他人のコードを見るのが何よりも勉強になるし。
ちなみに今からラザロで新規プロジェクト作るなら先日出たばかりの
Lazarus 1.6RC1 で作り始めたほうが絶対によいと思うよ。
FPC 3.0、特にコードページ文字列型にフル対応してるから。
566デフォルトの名無しさん
2015/12/10(木) 18:08:42.14ID:Uyd42IiD >>560
ああ、古臭いは言い過ぎかもしれない。
> 変数スコープを縮めるってのは例えばforループ内でのみ有効なローカル変数が欲しいとかそういうこと?
そうそう、使う直前での定義とかそんなの。先頭に戻るのがめんどいような長い関数は書くなって思想かもしれないけど。
あと、最近はやり (?) の型推論とか。
ああ、古臭いは言い過ぎかもしれない。
> 変数スコープを縮めるってのは例えばforループ内でのみ有効なローカル変数が欲しいとかそういうこと?
そうそう、使う直前での定義とかそんなの。先頭に戻るのがめんどいような長い関数は書くなって思想かもしれないけど。
あと、最近はやり (?) の型推論とか。
567デフォルトの名無しさん
2015/12/10(木) 18:26:06.61ID:wwtNApqI >>566
>そうそう、使う直前での定義とかそんなの。
確かにC++で取り入れられたときはうらやましかったけど、
今はエディタが発達して自動定義とかしちゃうからな〜
見込み薄かもね。
そういえばbegin 、end、then とか打つの面倒とかいう意見も昔はあったけど
エディタが自動入力しちゃう時代だしね〜
型推論はジェネリクス絡みでそのうちある程度はできるようになるだろうね。
まあスクリプト言語じゃないので、実行速度を犠牲にしてまではできない
という限界はあるだろうけど。RTTIみたいに、便利だけど組み込むと重くなる
みたいなのもあるから。
>そうそう、使う直前での定義とかそんなの。
確かにC++で取り入れられたときはうらやましかったけど、
今はエディタが発達して自動定義とかしちゃうからな〜
見込み薄かもね。
そういえばbegin 、end、then とか打つの面倒とかいう意見も昔はあったけど
エディタが自動入力しちゃう時代だしね〜
型推論はジェネリクス絡みでそのうちある程度はできるようになるだろうね。
まあスクリプト言語じゃないので、実行速度を犠牲にしてまではできない
という限界はあるだろうけど。RTTIみたいに、便利だけど組み込むと重くなる
みたいなのもあるから。
568デフォルトの名無しさん
2015/12/11(金) 07:39:54.62ID:5f66mx0p >>567
> そういえばbegin 、end、then とか打つの面倒とかいう意見も昔はあったけど
自分は Shift + ホームポジションから離れたカッコを多用する C 系よりは アルファベットで begin end 書く方がいいな。
仕事ではどうしても C 系の言語が多いので慣れてしまったが。
型推論は、var で型を指定しておいて、.Create だけで生成できるとかが Pascal 的なような気がした。
> そういえばbegin 、end、then とか打つの面倒とかいう意見も昔はあったけど
自分は Shift + ホームポジションから離れたカッコを多用する C 系よりは アルファベットで begin end 書く方がいいな。
仕事ではどうしても C 系の言語が多いので慣れてしまったが。
型推論は、var で型を指定しておいて、.Create だけで生成できるとかが Pascal 的なような気がした。
2015/12/14(月) 16:02:55.66ID:jrJGPcXG
Lasarus 1.6 では component/googleapis なるものがあるな
570デフォルトの名無しさん
2016/01/06(水) 09:53:07.11ID:NFROdDVv CustomDrawnをインストールし、ボタンなどを配置してみましたが、どれもコンパイルが通りません。
1.4.4、1.6RCもダメでgithubの最新版も通りませんでした。
OSはWindows7です。
カラーボタンを使いたいのでCustomDrawnが良いのですが、使えた方いますか。
1.4.4、1.6RCもダメでgithubの最新版も通りませんでした。
OSはWindows7です。
カラーボタンを使いたいのでCustomDrawnが良いのですが、使えた方いますか。
571デフォルトの名無しさん
2016/01/06(水) 14:08:20.57ID:CjQqR9Km 確か最近修正があった気がするからtruncでないとだめかも。
>カラーボタンを使いたい
ほんとにそれだけの理由なら標準のウィジェットでもできるよ。
CustomDrawnだと日本語入力とかできないしデメリットのほうが多い気がする。
>カラーボタンを使いたい
ほんとにそれだけの理由なら標準のウィジェットでもできるよ。
CustomDrawnだと日本語入力とかできないしデメリットのほうが多い気がする。
572デフォルトの名無しさん
2016/01/06(水) 15:40:56.45ID:NFROdDVv >ほんとにそれだけの理由なら標準のウィジェットでもできるよ。
どのコンポーネントでできるの?
今のところCustomDrawnで日本語を使う予定がないので、英語でも良いんですけどね。。
どのコンポーネントでできるの?
今のところCustomDrawnで日本語を使う予定がないので、英語でも良いんですけどね。。
573デフォルトの名無しさん
2016/01/06(水) 21:17:50.57ID:NFROdDVv BGRA Controlでできたからこれでいいや。
ありがとう。
あとはCaptionを2行にする方法を考えねば。
TButtonでは2行にできたけどね。
ありがとう。
あとはCaptionを2行にする方法を考えねば。
TButtonでは2行にできたけどね。
574デフォルトの名無しさん
2016/01/07(木) 08:13:29.34ID:a/3WDvAp 今が一番楽しい過程だね。
すぐにできると思うから頑張れ!
すぐにできると思うから頑張れ!
575デフォルトの名無しさん
2016/01/07(木) 12:19:25.71ID:gX24XSHP IDE は一つのウィンドウにして欲しいな。
複数開いてそれぞれのモニタにとかいうのが気軽にできん。
複数開いてそれぞれのモニタにとかいうのが気軽にできん。
576デフォルトの名無しさん
2016/01/07(木) 14:33:28.16ID:a/3WDvAp やったことないけどドッキングに対応してたはずだよ。
577デフォルトの名無しさん
2016/01/07(木) 23:00:29.83ID:gX24XSHP えー、そうだったっけ。
またそのうち調べてみよう。
またそのうち調べてみよう。
578デフォルトの名無しさん
2016/01/09(土) 19:57:11.08ID:fothuBCk ドッキングで検索するとすぐに出てくるよ。
慣れたこともあるけどでもすぐに戻した。
だんだん、delphiよりも使いやすくなってきた。
慣れたこともあるけどでもすぐに戻した。
だんだん、delphiよりも使いやすくなってきた。
579デフォルトの名無しさん
2016/01/14(木) 15:35:51.69ID:6X801Scf laztoapkで教えて下さい。
Windowsでプログラムができあがってandroidでもと思い、laztoapkでAPKを作ったのですがタイマーアプリなってしまいます。
テンプレートから読んできているようなので、そこを変更しようと思いましたがわかりません。
どのファイルを修正したらよいでしょうか。
Windowsでプログラムができあがってandroidでもと思い、laztoapkでAPKを作ったのですがタイマーアプリなってしまいます。
テンプレートから読んできているようなので、そこを変更しようと思いましたがわかりません。
どのファイルを修正したらよいでしょうか。
580デフォルトの名無しさん
2016/01/18(月) 12:55:25.72ID:q56KQpC7 日本語でおk
581デフォルトの名無しさん
2016/01/23(土) 20:47:52.62ID:D4qGQ1Np androidの簡単なプログラムを作っています。
wikiを見ながらsoまでできたのですが、次にどうしたらいいのでしょうか。
見本のプロジェクトをいただけるとうれしいのですが。
wikiを見ながらsoまでできたのですが、次にどうしたらいいのでしょうか。
見本のプロジェクトをいただけるとうれしいのですが。
582デフォルトの名無しさん
2016/01/24(日) 18:48:57.02ID:p6kDIgY3 apkを作る
583デフォルトの名無しさん
2016/01/24(日) 20:21:03.36ID:Uk5KU7qQ 真面目に頼むよ〜〜
584デフォルトの名無しさん
2016/01/25(月) 11:20:48.12ID:vXkDYhH7 というかsoできたならあとは言語関係ない
(Lazarus特有の問題はない)よね。
(Lazarus特有の問題はない)よね。
585デフォルトの名無しさん
2016/01/25(月) 13:20:14.70ID:5K/mn6Ow soだよ
586デフォルトの名無しさん
2016/01/26(火) 10:02:27.99ID:Dinjng1c soですね
587デフォルトの名無しさん
2016/02/05(金) 20:11:14.14ID:KzMEKa8Y やっとandroidにコンパイルできた。
javaの事はさっぱりわからんから、作れただけでもよしとするか。
TButtonの背景は、やっぱり色が付かないね。
javaの事はさっぱりわからんから、作れただけでもよしとするか。
TButtonの背景は、やっぱり色が付かないね。
588デフォルトの名無しさん
2016/02/06(土) 12:08:28.51ID:BlYk2woR TButtonがWindowsのボタンコントロールを使用しているので
ボタンの色はWindowsが決定してしまうからどうにもならない
という問題だったキガス。
というわけで既出のとおりWindowsのボタンコントロールに依存しない
カスタムボタンを使用するしかない。
ボタンの色はWindowsが決定してしまうからどうにもならない
という問題だったキガス。
というわけで既出のとおりWindowsのボタンコントロールに依存しない
カスタムボタンを使用するしかない。
589デフォルトの名無しさん
2016/02/06(土) 13:23:20.11ID:AJ/62bd2 android用にコンパイルしたら変わると思ったけどダメだね。
590デフォルトの名無しさん
2016/02/10(水) 14:34:11.58ID:MWnoFMqP Lazarusでandroidの簡単なプログラムを作成しています。
動作を遅くするための遅延をかけたいのですが、Windowsにコンパイルすると正常に動くものの、androidではウエイトタイマーが働きません。
サンプルをネットから持ってきて試しましたが、全部動きませんでした。
簡単でいいので教えてください。
動作を遅くするための遅延をかけたいのですが、Windowsにコンパイルすると正常に動くものの、androidではウエイトタイマーが働きません。
サンプルをネットから持ってきて試しましたが、全部動きませんでした。
簡単でいいので教えてください。
591デフォルトの名無しさん
2016/02/11(木) 10:24:59.82ID:mrMs7bvP >>590
sleep でだめなの?
sleep でだめなの?
592デフォルトの名無しさん
2016/02/11(木) 12:33:39.96ID:YrAhwDVz ダメだった。delayもダメ。
mmsystemも使えないし。
タイマーコンポーネントなしで書きたいんだけど、うまくいかない。
mmsystemも使えないし。
タイマーコンポーネントなしで書きたいんだけど、うまくいかない。
593デフォルトの名無しさん
2016/02/11(木) 18:10:17.22ID:RtkuQ1aq はまり込んだけど何とか遅延タイマーできた。
594デフォルトの名無しさん
2016/02/17(水) 12:13:38.47ID:YWa48D4x うちではsleepで無問題だが。
unit単位で関数が重複してんじゃね?
unit単位で関数が重複してんじゃね?
595デフォルトの名無しさん
2016/02/20(土) 14:06:46.13ID:SSwzx6vZ androidアプリで教えてください。
マルチタッチはできますか。あるボタンを押しながら、別のボタンを押す処理をしたいのです。
それからもう一つ、アプリ終了の処理でcloseやterminateでは終了できませんでした。できる方法がありましたら教えてください。
マルチタッチはできますか。あるボタンを押しながら、別のボタンを押す処理をしたいのです。
それからもう一つ、アプリ終了の処理でcloseやterminateでは終了できませんでした。できる方法がありましたら教えてください。
596デフォルトの名無しさん
2016/02/21(日) 21:40:45.15ID:3hIUa4lO 数枚の画像を埋め込んでパラパラ変えるようなプログラムを考えています。
JPG画像の埋め込み方を教えて下さい。
JPG画像の埋め込み方を教えて下さい。
597デフォルトの名無しさん
2016/02/22(月) 09:15:50.74ID:s0/IzlKL 色々なやり方が考えられるが $R でリソースに取り込んで
LoadFro,Resourceとかで読み込むというのが簡単じゃね。
基本は同じだからDelphiの超初心者スレで聞いてみれ。
LoadFro,Resourceとかで読み込むというのが簡単じゃね。
基本は同じだからDelphiの超初心者スレで聞いてみれ。
598デフォルトの名無しさん
2016/02/22(月) 12:55:01.70ID:k3buX2lD599デフォルトの名無しさん
2016/02/25(木) 04:57:55.42ID:7sNDanuc おいおいおいおい、いつの間にか1.6出てるじゃんよ。
書き込んでくれないから、気付くの遅れたよ。
書き込んでくれないから、気付くの遅れたよ。
600デフォルトの名無しさん
2016/02/27(土) 20:07:48.97ID:3JVa16cC 最近インストールしたばかりだが
よく出来てるねこれ
よく出来てるねこれ
601デフォルトの名無しさん
2016/02/29(月) 22:38:02.78ID:kP0lL60S Laz 1.6.0 + FPC 3.3.0 を Windows にインストールしました。
FPC3 ではこれが通るのかと思っていたら動作しませんね。
var
s: UTF8String;
begin
s := '123あいうえお456';
ShowMessage(Copy(s, 5, 3));
end;
従来の
uses LazUTF8
ShowMessage(UTF8Copy(s, 5, 3));
は使えるけど。
FPC3 ではこれが通るのかと思っていたら動作しませんね。
var
s: UTF8String;
begin
s := '123あいうえお456';
ShowMessage(Copy(s, 5, 3));
end;
従来の
uses LazUTF8
ShowMessage(UTF8Copy(s, 5, 3));
は使えるけど。
602デフォルトの名無しさん
2016/03/01(火) 08:16:01.11ID:DN1WpGc2 Copy、Insert、Delete、Lengthなどの伝統的関数(手続)が
要素単位(ANSIやUTF8ではバイト単位、UTF16ではワード単位)を
基準にするというのは永久不滅かと。
要素単位(ANSIやUTF8ではバイト単位、UTF16ではワード単位)を
基準にするというのは永久不滅かと。
603601
2016/03/02(水) 21:07:51.79ID:sexlA1qQ それはどうですかね。
引数に文字列リテラルか定数を渡せば期待する動作をしますが変数では駄目なのです。
引数に文字列リテラルか定数を渡せば期待する動作をしますが変数では駄目なのです。
604デフォルトの名無しさん
2016/03/02(水) 21:45:17.29ID:iifCqHnV 「通る」「動作しません」「使える」「期待する動作」「駄目」などの
曖昧な言葉が多くてよくわからんな。
少し整理して機械翻訳でもいいから英語にして本家のフォーラム
で質問すると中の人が返事をくれると思うよ。
曖昧な言葉が多くてよくわからんな。
少し整理して機械翻訳でもいいから英語にして本家のフォーラム
で質問すると中の人が返事をくれると思うよ。
605デフォルトの名無しさん
2016/03/03(木) 01:14:14.44ID:j+gb/hiZ コンパイルのタイミングで、リテラルはAnsiStringとして評価、文字列定数はおそらく最適化によりAnsiStringにでもなったんじゃないの、なんとなくだけど。
606デフォルトの名無しさん
2016/03/03(木) 01:19:05.87ID:j+gb/hiZ 文字列定数、
const AAA = 'foo';
としてれば、最適化うんぬん関係なく、AnsiStringとして評価されそう。
一方、
const BBB: string = 'bar';
だと、変数と同じ結果になりそう。
(今手元に環境ないから試せない)
const AAA = 'foo';
としてれば、最適化うんぬん関係なく、AnsiStringとして評価されそう。
一方、
const BBB: string = 'bar';
だと、変数と同じ結果になりそう。
(今手元に環境ないから試せない)
607デフォルトの名無しさん
2016/03/03(木) 10:25:00.04ID:wPT/TcQN 型なし文字列定数のコードページはCP_NONE?
608デフォルトの名無しさん
2016/03/11(金) 18:06:14.35ID:kd7a12nS Lamw: Lazarus Android Module Wizard
ttps://github.com/jmpessoa/lazandroidmodulewizard
既に使ってみた人いますか?
ttps://github.com/jmpessoa/lazandroidmodulewizard
既に使ってみた人いますか?
609デフォルトの名無しさん
2016/03/14(月) 10:19:13.12ID:h2+VI+P2 >>601
改めて試したけど、そもそもうちでは
var
s: UTF8String;
begin
s := '123あいうえお456';
ShowMessage(s);
end;
で「あいうえお」部分が文字化けする。
s: string;
にすると文字化けしない。
ShowMessageがUTF8Stringに対応してないんじゃあるまいか。
改めて試したけど、そもそもうちでは
var
s: UTF8String;
begin
s := '123あいうえお456';
ShowMessage(s);
end;
で「あいうえお」部分が文字化けする。
s: string;
にすると文字化けしない。
ShowMessageがUTF8Stringに対応してないんじゃあるまいか。
610デフォルトの名無しさん
2016/03/14(月) 10:21:34.75ID:h2+VI+P2611デフォルトの名無しさん
2016/03/14(月) 18:06:18.97ID:h2+VI+P2 >>609
自己レス。ShowMessageの問題ではないみたい。
自己レス。ShowMessageの問題ではないみたい。
612デフォルトの名無しさん
2016/03/14(月) 18:19:06.24ID:h2+VI+P2613デフォルトの名無しさん
2016/03/31(木) 09:15:03.95ID:DT+Zx2Kz >>601
UTF8String を使う場合は、ソースの先頭部付近に
{$codepage UTF8}
を加えるのがほぼ必須みたいです。
そして、copyはやはりコードページを意識しない
(要素単位固定、現在は1要素=1バイト)みたいです。
ですので s: string; とした場合と動作は変わらないみたいです。
UTF8String を使う場合は、ソースの先頭部付近に
{$codepage UTF8}
を加えるのがほぼ必須みたいです。
そして、copyはやはりコードページを意識しない
(要素単位固定、現在は1要素=1バイト)みたいです。
ですので s: string; とした場合と動作は変わらないみたいです。
614デフォルトの名無しさん
2016/04/10(日) 18:47:56.27ID:+pxFkfgJ どうして不人気なんだろう
615デフォルトの名無しさん
2016/04/10(日) 19:28:01.82ID:AbYPTdqD いや、そもそも Pascal が
616デフォルトの名無しさん
2016/04/11(月) 08:09:18.63ID:k7zVs+aP Delphiがああなっちゃったからな
617デフォルトの名無しさん
2016/04/11(月) 14:01:09.14ID:vm/+Ir/o 自分は Pascal 好きなんだけどね。
でも遊びくらいにしか使えないわなあ。
余計な苦労するだけだし。
でも遊びくらいにしか使えないわなあ。
余計な苦労するだけだし。
618デフォルトの名無しさん
2016/04/11(月) 18:04:07.15ID:byY4yMu5619デフォルトの名無しさん
2016/04/11(月) 23:08:16.24ID:vm/+Ir/o >>618
ああ、ここ Linux の板じゃなかったな。
たいていサンプルがあるのって C じゃん?無理やり Pascal に書きなおすか、
なんとかしてドッキングさせたりとかそういうところ。
Windows は、最近はネイティブアプリを作ることがないな。
.NET 使うなら言語の違いは大して意味ないし。
ああ、ここ Linux の板じゃなかったな。
たいていサンプルがあるのって C じゃん?無理やり Pascal に書きなおすか、
なんとかしてドッキングさせたりとかそういうところ。
Windows は、最近はネイティブアプリを作ることがないな。
.NET 使うなら言語の違いは大して意味ないし。
620デフォルトの名無しさん
2016/04/12(火) 07:42:12.61ID:Xft6WNxx たいした苦労してねぇじゃんw
621デフォルトの名無しさん
2016/04/12(火) 19:58:26.51ID:7vlrxoJS そ、そうだな
(誰も苦労話なんかしてないんだが……)
(誰も苦労話なんかしてないんだが……)
622デフォルトの名無しさん
2016/04/13(水) 08:12:25.93ID:phkpqyMN 俺は逆にCをPascalに移植するの好きだけどな。
変にマニュアルとか読むよりも仕様がよくわかるし
何よりもPascalの便利さがわかる。
変にマニュアルとか読むよりも仕様がよくわかるし
何よりもPascalの便利さがわかる。
623デフォルトの名無しさん
2016/04/13(水) 08:39:28.24ID:nekRTpPK でも1万行とか、移植しかねるけどなぁ。
624デフォルトの名無しさん
2016/04/14(木) 08:09:53.69ID:PaNxRcDi それはケースバイケースで、CでDLLを作るという手もあるよ。
いずれにせよCでできることはObjectPascalでもほぼできるわけで
慣れれば困るということはないよ。
僕の経験上で今までObjectPascalでできなかったのは
デバイスドライバ開発時のメモリアドレスの絶対指定ぐらいかな。
いずれにせよCでできることはObjectPascalでもほぼできるわけで
慣れれば困るということはないよ。
僕の経験上で今までObjectPascalでできなかったのは
デバイスドライバ開発時のメモリアドレスの絶対指定ぐらいかな。
625デフォルトの名無しさん
2016/04/14(木) 10:14:23.22ID:J0RiNZuZ Delphi3でデバイスドライバーを作ってる人見たが
VCと混合だったかな
うろおぼえ
VCと混合だったかな
うろおぼえ
626デフォルトの名無しさん
2016/04/23(土) 22:03:11.97ID:xOcN8gUA ツールのDelphi Conversionで簡単なDelphiプロジェクトをLazarusに変換したんだけど
コンパイルしようとすると「プロジェクトにメインソースファイルがありません」って出ちゃう
どこをいじったらいいでしょう?
コンパイルしようとすると「プロジェクトにメインソースファイルがありません」って出ちゃう
どこをいじったらいいでしょう?
627デフォルトの名無しさん
2016/04/24(日) 10:19:11.75ID:HIJpSTnw 変換前のDelphiプロジェクトはこれです
http://fast-uploader.com/file/7016973507576/
http://fast-uploader.com/file/7016973507576/
628デフォルトの名無しさん
2016/04/27(水) 10:18:46.99ID:xY/IN+83 >>626
試したけどそのようなエラーは出なかったよ
試したけどそのようなエラーは出なかったよ
629デフォルトの名無しさん
2016/04/28(木) 18:14:24.74ID:5KpvszkH630デフォルトの名無しさん
2016/04/29(金) 16:31:19.76ID:wdLdMMLy631デフォルトの名無しさん
2016/05/08(日) 13:18:08.88ID:hQ0WJbMm Shift_JIS漢字を含む文字列をUTF-8文字列に変換したいのですが
AnsiToUtf8関数は見当違いですか?
試してみましたがうまくいきませんでした
AnsiToUtf8関数は見当違いですか?
試してみましたがうまくいきませんでした
632デフォルトの名無しさん
2016/05/08(日) 15:01:22.75ID:pwQcqOb7 そりゃANSIだからな
633デフォルトの名無しさん
2016/05/08(日) 15:21:32.70ID:i4zyqzbf OSがWindowsなら見当違いじゃないよ
634デフォルトの名無しさん
2016/05/08(日) 18:47:19.53ID:hQ0WJbMm635デフォルトの名無しさん
2016/05/08(日) 19:23:38.54ID:pwQcqOb7 WindowsならAPIがあるよ
636デフォルトの名無しさん
2016/05/08(日) 22:14:02.22ID:HqJeT4yF 15年ぶりぐらいでプログラミングを
Lazarus で復帰し、半年ほど前からさわってるけどこうやって変換してるよ。Ver1.6
ただしLConvertEncode Unitの半角カナの扱いにバグがありConverterEncode() で半角カナが消える。
全角とANSIなら問題ない。
LConvertEncodeのasiancodepagefunctions.inc のDBCSToUTF8() のソースコードを少し修正すればOk。
uses
LazUTF8Classes,LazUTF8,.....,LConvEncording;
中略
SL:=TStringList.Create;
try
LoadStringsFromFileUTF8(SL, filename);
for i := 0 to SL.Count - 1 do begin
if GuessEncoding(SL[i]) = 'cp932' then
Memo.Lines.Add(ConvertEncoding(SL[i], 'cp932', 'utf8')) // SJIS to UTF8コード変換
else
Memo.Lines.Add(SL[i]);
end;
finally
FreeAndNil(SL);
end;
Lazarus で復帰し、半年ほど前からさわってるけどこうやって変換してるよ。Ver1.6
ただしLConvertEncode Unitの半角カナの扱いにバグがありConverterEncode() で半角カナが消える。
全角とANSIなら問題ない。
LConvertEncodeのasiancodepagefunctions.inc のDBCSToUTF8() のソースコードを少し修正すればOk。
uses
LazUTF8Classes,LazUTF8,.....,LConvEncording;
中略
SL:=TStringList.Create;
try
LoadStringsFromFileUTF8(SL, filename);
for i := 0 to SL.Count - 1 do begin
if GuessEncoding(SL[i]) = 'cp932' then
Memo.Lines.Add(ConvertEncoding(SL[i], 'cp932', 'utf8')) // SJIS to UTF8コード変換
else
Memo.Lines.Add(SL[i]);
end;
finally
FreeAndNil(SL);
end;
637デフォルトの名無しさん
2016/05/08(日) 22:55:56.40ID:HqJeT4yF >>636
C:\lazarus\components\lazutils\lconvencoding.pasのConvertEncoding(SL[i], 'cp932', 'utf8')で半角カナ が消える件
asiancodepagefunctions.inc の下記ルーチンがCP932 SJISの半角カナを正しくハンドリングできていない
function DBCSToUTF8(const s: string; CodeP: integer): string;
:
:
repeat
c := Src^;
Inc(Src);
if Ord(c) < 128 then begin
if (c=#0) and (Src-PChar(s)>=len) then break;
Dest^ := c;
Inc(Dest);
end
else begin
code := Byte(c) shl 8; <---- Ord(c) > $80 の時は無条件に2Byte文字にしているのがNG
c:=Src^;
if (c=#0) and (Src-PChar(s)>=len) then break;
code := code + Byte(c);
Inc(Src);
C:\lazarus\components\lazutils\lconvencoding.pasのConvertEncoding(SL[i], 'cp932', 'utf8')で半角カナ が消える件
asiancodepagefunctions.inc の下記ルーチンがCP932 SJISの半角カナを正しくハンドリングできていない
function DBCSToUTF8(const s: string; CodeP: integer): string;
:
:
repeat
c := Src^;
Inc(Src);
if Ord(c) < 128 then begin
if (c=#0) and (Src-PChar(s)>=len) then break;
Dest^ := c;
Inc(Dest);
end
else begin
code := Byte(c) shl 8; <---- Ord(c) > $80 の時は無条件に2Byte文字にしているのがNG
c:=Src^;
if (c=#0) and (Src-PChar(s)>=len) then break;
code := code + Byte(c);
Inc(Src);
638デフォルトの名無しさん
2016/05/08(日) 23:00:44.78ID:HqJeT4yF >>636 以下 修正したコードだけど、参考まで。
function DBCSToUTF8(const s: string; CodeP: integer): string;
:
const // 半角カナ 対応
HankakuKanaUTF8Code:array[$A1..$DF] of array[1..3] of Byte
=(($EF,$BD,$A1),($EF,$BD,$A2),($EF,$BD,$A3),($EF,$BD,$A4),($EF,$BD,$A5),($EF,$BD,$A6),($EF,$BD,$A7),($EF,$BD,$A8),
($EF,$BD,$A9),($EF,$BD,$AA),($EF,$BD,$AB),($EF,$BD,$AC),($EF,$BD,$AD),($EF,$BD,$AE),($EF,$BD,$AF),($EF,$BD,$B0),
($EF,$BD,$B1),($EF,$BD,$B2),($EF,$BD,$B3),($EF,$BD,$B4),($EF,$BD,$B5),($EF,$BD,$B6),($EF,$BD,$B7),($EF,$BD,$B8),
($EF,$BD,$B9),($EF,$BD,$BA),($EF,$BD,$BB),($EF,$BD,$BC),($EF,$BD,$BD),($EF,$BD,$BE),($EF,$BD,$BF),($EF,$BE,$80),
($EF,$BE,$81),($EF,$BE,$82),($EF,$BE,$83),($EF,$BE,$84),($EF,$BE,$85),($EF,$BE,$86),($EF,$BE,$87),($EF,$BE,$88),
($EF,$BE,$89),($EF,$BE,$8A),($EF,$BE,$8B),($EF,$BE,$8C),($EF,$BE,$8D),($EF,$BE,$8E),($EF,$BE,$8F),($EF,$BE,$90),
($EF,$BE,$91),($EF,$BE,$92),($EF,$BE,$93),($EF,$BE,$94),($EF,$BE,$95),($EF,$BE,$96),($EF,$BE,$97),($EF,$BE,$98),
($EF,$BE,$99),($EF,$BE,$9A),($EF,$BE,$9B),($EF,$BE,$9C),($EF,$BE,$9D),($EF,$BE,$9E),($EF,$BE,$9F));
// ここまで
begin
:
repeat
:
begin
if (c=#0) and (Src-PChar(s)>=len) then break;
Dest^ := c;
Inc(Dest);
end
else if (CodeP = 932) and (Ord(c) >= $A1) and (Ord(c) <= $DF) then begin // 半角カナ 対応
Dest^ := Char(HankakuKanaUTF8Code[Ord(c)][1]);
Inc(Dest);
Dest^ := Char(HankakuKanaUTF8Code[Ord(c)][2]);
Inc(Dest);
Dest^ := Char(HankakuKanaUTF8Code[Ord(c)][3]);
Inc(Dest);
end // ここまで
function DBCSToUTF8(const s: string; CodeP: integer): string;
:
const // 半角カナ 対応
HankakuKanaUTF8Code:array[$A1..$DF] of array[1..3] of Byte
=(($EF,$BD,$A1),($EF,$BD,$A2),($EF,$BD,$A3),($EF,$BD,$A4),($EF,$BD,$A5),($EF,$BD,$A6),($EF,$BD,$A7),($EF,$BD,$A8),
($EF,$BD,$A9),($EF,$BD,$AA),($EF,$BD,$AB),($EF,$BD,$AC),($EF,$BD,$AD),($EF,$BD,$AE),($EF,$BD,$AF),($EF,$BD,$B0),
($EF,$BD,$B1),($EF,$BD,$B2),($EF,$BD,$B3),($EF,$BD,$B4),($EF,$BD,$B5),($EF,$BD,$B6),($EF,$BD,$B7),($EF,$BD,$B8),
($EF,$BD,$B9),($EF,$BD,$BA),($EF,$BD,$BB),($EF,$BD,$BC),($EF,$BD,$BD),($EF,$BD,$BE),($EF,$BD,$BF),($EF,$BE,$80),
($EF,$BE,$81),($EF,$BE,$82),($EF,$BE,$83),($EF,$BE,$84),($EF,$BE,$85),($EF,$BE,$86),($EF,$BE,$87),($EF,$BE,$88),
($EF,$BE,$89),($EF,$BE,$8A),($EF,$BE,$8B),($EF,$BE,$8C),($EF,$BE,$8D),($EF,$BE,$8E),($EF,$BE,$8F),($EF,$BE,$90),
($EF,$BE,$91),($EF,$BE,$92),($EF,$BE,$93),($EF,$BE,$94),($EF,$BE,$95),($EF,$BE,$96),($EF,$BE,$97),($EF,$BE,$98),
($EF,$BE,$99),($EF,$BE,$9A),($EF,$BE,$9B),($EF,$BE,$9C),($EF,$BE,$9D),($EF,$BE,$9E),($EF,$BE,$9F));
// ここまで
begin
:
repeat
:
begin
if (c=#0) and (Src-PChar(s)>=len) then break;
Dest^ := c;
Inc(Dest);
end
else if (CodeP = 932) and (Ord(c) >= $A1) and (Ord(c) <= $DF) then begin // 半角カナ 対応
Dest^ := Char(HankakuKanaUTF8Code[Ord(c)][1]);
Inc(Dest);
Dest^ := Char(HankakuKanaUTF8Code[Ord(c)][2]);
Inc(Dest);
Dest^ := Char(HankakuKanaUTF8Code[Ord(c)][3]);
Inc(Dest);
end // ここまで
639デフォルトの名無しさん
2016/05/09(月) 20:03:45.11ID:df1MgNYQ640デフォルトの名無しさん
2016/05/09(月) 21:59:01.22ID:df1MgNYQ641デフォルトの名無しさん
2016/05/10(火) 08:00:47.53ID:EV5/gRyu >>640
素直に SetStringCodePage を使えば?
素直に SetStringCodePage を使えば?
642デフォルトの名無しさん
2016/05/10(火) 08:19:54.24ID:EV5/gRyu643デフォルトの名無しさん
2016/05/10(火) 17:28:34.34ID:juYdG8tQ >>640
636だけど良い方法分かったらレポよろしく。
10数年前にDelphi 7を使ったのが最後だったんでLazarusで半角カナ混じりのSJISテキストファイル表示するのに試行錯誤したよ。
知らなかっただけかもしれないが当時はUnix がEUC主流でUTFなんて無かったような。
636だけど良い方法分かったらレポよろしく。
10数年前にDelphi 7を使ったのが最後だったんでLazarusで半角カナ混じりのSJISテキストファイル表示するのに試行錯誤したよ。
知らなかっただけかもしれないが当時はUnix がEUC主流でUTFなんて無かったような。
644デフォルトの名無しさん
2016/05/10(火) 19:02:26.62ID:CkL9FHEL delphi7は、一応utf-8に変換する関数は用意されてるね。
基本面のみなので、サロゲートペアを適切に扱ってはくれないけど。
基本面のみなので、サロゲートペアを適切に扱ってはくれないけど。
645640
2016/05/10(火) 22:51:51.91ID:ZbVjwRdt 一応こんな感じで今のところうまくいっています
1.uses節にWindowsを追加
2.varはこんな感じ
var
SJStr, U8Str: String;
WStr: WideString;
Wlen: Integer;
3.ShiftJIStoUTF8内
WLen:=MultiByteToWideChar(CP_OEMCP,MB_PRECOMPOSED,PChar(SJStr),
Length(SJStr),PWideChar(WStr),0);
SetLength(WStr,WLen);
MultiByteToWideChar(CP_OEMCP,MB_PRECOMPOSED,PChar(SJStr),
Length(SJStr),PWideChar(WStr),WLen);
U8Str:=String(WStr);
//半角Spaceを全角Space ni置き換えています
SJStrはShift_JIS String
U8StrはUTF-8 String
APIを2回Callしているのは1回目で変換後のサイズを取得して2回目で実際に変換しているからです
API出力のUTF-16をPWideChar(array of WideChar)とかで受けて
String(PWideChar(…とかするとうまく変換してくれませんでした
(コンパイルは通るけど)
String(WideString(PWideChar(…なら変換してくれました
なので最初からAPIの出力はWideStringで受けています
しばらくこんな感じで使ってみて不具合が出たらまた考えて見ます
皆さんいろいろな助言をありがとうございました
1.uses節にWindowsを追加
2.varはこんな感じ
var
SJStr, U8Str: String;
WStr: WideString;
Wlen: Integer;
3.ShiftJIStoUTF8内
WLen:=MultiByteToWideChar(CP_OEMCP,MB_PRECOMPOSED,PChar(SJStr),
Length(SJStr),PWideChar(WStr),0);
SetLength(WStr,WLen);
MultiByteToWideChar(CP_OEMCP,MB_PRECOMPOSED,PChar(SJStr),
Length(SJStr),PWideChar(WStr),WLen);
U8Str:=String(WStr);
//半角Spaceを全角Space ni置き換えています
SJStrはShift_JIS String
U8StrはUTF-8 String
APIを2回Callしているのは1回目で変換後のサイズを取得して2回目で実際に変換しているからです
API出力のUTF-16をPWideChar(array of WideChar)とかで受けて
String(PWideChar(…とかするとうまく変換してくれませんでした
(コンパイルは通るけど)
String(WideString(PWideChar(…なら変換してくれました
なので最初からAPIの出力はWideStringで受けています
しばらくこんな感じで使ってみて不具合が出たらまた考えて見ます
皆さんいろいろな助言をありがとうございました
646640
2016/05/10(火) 23:19:26.73ID:ZbVjwRdt テスト用のProjectです
http://yahoo.jp/box/Vl_y-O
http://yahoo.jp/box/Vl_y-O
647640
2016/05/10(火) 23:41:44.72ID:ZbVjwRdt ファイルが壊れていたので再UPしました
http://yahoo.jp/box/wFfctM
http://yahoo.jp/box/wFfctM
648デフォルトの名無しさん
2016/05/11(水) 08:48:13.55ID:dFlNvgk/ 難しく考え過ぎじゃない?
LazUTF8 か SetCodePage じゃだめなの?
procedure TForm1.Button1Click(Sender: TObject);
var
s, s1, s2: string;
sl: tstringlist;
begin
s:= 'ABCDEFGあいうえおアイウエオ';
s1:= UTF8ToWinCP(s);
Label1.Caption:= LazUTF8.WinCPToUTF8(s1);
s2:= s;
SetCodePage(RawByteString(s2), 932{SJIS}, true);
Label2.Caption:= LazUTF8.WinCPToUTF8(s2);
end;
LazUTF8 か SetCodePage じゃだめなの?
procedure TForm1.Button1Click(Sender: TObject);
var
s, s1, s2: string;
sl: tstringlist;
begin
s:= 'ABCDEFGあいうえおアイウエオ';
s1:= UTF8ToWinCP(s);
Label1.Caption:= LazUTF8.WinCPToUTF8(s1);
s2:= s;
SetCodePage(RawByteString(s2), 932{SJIS}, true);
Label2.Caption:= LazUTF8.WinCPToUTF8(s2);
end;
649デフォルトの名無しさん
2016/05/11(水) 22:06:49.06ID:44k2tpxg650デフォルトの名無しさん
2016/05/25(水) 00:13:49.87ID:QLrAFpkQ >>648
slは?
slは?
651デフォルトの名無しさん
2016/05/25(水) 08:41:27.50ID:ZPEsWqSz652デフォルトの名無しさん
2016/05/26(木) 00:50:04.87ID:ud38oY6v >>651
なるほど了解
なるほど了解
653デフォルトの名無しさん
2016/05/28(土) 11:29:41.05ID:1CNQzrIS SysUtilsのFileCreate,FileOpen,FileRead,FileWriteは使わないほうがいいですか?
Byteの動的配列をSetlengthしてFileReadに食わせたらFileReadはエラーが出ないけれど
それ以降の動的配列のアクセスすべてで例外が発生します。
Byteの動的配列をSetlengthしてFileReadに食わせたらFileReadはエラーが出ないけれど
それ以降の動的配列のアクセスすべてで例外が発生します。
654デフォルトの名無しさん
2016/05/28(土) 15:04:50.57ID:bhUf6De/ >>653
こういう質問のときはエラーになるコードも書いてよ
まぁ状況から察するには
×FileRead(FileHandle, a, Count)
○FileRead(FileHandle, a[0], Count)
こういう質問のときはエラーになるコードも書いてよ
まぁ状況から察するには
×FileRead(FileHandle, a, Count)
○FileRead(FileHandle, a[0], Count)
655デフォルトの名無しさん
2016/05/28(土) 15:41:31.05ID:1CNQzrIS656デフォルトの名無しさん
2016/05/29(日) 22:53:35.12ID:CgTmLBtG 自分で使う用にリネームツールを作ってたんだけど
もしかしてFileExistsとかRenameFileって2バイトコード対応してないのですかね?
もしかしてFileExistsとかRenameFileって2バイトコード対応してないのですかね?
657656
2016/05/29(日) 23:05:42.58ID:CgTmLBtG 「Lazarusのだと」ってことね
念の為w
念の為w
658デフォルトの名無しさん
2016/05/30(月) 10:19:18.03ID:CyoOVxjo 質問するならせめて用語くらいは正しく使おうよ。
2バイトコードがSJISのことだと仮定すると
(なぜならUTF8の日本語は3バイトなので)
Lazの文字コ−ドは標準がUTF8なのでUTF8-SJIS変換をかませる必要がある。
なお、Laz v1.6以降のFileExistsやRenameFileはUTF8にフル対応してる。
Laz v1.4以前は FileExistsUTF8 などを使う必要がある。
2バイトコードがSJISのことだと仮定すると
(なぜならUTF8の日本語は3バイトなので)
Lazの文字コ−ドは標準がUTF8なのでUTF8-SJIS変換をかませる必要がある。
なお、Laz v1.6以降のFileExistsやRenameFileはUTF8にフル対応してる。
Laz v1.4以前は FileExistsUTF8 などを使う必要がある。
659デフォルトの名無しさん
2016/05/30(月) 20:27:03.00ID:8YY6SnwS660デフォルトの名無しさん
2016/06/10(金) 17:51:09.92ID:l84CA5RZ これってdelphiで作ったプロジェクトをコンパイルできますか?
661デフォルトの名無しさん
2016/06/10(金) 20:01:04.17ID:sPlWs0BN コンバートできるものとできないものがある。
さすがに修正することが多いですね。
さすがに修正することが多いですね。
662デフォルトの名無しさん
2016/06/10(金) 23:04:41.83ID:l84CA5RZ >>661
ありがとう
ありがとう
レスを投稿する
ニュース
- 中国「国連安保理の許可なしに日本攻撃可能」 Xで旧敵国条項に言及… ★10 [BFU★]
- 高市首相告白「『なめられない服』を選ぶことに数時間を費やしました」「外交交渉でマウント取れる服、買わなくてはいかんかもなぁ」★2 [ぐれ★]
- 首相官邸前で「戦争あおるな」 台湾有事巡る答弁に抗議 ★2 [蚤の市★]
- 【高市リスク】立民・小西洋之参院議員「高市総理がとんでもない安全保障オンチで外交オンチ」 [ぐれ★]
- 『DOWNTOWN+』会員数50万人突破で見えてきた 松本人志の“月収4ケタ万円”驚愕収入 [阿弥陀ヶ峰★]
- 【芸能】元モー娘・福田明日香、真の脱退理由を告白「本当のこと言ったら同調圧力」 双極性障害も公表「もう復活できないかも」 [冬月記者★]
- 【フジテレビ】2025 FORMULA 1【NEXT】Lap599
- 福島競馬3回5日目
- こいせん 全レス転載禁止
- 巨専】
- 【DAZN】フォーミュラGP【F1 2 3 SF P】Lap1806
- とらせん IP
- 高市、ワークライフバランスを捨ててなかった事が判明!口だけだったんだね <mark>[ひまわり学級]</mark> [511393199]
- 高市「借金して経済対策21兆円だ!」 [503119534]
- 【悲報】高市政権関係者「閣僚には円安が何かよくわかってない人がいる」「総理もデメリットを理解してない」🤤 [359965264]
- 【悲報】国連、日本を「先進国」から「高所得国」へ再分類、事実上の格下げ [769931615]
- 【正義のミカタ】ほんこん さん「非核三原則は憲法に書いてない。核兵器持ったらええがな」 [201193242]
- 日本『おい飲みにいくぞ』←誰が最初にくる?w
