- -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 その他の情報
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:???
メニューを持ったフォームがアクティブでないと出なかった

新着レスの表示 | ここまで読んだ

名前: mail:





Lazarus と Free Pascal
CRITEO