Autor Beitrag
hRb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 241
Erhaltene Danke: 12



BeitragVerfasst: Mo 25.05.20 20:10 
Es ist gute Sitte nach jedem Begin, Case, Try den Code 2 Zeichen einzurücken. Durch Nacharbeit oder Fehlerkorrektur kann diese Regel schon einmal verloren gehen.
Es ist 40 Jahre her, als ich auf einem Atari-Rechner ein Programm hatte, das Pascal-Code automatisch wieder "formatierte".
Frage: gibt es ein solches Programm noch heute?
hRb
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19062
Erhaltene Danke: 1701

W10 x64 (Chrome, Edge)
Delphi 10.4 Ent, Oxygene, C# (VS 2019), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 25.05.20 20:40 
user profile iconhRb hat folgendes geschrieben Zum zitierten Posting springen:
Frage: gibt es ein solches Programm noch heute?
Ja, Delphi. ;-)

Strg + D oder unter Ansicht --> Editor --> Quelltext formatieren

Und unter Projekt --> Projektquellen formatieren... kannst du gleich alle Dateien im Projekt formatieren.
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 241
Erhaltene Danke: 12



BeitragVerfasst: Mo 25.05.20 21:37 
Zitat:
Strg + D oder unter Ansicht --> Editor --> Quelltext formatieren
Und unter Projekt --> Projektquellen formatieren... kannst du gleich alle Dateien im Projekt formatieren.

Das wäre mir jetzt aber peinlich gewesen, wenn ich dieses Tool jahrelang übersehen hätte. Kann es sein, dass dieses Tool nur in Profiversionen gibt? Ich finde es jedenfalls nicht (siehe Image3). Nicht unter Strg+D, noch anderes unter Ansicht/Projekt (siehe Image3).

Vielleicht ist es zulässsig dieses Programm zu veröffentlichen (ähnlich BCompareLite.exe)? Oder: wie lautet der exakte Dateiname? Vielleicht finde ich das Programm ja in den Embarcadero-Ordnern und liegt nur nicht an der Oberfläche.
Einloggen, um Attachments anzusehen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19062
Erhaltene Danke: 1701

W10 x64 (Chrome, Edge)
Delphi 10.4 Ent, Oxygene, C# (VS 2019), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 25.05.20 23:21 
Ah, bei Delphi 10.1 lag der Befehl "Quelltext formatieren..." noch im Menü Bearbeiten.

Ich habe mich immer gefragt wann ich mal jemanden treffe, der ernsthaft die alte Komponentenpalette verwendet. Du bist der erste. ;-)
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 241
Erhaltene Danke: 12



BeitragVerfasst: Fr 05.02.21 14:28 
Hallo,
Ich greife nochmals eine Frage auf, die ich vergangenes Jahr gestellt habe, aber trotz Hinweis nie die Lösung fand. Jaenicke gab mir den Hinweis, wo ich die Funktion zum Formatieren von Pascal-Code-Text finden würde. Arbeite noch mit Delphi Berlin 10.1 (da unbegrenzt gültig).
Ich wurde dennoch nicht fündig. Nachstehend zeige ich, wo ich überall gesucht habe. Hilfreich ist, das beigefügte Bild anzusehen (Anhang).
Zitat:
Ah, bei Delphi 10.1 lag der Befehl "Quelltext formatieren..." noch im Menü Bearbeiten.

1. Unter dem Menü "Bearbeiten" finde ich u.a. den Button "Quelltext formatieren" nicht, jedoch "Ausrichten", hinter dem möglicherweise die gewünschte Funktion versteckt ist. Dieser Button ist jedoch deaktiviert (wie auch alle anderen Möglichkeiten, die ggf. in Frage kommen)

2. In der Hilfe finde ich den Hinweis, dass die Funktion zunächst aktiviert werden muss, wie folgt: gehe unter Tools > Optionen zum Knoten "Formatiere" und ....(dann folgt die genaue Anleitung)

