Difference between revisions of "IDE tricks/de"

From Lazarus wiki
Jump to navigationJump to search
m
m (Fixed syntax highlighting; deleted category included in page template)
 
(32 intermediate revisions by 8 users not shown)
Line 1: Line 1:
 
{{IDE tricks}}
 
{{IDE tricks}}
  
== Erzeugen einer neuen Datei mit 'Datei Öffnen' ==
+
= Erzeugen einer neuen Datei mit 'Datei Öffnen' =
  
 
Sie können eine neue Datei erzeugen und speichern, oder sie können eine neue Datei erzeugen mit Dateiname und Dateityp in einem Schritt:
 
Sie können eine neue Datei erzeugen und speichern, oder sie können eine neue Datei erzeugen mit Dateiname und Dateityp in einem Schritt:
Gehen sie zu Datei -> Öffnen (Ctrl+o) und wählen eine nicht existierende Datei. Zum Beispiel: unit1.pas. Die IDE wird sie fragen, ob die Datei erzeugt werden soll.
+
Gehen sie zu Datei -> Öffnen {{keypress|Ctrl|o}} und wählen eine nicht existierende Datei. Zum Beispiel: unit1.pas. Die IDE wird sie fragen, ob die Datei erzeugt werden soll.
  
== IDE Makros ==
+
= Den Befehl 'Neue Unit / Neue Form' anpassen =
  
[[IDE Macros in paths and filenames/de|IDE Macros in paths and filenames]]
+
Seit Version 0.9.27 können Sie auf den Knopf 'Neue Unit' (Neue Form) rechts klicken und einstellen, welcher Dateityp erzeugt werden soll.
 +
Sie können weitere Dateitypen über das '''IDEIntf''' oder das '''project templates package''' registrieren.
  
== Erhalten der von der IDE erzeugten Compiler-Kommandozeilenparameter ==
+
= IDE Makros =
  
Sie können die Parameter kopieren von Projekt -> Compilereinstellungen -> Einstellungen anzeigen. Hier sind die Pfade relativ zum Projektverzeichnis. Daher können sie sie in den meisten Fällen ohne Anpassung kopieren.
+
siehe [[IDE Macros in paths and filenames/de|IDE Makros in Pfaden und Dateinamen]]
  
Die Parameter sind auch in der *.compiled Datei gespeichert. Zum Beispiel wenn ihr Projekt test1.lpi heißt, dann wird eine test1.compiled erzeugt. Es ist eine einfache XML Textdatei, so daß sie einfach die Einstellungen kopieren können und die Pfade anpassen, um auf einem anderen Computer zu kompilieren. Die Datei wird im selben Verzeichnis wie das executable abgelegt.
+
= IDE Direktiven =
  
Für Packages funktioniert es auf die selbe Weise.
+
siehe [[IDE directives]]
  
Auf diese Weise können sie ihren (hoffentlich fehlerfreien und funktionierenden) Code kompilieren, außerhalb der Lazarus IDE.
+
= Die von der IDE erzeugten Compiler-Kommandozeilenparameter erhalten =
  
== Schliessen aller Editordateien ausgenommen einer ==
+
Sie können die Parameter von "Projekt -> Compilereinstellungen -> Einstellungen anzeigen" kopieren. Alle Pfade sind relativ zum Projektverzeichnis. Daher können sie sie in den meisten Fällen ohne Anpassung kopieren.
  
Unter GTK (vefügbar für Linux, Mac OS X und Freebsd) haben die Quelltexteditorseiten einen Schliessen Button rechts von ihrem Seitennamen. Drücken sie die Ctrl Taste, während sie auf den Button klicken, werden alle Dateien geschlossen ausgenommen die angeklickte.
+
Die Parameter werden auch in der Datei "*.compiled" gespeichert. Heißt ihr Projekt zum Beispiel "test1.lpi", dann wird die Datei "test1.compiled" im selben Verzeichnis wie das executable erzeugt. Es ist eine einfache XML-Textdatei. Man kann deshalb einfach die Einstellungen kopieren und die Pfade anpassen, um das Projekt auch auf einem anderen Computer zu kompilieren.
  
== Komponentenpalette ==
+
Für Packages funktioniert es auf die gleiche Weise.
  
=== Finden einer Komponente in der Palette ===
+
Auf diese Weise können sie ihren (hoffentlich fehlerfreien und funktionierenden) Code auch außerhalb der Lazarus IDE kompilieren.
 +
 
 +
= Schließen aller Editorseiten (außer der aktuellen Seite) =
 +
 
 +
