- -pv
スレッドの閲覧状況:
現在、- がスレを見ています。
これまでに合計 - 表示されました。
※PC・スマホの表示回数をカウントしてます。
※24時間表示がないスレのPVはリセットされます。

Lazarus と Free Pascal

※ID非表示スレ
1名無しさん@おーぷん:2015/12/09(水)12:38:51 ID:???
Lazarus Homepage
http://www.lazarus-ide.org/

Free Pascal - Advanced open source Pascal compiler for Pascal and Object Pascal - Home Page
http://www.freepascal.org/

>>1-10 その他の情報
2名無しさん@おーぷん :2015/12/09(水)12:39:11 ID:???
wikipedia等

Free Pascal - Wikipedia
https://ja.wikipedia.org/wiki/Free_Pascal

Lazarus - Wikipedia
https://ja.wikipedia.org/wiki/Lazarus

Lazarus Component Library - Wikipedia, the free encyclopedia
https://en.wikipedia.org/wiki/Lazarus_Component_Library

Screenshots - Lazarus wiki
http://wiki.lazarus.freepascal.org/Screenshots
3名無しさん@おーぷん :2015/12/09(水)12:39:46 ID:???
Lazarus

Lazarus Documentation - Free Pascal wiki
http://wiki.freepascal.org/Lazarus_Documentation

Lazarus Tutorial - Free Pascal wiki
http://wiki.freepascal.org/Lazarus_Tutorial

Lazarus Application Gallery - Free Pascal wiki
http://wiki.freepascal.org/Lazarus_Application_Gallery

graemeg/lazarus ・ GitHub
https://github.com/graemeg/lazarus

Lazarus - Index
http://forum.lazarus.freepascal.org/index.php
4名無しさん@おーぷん :2015/12/09(水)12:40:05 ID:???
Free Pascal

FPC documentation - Free Pascal wiki
http://wiki.freepascal.org/FPC_documentation

graemeg/freepascal ・ GitHub
https://github.com/graemeg/freepascal
5名無しさん@おーぷん :2015/12/09(水)12:45:52 ID:???
検索

Lazarusの検索結果 - おーぷん2ちゃんねるヘッドライン
http://open2ch.net/headline.cgi?bbs=tech&q=Lazarus

site:open2ch.net Lazarus - Google 検索
https://www.google.co.jp/search?q=site:open2ch.net+Lazarus

site:2ch.net Lazarus - Google 検索
https://www.google.co.jp/search?q=site%3A2ch.net+Lazarus

Free Pascal - Google 検索
https://www.google.co.jp/search?q=Free+Pascal

Lazarus - Google 検索
https://www.google.co.jp/search?q=Lazarus
6名無しさん@おーぷん :2015/12/09(水)12:54:03 ID:???
open2ch関連スレ

なぜDelphiは最強なのか
http://toro.open2ch.net/test/read.cgi/tech/1339042817/l50

2ch 関連スレ

【Delphi互換!?】FreePascal【GPL】
http://pc12.2ch.net/test/read.cgi/tech/1137051510/l50
2006/01/12(木) 16:38:30 ~ 2009/12/22(火) 10:55:36

【Delphi互換!?】FreePascal/Lazarus その2【GPL】
http://peace.2ch.net/test/read.cgi/tech/1261676778/l50
2009/12/25(金) 02:46:18 ~ 2015/11/30(月) 09:54:05.89(継続中)
7名無しさん@おーぷん :2015/12/09(水)13:38:45 ID:???
とりあえず試してみたい場合は、
Linuxのそのへんのディストリビューションに入ってることがあるので、
探してみる。LiveUSBなんかにも入ってるかも。

とりあえず実行
Lazarusを実行 → F9キーを押す(コンパイル+実行) → ウィンドウが出てくる

