Sign in Join
Wiki copytemporary

IDE tricks/ru: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11# Создание нового файла с помощью \[функции\] "Открыть файл"
22
3-Вы можете создать новый файл и сохранить его, или вы можете создать новый файл с именем файла и типом файла за один шаг: Просто откройте файл (<span class="kbd">ctrl</span>+<span class="kbd">O</span>) и выберите несуществующий файл. Например: unit1.pas. IDE спросит вас, нужно ли его создавать.
3+Вы можете создать новый файл и сохранить его, или вы можете создать новый файл с именем файла и типом файла за один шаг: Просто откройте файл (`ctrl`+`O`) и выберите несуществующий файл. Например: unit1.pas. IDE спросит вас, нужно ли его создавать.
44
55# Настройка нового модуля / формы
66
77Начиная с версии 0.9.27 вы можете щелкнуть правой кнопкой мыши на кнопке быстрого запуска 'New unit' (New form) и установить тип файла, который должен быть создан. Вы можете зарегистрировать больше типов файлов через IDEIntf или пакет шаблонов проектов.
88
99# Макросы IDE
1010
1111[[IDE Macros in paths and filenames/ru|Макросы IDE в путях и именах файлов]]
1212
1313# Директивы IDE
1414
1515[[IDE directives]]
1616
1717# Получение параметров командной строки компилятора, созданных в среде IDE
1818
1919Вы можете скопировать параметры из Project -\> Compiler Options -\> Show Options. Здесь пути относятся к каталогу проекта. Таким образом, в большинстве случаев вы можете скопировать их без настройки.
2020
2121Параметры также сохраняются в файле *.compiled. Например, если ваш проект называется test1.lpi, то создается test1.compiled. Это простой текстовый XML-файл, поэтому вы можете просто скопировать параметры и настроить пути для компиляции на другом компьютере. Файл помещается в тот же каталог, где создается исполняемый файл.
2222
2323Это работает так же и для пакетов.
2424
2525Таким образом, вы можете скомпилировать свой (надеюсь, работающий и свободный от ошибок) код за пределами IDE lazarus.
2626
2727# Closing all editor files except one
2828
2929Under gtk (available for Linux, macOS and FreeBSD) the source editor pages have a close button right to their page name. Press the Ctrl key while clicking on the button, closes all files except the clicked one.
3030
3131# Component palette
3232
3333## Finding a component in the palette
3434
3535You know the component name, or part of it, but you don't know on which page it was? This tool finds it: Right click on any component in the palette to open the popup menu. Select 'View all' from the menu; this will pop open a dialog(also you can achieve it by pressing Ctrl+Alt+P). Enter the (partial) component name in the 'Find' box to filter the list.
3636
3737## Open the package of a component in the palette
3838
3939Right click on the component to open the popup menu, then choose open package.
4040
4141## Find the source declaration of a component in the palette
4242
4343Right click on the component to open the popup menu, then choose open unit.
4444
4545# My application freezes my linux desktop while debugging
4646
4747X (your desktop) can freeze, when an application that grabbed the mouse is stopped by gdb (the debugger).
4848
4949## Using a second X session
5050
5151You can start a second X by:
5252
5353`  X :1 &`
5454
5555with Ctrl-Alt-F7 you switch to :0 and with Ctrl-Alt-F8 you switch to :1 after that you can start a second gnome session by:
5656
5757`  gnome-session --display=:1 &`
5858
5959## Using VNC
6060
6161You can use vncserver/client by installing tightvncserver/realvncserver Start the server with:
6262
6363`  vncserver :1`
6464
6565AFAIK, a session is also started. You can connect to the vncserver with vncviewer.
6666
6767## Debug the application on the second server
6868
6969In Lazarus, in the run parameters for your project, check "use display" and enter
7070
7171` :1`
7272
7373Now your application will run on the second server, so when it is being debugged, only the second server will freeze (but that won't affect you since you are debugging on the first).
7474
7575# Compiling the IDE fast
7676
7777Working on Lazarus itself needs rebuilding the IDE many times. If you use the following tricks and have enough memory and a recent cpu, you should be able to recompile the IDE in a few seconds.
7878
7979- Put the Lazarus sources on a fast harddisk. Not on a slow network filesystem.
8080- Install only needed packages.
8181- Set USESVN2REVISIONINC=0 to skip the update of the revision.inc.
8282
8383# DebugLn of the IDE or a LCL application
8484
8585The IDE writes many useful hints via debugln. You can get these this way:
8686
8787- Windows: start Lazarus with the command line parameter *--debug-log=filename.txt*.
8888- Linux/BSD/macOS/Solaris: just start Lazarus in a terminal.
8989
9090This is a general LCL feature.
9191
9292# Finding the source file of an IDE window
9393
9494- Open the IDE window.
9595- Press Ctrl+Shift+F1 to open the help editor.
9696- Remember the window classname. Close the window.
9797- Use [[IDE Window: Find in files|Find In Files]] to find the source file of the class.
9898
9999# Opening a Terminal Windows from the IDE
100100
101101Its often handy to be able to open a terminal in your current project's working directory. Maybe to use a revision control system like git or svn or for a host of other possible reasons. Here is how to add a menu item to Lazarus's Tool's menu. Thanks to taazz and other contributors to <https://forum.lazarus.freepascal.org/index.php/topic,42151.msg294206.html#msg294206>
102102
103103- Click Tools, Configure External Tools
104104- Click 'Add' to add a new menu item (under Tools).
105105- Set Title to (eg) "Open a Terminal"
106106- Set Program File Name to the command on your system that opens a terminal, some suggestions below.
107107- Set Parameters to what ever your terminal expects on the command line to open a specific directory and the Lazarus var that points there, \$projPath().
108108
109109Those last two vary quite a lot between systems, if you don't know the first, try looking at a list of running programs, the word 'terminal' is likely to feature. For the second, once you know the terminal's name, look up its man page or google.
110110
111111Some examples include -
112112
113113| O.S. | Program File Name | Parameters |
114114|----|----|----|
115115| Ubuntu Mate | mate-terminal\|\|--tab --working-directory=\$projPath() | |
116116| xfce | exo-open\|\|--launch TerminalEmulator --working-directory \$ProjPath() | |
117117| KDE | konsole\|\|--working-dir \$projPath() | |
118118| Mac (see below) | /User/\$HOME/bin/ttab | cd \$projPath() |
119119| Windows | ? | ? |
120120
121121On the Mac, where everything is so much easier, all you have to do is -
122122
1231231. Install <https://www.npmjs.com/package/ttab>, its only 665 lines, use the path you installed it to instead of the example shown in the table above.
1241242. Run it so you can tick its security to access the Accessibility feature.
1251253. Then set the Lazarus Tools settings as described.
1261264. Then, from within Lazarus, Tools-\>Open Terminal, then similar to 3) tick to allow Lazarus to access the Accessibility thingo.
127127
128128# Object Inspector: Events: Frames: Jump to the source of an inherited event
129129
130130The Object Inspector shows the events of inherited events as *ClassName.MethodName*. Double clicking will create a new event. Ctrl+Mouse click on the combobox will jump directly to the inherited method body, without creating a new method.
131131
132132# Events (Method properties) in the Object Inspector
133133
134134Events (Method properties) are special properties, because they need as value a code address pointer, which does not exist at design time. That's why Lazarus uses the same trick as the Delphi IDE: Every method value can be type casted to **TMethod**, which contains *Data* (the object or class pointer) and the *Code* (the address pointer). At runtime both are set. But at designtime the IDE sets Data to a special key value for its internal lookup table and sets Code to nil. This means:
135135
136136- At runtime when the program loads the .lfm file the real method (Data+Code) is used
137137- At designtime a method value can either be a real method (Data\<\>nil and Code\<\>nil) or a fake method (Data\<\>nil,Code=nil)
138138- The compiler has for Delphi compatibility some specials about comparing method values.
139139- The = and the \<\> operator only checks the Code, not the Data.
140140
141141Do not use:
142142
143143``` pascal
144144if OnMyEvent = NewValue then exit; // wrong, because it compares only Code
145145```
146146
147147Because this only compares the Code. Use instead
148148
149149``` pascal
150150if CompareMem(@FOnMyEvent, @NewValue, SizeOf(TMethod)) then exit; // correct, checking both Data and Code
151151```
152152
153153Here is an example when the = operator fails:
154154
155155``` pascal
156156type
157157 TMyClass = class
158158 private
159159 FOnClick: TNotifyEvent;
160160 procedure SetOnClick(Value: TNotifyEvent);
161161 public
162162 procedure Click(Sender: TObject);
163163 property OnClick: TNotifyEvent read FOnClick write SetOnClick;
164164 end;
165165
166166procedure TMyClass.SetOnClick(Value: TNotifyEvent);
167167begin
168168 if Value = FOnClick then exit; // bug, checks only for Code, not for data
169169 FOnClick := Value;
170170end;
171171
172172var
173173 a, b: TMyClass;
174174begin
175175 a := TMyClass.Create;
176176 b := TMyClass.Create;
177177 a.OnClick := @a.Click;
178178 a.OnClick := @b.Click; // same code, but different data, a.OnClick still points to @a.Click;
179179end.
180180```
181181
182182---
183183*From the Free Pascal wiki, page "IDE tricks/ru", as it stood on 2019-12-22 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history