Unter GTK (verfügbar für Linux, Mac OS X und FreeBSD) haben die Quelltexteditorseiten einen Schließen-Button rechts von ihrem Seitennamen. Drücken sie die {{keypress|Ctrl}} Taste, während sie auf den Button klicken, werden alle Dateien geschlossen ausgenommen der angeklickten.
 +
 
 +
= Komponentenpalette =
 +
 
 +
== Finden einer Komponente in der Palette ==
  
 
Sie kennen den Komponentennamen, oder einen Teil davon, aber sie wissen nicht, auf welcher Seite sie ist? Dieses Werkzeug findet sie:
 
Sie kennen den Komponentennamen, oder einen Teil davon, aber sie wissen nicht, auf welcher Seite sie ist? Dieses Werkzeug findet sie:
Klicken sie rechts auf eine Komponente in der Palette um das Popup-Menü zu öffnen. Wählen sie 'Find component'. Geben sie den Teil des Namens ein, um die Liste zu filtern.
+
Klicken sie rechts auf eine Komponente in der Palette um das Popup-Menü zu öffnen. Wählen sie 'Komponente finden'. Geben sie den Teil des Namens ein, um die Liste zu filtern.
  
=== Öffnen des Packages einer Komponente in der Palette ===
+
== Öffnen des Packages einer Komponente in der Palette ==
  
 
Klicken sie rechts auf die Komponente um das Popup-Menü zu öffnen, dann wählen sie 'Open Package...'.
 
Klicken sie rechts auf die Komponente um das Popup-Menü zu öffnen, dann wählen sie 'Open Package...'.
  
=== Finden der source declaration einer Komponente in der Palette ===
+
== Finden der source declaration einer Komponente in der Palette ==
  
 
Klicken sie rechts auf die Komponente um das Popup-Menü zu öffnen, dann wählen sie 'Open Unit...'.
 
Klicken sie rechts auf die Komponente um das Popup-Menü zu öffnen, dann wählen sie 'Open Unit...'.
  
== Meine Anwendung friert meinen Linux Desktop ein während des Debuggens ==
+
= Meine Anwendung friert meinen Linux Desktop ein während des Debuggens =
  
X (ihr Desktop) kann einfrieren, wenn eine Anwendung, die grabbed the mouse, durch gdb (den Debugger) gestoppt wird.
+
X (Ihr Desktop) kann einfrieren, wenn eine Anwendung, die die Mausereignisse abfängt, durch gdb (den Debugger) gestoppt wird.
 +
 
 +
== Verwendung einer zweiten X Session ==
  
 
Sie können einen zweiten X starten durch:
 
Sie können einen zweiten X starten durch:
 
   X :1 &
 
   X :1 &
mit Ctrl-Alt-F7 wechseln sie zu to :0 und mit Ctrl-Alt-F8 wechseln sie zu :1
+
mit {{keypress|Ctrl|Alt|F7}} wechseln Sie zu to :0 und mit {{keypress|Ctrl|Alt|F8}} wechseln Sie zu :1
Danach können sie eine zweite Gnome Session starten durch:
+
Danach können Sie eine zweite Gnome Session starten durch:
 
   gnome-session --display=:1 &
 
   gnome-session --display=:1 &
 +
 +
== Verwendung von VNC ==
  
 
Sie können vncserver/client verwenden durch installing
 
Sie können vncserver/client verwenden durch installing
 
tightvncserver/realvncserver
 
tightvncserver/realvncserver
Starten sie den Server mit:
+
Starten Sie den Server mit:
 
   vncserver :1
 
   vncserver :1
  
 
AFAIK wird auch eine Session gestartet. Sie können zum vncserver verbinden mit vncviewer.
 
AFAIK wird auch eine Session gestartet. Sie können zum vncserver verbinden mit vncviewer.
  
In Lazarus, in den Startparametern für ihr Projekt, prüfen sie "use display" und geben ein  
+
== Debuggen der Anwendung auf dem zweiten Server ==
 +
 
 +
In Lazarus, in den Startparametern für ihr Projekt, prüfen Sie "use display" und geben ein  
 
   :1
 
   :1
  
Jetzt wird ihre Anwendung auf dem zweiten Server laufen. So kann während des Debuggens nur der zweite Server einfrieren (aber das wird sie nicht beeinflussen, seit sie auf dem ersten debuggen).
+
Jetzt wird Ihre Anwendung auf dem zweiten Server laufen. So kann während des Debuggens nur der zweite Server einfrieren (aber das wird Sie nicht beeinflussen, da Sie auf dem ersten debuggen).
 +
 
 +