Mein Problem und meine Frage: Bei mir gibt es den Knoten "Formatiere" überhaupt nicht. Kann demzufolge auch nichts aktivieren. Ist 10.1 eine "Magerversion"? Gibt es noch andere Parameter die zuvor zu aktivieren sind? (Wäre doch schade, wenn gerade dem Ungeübten diese Funktion verwehrt wird!
Freue mich über hilfreiche Hinweise.
hRb
Einloggen, um Attachments anzusehen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19062
Erhaltene Danke: 1701

W10 x64 (Chrome, Edge)
Delphi 10.4 Ent, Oxygene, C# (VS 2019), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 05.02.21 16:39 
user profile iconhRb hat folgendes geschrieben Zum zitierten Posting springen:
Ich wurde dennoch nicht fündig. Nachstehend zeige ich, wo ich überall gesucht habe. Hilfreich ist, das beigefügte Bild anzusehen (Anhang).
Der Screenshot zeigt das Menü Bearbeiten im Formular-Design-Modus! Dort kannst du natürlich auch keinen Quelltext formatieren.

// EDIT:
Des Rätsels Lösung zeigt sich in der Featurematrix:
www.embarcadero.com/...n-feature-matrix.pdf
10.1 war ja noch die stark eingeschränkte Starter Edition.
Dort fehlt das Feature "Code Formatter and beautification for source code including block formatting".

user profile iconhRb hat folgendes geschrieben Zum zitierten Posting springen:
Arbeite noch mit Delphi Berlin 10.1 (da unbegrenzt gültig).
Du kannst doch die 10.1 installiert lassen. Die Community Edition kannst du ja parallel verwenden und wenn sie abläuft, bleibt die 10.1 ja in jedem Fall erhalten.

user profile iconhRb hat folgendes geschrieben Zum zitierten Posting springen:
Ist 10.1 eine "Magerversion"? Gibt es noch andere Parameter die zuvor zu aktivieren sind? (Wäre doch schade, wenn gerade dem Ungeübten diese Funktion verwehrt wird!
Ja, absolut. Die Starter Edition war sehr stark eingeschränkt. Erst die folgende Community Edition ist eine funktionell nicht mehr eingeschränkte Professional Edition.
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 241
Erhaltene Danke: 12



BeitragVerfasst: So 14.02.21 13:56 
Hallo
Der Empfehlung von jaenicke folgend, habe ich Delphi 10.3 Update3 installiert, um meinen Pascal-Code zu formatieren (Strg+D). Dabei kam alles heraus, nur nicht das, was ich erhofft hatte. Geprüft habe ich den Wert der Tab-Einstellung = 2.
Im Anhang sieht man einige Ergebnisse:
- ImagePascal1.jgp zeigt, wie schon die Procedure-Auflistung nicht linksbündig bleibt, sondern sich staffelt. Ab Spalte 41 gibt es keine weitere Staffelung.
- ImagePascal2.jpg zeigt, wie dann alle weiteren Codezeilen linksbündig auf Spalte 41 gesetzt werden, d.h. die bisher bestehende Formatierung geht verloren.
- ImagePascal3.jpg zeigt, wie die vergleichbaren Codezeilen vor der Formatierung aussahen (Vergleich zu ImagePascal2)
Zunächst dachte ich, dass die Formatierungsfunktion an Forward scheitert und habe daher nicht die die gesamte Unit, sondern nur einige wenige Proceduren markiert und Strg+D ausgelöst.
- ImagePascal4.jpg ist das Ergebnis und zeigt, dass schon bei der ersten Procedure (SystemBellOn) alle nachfolgenden Zeilen auf Spalte 41 verschoben werden.
Was könnte Ursache für dieses (für mich nicht erklärbare) Verhalten sein?
Gruß hRb
(offenbar kann ich immer nur eine Anlage beifügen. Da ich's nicht besser kann: 4 Beiträge)
Einloggen, um Attachments anzusehen!
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 241
Erhaltene Danke: 12



BeitragVerfasst: So 14.02.21 13:57 
hier Image2
hRb
Einloggen, um Attachments anzusehen!
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 241
Erhaltene Danke: 12



BeitragVerfasst: So 14.02.21 13:58 
hier Image3
hRb
Einloggen, um Attachments anzusehen!
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 241
Erhaltene Danke: 12



BeitragVerfasst: So 14.02.21 13:59 
hier Image4
hRb
Einloggen, um Attachments anzusehen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19062
Erhaltene Danke: 1701

W10 x64 (Chrome, Edge)
Delphi 10.4 Ent, Oxygene, C# (VS 2019), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 14.02.21 20:21 
Kannst du die Unit vielleicht kürzen und wenn es dann auch noch passiert hier anhängen?

Bis auf das forward, das ich noch nie brauchte, sehe ich da erst einmal nichts Ungewöhnliches. Aber auch damit wird bei mir korrekt formatiert.
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 241
Erhaltene Danke: 12



BeitragVerfasst: Mo 15.02.21 18:02 
Hallo Jaenicke
Zitat:
Kannst du die Unit vielleicht kürzen und wenn es dann auch noch passiert hier anhängen?

Bin mir nicht ganz sicher, ob ich Dich richtig verstanden habe (Unit kürzen?). Ich habe jetzt mal nur einen Bereich von3 Proceduren markiert (SystemBellOn, SystemBellOff, PressedPause) und Strg+D gedrückt
Zur besseren Übersicht von vorher/nachher alles: (siehe Image5).
Interessant ist, dass die Formatierungsfunktion über den markierten Bereich hinaus, auch noch die Zeile mit "Procedure ResetPressedPause;" verschoben hat, obwohl da noch eine Leerzeile dazwischen liegt.
An der neu installierten 10.3. Update3 - Version wurden keinerlei Anpassungen vorgenommen (verwendet wie installiert).

So, Problem erkannt:
- Nachdem ich ein neues Formular mit einigen Buttons erzeugt und alle Zeilen linksbündig verschoben habe, funktioniert Strg+D
- Nach mehreren Versuchen steht fest: der Fehler entsteht durch die Forward-Anweisungen. Nach jeder Anweisung rückt der Text um zwei Zeichen ein. Bei entsprechend vielen Anweisungen, scheint es eine Grenze bei 40 Spalten zu geben, damit noch etwas Platz für Code bleibt (vor Zeilenumbruch). Setze ich die Forward-Proceduren in Kommentar, wird der Code (korrekt) formatiert.
Ganz schlecht finde ich, dass auch bei markiertem Text nicht nur dieser ausgewertet wird. Anders lässt sich Image5 nicht erklären.
Allerdings gibt es einige "Unschönheiten", z.B, bei Case Anweisungen die mit einer Zeile auskommen
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
Case intvariable of
  1begin x:=5; y:=10end;
  2begin x:=8; y:=15end;
  3begin x:=9; y:=13end;
end;
//wird zu einem unübersichtlichen
Case intvariable of
  1
     begin x:=5; y:=10end;
  2
     begin x:=8; y:=15end;
  3
     begin x:=9; y:=13end;
end;
// anderes Beispiel, was formal korrekt sein wird aber nur bedingt mehr Übersicht bringt
if x > 0 then Erhoehen;
// wird zu 
if x > 0 then
  Erhoehen;
// oder bewusst optisch angepasster Text 
top    := 10;  //Rand oben
bottom := 15;  //Rand unten 
// wird zu 
top := 10//Rand oben
bottom := 15//Rand unten
[delphi]
Mein Code von 7584 Zeilen ist nach Formatierung 10283 Zeilen!
Zitat:
Bis auf das forward, das ich noch nie brauchte,...

Gibt es eine Alternative zu Forward. Manchesmal benötige ich im Code weiter vorne Proceduren, die erst später später stehen. Ohne Forward meckert der Compiler.
Zitat:
... nichts Ungewöhnliches. Aber auch damit wird bei mir korrekt formatiert.

Das bezweifle ich. Schreib einfach mal 5 Forwards, dann wird der Code zwar formatiert, aber jeweils mit 5*2=10 Zeichen versetzt. Zumindest bei mir. Bei einem Forward übersieht man dies leicht.
Aber vielen Dank für Dein Echo (vermisse derzeit auch andere schlaue Köpfe),
hRb
Einloggen, um Attachments anzusehen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19062
Erhaltene Danke: 1701

W10 x64 (Chrome, Edge)
Delphi 10.4 Ent, Oxygene, C# (VS 2019), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 15.02.21 22:25 
Wie gesagt, bei mir geht es auch mit forward korrekt. Deshalb habe ich ja nach einer konkreten Unit als Beispiel gefragt.

Ja, der Parser berücksichtigt auch den Rest der Unit, denn sonst könnte er den Kontext ja gar nicht richtig beurteilen um korrekt zu formatieren.

Zu deinen Beispielen:
Deine Formatierung vernachlässigt eine der wichtigsten Regeln für Quelltextformatierung: Niemals mehrere Befehle in eine Zeile schreiben, damit man einen schnelleren Überblick hat. Ich würde es daher sogar so schreiben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
Case intvariable of
  1
     begin
       x := 5;
       y := 10;
     end;
  2
     begin
       x := 8;
       y := 15;
     end;
  3
     begin 
       x := 9;
       y := 13;
     end;
end;

Ich halte mich an den offiziellen Styleguide. Früher als Anfänger habe ich mir mal eigene Formatierungen ausgedacht und fand das toll, aber seit der Uni habe ich mir das ganz schnell abgewöhnt.
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 241
Erhaltene Danke: 12



BeitragVerfasst: Di 16.02.21 21:32 
Hallo jaenicke,
habe jetzt mal, wie gewünscht, ein kurzes Programm-Beispiel erstellt (zip-Datei). Bei "Buttom n*n" wird die Zahl in Edit multipliziert, beim "SpeesdButt n*n*n" entsprechend. Das Beispiel macht wenig Sinn, aber darauf kommt es nicht an. Vielmehr soll gezeigt werden, wie nach den beiden Forwards, alle folgenden Zeilen um zusätzlich n=2 [Forward] *2 = 4-Leerzeichen verschoben werden. (siehe nach Strg+D die Zeilen 36 ff.. -> Proceduren beginnen nicht mehr in Spalte 1). Dann die Forwards auf Kommentar setzen und erneut Strg+D. Nun passt alles!
Gruß hRb
PS: wollte eine Zip-Datei anhängen (ist zu groß). Daher hier der Pascalcode (einfach in Editor kopieren, man muss ja nicht compilieren).

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons;

type
TForm1 = class(TForm)
Button1: TButton;
SpeedButton1: TSpeedButton;
Edit1: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
private
   { Private-Deklarationen }
public
    { Public-Deklarationen }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

var
Zahl1: integer;
Zahl2: integer;

function  Formel1(wertx: integer): integer; Forward;
function  Formel2(werty: integer): integer; Forward;

procedure TForm1.Button1Click(Sender: TObject);
var
x: integer;
begin
try
x := StrToInt(Edit1.Text);
Zahl1 := Formel1(x);
Label1.Caption:='Ergebnis= ' +IntToStr(Zahl1);
except
on exception do
MessageDlg('nur Zahlen zulässig ',
mtInformation, [mbAbort], 0);
end;
end;


procedure TForm1.SpeedButton1Click(Sender: TObject);
var
y: integer;
begin
try
y := StrToInt(Edit1.Text);
Zahl2 := Formel2(y);
Label1.Caption:='Ergebnis= ' +IntToStr(Zahl2);
except
on exception do
MessageDlg('nur Zahlen zulässig ',
mtInformation, [mbAbort], 0);
end;
end;

function Formel1(wertx:integer): integer;
begin
Result := wertx * wertx;
end;

function Formel2(werty:integer): integer;
begin
Result := werty * werty * werty;
end;


end.
[delphi]
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19062
Erhaltene Danke: 1701

W10 x64 (Chrome, Edge)
Delphi 10.4 Ent, Oxygene, C# (VS 2019), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 17.02.21 14:10 
Stimmt, in der Konstellation klappt die Formatierung nicht. Konkret liegt es daran, dass die Funktionen in der Unit des Formulars enthalten sind. Ist dort diese Zeile nicht enthalten, klappt es auch:
ausblenden Delphi-Quelltext
1:
{$R *.dfm}					


Ein Grund mehr forward nur einzusetzen, wenn es wirklich nicht anders geht. Und das ist eigentlich nur der Fall, wenn man Funktionen unterhalb von implementation für Zugriffe von außen verstecken möchte und deren Aufrufe stark ineinander verschachtelt sind.

Aber stark verschachtelte Aufrufe, die man versteckt und dann auch noch in der Unit des Formulars? Das klingt sehr abenteuerlich...

// EDIT:
In Delphi 10.4, wenn es denn irgendwann auch mal als Community Edition verfügbar ist, ist das Problem übrigens behoben.
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 241
Erhaltene Danke: 12



BeitragVerfasst: Do 18.02.21 17:31 
Ok, zunächst sind wir uns über den Effekt einig.
Es ging mir auch nicht darum, irgend etwas verstecken zu wollen. Die Forwards kommen einfach noch aus der (guten alten) Turbo-Pascalzeit. Nicht immer gelang es die Funktionen an vorderste Stelle zu bringen. Im Grunde macht es Delphi ja ebenso, in dem es die Procedur-Definitionen vorweg stellt. Danach ist die Codereihenfolge beliebig.
Nachdem ich weiß, dass das Problem mit der Anweisung {$R *.dfm} zusammenhängt, habe ich einfach die Forwards zu den Variablen (vor die Unit) verschoben. Tja, kleine Ursache, große Wirkung.
Nochmmals herzlichen Dank für Dein Mitwirken in dieser Sache und Dein Bemühen, den Fehler bei der nächsten Release zu beheben.
Gruß hRb