あるいは、
Lazarusを実行 → コンポーネントをペタペタ貼る → F9キーを押す
→ コンポーネントがペタペタ貼られたウィンドウが出てくる
8名無しさん@おーぷん :2015/12/10(木)12:34:44 ID:???
まーたチラ裏スレ
9名無しさん@おーぷん :2015/12/10(木)15:44:22 ID:???
レス付いたと思ったら(´・ω・`)
10名無しさん@おーぷん :2015/12/22(火)04:50:31 ID:???
そのへんのディストリビューションに入ってなかった
11名無しさん@おーぷん :2016/01/03(日)02:20:15 ID:???
C:\work>fpc
Free Pascal Compiler version 2.6.2 [2013/02/12] for i386
Copyright (c) 1993-2012 by Florian Klaempfl and others
C:\FPC\2.6.2\bin\i386-Win32\ppc386.exe [options] <inputfile> [options]
Put + after a boolean switch option to enable it, - to disable it
-a The compiler doesn't delete the generated assembler file
-al List sourcecode lines in assembler file
-an List node info in assembler file
-ar List register allocation/release info in assembler file
-at List temp allocation/release info in assembler file
-A<x> Output format:
-Adefault Use default assembler
-Aas Assemble using GNU AS
-Amacho Mach-O (Darwin, Intel 32 bit) using internal writer
-Anasmcoff COFF (Go32v2) file using Nasm
-Anasmelf ELF32 (Linux) file using Nasm
-Anasmwin32Win32 object file using Nasm
-AnasmwdosxWin32/WDOSX object file using Nasm
-Awasm Obj file using Wasm (Watcom)
-Anasmobj Obj file using Nasm
-Amasm Obj file using Masm (Microsoft)
-Atasm Obj file using Tasm (Borland)
-Aelf ELF (Linux) using internal writer
*** press enter ***
12名無しさん@おーぷん :2016/01/03(日)02:21:21 ID:???
-b Generate browser info
-bl Generate local symbol info
-B Build all modules
-C<x> Code generation options:
-C3<x> Turn on ieee error checking for constants
-Ca<x> Select ABI, see fpc -i for possible values
-Cb Generate big-endian code
-Cc<x> Set default calling convention to <x>
-CD Create also dynamic library (not supported)
-Ce Compilation with emulated floating point opcodes
-Cf<x> Select fpu instruction set to use, see fpc -i for possible valu
es
-CF<x> Minimal floating point constant precision (default, 32, 64)
-Cg Generate PIC code
-Ch<n> <n> bytes heap (between 1023 and 67107840)
-Ci IO-checking
-Cn Omit linking stage
-Co Check overflow of integer operations
-CO Check for possible overflow of integer operations
-Cp<x> Select instruction set, see fpc -i for possible values
-CP<x>=<y> packing settings
-CPPACKSET=<y> <y> set allocation: 0, 1 or DEFAULT or NORMAL, 2, 4 and
8
*** press enter ***
13名無しさん@おーぷん :2016/01/03(日)02:21:40 ID:???
-Cr Range checking
-CR Verify object method call validity
-Cs<n> Set stack checking size to <n>
-Ct Stack checking (for testing only, see manual)
-CX Create also smartlinked library
-d<x> Defines the symbol <x>
-D Generate a DEF file
-Dd<x> Set description to <x>
-Dv<x> Set DLL version to <x>
-e<x> Set path to executable
-E Same as -Cn
-fPIC Same as -Cg
-F<x> Set file names and paths:
-Fa<x>[,y] (for a program) load units <x> and [y] before uses is parsed
-Fc<x> Set input codepage to <x>
-FC<x> Set RC compiler binary name to <x>
-Fd Disable the compiler's internal directory cache
-FD<x> Set the directory where to search for compiler utilities
-Fe<x> Redirect error output to <x>
-Ff<x> Add <x> to framework path (Darwin only)
-FE<x> Set exe/unit output path to <x>
-Fi<x> Add <x> to include path
-Fl<x> Add <x> to library path
*** press enter ***
14名無しさん@おーぷん :2016/01/03(日)02:22:01 ID:???
-Fo<x> Add <x> to object path
-Fr<x> Load error message file <x>
-FR<x> Set resource (.res) linker to <x>
-Fu<x> Add <x> to unit path
-FU<x> Set unit output path to <x>, overrides -FE
-FW<x> Store generated whole-program optimization feedback in <x>
-Fw<x> Load previously stored whole-program optimization feedback from
<x>
-g Generate debug information (default format for target)
-gc Generate checks for pointers
-gh Use heaptrace unit (for memory leak/corruption debugging)
-gl Use line info unit (show more info with backtraces)
-go<x> Set debug information options
-godwarfsets Enable DWARF 'set' type debug information (breaks gdb < 6.
5)
-gostabsabsincludes Store absolute/full include file paths in Stabs
-godwarfmethodclassprefix Prefix method names in DWARF with class name
-gp Preserve case in stabs symbol names
-gs Generate Stabs debug information
-gt Trash local variables (to detect uninitialized uses)
-gv Generates programs traceable with Valgrind
-gw Generate DWARFv2 debug information (same as -gw2)
-gw2 Generate DWARFv2 debug information
*** press enter ***
15名無しさん@おーぷん :2016/01/03(日)02:22:24 ID:???
-gw3 Generate DWARFv3 debug information
-gw4 Generate DWARFv4 debug information (experimental)
-i Information
-iD Return compiler date
-iV Return short compiler version
-iW Return full compiler version
-iSO Return compiler OS
-iSP Return compiler host processor
-iTO Return target OS
-iTP Return target processor
-I<x> Add <x> to include path
-k<x> Pass <x> to the linker
-l Write logo
-M<x> Set language mode to <x>
-Mfpc Free Pascal dialect (default)
-Mobjfpc FPC mode with Object Pascal support
-Mdelphi Delphi 7 compatibility mode
-Mtp TP/BP 7.0 compatibility mode
-Mmacpas Macintosh Pascal dialects compatibility mode
-n Do not read the default config files
-N<x> Node tree optimizations
-Nu Unroll loops
-o<x> Change the name of the executable produced to <x>
*** press enter ***
16名無しさん@おーぷん :2016/01/03(日)02:22:43 ID:???
-O2 Level 2 optimizations (-O1 + quick optimizations)
-O3 Level 3 optimizations (-O2 + slow optimizations)
-Oa<x>=<y> Set alignment
-Oo[NO]<x> Enable or disable optimizations, see fpc -i for possible values

-Op<x> Set target cpu for optimizing, see fpc -i for possible values
-OW<x> Generate whole-program optimization feedback for optimization <
x>, see fpc -i for possible values
-Ow<x> Perform whole-program optimization <x>, see fpc -i for possible
values
-Os Optimize for size rather than speed
-pg Generate profile code for gprof (defines FPC_PROFILE)
-R<x> Assembler reading style:
-Rdefault Use default assembler for target
-Ratt Read AT&T style assembler
-Rintel Read Intel style assembler
-S<x> Syntax options:
-S2 Same as -Mobjfpc
-Sc Support operators like C (*=,+=,/= and -=)
-Sa Turn on assertions
-Sd Same as -Mdelphi
-Se<x> Error options. <x> is a combination of the following:
<n> : Compiler halts after the <n> errors (default is 1)
*** press enter ***
17名無しさん@おーぷん :2016/01/03(日)02:23:07 ID:???
w : Compiler also halts after warnings
n : Compiler also halts after notes
h : Compiler also halts after hints
-Sg Enable LABEL and GOTO (default in -Mtp and -Mdelphi)
-Sh Use ansistrings by default instead of shortstrings
-Si Turn on inlining of procedures/functions declared as "inline"
-Sk Load fpcylix unit
-SI<x> Set interface style to <x>
-SIcom COM compatible interface (default)
-SIcorba CORBA compatible interface
-Sm Support macros like C (global)
-So Same as -Mtp
-Ss Constructor name must be init (destructor must be done)
-Sx Enable exception keywords (default in Delphi/ObjFPC modes)
-Sy @<pointer> returns a typed pointer, same as $T+
-s Do not call assembler and linker
-sh Generate script to link on host
-st Generate script to link on target
-sr Skip register allocation phase (use with -alr)
-T<x> Target operating system:
-Tdarwin Darwin/Mac OS X
-Temx OS/2 via EMX (including EMX/RSX extender)
-Tfreebsd FreeBSD
*** press enter ***
18名無しさん@おーぷん :2016/01/03(日)02:23:27 ID:???
-Tgo32v2 Version 2 of DJ Delorie DOS extender
-Tiphonesim iPhoneSimulator from iOS SDK 3.2+ (older versions: -Tdarwin)
-Tlinux Linux
-Tnetbsd NetBSD
-Tnetware Novell Netware Module (clib)
-Tnetwlibc Novell Netware Module (libc)
-Topenbsd OpenBSD
-Tos2 OS/2 / eComStation
-Tsunos SunOS/Solaris
-Tsymbian Symbian OS
-Tsolaris Solaris
-Twatcom Watcom compatible DOS extender
-Twdosx WDOSX DOS extender
-Twin32 Windows 32 Bit
-Twince Windows CE
-u<x> Undefines the symbol <x>
-U Unit options:
-Un Do not check where the unit name matches the file name
-Ur Generate release unit files (never automatically recompiled)
-Us Compile a system unit
-v<x> Be verbose. <x> is a combination of the following letters:
e : Show errors (default) 0 : Show nothing (except errors)
w : Show warnings u : Show unit info
*** press enter ***
19名無しさん@おーぷん :2016/01/03(日)02:23:44 ID:???
h : Show hints c : Show conditionals
i : Show general info d : Show debug info
l : Show linenumbers r : Rhide/GCC compatibility mode
s : Show time stamps q : Show message numbers
a : Show everything x : Executable info (Win32 only)
b : Write file names messages p : Write tree.log with parse tree
with full path v : Write fpcdebug.txt with
lots of debugging info
m<x>,<y> : Don't show messages numbered <x> and <y>
-W<x> Target-specific options (targets)
-WA Specify native type application (Windows)
-Wb Create a bundle instead of a library (Darwin)
-WB Create a relocatable image (Windows, Symbian)
-WBxxxx Set image base to xxxx (Windows, Symbian)
-WC Specify console type application (EMX, OS/2, Windows)
-WD Use DEFFILE to export functions of DLL or EXE (Windows)
-We Use external resources (Darwin)
-WF Specify full-screen type application (EMX, OS/2)
-WG Specify graphic type application (EMX, OS/2, Windows)
-Wi Use internal resources (Darwin)
-WI Turn on/off the usage of import sections (Windows)
-WM<x> Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Darwin)

*** press enter ***
20名無しさん@おーぷん :2016/01/03(日)02:24:04 ID:???
nux)
-Xd Do not search default library path (sometimes required for cros
s-compiling when not using -XR)
-Xe Use external linker
-Xg Create debuginfo in a separate file and add a debuglink section
to executable
-XD Try to link units dynamically (defines FPC_LINK_DYNAMIC)
-Xi Use internal linker
-Xm Generate link map
-XM<x> Set the name of the 'main' program routine (default is 'main')
-XP<x> Prepend the binutils names with the prefix <x>
-Xr<x> Set the linker's rlink-path to <x> (needed for cross compile, s
ee the ld manual for more information) (BeOS, Linux)
-XR<x> Prepend <x> to all linker search paths (BeOS, Darwin, FreeBSD,
Linux, Mac OS, Solaris)
-Xs Strip all symbols from executable
-XS Try to link units statically (default, defines FPC_LINK_STATIC)

-Xt Link with static libraries (-static is passed to linker)
-XX Try to smartlink units (defines FPC_LINK_SMART)

-? Show this help
-h Shows this help without waiting

C:\work>
21名無しさん@おーぷん :2016/01/21(木)10:08:16 ID:???
デヴィッド・ボウイ - Wikipedia
https://ja.wikipedia.org/wiki/%E3%83%87%E3%83%B4%E3%82%A3%E3%83%83%E3%83%89%E3%83%BB%E3%83%9C%E3%82%A6%E3%82%A4
>その収録曲「Lazarus」は、自らの死期を悟っていたボウイがプロデューサーのトニー・ヴィスコンティと共に、
>ファンへの最後のメッセージを盛り込んだ内容となっている[17][18]。
22名無しさん@おーぷん :2016/10/13(木)17:34:45 ID:???
Fedoraではソフトウェアの一覧に無いので
sudo yum install lazarus

でインストールできる
deprecated って出るけど

あと、管理者権限の無いユーザーはそのままだと
sudo が使えないので、管理者アカウントを作ろう。

Install on Fedora - Free Pascal wiki
http://wiki.freepascal.org/Install_on_Fedora
23名無しさん@おーぷん :2016/10/16(日)12:00:21 ID:???
LinuxからWin32のバイナリを作るのは結構難しいのか?

IDEの再構築でターゲットを選べたんだけど、FPCが対応してないって出た。
24名無しさん@おーぷん :2016/10/21(金)21:39:23 ID:???
Fedora+LXDEで、ソースエディタにフォーカスがあるとき、
Alt+Fでファイルメニューがでないんだけど、私だけかな?
25名無しさん@おーぷん :2016/10/24(月)18:24:08 ID:???
1.4.4だったので、

https://sourceforge.net/projects/lazarus/files/Lazarus%20Linux%20x86_64%20RPM/Lazarus%201.6/

Fedora23で、ここにあるファイルを3つダウンロードして、
ダブルクリックしてインストールしたんだけど、

FPCに設定ファイルが無い

と出て、コンパイルできなくなったわ。
26名無しさん@おーぷん :2016/10/24(月)19:06:10 ID:???
二つフォルダがあるのはなぜなんだろう
usr の方に実体があるみたいだけど

/lib64/lazarus
/usr/lib64/lazarus
27名無しさん@おーぷん :2016/11/02(水)21:14:55 ID:???
Windows Vista以降の設定ファイルの場所
C:\Users\<User name>\AppData\Local\lazarus\

xml形式

Multiple Lazarus - Free Pascal wiki
http://wiki.freepascal.org/Multiple_Lazarus#The_config_directory
28名無しさん@おーぷん :2016/11/02(水)21:49:54 ID:???
1.6でコンポーネントパレットからいらないコンポーネントやタブを削除する方法

メインメニューから、パッケージメニューの「パッケージをインストールもしくわアンインストール」
から、パッケージ毎アンインストールで、大まかに削除できる。

細かいのは、
コンポーネントパレットのコンポーネントのアイコンを右クリックしてパッケージを開いて、
Register関数から削除しないといけない。
29名無しさん@おーぷん :2016/11/02(水)22:07:20 ID:???
外部プログラムの実行方法

Executing External Programs/ja - Free Pascal wiki
http://wiki.freepascal.org/Executing_External_Programs/ja
30名無しさん@おーぷん :2016/11/02(水)22:40:34 ID:???
自作パッケージがおかしくなったら、一度アンインストールをして、
もう一度インストールしなおせばいいのかな。
二重に登録されてたわ
31名無しさん@おーぷん :2016/11/02(水)22:54:35 ID:???
exeファイルの出力先はどこで指定するんだ?
いつもプロジェクトファイルと同じ場所に出来てしまう
32名無しさん@おーぷん :2016/11/02(水)23:04:49 ID:???
パッケージの再コンパイルで、パッケージに含まれているユニットの
initialization と finalization は発生しない。

自動的にアンインストールして再インストールはしてくれないのだろうか

Ctrl+F9 でもパッケージの再コンパイルはできない。

パッケージファイル(*.lpk)をから直接起動した場合、
無名プロジェクトが自動的に作られてしまう。
コンパイルすると、こっちがコンパイルされる
33名無しさん@おーぷん :2016/11/02(水)23:26:52 ID:???
IDEを改造するパッケージを作るなら、
要求されたパッケージのところに
IDEIntf
を追加しないといけないみたい。
34名無しさん@おーぷん :2016/11/02(水)23:50:21 ID:???
パッケージはコンパイルボタンは押さずに、
いきなりインストールで、コンパイルとインストール+再起動してくれる
でも、再起動後にパッケージを開きなおさないとダメ
35名無しさん@おーぷん :2016/11/02(水)23:56:59 ID:???
lpkファイル
たとえば、test.lpk
これに対応したファイルがtest.pasになるんだけど、
test.pasは test.lpk から生成されているだけだから、
いじるなら、 test.lpkをいじらないとダメ。

具体的には、IDEでXMLファイルとして開くか、メモ帳なんかでもいい。

んで、
<HasRegisterProc Value="True"/>
を追加するんだ
そうしないと、Register 関数を呼んでくれない。

追加するばしょは、パッケージメニューから、
「新しいコンポーネント。。。」で適当なコンポーネントを
作ればわかると思う。
この場合は自動的に、HasRegisterProd Value="True" が付くんだよな。
36名無しさん@おーぷん :2016/11/03(木)00:02:06 ID:???
パッケージのせいでLazarusが起動しなくなったら、
C:\Users\<User name>\AppData\Local\lazarus\packagefiles.xml
からそのパッケージを削除
37名無しさん@おーぷん :2016/11/03(木)00:08:16 ID:???
mnuMain で ヘルプ(H)の右に追加できました


日本語メニューはアクセラレータキーが殆ど設定されていないんだな
英語はCaptionの最初の文字が自動的にアクセラレータキーになるから
38名無しさん@おーぷん :2016/11/05(土)17:11:44 ID:???
管理者アカウントでインストールして、
非管理者アカウントで実行すると、

Unable to delete old state file "D:\lazarus\components\lazutils\lib\i386-win32\LazUtils.compiled"
for package LazUtils 1.0.

が出たわ。
39名無しさん@おーぷん :2016/11/05(土)17:18:22 ID:???
Basic question on Lazarus installation (admin vs. non-admin)
http://forum.lazarus.freepascal.org/index.php?topic=29606.0
40名無しさん@おーぷん :2016/11/05(土)17:31:53 ID:???
テストフォルダは、
「ツール」メニューの、オプション-環境-ファイル
で、「テストプロジェクトを構築するディレクトリ」を
アクセス可能なディレクトリに変更すればいい。
41名無しさん@おーぷん :2016/11/05(土)17:34:14 ID:???
38の問題は、インストールしたLazarusフォルダ以下の全ファイル、フォルダを
書込み禁止を解除
アクセス許可をフルコントロール
にしたらエラーは出なくなった。

\components\lazutils\lib\i386-win32\LazUtils.compiled はなぜか書き込めないように
なってた。 たぶん、他にもあるのかもね。
42名無しさん@おーぷん :2016/11/05(土)17:38:26 ID:???
IDEを再構築するとLazarus.exeが190MBになる問題は、
最適化されたIDEを選べば 14MB まで減らせる。
GNUのデバッガの問題らしい。

対象ディレクトリ(出力先)が起動時のLazarus.exeでも
問題なかった。

起動不能・コンパイル不能になると困るので、
初期のバージョンはどこかに退避しておいた方がよさそうだ。



43名無しさん@おーぷん :2016/11/05(土)17:50:57 ID:???
TMemoの水平方向のスクルールバーが出ないな
44名無しさん@おーぷん :2016/11/05(土)19:19:26 ID:???
パッケージを開くと、
「テストプロジェクトを構築するディレクトリ」
にあるプロジェクトが自動的に開かれるのか。

ご丁寧に、フォームが無と、勝手に作ってくれる。
45名無しさん@おーぷん :2016/11/05(土)19:56:52 ID:???
Extending the IDE - Lazarus wiki
http://wiki.freepascal.org/Extending_the_IDE
46名無しさん@おーぷん :2016/11/05(土)20:22:37 ID:???
IDE Window: Configure Build Lazarus - Lazarus wiki
http://wiki.lazarus.freepascal.org/IDE_Window:_Configure_Build_Lazarus
You can easily compile a basic IDE on the command line.

cd /path/to/lazarus
make clean all
47名無しさん@おーぷん :2016/11/05(土)20:27:01 ID:???
lcl の Application.int 内はトレースできたけど、
なぜか fpcフォルダ内にある CustApp.pas 内はトレースできなかった。

TCustomApplication = Class(TComponent)
48名無しさん@おーぷん :2016/11/05(土)20:29:38 ID:???
CustApp.pas をプロジェクトフォルダにコピーしたら
別のエラーが出た。

見つけたら自動的にコンパイル、リンクされるんだね
49名無しさん@おーぷん :2016/11/05(土)20:36:23 ID:???
コンパイルできなくなったら、
Clean up and Build

Delphiにおける再構築みたいだ
他にも「構築」「ファイルを構築」があるが、
良くわからん
50名無しさん@おーぷん :2016/11/05(土)20:47:25 ID:???
上書きモードでも改行で行が挿入されるの、なんとかならんおかね
51名無しさん@おーぷん :2016/11/05(土)20:52:20 ID:???
>>44 は最後に開かれたプロジェクトみたい
52名無しさん@おーぷん :2016/11/05(土)20:54:51 ID:???
これはダメ
D:\lazarus\lazarus.exe NoPackage
if Application.HasOption('NoPackage') then Exit;


これはいい
D:\lazarus\lazarus.exe -NoPackage
if Application.HasOption('-NoPackage') then Exit;
53名無しさん@おーぷん :2016/11/05(土)21:16:23 ID:???
パスが見つからない

RegisterIDEMenuCommand - Google 検索
https://www.google.co.jp/search?q=RegisterIDEMenuCommand

RegisterIDEMenuCommand('IDEMainMenu/mnuTools/itmSecondaryTools', 'TestItem','TestItem', nil, @TestItemClick);
RegisterIDEMenuCommand('mnuMain/mnuTools/itmSecondaryTools', 'TestItem','TestItem', nil, @TestItemClick);
54名無しさん@おーぷん :2016/11/05(土)21:51:02 ID:???
子がいれば TIDEMenuSection
いなければ TIDEMenuCommand
55名無しさん@おーぷん :2016/11/05(土)22:07:46 ID:???
ずっとRegisterIDEMenuSectionを使ってたけど、
RegisterIDESubMenuじゃないとダメみたい。

procedure TestItemClick(Sender: TObject);
begin
ShowMessage('Test');
end;

procedure Register;
var
Parent: TIDEMenuSection;
begin
Beep;
if Application.HasOption('-NoPackage') then Exit;
try
Parent := RegisterIDESubMenu(mnuMain, 'TestMenu','Test(&Q)', nil, nil);
RegisterIDEMenuCommand(Parent, 'TestItem','TestItem(&Q)', nil, @TestItemClick);
except
on E: Exception do ShowMessage(E.Message);
end;
end;

56名無しさん@おーぷん :2016/11/05(土)22:16:10 ID:???
パスでの指定はこうだった

procedure ShowFormsItemClick(Sender: TObject);
var
I: Integer;
S: string;
begin
S := '';
for I := 0 to Screen.FormCount - 1 do
S := S + Screen.Forms[I].Name + SLineBreak;
ShowMessage(S);
end;

RegisterIDEMenuCommand('IDEMainMenu/TestMenu', 'ShowFormsItem','ShowForms(&F)', nil, @ShowFormsItemClick);
57名無しさん@おーぷん :2016/11/05(土)22:34:23 ID:???
これで取得した場合、Nameは設定されてなかった

procedure TestItemClick(Sender: TObject);
var
I: Integer;
S: string;
begin
for I := 0 to Application.MainForm.Menu.Items.Count - 1 do
S := S + Application.MainForm.Menu.Items[I].Name + ': ' +
Application.MainForm.Menu.Items[I].Caption + SLineBreak;
ShowMessage(S);
end;
58名無しさん@おーぷん :2016/11/05(土)22:44:26 ID:???
メニュー項目にNameは設定されてないな
だから、名前で呼び出すことが出来ない
59名無しさん@おーぷん :2016/11/05(土)23:26:09 ID:???
メッセージウィンドウへの追加はこう
uses
IDEExternToolIntf, IDEMsgIntf;

IDEMessagesWindow.AddCustomMessage(mluDebug, TimeToStr(Now) + ':TestMessage');
60名無しさん@おーぷん :2016/11/05(土)23:55:47 ID:???
itmFileNew: TIDEMenuSection;

難しいことやってるね
なんで itmFileNewが TIDEMenuSectionなのかというと、
新規ユニット
新規フォーム
新規...
の三つのメニューがあるからかね
61名無しさん@おーぷん :2016/11/05(土)23:58:42 ID:???
itmFileNew.MenuItem というふうに、TMenuItem オブジェクトを取得できるんだけど、
itmFileNew.MenuItem.Count = 0 なんだな。
62名無しさん@おーぷん :2016/11/06(日)04:36:38 ID:???
uses
LazIDEIntf, ProjectIntf;

LazarusIDE.DoNewEditorFile(FileDescriptorUnit, 'All.out', 'Test', [nfOpenInEditor]);
63名無しさん@おーぷん :2016/11/06(日)14:05:48 ID:???
The Lazarus Archives
http://lists.lazarus.freepascal.org/pipermail/lazarus/

Free Pascal - Lazarus | Mailing List Archive
http://free-pascal-lazarus.989080.n3.nabble.com/
64名無しさん@おーぷん :2016/11/06(日)19:13:07 ID:???
条件付きコンパイル(Delphi) - RAD Studio
http://docwiki.embarcadero.com/RADStudio/Berlin/ja/%E6%9D%A1%E4%BB%B6%E4%BB%98%E3%81%8D%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB%EF%BC%88Delphi%EF%BC%89

Platform defines - Lazarus wiki
http://wiki.freepascal.org/Platform_defines
65名無しさん@おーぷん :2016/11/06(日)19:14:23 ID:???
FreePascal detection and versioning | Delphi Programming | Fandom powered by Wikia
http://delphi.wikia.com/wiki/FreePascal_detection_and_versioning
{$ifdef FPC}
// put your FPC code here
{$else}
// assume Delphi or TP here.
{$endif}
66名無しさん@おーぷん :2016/11/08(火)05:27:01 ID:???
DelphiはDLLからApplicationやScreenにアクセスできたと思うんだけど、
Lazarusは出来ないんだな。
67名無しさん@おーぷん :2016/11/08(火)06:57:58 ID:???
だからパッケージのインストールでIDEを再コンパイルする必要があるのか
68名無しさん@おーぷん :2016/11/10(木)14:45:08 ID:???
これで検索すると、60000超えあたりでハングアップする

69名無しさん@おーぷん :2016/11/10(木)14:47:22 ID:???
パッケージの開発は、IDEの再コンパイル→IDEの再起動でいいみたい。
変更が反映されるのにIDEが再起動してから数秒かかるみたい。
70名無しさん@おーぷん :2016/11/10(木)14:59:50 ID:???
LazarusIDE 等のグローバル変数を lazarus.exeから
パッケージ用のdllにコピーするのはありなのかな。
71名無しさん@おーぷん :2016/11/10(木)23:00:25 ID:???
不安定になったわ
72名無しさん@おーぷん :2016/11/11(金)17:13:04 ID:???
>>46 はダメだわ
用意されていない

必須パッケージ以外をすべてアンインストールできるから、
そうやって作ったlazarus.exeを別名で保存しておく、
のはどうか
73名無しさん@おーぷん :2016/11/11(金)17:14:33 ID:???
それともこういうのを使うのか

lazbuild - Free Pascal wiki
http://wiki.freepascal.org/lazbuild
74名無しさん@おーぷん :2016/11/12(土)22:19:36 ID:???
Delphiでは CPU32BITS
Lazarusでは CPU32

{$IFDEF CPU32BITS OR CPU32}
みたいにやるのかね
75名無しさん@おーぷん :2016/11/13(日)19:34:54 ID:???
fcllaz.pas(0,0) Fatal: Can not find unit system used by fcllaz of package FCL.
http://forum.lazarus.freepascal.org/index.php?topic=27292.0

が出たんだけど、直せない・・・
アプリの日本語がすべて文字化けするようになったから、
こりゃ「Cleanup and Build」やろ!
と思ってやったら、コンパイルすら出来なくなってしまった。
76名無しさん@おーぷん :2016/11/13(日)19:46:27 ID:???
手動でパッケージFPCに見つからないと言われたファイルを追加していったら、
今度は Fatal: Selected assembler reader not supported ってでた
77名無しさん@おーぷん :2016/11/13(日)19:49:11 ID:???
Fatal :Selected assembler reader not supported
http://forum.lazarus.freepascal.org/index.php?topic=23001.0
{$ASMMODE att}
追加で先に進めた
またしばらくファイルの追加かな
78名無しさん@おーぷん :2016/11/13(日)19:56:13 ID:???
Error: Duplicate identifier "SYSTEM" が出た
手動で追加したからだろうか
79名無しさん@おーぷん :2016/11/13(日)20:30:16 ID:???
"Lazarus 構築"を設定 ...
のオプションに
-Fuや-Fi でパスを追加していけば、ちょっとずつ進むけど、
終わりが見えない。
パスものすごくあるから
80名無しさん@おーぷん :2016/11/13(日)20:59:16 ID:???
\lazarus\以下の全パスに
-Fu と -Fi をつけたのをオプションで渡したら、
Panic: internal error: unable to execute: Failed to execute :206
と出やがった
81名無しさん@おーぷん :2016/11/13(日)21:20:35 ID:???
2170個まで減らしたけど、まだ出るな
82名無しさん@おーぷん :2016/11/13(日)21:51:02 ID:???
259個ならPanicにはならないけど、
SHortStringがらみのエラーが出るな
83名無しさん@おーぷん :2016/11/13(日)21:56:55 ID:???
660でパニックになるな
84名無しさん@おーぷん :2016/11/13(日)22:12:51 ID:???
string型の変数の [0] にアクセスするコートでエラーになってる
そこは直したが、今度は .intファイルをコンパイルしようとしてエラーになった。

パスを伝えただけで、なんでコンパイルするのだろう?
85名無しさん@おーぷん :2016/11/13(日)22:32:15 ID:???
設定ファイルを全部削除してもエラーが出た
再インストールしたわ、もう
アンインストールは速かった
86名無しさん@おーぷん :2016/11/13(日)22:38:15 ID:???
型の定義を見ようとしても
文法ミスがあると、Ctrl+左クリックで一切飛べない
でもユニット名がわからないから、エラーを無くせない。

だから、ファイル内検索を多用するんだけど、
検索を速くするために、\lazarus\以下のファイル、フォルダを減らすのは
いいかもしれないですね
87名無しさん@おーぷん :2016/11/13(日)22:49:00 ID:???
再インストール前提だわ

DB関連も標準のパッケージに含めているのはいただけないな
88名無しさん@おーぷん :2016/11/14(月)02:18:30 ID:???
インデックス化してじゃんじゃん探したいぐらいだわ
89名無しさん@おーぷん :2016/11/18(金)18:51:29 ID:???
Lazarus 1.6.2 - Released
http://forum.lazarus.freepascal.org/index.php/topic,34807.0.html

Lazarus 1.6 fixes branch - Free Pascal wiki
http://wiki.freepascal.org/Lazarus_1.6_fixes_branch#Fixes_for_1.6.2_.28merged.29
90名無しさん@おーぷん :2016/11/25(金)23:01:25 ID:???
もっと細かいUNDOが欲しいのだが
キャレットの移動のみとか
91名無しさん@おーぷん :2016/11/27(日)09:05:45 ID:???
[ユニットのエイリアス] って無いのかね?

[Delphi コンパイラ] - RAD Studio
http://docwiki.embarcadero.com/RADStudio/Berlin/ja/%EF%BC%BBDelphi_%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9%EF%BC%BD
92名無しさん@おーぷん :2016/11/29(火)08:26:29 ID:???
Publications by Michael Van Canneyt
http://www.freepascal.org/~michael/articles/
93名無しさん@おーぷん :2016/11/29(火)08:32:43 ID:???
Publications by Michael Van Canneyt
Extending the Lazarus IDE: Menus and the Source editor.
http://www.freepascal.org/~michael/articles/#lazide3
94名無しさん@おーぷん :2016/11/30(水)07:57:23 ID:???
CodeToolを使うには、 uses CodeToolManager を追加するだけではだめで、
パッケージの「要求されたパッケージ」のところに、CodeTools パッケージを
追加する必要がある。

Extending the IDE - Lazarus wiki
http://wiki.freepascal.org/Extending_the_IDE#Adding_a_resource_directive_to_a_file
95名無しさん@おーぷん :2016/11/30(水)08:08:30 ID:???
Codetools - Free Pascal wiki
http://wiki.freepascal.org/Codetools#Using_the_codetools_in_the_IDE_with_the_IDEIntf
96名無しさん@おーぷん :2016/11/30(水)22:25:37 ID:???
Extending the IDE - Lazarus wiki
http://wiki.freepascal.org/Extending_the_IDE#Install_packages

にある方法が、IDEパッケージの開発に一番いいみたい
97名無しさん@おーぷん :2016/12/03(土)04:56:29 ID:???
んーー、でも、ソースを書き換えても、
反映されないときがある
98名無しさん@おーぷん :2016/12/04(日)10:14:36 ID:???
パッケージウィンドウにファイルを追加しておけば、
ちゃんとコンパイルされるのかも
99名無しさん@おーぷん :2016/12/05(月)14:25:13 ID:???
クロスプラットフォームで短く書けるのは、
全部同期関数(外部プログラムが終わるまでハング)
なのかね?

Executing External Programs/ja - Free Pascal wiki
http://wiki.lazarus.freepascal.org/Executing_External_Programs/ja
100名無しさん@おーぷん :2016/12/06(火)12:06:38 ID:???
iniファイルで、セクション名のある行は、
[の左に空白があってもセクションになるのか。

まとめてインデントしてコメントに出来ない。
101名無しさん@おーぷん :2016/12/07(水)14:00:01 ID:???
>>68 は、
TreeNodeの作成に時間が掛かってたみたいだ
Win32
102名無しさん@おーぷん :2016/12/16(金)15:15:29 ID:???
FCLとLCLはLGPLだから、リンクしてもアプリのソースを公開する必要はない。
RTLとパッケージもLGPL。

Lazarus
http://www.lazarus-ide.org/index.php?page=about
The FCL (Free Pascal Component Libraries) and the LCL (which will eventually become
part of the FCL) are licensed under a modified LGPL.

Free Pascal - Advanced open source Pascal compiler for Pascal and Object Pascal - Home Page
http://www.freepascal.org/
The packages and runtime library come under a modified Library GNU Public License to
allow the use of static libraries when creating applications.
103名無しさん@おーぷん :2016/12/16(金)15:15:44 ID:???
歴史

History - Free Pascal wiki
http://wiki.lazarus.freepascal.org/History
104名無しさん@おーぷん :2016/12/16(金)15:33:11 ID:???
Lazarus Faq - Lazarus wiki
http://wiki.freepascal.org/Lazarus_Faq#Can_I_make_commercial_plug-ins_for_Lazarus.3F
the IDEIntf part of the IDE is licensed under the LGPL with the same exception,
105名無しさん@おーぷん :2016/12/16(金)15:34:28 ID:???
Lazarus Faq - Lazarus wiki
http://wiki.freepascal.org/Lazarus_Faq#Can_I_make_commercial_applications_with_Lazarus.3F

Can I make commercial applications with Lazarus?

Yes, the LCL is licensed under the LGPL with an exception, which allows you to
link to it statically without releasing the source of your application.
106名無しさん@おーぷん :2016/12/16(金)19:40:19 ID:???
エディタで開こうとしているファイルを見つけられない時があるんだよな。

エクスプローラーでファイルを新規に作って、
そのファイルをコードエディタにドラッグ&ドロップすると、

File "D:\新規 Unit.pas" not found.
Do you want to create it?

と出るときがある。
107名無しさん@おーぷん :2016/12/19(月)13:01:04 ID:???
最後の投稿が2014/02/09 21:50だけどメーリングリスト

Pascalにホエロ!Lazarus,FreePascal|freeml byGMO
http://www.freeml.com/lazarus
108名無しさん@おーぷん :2016/12/20(火)11:39:01 ID:???
Character and string types - Free Pascal wiki
http://wiki.freepascal.org/Character_and_string_types
109名無しさん@おーぷん :2016/12/20(火)11:56:44 ID:???
string = AnsiString = UTF8String = 1~4バイトってことかな
110名無しさん@おーぷん :2016/12/20(火)16:15:33 ID:???
sjisは、LConvEncoding ユニットの
CP932ToUTF8 使って変換する。
111名無しさん@おーぷん :2016/12/20(火)20:25:53 ID:???
なぜか知らないけど文字化けすると思ってたら、
exeがWindows98/WindowsMeの互換モードになってたわ。
112名無しさん@おーぷん :2016/12/22(木)13:33:15 ID:???
Components and Code examples - Free Pascal wiki
http://wiki.freepascal.org/Components_and_Code_examples
113名無しさん@おーぷん :2016/12/22(木)18:14:56 ID:???
lazarus.dciファイルの最後に
[test]
;;;;
;;;;

って追加すると、IDEがぶっ壊れるな
入力中に RangeCheck Error がガンガンでて強制終了する
114名無しさん@おーぷん :2016/12/22(木)18:20:00 ID:???
Lazarus 1.8.0 release notes - Free Pascal wiki
http://wiki.lazarus.freepascal.org/Lazarus_1.8.0_release_notes
115名無しさん@おーぷん :2016/12/22(木)18:56:42 ID:???
;;;;じゃないかもしれん
なんだろう
116名無しさん@おーぷん :2016/12/22(木)19:09:18 ID:???
セクション名に | がない場合だ
だから、 [test]はおかしくなる。
[test | test] なら大丈夫
117名無しさん@おーぷん :2016/12/23(金)14:57:11 ID:???
よくわからん
検索もうまくできない

How do I create a bug report - Lazarus wiki
http://wiki.lazarus.freepascal.org/How_do_I_create_a_bug_report

Tips on writing bug reports - Lazarus wiki
http://wiki.lazarus.freepascal.org/Tips_on_writing_bug_reports

Creating A Patch - Free Pascal wiki
http://wiki.lazarus.freepascal.org/Creating_A_Patch
118名無しさん@おーぷん :2016/12/23(金)18:03:07 ID:???
1文字(1バイト~4バイト)型というのは無いのか
Charは1バイトだし、
WideChar は全部の文字を表現できない
QuadChar とかできるんですかね?
119名無しさん@おーぷん :2016/12/23(金)18:56:57 ID:???
LCL内のトレースの方法がわからん
120名無しさん@おーぷん :2016/12/23(金)19:06:56 ID:???
"Lazarus 構築" を設定...
で、

-g- を消して再構築したら、トレースできました。
ようはパッケージをデバッグ情報付きでコンパイルしないとダメなんだな。
121名無しさん@おーぷん :2016/12/23(金)20:27:47 ID:???
エディタで→がつぶれる
LazSynTextArea.pp の GetNextHighlighterTokenFromVIew あたりに問題が
ありそうだけど

122名無しさん@おーぷん :2016/12/23(金)20:37:58 ID:???
2バイト以上の文字は必ず見た目が2バイト幅じゃないのかね?

SynEditTextBuffer.pp
TSynEditStringList.DoGetPhysicalCharWidths があやしい
123名無しさん@おーぷん :2016/12/23(金)21:07:33 ID:???
わらかん
124名無しさん@おーぷん :2016/12/23(金)21:24:26 ID:???
↕↕↗↗↖↖↘↘↙↙⇨

半角文字あったわ

125名無しさん@おーぷん :2016/12/23(金)21:34:50 ID:???
どうやって調べるんや・・・

東アジアの文字幅 - Wikipedia
https://ja.wikipedia.org/wiki/%E6%9D%B1%E3%82%A2%E3%82%B8%E3%82%A2%E3%81%AE%E6%96%87%E5%AD%97%E5%B9%85
126名無しさん@おーぷん :2016/12/23(金)21:41:07 ID:???
なんかテーブルがあった

http://unicode.org/Public/UNIDATA/EastAsianWidth.txt
127名無しさん@おーぷん :2016/12/23(金)21:54:11 ID:???
2190..2194;A # Sm [5] LEFTWARDS ARROW..LEFT RIGHT ARROW

SynEdit は Aを半角文字として扱ってるっぽい
128名無しさん@おーぷん :2016/12/23(金)22:03:09 ID:???
SynEditTextDoubleWidthChars.pas

Laz にゃん: Lazarus 付属の SynEdit の 文字幅のバグ
http://laznyan.blogspot.jp/2013/10/lazarus-synedit.html
129名無しさん@おーぷん :2016/12/23(金)22:08:13 ID:???
{$DEFINE SynForceDoubeWidthHack}
として、
if (DefaultSystemCodePage = 932) {Japanese}

if (True) に変えたら上手くいった。
130名無しさん@おーぷん :2016/12/23(金)22:16:10 ID:???
if (DefaultSystemCodePage = CP_UTF8) or (DefaultSystemCodePage = 932)
の方がいいか
131名無しさん@おーぷん :2016/12/23(金)23:06:41 ID:???
lazarus.exeを複数起動しないようにしてたら、
lazarus.exe filename でエディタで開ける

文字列をtmpfile に書き込んで、それを開けば
文字列をIDEで開ける。
132名無しさん@おーぷん :2016/12/24(土)19:24:11 ID:???
特性値A(曖昧)はオプションで選べるようにするといいかもね
133名無しさん@おーぷん :2016/12/24(土)19:24:53 ID:???
>>119-120
ユニットに{$D+}を付けたら
そのファイル内をトレースできたわ。
134名無しさん@おーぷん :2016/12/24(土)19:28:27 ID:???
LazLoggerBaseの
OnWidgetSetDebugLn

OnWidgetSetDbgOut
を設定すれば
DebugLnとDgbOut関数が使えるようになった。
LCLソース内でこれらを使って値を表示できる。
標準でメッセージウィドウにでも表示してくれたらいいのに。
135名無しさん@おーぷん :2016/12/24(土)20:36:12 ID:???
IDEをコンパイルするまえに、>>134は解除する必要があるっぽい
136名無しさん@おーぷん :2016/12/24(土)20:46:34 ID:???
解除できなかった
問題が起こる前のIDEを使って再コンパイルしました
137名無しさん@おーぷん :2016/12/25(日)12:11:13 ID:???
finalization で
nil 代入して解除する
138名無しさん@おーぷん :2016/12/25(日)12:20:54 ID:???
文字単位で扱うために、文字用の関数ライブラリがいると思うんだけど

Char は1バイトだし。
letter は AからZまでらしい。
139名無しさん@おーぷん :2016/12/25(日)14:50:49 ID:???
mojilengthを思いついた
140名無しさん@おーぷん :2016/12/26(月)12:18:08 ID:???
New IDE features since - Free Pascal wiki
http://wiki.freepascal.org/New_IDE_features_since
141名無しさん@おーぷん :2016/12/26(月)14:35:09 ID:???
[lazarus] Index of /trunk
http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/?root=lazarus

[lazarus] Index of /trunk
http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/?root=lazarus&sortby=date#dirlist
142名無しさん@おーぷん :2016/12/26(月)15:54:16 ID:???
ユニットの関数名一覧を取得する方法

Re: [lazarus] CodeTools help
https://www.mail-archive.com/lazarus@miraclec.com/msg04411.html
143名無しさん@おーぷん :2016/12/26(月)15:55:42 ID:???
lazaruside.ja.poの
msgid は同じものがあるので注意
msgid "Wheel"
とか
144名無しさん@おーぷん :2016/12/26(月)16:45:41 ID:???
CodeToolsはIDE以外からも使えるけど、GPLだから
それを使ったツールを公開するときは、ソースも公開しないといけない。
145名無しさん@おーぷん :2016/12/26(月)20:55:20 ID:???
オープンソース・ソフトウェアの開発とダウンロード - OSDN
https://ja.osdn.net/
146名無しさん@おーぷん :2016/12/27(火)13:15:50 ID:???
Lazarus - Statistics Center
http://forum.lazarus.freepascal.org/index.php?action=stats
147名無しさん@おーぷん :2016/12/27(火)13:31:49 ID:???
NumberOfCharacters を思いついた
幅は WidthOfCharacters
148名無しさん@おーぷん :2016/12/27(火)13:48:13 ID:???
Button1も限定識別子になるんだ

基本的な構文要素(Delphi) - RAD Studio
http://docwiki.embarcadero.com/RADStudio/Seattle/ja/%E5%9F%BA%E6%9C%AC%E7%9A%84%E3%81%AA%E6%A7%8B%E6%96%87%E8%A6%81%E7%B4%A0
>限定子は重ねて使うことができます。以下に例を示します。
>
> Form1.Button1.Click
149名無しさん@おーぷん :2016/12/27(火)13:53:47 ID:???
Go言語では区別してる
言語によっていろいろみたいだ

Goプログラミング言語仕様 - golang.jp
http://golang.jp/go_spec#Qualified_identifiers
>限定付き識別子とはパッケージ名をプレフィックスとして付けることで限定した識別子です。


>セレクタは次の形式の基本式です。このxはパッケージ名ではありません。
>
>x.f
>
>これはx(場合によっては、*xも。後述)の値が持つ、フィールドまたはメソッドfを表します
150名無しさん@おーぷん :2016/12/28(水)14:43:14 ID:???
Recent Posts
http://forum.lazarus.freepascal.org/index.php?action=recent
151名無しさん@おーぷん :2016/12/28(水)17:59:56 ID:???
1.8で直るそう

0030582: Closing of a file with source editor tab isn't canceled if ESC is pressed - Free Pascal/Lazarus Bug Tracker
http://bugs.freepascal.org/view.php?id=30582
152名無しさん@おーぷん :2017/01/04(水)15:58:07 ID:???
0027707: Source Editor(TSynEdit) doesn't respect "East Asian Width". - Free Pascal/Lazarus Bug Tracker
http://bugs.freepascal.org/view.php?id=27707

[lazarus] Log of /trunk/components/synedit/synedittextdoublewidthchars.pas
http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/components/synedit/synedittextdoublewidthchars.pas?root=lazarus&sortby=date&view=log
http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/components/synedit/synedittextdoublewidthchars.pas?view=co&revision=48733&root=lazarus
153名無しさん@おーぷん :2017/01/04(水)18:38:45 ID:???
IDEのテキストエディタ表示するファイルのエンコードが何であれ、
オプションで指定した初期フォントとDEFAULT_CHARSETだったのだが
154名無しさん@おーぷん :2017/01/04(水)18:40:28 ID:???
GetACP 関数
https://msdn.microsoft.com/ja-jp/library/cc422073.aspx

これのために古いFPCでは Windows ユニットが必要
なんだけど、古いFPCをサポートする必要ってあるのかね?
155名無しさん@おーぷん :2017/01/04(水)18:51:51 ID:???
DefaultSystemCodePage は 65001(CP_UTF8)

これは日本語以外でもなのかな
156名無しさん@おーぷん :2017/01/04(水)19:04:45 ID:???
Ambiguous Characters を半角幅にするか、全角幅にするかの
オプションがあればいいのかね。

国によって違うと言うのなら
157名無しさん@おーぷん :2017/01/04(水)19:52:10 ID:???
IDE再構築自に
-dSynForceDoubeWidthHack
を付けるだけではダメ

DefaultSystemCodePage = 932 でないから

でも、
if DefaultSystemCodePage = CP_UTF8
とやると、全言語に適用されてしまう。
158名無しさん@おーぷん :2017/01/04(水)20:01:02 ID:???
これが正しく表示されるかどうか

3squares □□□
3arrows ↑↑↑
159名無しさん@おーぷん :2017/01/05(木)20:10:38 ID:???
Create a Web Browser in Lazarus with Gecko (Part 1) | LazPlanet
http://lazplanet.blogspot.jp/2013/10/browser-in-lazarus-with-gecko-pt1.html

Create a web browser in 3 minutes using Chromium engine! (fpCEF3) | LazPlanet
http://lazplanet.blogspot.jp/2015/09/create-web-browser-in-3-minutes-using.html

fpCEF3 - Free Pascal wiki
http://wiki.freepascal.org/fpCEF3
160名無しさん@おーぷん :2017/01/05(木)20:48:42 ID:???
Linuxでは
GetAppConfigDir(True) = '/etc/project1/'
で、
admin しか書き込めない
161名無しさん@おーぷん :2017/01/06(金)22:00:54 ID:???
LookupStringListユニットのTLookupStringListは大文字小文字を区別する。
http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/components/lazutils/lookupstringlist.pas?root=lazarus&view=co&content-type=text%2Fplain

大文字小文字を区別したくないなら、AvgLvlTreeユニットの
TStringToStringTree か TStringToPointerTree が使える。
ただし、インデックスによるアクセスはできない。
TStringToStringTree は Name から文字列を探す
TStringToPointerTree は Name から Pointer を探す(TStringListでObjectを探すのと同じタイプ)
http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/components/lazutils/avglvltree.pas?root=lazarus&view=co&content-type=text%2Fplain

AVL Tree - Lazarus wiki
http://wiki.freepascal.org/AVL_Tree
162名無しさん@おーぷん :2017/01/07(土)18:57:13 ID:???
TrimはBOMを除去してくれないんやな
TStringListはBOMもそのまま読み込む
163名無しさん@おーぷん :2017/01/07(土)21:16:21 ID:???
FormatDateTimeで、
aaaは曜日かと思ったが、dddに変わったんだね
Delphiでも

System.SysUtils.FormatDateTime - RAD Studio API Documentation
http://docwiki.embarcadero.com/Libraries/Seattle/ja/System.SysUtils.FormatDateTime
164名無しさん@おーぷん :2017/01/08(日)03:56:38 ID:???
プロジェクトオプションとエディタオプション

IDE Window: Project Options/ja - Lazarus wiki
http://wiki.freepascal.org/IDE_Window:_Project_Options/ja

IDE Window: Project Options - Free Pascal wiki
http://wiki.freepascal.org/IDE_Window:_Project_Options

IDE Window: Editor Options - Free Pascal wiki
http://wiki.lazarus.freepascal.org/IDE_Window:_Editor_Options
165名無しさん@おーぷん :2017/01/08(日)04:09:25 ID:???
セッション情報を有効にしておかないと、IDE再起動でエディタが表示されないや。

IDE Window: Project Options - Free Pascal wiki
http://wiki.freepascal.org/IDE_Window:_Project_Options#Save_session_information_in
166名無しさん@おーぷん :2017/01/08(日)04:37:24 ID:???
パッケージの開発をするときは、
セッションの「プロジェクトファイルのみエディタ情報を保存」の
チェックを外さないと、IDE開始時に
プロジェクトでは使わないけど、パッケージで使うソースを自動的に開いてくれない。
167名無しさん@おーぷん :2017/01/09(月)21:12:46 ID:???
パッケージの finalization ではすでに
LazarusIDE等のインターフェースはnilになってる
168名無しさん@おーぷん :2017/01/09(月)21:53:10 ID:???
Ansi(cp932)でもCP932でも、sjisの半角カタカナは保存できないのか
UTF-8なら出来る
169名無しさん@おーぷん :2017/01/11(水)03:42:38 ID:???
こんあんなるのか

Lazarus
http://forum.lazarus-ide.org/index.php?action=.xml&sa=recent&type=rss2&limit=50
170名無しさん@おーぷん :2017/01/11(水)06:34:58 ID:???
G Compiler defines during compilation
http://www.freepascal.org/docs-html/current/prog/progap7.html
171名無しさん@おーぷん :2017/01/11(水)06:35:23 ID:???
条件付きコンパイル(Delphi) - RAD Studio
http://docwiki.embarcadero.com/RADStudio/Berlin/ja/%E6%9D%A1%E4%BB%B6%E4%BB%98%E3%81%8D%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB%EF%BC%88Delphi%EF%BC%89
172名無しさん@おーぷん :2017/01/14(土)09:23:42 ID:???
■LubuntuでLazarusのインストール方法
https://sourceforge.net/projects/lazarus/files/Lazarus%20Linux%20i386%20DEB/Lazarus%201.6.2/
から、lazarus-project_1.6.2-0_i386.deb 以外をダウンロード。

MD5はここ
http://www.lazarus-ide.org/index.php?page=checksums#1_6_2

o debファイルを右クリックして、 GDebi パッケージインストーラー起動。
fpc
fpcsrc
lazarus
の順でインストールした。

o gdb がインストールされないので、インストールする。

sudo apt install gdb
173名無しさん@おーぷん :2017/01/14(土)09:24:01 ID:???
o ショートカットの場所
/usr/share/applications/lazarus.desktop

o インストールされるディレクトリ
/usr/share/lazarus/1.6.2/
174名無しさん@おーぷん :2017/01/15(日)11:58:42 ID:???
Lubuntuに最新バージョンのインストールはやめたほうがいいかもしれない
アップデートしたらパッケージが壊れてるって出たわ
175名無しさん@おーぷん :2017/01/17(火)07:22:10 ID:???
最新バージョンが安定しているのは、Windowsだけなのか?
176名無しさん@おーぷん :2017/01/22(日)06:20:59 ID:???
気にしなくてもいいらしい

CRTI.O and CRTN.O not found - Lazarus
https://www.getlazarus.org/forums/viewtopic.php?t=50
177名無しさん@おーぷん :2017/01/22(日)08:39:59 ID:???
Debian Jessieで1.6.2のインストールと自作パッケージのインストールができた。

Lazarus - Browse /Lazarus Linux i386 DEB/Lazarus 1.6.2 at SourceForge.net
https://sourceforge.net/projects/lazarus/files/Lazarus%20Linux%20i386%20DEB/Lazarus%201.6.2/

Lazarus
http://www.lazarus-ide.org/index.php?page=checksums

su でパスワードを入力して、

dpkg -i ~/ダウンロード/fpc_3.0.0-151205_i386.deb
dpkg -i ~/ダウンロード/fpc-src_3.0.0-151205_i386.deb
dpkg -i ~/ダウンロード/lazarus_1.6.2-0_i386.deb

sudo は許可がないと使えないんだって。
178名無しさん@おーぷん :2017/01/22(日)08:46:38 ID:???
エディタがアクティブなとき、
Alt+F でファイルメニューが出ないんだよなぁ

いい忘れてたけど、>>177
必須パッケージ以外をすべてアンインストールしました。
(自作パッケージ以外)
179名無しさん@おーぷん :2017/01/22(日)08:49:28 ID:???
Windowsでは TranslateAccelerator がやってるのだが、
Linuxはどうやんだ?

TranslateAccelerator 関数
https://msdn.microsoft.com/ja-jp/library/cc364840.aspx
180名無しさん@おーぷん :2017/01/22(日)09:29:12 ID:???
startlazarus からの実行で、
ちゃんとコンパイルされたlazarusが実行されるんだ。
181名無しさん@おーぷん :2017/01/22(日)10:08:40 ID:???
GTK+ Documentation
https://www.gtk.org/documentation.php

GTK+ 2.0 Tutorial
https://developer.gnome.org/gtk-tutorial/stable/
182名無しさん@おーぷん :2017/01/22(日)10:28:57 ID:???
こういうのじゃダメっぽいな

Using ItemFactory
https://developer.gnome.org/gtk-tutorial/stable/x1586.html
183名無しさん@おーぷん :2017/01/22(日)10:45:10 ID:???
できそうな気もするのだが

Accelerator Groups: GTK+ 2 Reference Manual
https://developer.gnome.org/gtk2/stable/gtk2-Keyboard-Accelerators.html
184名無しさん@おーぷん :2017/01/22(日)11:34:16 ID:???
こんなんかんがえた
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.AddOnKeyDownBeforeHandler(@AppKeyDownBefore);
Application.AddOnUserInputHandler(@AppUserInput);
Application.AddOnDeactivateHandler(@AppDeactivate);
end;

var
_FocusedFormBefore: TCustomForm;

procedure TForm1.AppDeactivate(Sender: TObject);
begin
_FocusedFormBefore := nil;
end;

procedure TForm1.AppKeyDownBefore(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = VK_MENU) and (Shift = [ssAlt]) then
begin
if Focused then
_FocusedFormBefore := nil
else
begin
_FocusedFormBefore := Screen.FocusedForm;
SetFocus;
end;
end;
end;

procedure TForm1.AppUserInput(Sender: TObject; Msg: Cardinal);
begin
if Msg = LM_KEYUP then
begin
if _FocusedFormBefore <> nil then
if GetKeyState(VK_MENU) and $8000 = 0 then
begin
_FocusedFormBefore.SetFocus;
_FocusedFormBefore := nil;
end;
end;
end;
185名無しさん@おーぷん :2017/01/22(日)11:43:16 ID:???
Altキーを押しただけでメニューバーにフォーカスが移動するから、
エディタの機能でAltキーと組み合わせたものはうまくいかない。
186名無しさん@おーぷん :2017/01/22(日)11:55:00 ID:???
行末までスクロール=行末以降にカーソルを移動
だった
187名無しさん@おーぷん :2017/01/22(日)12:28:02 ID:???
Debianだと、Lazarusの設定ファイルが、
~/.lazarus にあるのだが

普通は ~/.config/.lazarusにあるはず。
188名無しさん@おーぷん :2017/01/22(日)12:30:17 ID:???
どうなるかというと、WindowsとLinuxで分けないといけなくなった

function GetLazarusConfigPath: string;
begin
Result := ExcludeTrailingPathDelimiter(GetAppConfigDir(False));
{$IFDEF WINDOWS}
Result := ExtractFilePath(Result) + 'lazarus\';
{$ELSE}
Result := ExtractFilePath(Result);
Result := ExcludeTrailingPathDelimiter(Result);
Result := ExtractFilePath(Result) + '.lazarus/';
{$ENDIF}
end;
189名無しさん@おーぷん :2017/01/22(日)13:01:46 ID:???
主にアクセラレーターキーを付けるプログラム

http://ux.getuploader.com/open2ch1/download/726/langpatch.tar
190名無しさん@おーぷん :2017/01/22(日)13:55:40 ID:???
全部見ても仕方ないから

<a href=http://forum.lazarus.freepascal.org/index.php/board,9.0.html?action=.xml;type=rss&limit=50>Editor</a>
<a href=http://forum.lazarus.freepascal.org/index.php/board,11.0.html?action=.xml;type=rss&limit=50>Options</a>
<a href=http://forum.lazarus.freepascal.org/index.php/board,13.0.html?action=.xml;type=rss&limit=50>General</a>
191名無しさん@おーぷん :2017/01/23(月)05:40:38 ID:???
てっきり True の時は実行可能ファイルの場所を返すのかと思ったわ。
WriteLn(GetAppConfigDir(True));
WriteLn(GetAppConfigDir(False));
{
/etc/project1/
/home/account/.config/project1/
192名無しさん@おーぷん :2017/01/23(月)14:18:15 ID:???
Debian8.6, Lazarus1.6.2
IDEだけでなく、Firefoxでも全角記号のはずが、半角幅だ

123456
■■■↑↑↑
■■■←←←
193名無しさん@おーぷん :2017/01/24(火)09:00:57 ID:???
Ambiguous の幅はフォントに依存するのか
なら、オプションで設定するしかないな。
194名無しさん@おーぷん :2017/01/25(水)10:31:06 ID:???
How make "screenshot" of desktop in Linux ?
http://forum.lazarus.freepascal.org/index.php?topic=10582.0
195名無しさん@おーぷん :2017/01/25(水)10:35:45 ID:???
Debian8.7 + Firefox45.6.0ESR + Unifont 16

196名無しさん@おーぷん :2017/01/27(金)10:33:54 ID:???
Debian LXDE でデスクトプに貼り付けたショートカットを
ダブルクリックして指定したプロジェクトでLazarusを起動するには、

下のようなファイルをデスクトップに作成して、
パーミッションの設定で「実行=すべて」にすれば可能。
ショートカットキーはデスクトップに貼り付けたショートカットとは関係なく、
~/.config/openbox/lxde-rc.xml で設定する。

ファイル名: hogeproject.sh

#!/bin/sh

startlazarus ~/hogeproject.lpr
197名無しさん@おーぷん :2017/01/27(金)10:35:09 ID:???
単純に hogeproject.lpr へのリンクを貼り付けて
実行しても、最後のプロジェクトファイルが開かれるだけ。
おまけに毎回シンボリックリンクで開くかどうか聞かれるし。
198名無しさん@おーぷん :2017/01/27(金)13:22:47 ID:???
/usr/share/fpcsrc/3.0.0/packages/x11/src/xkblib.pp
199名無しさん@おーぷん :2017/01/27(金)13:36:24 ID:???
linuxならこれで設定ファイルの場所を返す

Result := ExpandFileName('~/.lazarus/');

/home/account/.lazarus/
200名無しさん@おーぷん :2017/01/27(金)13:56:44 ID:???
root権限になって実行すると、
ExpandFileName('~/.lazarus/');
の場所変わるわ。
ダメだわ。
201名無しさん@おーぷん :2017/01/27(金)14:07:27 ID:???
Debian8.7 + Lazarus1.6.2 + Unifont 16
で全角記号を全角幅で表示するパッチを当てた場合。

202名無しさん@おーぷん :2017/01/27(金)14:12:27 ID:???
もともとLinuxではAmbiguous文字は半角なのかも
203名無しさん@おーぷん :2017/01/27(金)19:38:29 ID:???
fpcsrcこんなとこにあった
WindowsはLazarusフォルダの下にある。
分かれていると、ソース内検索が面倒だ。

/usr/share/fpcsrc/3.0.0/
/usr/share/lazarus/1.6.2/
204名無しさん@おーぷん :2017/01/27(金)19:43:14 ID:???
Xlib Programming Manual: XBell
https://tronche.com/gui/x/xlib/input/XBell.html
205名無しさん@おーぷん :2017/01/27(金)19:51:49 ID:???
音鳴った
ファイルサイズは86.7KB

program beep;

{$mode objfpc}{$H+}
{$APPTYPE CONSOLE}

uses
XLib;

var
Display: PDisplay;
begin
Display := XOpenDisplay('');
XBell(Display, 1);
XCloseDisplay(Display);
end.
206名無しさん@おーぷん :2017/01/27(金)20:26:53 ID:???
こんなのもあったけど、よくわからん

Debian -- wheezy の beep パッケージに関する詳細
https://packages.debian.org/wheezy/beep
http://http.debian.net/debian/pool/main/b/beep/beep_1.3.orig.tar.gz
207名無しさん@おーぷん :2017/01/27(金)21:35:57 ID:???
オプションのFPCソースディレクトリを設定し、
/usr/share/lazarus/1.6.2/fpcsrc/$(FPCVER)

単純にルート権限でファイルマネージャ使って移動して、
IDEの再構築できました。

/usr/share/lazarus/1.6.2/fpcsrc
208名無しさん@おーぷん :2017/01/28(土)11:06:34 ID:???
これ >>189 に追加
Ctrl+Q+Fの検索ダイアログで、&Fが2つあるから。

'msgstr "検索(&F)"',
'msgstr "検索"',
209名無しさん@おーぷん :2017/01/28(土)12:30:25 ID:???
なんだか・・・
DebianのLazarus1.6.2は、日本語入力できなくね?
TMemoなんかはできるが。
210名無しさん@おーぷん :2017/01/28(土)12:57:58 ID:???
Linuxじゃ >>201 のようになる
Windowsなら全角記号が潰れずに表示される。

synedittextdoublewidthchars.pas(synedittextdoublewidthchars.pas) ダウンロード | おーぷん2ちゃんねるろだ | uploader.jp
http://ux.getuploader.com/open2ch1/download/727/synedittextdoublewidthchars.pas
211名無しさん@おーぷん :2017/01/28(土)13:00:08 ID:???
こういうのはハンドラにして、パッケージで書き換えることができたらいいかも
212名無しさん@おーぷん :2017/01/31(火)22:55:56 ID:???
RegExpr は Javaっぽいのか

Pattern (Java Platform SE 6)
https://docs.oracle.com/javase/jp/6/api/java/util/regex/Pattern.html
(?idmsux-idmsux) 正規表現ではないが、マッチフラグ i、d、m、s、u、x のオン/オフを切り替える
213名無しさん@おーぷん :2017/02/02(木)16:48:31 ID:???
再配置可能で90KB増えるけど、
スマートリンク等の他のオプションはサイズに影響ないのかな?
214名無しさん@おーぷん :2017/02/03(金)09:26:26 ID:???
Size Matters - Lazarus wiki
http://wiki.freepascal.org/Size_Matters#Debug_information
http://wiki.freepascal.org/File:BigExe.PNG

黄色いチェック入れたら
30.4KBに減った。
デバッグ情報を生成したうえで、外部シンボルファイルを使ったほうが、
デバッグ情報を生成しない方より、サイズが小さくなる。


program beep;

uses
XLib;

var
Display: PDisplay;
begin
Display := XOpenDisplay('');
XBell(Display, 1);
XCloseDisplay(Display);
end.
215名無しさん@おーぷん :2017/02/03(金)11:31:13 ID:???
Debianで、これでクリップボードの内容をダイアログで表示できないのだが。
フォーム表示後にボタン押せば表示できる。

program project1;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Interfaces,
SysUtils, Forms, Dialogs, Clipbrd, Unit1;

begin
RequireDerivedFormResource:=True;
Application.Initialize;
ShowMessage(Clipboard.AsText);
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
216名無しさん@おーぷん :2017/02/03(金)11:36:34 ID:???
この順番なら取得できた

Application.CreateForm(TForm1, Form1);
ShowMessage(Clipboard.AsText);
Application.Run;
217名無しさん@おーぷん :2017/02/03(金)11:44:30 ID:???
Form := TForm.Create(Application);
Application.UpdateMainForm(Form);

じゃダメだった。
Debianというか、Linuxでは
Application.CreateForm(TForm1, Form1);
が必要のようですね。

Application.Run;
はいらない
218名無しさん@おーぷん :2017/02/03(金)12:01:06 ID:???
あーーなるほど、
クリップボードにコピーしたアプリが閉じられると、
クリップボードの内容がクリアされるんだ。

だから、アプリ起動中は、IDEに貼り付けできるけど、
アプリを閉じると、貼り付けできなくなる。
219名無しさん@おーぷん :2017/02/03(金)12:02:10 ID:???
LeafpadやFirefoxはそんなことなかったが
220名無しさん@おーぷん :2017/02/03(金)12:04:36 ID:???
Lazarusのエディタでコピーして、
Lazarus終了後に、Leafpadに貼り付けできんかった。
221名無しさん@おーぷん :2017/02/03(金)12:07:23 ID:???
Memo1.CopyToClipboard;
でコピーしてみたけどだめだった。

半角空白を全角空白に変換するプログラムを
作ろうとしたけど、
クリップボードに戻せないんじゃ使えない
222名無しさん@おーぷん :2017/02/03(金)12:14:08 ID:???
これでできたわ
Clipbrdユニットを使わずにサイズを抑えられそうだ

Persistent Clipboard
http://forum.lazarus.freepascal.org/index.php?topic=35244.0
223名無しさん@おーぷん :2017/02/03(金)12:39:18 ID:???
こんなのあったけど、よくわからん
取得は非同期みたいだ
http://gtklab.osdn.jp/gtkwin/gtkwin09.txt
224名無しさん@おーぷん :2017/02/03(金)12:44:50 ID:???
取得は Strings.Text := Clipboard.AsText でいけた。
 Application.CreateForm(TForm, Form);
がいるけど。

procedure CopyToClipboard(const S: string);
var
 C: PGtkClipboard;
begin
 C := gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
 gtk_clipboard_set_text(C, PChar(S), Length(S));
 gtk_clipboard_store(C);
end;

var
 Strings: TStringList;
 Form: TForm;
begin
 Application.Initialize;
 Application.CreateForm(TForm, Form);
 Strings := TStringList.Create;
 try
  Strings.Text := Clipboard.AsText;
  if ZenToHanSpace(Strings) or HanToZenSpace(Strings) then
  begin
   CopyToClipboard(Strings.Text);
   Beep;
  end;
 finally
  Strings.Free;
 end;
end.
225名無しさん@おーぷん :2017/02/04(土)11:35:18 ID:???
program Project1;
{倍}
begin
end.

project1.lpr(11,0) Fatal: Unexpected end of file
が出るねん
CP932だと
UTF-8なら大丈夫

2バイト目が {
ダメ文字一覧表 - fudist
https://sites.google.com/site/fudist/Home/grep/sjis-damemoji-jp/table
226名無しさん@おーぷん :2017/02/08(水)18:46:30 ID:???
ソースに{$IFDEF がある場合、
CodeBuffer.Scanner.CleanedSrc
使わないとダメ

class function TMyCodeTools.GetNodeText(CodeBuffer: TCodeBuffer; Node: TCodeTreeNode): string;
begin
//Result := Copy(CodeBuffer.Source, Node.StartPos, Node.EndPos - Node.StartPos);
Result := Copy(CodeBuffer.Scanner.CleanedSrc, Node.StartPos, Node.EndPos - Node.StartPos);
end;
227名無しさん@おーぷん :2017/02/12(日)18:08:53 ID:???
linuxでマウスボタンのエミュレート

Simulating a mouse click
http://www.linuxquestions.org/questions/programming-9/simulating-a-mouse-click-594576/

Autoclick · GitHub
https://gist.github.com/pioz/726474
228名無しさん@おーぷん :2017/02/12(日)18:37:48 ID:???
xlibでX11のマウスを制御してみた。 - BlankTar
http://blanktar.jp/blog/2015/06/xlib-mouse-controll.html
229名無しさん@おーぷん :2017/02/12(日)18:51:49 ID:???
Gtk2Proc.FormToX11Window
230名無しさん@おーぷん :2017/02/12(日)19:01:42 ID:???
ハンドルがそのまま PGtkWidgetになってる
PGtkWidget(Handle)
231名無しさん@おーぷん :2017/02/12(日)19:08:31 ID:???
MainForm以外に、ルートウィンドウがあるっぽい

var
Display: PDisplay;
Window: TWindow;
Event: TXEvent;
Attr: TXWindowAttributes;
begin
FillChar(Event, SizeOf(Event), #0);
Window := FormToX11Window(Form);
Display := XOpenDisplay(nil);
try
XGetWindowAttributes(Display, Window, @Attr);
Event._type:= X.ButtonPress;
Event.xbutton.same_screen := 1;
event.xbutton.window := Window;
event.xbutton.root := Attr.root;
232名無しさん@おーぷん :2017/02/17(金)21:25:29 ID:???
単純分割あるね

StrUtils.SplitString - XE API Documentation
http://docwiki.embarcadero.com/VCL/XE/ja/StrUtils.SplitString
233名無しさん@おーぷん :2017/02/18(土)20:25:21 ID:???
How to declare a variable absolute with respect to a dynamic array?
http://forum.lazarus-ide.org/index.php/topic,35902.msg238361.html

Systemにある、こういうのが欲しいんやろうな
私も欲しい
Function Copy(A : DynArrayType; Index,Count : Integer) : DynArray;
234名無しさん@おーぷん :2017/02/19(日)04:11:57 ID:???
Platform defines - Lazarus wiki
http://wiki.lazarus.freepascal.org/Platform_defines#Operating_system_defines

みたら、UNIX と WINDOWS しかなかった。
235名無しさん@おーぷん :2017/02/20(月)17:44:44 ID:???
ルートウィンドウはデスクトップのことやね

X Window System プロトコルとアーキテクチャ - Wikipedia
https://ja.wikipedia.org/wiki/X%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB

Xlib - Wikipedia
https://ja.wikipedia.org/wiki/Xlib
236名無しさん@おーぷん :2017/03/06(月)07:44:11 ID:???
Regular expressions syntax – TRegExpr – Regular expressions in pure Delphi
http://regexpstudio.com/en/regexp_syntax.html
237名無しさん@おーぷん :2017/03/06(月)08:24:22 ID:???
LazPlanet
http://lazplanet.blogspot.jp/
238名無しさん@おーぷん :2017/03/06(月)08:40:41 ID:???
パラメータ(Delphi) - RAD Studio
http://docwiki.embarcadero.com/RADStudio/Seattle/ja/%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%EF%BC%88Delphi%EF%BC%89#.E3.82.AA.E3.83.BC.E3.83.97.E3.83.B3.E9.85.8D.E5.88.97.E3.83.91.E3.83.A9.E3.83.A1.E3.83.BC.E3.82.BF
>ルーチンの本体内では、オープン配列パラメータに対して以下の規則が適用されます。

>インデックスは必ず 0 から始まります。 したがって、1 番めの要素は 0 で、2 番めの要素は 1 になります。
>標準関数の Low と High は、それぞれ 0 と(Length - 1)を返します。
239名無しさん@おーぷん :2017/03/06(月)13:20:09 ID:???
Windowsでは、
CaseSensitive = False時のTStringList.Sortや
TListBOx.Sorted で、
` < A
なんやな

Asciiコードの順番は、
A < ` < a
なんだけど
240名無しさん@おーぷん :2017/03/06(月)13:32:05 ID:???
Debian + gtk2 だと、
ListBox.Sortedは
a < A < `

TStringList も
a < A < `

procedure TForm1.Button1Click(Sender: TObject);
var
 Strings: TStringList;
begin
 ListBox1.Items.Add('a');
 ListBox1.Items.Add('A');
 ListBox1.Items.Add('`');
 ListBox1.Sorted := True;

 Strings := TStringList.Create;
 Strings.Assign(ListBox1.Items);
 Strings.CaseSensitive := False;
 Strings.Sort;
 Caption := Format('%s < %s < %s', [Strings[0], Strings[1], Strings[2]]);
 Strings.Free;
end;
241名無しさん@おーぷん :2017/03/07(火)06:50:22 ID:???
スマートリンク有効だった

program hung;
begin
while True do;
end.

152.2KB スマートリンク不使用
29.4KB スマートリンク

242名無しさん@おーぷん :2017/03/07(火)06:55:09 ID:???
あと、当然これ
有効にして、外部に置く

デバッグ情報を生成しない場合、84.6KBに増える。
(Debian gtk2 Lazarus1.6.2)

243名無しさん@おーぷん :2017/03/07(火)09:35:23 ID:???
これにチェック入れておいたほうがいいのかな

Line numbers in run-time error backtraces
http://www.freepascal.org/docs-html/user/userse58.html
244名無しさん@おーぷん :2017/03/07(火)12:27:53 ID:???
「実行時エラーの後方探索で行番号を表示」
は何が変わるのかわからない。

外部シンボルファイルがあれば、
LCLProcにあるGetLineInfoでアドレスからソース位置は取得可能。

procedure TForm1.Button1Click(Sender: TObject);
begin
 try
  raise Exception.Create('Test');
 except
  Memo1.Lines.Add(GetLineInfo(ExceptAddr, False));
 end;
end;

245名無しさん@おーぷん :2017/03/11(土)07:00:43 ID:???

http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/objpas/sysutils/syshelp.inc?revision=33209&view=co
に TStringHelper があったが、
FPC3.0.0のWin版にはないのだが
246名無しさん@おーぷん :2017/03/11(土)07:07:41 ID:???
string型にメソッドがあるな
TStringDynArray でなくて、TStringArrayだし

procedure TForm1.Button1Click(Sender: TObject);
var
a:string;
b:TStringArray;
begin
b:= memo1.lines.text.split(';');
for a in b do Combobox1.Items.add(a);
end;

How to split text (ComboBox and Memo)
http://forum.lazarus-ide.org/index.php/topic,36156.msg240649.html?PHPSESSID=5n7gtncqr4rbjb4lrbnlnuij07#msg240649

[fpc] Contents of /trunk/rtl/objpas/classes/classesh.inc
http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/objpas/classes/classesh.inc?revision=35542&view=markup&sortby=date
247名無しさん@おーぷん :2017/03/11(土)14:37:27 ID:???
[fpc] Contents of /trunk/rtl/objpas/sysutils/syshelph.inc
http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/objpas/sysutils/syshelph.inc?revision=35202&view=markup

TStringArray = Array of string;
TStringHelper = Type Helper for AnsiString

Integer Type Helpers (Delphi) - RAD Studio Code Examples
http://docwiki.embarcadero.com/CodeExamples/Berlin/en/Integer_Type_Helpers_(Delphi)
248名無しさん@おーぷん :2017/03/11(土)14:42:14 ID:???
TStringArrayだと、 var TStringDynArray に渡せないぞ
249名無しさん@おーぷん :2017/03/11(土)14:46:04 ID:???
「tstringarray」の検索結果 - RAD Studio API Documentation
http://docwiki.embarcadero.com/Libraries/Seattle/j/index.php?title=%E7%89%B9%E5%88%A5%3A%E6%A4%9C%E7%B4%A2&profile=default&search=tstringarray&fulltext=Search
問い合わせに合致する検索結果はありませんでした。
250名無しさん@おーぷん :2017/03/12(日)15:38:25 ID:???
スクリーンショット取得
WinでもLinuxでも
Macでもいけると思うけど、未確認

procedure TForm1.Button1Click(Sender: TObject);
var
 DC: HDC;
begin
 DC := GetDC(0);
 try
  Image1.AutoSize := True;
  Image1.Picture.Bitmap.LoadFromDevice(DC);
 finally
  ReleaseDC(0, DC);
 end;
end;

251名無しさん@おーぷん :2017/03/15(水)19:33:55 ID:???
Creating a Backtrace with GDB/ja - Free Pascal wiki
http://wiki.lazarus.freepascal.org/Creating_a_Backtrace_with_GDB/ja

よくわからん

Reading symbols from project1.exe...done.
(gbd) bt
No stack.

が出る
252名無しさん@おーぷん :2017/03/16(木)14:30:18 ID:???
Javaスレでタイマーやってるけど、
Delphi/Lazarusではコンソールアプリは逆に面倒で、
フォーム使えば実質この一行書くだけ。

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Memo1.Lines.Add(DateTimeToStr(Now));
end;


253名無しさん@おーぷん :2017/03/17(金)12:46:57 ID:???
プロジェクトオプションのオプションを表示で見ると、
gtk2を使うと LCLgtk2 が定義される。

{$IFDEF LCLgtk2}
{$ENDIF}

site:freepascal.org LCLgtk2 - Google 検索
https://www.google.co.jp/search?q=site%3Afreepascal.org+LCLgtk2

www.freepascal.org では見つからなかったわ
254名無しさん@おーぷん :2017/03/17(金)14:01:26 ID:???
gtk2でアプリ終了時にクリップボードが消される問題で、

TClipboard.OnRequest
http://lazarus-ccr.sourceforge.net/docs/lcl/clipbrd/tclipboard.onrequest.html

が使えるかもと思ったけど、難しかった
Clipbrd.pp見ると、別のTClipboardで置き換えれそうな気もする。
255名無しさん@おーぷん :2017/03/23(木)04:38:08 ID:???
サイバー犯罪者集団とかおるんやね

Lazarus Group - Wikipedia
https://en.wikipedia.org/wiki/Lazarus_Group
256名無しさん@おーぷん :2017/03/24(金)14:21:56 ID:???
こんな記事があった

クロスプラットフォームのエディタ「CodaText」とは? | マイナビニュース
http://news.mynavi.jp/news/2017/03/19/092/

CudaText - Free Pascal wiki
http://wiki.freepascal.org/CudaText
257名無しさん@おーぷん :2017/03/25(土)23:20:10 ID:???
Lazarusのソースファイル
とFPCのライブラリファイル全部で10000個ぐらいで360MBだったわ
全ファイルを大文字で保持すれば、
TStringList を大文字小文字を区別しない検索で1.5秒になった.
Lazarusは3秒かかる
258名無しさん@おーぷん :2017/03/26(日)04:08:11 ID:???
これしないと、毎回出るのか

heaptrc - Free Pascal wiki
http://wiki.freepascal.org/heaptrc

{$if declared(UseHeapTrace)}
 GlobalSkipIfNoLeaks := true;
{$endif}
259名無しさん@おーぷん :2017/03/27(月)14:35:58 ID:???
gtk2 は遅かったのか

Why is gtk2 10 times slower than qt?
http://forum.lazarus-ide.org/index.php/topic,15223.msg241998.html
260名無しさん@おーぷん :2017/03/27(月)15:35:09 ID:???
apt-get install qt5-default
でDebianにインストールしてみた。
体感速度に違いは感じられない。
相変わらずLazarus終了時にクリップボードの内容は破棄される。
MainBarが非アクティブの時にアクセラレーターキー(Alt+F等)で
メニューを出せないのも一緒。
261名無しさん@おーぷん :2017/03/27(月)15:51:56 ID:???
それは置いといて、アプリをLinuxでもコンパイルしたいなら、
Windows と Messages ユニットは使えない。
代わりに、
LCLType, LMessages, LCLIntf, LCLProc,
を使う。
LCLIntfにはWinAPIっぽい関数も用意されている。

だいたいこんな感じになるかね

uses
 Types, Classes, SysUtils, Math, StrUtils, TypInfo, IniFiles, RegExpr,
 LCLType, LMessages, LCLIntf, LCLProc,
 Controls, Forms, Dialogs, Menus, Clipbrd, StdCtrls;

FMXはこんなの。
RAD Studio Demo Code / Code / [r2022] /branches/RADStudio_Berlin/Object Pascal/Multi-Device Samples/User Interface/CopyPaste/fmMain.pas
https://sourceforge.net/p/radstudiodemos/code/HEAD/tree/branches/RADStudio_Berlin/Object%20Pascal/Multi-Device%20Samples/User%20Interface/CopyPaste/fmMain.pas
262名無しさん@おーぷん :2017/03/27(月)16:14:13 ID:???
.ppと.pasの違いは、TurboPascal/Delphiのファイルと区別するためだった。

Is there a difference in the file extension .pp and .pas?
http://forum.lazarus.freepascal.org/index.php?topic=33813.0/
263名無しさん@おーぷん :2017/03/27(月)16:26:32 ID:???
All Qt Examples | Qt 5.8
http://doc.qt.io/qt-5/qtexamples.html
264名無しさん@おーぷん :2017/03/28(火)03:01:29 ID:???
へー

Integer Performance Test: Delphi 10.2 Tokyo outperforms Visual C++ and Visual C#
http://forum.lazarus-ide.org/index.php/topic,36342.msg242040.html

Integer Performance Comparison for C++, C#, Delphi | CodingForSpeed.COM
https://codingforspeed.com/integer-performance-comparison-for-c-c-delphi

(数字が小さいほど速い)
https://codingforspeed.com/wp-content/uploads/2017/02/integer-performance-comparison-for-c-c-delphi.jpg
265名無しさん@おーぷん :2017/04/02(日)19:10:10 ID:???
TStringList.LoadFromFile は
TStringList.LineBreak をファイルの改行に設定してはくれないのかな?

だから、読み込んで書き込むと、自動的にSLineBreakに変えられちゃう。

System.Classes.TStrings.LoadFromFile - RAD Studio API Documentation
http://docwiki.embarcadero.com/Libraries/Berlin/ja/System.Classes.TStrings.LoadFromFile
266名無しさん@おーぷん :2017/04/07(金)15:24:19 ID:???
>>35 わかった
「ユニットを登録」にチェックを入れると、
Register手続きを読んでくれる。


267名無しさん@おーぷん :2017/04/07(金)15:25:50 ID:???
   パッケージエディタでをコンパイルボタンを押すと、
    register1 の Register手続き登録コード付きのファイル package1.pas が
    作られる。 事前に自動生成ファイルを削除すれば確実に付く。

   { This file was automatically created by Lazarus. Do not edit!
    This source is only used to compile and install the package.
    }

   unit package1;

   interface

   uses
    register1, LazarusPackageIntf;

   implementation

   procedure Register;
   begin
    RegisterUnit( 'register1', @register1.Register);
   end;

   initialization
    RegisterPackage( 'package1', @Register);
   end.
268名無しさん@おーぷん :2017/04/07(金)16:54:23 ID:???
エディタが上書きモードの時、TABキーやEnterキーで挿入しないようにしたり、
(普段上書きする人、Foldしない人専用。 Foldした場合、どうなるかは未検証)

最近使ったファイルの先頭に&1 〜 &Z まで付けたり、
Windowsで検索ダイアログでAlt+キーでラジオボタンを押せない問題とか、

http://ux.getuploader.com/open2ch1/download/734/dynpatch.tar
269名無しさん@おーぷん :2017/04/07(金)20:27:41 ID:???
こんなん作った
無いのが不思議

{
uses LConvEncoding;
 UTF8BOM = #$EF#$BB#$BF;
 UTF16BEBOM = #$FE#$FF;
 UTF16LEBOM = #$FF#$FE;
 UTF32BEBOM = #00#00#$FE#$FF;
 UTF32LEBOM = #$FE#$FF#00#00;
}
function GetBom(const S: string): string;
begin
 Result := '';
 if Length(S) >= 2 then
 begin
  if (S[1] = #$EF) and (S[2] = #$BB) then
  begin
   if (Length(S) >= 3) and (S[3] = #$BF) then
    Result := UTF8BOM;
  end
  else if (S[1] = #$FE) and (S[2] = #$FF) then
  begin
   if (Length(S) >= 4) and (S[3] = #0) and (S[4] = #0) then
    Result := UTF32LEBOM
   else
    Result := UTF16BEBOM;
  end
  else if (S[1] = #$FF) and (S[2] = #$FE) then
   Result := UTF16LEBOM
  else if (S[1] = #0) and (S[2] = #0) and (Length(S) >= 4) and
   (S[3] = #$FE) and (S[4] = #$FF) then
   Result := UTF32BEBOM;
 end;
end;

function DeleteBom(var S: string): string;
begin
 Result := GetBom(S);
 if Length(Result) > 0 then
  System.Delete(S, 1, Length(Result));
end;
270名無しさん@おーぷん :2017/04/07(金)20:29:12 ID:???
ついでに改行も
Length(Text)まで調べるから、UTF32のBOMがあっても大丈夫

function GetLineBreakDef(const Text, DefaultLineBreak: string):
 string;
var
 I: Integer;
begin
 for I := 1 to Length(Text) do
 begin
  case Text[I] of
   #10:
   begin
    Result := #10;
    Exit;
   end;
   #13:
   begin
    if (I < Length(Text)) and (Text[I + 1] = #10) then
     Result := #13#10
    else
     Result := #13;
    Exit;
   end;
  end;
 end;
 Result := DefaultLineBreak;
end;

function GetLineBreak(const Text: string): string;
begin
 Result := GetLineBreakDef(Text, '');
end;
271名無しさん@おーぷん :2017/04/07(金)23:14:54 ID:???
GetAsyncKeyState は難しいみたいだ
272名無しさん@おーぷん :2017/04/08(土)05:52:16 ID:???
リアルタイムなキーボード状態の取得
http://www.hakodate-ct.ac.jp/~tokai/tokai/gtkmm/app/p6.htm
273名無しさん@おーぷん :2017/04/08(土)06:01:23 ID:???
Escapeキーはできた

function IsEscapeKeyDown: Boolean;
var
 Display: PDisplay;
 Keys: chararr32;
begin
 Display := XOpenDisplay('');
 try
  XQueryKeymap(Display, Keys);
  Result := Byte(Keys[6]) and 2 <> 0;
 finally
  XCloseDisplay(Display);
 end;
end;
274名無しさん@おーぷん :2017/04/08(土)06:03:35 ID:???
procedure TForm1.Button3Click(Sender: TObject);
var
 I: Integer;
begin
 for I := 0 to 5000 do
 begin
275名無しさん@おーぷん :2017/04/08(土)06:03:44 ID:???
  if IsEscapeKeyDown then Break;
  Sleep(1);
 end;
 Caption := TimeToStr(Now);
end;

Xlib Programming Manual: XQueryKeymap
https://tronche.com/gui/x/xlib/input/XQueryKeymap.html
276名無しさん@おーぷん :2017/04/08(土)06:04:26 ID:???
なぜか知らんが、関数を一つにして書き込めなかった

>おーぷん2ちゃんねるから大切なお知らせ
>アク禁されますた(´・ω・`)
>どうやらアクセス禁止になってしまったみたいです。。。!!
277名無しさん@おーぷん :2017/04/08(土)06:16:41 ID:???
para2 はなぜかポインタではない
だから、値は帰ってこないと思うんだけど

xlib.pp
http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/packages/x11/src/xlib.pp?revision=33645&view=co

type
chararr32 = array[0..31] of char;
pchararr32 = chararr32;

function XQueryKeymap(para1:PDisplay; para2:pchararr32):cint;cdecl;external libX11;
278名無しさん@おーぷん :2017/04/08(土)06:20:09 ID:???
こっちの方がいいかな

function IsEscapeKeyDown: Boolean;
var
 Display: PDisplay;
 Keys: chararr32;
begin
 Display := XOpenDisplay('');
 try
  FillChar(Keys, SizeOf(Keys), #0);
  Result := (XQueryKeymap(Display, Keys) <> 0) and (Byte(Keys[6]) and 2 <> 0);
 finally
  XCloseDisplay(Display);
 end;
end;
279名無しさん@おーぷん :2017/04/08(土)06:27:59 ID:???
やっぱり var で渡さないと設定できない

type
 TBuf = array[0..31] of Char;

procedure SetBuf(Buf: TBuf);
begin
 Buf[0] := '0';
 Buf[1] := '1';
end;

procedure SetBuf2(var Buf: TBuf);
begin
 Buf[0] := '0';
 Buf[1] := '1';
end;

procedure TForm1.Button4Click(Sender: TObject);
var
 Buf: TBuf;
begin
 SetBuf(Buf);
 Caption := Buf[0] + Buf[1]; // 何も表示されない

 SetBuf2(Buf);
 Button4.Caption := Buf[0] + Buf[1];  // 01
end;
280名無しさん@おーぷん :2017/04/08(土)06:53:01 ID:???
XQueryKeymap()
http://forum.lazarus.freepascal.org/index.php?topic=15257.0
281名無しさん@おーぷん :2017/04/08(土)16:37:37 ID:???
Cじゃ全部同じ意味
要素数は無視されるらしい

int getaverage(int data[10]);
int getaverage(int data[])
int getaverage(int *data);

引数による情報の受け渡し
http://9cguide.appspot.com/15-06.html

だから、keys_return はポインタで渡される。
XQueryKeymap(display, keys_return)
Display *display;
char keys_return[32];
282名無しさん@おーぷん :2017/04/08(土)16:46:03 ID:???
/usr/include/X11/Xlib.h

extern int XQueryKeymap(
  Display*/* display */,
  char [32]/* keys_return */
);
283名無しさん@おーぷん :2017/04/08(土)17:22:35 ID:???
XKeyInputユニットに
function VirtualKeyToXKeySym(Key: Word): TKeySym;
begin
 case Key of
  VK_BACK: Result := XK_BackSpace;
  VK_TAB: Result := XK_Tab;

CarbonProcユニットに
function VirtualKeyCodeToMac(AKey: Word): Word;
begin
 case AKey of
 VK_BACK : Result := MK_BACKSPACE;
 VK_TAB : Result := MK_TAB;
284名無しさん@おーぷん :2017/04/09(日)05:30:23 ID:???
XOpenDisplay('') に時間がかかるから、なんとかしないと。

var
 GDisplay: PDisplay;

function IsKeyDown(VirtualKey: Word): Boolean;
var
 Display: PDisplay;
 KeySym: TKeysym;
 Code: TKeyCode;
 Keys: chararr32;
begin
 // $(LazarusDir)components/mouseandkeyinput/xkeyinput.pas
 KeySym := VirtualKeyToXKeySym(VirtualKey);
 if GDisplay <> nil then
  Display := GDisplay
 else
  Display := XOpenDisplay('');
 try
  Code := XKeysymToKeycode(Display, KeySym);
  if XQueryKeymap(Display, Keys) <> 0 then
   Exit(Byte(Keys[Code div 8]) and (1 shl (Code mod 8)) <> 0);
 finally
  if Display <> GDisplay then
  begin
   XFlush(Display);
   XCloseDisplay(Display);
  end;
 end;
 Result := False;
end;
285名無しさん@おーぷん :2017/04/09(日)05:31:00 ID:???
procedure TForm1.Button1Click(Sender: TObject);
var
 I: Integer;
begin
 for I := 1 to 5000 do
 begin
286名無しさん@おーぷん :2017/04/09(日)05:31:07 ID:???
  Sleep(1);
  if IsKeyDown(VK_ESCAPE) then
   Break;
  if IsKeyDown(VK_A) then
   Break;
  if IsKeyDown(VK_CONTROL) and IsKeyDown(VK_S) then
   Break;
 end;
 Caption := IntToStr(GetTickCount64);
end;
287名無しさん@おーぷん :2017/04/09(日)05:37:00 ID:???
Code := XKeysymToKeycode(Display, KeySym);が、
32バイトのKeys内で調べるビット位置が入る。

8で割って何バイト目か、(Keys[?])
8の余りで、何ビット目か
288名無しさん@おーぷん :2017/04/09(日)05:44:10 ID:???
VirtualKeyToXKeySymよりも、テーブル使ったほうが7〜8倍速い

VirtualKeyToKeySymTable.pas(VirtualKeyToKeySymTable.pas) ダウンロード | おーぷん2ちゃんねるろだ | uploader.jp
http://ux.getuploader.com/open2ch1/download/735/VirtualKeyToKeySymTable.pas
289名無しさん@おーぷん :2017/04/09(日)05:44:49 ID:???
こんなやつ

const
 VirtualKeyToKeySymTable: array[0..255] of Integer = (
  XK_VoidSymbol, // VK_UNKNOWN
  XK_VoidSymbol, // VK_LBUTTON
  XK_VoidSymbol, // VK_RBUTTON
  XK_VoidSymbol, // VK_CANCEL
  XK_VoidSymbol, // VK_MBUTTON
  XK_VoidSymbol, // VK_(5)
  XK_VoidSymbol, // VK_(6)
  XK_VoidSymbol, // VK_(7)
  XK_BackSpace, // VK_BACK
  XK_Tab, // VK_TAB
....
290名無しさん@おーぷん :2017/04/09(日)05:50:14 ID:???
VirtualKeyToXKeySym は探す位置によった
最適化もしてみたけど、5倍程度に下がった
291名無しさん@おーぷん :2017/04/09(日)20:59:14 ID:???
Overriding properties
http://www.freepascal.org/docs-html/ref/refsu39.html

本当にできるのか?
Clipboardの置き換えがうまくいかない
292名無しさん@おーぷん :2017/04/09(日)21:22:52 ID:???
合ってるのか
Clipboard が TClipboard である以上、
Clipboard := TNewClipboard.Create しても、
Clipboard.AsText は、 TClipboard.AsText が呼ばれてしまう。

Properties (Delphi) - RAD Studio
http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Properties_(Delphi)#Property_Overrides_and_Redeclarations
> MyObject.Value invokes Method1 or Method2, even though MyObject holds an instance of TDescendant.
293名無しさん@おーぷん :2017/04/09(日)21:27:01 ID:???
GetAsText と SetAsText が protected の仮想関数だったら、
置き換えることが出来た。
294名無しさん@おーぷん :2017/04/09(日)21:38:18 ID:???
アプリ終了時に、クリップボードにあるテキストを
コピーし直すしかないな
多少無駄になるけど

Copy-to-clipboard, text clears after exiting my app
http://forum.lazarus.freepascal.org/index.php/topic,36112.0.html
295名無しさん@おーぷん :2017/04/09(日)22:23:01 ID:???
WM_COPYDATA とか受け付けられないんだな
296名無しさん@おーぷん :2017/04/10(月)14:52:07 ID:???
Debianで最後の行を表示するには、こうやらないとダメだ

procedure TForm1.Button1Click(Sender: TObject);
var
 I: Integer;
begin
 for I := 1 to 50 do
  Memo1.Lines.Add('%d', [Memo1.Lines.Count]);
 Application.ProcessMessages;
 Memo1.VertScrollBar.Position := MaxInt;
end;

Setting TMemo.VertScrollBar.Position does not scroll the text field
http://forum.lazarus.freepascal.org/index.php?topic=30468.0

Delphiには TMemo.VertScrollBar が無い

Vcl.StdCtrls.TMemo のプロパティ - RAD Studio API Documentation
http://docwiki.embarcadero.com/Libraries/Seattle/ja/Vcl.StdCtrls.TMemo_Properties
297名無しさん@おーぷん :2017/04/10(月)19:02:29 ID:???
Windows7Pro 32bit で
Lines.Count がたくさん(1000とか)あるとき、
TMemo.Lines.Delete(0);
がやたらと遅い。
298名無しさん@おーぷん :2017/04/11(火)02:42:53 ID:???
これでも時間がかかる

procedure TForm1.Button1Click(Sender: TObject);
var
 D: PDisplay;
 I, T: Integer;
begin
 D := XOpenDisplay(nil);
 T := GetTickCount64;
 for I := 0 to 999 do
  XCloseDisplay(XOpenDisplay(nil));
 Caption := IntToStr(GetTickCount64 - T);
 XCloseDisplay(D);
end;
299名無しさん@おーぷん :2017/04/12(水)22:42:44 ID:???
>>291-294の話題載ってた

Overriding properties
http://forum.lazarus-ide.org/index.php/topic,36483.msg243277.html
« on: Today at 11:32:41 am »
300名無しさん@おーぷん :2017/04/13(木)06:06:59 ID:???
http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/components/lazutils/lazfileutils.pas?root=lazarus&view=co&content-type=text%2Fplain

CompareFilenameStarts

 end else if len1>len2 then
  Result:=CompareFilenames(copy(Filename1,1,len2),Filename2)
 else
  Result:=CompareFilenames(Filename1,copy(Filename2,1,len1));
 if Result<>0 then exit; // Result = 0 じゃね?
 if len1<len2 then
  Result:=-1
 else
  Result:=1;
301名無しさん@おーぷん :2017/04/13(木)07:19:34 ID:???
comparefilenamestarts - Google 検索
https://www.google.co.jp/search?q=+comparefilenamestarts

そもそも何をする関数化わからん
短い方に合わせて一致するかどうか調べる関数じゃないのかな・・・
302名無しさん@おーぷん :2017/04/13(木)07:46:24 ID:???
aaa,aaabbb -> Compare(aaa,aaa) -> 長い方を下に移動
ccc,aaabbb -> Compare(ccc,aaa)

よくわからん
只の CompareFileNames ではダメなのか?
303名無しさん@おーぷん :2017/04/13(木)08:04:30 ID:???
そもそもこの関数が0を返す時は、
CompareFileNames(FileName1, FileName2) = 0 の時だけ。

昔はもしかして、
CompareFileNames('ccc', 'aaaaaa') = -1 だったのかな?

CompareFileNameStarts は先に長さで比較されたくないってことですよね。
304名無しさん@おーぷん :2017/04/18(火)18:46:17 ID:???
qt4は無変換キーや変換キーの入力を
検出できないのかな。
gtk2に戻せないから、qt4のアンインストールをして
lazarusも1.6.4をインストールしましたわ。
305名無しさん@おーぷん :2017/04/19(水)05:04:00 ID:???
デザイナの上で右クリックメニューをコンポーネントごとにカスタマイズしたいが・・・

デザイナで選択中のコンポーネントは
GlobalDesignHook.GetSelection(...);
で取得可能。

Designer/Component editor section
Designer/Custom dynamic section
が用意されているが、どうやって使うのだろう?

Extending the IDE - Lazarus wiki
http://wiki.lazarus.freepascal.org/Extending_the_IDE#Select_a_component_in_the_designer.2Fobject_inspector

uses propedits;
..
GlobalDesignHook.SelectOnlyThis(AComponent);
306名無しさん@おーぷん :2017/04/20(木)08:18:48 ID:???
>>113
もう少しわかった

lazarus.dciファイルで、
セクション名に | を含まないと、文字入力時に RangeCheck Error が出る。

dciファイルの直接編集で、うっかり、
[on]
 on E: Exception do ShowMessage(E.Message);
って追加したらひどい目にあった。

[on | tekitou]
ってしないとダメ。 ゼッタイ!
307名無しさん@おーぷん :2017/04/21(金)23:14:32 ID:???
http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/components/synedit/syneditautocomplete.pp?root=lazarus&view=co&content-type=text%2Fplain

procedure TCustomSynAutoComplete.ParseCompletionList;
で読み込んでる
308名無しさん@おーぷん :2017/04/21(金)23:27:20 ID:???
[test|test]
asdf

|の横に空白が無いだけでもアウト
309名無しさん@おーぷん :2017/04/24(月)06:06:47 ID:???
ここで検索結果表示

http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/ide/searchresultview.pp?root=lazarus&view=co&content-type=text%2Fplain
procedure TLazSearchResultTV.EndUpdate;
310名無しさん@おーぷん :2017/04/24(月)06:19:34 ID:???
これそのままコピペしてもダメだったわ。
stdcall が抜けてるんだな。

http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/win/wininc/ascdef.inc?view=co

function FindWindow(lpClassName:LPCSTR; lpWindowName:LPCSTR):HWND; external 'user32' name 'FindWindowA';
311名無しさん@おーぷん :2017/04/24(月)08:31:54 ID:???
procedure TLazSearchResultTV.AddNode(Line: string; MatchPos: TLazSearchMatchPos);
が遅いんだ
1.6.0からコード変わってたが。

中身をこれにするだけで、一瞬で終わる。
ファイル毎にノードを分けないけど
if MatchPos=nil then exit;
ChildNode := Items.AddChild(nil, Line);
ChildNode.Data := MatchPos;
312名無しさん@おーぷん :2017/04/24(月)08:37:58 ID:???
どのぐらい遅いかって言うと、
COpy を Lazarus以下で検索すると、3万件ぐらいヒットするけど、
表示に50秒かかる
その間固まったまま

Application.ProcessMessagesを入れれば固まらないが

ノードの最後から探すだけで5倍速くなり、
ファイル名の比較を最後の文字から調べるだけでさらに倍速くなる。
313名無しさん@おーぷん :2017/04/24(月)08:41:18 ID:???
去年の12月2日に変えたのか

[lazarus] Diff of /trunk/ide/searchresultview.pp
http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/ide/searchresultview.pp?root=lazarus&r1=50520&r2=53531
314名無しさん@おーぷん :2017/04/24(月)09:13:31 ID:???
検索そのものの速さは、
最大キャッシュメモリを指定できるようにして、
メモリにおいておけばいいと思う。
315名無しさん@おーぷん :2017/04/26(水)05:34:43 ID:???
何か意味があるのかなこれ

[fpc] Diff of /trunk/rtl/objpas/classes/compon.inc
http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/objpas/classes/compon.inc?sortby=date&r1=35946&r2=35945&pathrev=35946
316名無しさん@おーぷん :2017/04/26(水)23:07:51 ID:???
FPList.Items の呼び出しが一つ減るのか
317名無しさん@おーぷん :2017/04/26(水)23:16:30 ID:???
0031628: Refactor of TComponent.FindComponent - Free Pascal/Lazarus Bug Tracker
http://bugs.freepascal.org/view.php?id=31628
318名無しさん@おーぷん :2017/04/29(土)15:00:39 ID:???
Split関数試してみたけど、本当ですか?

procedure Test(const S: string);
begin
 WriteLn(Length(S.Split(',')));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Test(''); // 0
 Test(','); // 1
 Test(',,'); // 2
 Test('A'); // 1
 Test('A,B,'); // 2
 Test(',B,'); // 2
 Test(',B,C'); // 3
end;
319名無しさん@おーぷん :2017/04/29(土)15:27:43 ID:???
右側がJavaScriptの数字

function Test(S) {
console.log(S.split(',').length);
}

Test(''); // 0 1
Test(','); // 1 2
Test(',,'); // 2 3
Test('A'); // 1 1
Test('A,B,'); // 2 3
Test(',B,'); // 2 3
Test(',B,C'); // 3 3
320名無しさん@おーぷん :2017/05/04(木)12:45:41 ID:???
去年の9月にデバッガの入りが遅いって話があった

lazarus 1.6 fpc3.0.0 slow gdb
http://forum.lazarus.freepascal.org/index.php/topic,33929.0.html
321名無しさん@おーぷん :2017/05/06(土)11:07:20 ID:???
ローカル変数でも初期化されるんかな

initialized delphi local values string dynamic array - Google 検索
https://www.google.co.jp/search?q=initialized+delphi++local+values+string+dynamic+array
322名無しさん@おーぷん :2017/05/06(土)12:17:45 ID:???
長い文字列や動的配列にゴミが入っていたらまずいことは分かるんだけど、
Delphiの文書からは見つけられない。

変数(Delphi) - RAD Studio
http://docwiki.embarcadero.com/RADStudio/Tokyo/ja/%E5%A4%89%E6%95%B0%EF%BC%88Delphi%EF%BC%89
>Wiin32 プラットフォームでは、ローカル変数の内容は、値が代入されるまで定義されません。
323名無しさん@おーぷん :2017/05/06(土)12:18:29 ID:???
FPC3.0.0からこれサポートしてた

Arrays
https://www.freepascal.org/docs-html/current/ref/refsu14.html#x38-490003.3.1
Type
 TIntegerArray = Array of Integer;

var
 A : TIntegerArray;

begin
 A:=TIntegerArray.Create(1,2,3);
 Writeln(Length(A));
end.
324名無しさん@おーぷん :2017/05/06(土)12:23:26 ID:???
Delphiはこういうのサポート

構造化型(Delphi) - RAD Studio
http://docwiki.embarcadero.com/RADStudio/Tokyo/ja/%E6%A7%8B%E9%80%A0%E5%8C%96%E5%9E%8B%EF%BC%88Delphi%EF%BC%89#.E5.8B.95.E7.9A.84.E9.85.8D.E5.88.97

var
 A: array of Integer;
begin
 A := [1, 2, 3];
end;

FPC3.0.2では、
unit1.pas(30,8) Error: Incompatible types: got "Set Of Byte" expected "{Dynamic} Array Of LongInt"
325名無しさん@おーぷん :2017/05/08(月)12:05:39 ID:???
こんな便利な関数あったんやな
GetEnumName から開放される

Str
https://www.freepascal.org/docs-html/rtl/system/str.html

System.SysUtils.IntToStr - RAD Studio API Documentation
http://docwiki.embarcadero.com/Libraries/Berlin/ja/System.SysUtils.IntToStr
326名無しさん@おーぷん :2017/05/08(月)12:18:39 ID:???
リンクミスってた

System.Str - RAD Studio API Documentation
http://docwiki.embarcadero.com/Libraries/Berlin/ja/System.Str
327名無しさん@おーぷん :2017/05/09(火)05:25:04 ID:???
<Alt+F7> ステップイン命令 Step into instr
<Alt+F8> ステップオーバー命令 Step over instr

IDE Window: Assembler - Free Pascal wiki
http://wiki.lazarus.freepascal.org/IDE_Window:_Assembler#Interface
Step over or into (one asm instruction)
Step over (one asm instruction)
328名無しさん@おーぷん :2017/05/09(火)05:29:14 ID:???
検索してもわからないけど、
アセンブラの命令を一つ実行するみたい。

ステップオーバー(コンテクスト) Step over context
ステップイン(コンテクスト) Step into context

lazarus "Step over context" - Google 検索
https://www.google.co.jp/search?q=lazarus+%22Step+over+context%22
329名無しさん@おーぷん :2017/05/09(火)05:31:19 ID:???
Step into instr との違いがわからない。
330名無しさん@おーぷん :2017/05/11(木)21:20:09 ID:???
System.TArray - RAD Studio API Documentation
http://docwiki.embarcadero.com/Libraries/Berlin/ja/System.TArray

TArray
http://lazarus-ccr.sourceforge.net/docs/lcl/dynamicarray/tarray.html
331名無しさん@おーぷん :2017/05/13(土)07:40:13 ID:???
デザイナでのキー入力は全部 TDesigner.IsDesignMsgで止まってる。
デザイナで使わないキー入力は、 False を返して、
TControl.WndProc で Dispatch できたら、
CN_KEYDOWNが送られて、Application.AddOnKeyDownBeforeHandler で
指定したイベントが発生するのだが。

https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/designer/designer.pp?root=lazarus&view=co&content-type=text%2Fplain
function TDesigner.IsDesignMsg(Sender: TControl; var TheMessage: TLMessage): Boolean;

https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/lcl/include/control.inc?root=lazarus&view=co&content-type=text%2Fplain
procedure TControl.WndProc(var TheMessage : TLMessage);
332名無しさん@おーぷん :2017/05/13(土)07:51:37 ID:???
これでコマンドは追加できるが。

uses IDECommands;
var
Cat: TIDECommandCategory;
begin
Cat := IDECommandList.FindCategoryByName('Designer');
RegisterIDECommand(Cat, 'Name', 'LocalizedName', F3, [], @TestClick);


333名無しさん@おーぷん :2017/05/13(土)12:25:09 ID:???
文字列や動的配列のSetCapacityは導入されないのだろうか
欲しいのだが

Granular dynamic arrays
http://forum.lazarus.freepascal.org/index.php?topic=28454.0

構造化型(Delphi) - RAD Studio
http://docwiki.embarcadero.com/RADStudio/Berlin/ja/%E6%A7%8B%E9%80%A0%E5%8C%96%E5%9E%8B%EF%BC%88Delphi%EF%BC%89#.E5.8B.95.E7.9A.84.E9.85.8D.E5.88.97
334名無しさん@おーぷん :2017/05/13(土)12:55:09 ID:???
Split関数のように、最終的な数がわからない場合、便利なのに

現在のSplitの実装だと、10増やすコードをその場で書いている。

https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/objpas/sysutils/syshelp.inc?view=co
function TStringHelper.Split(const Separators: array of string; AQuoteStart,
335名無しさん@おーぷん :2017/05/13(土)12:58:06 ID:???
TStringDynArray で保持する TStrings 系のクラスは便利かもしれんな
336名無しさん@おーぷん :2017/05/13(土)13:05:16 ID:???
Values[Name] を高速化するために、
TStringToStringTree を使った TStrings 派生クラスを作ろうとしたんだけど、
GetValueが仮想関数じゃないから無理だった。

Get と Put は仮想関数なんだけどね。。
337名無しさん@おーぷん :2017/05/13(土)17:52:47 ID:???
文字列のSetCapacityはこういうときに便利
下のJoin関数は

Result:=Values[StartIndex];
For I:=StartIndex+1 to L do
 Result:=Result+Separator+Values[I];
end;

とやってるけど、SetCapacity(Result, 全Valuesの長さの合計+Separatorの長さ*(Valuesの数-1))
で必要な長さを与えておけば、簡単・安全にメモリの再確保を回避するコードが書ける。
計算を間違えて足りなくても、特に問題は無いからね。

https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/objpas/sysutils/syshelp.inc?view=co
class function TStringHelper.Join(const Separator: string; const Values: array of string; StartIndex: Integer; ACount: Integer): string;
338名無しさん@おーぷん :2017/05/13(土)18:15:15 ID:???
TStringBuilderというのがそれみたい
TStringHelperとは違う。
オブジェクトの生成が必要なら意味ないな。

System.SysUtils.TStringBuilder.Capacity - RAD Studio API Documentation
http://docwiki.embarcadero.com/Libraries/Berlin/ja/System.SysUtils.TStringBuilder.Capacity
339名無しさん@おーぷん :2017/05/13(土)18:22:38 ID:???
そうだったんだ
Free不要

Delphi モバイル コンパイラでの自動参照カウント - RAD Studio
http://docwiki.embarcadero.com/RADStudio/Berlin/ja/Delphi_%E3%83%A2%E3%83%90%E3%82%A4%E3%83%AB_%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9%E3%81%A7%E3%81%AE%E8%87%AA%E5%8B%95%E5%8F%82%E7%85%A7%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88
>現在、Delphi モバイル コンパイラには、クラスの自動参照カウントが導入されています。
340名無しさん@おーぷん :2017/05/14(日)08:47:31 ID:???
ファイルメニューの「開く」は、標準で現在開いているファイルの
ディレクトリから開くんだね。
カレントディレクトリではなくて。

Feature Ideas - Lazarus wiki
http://wiki.lazarus.freepascal.org/Feature_Ideas#Common
341名無しさん@おーぷん :2017/05/14(日)08:51:09 ID:???
Feature Ideas - Lazarus wiki
http://wiki.lazarus.freepascal.org/Feature_Ideas#Common
enable menu access through access keys like under windows (i hate mouse sessions :o)
example: <alt>-<f> for file menu. Question: what operating system/widget set are you talking about?

他の人でも問題になってるんだね。
私の場合は
Debian8.7 LXD
Lazarus1.6.4 GTK2+
でおきる。
342名無しさん@おーぷん :2017/05/14(日)09:15:34 ID:???
>>340はファイルの保存もそうなってる
ちょっと一致しない時があるけど。
343名無しさん@おーぷん :2017/05/14(日)09:18:16 ID:???
C:\TEST\UNIT1.PAS を名前を付けて保存ダイアログを開いてキャンセルして、
c:\UNIT2.PAS を名前を付けて保存ダイアログを開くと、

C:\TEST\ でダイアログが開かれる
344名無しさん@おーぷん :2017/05/14(日)09:28:36 ID:???
検索出来ないんだね

site:svn.freepascal.org IDECommands - Google 検索
https://www.google.co.jp/search?q=site:svn.freepascal.org+IDECommands
345名無しさん@おーぷん :2017/05/14(日)09:31:11 ID:???
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/components/ideintf/idecommands.pas?root=lazarus&view=co&content-type=text%2Fplain

procedure ExecuteIDEShortCut(Sender: TObject; var Key: word; Shift: TShiftState;
 IDEWindowClass: TCustomFormClass);
begin
 if (OnExecuteIDECommand<>nil) and (Key<>VK_UNKNOWN) then
  OnExecuteIDEShortCut(Sender,Key,Shift,IDEWindowClass);
end;


 if (OnExecuteIDEShortCut<>nil) and (Key<>VK_UNKNOWN) then
じゃないの?
346名無しさん@おーぷん :2017/05/14(日)09:36:09 ID:???
こんなのあった

Free Pascal - Lazarus | Mailing List Archive
http://free-pascal-lazarus.989080.n3.nabble.com/

こっちより見やすいかもしれない。

The Lazarus Archives
http://lists.lazarus-ide.org/pipermail/lazarus/
347名無しさん@おーぷん :2017/05/14(日)09:45:10 ID:???
lazarus/idecommands.pas at master · alrieckert/lazarus · GitHub
https://github.com/alrieckert/lazarus/blob/master/components/ideintf/idecommands.pas#L850

これならヒットした

site:github.com ExecuteIDEShortCut - Google 検索
https://www.google.co.jp/search?q=site:github.com+ExecuteIDEShortCut
348名無しさん@おーぷん :2017/05/14(日)16:43:08 ID:???
DelphiはInteger型使ってる
SizeInt は PtrInt と同じ型

0029789: Length, SetLength, Copy, etc. have Integer istead of SizeInt type - Free Pascal/Lazarus Bug Tracker
https://bugs.freepascal.org/view.php?id=29789

[fpc] Revision 33194
https://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&sortby=date&revision=33194

System.Copy - RAD Studio API Documentation
http://docwiki.embarcadero.com/Libraries/Berlin/ja/System.Copy
349名無しさん@おーぷん :2017/05/14(日)16:49:28 ID:???
大事な大事な組み込みルーチン

https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/inc/system.fpd?view=co
350名無しさん@おーぷん :2017/05/14(日)16:51:22 ID:???
>>345

if Assigned(OnExecuteIDECommand)

でないとダメっぽい

System.Assigned - RAD Studio API Documentation
http://docwiki.embarcadero.com/Libraries/Berlin/ja/System.Assigned
351名無しさん@おーぷん :2017/05/15(月)19:43:50 ID:???
元号に関するコードあった。
Windows限定で。 でも表示されない

fpc/dati.inc at master · fpc-svn/fpc · GitHub
https://github.com/fpc-svn/fpc/blob/master/rtl/objpas/sysutils/dati.inc#L900

freepascal/sysutils.pp at master · graemeg/freepascal · GitHub
https://github.com/graemeg/freepascal/blob/master/rtl/win/sysutils.pp#L731
352名無しさん@おーぷん :2017/05/15(月)19:52:27 ID:???
freepascal/sysutils.pp at master · graemeg/freepascal · GitHub
https://github.com/graemeg/freepascal/blob/master/rtl/win/sysutils.pp#L756
Result := Copy(WideString(Result),1,1);

Result := CP932ToUTF8(Result);
で平成が出たぞ
353名無しさん@おーぷん :2017/05/15(月)20:09:04 ID:???
sysutils書き換えても反映しない
354名無しさん@おーぷん :2017/05/15(月)20:21:44 ID:???
1873年まで、日付がずれてたんだな

1872年 - Wikipedia
https://ja.wikipedia.org/wiki/1872%E5%B9%B4#.E3.81.A7.E3.81.8D.E3.81.94.E3.81.A8
>1月2日(明治4年11月22日) - 府県廃合を完了(3府72県)
>12月28日(明治5年11月28日) - 徴兵の詔(徴兵令)

元号から西暦への変換表 - Wikipedia
https://ja.wikipedia.org/wiki/%E5%85%83%E5%8F%B7%E3%81%8B%E3%82%89%E8%A5%BF%E6%9A%A6%E3%81%B8%E3%81%AE%E5%A4%89%E6%8F%9B%E8%A1%A8
355名無しさん@おーぷん :2017/05/17(水)13:58:20 ID:???
選択範囲の置き換えはここのコードがわかりやすかった

lazarus/sourceeditor.pp at master · fpc-svn/lazarus · GitHub
https://github.com/fpc-svn/lazarus/blob/master/ide/sourceeditor.pp#L4064
procedure TSourceEditor.UpperCaseSelection;
356名無しさん@おーぷん :2017/05/19(金)16:26:08 ID:???
わかった
components フォルダの下の各フォルダの下に
lib フォルダか、 units フォルダが作られている場合に、
そのライブラリは使われているので、移動できないんだ。

これで components フォルダ内のフォルダを 28 まで減らせた。
sdfはよくわからない
357名無しさん@おーぷん :2017/05/20(土)22:45:29 ID:???
IDE外でCodeToolsの
CodeToolBoss.GatherIdentifiers
を使うとincludeファイルが見つからない。
IDE内なら見つかるのだが。

[lazarus] CVS Updates
http://lists.lazarus-ide.org/pipermail/lazarus/2003-October/013825.html
"include file not found "sysutilh.inc"
358名無しさん@おーぷん :2017/05/21(日)03:11:46 ID:???
https://svn.freepascal.org/svn/lazarus/trunk/components/codetools/codetoolsconfig.pas
> Options.FPCSrcDir:='/home/username/freepascal/fpc';

わかったわ、
Winでは、FPCSrcDir が、 c:\fpc\3.0.2\source のように、 source まで含める必要がある。

Linuxだと、/usr/share/fpcsrc/3.0.2
なのだが。

これで FPC 関連のファイルは見つけられる。
Lazarus関連のファイルは、全部指定すればできた。
359名無しさん@おーぷん :2017/05/21(日)19:51:27 ID:???
Debianでセミコロンキーが 186 になってるのだが

// VK_SEMICOLON = 186;
360名無しさん@おーぷん :2017/05/21(日)20:12:07 ID:???
Debian では コロン : が 147($93) になってるんだ。

Win7 ではコロンは 186($BA)
セミコロンは 187($BB)
361名無しさん@おーぷん :2017/05/21(日)20:14:38 ID:???
xevだと
keycode 47 (keysym 0x3b, semicolon)
keycode 48 (keysym 0x3a, colon)
362名無しさん@おーぷん :2017/05/21(日)20:17:28 ID:???
LCLの lclproc.pas では、
186が ;
187は =
になってる
363名無しさん@おーぷん :2017/05/21(日)20:26:54 ID:???
英字配列はShift無しで = が打てるのか
まずいぞ

https://www.fmworld.net/biz/fmv/soft/w2k/caution/gif/softkeys.jpg
364名無しさん@おーぷん :2017/05/21(日)20:32:18 ID:???
海外も念頭に置くなら、
キーコードと入力される文字のリストを
設定ファイルとして持たせたほうが良さそう。
365名無しさん@おーぷん :2017/05/21(日)21:48:46 ID:???
TIDEMenuItem.Visible ではメニューを消せない。

procedure TTestForm.Button11Click(Sender: TObject);
var
 Value: string;
 Item: TIDEMenuItem;
begin
 Value := 'IDEMainMenu/File/itmFileNew/itmFileNewUnit';
 Item := IDEMenuRoots.FindByPath(Value, True);
 Item.Visible := False; // dame
 //Item.MenuItem.Visible := False; // ok
end;
366名無しさん@おーぷん :2017/05/21(日)21:49:20 ID:???
debian+gtk2 ではってこと
Win7では消せる。
367名無しさん@おーぷん :2017/05/22(月)17:24:56 ID:???
IDE外でCodeToolsを使うサンプル

type
 TMyCodeTools = class
 public
  class procedure InitCodeToolBoss(const ProjectDir: string = '');
  class function GetCodeBuffer(const FileName: string): TCodeBuffer; overload;
  class function GetCodeTool(CodeBuffer: TCodeBuffer): TCodeTool;
 end;

class procedure TMyCodeTools.InitCodeToolBoss(const ProjectDir: string = '');
var
 Options: TCodeToolsOptions;
 Dirs: string;
begin
 Options:=TCodeToolsOptions.Create;
 try
  Options.InitWithEnvironmentVariables;
  {$IFDEF WINDOWS}
  Options.TargetProcessor := 'i386';
  Options.TargetOS := 'win32';
  Options.LCLWidgetType := 'win32';
  Options.FPCSrcDir := 'D:\Lazarus\fpc\3.0.0\source';
  Options.FPCPath := 'D:\Lazarus\fpc\3.0.0\bin\i386-win32\fpc.exe';
  Options.LazarusSrcDir := 'D:\Lazarus';
  Options.ProjectDir := ProjectDir; // some methods need this

  // include file not found ??? と言われたらディレクトリを追加する。
  Dirs := 'D:\Lazarus\lcl\include'; // for include file not found "lcl_defines.inc"
  CodeToolBoss.DefineTree.Add(TDefineTemplate.Create('', '', '#IncPath',
   '$(#IncPath);' + Dirs, da_DefineRecurse));

  // unit not found: ??? と言われたらディレクトリを追加する。
  Dirs := 'D:\lazarus\components\codetools;' +
   'D:\lazarus\components\ideintf;' +
   'D:\lazarus\components\lazutils;' +
   'D:\Lazarus\lcl;' +
   'D:\Lazarus\lcl\forms;' +
   'D:\Lazarus\lcl\interfaces;' +
   'D:\Lazarus\lcl\widgetset;' +
   'D:\Lazarus\packager\registration';
  CodeToolBoss.DefineTree.Add(TDefineTemplate.Create('', '', '#UnitPath',
   '$(#UnitPath);' + Dirs, da_DefineRecurse));
  {$ENDIF}
368名無しさん@おーぷん :2017/05/22(月)17:26:06 ID:???
Linux用のコードはセキュリティー云々ってでるからコピペできん

  {$IFDEF LINUX}
  Options.TargetProcessor := 'i386';
  Options.TargetOS := 'linux';
  Options.LCLWidgetType := 'gtk2';
  Options.FPCSrcDir := ExpandFileName('/usr/share/fpcsrc/3.0.2');
  Options.FPCPath := ExpandFileName('/usr/bin/fpc');
  Options.LazarusSrcDir := ExpandFileName('/usr/share/lazarus/1.6.4');
  Options.ProjectDir := ProjectDir;
  {$ENDIF}

  CodeToolBoss.Init(Options);
 finally
  Options.Free;
 end;
end;
369名無しさん@おーぷん :2017/05/22(月)17:26:54 ID:???
Linuxでも、Linux用のパスに直したこの2つが必要。

  CodeToolBoss.DefineTree.Add(TDefineTemplate.Create('', '', '#IncPath',
   '$(#IncPath);' + Dirs, da_DefineRecurse));

  CodeToolBoss.DefineTree.Add(TDefineTemplate.Create('', '', '#UnitPath',
   '$(#UnitPath);' + Dirs, da_DefineRecurse));
370名無しさん@おーぷん :2017/05/22(月)17:29:07 ID:???
IDE外で使うには、
1)初期化
2)ファイル名からCodeBuffer 作成
3)CodeBuffer から CodeTool 作成
が基本。
CodeTool を作ると、 ソースをパースして、ノードに分けてくれる。

class function TMyCodeTools.GetCodeBuffer(const FileName: string): TCodeBuffer;
begin
 Result := CodeToolBoss.LoadFile(FileName, False, False);
 if Result = nil then
  raise Exception.Create('CodeToolBoss.LoadFile error: ' + SLineBreak +
   FileName + SLineBreak + CodeToolBoss.ErrorMessage);
end;

class function TMyCodeTools.GetCodeTool(CodeBuffer: TCodeBuffer): TCodeTool;
begin
 // Parse and create nodes
 // WithStatements: create "With Block" nodes
 // OnlyInterface: only Interface Section
 if not CodeToolBoss.Explore(CodeBuffer, Result, True) then
  raise Exception.Create('CodeToolBoss.Explore error: ' + SLineBreak +
   CodeToolBoss.ErrorMessage);
end;

type
 ct = TMyCodeTools;
371名無しさん@おーぷん :2017/05/22(月)17:30:50 ID:???
IDE内で使うなら、初期化はいらないみたい。
また、CodeBuffer はエディタから作成して、
現在表示中のユニットを操作できる。
キャッシュやら何やらまだ良くわからないけど。
372名無しさん@おーぷん :2017/05/22(月)17:32:18 ID:???
uses忘れたわ

uses
 Types, Classes, SysUtils, Math,
 LCLIntf, Controls, Forms, StdCtrls,
 CodeToolManager, CodeCache, DefineTemplates, IdentCompletionTool,
 FindDeclarationTool, CodeToolsConfig, ExprEval;
373名無しさん@おーぷん :2017/05/22(月)17:32:46 ID:???
const
 {$IFDEF WINDOWS}
 SampleFileName = 'd:\lazarus\components\codetools\ide\codyidentifiersdlg.pas';
 {$ELSE}
 SampleFileName = '/usr/share/lazarus/1.6.4/components/codetools/ide/codyidentifiersdlg.pas';
 {$ENDIF}

procedure TForm1.Button1Click(Sender: TObject);
begin
 Memo1.Lines.LoadFromFile(SampleFileName);
 Memo1.CaretPos := Point(26, 57);
 Memo1MouseDown(Memo1, mbLeft, [], 0, 0);
end;
374名無しさん@おーぷん :2017/05/22(月)17:33:25 ID:???
procedure TForm1.Memo1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
var
 CodeBuffer: TCodeBuffer;
 Item: TIdentifierListItem;
 I: Integer;
begin
 ct.InitCodeToolBoss;
 CodeBuffer := ct.GetCodeBuffer(SampleFileName);
 if CodeToolBoss.GatherIdentifiers(CodeBuffer, Memo1.CaretPos.X + 1, Memo1.CaretPos.Y + 1) then
 begin
  Memo2.Clear;
  // for I := 0 to CodeToolBoss.IdentifierList.Count - 1 do
  for I := 0 to Min(50, CodeToolBoss.IdentifierList.Count - 1) do
  begin
   Item := CodeToolBoss.IdentifierList.FilteredItems[I];
   Memo2.Lines.Add(Item.Identifier);
  end;
 end
 else
 begin
  Memo2.Lines.Add('Error: ' + CodeToolBoss.ErrorMessage);
  Memo2.Lines.Add('Memo1.CaretPos=%d,%d', [Memo1.CaretPos.X, Memo1.CaretPos.Y]);
 end;
end;
375名無しさん@おーぷん :2017/05/22(月)17:39:44 ID:???
  Options.FPCSrcDir := ExpandFileName('/usr/share/fpcsrc/3.0.2');
  Options.FPCPath := ExpandFileName('/usr/bin/fpc');
  Options.LazarusSrcDir := ExpandFileName('/usr/share/lazarus/1.6.4');

ExpandFileName はいらなかったです。
376名無しさん@おーぷん :2017/05/22(月)17:49:14 ID:???
>>356 の続き

https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk//ide/Makefile.fpc?root=lazarus&view=co

で BIG_IDE_OPTIONS にあるのが削除できなかったとわかった。
377名無しさん@おーぷん :2017/05/22(月)21:32:02 ID:???
d:\lazarus\components\Makefile
d:\lazarus\components\Makefile.fpc
d:\lazarus\ide\Makefile.fpc

から不要な行の行頭に#を入れてコメントアウトしたら、
必須Componentのみまで減らせた。
8ディクトリ
378名無しさん@おーぷん :2017/05/22(月)21:53:38 ID:???
Makefile はタブ文字で区切ってるのか?
スペースだとエラーが出たわ。

- 自動化のためのGNU Make入門講座 - Makefileの基本:ルール
http://objectclub.jp/community/memorial/homepage3.nifty.com/masarl/article/gnu-make/rule.html
>[そのファイルを作るためのコマンド行]の手前には,タブ1文字を入れることに注意してください.
379名無しさん@おーぷん :2017/05/23(火)15:24:09 ID:???
こんなのあったけど、Alt+Fでメニューが出ないのと関係しているのだろうか

[lazarus] Contents of /trunk/lcl/interfaces/gtk2/gtk2proc.inc
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/lcl/interfaces/gtk2/gtk2proc.inc?view=markup&root=lazarus#l1888
function HandleGTKKeyUpDown(AWidget: PGtkWidget; AEvent: PGdkEventKey;
380名無しさん@おーぷん :2017/05/23(火)17:20:16 ID:???
同じファイルに
procedure ShareWindowAccelGroups(AWindow: PGtkWidget);

という、いかにもなものもあった。
381名無しさん@おーぷん :2017/05/25(木)16:51:57 ID:???
そうだったのか

System.Longint - RAD Studio API Documentation
http://docwiki.embarcadero.com/Libraries/Berlin/ja/System.Longint
>64ビット iOS プラットフォームでは、LongInt は 8 バイトの符号付き整数で、その範囲は -263 ~ 263-1 です。

単純型(Delphi) - RAD Studio
http://docwiki.embarcadero.com/RADStudio/Berlin/ja/%E5%8D%98%E7%B4%94%E5%9E%8B%EF%BC%88Delphi%EF%BC%89
382名無しさん@おーぷん :2017/05/25(木)22:24:25 ID:???
コメントのネストを認めると、
こういう問題が起きるが、
オプションで切れないみたい。

383名無しさん@おーぷん :2017/05/28(日)14:56:32 ID:???
Lazarus won't start
http://forum.lazarus-ide.org/index.php/topic,37032.msg247584.html#msg247584

lazarus.exe --debug-log=c:\lazlog.txt
384名無しさん@おーぷん :2017/05/28(日)16:13:29 ID:???
>>324
trunk では可能らしい

about procedures / dyn. arrays / setlength
http://forum.lazarus-ide.org/index.php/topic,37029.msg247590.html#msg247590
385名無しさん@おーぷん :2017/05/28(日)21:36:37 ID:???
GNU Pascalのせいなのかな

LongInt - The GNU Pascal Manual
http://www.gnu-pascal.de/gpc/LongInt.html#LongInt
>LongInt is a signed integer type which is longer than Integer.
>On some platforms it is 64 bits wide and thus has a range of
> -9223372036854775808 .. 9223372036854775807.
386名無しさん@おーぷん :2017/05/28(日)21:38:40 ID:???
64ビットコンピューティング最前線:64ビットになると何が変わる?――64ビットプログラミングのデータモデル (2/2) - ITmedia エンタープライズ
http://www.itmedia.co.jp/enterprise/articles/0506/13/news006_2.html
387名無しさん@おーぷん :2017/05/29(月)05:43:29 ID:???
Wordが4バイトになっとるの

Word - The GNU Pascal Manual
http://www.gnu-pascal.de/gpc/Word.html#Word
Word = Cardinal;

Ordinal types
https://www.freepascal.org/docs-html/current/ref/refsu4.html
Word 0 .. 65535 2
388名無しさん@おーぷん :2017/05/30(火)16:47:05 ID:???
アライメントされてるんやな

Porting from Mac Pascal - Free Pascal wiki
http://wiki.lazarus.freepascal.org/Porting_from_Mac_Pascal
>In Traditional Mac Pascal, the types Byte and Char occupies 2 bytes, except in packed records and in arrays.
389名無しさん@おーぷん :2017/06/03(土)05:26:00 ID:???
lpsファイルが200kbぐらいになると、
起動に1秒ぐらい余計にかかるかも。
削除したら速くなった
390名無しさん@おーぷん :2017/06/03(土)06:46:01 ID:???
lpiファイルが無いと、プロジェクトを開けないんだよね。
lprファイルだけじゃだめで。
lpsファイルは削除できるのだが。

んで、lpiファイルには、
ppuファイルの出力先や、exeファイルの出力先等、
環境に依存する設定が保存されちゃってるんだよな。

lpiファイルが無い場合は、デフォルトの設定が使われる
ってなことは無くて、 その前のプロジェクトが開かれるみたい。

lprファイルをダブルクリックしてIDEを開くと、
前のプロジェクトで、 ダブルクリックしたlpr ファイルを開くことになる。
実際には前のプロジェクトを開いていることに気をつけないと、
上書き保存でファイルを消してしまうかもしれない。
391名無しさん@おーぷん :2017/06/03(土)07:00:20 ID:???
プロジェクトオプションの「コンパイラオプションを既定値に設定」は
プロジェクトを新規に作成した時に使われる設定。

フォルダをコピーして新規プロジェクトを作成しているなら、
まったく意味の無い機能。
392名無しさん@おーぷん :2017/06/05(月)23:34:56 ID:???
CodeToolを使ってNodeを表示するプログラム
http://ux.getuploader.com/open2ch1/download/746/codetreenode.tar

codetreenode.tar
MD5 388a3c4eb5dc7b0c1217e97a9b73fcbf
SH1A 05e24a635da40f78eb4eeb6bd9217e989138b5ef

393名無しさん@おーぷん :2017/06/05(月)23:59:14 ID:???
識別子=ユニット名のリスト作成プログラム
クラス名や変数名はわかるのに、宣言されているユニット名がわからない時に使えます。

Win32用の、Units=1210 Idents=78286 を付けておきました。

enumidents.tar.bz2(enumidents.tar.bz2) ダウンロード | おーぷん2ちゃんねるろだ | uploader.jp
http://ux.getuploader.com/open2ch1/download/747/enumidents.tar.bz2/

MD5 55aaa83db5c104f8df3f46df5ce1096a
SH1A ff412534f8d933578434d3fc7ff8092a672b12f5

394名無しさん@おーぷん :2017/06/06(火)05:54:14 ID:???
肝心なこと書き忘れた

ct.InitCodeToolBoss;

のパスは、自分の環境に合わせて治す必要があります。
395名無しさん@おーぷん :2017/06/06(火)06:00:08 ID:???
変更のあったパッケージを、コンパイル+インストール+IDE再起動してくれる関数。
これを使わないとちょっと面倒。
ファイル1個の変更なら、Celeron2GHzで5秒でIDEが再起動する。

procedure InstallPackages(const Args: array of string);
var
 List: TObjectList;
 P: TLazPackageId;
 I: Integer;
begin
 List := TObjectList.Create(True);
 try
  for I := 0 to High(Args) do
  begin
   P := TLazPackageId.Create;
   List.Add(P);
   P.Name := Args[I];
  end;
  if not PackageEditingInterface.CheckInstallPackageList(List, []) then
   Exit;
  if PackageEditingInterface.InstallPackages(List, [piiifQuiet,
   piiifSkipChecks, piiifRebuildIDE ]) <> mrOK then
   Exit;
 finally
  List.Free;
 end;
end;

procedure MakeIDE(Sender: TObject);
begin
 InstallPackages(['FCL']);
end;
396名無しさん@おーぷん :2017/06/06(火)06:00:31 ID:???

function GetCategoryByName(const CatName: string): TIDECommandCategory;
begin
 Result := IDECommandList.FindCategoryByName(CatName); // CaseSensitive
 if Result = nil then
  raise Exception.CreateFmt('Cant find category(%s)', [CatName]);
end;

procedure Register;
var
 Cat: TIDECommandCategory;
begin
 try
  Cat := GetCategoryByName('Custom'); // case sensitive
  RegisterIDECommand(Cat, 'Compile package and reboot',
   'Compile changed packages and reboot the lazarus', nil, @MakeIDE);
 except
  on E: Exception do MessageBox(E.Message);
 end;
end;
397名無しさん@おーぷん :2017/06/07(水)18:23:58 ID:???
Debianでzipパッケージをインストールしたら、zipで圧縮できるようになりました。
これでWindowsでも解凍できると思います。

codetools.zip(codetools.zip) ダウンロード | おーぷん2ちゃんねるろだ | uploader.jp
http://ux.getuploader.com/open2ch1/download/748/codetools.zip

MD5 f78981fe349565345d93572bb29aa3f9
SH1A 72c8e64810317e9ffcf25147bc66d494c386b324
398名無しさん@おーぷん :2017/06/07(水)18:28:49 ID:???
tarだけじゃ圧縮しないんだね
単に複数ファイルをまとめるだけ。

んで、 bz2 形式はWindowsで標準で解凍できない。
399名無しさん@おーぷん :2017/06/13(火)22:07:51 ID:???
テストプロジェクトを構築するディレクトリ

ユニット出力ディレクトリ
を同じにしてはいけない。

うっかり保存して、uni1.pas を ユニット出力ディレクトリ
に作成すると、 他のプロジェクトでも、unit1 を使う時に
ユニット出力ディレクトリのunit1.pasが優先される。
400名無しさん@おーぷん :2017/07/03(月)13:59:53 ID:???
Debian9(stretch)でLazarusは1.6.2になったぞ
apt-get install lazarus
で1.6.2がインストールされるはず

Debian -- "stretch" のサブセクション devel に含まれるソフトウェアパッケージ
https://packages.debian.org/stable/devel/#lazarus


401名無しさん@おーぷん :2017/07/03(月)14:01:29 ID:???
jessieの頃は 1.2.4 だった

Debian -- "jessie" のサブセクション devel に含まれるソフトウェアパッケージ
https://packages.debian.org/jessie/devel/#lazarus
402名無しさん@おーぷん :2017/07/03(月)18:51:32 ID:???
OnCreateではEmptyなのに、 Button1Clickでは not empty だ

procedure TForm1.FormCreate(Sender: TObject);
begin
 // empty
 Caption := IfThen(Clipboard.AsText = '', 'empty', 'not empty');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 // not empty
 Caption := IfThen(Clipboard.AsText = '', 'empty', 'not empty');
end;
403名無しさん@おーぷん :2017/07/03(月)18:59:17 ID:???
>>224 の時は、
 Application.CreateForm(TForm, Form);
のあとで取得してたからできたんだな
404名無しさん@おーぷん :2017/07/03(月)22:55:10 ID:???
CreateWndのinherited後に有効になった

AfterConstruction begin
 Clipboard=
 FormCreate begin
  Clipboard=
 FormCreate end
 Clipboard=
AfterConstruction end
CreateWnd begin
 Clipboard=
 CreateParams begin
  Clipboard=
  Clipboard=
 CreateParams end
 Clipboard=HasText
CreateWnd end
405名無しさん@おーぷん :2017/07/03(月)22:59:42 ID:???
ハンドルが必要なら、こうやれば使えたわ

procedure TForm1.FormCreate(Sender: TObject);
begin
 HandleNeeded;
end;

AfterConstruction begin
 Clipboard=
 CreateWnd begin
  Clipboard=
  CreateParams begin
   Clipboard=
   Clipboard=
  CreateParams end
  Clipboard=HasText
 CreateWnd end
 FormCreate begin
  Clipboard=HasText
 FormCreate end
 Clipboard=HasText
AfterConstruction end
406名無しさん@おーぷん :2017/07/15(土)16:01:47 ID:???
GtkIMContextの使い方
http://gtklab.osdn.jp/gtkim/

IMEを使う(GTK+編) - Qiita
http://qiita.com/496_/items/452f907c84bd9922050a
407名無しさん@おーぷん :2017/08/18(金)07:11:27 ID:???
case 文で文字列が使えるけど、
大文字小文字を区別しないのと、
木構造を使った比較ができたら
相当便利だと思うんだけどな。
408名無しさん@おーぷん :2017/08/21(月)07:05:36 ID:???
ルート権限でなくても変えられた

xrandr --size 800x600
xrandr --size 1024x768

Changing X11 resolution on the fly
https://debian-administration.org/article/201/Changing_X11_resolution_on_the_fly


Windowsはこっち

Application full screen mode - Free Pascal wiki
http://wiki.freepascal.org/Application_full_screen_mode
409名無しさん@おーぷん :2017/08/21(月)09:07:48 ID:???
uses に Unix を追加して、

var
 OldSize: string;

procedure TForm1.FormCreate(Sender: TObject);
begin
 OldSize := Format('%dx%d', [Screen.Width, Screen.Height]);

 WindowState := wsFullScreen;
 fpSystem('xrandr --size 640x480');

 // Screen.WidthとHeight はだ640x480にならない
 Button1.Caption := Format('%dx%d', [Screen.Width, Screen.Height]);
end;
410名無しさん@おーぷん :2017/08/21(月)09:07:57 ID:???
procedure TForm1.FormDestroy(Sender: TObject);
begin
 fpSystem('xrandr --size ' + OldSize);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Button1.Caption := Format('%dx%d', [Screen.Width, Screen.Height]);
end;
411名無しさん@おーぷん :2017/08/29(火)11:35:40 ID:???
How to eliminate compiler hint "Local variable does not seem to be initialized"
http://forum.lazarus-ide.org/index.php/topic,38102.msg258027.html

"Local variable does not seem to be initialized" for move, fillchar - won't fix?
https://forum.lazarus.freepascal.org/index.php?topic=36389.0
412名無しさん@おーぷん :2017/08/29(火)13:52:34 ID:???
今確認したら、これでワーニング出なかったけどな。
1.6.4で

procedure TForm1.FormCreate(Sender: TObject);
var
 A: array[0..100] of Char;
begin
 FillChar(A, SizeOf(A), 0);
end;
   
413名無しさん@おーぷん :2017/08/29(火)13:57:04 ID:???
プロジェクトのオプションと、IDEオプションのフォームは
両方 TIDEOptionsDialog
414名無しさん@おーぷん :2017/08/31(木)14:43:13 ID:???
プログラムでメインメニューを表示する方法ってないのかな
PopupMenu ならできるのだが
415名無しさん@おーぷん :2017/08/31(木)15:26:04 ID:???
GtkMenu: GTK+ 2 Reference Manual
https://developer.gnome.org/gtk2/stable/GtkMenu.html#gtk-menu-popup

Manual Menu Example
https://developer.gnome.org/gtk-tutorial/stable/x1577.html
https://developer.gnome.org/gtk-tutorial/stable/images/menu.png

これじゃ出ない

procedure TForm1.Button2Click(Sender: TObject);
begin
 gtk_menu_popup(PGtkMenu(MainMenu1.Handle), nil, nil, nil,
  nil, 1, gtk_get_current_event_time());
end;
416名無しさん@おーぷん :2017/08/31(木)15:33:04 ID:???
これだとポップアップメニューで表示される

procedure TForm1.Button3Click(Sender: TObject);
var
 MenuWidget: PGtkWidget;
begin
 MenuWidget := gtk_menu_item_get_submenu(PGtkMenuItem(MainMenu1.Items[0].Handle));
 gtk_menu_popup(PGtkMenu(MenuWidget), nil, nil, nil, nil, 0, gtk_get_current_event_time());
end;

417名無しさん@おーぷん :2017/08/31(木)19:35:10 ID:???
Debian9+LXDE
Leafpadでも同じだけど、
Altキー押しっぱなしで、
Fキーを押して放す、
Aキーを押して放す、
で、メニューが選択されない。

Firefoxでは可能。
418名無しさん@おーぷん :2017/08/31(木)21:18:14 ID:???
nomaフォントが何か間違えているのか

419名無しさん@おーぷん :2017/08/31(木)21:18:59 ID:???


420名無しさん@おーぷん :2017/08/31(木)21:20:16 ID:???
こっちは Unifont

421名無しさん@おーぷん :2017/09/02(土)18:49:40 ID:???
UniFontは無いけど

日本語フォントの比較 - Wikipedia
https://ja.wikipedia.org/wiki/%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%E3%81%AE%E6%AF%94%E8%BC%83
422名無しさん@おーぷん :2017/09/02(土)19:14:11 ID:???
Monaフォント

423名無しさん@おーぷん :2017/09/02(土)19:14:52 ID:???
UniFont

424名無しさん@おーぷん :2017/09/02(土)19:15:21 ID:???
Monaフォントはパブリックドメインってことだけど、
一部が潰れているのが残念。
425名無しさん@おーぷん :2017/09/02(土)19:46:35 ID:???
NotoフォントはTrueType

Noto - Wikipedia
https://ja.wikipedia.org/wiki/Noto
426名無しさん@おーぷん :2017/09/02(土)19:46:59 ID:???
TrueTypeというか、アウトラインフォント
427名無しさん@おーぷん :2017/09/02(土)21:54:21 ID:???
Get, Set and Handle Display Device Modes in Delphi Code
http://delphi.about.com/od/graphics/a/change_display.htm

ChangeDisplaySettings 関数
https://msdn.microsoft.com/ja-jp/library/cc428309.aspx
428名無しさん@おーぷん :2017/09/03(日)21:31:22 ID:???
LCLは単純にScanLineを使って書き込めるわけじゃないみたいだ。
BeginUpdateとEndUpdateがDelphiには無い。

Vcl.Graphics.TBitmap のメソッド - RAD Studio API Documentation
http://docwiki.embarcadero.com/Libraries/Berlin/ja/Vcl.Graphics.TBitmap_Methods

Lazarus scanline is not portable - Google 検索
https://www.google.co.jp/search?q=Lazarus+scanline+is+not+portable
429名無しさん@おーぷん :2017/09/04(月)14:57:40 ID:???
TImage scanline not draws second time after drawing on Canvas
http://forum.lazarus.freepascal.org/index.php/topic,25160.msg152408.html
430名無しさん@おーぷん :2017/09/04(月)18:26:26 ID:???
StretchBlt はあるけど、 StretchDIBits が無い
SetDIBitsToDeviceもない
SetDIBitsToDeviceは実装予定も無いみたい

StretchDIBits
http://lazarus-ccr.sourceforge.net/docs/lcl/lclintf/stretchdibits.html

[lazarus] Contents of /trunk/lcl/interfaces/win32/win32winapi.inc
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/lcl/interfaces/win32/win32winapi.inc?view=markup&root=lazarus#l3447

[lazarus] Contents of /trunk/lcl/interfaces/gtk2/gtk2winapi.inc
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/lcl/interfaces/gtk2/gtk2winapi.inc?view=markup&root=lazarus#l9533

stretchdibits
https://www.mail-archive.com/search?l=lazarus%40miraclec.com&q=stretchdibits&x=0&y=0
431名無しさん@おーぷん :2017/09/04(月)18:53:05 ID:???
Fast direct pixel access - Free Pascal wiki
http://wiki.freepascal.org/Fast_direct_pixel_access#TLazIntfImage
>But TBitmap.ScanLine is not supported by LCL.
432名無しさん@おーぷん :2017/09/04(月)19:41:17 ID:???
wineのソース

source.winehq.org Git - wine.git/tree - dlls/gdi32/
https://source.winehq.org/git/wine.git/tree/HEAD:/dlls/gdi32

nulldrv_SetDIBitsToDevice - Google 検索
https://www.google.co.jp/search?q=nulldrv_SetDIBitsToDevice
433名無しさん@おーぷん :2017/09/04(月)20:28:27 ID:???
Manpage of XPutImage
http://xjman.dsl.gr.jp/man/man3/XPutImage.3x.html

XImage構造体 - Xlibプログラミング入門
http://www43.atpages.jp/opicon69/xlib/img01.html

Xlib から Gdk へ
http://www.nurs.or.jp/~hir/memo/gtk/xlib.html

Drawing Primitives: GDK 2 Reference Manual
https://developer.gnome.org/gdk2/stable/gdk2-Drawing-Primitives.html#gdk-draw-pixbuf

gdk2のは、Cairo使えって出てくる

cairo - Wikipedia
https://ja.wikipedia.org/wiki/Cairo
434名無しさん@おーぷん :2017/09/04(月)20:54:30 ID:???
Gtk+2 では、
TObject(Canvas.Handle).ClassName = 'TGtkDeviceContext'
435名無しさん@おーぷん :2017/09/04(月)22:04:24 ID:???
GC
http://xjman.dsl.gr.jp/X11R6/X11/CH07.html
436名無しさん@おーぷん :2017/09/04(月)22:06:17 ID:???
CustomDrawn は X11 を使えるのか

lazarus/customdrawnint.pas at master · alrieckert/lazarus · GitHub
https://github.com/alrieckert/lazarus/blob/master/lcl/interfaces/customdrawn/customdrawnint.pas#L509
437名無しさん@おーぷん :2017/09/04(月)22:34:04 ID:???
点を描く - Xlibプログラミング入門
http://www43.atpages.jp/opicon69/xlib/g04.html
438名無しさん@おーぷん :2017/09/04(月)23:43:36 ID:???
pf32Bit の Bitmap に ScanLine を使って
RGBAQuad型 のデータ(Alphaは255)を書き込むと
そのCanvasを使った描画が出来なくなるっぽい。

RGBQuad なら大丈夫。

Alpha=rgbReservedは無視してくれるのかと思ったら
439名無しさん@おーぷん :2017/09/05(火)20:36:09 ID:???
GetTickCount64 function (Windows)
https://msdn.microsoft.com/en-us/library/windows/desktop/ms724411(v=vs.85).aspx
>The resolution of the GetTickCount64 function is limited to the resolution of the system timer,
>which is typically in the range of 10 milliseconds to 16 milliseconds.
440名無しさん@おーぷん :2017/09/05(火)20:56:24 ID:???
high resolution timer linux - Google 検索
https://www.google.co.jp/search?q=high+resolution+timer+linux

カーネルにおけるタイマー事情 ~第2回 カーネル内の時刻/時間関連サブシステム~ | VA Linux Systems Japan株式会社
http://www.valinux.co.jp/technologylibrary/document/linuxkernel/timer0002/

c - How to create a high resolution timer in Linux to measure program performance? - Stack Overflow
https://stackoverflow.com/questions/6749621/how-to-create-a-high-resolution-timer-in-linux-to-measure-program-performance


Win はここで

毎時実行の方法を改良してみる
http://www.interq.or.jp/moonstone/person/del/zenact04.htm
441名無しさん@おーぷん :2017/09/05(火)20:57:12 ID:???
GetTickCount64 が2つある

[fpc] Contents of /trunk/rtl/objpas/sysutils/sysutilh.inc
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/objpas/sysutils/sysutilh.inc?view=markup&sortby=date#l29

[lazarus] Contents of /trunk/lcl/lclintf.pas
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/lcl/lclintf.pas?view=markup&root=lazarus&sortby=date#l74
442名無しさん@おーぷん :2017/09/07(木)17:33:39 ID:???
test
443名無しさん@おーぷん :2017/09/07(木)17:35:01 ID:???
Debianはこれで1が出た
var
T: QWord;
begin
T := GetTickCount64;
S l e e p(1);
Caption := IntToStr(GetTickCount64 - T);
end;
444名無しさん@おーぷん :2017/09/07(木)17:36:27 ID:???
スリープ(1)でグリーンスクリーンが出た
445名無しさん@おーぷん :2017/09/07(木)21:33:43 ID:???
一時的なTBitmapを作ってやってる

bgrabitmap/bgralclbitmap.pas at master · bgrabitmap/bgrabitmap · GitHub
https://github.com/bgrabitmap/bgrabitmap/blob/master/bgrabitmap/bgralclbitmap.pas#L586
ACanvas.StretchDraw(Rect, Temp);

gtk の gdk_draw_rgb_32_image を使ってる
bgrabitmap/bgragtkbitmap.pas at master · bgrabitmap/bgrabitmap · GitHub
https://github.com/bgrabitmap/bgrabitmap/blob/master/bgrabitmap/bgragtkbitmap.pas#L230
446名無しさん@おーぷん :2017/09/07(木)21:44:05 ID:???
ソース内をXPutImageで検索すると、いくつか見るかる
447名無しさん@おーぷん :2017/09/07(木)21:52:36 ID:???
XShmPutImageの方が速い

Copying off-sceen images to screen is not always optimal in Xorg fb code · Issue #9 · ssvb/xf86-video-fbturbo · GitHub
https://github.com/ssvb/xf86-video-fbturbo/issues/9
448名無しさん@おーぷん :2017/09/08(金)05:26:28 ID:???
Accessing the Interfaces directly - Lazarus wiki
http://wiki.lazarus.freepascal.org/Accessing_the_Interfaces_directly
> You can get a drawable, for example with: TDeviceContext(MyCanvas.Handle).Drawable
449名無しさん@おーぷん :2017/09/09(土)16:33:28 ID:???
オブジェクトインスペクタで、
alClientのところを lClientでエンターキーを押すと
AVが出るってことだけど、(32bit Debian gtk2 では出なかったが)

[BUG] Access Violation on invalid Align value
http://forum.lazarus-ide.org/index.php/topic,38208.msg258994.html

[lazarus] Contents of /trunk/components/ideintf/objectinspector.pp
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/components/ideintf/objectinspector.pp?view=markup&root=lazarus&sortby=date
450名無しさん@おーぷん :2017/09/09(土)17:06:43 ID:???
コンパイラは速いに越したことはないけど、
IDEはデバッグコード入れまくっても問題無いのだが
451名無しさん@おーぷん :2017/09/09(土)21:29:23 ID:???
オフスクリーンバッファをXShmCreateImageで作って、
XShmPutImageで描画するさんぷる

http://www.ssec.wisc.edu/~billh/bp/xshm.c
452名無しさん@おーぷん :2017/09/09(土)21:41:55 ID:???
こいつで Caption = 0(pfDevice)
Button1.Caption = 6(pf24Bit)
と出たからな
procedure TForm1.Button1Click(Sender: TObject);
var
B: TBitmap;
begin
B := TBitmap.Create;
try
B.Width := 640;
B.Height := 480;
B.PixelFormat := pf8Bit;
Caption := IntToStr(Integer(B.PixelFormat));
Canvas.Draw(0, 0, B);
Button1.Caption := IntToStr(Integer(B.PixelFormat));
finally
B.Free;
end;
end;
453名無しさん@おーぷん :2017/09/09(土)21:46:41 ID:???
こうすれば 3 と 0 になる
だから使いたくないんだけど、
クロスプラットフォームなウィンドウへの描画方法が
良くわからない。

procedure TForm1.Button1Click(Sender: TObject);
var
 B: TBitmap;
begin
 B := TBitmap.Create;
 try
  B.Width := 640;
  B.Height := 480;
  B.PixelFormat;
  B.PixelFormat := pf8Bit;
  Caption := IntToStr(Integer(B.PixelFormat));
  Canvas.Draw(0, 0, B);
  Button1.Caption := IntToStr(Integer(B.PixelFormat));
 finally
  B.Free;
 end;
end;
454名無しさん@おーぷん :2017/09/09(土)22:54:45 ID:???
OpenGL使うといいらしい

How is the fastest way to convert array to image canvas data?
http://forum.lazarus.freepascal.org/index.php/topic,23532.0.html
455名無しさん@おーぷん :2017/09/09(土)23:01:22 ID:???
2013年2月の記事

How to convert TBitMap 32bit to 24bit? [solved]
http://forum.lazarus.freepascal.org/index.php/topic,19990.0.html
>I'm not sure you can assign PixelFormat like that.
>I've read somewhere that it is only provided for compatiblity with Delphi.
456名無しさん@おーぷん :2017/09/09(土)23:05:49 ID:???
TLazIntfImageとTBitmapを相互変換するってことだが、
オーバーヘッドが気になる。

Delphi code using ScanLine
http://forum.lazarus.freepascal.org/index.php/topic,19807.0.html
457名無しさん@おーぷん :2017/09/10(日)04:08:05 ID:???
Straight-Launcher/bgragtkbitmap.pas at master · gmoraesalvarez/Straight-Launcher · GitHub
https://github.com/gmoraesalvarez/Straight-Launcher/blob/master/bgrabitmap/bgragtkbitmap.pas#L210
gdk_draw_rgb_32_image(TGtkDeviceContext(dest).Drawable,
TGtkDeviceContext(Dest).GC, pos.X,pos.Y,
AWidth,AHeight, GDK_RGB_DITHER_NORMAL,
AData, AWidth*sizeof(TBGRAPixel));
458名無しさん@おーぷん :2017/09/10(日)04:35:38 ID:???
PGdkPixbuf from stream
http://forum.lazarus.freepascal.org/index.php/topic,9478.msg46498.html#msg46498

 {$ifdef LCLGtk2}
  Cairo, gdk2, gtkDef, gtkProc,
 {$endif}
  Graphics, Classes, SysUtils, opbitmap;

{$ifdef LCLGtk2}
function gdk_cairo_create(drawable: PGdkDrawable): Pcairo_t; cdecl; external gdklib;

procedure OpBitmapPaint32(Canvas:Graphics.TCanvas; Bmp: TOpBitmap; X, Y: integer);
var cr: Pcairo_t;
 surface: Pcairo_surface_t;
begin
 Bmp.PixelFormat := pf32bit;
 cr := gdk_cairo_create(TGtkDeviceContext(Canvas.Handle).Drawable);
 surface := cairo_image_surface_create_for_data(Bmp.ScanLine[0], CAIRO_FORMAT_RGB24, Bmp.Width, Bmp.Height, Bmp.Data.LineLength);
 if surface <> nil then
 begin
  cairo_set_source_surface(cr, surface, X, Y);
  cairo_paint(cr);
 end;
 cairo_destroy(cr);
 cairo_surface_destroy(surface);
end;
{$endif}
459名無しさん@おーぷん :2017/09/10(日)04:58:18 ID:???
8bitを色付きで描画できないみたいだ

Image Surfaces: Cairo: A Vector Graphics Library
https://www.cairographics.org/manual/cairo-Image-Surfaces.html#cairo-format-t

cairo - cairo's central repository
https://cgit.freedesktop.org/cairo/tree/src
460名無しさん@おーぷん :2017/09/10(日)05:21:28 ID:???
XShmCreateImageで8bitが使えるかどうかわからない

http://odl.sysworks.biz/disk$vaxdocjun002/japanese/jdwm125/rel/rn0004.htm
461名無しさん@おーぷん :2017/09/10(日)05:27:42 ID:???
XShmCreateImage の使い方

xedit/main.cpp at master · XProger/xedit · GitHub
https://github.com/XProger/xedit/blob/master/main.cpp#L178
462名無しさん@おーぷん :2017/09/10(日)17:20:22 ID:???
QPixmap Class | Qt 4.8
http://doc.qt.io/qt-4.8/qpixmap.html

QPainter Class | Qt 4.8
http://doc.qt.io/qt-4.8/qpainter.html#drawPixmap
463名無しさん@おーぷん :2017/09/15(金)07:57:41 ID:???
SDLを使うには、 dev 付きのをインストールする必要がある
SDL1.2用のユニットは最初から付いてるけど、2.0用のは付いていないっぽい。

apt install libsdl1.2-dev

Debian -- "stretch" のサブセクション libdevel に含まれるソフトウェアパッケージ
https://packages.debian.org/stable/libdevel/#libsdl1.2-dev
libsdl1.2-dev (1.2.15+dfsg1-4)
libsdl2-dev (2.0.5+dfsg1-2)
464名無しさん@おーぷん :2017/09/15(金)08:03:55 ID:???
DirectX使うときは、 FormのHandleを変えないようにする
Formのプロパティーを変えると、Handleも変わることがあるから注意

DirectXを使って、フルスクリーンにする時は、
WindowState := wsFullScreen
BorderStyle := bsNone
は不要
465名無しさん@おーぷん :2017/09/17(日)05:57:06 ID:???
published method の引数を知りたいってことかな

RTTI get procedure prototype
http://forum.lazarus-ide.org/index.php/topic,38288.msg259653.html
466名無しさん@おーぷん :2017/09/17(日)06:44:41 ID:???
MethodAddress('Button1Click')で Method.Code は分かるけど、
これが、 TNotifyEvent 型かどうかは分からない。
Method is TNotifyEvent が出来ないから、
型チェック無しでいきなり TNotifyEvent(Method)(nil) と呼び出すことになる。

もし、 Method が TNotifyEvent型で無かったら大変なことになる。
467名無しさん@おーぷん :2017/09/17(日)14:15:57 ID:???
オブジェクトインスペクタ使って
指定したプロパティーにフォーカスを設定したり、
イベントを作ったり。 >>332 と組み合わせる。

uses ObjectInspector;

function GetObjectInspectorDlg: TObjectInspectorDlg;
begin
 Result := FindGlobalComponent('ObjectInspectorDlg') as TObjectInspectorDlg;
 if Result = nil then raise Exception.Create('ObjectInspectorDlg not found');
end;

function FindGridRow(Grid: TOICustomPropertyGrid;
 const SearchPropName: string; var FoundGridRow: TOIPropertyGridRow): Boolean;
var
 I: Integer;
begin
 for I := 0 to Grid.RowCount - 1 do
  if AnsiStartsText(SearchPropName, Grid.Rows[I].Name) then
  begin
   FoundGridRow := Grid.Rows[I];
   Exit(True);
  end;
 FoundGridRow := nil;
 Result := False;
end;
468名無しさん@おーぷん :2017/09/17(日)14:17:26 ID:???
// FocusProp(['Caption']);
procedure FocusProp(const Args: array of string);
var
 Form: TObjectInspectorDlg;
 GridRow: TOIPropertyGridRow;
begin
 if Length(Args) = 0 then Exit;
 Form := GetObjectInspectorDlg;
 if FindGridRow(Form.PropertyGrid, Args[0], GridRow) or
  FindGridRow(Form.EventGrid, Args[0], GridRow) then
 begin
  Form.ActivateGrid(GridRow.Tree);
  GridRow.Tree.SetFocus;
  GridRow.Tree.SetItemIndexAndFocus(GridRow.Index, False);
  // GridRow.Editor.Edit; // property を換えてしまうので使えない
 end
 else
  raise Exception.CreateFmt('Property not found(%s)', [Args[0]]);
end;
469名無しさん@おーぷん :2017/09/17(日)14:18:37 ID:???
procedure CreateEvent(const EventName: string);
var
 Form: TObjectInspectorDlg;
 GridRow: TOIPropertyGridRow;
begin
 Form := GetObjectInspectorDlg;
 GridRow := Form.EventGrid.GetRowByPath(EventName);
 if GridRow = nil then
  raise Exception.CreateFmt('Event not found(%s)', [EventName]);
 GridRow.Editor.Edit;
end;

// CreateEvents(['OnCreate', 'OnDestroy']);
procedure CreateEvents(const Args: array of string);
var
 I: Integer;
begin
 for I := 0 to High(Args) do CreateEvent(Args[I]);
end;
470名無しさん@おーぷん :2017/09/17(日)23:58:00 ID:???
こんなん作った

<form method=get action=https://svn.freepascal.org/cgi-bin/viewvc.cgi>
/[lazarus]/trunk
<a href=http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/?root=lazarus&sortby=file#dirlist>ByFile</a>
<a href=http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/?root=lazarus&sortby=date#dirlist>ByDate</a>
<input type="hidden" name="view" value="revision"/>
<input type="hidden" name="root" value="lazarus"/>
<input type="text" name="revision" size=8 maxlength=8 placeholder="revision"/>
<input type="submit" value="検索" />
</form>
<form method=get action=https://svn.freepascal.org/cgi-bin/viewvc.cgi>
/[fpc]/trunk&nbsp;&nbsp;&nbsp;&nbsp;
<a href=http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/?sortby=file#dirlist>ByFile</a>
<a href=http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/?sortby=date#dirlist>ByDate</a>
<input type="hidden" name="view" value="revision"/>
<input type="text" name="revision" size=8 maxlength=8 placeholder="revision"/>
<input type="submit" value="検索" />
</form>

471名無しさん@おーぷん :2017/09/18(月)00:01:33 ID:???
Firefoxは input タグがでっかくなったから、これもいるか

<style>
input {background-color:#e5e5e5; margin:0; border:1; padding:0; linehight:0; }
form {margin:0; border:0; padding:0; linehight:0; }
</style>

472名無しさん@おーぷん :2017/09/18(月)00:07:40 ID:???
フォーラムの検索はこれ
<form action="http://forum.lazarus.freepascal.org/index.php?action=search2"
method="post" accept-charset="UTF-8" name="searchform" id="searchform">
Lazarus Forum<input name="search" maxlength="100" size="30" class="input_text" type="text">
<input type=submit value="検索">
</form>
473名無しさん@おーぷん :2017/09/19(火)00:03:43 ID:???
Pointers
https://www.freepascal.org/docs-html/current/ref/refse15.html
var
p: Pointer;
p2 : ^Longint;
begin
P := P + 4; // +4bytes
P2 := P2+4; // +16bytes
end.
474名無しさん@おーぷん :2017/09/19(火)00:21:54 ID:???
Delphiではそれができるのは、文字列へのポインタだけだったような。
だから、 PRGBQuad(Integer(P) + SizeOf(TRGBQuad) * 10)^
ってやってた。

でも、Lazarusだと
conversion between ordinals and pointers is not portable - Google 検索
https://www.google.co.jp/search?q=conversion+between+ordinals+and+pointers+is+not+portable
が出る。

P := PByte(P) + 4; // +4 bytes
とやるのが安全かね
475名無しさん@おーぷん :2017/09/19(火)00:38:01 ID:???
Info: PBitmapInfo;

Move(Pointer(Info + Info^.bmiHeader.biSize)^, Colors, SizeOf(TRGBQuad) * ColorCount);

とかやったら大変だ
476名無しさん@おーぷん :2017/09/19(火)00:42:26 ID:???
var
P, Q: PLongInt;
begin
Q := P + 4; // +16bytes

Format('%p', [Q - P]); // エラー

Q - P は4
PtrUInt(Q) - PtrUInt(P) は 16
477名無しさん@おーぷん :2017/09/19(火)04:38:22 ID:???
conversion between ordinals and pointers is not portableが出るのは
Pointer(PtrUInt(P) + X) で、 X が Integer型の時だ。
Pointer(PtrUInt(P) + 10) なら出ない。
Xが PtrUInt 型の時も出ない。
478名無しさん@おーぷん :2017/09/19(火)04:50:01 ID:???
+ PtrInt型もだめだった
マイナスになるからだめなのかね。

これは大丈夫
Pointer(PtrUInt(P) + PtrUInt(X))

ワーニングの位置が変だわ
Pointerに出てくる
479名無しさん@おーぷん :2017/09/19(火)04:51:24 ID:???
Pointer(PtrInt(P)) がワーニングでる
480名無しさん@おーぷん :2017/09/20(水)07:33:26 ID:???
だんだんと濃くなることは確認できた

uses
Cairo, gdk2, gtk2Def, gtk2Proc,

procedure CairoTest(Canvas: TCanvas);
var
 cr: Pcairo_t;
 surface: Pcairo_surface_t;
 Buf: Pointer;
 W, H: Integer;
begin
 W := 200;
 H := 200;
 GetMem(Buf, W * 4 * H);
 FillChar(Buf^, W * 4 * H, $20);
 cr := gdk_cairo_create(TGtkDeviceContext(Canvas.Handle).Drawable);
 surface := cairo_image_surface_create_for_data(Buf, CAIRO_FORMAT_ARGB32,
  W, H, W * 4);
 if surface <> nil then
 begin
  cairo_set_source_surface(cr, surface, 0, 0);
  cairo_paint(cr);
 end;
 cairo_destroy(cr);
 cairo_surface_destroy(surface);
 FreeMem(Buf);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 CairoTest(Canvas);
end;
481名無しさん@おーぷん :2017/09/20(水)08:34:59 ID:???
CAIRO_FORMAT_RGB24 も 32bit
Bitmap.ScanLine[0] が先頭ビットだった。
482名無しさん@おーぷん :2017/09/21(木)05:39:44 ID:???
Cに合わせたのかね

両方 PtrUInt にキャストするのがいいと思う
意味がはっきりしていて、 P がどんなポインタ型になっても問題ない。
Pointer(PtrUInt(P) + PtrUInt(X))

C言語/ポインタ - Wikibooks
https://ja.wikibooks.org/wiki/C%E8%A8%80%E8%AA%9E/%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF#.E3.83.9D.E3.82.A4.E3.83.B3.E3.82.BF.E3.81.AE.E6.BC.94.E7.AE.97
> ポインタにn加えると、 ポインタのアドレスは「そのポインタの型のサイズ*n」だけ進む。

GNU Pascal にも Pointer + Integer は無い
Pointer Arithmetics - The GNU Pascal Manual
http://www.gnu-pascal.de/gpc/Pointer-Arithmetics.html
483名無しさん@おーぷん :2017/09/21(木)06:21:41 ID:???
RandomFrom
http://lazarus-ccr.sourceforge.net/docs/rtl/math/randomfrom.html
function RandomFrom(const AValues: array of Integer): Integer; overload;
function RandomFrom(const AValues: array of Int64): Int64; overload;

RandomFrom([0, 255]) で
Can't determine which overloaded function to call が出る

RandomFrom([0, Integer(255)]) ってやらないとだめ
484名無しさん@おーぷん :2017/09/24(日)08:27:51 ID:???
CreateBitmap
http://lazarus-ccr.sourceforge.net/docs/lcl/lclintf/createbitmap.html

[lazarus] Contents of /trunk/lcl/interfaces/gtk2/gtk2winapi.inc
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/lcl/interfaces/gtk2/gtk2winapi.inc?root=lazarus&view=markup#l748
485名無しさん@おーぷん :2017/09/24(日)10:55:44 ID:???
ベンチマーク用にこんなん考えてみた
同じPCでWindowsとLinuxどちらが速いか測定することには使えないけど、
同じPCとOSで、アルゴリズムの速さを調べるのに使える。

{$IFDEF LINUX}
function GetCPUTime: Int64;
var
 Spec: UnixType.timespec;
begin
 Linux.clock_gettime(CLOCK_MONOTONIC, @Spec);
 Result := Int64(Spec.tv_sec) * 1000000000 + Spec.tv_nsec;
end;
{$ENDIF}
{$IFDEF WINDOWS}
function GetCPUTime: Int64;
begin
 QueryPerformanceCounter(Result);
end;
{$ENDIF}
486名無しさん@おーぷん :2017/09/24(日)10:58:04 ID:???
ミリ秒の1/1000が、マイクロ秒
マイクロ秒の1/1000が、ナノ秒

秒 - Wikipedia
https://ja.wikipedia.org/wiki/%E7%A7%92#.E5.80.8D.E9.87.8F.E3.83.BB.E5.88.86.E9.87.8F.E5.8D.98.E4.BD.8D
487名無しさん@おーぷん :2017/09/24(日)11:04:09 ID:???
procedure PutImage32(Canvas: TCanvas; Bits: Pointer; X, Y, Width, Height: Integer);
var
 DC: TGtkDeviceContext;
begin
 DC := TObject(Canvas.Handle) as TGtkDeviceContext;
 gdk_draw_rgb_32_image(DC.Drawable, DC.GC, X, Y, Width, Height,
  GDK_RGB_DITHER_NORMAL, Bits, Width * 4);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 T: Int64;
 P: Pointer;
begin
 GetMem(P, 640 * 480 * 4);
 FillChar(P^, 640 * 480 * 4, Random(256));
 T := GetCPUTime;
 PutImage32(Canvas, P, 0, 0, 640, 480);
 WriteLn(GetCPUTime - T);
 FreeMem(P);
end;
488名無しさん@おーぷん :2017/09/24(日)11:07:14 ID:???
WriteLnで何も出ないって人は、
自作ユニットをusesの最後に追加して、
そこで、 WriteLn を上書きして、
デバッグウィンドウとかに表示するようにするといい。
489名無しさん@おーぷん :2017/09/24(日)11:09:16 ID:???
実行時にメインフォームにTMemoを追加して、そこに出力する手もある
その場合、lfmファイルが不要かつ短く書ける。
490名無しさん@おーぷん :2017/09/24(日)11:28:18 ID:???
gdk_draw_rgb_32_image より 4倍速い

procedure TForm1.Button2Click(Sender: TObject);
var
 cr: Pcairo_t;
 surface: Pcairo_surface_t;
 P: Pointer;
 T: Int64;
begin
 GetMem(P, 640 * 480 * 4);
 FillChar(P^, 640 * 480 * 4, Random(256));
 cr := gdk_cairo_create((TObject(Canvas.Handle) as TGtkDeviceContext).Drawable);
 surface := cairo_image_surface_create_for_data(P, CAIRO_FORMAT_RGB24,
  640, 480, 640 * 4);
 if surface <> nil then
 begin
  cairo_set_source_surface(cr, surface, 0, 0);
  T := GetCPUTime;
  cairo_paint(cr);
  WriteLn(GetCPUTime - T);
 end;
 cairo_destroy(cr);
 cairo_surface_destroy(surface);
 FreeMem(P);
end;
491名無しさん@おーぷん :2017/09/24(日)12:22:28 ID:???
cairoの方が少しだけ速い
速くする設定でもあるのかな

uses SDL;

var
 Surface: PSDL_SURFACE;

procedure TForm1.Button4Click(Sender: TObject);
var
 P: Pointer;
 T: Int64;
begin
 SDL_LockSurface(Surface);
 try
  FillChar(Surface^.pixels^, Surface^.pitch * Surface^.h, Random(256));
 finally
  SDL_UnLockSurface(Surface);
 end;
 T := GetCPUTime;
 SDL_Flip(Surface);
 WriteLn(GetCPUTime - T);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 SDL_Init(SDL_INIT_VIDEO);
 Surface := SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 SDL_FreeSurface(Surface);
 Surface := nil;
 SDL_Quit;
end;
492名無しさん@おーぷん :2017/09/25(月)07:15:11 ID:???
ドローワブルとは? - Xlibプログラミング入門
http://www43.atpages.jp/opicon69/xlib/g01.html

GCの生成と破棄 - Xlibプログラミング入門
http://www43.atpages.jp/opicon69/xlib/g02.html

イメージを生成する - Xlibプログラミング入門
http://www43.atpages.jp/opicon69/xlib/img02.html
dataにはイメージデータを格納するためのmalloc()関数で割り当てたメモリ領域を指定します。
また、ここで指定されたメモリ領域はXlibの内部で使用されるためfree()関数などで解放してはなりません。 
XDestroyImage()関数でイメージを破棄するときに一緒に、ここで指定したメモリ領域も解放されます。
493名無しさん@おーぷん :2017/09/25(月)08:10:57 ID:???
CMem - Free Pascal wiki
http://wiki.freepascal.org/CMem
494名無しさん@おーぷん :2017/09/25(月)08:31:39 ID:???
#L3288 の L
サイトによって小文字だったり大文字だったり

gdk-pixbuf/gdk-pixbuf-xlibrgb.c at master · djdeath/gdk-pixbuf · GitHub
https://github.com/djdeath/gdk-pixbuf/blob/master/contrib/gdk-pixbuf-xlib/gdk-pixbuf-xlibrgb.c#L3288
495名無しさん@おーぷん :2017/09/25(月)08:35:00 ID:???
display は gdk_display でいいのかな・・・
display と drawable がら gc は作れる
drawable は TWindow らしい

image_info->own_gc = XCreateGC(image_info->display, drawable,0, NULL);
496名無しさん@おーぷん :2017/09/25(月)08:52:39 ID:???
On the road with Lazarus/Freepascal: LCL, Gtk2, Pango and Cairo
http://lazarusroad.blogspot.jp/2008/06/lcl-gtk2-pango-and-cairo.html
497名無しさん@おーぷん :2017/09/25(月)11:19:32 ID:???
無い

subject:"Re\: \[lazarus\] StretchDIBits API for Linux\?"
https://www.mail-archive.com/search?l=lazarus@miraclec.com&q=subject:%22Re%5C%3A+%5C%5Blazarus%5C%5D+StretchDIBits+API+for+Linux%5C%3F%22&o=newest
498名無しさん@おーぷん :2017/09/25(月)12:44:52 ID:???
{$IFDEF LINUX}
function GetCPUTime: Int64;
var
 Spec: UnixType.timespec;
begin
 Linux.clock_gettime(CLOCK_MONOTONIC, @Spec);
 Result := Int64(Spec.tv_sec) * 1000000000 + Spec.tv_nsec;
end;
{$ENDIF}
{$IFDEF WINDOWS}
function GetCPUTime: Int64;
begin
 QueryPerformanceCounter(Result);
end;
{$ENDIF}

var
 _CPUTime: Int64;

procedure TimeBegin;
begin
 _CPUTime := GetCPUTime;
end;

procedure TimeEnd;
begin
 WriteLn(PadLeft(Format('%.n', [Currency(GetCPUTime - _CPUTime)]), 12));
end;
499名無しさん@おーぷん :2017/09/25(月)12:47:35 ID:???
二回目もcairoの方が数倍速い

procedure TForm1.Button6Click(Sender: TObject);
var
 P: Pointer;
 B: TBitmap;
begin
 B := TBitmap.Create;
 B.Width := 640;
 B.Height := 480;
 B.PixelFormat := pf32Bit;
 GetMem(P, 640 * 480 * 4);
 FillChar(P^, 640 * 480 * 4, Random(256));
 B.BeginUpdate;
 Move(P^, B.ScanLine[0]^, 640 * 480 * 4);
 B.EndUpdate;
 TimeBegin;
 Canvas.Draw(0, 0, B);
 TimeEnd;
TimeBegin;
Canvas.Draw(0, 0, B);
TimeEnd;
 FreeMem(P);
 B.Free;
end;
500名無しさん@おーぷん :2017/10/03(火)07:17:56 ID:???
オープン配列だとダメなのか

function InRange(const AValue, AMin, AMax: Integer): Boolean;inline; overload;
function InRange(const AValue, AMin, AMax: Int64): Boolean;inline; overload;

function RandomRange(const aFrom, aTo: Integer): Integer;
function RandomRange(const aFrom, aTo: Int64): Int64;

function RandomFrom(const AValues: array of Integer): Integer; overload;
function RandomFrom(const AValues: array of Int64): Int64; overload;

WriteLn(InRange(1, 1, 2));
WriteLn(RandomRange(1, 3));

// Can't determine which overloaded function to call
// WriteLn(RandomFrom([1, 2]));
501名無しさん@おーぷん :2017/10/04(水)10:40:38 ID:???
CapsLock を解除するプログラム

program CapsOff;

{$mode objfpc}{$H+}

uses
 XLib, XkbLib;

var
 D: PDisplay;
begin
 D := XOpenDisplay(nil);
 XkbLockModifiers(D, $0100, 2, 0);
 XCloseDisplay(D)
end.
502名無しさん@おーぷん :2017/10/04(水)16:01:40 ID:???
こんなんつくった

type
 CapString = object
 private
  FString: string;
  FLength: Integer;
 end;

 TStringCapArray = object
 private
  FDynArray: TStringDynArray;
  FLength: Integer;
 end;

procedure SetCapacity(var A: CapString; NewCapacity: Integer); overload;
procedure GrowCapacity(var A: CapString; GrowLength: Integer); overload;
function GetString(var A: CapString): string; overload;
procedure AppendStr(var A: CapString; const Str: string); overload;

procedure SetCapacity(var A: TStringCapArray; NewCapacity: Integer); overload;
procedure GrowCapacity(var A: TStringCapArray; GrowCount: Integer); overload;
function GetDynArray(var A: TStringCapArray): TStringDynArray; overload;
procedure Push(var A: TStringCapArray; const Value: string); overload;
503名無しさん@おーぷん :2017/10/04(水)16:02:01 ID:???
procedure SetCapacity(var A: CapString; NewCapacity: Integer); overload;
begin
 if A.FString = '' then A.FLength := 0;
 SetLength(A.FString, NewCapacity);
 A.FLength := Min(A.FLength, Length(A.FString));
end;

procedure GrowCapacity(var A: CapString; GrowLength: Integer); overload;
begin
 SetCapacity(A, Length(A.FString) + GrowLength);
end;

function GetString(var A: CapString): string; overload;
begin
 if A.FString = '' then A.FLength := 0;
 Result := A.FString;
 SetLength(Result, A.FLength); // Length(A.FString)は変えないので注意
end;

procedure AppendStr(var A: CapString; const Str: string); overload;
begin
 if A.FString = '' then A.FLength := 0;
 if Length(A.FString) < A.FLength + Length(Str) then
  SetLength(A.FString, A.FLength + Length(Str));
 StrMove(PChar(A.FString) + A.FLength, PChar(Str), Length(Str));
 Inc(A.FLength, Length(Str));
end;
504名無しさん@おーぷん :2017/10/04(水)16:02:22 ID:???
procedure SetCapacity(var A: TStringCapArray; NewCapacity: Integer); overload;
begin
 if A.FDynArray = nil then A.FLength := 0;
 SetLength(A.FDynArray, NewCapacity);
 A.FLength := Min(A.FLength, Length(A.FDynArray));
end;

procedure GrowCapacity(var A: TStringCapArray; GrowCount: Integer); overload;
begin
 SetCapacity(A, Length(A.FDynArray) + GrowCount);
end;

function GetDynArray(var A: TStringCapArray): TStringDynArray; overload;
begin
 if A.FDynArray = nil then A.FLength := 0;
 Result := A.FDynArray;
 SetLength(Result, A.FLength);
end;

procedure Push(var A: TStringCapArray; const Value: string); overload;
begin
 if A.FDynArray = nil then A.FLength := 0;
 Inc(A.FLength);
 if Length(A.FDynArray) < A.FLength then
  SetLength(A.FDynArray, A.FLength);
 A.FDynArray[A.FLength - 1] := Value;
end;
505名無しさん@おーぷん :2017/10/04(水)16:16:41 ID:???
これで CapString の方が僅かに速い
Countが増えれば差は広がる

const
 Count = 3;

procedure TForm1.Button1Click(Sender: TObject);
var
 S: string;
 I: Integer;
begin
 TimeBegin;
 for I := 1 to Count do S := S + 'A';
 TimeEnd;
 Caption := S;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 S: CapString;
 T: string;
 I: Integer;
begin
 TimeBegin;
 SetCapacity(S, Count);
 for I := 1 to Count do AppendStr(S, 'A');
 T := GetString(S);
 TimeEnd;
 Caption := T;
end;
506名無しさん@おーぷん :2017/10/05(木)11:43:34 ID:???
こういうの作った
 Result := TStringMap.Create(False);
 {$IFDEF FPC}
  // FPC
  {$IFDEF ENDIAN_BIG} Result.Add('ENDIAN_BIG'); {$ENDIF}
  {$IFDEF ENDIAN_LITTLE} Result.Add('ENDIAN_LITTLE'); {$ENDIF}
  {$IFDEF FPC_CROSSCOMPILING} Result.Add('FPC_CROSSCOMPILING'); {$ENDIF}
  {$IFDEF FPC_DELPHI} Result.Add('FPC_DELPHI'); {$ENDIF}
  {$IFDEF FPC_FULLVERSION} Result.Add('FPC_FULLVERSION'); {$ENDIF}
  {$IFDEF FPC_GPC} Result.Add('FPC_GPC'); {$ENDIF}

defines.pas (defines.pas) ダウンロード | おーぷん2ちゃんねるろだ | uploader.jp
https://ux.getuploader.com/open2ch1/download/767

MD5 d678349ba431f38924096c79a050473c
SH1A 1b07faa899974b8f10314f73c50f035dc90cbab9
507名無しさん@おーぷん :2017/10/06(金)11:22:27 ID:???
外部ツールのプログラムファイル名:
lxterminal

パラメータ:
-e
python3 -i $EdFile()

で、現在アクティブなファイルを python3 で実行して
端末は閉じない。

Pythonはじめようかね
http://hayabusa.open2ch.net/test/read.cgi/livejupiter/1491330469/l50
を参考に、

import urllib.request
url = "http://hayabusa.open2ch.net/test/read.cgi/livejupiter/1491330469/"
response = urllib.request.urlopen(url)
data = response.read().decode("utf-8")
print (data)
508名無しさん@おーぷん :2017/10/07(土)15:41:33 ID:???
これやってるから、Gtk2のコントロールで日本語が入力できるのかな

gtk2int.pas
constructor TGtk2WidgetSet.Create;
im_context:=gtk_im_multicontext_new;
g_signal_connect (G_OBJECT (im_context), 'commit',
G_CALLBACK (@gtk_commit_cb), nil);
509名無しさん@おーぷん :2017/10/07(土)15:57:53 ID:???
これで画像のようはなる
var
 im_context: PGtkIMContext;

procedure TForm1.FormCreate(Sender: TObject);
begin
 gtk_set_locale ();
 im_context := gtk_im_multicontext_new;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 g_object_unref(im_context);
 im_context := nil;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
 GTK_WIDGET_SET_FLAGS(PGtkWidget(Handle), GTK_HAS_FOCUS);
 gtk_im_context_focus_in(im_context);
end;

procedure TForm1.FormDeactivate(Sender: TObject);
begin
 GTK_WIDGET_UNSET_FLAGS (PGtkWidget(Handle), GTK_HAS_FOCUS);
 gtk_im_context_focus_out (im_context);
end;

510名無しさん@おーぷん :2017/10/07(土)16:03:49 ID:???
変換を確定すると、文字列を取得出来た

var
 im_context: PGtkIMContext;
 im_context_string: string;

procedure gtk_commit_cb ({%H-}context: PGtkIMContext; const Str: Pgchar;
 {%H-}Data: Pointer); cdecl;
begin
 im_context_string:=Str;
 WriteLn(str);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 gtk_set_locale ();
 im_context := gtk_im_multicontext_new;
 g_signal_connect(G_OBJECT(im_context), 'commit', G_CALLBACK(@gtk_commit_cb),
  nil);
end;
511名無しさん@おーぷん :2017/10/07(土)16:26:10 ID:???
SynEditに日本語入力はできた
あとは表示位置だけですめばいいけど
var
 im_context: PGtkIMContext;
 im_context_string: string;
 Edit: TSynEdit;

procedure gtk_commit_cb ({%H-}context: PGtkIMContext; const Str: Pgchar;
 {%H-}Data: Pointer); cdecl;
begin
 im_context_string:=Str;
 Edit.InsertTextAtCaret(im_context_string);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Edit := TSynEdit.Create(Self);
 Edit.Parent := Self;
 ActiveControl := Edit;
 gtk_set_locale ();
 im_context := gtk_im_multicontext_new;
 g_signal_connect(G_OBJECT(im_context), 'commit', G_CALLBACK(@gtk_commit_cb),
  nil);
end;


512名無しさん@おーぷん :2017/10/07(土)17:26:56 ID:???
あとで試してみる

Synedit at UIM input method module.
https://forum.lazarus.freepascal.org/index.php?topic=24910.0
513名無しさん@おーぷん :2017/10/07(土)18:49:09 ID:???
ダメらしい

0026369: uim and synedit. - Free Pascal/Lazarus Bug Tracker
https://bugs.freepascal.org/view.php?id=26369
2014-06-20 09:25
This patch won't be commited since it introduces gtk specific stuff in LCL (TControl).
514名無しさん@おーぷん :2017/10/08(日)08:31:36 ID:???
>>106
DebianのLazarus1.6.4では直ってる気がする

0028154: Win32: IDE reports "file not exist" on drag and drop - Free Pascal/Lazarus Bug Tracker
https://bugs.freepascal.org/view.php?id=28154
515名無しさん@おーぷん :2017/10/08(日)15:01:45 ID:???
アプリケーションウィンドウに前編集ウィンドウを組み込むのチェックを外すと、
入力中のテキストは見える。
でもこれ、他のソフトでもそうなるから、
Firefox等では少し使いにくくなる。

516名無しさん@おーぷん :2017/10/08(日)15:09:08 ID:???
あっているかどうか不明

type
 TMySynEdit = class(TSynEdit)
 protected
  procedure CreateHandle; override;
  procedure DestroyHandle; override;
  procedure DoEnter; override;
  procedure DoExit; override;
 end;

var
 Edit: TSynEdit;
 IMContext: PGtkIMContext;

procedure TMySynEdit.CreateHandle;
begin
 inherited;
 gtk_im_context_set_client_window(IMContext, PGtkWidget(Handle)^.window);
end;

procedure TMySynEdit.DestroyHandle;
begin
 gtk_im_context_set_client_window(IMContext, nil);
 inherited;
end;

procedure TMySynEdit.DoEnter;
begin
 inherited;
 GTK_WIDGET_SET_FLAGS(PGtkWidget(Handle), GTK_HAS_FOCUS);
 gtk_im_context_focus_in(IMContext);
 gtk_im_context_set_client_window(IMContext, GetControlWindow(PGtkWidget(Handle)));
end;

procedure TMySynEdit.DoExit;
begin
 GTK_WIDGET_UNSET_FLAGS (PGtkWidget(Handle), GTK_HAS_FOCUS);
 gtk_im_context_focus_out(IMContext);
 inherited;
end;

procedure signal_commit(context: PGtkIMContext; const Str: Pgchar; Data: Pointer); cdecl;
begin
 Edit.InsertTextAtCaret(Str);
end;
517名無しさん@おーぷん :2017/10/08(日)15:09:17 ID:???
procedure TForm1.FormCreate(Sender: TObject);
begin
 Edit := TMySynEdit.Create(Self);
 Edit.Parent := Self;
 Edit.WantTabs := False;
 ActiveControl := Edit;
 gtk_set_locale ();
 IMContext := gtk_im_multicontext_new;
 g_signal_connect(G_OBJECT(IMContext), 'commit', G_CALLBACK(@signal_commit), nil);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 g_object_unref(IMContext);
 IMContext := nil;
end;
518名無しさん@おーぷん :2017/10/09(月)10:10:05 ID:???
IDEのインターフェース
コメントの中から飛べるから、これでユニットとグローバル変数にジャンプできる。
 {
uses
 IDEIntf, BaseIDEIntf, ComponentReg, FormEditingIntf, IDECommands, IDEDialogs,
 IDEMsgIntf, IDEExternToolIntf, IDEUtils, IDEWindowIntf, LazIDEIntf,
 LazarusPackageIntf, MacroIntf, MenuIntf, PackageIntf, ProjectIntf, PropEdits,
 SrcEditorIntf;

 DefaultConfigClass BaseIDEIntf
 IDEComponentPalette ComponentReg
 FormEditingHook FormEditingIntf
 ExternalToolList IDEExternToolIntf
 IDEMessagesWindow IDEMsgIntf
 IDEDialogLayoutList IDEWindowIntf
 IDEDockMaster IDEWindowIntf
 IDEWindowCreators IDEWindowIntf
 RegisteredPackages LazarusPackageIntf
 IDETabMaster LazIDEIntf
 LazarusIDE LazIDEIntf
 IDEMacros MacroIntf
 IDEMenuRoots MenuIntf
 PackageDescriptors PackageIntf
 PackageEditingInterface PackageIntf
 PackageGraphInterface PackageIntf
 ProjectDescriptors ProjectIntf
 ProjectFileDescriptors ProjectIntf
 GlobalDesignHook PropEdits
 ActiveEditorMacro SrcEditorIntf
 DefaultBindingClass SrcEditorIntf
 EditorMacroForRecording SrcEditorIntf
 EditorMacroPlayerClass SrcEditorIntf
 IDECodeMacros SrcEditorIntf
 SourceEditorManagerIntf SrcEditorIntf
 DesignerIntfは無い }
519名無しさん@おーぷん :2017/10/09(月)10:11:25 ID:???
{はuses節の下にいった
usesはちゃんといる
520名無しさん@おーぷん :2017/10/09(月)17:37:45 ID:???
WM_CLOSEQUERY - Google 検索
https://www.google.co.jp/search?q=WM_CLOSEQUERY

ってDelphi/Lazarus限定なのか?
てっきり Windows にあるものかと思った
521名無しさん@おーぷん :2017/10/09(月)17:49:32 ID:???
とりあえず、これでデザイナを閉じることができる

function FindForm(Designer: TIDesigner; var Form: TForm): Boolean; overload;
var
 I: Integer;
begin
 for I := 0 to Screen.FormCount - 1 do
 begin
  Form := Screen.Forms[I];
  if Form.Designer = Designer then
   Exit(True);
 end;
 Form := nil;
 Result := False;
end;

procedure HideDesigner(Designer: TIDesigner);
var
 Form: TForm;
begin
 if FindForm(Designer, Form) then
  PostMessage(Form.Handle, LM_CLOSEQUERY, 0, 0);
end;
  
522名無しさん@おーぷん :2017/10/09(月)17:50:59 ID:???
他の方法はAVが出たり、 閉じられなかったり
Windowsなら WM_CLOSE でもいける

  // Designer.PrepareFreeDesigner(False); // Unitを閉じられなくなる
  // Project1.InvalidateUnitComponentDesignerDependencies; // アクセスできない
  // Designer.PrepareFreeDesigner(True); // 例外が出る

  {$IFDEF WINDOWS}
  PostMessage(Form.Handle, WM_CLOSE, 0, 0);
  {$ELSE}
   {$IFDEF LCLGtk2}
   // gdk_window_hide(PGdkWindow(Form.Handle)); // 非表示に出来ない
   // gdk_window_destroy(PGdkWindow(Form.Handle)); // 例外が出て表示できなくなる
   {$ENDIF}
   // PostMessage(Form.Handle, LM_CLOSE, 0, 0); // LM_CLOSE が無い
   // Form.Hide; // 非表示に出来ない
   // Form.Close; // 閉じない
   // Form.Release; // 例外が出て表示できなくなる
   // Form.Free; // 例外が出て表示できなくなる
  {$ENDIF}
523名無しさん@おーぷん :2017/10/09(月)17:59:49 ID:???
".Designer = "
で検索すると、こんなのが出てきた

sparta_mainide.pas in lazarus | source code search engine
https://searchcode.com/file/115886792/components/sparta/dockedformeditor/source/sparta_mainide.pas#l-209
524名無しさん@おーぷん :2017/10/10(火)11:32:56 ID:???
>>521
Debian LXDE Gtk+2 で高速に表示・非表示を切り替えると
AVが出た

Windowsでは大丈夫
525名無しさん@おーぷん :2017/10/11(水)10:42:05 ID:???
Windowsでは、 {$APPTYPE CONSOLE}が無いと、
WriteLn でコンソールに出力できない

WriteLn and File not open!
https://forum.lazarus.freepascal.org/index.php/topic,29280.msg184650.html#msg184650
>GUI programs on Windows don't have a console, so the stdin/out are not open.
526名無しさん@おーぷん :2017/10/11(水)11:14:08 ID:???
truncでできるらしい

function/procedure name
http://forum.lazarus-ide.org/index.php/topic,38568.msg262284.html#msg262284
procedure TForm1.MyProcedure();
begin
ShowMessage('Name: ' +{$I %CURRENTROUTINE%});
end;
527名無しさん@おーぷん :2017/10/11(水)15:52:34 ID:???
>>260

0010422: Designer form with menu conflicting with Lazarus - Free Pascal/Lazarus Bug Tracker
https://bugs.freepascal.org/view.php?id=10422#c103333
> cannot use IDE menu shortcuts at all with GTK2 here,

qtなら大丈夫ってことなのだろうか

Debian -- "stretch" のサブセクション devel に含まれるソフトウェアパッケージ
https://packages.debian.org/stable/devel/#lazarus-ide-qt4
lazarus-ide-qt4 (1.6.2+dfsg-2)
IDE for Free Pascal - Last Qt version dependency package
528名無しさん@おーぷん :2017/10/11(水)16:00:55 ID:???
qt版をインストールしようとしたら、
すでにインスト―ルされているパッケージの削除を求められてしまった
529名無しさん@おーぷん :2017/10/12(木)00:19:11 ID:???
xfceは Ctrl+F9 を使ってるから、
xfwm4-settings
で設定をクリアしないといけない。
530名無しさん@おーぷん :2017/10/12(木)18:35:25 ID:???
AnsiDequotedStr('""', '"') = '""' だった
531名無しさん@おーぷん :2017/10/17(火)00:55:22 ID:???
いらないパッケージは移動させたほうが検索が速くなる

Package List - Free Pascal wiki
http://wiki.freepascal.org/Package_List
532名無しさん@おーぷん :2017/10/17(火)01:24:50 ID:???
FPCやLazarusのソースファイルから、URLを得る

uses
 LazFileUtils, SrcEditorIntf, MacroIntf;

function _ChangeSrcFileNameToURL(const FileName: string; var URL: string): Boolean;

 function AMatch(Macro: string; var AOutput: string): Boolean;
 begin
  AOutput := '';
  IDEMacros.SubstituteMacros(Macro);
  Result := CompareFileNames(Copy(FileName, 1, Length(Macro)), Macro) = 0;
  if Result then
  begin
   AOutput := System.Copy(FileName, Length(Macro), MaxInt);
   AOutput := ExcludeLeadingPathDelimiter(AOutput);
   AOutput := ReplaceStr(AOutput, '\', '/');
   AOutput := 'https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/' + AOutput;
  end;
 end;

var
 AOutput: string;
begin
 URL := '';
 if AMatch('$(FPCSrcDir)', AOutput) then
  URL := AOutput + '?view=markup'
  // URL := AOutput + '?view=co'
 else if AMatch('$(LazarusDir)', AOutput) then
  URL := AOutput + '?root=lazarus&view=markup';
  // URL := AOutput + '?root=lazarus&view=co';
  // URL := AOutput + '?root=lazarus&view=co&content-type=text%2Fplain';
 Result := URL <> '';
end;

procedure CopySrcURL(const Args: array of string);
var
 URL: string;
begin
 if _ChangeSrcFileNameToURL(SourceEditorManagerIntf.ActiveEditor.FileName, URL) then
  Clipboard.AsText := URL;
end;
533名無しさん@おーぷん :2017/10/21(土)03:22:35 ID:???
ShowMessage({$I DATE}); のように使えるやつ

[lazarus] Contents of /trunk/components/codetools/identcompletiontool.pas
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/components/codetools/identcompletiontool.pas?view=markup&root=lazarus&sortby=file#l2526
AddKeyWord('Date');
AddKeyWord('FPCTarget');
AddKeyWord('FPCTargetOS');
AddKeyWord('FPCTargetCPU');
AddKeyWord('FPCVersion');
AddKeyWord('Time');
AddKeyWord('CurrentRoutine'); // since FPC 3.1+
AddKeyWord('Line'); // since FPC 3.1+
534名無しさん@おーぷん :2017/10/21(土)03:23:45 ID:???
間違えた
ShowMessage({$I %DATE%});
535名無しさん@おーぷん :2017/10/21(土)16:08:35 ID:???
なんのことが良くわからなかったけど、たぶん・・・
ファイルマネージャで Ctrl+C によるコピーって、
ファイルそのものを複製する時に使いますよね。
だから、Debian LXDE に標準で付いてくるファイルマネージャ pcmanfm には、
コピー(&C) Ctrl+C
パスをコピー(&H) <- こっちがファイル名をクリップボードにコピーする
の2つがある。
「コピー」でファイルをコピーすると、他のディレクトリに貼り付けて
ファイルの複製を作ることが可能だけど、 Leafpadにファイル名を貼り付けることはできない。

0032581: SynEdit: allow to paste filename copied from system files - Free Pascal/Lazarus Bug Tracker
https://bugs.freepascal.org/view.php?id=32581
536名無しさん@おーぷん :2017/10/21(土)16:41:18 ID:???
Pascal風の正規表現関数を考えているのだが
RegExprPos は昔あった

regexprpos - Google 検索
https://www.google.co.jp/search?q=regexprpos
約 69 件

Regexpr - Free Pascal wiki
http://wiki.freepascal.org/Regexpr
RegExprPos – Finds the pattern inside a given string.

posregexpr - Google 検索
https://www.google.co.jp/search?q=posregexpr
posregexpr に一致する情報は見つかりませんでした。

copyregexpr と regexprcopy も見つからない
537名無しさん@おーぷん :2017/10/21(土)17:03:38 ID:???
System.RegularExpressions.TRegEx のメソッド - RAD Studio API Documentation
http://docwiki.embarcadero.com/Libraries/Tokyo/ja/System.RegularExpressions.TRegEx_Methods

正規表現
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions#Working_with_Regular_Expressions
>正規表現は、RegExp の test および exec メソッド、
>String の match、replace、search、および split メソッドとともに使用します。

String (Java Platform SE 7)
https://docs.oracle.com/javase/jp/7/api/java/lang/String.html#method_summary

6.2. re — 正規表現操作 — Python 3.6.3 ドキュメント
https://docs.python.jp/3/library/re.html#regular-expression-objects

regexp - The Go Programming Language
https://golang.org/pkg/regexp/#pkg-index
538名無しさん@おーぷん :2017/10/21(土)17:20:28 ID:???
[fpc] Contents of /trunk/packages/regexpr/src/regexpr.pas
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/packages/regexpr/src/regexpr.pas?view=markup#l610

RegExprCopy か CopyRegExpr で迷う

regexpr.pasにあるグローバル関数は
ExecRegExpr
SplitRegExpr
ReplaceRegExpr
QuoteRegExprMetaChars
RegExprSubExpressions

それに合わせれば、 CopyRegExpr が妥当なんだけど、
regexpr.pasはおいておいて、 すべて RegExpr のような
プリフィックスを付けたほうが分かりやすいような気がする。
539名無しさん@おーぷん :2017/10/22(日)15:21:03 ID:???
http://wiki.freepascal.org/
http://wiki.lazarus.freepascal.org/
2つあるけど、下見る限り、 wiki.freepascal.org にアクセスした方が良さそう

540名無しさん@おーぷん :2017/10/22(日)16:36:35 ID:???
>>502
DelphiのTStringBuilderのサンプル
やっぱり作ってる

TStringBuilderClickCount (Delphi) - RAD Studio Code Examples
http://docwiki.embarcadero.com/CodeExamples/Tokyo/en/TStringBuilderClickCount_(Delphi)

var
SB: TStringBuilder;
begin
{ Create a new instance of TStringBuilder. }
SB := TStringBuilder.Create();
541名無しさん@おーぷん :2017/10/22(日)16:54:11 ID:???
Delphiでも
procedure FreeAndNil(var Obj);
で、 TObject型変数以外も渡せるけど、
こういうの気持ち悪くないのだろうか?

procedure FreeAndNil(var Obj: TAnyObject);

SysUtils.FreeAndNil 関数
http://docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/JA/html/delphivclwin32/SysUtils_FreeAndNil.html
542名無しさん@おーぷん :2017/10/22(日)21:42:37 ID:???
lxterminal -e startlazarus
で端末からLazarus実行できた
-e が必要
543名無しさん@おーぷん :2017/10/22(日)22:06:12 ID:???
でも端末を閉じると、編集中のファイルも無視して
Lazarusも閉じられる。
544名無しさん@おーぷん :2017/10/27(金)17:47:26 ID:???
$(ConfDir)の扱いが Windows と Linux で違う

Windowsでは、 GetAppConfigDir(False) と同じ値で、
C:\Users\UserName\AppData\Local\lazarus\ になる

Linuxでは
GetAppConfigDir(True)=/etc/lazarus/
GetAppConfigDir(False)=/home/username/.config/lazarus/
$(ConfDir)=/home/username/.lazarus
ちなみに他は
$(PrimaryConfigPath)=/home/username/.lazarus
$(SecondaryConfigPath)=/etc/lazarus
545名無しさん@おーぷん :2017/10/27(金)19:39:21 ID:???
linuxにも .local ってパスはあるんだよな
/home/username/.local/

でも、
C:\Users\UserName\AppData\Local\

/home/username/.config/
を対応させたらいいのかね
546名無しさん@おーぷん :2017/10/28(土)05:28:45 ID:???
プロジェクトオプションで直接テキストファイルを
リソースとして追加できるんやな

Embedding text file into Lazarus resources error
http://forum.lazarus.freepascal.org/index.php?topic=37969.0
547名無しさん@おーぷん :2017/10/28(土)17:54:13 ID:???
>>393 は列挙型の要素は含めなかった
そのうち治す

グローバルなスコープを持つ全識別子なので、
ファイル名は globalidents.dat が適切だろうか
548名無しさん@おーぷん :2017/10/30(月)18:40:20 ID:???
>>541 はコンパイルエラーを出せれば
549名無しさん@おーぷん :2017/11/01(水)06:34:01 ID:???
循環参照がらみでバグあるのか

0032617: New notify handler: RunFinished - Free Pascal/Lazarus Bug Tracker
https://bugs.freepascal.org/view.php?id=32617#c103836
>FPC used to have a bug related to circular dependencies which may have affected the convention, too.

こういうのかなあ
Lazarus checksum changed for circular dependencies - Google 検索
https://www.google.co.jp/search?q=Lazarus+checksum+changed+for++circular+dependencies
550名無しさん@おーぷん :2017/11/01(水)19:24:17 ID:???
循環参照が嫌だから、 グローバル変数使って回避しとるんやな。
でも今のやり方だと、 LazFindInFilesDialog がLazarus起動時に作成されてしまう。
直接 FindInFilesDialog.InitFromLazSearch を呼び出すのがシンプルなのだが。

[lazarus] Contents of /trunk/ide/searchresultview.pp
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/ide/searchresultview.pp?view=markup&root=lazarus#l225
var
...
OnSearchAgainClicked: TNotifyEvent = nil;

[lazarus] Contents of /trunk/ide/main.pp
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/ide/main.pp?view=markup&root=lazarus#l2145
OnSearchAgainClicked := @FindInFilesDialog.InitFromLazSearch;
551名無しさん@おーぷん :2017/11/01(水)19:30:46 ID:???
ここには初期のFPCとしか書いてないな

ESS-Model again
http://forum.lazarus.freepascal.org/index.php/topic,35136.msg234000.html#msg234000
January 13, 2017, 08:26:52 pm »
>Earlier FPC had bugs related to circular dependencies (through implementation uses section),
552名無しさん@おーぷん :2017/11/02(木)19:49:37 ID:???
メーリングリストのリンクまとめてみた

nabble
<a href=http://free-pascal-lazarus.989080.n3.nabble.com/>lazarus</a>
<a href=http://free-pascal-general.1045716.n5.nabble.com/>general</a><dt>
Threads
<a href=https://www.mail-archive.com/lazarus@lists.lazarus-ide.org/>lazarus</a>
<a href=https://www.mail-archive.com/fpc-pascal@lists.freepascal.org/>pascal</a>
<a href=https://www.mail-archive.com/fpc-devel@lists.freepascal.org/>devel</a>
<a href=https://www.mail-archive.com/fpc-announce@lists.freepascal.org/>announce</a>
<a href=https://www.mail-archive.com/fpc-other@lists.freepascal.org/>other</a><dt>
Archives
<a href=http://lists.lazarus-ide.org/pipermail/lazarus/>lazarus</a>
<a href=http://lists.freepascal.org/pipermail/fpc-pascal/>pascal</a>
<a href=http://lists.freepascal.org/pipermail/fpc-devel/>devel</a>
<a href=http://lists.freepascal.org/pipermail/fpc-announce/>announce</a>
<a href=http://lists.freepascal.org/pipermail/fpc-other/>other</a><dt>
553名無しさん@おーぷん :2017/11/03(金)02:12:22 ID:???
以前はよく隠れてたけど、いつの間にか直った
でも、またぶり返したのかね

0032635: Lazarus Dialog modal windows go behind regular windows and won't come on top - Free Pascal/Lazarus Bug Tracker
https://bugs.freepascal.org/view.php?id=32635

[lazarus] Revision 55848
https://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&root=lazarus&revision=55848
554名無しさん@おーぷん :2017/11/03(金)02:55:43 ID:???
>>539
forum は lazarus. がいる

Lazarus - Index
http://forum.lazarus.freepascal.org/index.php?action=forum
555名無しさん@おーぷん :2017/11/04(土)16:45:50 ID:???
拡張子が見つからなかった場合は、ここで lshNone になるみたいだけど、
lshNone は色を変えないって意味なのかな。
Result := lshNone; を
Result := lshIni; に変えたら、
見つからない拡張子のファイルに lshIni の色が使われる。

Lazarus: ide/editoroptions.pp | Fossies
https://fossies.org/linux/lazarus/ide/editoroptions.pp#l_2236

Lazarus scheme globals lshNone - Google 検索
https://www.google.co.jp/search?q=Lazarus+scheme+globals+lshNone

Lazarus lshNone - Google 検索
https://www.google.co.jp/search?q=Lazarus+lshNone
556名無しさん@おーぷん :2017/11/04(土)18:31:16 ID:???
動的配列も Assigned って使えるんだね
Length(A) > 0 の代わりに使えるっぽい
557名無しさん@おーぷん :2017/11/07(火)21:29:27 ID:???
Linux + Gtk+2 上の Lazarus で日本語を入力する方法

TIDESynEditor と TSynEdit の間に、 Gtk2用のクラスでやる。
いろいろぼろぼろだけど
あ、 {$IFNDEF WINDOWS} 入れたほうがいいかも

sourcesyneditor_gtk2.pas (sourcesyneditor_gtk2.pas) ダウンロード | おーぷん2ちゃんねるろだ | uploader.jp
https://ux.getuploader.com/open2ch1/download/781

7-11-17 MD5 f5e73db20ecf13290303182c7a5e2a66
7-11-17 SHA1 03881cf2eaca6cb112e2a9cb2122fb00e5f61256
558名無しさん@おーぷん :2017/11/07(火)22:25:10 ID:???
{$IF NOT DEFINED(WINDOWS) and DEFINED(LCLGtk2)}
でいいのかね

Definition
https://www.freepascal.org/docs-html/prog/progsu127.html#x140-1410002.4.1
{$IF DEFINED(MySym)}
559名無しさん@おーぷん :2017/11/07(火)22:55:57 ID:???

と入力したのに
あああああああああああああ
ってなったわ

IDE再起動で直る
560名無しさん@おーぷん :2017/11/08(水)17:39:36 ID:???
ちょっと直した

sourcesyneditor_gtk2.pas (sourcesyneditor_gtk2.pas) ダウンロード | おーぷん2ちゃんねるろだ | uploader.jp
https://ux.getuploader.com/open2ch1/download/782

8-11-17 MD5 3420204a3c93dcccf53567d629326067
8-11-17 SHA1 e43be4e657b24e6ab6021555a8ac0ce2456ee4c8
561名無しさん@おーぷん :2017/11/08(水)17:43:57 ID:???
あとはメニューだけど、

メニューのあるウィンドウとソースエディタをドッキングすれば
エディタからメニューは出せるようになるのだが
562名無しさん@おーぷん :2017/11/11(土)20:14:52 ID:???
イベント見るために作った
なんとかなりそうかも

gtk2synedit.pas (gtk2synedit.pas) ダウンロード | おーぷん2ちゃんねるろだ | uploader.jp
https://ux.getuploader.com/open2ch1/download/783

uses
 SynEdit, Gtk2SynEdit,

procedure TForm1.FormCreate(Sender: TObject);
var
 Edit: TSynEdit;
begin
 Edit := TGtk2SynEdit.Create(Self);
 Edit.Align := alClient;
 Edit.Parent := Self;
 Edit.WantTabs := False;
 ActiveControl := Edit;
end;

563名無しさん@おーぷん :2017/11/11(土)20:25:23 ID:???
signal_preedit_start は
前編集ウィンドウをIMまかせにする場合は発生しないんだな
564名無しさん@おーぷん :2017/11/11(土)21:14:43 ID:???
DoEnterとDoExitは同一フォーム内でのフォーカスの移動しか
検出してくれなかったわ
565名無しさん@おーぷん :2017/11/11(土)21:37:02 ID:???
LM_SETFOCUS と LM_KILLFOCUS も LM_SETFOCUS が二度発生することがある
566名無しさん@おーぷん :2017/11/14(火)02:53:58 ID:???
var

CurTextCompStream: TMemoryStream;
begin
CurTextCompStream:=TMemoryStream.Create;
567名無しさん@おーぷん :2017/11/14(火)02:56:25 ID:???
の TMemoryStream を TStringStream に変えようと思って
リファクタリング使ったら、 あちこち変わって大変だ
568名無しさん@おーぷん :2017/11/17(金)08:52:13 ID:???
ToStringArray というのがあったぞ

System.Classes.TStrings.ToStringArray - RAD Studio API Documentation
http://docwiki.embarcadero.com/Libraries/Tokyo/ja/System.Classes.TStrings.ToStringArray

まだないっぽい
[fpc] Contents of /trunk/rtl/objpas/classes/classesh.inc
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/objpas/classes/classesh.inc?view=markup#l602
569名無しさん@おーぷん :2017/11/24(金)12:15:17 ID:???
コードポイントがワード値を超えるってことは、サロゲードペアってやつか

SelLength incorrect value for text containing characters > $FFFF
http://forum.lazarus-ide.org/index.php/topic,39045.msg266775.html
570名無しさん@おーぷん :2017/11/25(土)08:24:02 ID:???
lpiファイルに絶対パスを含めない方法の案

IDEオプションダイアログに
"テストプロジェクトを構築するディレクトリ"というのがあるけど、
これは、 $(TestDir) で呼び出せる。

そんな感じで
$(PPUDir)
$(TargetDir)
を増やしたらいいんじゃないでしょうか。
571名無しさん@おーぷん :2017/11/25(土)12:11:27 ID:???
>>393 のバージョンアップ
列挙型と集合型の要素も含めました

あと、 Lazarus の設定から CodeTools を初期化するようにした。
mPasLex 使ってトークンを数えるボタンも付けた。 ちょい重たい。

enumidents.zip (enumidents.zip) ダウンロード | おーぷん2ちゃんねるろだ | uploader.jp
https://ux.getuploader.com/open2ch1/download/786

25-11-17 MD5 4bef7f52f54b58abe7c4fc64adce86d8
25-11-17 SHA1 3c08e595d596700fadf618115d785dbab2436290
572名無しさん@おーぷん :2017/11/25(土)12:14:45 ID:???
上位こんな感じ

Units=1370
329070 = unicode
264319 = Flag
263765 = Reserved
197794 = umf_unused
131191 = end
111723 = begin

84691 = string
82902 = procedure
78718 = if
78711 = then
69863 = function
69165 = AValue
65539 = const
65480 = umf_noinfo
65265 = integer
65083 = char1
65082 = char2
59295 = Result
45950 = aIndex
32142 = property
27338 = Exit
27326 = var
26639 = read
26449 = i
25974 = class
25709 = boolean
23459 = virtual
22979 = write
21489 = else
21289 = index
20220 = nil
17159 = of
14958 = and
14886 = override
14528 = MarkPropertyChanged
14282 = s
13681 = do
13024 = p
12292 = Create
10742 = LongInt
573名無しさん@おーぷん :2017/11/25(土)12:15:52 ID:???
先頭文字で分けた上位20も見られる
69165 = AValue
45950 = aIndex
14958 = and
9142 = aName
7643 = array
7136 = AQuery
6371 = ALength
5465 = Assigned
4163 = Add
3919 = AOwner
3618 = A
2915 = ANode
2877 = AddToQuery
2828 = as
2101 = Args
1982 = aStream
1786 = API
1649 = ArbFloat
1487 = abstract
1395 = aFileName

111723 = begin
25709 = boolean
4036 = B
2582 = Byte
2003 = Break
1970 = buffer
1094 = buf
880 = Bottom
587 = BASE
452 = Block
438 = Bits
436 = Bounds
357 = blue
339 = Beauty
312 = Brush
310 = bytes_in_buffer
306 = BCD
287 = Button
277 = bufsize
270 = b1
574名無しさん@おーぷん :2017/11/25(土)12:26:24 ID:???
>>524
Debian Gtk+2 でScreen.ActiveForm が nil になるときがあったわ
575名無しさん@おーぷん :2017/11/25(土)19:40:50 ID:???
>>571 でトークンを数えるのに、
AddTokens(Tokens, mp.ReadText(UnitFileNames[I]));
とやってるけど、 incファイルが展開されないからダメだった
576名無しさん@おーぷん :2017/11/29(水)11:16:57 ID:???
>>502-505

CapString は追加するのがリテラルだと、やたらと速くなるケースがあった。

TStringCapArray は逆に遅くなるかもしれない。

TStringHelper.Split は遅い
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/objpas/sysutils/syshelp.inc?view=markup#l1151
577名無しさん@おーぷん :2017/12/03(日)16:04:32 ID:???
どうしても Copy が遅いな
どうにもならんね
578名無しさん@おーぷん :2017/12/05(火)13:52:14 ID:???
動的配列のことが書いてあったわ

Dynamic arrays: how they work and how to use them | TwoDesk Delphi Blog
http://delphiblog.twodesk.com/dynamic-arrays-how-they-work-and-how-to-use-them

Dynamic Arrays in Delphi XE7
http://blog.marcocantu.com/blog/2014_september_dynamic_arrays_delphixe7.html
579名無しさん@おーぷん :2017/12/08(金)13:55:31 ID:???
alrieckert の更新が止まってるのか
2017年5月が最後

Redundancy / Errors in lazutf8.pas
http://forum.lazarus-ide.org/index.php/topic,39215.msg268400.html

GitHub - alrieckert/lazarus: Free Pascal Lazarus Project - Sync'ed with Lazarus SubVersion trunk every 15 minutes
https://github.com/alrieckert/lazarus
580名無しさん@おーぷん :2017/12/09(土)12:44:49 ID:???
Debian LXDE Gtk+2 でもなる
保存してLazarusをリロードしたら直るからバグやろね。
オブジェクトインスペクタでアクティブになってるプロパティーは
他の方法で変えられないというのは不便だ。
プログラムからまとめてプロパティーを変更したいときに困るよ。

Bug or not?
http://forum.lazarus-ide.org/index.php/topic,39157.0/nowap.html

Peek 2017-12-04 14-25.gif (GIF Image, 353 × 368 pixels)
http://forum.lazarus-ide.org/index.php?action=dlattach;topic=39157.0;attach=24016;image
581名無しさん@おーぷん :2017/12/09(土)16:18:13 ID:???
アプリで Classes ユニットを改造してリンクするのは難しそうだ
インクルードファイルのパスだけではダメで、
ユニットのパスも追加する必要があるけど、
そうすると、 同じ場所にあるSystemユニット等も再コンパイルしようとしてうまく行かない。


How to modify the StringList and ability to debug it?
http://forum.lazarus.freepascal.org/index.php/topic,37961.0.html
582名無しさん@おーぷん :2017/12/09(土)22:53:35 ID:???
classes.pp を
CodeBuffer.Scanner.CleanedSrc
で一つのファイルにしてみたけど
いっぱいエラーが出てダメですわ
583名無しさん@おーぷん :2017/12/10(日)00:05:11 ID:???
Free Pascal - Knowledge base
https://www.freepascal.org/faq.var#CompileSystemUnit
typing 'make' in the rtl source directory will then
recompile all RTL units including the system unit.
584名無しさん@おーぷん :2017/12/11(月)01:46:05 ID:???
>メインスレッドだけが LCL へのアクセスを許可されているのです。
と言いながら、 formConsole.Handle って LCL なのでは?

あと、 Form.Handle はプロパティーの変更で変わる可能性があるから、
どのみちダメだと思う。

というわけで、 AllocateHWnd で作成したウィンドウ使うしかないと思うのだが。

Multithreaded Application Tutorial/ja - Free Pascal wiki
http://wiki.freepascal.org/Multithreaded_Application_Tutorial/ja#Lazarus_.E3.82.A6.E3.82.A3.E3.82.B8.E3.82.A7.E3.83.83.E3.83.88.E3.82.BB.E3.83.83.E3.83.88.E3.82.A4.E3.83.B3.E3.82.BF.E3.83.BC.E3.83.95.E3.82.A7.E3.83.BC.E3.82.B9
PostMessage(formConsole.Handle, WM_VERBOSE, Integer(PError), 0);
585名無しさん@おーぷん :2017/12/11(月)02:07:39 ID:???
Delphiには無い
マルチスレッドではなくて、単に OnIdle 時に処理されるだけ。

Asynchronous Calls - Free Pascal wiki
http://wiki.freepascal.org/Asynchronous_Calls

site:docwiki.embarcadero.com QueueAsynccall - Google 検索
https://www.google.co.jp/search?q=site:docwiki.embarcadero.com+QueueAsynccall
586名無しさん@おーぷん :2017/12/11(月)20:47:19 ID:???
Macの場合

Recompile the RTL to debug
http://forum.lazarus.freepascal.org/index.php/topic,39255.msg268787
587名無しさん@おーぷん :2017/12/12(火)19:56:21 ID:???
TThread.ExecuteInThread
https://www.freepascal.org/docs-html/rtl/classes/tthread.executeinthread.html

[fpc] Revision 33100
https://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&sortby=file&revision=33100
ExecuteInThread added

site:docwiki.embarcadero.com ExecuteInThread - Google 検索
https://www.google.co.jp/search?q=site:docwiki.embarcadero.com+ExecuteInThread
588名無しさん@おーぷん :2017/12/14(木)17:38:34 ID:???
Free Pascal - Lazarus - [Lazarus] "Character" -> "Codepoint" in LazUTF8 function names
http://free-pascal-lazarus.989080.n3.nabble.com/Lazarus-quot-Character-quot-gt-quot-Codepoint-quot-in-LazUTF8-function-names-td4053521.html
589名無しさん@おーぷん :2017/12/14(木)18:05:51 ID:???
>>525

Windowsで
{$APPTYPE CONSOLE}
があれば、 フォームを使うGUIアプリでもコンソールが出ましたわ。
590名無しさん@おーぷん :2017/12/15(金)19:38:16 ID:???
program Lazarus;
{$APPTYPE CONSOLE}
でWindowsでもIDE実行時にコンソール窓出ました

Buildオプションに -WG つけるのはダメでした。

通常のアプリなら、 プロジェクトオプションの
"対象固有のオプション" - "Win32 gui アプリケーション(-WG)"
のチェックを外してもコンソールが出ました。
591名無しさん@おーぷん :2017/12/16(土)18:13:50 ID:???
WindowsだとLazarus再起動時にどうしてもコンソール窓も消える。
コマンドプロンプトから起動しても、標準出力に使ってくれない。

Linuxならコンソールから起動すれば、Lazarus再起動時もコンソールは残ったまま。

こんなスクリプトで起動
#!/bin/sh

lxterminal -e startlazarus
592名無しさん@おーぷん :2017/12/19(火)03:03:20 ID:???
見た目の幅が StrWidth
文字の数が StrCount
バイト数が Length
でどうだろう?
幅はフォントによるけど
593名無しさん@おーぷん :2017/12/25(月)20:00:12 ID:???
変更された箇所を見るなら、これがいいわ

https://github.com/graemeg/lazarus/commits/upstream
https://github.com/graemeg/freepascal/commits/master
594名無しさん@おーぷん :2017/12/26(火)22:29:55 ID:???
ここも使えるかもしれん

Search for FindCommandsByShortCut | source code search engine
https://searchcode.com/?q=FindCommandsByShortCut

<form method=get action=https://searchcode.com/>
<a href=https://searchcode.com/>searchcode</a>
<input type="text" value="" name="q" size="29" placeholder="pascal">
<input type="hidden" name="lan" value="46"/>
<input type="submit" value="検索">
</form>
595名無しさん@おーぷん :2017/12/26(火)22:34:44 ID:???
でもこれじゃ行まで見つけられなかったわ

Search for repo:graemeg/lazarus AddKeyWord('Date'); | source code search engine
https://searchcode.com/?q=repo%3Agraemeg%2Flazarus+AddKeyWord%28%27Date%27%29%3B

Search for repo:graemeg/lazarus AddKeyWord FPCTargetCPU | source code search engine
https://searchcode.com/?q=repo%3Agraemeg%2Flazarus+AddKeyWord+FPCTargetCPU
596名無しさん@おーぷん :2017/12/28(木)02:44:14 ID:???
こういうのダメなのかな

type
TTest = class
public
class procedure Proc1; virtual; abstract;
end;
597名無しさん@おーぷん :2017/12/28(木)02:53:06 ID:???
できたけど
598名無しさん@おーぷん :2017/12/28(木)03:47:14 ID:???
class method 型というのは無い
かといって、 method型に直接代入できない。
どうするのかと思ったら、 わけで代入するんやね。

0031528: pointer to advanced record methods - Free Pascal/Lazarus Bug Tracker
https://bugs.freepascal.org/view.php?id=31528
type TTest = record
 procedure a;
end;
var r: TTest;
  a: procedure of object;
  p: procedure;
begin
 p := @r.a;
 a := @r.a;
(省略)
Yet you can do

 TMethod(a).Code := @r.a;
 TMethod(a).Data := @r;
599名無しさん@おーぷん :2017/12/28(木)03:52:54 ID:???
8ヶ月前

0031721: Compiler does not show error when assigning a method to variable in class procedure. - Free Pascal/Lazarus Bug Tracker
https://bugs.freepascal.org/view.php?id=31721
600名無しさん@おーぷん :2017/12/28(木)04:06:09 ID:???
オブジェクトからならクラスメソッドの代入が可能なんやな

0029491: Compiler picks up wrong Self for class method variables - Free Pascal/Lazarus Bug Tracker
https://bugs.freepascal.org/view.php?id=29491
601名無しさん@おーぷん :2017/12/28(木)04:11:34 ID:???
クラス型の変数からなら代入可能

0014103: Inconsistency with class methods and callback variables - Free Pascal/Lazarus Bug Tracker
https://bugs.freepascal.org/view.php?id=14103
602名無しさん@おーぷん :2017/12/28(木)04:15:59 ID:???
>>600 によると、
FPC3.1.1で直ってるらしい
603名無しさん@おーぷん :2017/12/28(木)04:22:05 ID:???
こんなやり方があった
でももうダメなのかな

0030706: Accessing a class method by casting the object reference to nil causes segfault - Free Pascal/Lazarus Bug Tracker
https://bugs.freepascal.org/view.php?id=30706
@TMyClass(nil).Foo
604名無しさん@おーぷん :2017/12/28(木)04:38:34 ID:???
Self に VMT が入るのなら、
@TMyClass(TMyClass).Foo
でいいのかも
605名無しさん@おーぷん :2017/12/28(木)04:44:19 ID:???
メソッド(Delphi) - RAD Studio
http://docwiki.embarcadero.com/RADStudio/Berlin/ja/%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%EF%BC%88Delphi%EF%BC%89#.E9.80.9A.E5.B8.B8.E3.81.AE.E3.82.AF.E3.83.A9.E3.82.B9_.E3.83.A1.E3.82.BD.E3.83.83.E3.83.89
>クラス メソッドがクラス C で呼び出された場合は、Self は C クラス型になります。
...

>クラス メソッドは、クラス参照またはオブジェクト参照を通じて呼び出すことができます。
606名無しさん@おーぷん :2017/12/28(木)05:33:52 ID:???
static な class method 内から、
継承したクラスの class method に自動的にアクセスできないんやな。

type
 TTest = class
  class procedure Proc; virtual; abstract;
  class procedure Test; static;
 end;

class procedure TTest.Test;
begin
 Proc; // TTest.Proc を呼ぶので実行時にエラー
end;

type
 TTest2 = class(TTest)
  class procedure Proc; override;
 end;

class procedure TTest2.Proc;
begin
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 TTest2.Test;
end;
607名無しさん@おーぷん :2017/12/28(木)05:45:47 ID:???
Delphiの説明だと、 static method は virtual には出来ないとは書いてあるけど、
多態性が適用されないとは書いてない。
608名無しさん@おーぷん :2017/12/28(木)06:18:45 ID:???
ここに書いてあった
class property で多態性は無理ってことだな

Static class methods
https://www.freepascal.org/docs-html/ref/refsu30.html
>The method behaves as if Self is hardcoded to the declared class, not the actual class with which it was called.

Class properties
https://www.freepascal.org/docs-html/ref/refse40.html
>Class properties can have a getter and setter method like regular properties,
>but these must be static methods of the class.
609名無しさん@おーぷん :2017/12/28(木)21:05:24 ID:???
とりあえずできたbugtracker内の検索
Cookieが必要
URIにパラメータを渡してもダメだった

<form method="post" name="filters_open" id="filters_form_open" action="https://bugs.freepascal.org/view_all_set.php">
<input type="hidden" name="type" value="1" />
<input type="hidden" name="page_number" value="1" />
<input type="hidden" name="view_type" value="simple" />
<input size="16" name="search" value="" type="text" placeholder="need cookie" />
<input name="filter" class="button-small" value="検索" type="submit">
</form>
610名無しさん@おーぷん :2017/12/28(木)21:16:26 ID:???
こんなのも

forum検索(30日以内)
<form action="http://forum.lazarus.freepascal.org/index.php?action=search2"
method="post" accept-charset="UTF-8" name="searchform" id="searchform">
Forum 30days
<input name="search" maxlength="100" size="30" class="input_text" type="text">
<input type="hidden" name="sort" value="id_msg|desc">
<input type="hidden" name="maxage" value="30">
<input type=submit value="検索">
</form>
611名無しさん@おーぷん :2017/12/28(木)22:20:39 ID:???
>>606
static な class method では
クラス名が全部付いていると考えるといいかも。

class procedure TTest.Test;
begin
 //Proc; // TTest.Proc を呼ぶので実行時にエラー
TTest.Proc;
end;

手続きと同じあつかいらしいから、 こう
procedure Test;
begin
TTest.Proc;
end;
612名無しさん@おーぷん :2017/12/31(日)02:11:02 ID:???
似てる

Lazarus - Statistics Center
http://forum.lazarus.freepascal.org/index.php?action=stats
Average posts per day: 73.48
Average topics per day: 10.11
Average registrations per day: 6.94

Python Forum - Board Statistics
https://python-forum.io/stats.php
Posts per day: 68.5
Threads per day: 12.17
Members per day: 6.43
613名無しさん@おーぷん :2018/01/02(火)03:50:18 ID:???
正規表現を使って複数行を文字列一つに置換できなかったけど、
これは、将来もやるつもりは無いってことでいいのかな。

つまり、一行ずつの置換しか行わない

614名無しさん@おーぷん :2018/01/02(火)04:11:28 ID:???
オジリナルの方は、各行について一致箇所が何個あるか調べてから置換してる

function TCustomSynEdit.SearchReplace(const ASearch, AReplace: UnicodeString;
AOptions: TSynSearchOptions): Integer;
https://github.com/SynEdit/SynEdit/blob/master/Source/SynEdit.pas#L10892

function TSynEditSearch.FindAll(const NewText: UnicodeString): Integer;
https://github.com/SynEdit/SynEdit/blob/master/Source/SynEditSearch.pas#L262
615名無しさん@おーぷん :2018/01/02(火)04:21:01 ID:???
Lazarusの方はブロックで取得する
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/components/synedit/synedit.pp?root=lazarus&view=markup#l7633
while fTSearch.FindNextOne(FTheLinesView,ptStart,ptEnd,ptFoundStart,ptFoundEnd, True) do

あとこんなのがあったわ
ってことは、複数行の置換するのか

https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/components/synedit/syneditsearch.pp?root=lazarus&view=markup#l350

function TSynEditSearch.FindNextOne(Lines: TStrings; StartPos, EndPos: TPoint;
out FoundStartPos, FoundEndPos: TPoint; ASupportUnicodeCase: Boolean=False): boolean;

function MultiLinePatternFits: boolean;
function SearchRegExprMultiLine: boolean;
616名無しさん@おーぷん :2018/01/02(火)04:26:31 ID:???
複数行パターン(M)にチェック入れたらできた

617名無しさん@おーぷん :2018/01/02(火)04:47:56 ID:???
*は選択したcolumn

*******
*ooooo*
*sssoo*sss
*ooooo*
*******

sss を 空文字 に置換すると、

*******
*ooooo*
*oo*sss
*ooooo*
*******


だから長さが違う文字列に置換すると、置換範囲の右端が増えたり減ったりする
618名無しさん@おーぷん :2018/01/02(火)05:16:22 ID:???
FTSearch.FindNextOne で、
行が変わったら ptEnd.X を 元の矩形のBlockEnd.Xにしなきゃいけない。

文字列が見つかると選択範囲がそこへ移動するので、 BlockBeginとBlockEndが変わってしまう。
だけど最初の BlockEnd.X は保存されていない。

そもそも最初に移動したときに矩形選択モードも解除されてるんだよな。
619名無しさん@おーぷん :2018/01/02(火)05:22:11 ID:???
選択範囲をstring型でとりだして、それに置換を実行していく。

置換したらその都度 BlockBegin, BlockEnd を置き換える。

毎回 BlockBegin, BlockEnd の範囲の undo が保存されるけど
620名無しさん@おーぷん :2018/01/04(木)01:31:22 ID:???
Delphiでも TypeInfo は Pointer型を返す。
SetToString には PTypeInfo を受け取るものと、 PPropInfo を受け取るものがある。
だから、SetToString(TypeInfo(THoge), Value); はどっちか分からないって問題が発生する。

System.TypeInfo - RAD Studio API Documentation
http://docwiki.embarcadero.com/Libraries/Tokyo/ja/System.TypeInfo

System.TypInfo.SetToString - RAD Studio API Documentation
http://docwiki.embarcadero.com/Libraries/Berlin/ja/System.TypInfo.SetToString
621名無しさん@おーぷん :2018/01/08(月)11:40:11 ID:???
IDE再コンパイル中に出たメッセージをじっくり見たい場合は、

1)コンパイル中に実行メニューから構築中止を実行

2)メッセージウィンドウを右クリックして
Copy all/original messages to clipboard
を選択

で全部読めました。
622名無しさん@おーぷん :2018/01/09(火)13:41:36 ID:???
部分検索が可能になるっぽい

IDE: Extended filter for Code Completion. Issue #32974, patch from regs. · graemeg/lazarus@dbc8b82 · GitHub
https://github.com/graemeg/lazarus/commit/dbc8b828416abe8c256b445dfe5670c366a0e304

0032974: Extended filter for Code Completion - Free Pascal/Lazarus Bug Tracker
https://bugs.freepascal.org/view.php?id=32974
623名無しさん@おーぷん :2018/01/09(火)14:12:55 ID:???
[lazarus] Revision 57014
https://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&root=lazarus&sortby=date&revision=57014

Free Pascal - Lazarus - [Lazarus] Extended filter for Code Completion
http://free-pascal-lazarus.989080.n3.nabble.com/Lazarus-Extended-filter-for-Code-Completion-td4053810.html
624名無しさん@おーぷん :2018/01/11(木)08:15:29 ID:???
PDisplay のようなものをいちいち定義するのが面倒だから、OpaquePointer型を作って欲しい
ってこと? 不明瞭なポインタって意味らしいが。
https://searchcode.com/codesearch/raw/5161700/
PDisplay = ^TDisplay;
TDisplay = TXDisplay;

+ added additional OpaquePointer type for the system unit (mantis #32… · graemeg/freepascal@f8f0030 · GitHub
https://github.com/graemeg/freepascal/commit/f8f0030
{ opaque data type and related opaque pointer }
TOpaqueData = record end;
POpaqueData = ^TOpaqueData;
+ OpaquePointer = type POpaqueData;

0032977: FEATURE REQUEST . Add an Opaque record and Pointer to Opaque record to system or types. - Free Pascal/Lazarus Bug Tracker
https://bugs.freepascal.org/view.php?id=32977
>Would be nice if those need not be declared in every single unit.
625名無しさん@おーぷん :2018/01/11(木)08:21:56 ID:???
PDisplay の例だと不十分だった

他と互換性のないポインタ型を作ろうと思ったら、
空のレコード型を定義して、そこへのポインタ型を作るのよ
PXGC = ^TXGC;
TXGC = record
end;

こうすれば、 PXGC型変数は、 Pointer型とPXGC型以外と互換性が無くなる。

OpaquePointer のやり方だと、 OpaquePointer型同士は互換性があるけど、
そこはいいのかな・・・
626名無しさん@おーぷん :2018/01/11(木)08:32:26 ID:???
エラーにはならない

type
TOpaqueData = record end;
POpaqueData = ^TOpaqueData;
OpaquePointer = type POpaqueData;
PTest1 = OpaquePointer;
PTest2 = OpaquePointer;

procedure TForm1.Button1Click(Sender: TObject);
var
P: PTest1;
Q: PTest2;
begin
Q := nil;
P := Q;
end;
627名無しさん@おーぷん :2018/01/11(木)08:33:32 ID:???
PTest1 = type OpaquePointer;
PTest2 = type OpaquePointer;
にしてもエラーなし
628名無しさん@おーぷん :2018/01/11(木)08:52:50 ID:???
PTest1 = ^TOpaqueData;
PTest2 = ^TOpaqueData;
はエラーが出ないけど、

TTest1 = record X: Integer; end;
TTest2 = record X: Integer; end;
PTest1 = ^TTest1;
PTest2 = ^TTest2;
なら出る。
629名無しさん@おーぷん :2018/01/11(木)09:17:26 ID:???
X: Integer; があってもだめだけど、無くてもダメだったわ

TTest1 = record end;
TTest2 = record end;
630名無しさん@おーぷん :2018/01/12(金)14:10:59 ID:???
デバッガに入るのが遅いっ話
どうにもならないってあるけど、
Linuxだと速いかもしれない

Free Pascal - Lazarus - [Lazarus] Any tips to speed up Lazarus->GDB debugger?
http://free-pascal-lazarus.989080.n3.nabble.com/Lazarus-Any-tips-to-speed-up-Lazarus-gt-GDB-debugger-td4053855.html
The time F9 needs to start your app? Sorry nothing can be done.
Same for stepping with F7/F8.
631名無しさん@おーぷん :2018/01/15(月)13:46:19 ID:???
また言われている
ファイルのキャッシュがらみなんだろうが、
複雑で良くわからない
相当深く入り込む

"File Not Found" message on file that *does* exist
http://forum.lazarus-ide.org/index.php/topic,39656.msg272902.html
632名無しさん@おーぷん :2018/02/18(日)10:00:11 ID:???
Delphiは64bitでも文字数と参照カウンタが32bit

String types
https://www.freepascal.org/docs-html/current/prog/progsu161.html

内部データ形式(Delphi) - RAD Studio
http://docwiki.embarcadero.com/RADStudio/Tokyo/ja/%E5%86%85%E9%83%A8%E3%83%87%E3%83%BC%E3%82%BF%E5%BD%A2%E5%BC%8F%EF%BC%88Delphi%EF%BC%89#.E9.95.B7.E3.81.84.E6.96.87.E5.AD.97.E5.88.97.E5.9E.8B
633名無しさん@おーぷん :2018/02/20(火)17:13:28 ID:???
castle-engine/castlestringutils.pas at master · castle-engine/castle-engine · GitHub
https://github.com/castle-engine/castle-engine/blob/master/src/base/castlestringutils.pas#L1452

CopyPos で EndPosition を含めているけど、マルチバイト文字を考慮するなら
含めないほうがいい。
含めなければ、両方 Pos の戻り値が使える。

含めるか含めないかは厄介だから、命名規則で区別してたらいいのに。
あと、0から始まるか、1から始まるかも。
634名無しさん@おーぷん :2018/02/21(水)21:10:12 ID:???
タブにフォーカスがあって文字を入力出来ないって問題
タブがフォーカスを受け取らないように出来たら良いのだが

Code Editor - On tab change, how to set focus on code editor
http://forum.lazarus-ide.org/index.php/topic,40162.msg277109.html
635名無しさん@おーぷん :2018/02/21(水)21:21:35 ID:???
Screen.AddHandlerFormVisibleChanged(@OnFormVisibleChanged);
使って
クラス名が tsourcenotebook の時に
SrcEditNoteBook.TabStop を False にしたらいいかも
636名無しさん@おーぷん :2018/02/21(水)21:31:22 ID:???
[lazarus] Contents of /trunk/ide/sourceeditor.pp
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/ide/sourceeditor.pp?root=lazarus&view=markup#l6273
procedure TSourceNotebook.CreateNotebook;


APage.TabStop := False;
を入れれば直るかもしれない。
637名無しさん@おーぷん :2018/02/22(木)00:37:56 ID:???
TabStop いじるぐらいではダメかもしれん
638名無しさん@おーぷん :2018/02/22(木)18:51:15 ID:???
型名必須な列挙型があるのか

Free Pascal - General - Scoped enums and inferred types
http://free-pascal-general.1045716.n5.nabble.com/Scoped-enums-and-inferred-types-td5730843.html
> {$scopedenums on}
> type
> TMyType = (A, B, C);
> {$scopedenums off}
...

>The whole point of scoped enums is to force you to write TMyType.A
>everywhere.

スコープのある列挙型(Delphi) - RAD Studio
http://docwiki.embarcadero.com/RADStudio/Tokyo/ja/%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97%E3%81%AE%E3%81%82%E3%82%8B%E5%88%97%E6%8C%99%E5%9E%8B%EF%BC%88Delphi%EF%BC%89
639名無しさん@おーぷん :2018/02/22(木)20:20:45 ID:???
Windows7でIDE再コンパイル後だと、 IDE再起動時にタスクバーにフォーカスが移動する
再コンパイル前ならIDE再起動時にメッセージウィンドがファーカスを持つ。
再コンパイルしなくても、IDE再起動を繰り返していると、タスクバーにフォーカスが移動することがある。

アプリケーション起動時に画面が最前面に表示されない。
https://social.technet.microsoft.com/Forums/windows/ja-JP/81c6b01d-693f-408b-a9db-1edb48102b36?forum=w7itprogeneralja
>Vista の時だったと思いますが、「エディターに入力しているときに勝手にダイアログが最前面に表示されるんだ。
>(英語の)文章を打っているんだから、スペースを打つよな。すると、OK ボタンがクリックされちまうんだ。
>勝手にフォーカスを移動させないでくれ」という要望が有り、そのように修正されています。
640名無しさん@おーぷん :2018/02/22(木)20:22:13 ID:???
再起動ではなくて、一旦終了してから起動すると直ってる
641名無しさん@おーぷん :2018/02/22(木)20:23:13 ID:???
SetForegroundWindow だけだとタスクバーにフォーカスが移動してアイコンが点滅する
642名無しさん@おーぷん :2018/02/22(木)20:39:38 ID:???
コレ使ってみたけど Access denied が出たわ

AllowSetForegroundWindow 関数
https://msdn.microsoft.com/ja-jp/library/cc430255.aspx

system error os code 5 allowsetforegroundwindow - Bing
https://www.bing.com/search?q=system+error+os+code+5+allowsetforegroundwindow&
643名無しさん@おーぷん :2018/02/22(木)20:43:58 ID:???
大変みたいだね

特定のプロセスをアクティブにする-3(ShowWindow, GetForegroundWindow, SetForegroundWindow, GetWindowThreadProcessId, BringWindowToTop, AttachThreadInput, PostMessage, WndProc, 最前面に表示) - いろいろ備忘録日記
http://devlights.hatenablog.com/entry/20071211/p1
644名無しさん@おーぷん :2018/02/22(木)21:00:36 ID:???
こういうのもある

Bring window to the top front accepting user input by code · GitHub
https://gist.github.com/CaptainJH/f8d74747cf352f010df6
645名無しさん@おーぷん :2018/02/22(木)21:17:18 ID:???
[lazarus] Contents of /trunk/ide/ideinstances.pas
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/ide/ideinstances.pas?view=markup&root=lazarus&sortby=file#l465
428 procedure TIDEInstances.PerformCheck;
で使われている
SetForegroundWindow(xHandleBringToFront);
//SetForegroundWindow works (on Windows) only
//if the calling process is the foreground process, therefore it must be here!
646名無しさん@おーぷん :2018/02/22(木)21:52:53 ID:???
詳しく載ってた

Windowを前面に出す - マイクロソフト系技術情報 Wiki
https://techinfoofmicrosofttech.osscons.jp/index.php?Window%E3%82%92%E5%89%8D%E9%9D%A2%E3%81%AB%E5%87%BA%E3%81%99
647名無しさん@おーぷん :2018/02/22(木)23:50:44 ID:???
Queue はスレッドを止めない

Thread Safety?
http://forum.lazarus-ide.org/index.php/topic,40163.msg277272.html#msg277272
>the difference is that 'Queue' truely pushes methodS to be executed in main thread and returns immediatly
>so the running caller thread doesn't suffer of pauses while 'Synchronize' do a pause inside the caller thread
648名無しさん@おーぷん :2018/02/23(金)18:21:33 ID:???
>>645
でもこれ、実行されない

FStartIDE は True で
xHandleBringToFront は 0
649名無しさん@おーぷん :2018/02/23(金)23:43:37 ID:???
>>634-637

独立したプロジェクトで
TExtendedNotebook TabSheet1 TabSheet2 Memo1 でテストしてみたら
効果あった

設計時にFormのActiveControlを設定していなくても、
ExtendedNotebook.TabStop := False なら
Memo1 がフォーカスを持った状態でフォームが表示される。
650名無しさん@おーぷん :2018/02/25(日)01:28:17 ID:???
Linux+Gtk2 でメニュー出ました

function XTestFakeKeyEvent(dpy: PDisplay; keycode: dword; is_press: Boolean;
 delay: dword): longint; cdecl; external;

procedure SetKeySym(KeySym: TKeySym; KeyDown: Boolean);
var
 Display: PDisplay;
 KeyCode: TKeyCode;
begin
 Display := XOpenDisplay(nil);
 try
  KeyCode := XKeysymToKeycode(Display, KeySym);
  if KeyCode = 0 then
   raise Exception.CreateFmt('KeySym not found(%d)', [Cardinal(KeySym)]);
  XTestFakeKeyEvent(Display, KeyCode, KeyDown, 0);
  XFlush(Display);
 finally
  XCloseDisplay(Display);
 end;
end;

SetKeySym(XK_Alt_L, True);
SetKeySym(XK_F, True);
SetKeySym(XK_F, False);
SetKeySym(XK_Alt_L, False);
651名無しさん@おーぷん :2018/02/25(日)01:31:40 ID:???
LazMouseAndKeyInputパッケージはAltキーが使えない
XK_Alt_L なら大丈夫なのに

https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/components/mouseandkeyinput/xkeyinput.pas?root=lazarus&view=co&content-type=text%2Fplain
VK_MENU: Result := XK_VoidSymbol; // alt key crashes app, XK_Alt_R;
652名無しさん@おーぷん :2018/02/25(日)01:36:46 ID:???
パッケージのインストールと、
{$linklib Xtst}
がいった

Debian -- パッケージ検索結果 -- Xtst
https://packages.debian.org/search?keywords=Xtst&searchon=names&suite=stable&section=all
653名無しさん@おーぷん :2018/02/25(日)01:45:11 ID:???
メニューを持ったフォームがアクティブでないと出なかった
654名無しさん@おーぷん :2018/02/26(月)18:41:55 ID:???
>>414-416
の解決方法が
>>650-653

メニューを持ったForm.SetFocus;
Application.HandleMessages;
キーシミュレート
でフォーカスを移してメニュー出た

あとはメニューが閉じたときに発生するイベントがわかれば
655名無しさん@おーぷん :2018/03/01(木)20:48:31 ID:???
動画付きの機能紹介ページがあったんやな

New IDE features since - Free Pascal wiki
http://wiki.lazarus.freepascal.org/New_IDE_features_since#code_macro_OfAll
656名無しさん@おーぷん :2018/03/30(金)19:35:20 ID:???
FPCのcase文は文字列が使えるだけでなく、
文字列の範囲もサポートしている。
でも文字列の大小関係が途端に怪しくなる
'10' < '2' だし
怖くて使えないわ

The Case statement
https://www.freepascal.org/docs-html/current/ref/refsu56.html#x162-18400013.2.2
657名無しさん@おーぷん :2018/04/02(月)04:49:40 ID:???
>>242 で重要な事がわかった

単純にフォームを一つ表示するデフォルトのプロジェクトで、
デバッグ情報の形式が DWARF だと実行可能ファイルのサイズが3.6MBになった。
自動なら1.7MB

ファイルメニューの「新規...」から
プロジェクト -> アプリケーションを選ぶと、
DWARF になってるから気をつけて。


658名無しさん@おーぷん :2018/04/02(月)05:40:53 ID:???
DWARF2 も 3 もサイズは小さくならない

DWARF - Wikipedia
https://ja.wikipedia.org/wiki/DWARF
659名無しさん@おーぷん :2018/04/02(月)06:40:12 ID:???
デフォルトプロジェクトの設定は
projectoptions.xml
が使われてたかも
だから人によって違うわ
660名無しさん@おーぷん :2018/04/03(火)19:48:39 ID:???
Windows限定だけ取得できました
やっぱりPower/Sleep/Wakeキーは発生しない

How to get keyboard scan codes
http://forum.lazarus-ide.org/index.php/topic,40752.msg281697.html#msg281697
661名無しさん@おーぷん :2018/04/04(水)11:10:36 ID:???
最初からC#のコンパイラが付いているので、IDEからコンパイルするなら
パッケージでやる方がいいのかな

OSに標準付属のC#/VBコンパイラーでソースコードをコンパイルするには?:.NET TIPS - @IT
http://www.atmarkit.co.jp/ait/articles/1504/15/news019.html
662名無しさん@おーぷん :2018/04/05(木)09:27:35 ID:???
外部ツールでバッチファイルを実行できないみたいだけど
663名無しさん@おーぷん :2018/04/05(木)09:35:23 ID:???
コンソールからは、 cmd.e x e /K "cs.c m d" で実行できるけど、
664名無しさん@おーぷん :2018/04/05(木)09:38:44 ID:???
バッチファイルで pause して止めるしか無いと思ったけど、
C#側で Console.ReadKey(); 入れれは止まった。

[C#] コンソールをキー入力で一時停止 | Remember The Time
http://www.remember-the-time.xyz/2012/06/c.html
665名無しさん@おーぷん :2018/04/05(木)09:42:56 ID:???
ソースにエラーがあった場合は止まらなかったわ
666名無しさん@おーぷん :2018/04/08(日)07:15:11 ID:???
exeと同じ場所や、そこから相対的な位置にあるファイルの読み込みはどうするのだろう?
ゲームとか設定ファイルがありますよね。

TCustomApplication.ExeName
http://lazarus-ccr.sourceforge.net/docs/fcl/custapp/tcustomapplication.exename.html
>Note that some operating systems do not return the full pathname of the binary.
667名無しさん@おーぷん :2018/04/09(月)10:08:11 ID:???
Resultの型で区別することは、仕様で定義されてないから、
やっぱり出来ないんですよね。

手続きと関数(Delphi) - RAD Studio
http://docwiki.embarcadero.com/RADStudio/Tokyo/ja/%E6%89%8B%E7%B6%9A%E3%81%8D%E3%81%A8%E9%96%A2%E6%95%B0%EF%BC%88Delphi%EF%BC%89#.E6.89.8B.E7.B6.9A.E3.81.8D.E3.81.A8.E9.96.A2.E6.95.B0.E3.81.AE.E3.82.AA.E3.83.BC.E3.83.90.E3.83.BC.E3.83.AD.E3.83.BC.E3.83.89

overload
https://www.freepascal.org/docs-html/current/ref/refsu79.html#x197-21900014.10.10

Function overloading
https://www.freepascal.org/docs-html/current/ref/refse93.html#x183-20500014.6
668名無しさん@おーぷん :2018/04/14(土)02:01:06 ID:???
ちょうど話題になったわ

0033604: Overloaded routines with same arguments pass compilation. - Free Pascal/Lazarus Bug Tracker
https://bugs.freepascal.org/view.php?id=33604
669名無しさん@おーぷん :2018/04/16(月)09:39:53 ID:???
function で戻り値を受け取らないコードが許されているから、

procedure と function で overload を許すと、

function Hoge: Integer;
begin
end;

Hoge;

だったのが、

procedure Hoge; の呼び出しに勝手に置き換わる。
670名無しさん@おーぷん :2018/04/16(月)09:42:06 ID:???
でも、 引数の型の違いによる overload も、
Variant 型使うと互換性のある overload ルーチン作れたはず。
671名無しさん@おーぷん :2018/04/16(月)09:44:19 ID:???
Result type による overload は、
戻り値を受け取らないと、どっちか分からなくなる。

受け取ったが、その後使われてないケースをどうするかって問題がある。
672名無しさん@おーぷん :2018/04/16(月)14:59:45 ID:???
procedure Test(B: Byte);
begin
end;
があったとして、

procedure Test(I: Integer); overload;
begin
end;

を追加した場合でも、 Test(1) の呼び出しが Integer型のに変わったわ
673名無しさん@おーぷん :2018/04/17(火)18:05:28 ID:???
クラスの親子関係を見たいんやね
Delphiにはある

How to solve this coding problem?
http://forum.lazarus.freepascal.org/index.php/topic,40921.0.html
674名無しさん@おーぷん :2018/04/17(火)18:50:13 ID:???
意図せずに呼び出すルーチンが変わる問題

自作unitで、
procedure ShowValue(P: Pointer); overload;
procedure ShowValue(V: Variant); overload;
を作る。
自作unitをuses節の一番最後に追加する。
自作アプリの ShowValue(1); は Variant のが呼び出される。

RTL/LCL側(Dialogs等)で、
procedure ShowValue(S: string); overload;
procedure ShowValue(I: Integer); overload;
が追加される。

すると、 ShowValue(1); は RTL/LCLで追加した Integer のが呼び出されるようになる。
675名無しさん@おーぷん :2018/04/18(水)12:21:12 ID:???
Function overloading
https://www.freepascal.org/docs-html/current/ref/refse93.html

Prior to version 1.9 of the compiler, the overloaded functions
needed to be in the same unit. Now the compiler will continue
searching in other units if it doesn’t find a matching version
of an overloaded function in one unit, and if the overload keyword is present.

If the overload keyword is not present, then all overloaded versions must
reside in the same unit, and if it concerns methods part of a class, they
must be in the same class, i.e. the compiler will not look for overloaded
methods in parent classes if the overload keyword was not specified.
676名無しさん@おーぷん :2018/04/18(水)12:25:58 ID:???
overload が付いていなければ、 クラス内からはメソッドの ShowValue しか見えない。

procedure ShowValue(Value: string);
begin
 WriteLn('string');
end;

type
 TTest = class
 public
  procedure ShowValue(Value: Integer);
  constructor Create;
 end;

procedure TTest.ShowValue(Value: Integer);
begin
 WriteLn('TTest Integer');
end;

constructor TTest.Create;
begin
 // Incompatible type for arg no. 1: Got "Constant String", expected "LongInt"
 ShowValue('TEST');
end;

begin
 TTest.Create.Free;
 ReadLn;
end.
677名無しさん@おーぷん :2018/04/18(水)12:37:58 ID:???
unit Unit1;

{$mode objfpc}{$H+}

interface

procedure ShowValue(Value: Integer);

implementation

procedure ShowValue(Value: Integer);
begin
 WriteLn('Unit1 ShowValue(Integer)');
end;

end.
678名無しさん@おーぷん :2018/04/18(水)12:39:54 ID:???
overload がなければ Int64 が呼び出される。
あたりまえだ
だけど、 procedure ShowValue(Value: string); overload; があると、
Unit1 ShowValue(Integer) が呼び出される。

program project1;

{$mode objfpc}{$H+}

uses Unit1;

procedure ShowValue(Value: Int64);
begin
 WriteLn('project1 ShowValue(Int64)');
end;

{
procedure ShowValue(Value: string); overload;
begin
 WriteLn('project1 ShowValue(string)');
end;
}

begin
 ShowValue(10);
 ReadLn;
end.
679名無しさん@おーぷん :2018/04/18(水)12:41:39 ID:???
Unit1 の方だけで overload が付いた場合は、 Int64 が呼び出される
680名無しさん@おーぷん :2018/04/18(水)12:57:38 ID:???
まとめると、

自作の グローバルルーチンで overload をつけるのはお勧めしない。
付ける場合は、 ルーチン名が被らない工夫が必要。

自作ライブラリ集で、ありがちな名前のルーチンにポンポン overload を付けると
将来問題が起きるかもしれない。

overload付きのメソッドを呼び出したつもりでグローバルルーチンが呼び出されることは無いが、
親クラスのメソッドは呼び出されるかもしれないので、
自身で管理しないクラスから継承するときは注意が必要。
681名無しさん@おーぷん :2018/04/28(土)23:28:36 ID:???
>>673

CodeToolsを使ってこれを取得する

TForm1
TTestForm
TForm
TCustomForm
TScrollingWinControl
TCustomControl
TWinControl
TControl
TLCLComponent
TComponent
TPersistent
TObject

TChild
TParent
TObject

findclassandancesters.zip (findclassandancesters.zip) ダウンロード | おーぷん2ちゃんねるろだ | uploader.jp
https://ux.getuploader.com/open2ch1/download/808

MD5 4137f8bbcbb316237ae98f4bcee0f1bf
SHA1 45c337ac4e7c5fe203548c9bbf912b4d68d140e4
682名無しさん@おーぷん :2018/04/28(土)23:30:31 ID:???
実際に取得する部分

procedure AddAncestorNames(const AFileName, AClassName: string;
 AOutput: TStrings);
var
 CodeBuffer: TCodeBuffer;
 CodeTool: TCodeTool;
 Node: TCodeTreeNode;
 List: TFPList;
 Context: PFindContext;
 I: Integer;
begin
 CodeBuffer := ct.GetCodeBuffer(AFileName);
 CodeTool := ct.GetCodeTool(CodeBuffer, False);
 Node := CodeTool.FindClassNodeInUnit(AClassName, True, False, False, True);
 List := nil;
 try
  CodeTool.FindClassAndAncestors(Node, List, True);
  for I := 0 to List.Count - 1 do
  begin
   Context := PFindContext(List[I]);
   AOutput.Add(Context^.Tool.ExtractClassName(Context^.Node, False));
  end;
 finally
  FreeListOfPFindContext(List);
 end;
end;
683名無しさん@おーぷん :2018/04/30(月)19:53:00 ID:???
Windowsで 外部ツールを使って fpc.exe のディレクトリでコマンドプロンプトを表示する方法
fpc.exe が D ドライブにある場合

プログラムファイル名
C:\Windows\System32\cmd.e x e

パラメータ
/K
"cd $Path($(CompPath)) && D:"
684名無しさん@おーぷん :2018/04/30(月)19:53:31 ID:???
exeは直してくれ
685名無しさん@おーぷん :2018/04/30(月)20:18:34 ID:???
>>502-504 の CapString と目的同じ

Free Pascal Random Bits: Simple String Buffer
http://freepascal-bits.blogspot.jp/2010/02/simple-string-buffer.html
686名無しさん@おーぷん :2018/04/30(月)20:35:12 ID:???
名前が変わったこれ、UTF8CodepointSize
lazutf8.pas のソースがまったくヒットしない
なんでだろう?

[lazarus] Diff of /trunk/components/lazutils/lazutf8.pas
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/components/lazutils/lazutf8.pas?sortby=file&root=lazarus&r1=56692&r2=56691&pathrev=56692

UTF8CodepointSize - Google 検索
https://www.google.com/search?q=UTF8CodepointSize

Search for UTF8CodePointSize | source code search engine
https://searchcode.com/?q=UTF8CodePointSize&lan=46
687名無しさん@おーぷん :2018/05/01(火)13:09:43 ID:???
>>685 をよく見たら、 Capacity を設定できるわけじゃなかった。
string型自体がバッファを確保するから、意味ないかも

32bit環境で先頭アドレスが変わるタイミングを調べた

16 = Length(S)
64
160
352
4504
233320
262072
1048504
1114040
1179576
1245112
1310648
1376184
1441720
688名無しさん@おーぷん :2018/05/02(水)09:37:52 ID:???
一時変数使ったほうが速いのか

Populate a dynamic array
http://forum.lazarus-ide.org/index.php/topic,40632.msg284697.html#msg284697
H := Length(myArray);
SetLength(myArray, H + 1);
myArray[H] := ...
689名無しさん@おーぷん :2018/05/04(金)13:01:55 ID:???
>>681 で TTestForm は含まれないわ
690名無しさん@おーぷん :2018/05/05(土)18:36:07 ID:???
>>673

こんなんあった
画像だけ
https://www.freepascal.org/fcl/classchart.gif
691名無しさん@おーぷん :2018/05/05(土)18:39:26 ID:???
1269ユニットで
クラスは4255個あった

FPCとLazarus で重複しているのもあるけど
692名無しさん@おーぷん :2018/05/07(月)14:14:30 ID:???
all visible ってあるけど、 GatherUnitNames に関しては
GatherIdentifiers とは違う。

たぶん、、、
FPCの source の下にあるフォルダは自動的に追加。
lazarus.pp で作った CodeBuffer を渡すと、 IDE関連のフォルダが自動的に追加。
みたいだ。

[lazarus] Contents of /trunk/components/codetools/codetoolmana
ger.pas
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/components/codetools/codetoolmanager.pas?root=lazarus&view=markup#l507
// gather identifiers (i.e. all visible)
function GatherUnitNames(Code: TCodeBuffer): Boolean;
693名無しさん@おーぷん :2018/05/07(月)14:19:12 ID:???
IdentifierList.Items[?] は TUnitNameSpaceIdentifierListItem型で、
ファイル名が含まれていない。

[lazarus] Contents of /trunk/components/codetools/identcompletiontool.pas
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/components/codetools/identcompletiontool.pas?root=lazarus&view=markup#l1592
procedure TIdentCompletionTool.GatherUnitnames(const NameSpacePath: string);

[lazarus] Contents of /trunk/components/codetools/identcompletiontool.pas
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/components/codetools/identcompletiontool.pas?root=lazarus&view=markup#l187
TUnitNameSpaceIdentifierListItem = class(TIdentifierListItem)
694名無しさん@おーぷん :2018/05/17(木)00:06:42 ID:???
よく使う方の Format はスレッドセーフじゃなかったんだね

System.SysUtils.Format - RAD Studio API Documentation
http://docwiki.embarcadero.com/Libraries/Tokyo/ja/System.SysUtils.Format
>Format の第 1 の形式は、グローバル変数に含まれているローカライズ情報を使用するため、スレッド セーフではありません。
695名無しさん@おーぷん :2018/05/17(木)00:10:31 ID:???
string型ってスレッドセーフなんですかね?
696名無しさん@おーぷん :2018/05/17(木)00:22:22 ID:???
変数は全部スレッドセーフじゃないって書いてある

Free Pascal - General - Thread Safety of String
http://free-pascal-general.1045716.n5.nabble.com/Thread-Safety-of-String-td5719499.html

クリティカルセクション内で別スレッドから受け取った string 型変数は
どうなるのか疑問に思った。
697名無しさん@おーぷん :2018/05/17(木)00:27:10 ID:???
OnTerminate でなら大丈夫らしい

multithreading - Return String from Thread Delphi - Stack Overflow
https://stackoverflow.com/questions/46257649/return-string-from-thread-delphi
698名無しさん@おーぷん :2018/05/17(木)00:30:53 ID:???
TStringList の文字列を別スレッドが受け取ると、
二種類のスレッドで同一文字列を参照するから、おかしくなるかも。

UniqueString したのを渡せば、大丈夫かな
699名無しさん@おーぷん :2018/05/17(木)00:47:06 ID:???
ここには問題ないって書いてあるな

multithreading - Copy a string for worker thread - Stack Overflow
https://stackoverflow.com/questions/50005376/copy-a-string-for-worker-thread
>If a thread modifies a shared string, a new copy of the string will automatically be created in the thread and this copy will be modified.
700名無しさん@おーぷん :2018/05/17(木)14:17:52 ID:???
Incは EnterCriticalSection が必要だけど、
Boolean 値の取得と設定には不要ってあるな。

[3/2 SOLVED] Pausing a loop in a thread ?
http://forum.lazarus.freepascal.org/index.php/topic,18921.msg107168.html#msg107168
No, setting/getting boolean values are Atomic,
a critical section is not required here.
If on the other hand you incremented an integer,
this is is none Atomic and Critical sections would be required,
701名無しさん@おーぷん :2018/05/17(木)14:52:07 ID:???
だから Terminated に排他処理が不要なのか

[fpc] Contents of /trunk/rtl/objpas/classes/classesh.inc
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/objpas/classes/classesh.inc?view=markup#l1682
> property Terminated: Boolean read FTerminated;
702名無しさん@おーぷん :2018/05/17(木)15:00:12 ID:???
言語によるみたいだ
ってことは、 FPC は Boolean 型について、特別な処理をしてくれること?

java - クラス AtomicBooleanについて。 - スタック・オーバーフロー
https://ja.stackoverflow.com/questions/35667/%E3%82%AF%E3%83%A9%E3%82%B9-atomicboolean%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

Boolean変数をスレッドセーフに設定する方法について
https://social.msdn.microsoft.com/Forums/ja-JP/3f3fdf3e-e943-48c1-883e-efb5950a2388/boolean?forum=csharpgeneralja
703名無しさん@おーぷん :2018/05/17(木)15:07:21 ID:???
特別なことは何もしていない

[fpc] Contents of /trunk/rtl/unix/tthread.inc
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/unix/tthread.inc?view=markup#l252
procedure TThread.Terminate;
begin
FTerminated := True;
end;
704名無しさん@おーぷん :2018/05/17(木)15:38:37 ID:???
Delphiでは他のスレッドから Terminate を呼び出せる
中身がどうなってるかは不明

他のスレッドによる終了の確認 - RAD Studio
http://docwiki.embarcadero.com/RADStudio/Tokyo/ja/%E4%BB%96%E3%81%AE%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E3%81%AB%E3%82%88%E3%82%8B%E7%B5%82%E4%BA%86%E3%81%AE%E7%A2%BA%E8%AA%8D
>他のスレッドからスレッドを終了させるには、Terminate メソッドを呼び出します。
705名無しさん@おーぷん :2018/05/17(木)15:48:03 ID:???
JavaとC#はネイティブコンパイラじゃないから参考にならないのかも
706名無しさん@おーぷん :2018/05/17(木)16:23:56 ID:???
Tips IA32(x86)命令一覧 Lから始まる命令 LOCK命令
http://softwaretechnique.jp/OS_Development/Tips/IA32_Instructions/LOCK.html
マルチプロセッサ環境では、LOCK#信号がアクティブである間
プロセッサが任意の共有メモリを独占的に使用できるように保証します
707名無しさん@おーぷん :2018/05/17(木)17:43:33 ID:???
Boolean型は複雑な処理ができないから、
Atomic なのかもしれない。
708名無しさん@おーぷん :2018/05/18(金)20:19:08 ID:???
Free Pascal - Online documentation
https://www.freepascal.org/docs.var
https://www.freepascal.org/docs/ClassChart3.pdf
709名無しさん@おーぷん :2018/05/19(土)12:03:36 ID:???
>>631
D&Dで開かないときは、 メニューバーにD&Dすれば開く
 InvalidateFileStateCache でキャッシュを無効化しないといけない

[lazarus] Contents of /trunk/ide/mainbar.pas
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/ide/mainbar.pas?root=lazarus&view=markup#l397

procedure TMainIDEBar.MainIDEBarDropFiles(Sender: TObject;
 const FileNames: array of String);
begin
 // the Drop event comes before the Application activate event
 // => invalidate file state
 InvalidateFileStateCache;
 LazarusIDE.DoDropFiles(Sender,FileNames);
end;
710名無しさん@おーぷん :2018/05/19(土)12:05:42 ID:???
んで、 ここの先頭に  InvalidateFileStateCache を入れれば
エディタ上への D&D も使える。

for i := 0 to High(FileNames) do
InvalidateFileStateCache(FileNames[i]);
の方が高率は良いかもしれない。

[lazarus] Contents of /trunk/ide/sourceeditor.pp
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/ide/sourceeditor.pp?root=lazarus&view=markup#l7915

procedure TSourceNotebook.SourceNotebookDropFiles(Sender: TObject;
 const FileNames: array of String);
begin
 FManager.ActiveSourceWindow := Self;
 LazarusIDE.DoDropFiles(Sender,Filenames,WindowID);
end;
711名無しさん@おーぷん :2018/05/19(土)12:11:35 ID:???
ソースエディタの上でマウスカーソルを動かすたびに、
アクティブなタブのファイル名.lfm/.dfm ファイルが存在するか探している。
(存在しない場合)
712名無しさん@おーぷん :2018/05/19(土)12:42:40 ID:???
フォーラムじゃ問題視していない人もいるけど、
これが出るのは空のファイルに限らないから、
新しくファイルを作成するか尋ねられた時に、「はい」を選んで保存すると、
そのファイルが消えてしまうから
713名無しさん@おーぷん :2018/05/19(土)12:45:12 ID:???
実行時パッケージでも対処可能

エディタのフォーム作成時に
>>710 の OnDropFiles イベントを置き換えればいい

エディタフォーム作成時はこれでわかる
SourceEditorManagerIntf.RegisterChangeEvent(semWindowCreate, @SourceWindowCreated);
714名無しさん@おーぷん :2018/05/19(土)13:48:06 ID:???
検索をもっと速くする方法

procedure TSearchProgressForm.OnAddMatch( で毎回
UpdateMatche を呼び出して これまでに一致した数を更新してるから、
たくさん一致すると遅くなる。

なので、
procedure TSearchProgressForm.UpdateProgress(FileName: string);
で更新すれば速くなる。

[lazarus] Contents of /trunk/ide/searchfrm.pas
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/ide/searchfrm.pas?root=lazarus&view=markup#l701

[lazarus] Contents of /trunk/ide/searchfrm.pas
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/ide/searchfrm.pas?root=lazarus&view=markup#l931
715名無しさん@おーぷん :2018/05/20(日)04:38:24 ID:???
コンパイル時のマクロがいっぱい増えてるけど、
パスは無いんか?

[fpc] Contents of /trunk/compiler/scanner.pas
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/compiler/scanner.pas?revision=38329&view=markup&sortby=file#l2435
716名無しさん@おーぷん :2018/05/21(月)18:36:47 ID:???
動的配列が色々サポート

Free Pascal - General - Feature announcement: Dynamic array extensions
http://free-pascal-general.1045716.n5.nabble.com/Feature-announcement-Dynamic-array-extensions-td5731410.html

Free Pascal - General - Dynamic Array, operator +
http://free-pascal-general.1045716.n5.nabble.com/Dynamic-Array-operator-td5731426.html
717名無しさん@おーぷん :2018/05/22(火)05:32:27 ID:???
ソースはこの辺

[fpc] Log of /trunk/compiler/ngtcon.pas
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/compiler/ngtcon.pas?sortby=file&view=log

[fpc] Revision 39041
https://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&sortby=file&revision=39041

https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/compiler/ngtcon.pas?revision=39041&view=co&pathrev=39041
718名無しさん@おーぷん :2018/05/23(水)19:45:29 ID:???
国別のダウンロード数
Windowsではロシア、ドイツ、ウクライナがトップ3
Linuxはブラジルがトップ

Lazarus - Browse Files at SourceForge.net
https://sourceforge.net/projects/lazarus/files/

Download Statistics: Lazarus Windows 32 bits
https://sourceforge.net/projects/lazarus/files/Lazarus%20Windows%2032%20bits/stats/map

Download Statistics: Lazarus Windows 64 bits
https://sourceforge.net/projects/lazarus/files/Lazarus%20Windows%2064%20bits/stats/map

Download Statistics: Lazarus Linux amd64 DEB
https://sourceforge.net/projects/lazarus/files/Lazarus%20Linux%20amd64%20DEB/stats/map
719名無しさん@おーぷん :2018/05/23(水)19:49:34 ID:???
Download Statistics: All Files
https://sourceforge.net/projects/lazarus/files/stats/map

SourceForge Support / Documentation / Download Stats API
https://sourceforge.net/p/forge/documentation/Download%20Stats%20API/
720名無しさん@おーぷん :2018/05/23(水)20:00:23 ID:???
2012年の国別ダウンロード数

https://sourceforge.net/projects/lazarus/files/stats/json?start_date=2017-01-01&end_date=2017-12-31&os_by_country=false
721名無しさん@おーぷん :2018/05/24(木)20:07:44 ID:???
Windowsでしか動かないけど

1. China 5,572
2. United States 5,012
3. Russia 4,336
4. Germany 3,351
5. Japan 3,243
6. India 2,888
7. Brazil 2,534
8. Mexico 2,493
9. Italy 1,752
10. Indonesia 1,666

Download Statistics: All Files
https://sourceforge.net/projects/sharpdevelop/files/stats/map

SharpDevelop - Wikipedia
https://ja.wikipedia.org/wiki/SharpDevelop
722名無しさん@おーぷん :2018/05/25(金)15:40:47 ID:???
>>277
pchararr32 に変更した時のスレがあった

0015845: XQueryKeymap function declaration (in xlib.pp) seems to be wrong - Free Pascal/Lazarus Bug Tracker
https://bugs.freepascal.org/view.php?id=15845

[fpc] Contents of /trunk/packages/x11/src/xlib.pp
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/packages/x11/src/xlib.pp?view=markup#l1604

[fpc] Contents of /trunk/packages/x11/src/xlib.pp
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/packages/x11/src/xlib.pp?view=markup#l1285

これでポインタになるのか?
type
chararr32 = array[0..31] of char;
pchararr32 = chararr32;
723名無しさん@おーぷん :2018/05/25(金)16:56:23 ID:???
FPCの方の文書は見つけられなかった

32バイトの静的配列はポインタで渡される
cdecl は関係ない

プログラムの制御(Delphi) - RAD Studio
http://docwiki.embarcadero.com/RADStudio/Berlin/ja/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AE%E5%88%B6%E5%BE%A1
>1 バイト、2 バイト、または 4 バイトの集合、レコード、静的配列は、
>8 ビット値、16 ビット値、32 ビット値として渡されます。
>これより大きい集合、レコード、静的配列の場合は、値への 32 ビット ポインタとして渡されます。
724名無しさん@おーぷん :2018/05/26(土)17:12:27 ID:???
pchararr32 = ^chararr32;
にすると呼び出し元のコードをポインタにしないといけない。

それが嫌なら
function XQueryKeymap(para1:PDisplay; para2:pchararr32):cint;cdecl;external libX11;

function XQueryKeymap(para1:PDisplay; var para2:chararr32):cint;cdecl;external libX11;
にすべき。
725名無しさん@おーぷん :2018/05/26(土)17:13:30 ID:???
もしかして、
pchararr32 = ^chararr32;
にしたつもりだったとか?

>Better always use pointer
って言ってるし

[fpc] Diff of /branches/fixes_2_4/packages/x11/src/xlib.pp
https://svn.freepascal.org/cgi-bin/viewvc.cgi/branches/fixes_2_4/packages/x11/src/xlib.pp?r1=13515&r2=16401&pathrev=16401
726名無しさん@おーぷん :2018/05/28(月)19:03:36 ID:???
\lazarus\ide\以下のユニットにアクセスするために、
自作unitをそこへ置いて、 他のideのunitのusesに追加したら、
普通にコンパイル・リンクされましたわ。
lazarus.iniのプロジェクトインスペクタに追加してもダメみたい。

unitの中身をインクルード指令 {$I フルパスファイル名} のみにして、
他に飛ばせるし、 いろいろできそうだ。
727名無しさん@おーぷん :2018/05/28(月)20:12:27 ID:???
あ、自作パッケージの出力先を ide の ppuファイルの出力先と同じにして、
Other unit files と インクルードファイル のパスを追加したら、
自作パッケージから ide 以下のunitにアクセスできましたわ。
728名無しさん@おーぷん :2018/05/28(月)20:23:05 ID:???
他の場所に出力すると、
ide のユニットを使っているユニットで、checksum が違うと出て再コンパイルして、
そのファイルが見つからないって出る。
729名無しさん@おーぷん :2018/05/28(月)20:32:42 ID:???
>>727 はしかも、 ide内部のユニットから
自作パッケージ内のユニットを使用可能にする。
730名無しさん@おーぷん :2018/05/28(月)20:34:42 ID:???
もともと ide内部から、インストールされているパッケージのユニットにはアクセス可能なのか
731名無しさん@おーぷん :2018/05/30(水)03:08:03 ID:???
自作パッケージで
Application.OnException を設定して、
例外を MessagesView に表示したほうがいいと思う。
732名無しさん@おーぷん :2018/05/30(水)23:57:39 ID:???
Simulating the Windows API's FindWindow function with Kylix
http://edn.embarcadero.com/article/27395
733名無しさん@おーぷん :2018/05/31(木)04:19:30 ID:???
https://wandbox.org/nojs/fpc-3.0.2/permlink/428n9YwIXIC41qWv

uses Types, SysUtils;

var
T: QWOrd;
begin
T := GetTickCount64;
S l e ep(1);
WriteLn(GetTickCount64 - T);
end.

program output:

1
734名無しさん@おーぷん :2018/05/31(木)04:23:38 ID:???
Windowsでは 0 か 15 やった
timeBeginPeriod(1) してても。
735名無しさん@おーぷん :2018/05/31(木)06:02:08 ID:???
パッケージのコンパイルは並列に実行されて速いんだけど、
IDEのコンパイルは時間がかかる。

Speedup Lazarus's recompiling
http://forum.lazarus-ide.org/index.php/topic,41348.msg286876.html#msg286876

Lazarus Packages - Free Pascal wiki
http://wiki.freepascal.org/Lazarus_Packages#Parallel_Compilation
736名無しさん@おーぷん :2018/06/02(土)22:22:59 ID:???
RTLEventWaitFor(AEvent) で待機中のスレッドに対し、
別スレッドから RTLEventDestroy(AEvent) を実行すると、
どうなるかは未定義。

WaitForSingleObject question for Events
https://social.msdn.microsoft.com/Forums/en-US/37a0a4bf-6b0b-470f-9ce0-1c8f89fe6b55/waitforsingleobject-question-for-events?forum=vcgeneral
>The fine manual says: "If this handle is closed while the wait is still pending, the function's behavior is undefined." In other words, don't do that.
737名無しさん@おーぷん :2018/06/13(水)17:52:02 ID:???
[fpc] Contents of /trunk/rtl/inc/heap.inc
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/inc/heap.inc?view=markup#l1330

SysTryResizeMem が False を返した時は


[fpc] Contents of /trunk/rtl/inc/heap.inc
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/inc/heap.inc?view=markup#l1460

で再確保とコピーが発生する
738名無しさん@おーぷん :2018/06/13(水)17:55:33 ID:???
説明

[fpc] Contents of /trunk/rtl/inc/heap.inc
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/inc/heap.inc?view=markup#l113
739名無しさん@おーぷん :2018/06/13(水)18:09:06 ID:???
チャンクサイズの下位4bitがフラグに使われていて、
これをクリアしたり、取り出したりするコードが頻繁に出てくる。
740名無しさん@おーぷん :2018/06/13(水)18:12:37 ID:???

{ fix p to point to the heaprecord }
chunksize := pmemchunk_fixed(p-sizeof(tmemchunk_fixed_hdr))^.size;

32bitの場合、 4byte戻して、 pmemchunk_fixed でキャストする理由がわからない。

memchunk_fixed(p-sizeof(tmemchunk_fixed_hdr))^.next_fixed

memchunk_fixed(p-sizeof(tmemchunk_fixed_hdr))^.prev_fixed
は既にデータが始まってる場所だと思うのだが?
741名無しさん@おーぷん :2018/06/13(水)18:29:38 ID:???
ここも良くわからないな
1024+8 の heaprecord とは何だ?

blocksize = 16; { at least size of freerecord }
blockshift = 4; { shr value for blocksize=2^blockshift}
maxblocksize = 512+blocksize; { 1024+8 needed for heaprecord }
742名無しさん@おーぷん :2018/06/13(水)18:45:42 ID:???
fixedsize は 大きく確保したメモリを
同じサイズで小分けして使うタイプのメモリ
743名無しさん@おーぷん :2018/06/13(水)19:19:46 ID:???
要求サイズが524バイト以下の時に fixedchunk になる

525バイト以上なら サイズいろいろchunk になる

サイズいろいろchunk が ReallocMem(P, 263) 以下だと、
ポインタが変わってコピーが発生する
744名無しさん@おーぷん :2018/06/14(木)01:16:11 ID:???
inline関数内が空だと、何も挿入されないんだね
745名無しさん@おーぷん :2018/06/14(木)01:51:09 ID:???
{$I %FILE%}と{$I %LINE%} を渡せば Assertもどきを作れる
746名無しさん@おーぷん :2018/06/14(木)02:16:27 ID:???
ReallocMem でコピーが発生するのは、ポインタが変わった時だけみたいだが

だから、 SetLength で一つずつ増やしていっても、毎回コピーが発生するとは
限らないはず。
747名無しさん@おーぷん :2018/06/15(金)04:21:54 ID:???
出力がちょっと安定しないが、 262127+1 の方が 262128+1 より遅いんよ

https://wandbox.org/nojs/fpc-3.0.2/permlink/TCWYnuz5PaJGV4em

uses
 Types, SysUtils;

function Test(Len: Integer): Int64;
var
 A: TStringDynArray;
 I: Integer;
 T: Int64;
begin
 Result := 0;
 for I := 1 to 1000 do
 begin
  A := nil;
  SetLength(A, Len);

  T := GetTickCount64;
  SetLength(A, Len + 1);
  Inc(Result, GetTickCount64 - T);
 end;
end;

begin
 WriteLn(Test(65519));
 WriteLn(Test(65520));
 WriteLn(Test(262127));
 WriteLn(Test(262128));
end.

1
0
4
2
748名無しさん@おーぷん :2018/06/15(金)04:24:30 ID:???
自前のPCだと100回に減らしてこう

2
0
268
0
749名無しさん@おーぷん :2018/06/15(金)04:26:35 ID:???
WandBoxのサーバがほとんど1ms以内に終わらせているかもしれんね
さすがに600倍の性能差のPCは無いやろ
750名無しさん@おーぷん :2018/06/15(金)04:32:17 ID:???
1ms未満だと、1000回実行する意味なかったわ
偶然またぐかもしれないってだけで。

自宅PCの場合、2〜3ms掛かってるってことだ
751名無しさん@おーぷん :2018/07/02(月)06:47:01 ID:???
クラス構造表示
あらかじめ作ったini形式のデータファイル(classtree.dat)から TreeNodes を構築してます。
classtreedat.lpr は classtree.dat を作るプログラム。

classtree.zip (classtree.zip) ダウンロード | おーぷん2ちゃんねるろだ | uploader.jp
https://ux.getuploader.com/open2ch1/download/820

MD5 76825c53e64635ad5fa169453cf6b8e3
SHA1 10c674518615bc07f2fd11487f78f5513b965cf2


752名無しさん@おーぷん :2018/07/02(月)06:52:26 ID:???
classtree.zip が 167.9 KB と大きいのは、
そのデータファイルを含んでいるから。
2.9MBあります。
753名無しさん@おーぷん :2018/07/02(月)06:52:33 ID:???
>>727 の設定例が
classtree.zip に 727.txt として入ってます。

ここに書き込んだらアク禁食らった。
754名無しさん@おーぷん :2018/07/02(月)07:30:20 ID:???
classtree.exe を外部ツールに登録して、
$CurToken() をパラメータとして渡せば、
完全一致するクラス名があればそれを表示、
なければその文字列を含むクラスを表示してくれる。
755名無しさん@おーぷん :2018/07/03(火)14:50:19 ID:???
project.pp
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/ide/project.pp?root=lazarus&view=co&content-type=text%2Fplain

DefaultSyntaxHighlighter/Value
を読み書きするところはコメントアウトした方がいいかもしれん
2箇所ある
756名無しさん@おーぷん :2018/07/05(木)16:18:34 ID:???
>>751 は Linux だと、
アプリを終了すると、クリップボードにコピーしたものが消えますね
757名無しさん@おーぷん :2018/07/06(金)06:28:03 ID:???
既に起動している Lazarus にファイル名を渡す仕組み
TTimer 使って、 50ms に一回 temp フォルダに通信用のファイルがあるかチェックして、
あるならそれを読み込んで開いている

[lazarus] Log of /trunk/ide/ideinstances.pas
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/ide/ideinstances.pas?root=lazarus&sortby=file&view=log

[lazarus] Log of /trunk/ide/lazadvancedipc.pp
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/ide/lazadvancedipc.pp?root=lazarus&sortby=file&view=log
758名無しさん@おーぷん :2018/07/11(水)17:56:47 ID:???
Mac は View や Help ってメニューがあると、
勝手に項目を追加するらしい

Problem occuring in Cocoa menus
http://forum.lazarus.freepascal.org/index.php?topic=41656
759名無しさん@おーぷん :2018/09/11(火)08:56:39 ID:???
[lazarus] Contents of /trunk/ide/main.pp
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/ide/main.pp?view=markup&revision=58903&root=lazarus&sortby=file#l9515
procedure TMainIDE.CodeBufferDecodeLoaded(Code: TCodeBuffer;
...
DiskEncoding:=InputHistories.FileEncodings[Filename];

ここで inputhistory.xml から文字コードを取得しているんだけど、
IDE以外で文字コードを変更した場合、 inputhistory.xml に記録されている文字コードと
合わなくなるので、文字化けが起きる。
タイムスタンプの比較はやっていない。

[lazarus] Log of /trunk/ide/inputhistory.pas
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/ide/inputhistory.pas?root=lazarus&sortby=file&view=log
760名無しさん@おーぷん :2018/09/12(水)21:53:26 ID:???
BOM無しUTF8の欠点だな
BOM無しUTF8は最悪の場合、最後の文字まで調べないと
文字コードを判別できない。

BOMを付ければすぐに判別可能だけど、
そうすると、UTF16でいいじゃんってことになる。
761名無しさん@おーぷん :2018/09/19(水)16:45:13 ID:???
>>727
このタイプのパッケージを複数作ると、
Note: Duplicate unit "... って出る。
Clean and Build した場合は出ないけど。

IDE のユニットが パッケージ側に追加されてるのかな。
762名無しさん@おーぷん :2018/09/21(金)01:21:00 ID:???
パッケージ側にIDEのユニットが移動するっぽいな

そのパッケージを「要求されたパッケージ」に追加すると、
なんと、 IDE以下のユニットが使えるようになる。
このとき、ユニットパスや出力先をIDEと同じにする必要はなくなる。

新着レスの表示 | ここまで読んだ

名前: mail:





Lazarus と Free Pascal
CRITEO