= Schnelle Kompilierung der IDE =
 +
 
 +
Das Arbeiten an Lazarus selbst erfordert häufig ein Neuerstellen der IDE. Wenn Sie die folgenden Tricks anwenden, genug Arbeitsspeicher und eine aktuelle CPU haben, sollten Sie in der Lage sein, die IDE in einigen Sekunden zu rekompilieren.
 +
* Legen Sie die Lazarus Quellen auf einer schnellen Festplatte ab, nicht in einem langsamen Netzwerk-Dateisystem.
 +
* Installieren Sie nur die benötigten Packages.
 +
* Setzen Sie USESVN2REVISIONINC=0 um das Aktualisieren von revision.inc zu überspringen.
 +
* Kompilieren Sie nur Teile. Wenn die packager registration rekompiliert ist, dann sind auch alle installierten Packages rekompiliert. Wenn IDEIntf rekompiliert ist, dann sind alle installierten Entwicklungszeit-Packages rekompiliert.
 +
 
 +
= DebugLn der IDE oder einer LCL Anwendung =
 +
 
 +
Die IDE gibt viele hilfreiche Hinweise mittels debugln aus. Unter Windows können Sie diese erhalten, indem Sie Lazarus mit dem Kommandozeilenparameter ''--debug-log=filename.txt'' starten. Unter Linux/BSD/Mac OS X/Solaris: Starten Sie Lazarus einfach in einem Terminal.
 +
Dies ist ein normales LCL Feature.
 +
 
 +
= Finden der Quelldatei eines IDE Fensters =
 +
 
 +
* Öffnen Sie das IDE Fenster.
 +
* Drücken Sie {{keypress|Ctrl|Shift|F1}} um den Hilfeeditor zu öffnen.
 +
* Merken Sie sich den Fenster-Klassennamen. Schliessen Sie das Fenster.
 +
* Verwenden Sie [[IDE Window: Find in files/de|In Dateien suchen]] um die Quelldatei der Klasse zu finden.
 +
 
 +
= Objektinspektor: Ereignisse: Frames: Sprung zum Quelltext eines geerbten Ereignisses =
 +
 
 +
Der Objektinspektor zeigt die Ereignisse von geerbten Ereignissen an als ''ClassName.MethodName''. Ein Doppelklick erzeugt ein neues Ereignis. {{keypress|Ctrl}} + Mausklick auf die Kombobox springt direkt zum Rumpf der geerbten Methode, ohne eine neue Methode zu erzeugen.
 +
 
 +
= Ereignisse (Method properties) im Objektinspektor =
 +
 
 +
Ereignisse (Method properties) sind spezielle Eigenschaften, weil sie als Wert einen Zeiger auf eine Code-Adresse benötigen, der zur Entwurfszeit nicht existiert. Deshalb verwendet Lazarus den selben Trick wie die Delphi IDE: Jeder Methodenwert kann auf '''TMethod''' gecasted werden, die "Data" (den Objekt-oder Klassenzeiger) und "Code" (den Adresszeiger) enthält. Zur Laufzeit sind beide gesetzt. Aber zur Entwurfzeit setzt die IDE Data auf einen besonderen Schlüsselwert für ihre interne Nachschlagtabelle und setzt Code auf nil. Das bedeutet:
 +
 
 +
*Zur Laufzeit (wenn das Programm die .lfm-Datei lädt) wird die tatsächliche Methode (Data+Code) verwendet.
 +
*Zur Entwurfszeit kann ein Methodenwert entweder eine wirkliche Methode (Data<>nil und Code<>nil) oder eine Ersatzmethode (Data<>nil,Code=nil) sein.
 +
*der Compiler hat zur Kompatibilität mit Delphi einige Besonderheiten zum Vergleich von Methodenwerten.
 +
 
 +
Verwenden Sie nicht:
 +
<syntaxhighlight lang=pascal>if OnMyEvent <> nil then OnMyEvent(...); // falsch, weil es auch Data prüft</syntaxhighlight>
 +
 
 +
Weil dies sowohl Data als auch Code prüft, wird die Ersatzmethode ausgeführt und das ergibt einen Sprung zu nil. Dadurch wird nur eine Exception ausgelöst, also wenig Schaden angerichte, aber die IDE zeigt dem Benutzer eine Fehlermeldung. Nehmen Sie stattdessen die Funktion 'Assigned':
 +
<syntaxhighlight lang=pascal>if Assigned(OnMyEvent) then OnMyEvent(...); // korrekt, überprüft nur Code</syntaxhighlight>
 +
 
 +
Verwenden Sie nicht:
 +
<syntaxhighlight lang=pascal>if OnMyEvent = NewValue then exit; // wrong, because it compares only Code</syntaxhighlight>
 +
 
 +
Weil dies nur den Code vergleicht. Nehmen Sie stattdessen:
 +
<syntaxhighlight lang=pascal>if CompareMem(@FOnMyEvent, @NewValue, SizeOf(TMethod)) then exit; // correct, checking both Data and Code</syntaxhighlight>

Latest revision as of 08:56, 17 February 2020

Deutsch (de) English (en) français (fr) magyar (hu) 日本語 (ja) 한국어 (ko) русский (ru) slovenčina (sk)

Erzeugen einer neuen Datei mit 'Datei Öffnen'

Sie können eine neue Datei erzeugen und speichern, oder sie können eine neue Datei erzeugen mit Dateiname und Dateityp in einem Schritt: Gehen sie zu Datei -> Öffnen Ctrl+o und wählen eine nicht existierende Datei. Zum Beispiel: unit1.pas. Die IDE wird sie fragen, ob die Datei erzeugt werden soll.

Den Befehl 'Neue Unit / Neue Form' anpassen

Seit Version 0.9.27 können Sie auf den Knopf 'Neue Unit' (Neue Form) rechts klicken und einstellen, welcher Dateityp erzeugt werden soll. Sie können weitere Dateitypen über das IDEIntf oder das project templates package registrieren.

IDE Makros

siehe IDE Makros in Pfaden und Dateinamen

IDE Direktiven

siehe IDE directives

Die von der IDE erzeugten Compiler-Kommandozeilenparameter erhalten

Sie können die Parameter von "Projekt -> Compilereinstellungen -> Einstellungen anzeigen" kopieren. Alle Pfade sind relativ zum Projektverzeichnis. Daher können sie sie in den meisten Fällen ohne Anpassung kopieren.

Die Parameter werden auch in der Datei "*.compiled" gespeichert. Heißt ihr Projekt zum Beispiel "test1.lpi", dann wird die Datei "test1.compiled" im selben Verzeichnis wie das executable erzeugt. Es ist eine einfache XML-Textdatei. Man kann deshalb einfach die Einstellungen kopieren und die Pfade anpassen, um das Projekt auch auf einem anderen Computer zu kompilieren.

Für Packages funktioniert es auf die gleiche Weise.

Auf diese Weise können sie ihren (hoffentlich fehlerfreien und funktionierenden) Code auch außerhalb der Lazarus IDE kompilieren.

Schließen aller Editorseiten (außer der aktuellen Seite)

Unter GTK (verfügbar für Linux, Mac OS X und FreeBSD) haben die Quelltexteditorseiten einen Schließen-Button rechts von ihrem Seitennamen. Drücken sie die Ctrl Taste, während sie auf den Button klicken, werden alle Dateien geschlossen ausgenommen der angeklickten.

Komponentenpalette

Finden einer Komponente in der Palette

Sie kennen den Komponentennamen, oder einen Teil davon, aber sie wissen nicht, auf welcher Seite sie ist? Dieses Werkzeug findet sie: Klicken sie rechts auf eine Komponente in der Palette um das Popup-Menü zu öffnen. Wählen sie 'Komponente finden'. Geben sie den Teil des Namens ein, um die Liste zu filtern.

Öffnen des Packages einer Komponente in der Palette

Klicken sie rechts auf die Komponente um das Popup-Menü zu öffnen, dann wählen sie 'Open Package...'.

Finden der source declaration einer Komponente in der Palette

Klicken sie rechts auf die Komponente um das Popup-Menü zu öffnen, dann wählen sie 'Open Unit...'.

Meine Anwendung friert meinen Linux Desktop ein während des Debuggens

X (Ihr Desktop) kann einfrieren, wenn eine Anwendung, die die Mausereignisse abfängt, durch gdb (den Debugger) gestoppt wird.

Verwendung einer zweiten X Session

Sie können einen zweiten X starten durch:

  X :1 &

mit Ctrl+Alt+F7 wechseln Sie zu to :0 und mit Ctrl+Alt+F8 wechseln Sie zu :1 Danach können Sie eine zweite Gnome Session starten durch:

  gnome-session --display=:1 &

Verwendung von VNC

Sie können vncserver/client verwenden durch installing tightvncserver/realvncserver Starten Sie den Server mit:

  vncserver :1

AFAIK wird auch eine Session gestartet. Sie können zum vncserver verbinden mit vncviewer.

Debuggen der Anwendung auf dem zweiten Server

In Lazarus, in den Startparametern für ihr Projekt, prüfen Sie "use display" und geben ein

 :1

Jetzt wird Ihre Anwendung auf dem zweiten Server laufen. So kann während des Debuggens nur der zweite Server einfrieren (aber das wird Sie nicht beeinflussen, da Sie auf dem ersten debuggen).

Schnelle Kompilierung der IDE

Das Arbeiten an Lazarus selbst erfordert häufig ein Neuerstellen der IDE. Wenn Sie die folgenden Tricks anwenden, genug Arbeitsspeicher und eine aktuelle CPU haben, sollten Sie in der Lage sein, die IDE in einigen Sekunden zu rekompilieren.

  • Legen Sie die Lazarus Quellen auf einer schnellen Festplatte ab, nicht in einem langsamen Netzwerk-Dateisystem.
  • Installieren Sie nur die benötigten Packages.
  • Setzen Sie USESVN2REVISIONINC=0 um das Aktualisieren von revision.inc zu überspringen.
  • Kompilieren Sie nur Teile. Wenn die packager registration rekompiliert ist, dann sind auch alle installierten Packages rekompiliert. Wenn IDEIntf rekompiliert ist, dann sind alle installierten Entwicklungszeit-Packages rekompiliert.

DebugLn der IDE oder einer LCL Anwendung

Die IDE gibt viele hilfreiche Hinweise mittels debugln aus. Unter Windows können Sie diese erhalten, indem Sie Lazarus mit dem Kommandozeilenparameter --debug-log=filename.txt starten. Unter Linux/BSD/Mac OS X/Solaris: Starten Sie Lazarus einfach in einem Terminal. Dies ist ein normales LCL Feature.

Finden der Quelldatei eines IDE Fensters

  • Öffnen Sie das IDE Fenster.
  • Drücken Sie Ctrl+ Shift+F1 um den Hilfeeditor zu öffnen.
  • Merken Sie sich den Fenster-Klassennamen. Schliessen Sie das Fenster.
  • Verwenden Sie In Dateien suchen um die Quelldatei der Klasse zu finden.

Objektinspektor: Ereignisse: Frames: Sprung zum Quelltext eines geerbten Ereignisses

Der Objektinspektor zeigt die Ereignisse von geerbten Ereignissen an als ClassName.MethodName. Ein Doppelklick erzeugt ein neues Ereignis. Ctrl + Mausklick auf die Kombobox springt direkt zum Rumpf der geerbten Methode, ohne eine neue Methode zu erzeugen.

Ereignisse (Method properties) im Objektinspektor

Ereignisse (Method properties) sind spezielle Eigenschaften, weil sie als Wert einen Zeiger auf eine Code-Adresse benötigen, der zur Entwurfszeit nicht existiert. Deshalb verwendet Lazarus den selben Trick wie die Delphi IDE: Jeder Methodenwert kann auf TMethod gecasted werden, die "Data" (den Objekt-oder Klassenzeiger) und "Code" (den Adresszeiger) enthält. Zur Laufzeit sind beide gesetzt. Aber zur Entwurfzeit setzt die IDE Data auf einen besonderen Schlüsselwert für ihre interne Nachschlagtabelle und setzt Code auf nil. Das bedeutet:

  • Zur Laufzeit (wenn das Programm die .lfm-Datei lädt) wird die tatsächliche Methode (Data+Code) verwendet.
  • Zur Entwurfszeit kann ein Methodenwert entweder eine wirkliche Methode (Data<>nil und Code<>nil) oder eine Ersatzmethode (Data<>nil,Code=nil) sein.
  • der Compiler hat zur Kompatibilität mit Delphi einige Besonderheiten zum Vergleich von Methodenwerten.

Verwenden Sie nicht:

if OnMyEvent <> nil then OnMyEvent(...); // falsch, weil es auch Data prüft

Weil dies sowohl Data als auch Code prüft, wird die Ersatzmethode ausgeführt und das ergibt einen Sprung zu nil. Dadurch wird nur eine Exception ausgelöst, also wenig Schaden angerichte, aber die IDE zeigt dem Benutzer eine Fehlermeldung. Nehmen Sie stattdessen die Funktion 'Assigned':

if Assigned(OnMyEvent) then OnMyEvent(...); // korrekt, überprüft nur Code

Verwenden Sie nicht:

if OnMyEvent = NewValue then exit; // wrong, because it compares only Code

Weil dies nur den Code vergleicht. Nehmen Sie stattdessen:

if CompareMem(@FOnMyEvent, @NewValue, SizeOf(TMethod)) then exit; // correct, checking both Data and Code