Vermutlich.stoffel_hessen hat geschrieben: Mi 27. Jul 2022, 20:35 Das ist leider keine Option, die Anwendung hat ca. 250 globale variablen, ist wahrscheinlich ein schlechter Programmierstil.
Delphi in Lazarus-Projekt umwandeln
Re: Delphi in Lazarus-Projekt umwandeln
- af0815
- Lazarusforum e. V.
- Beiträge: 6770
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Delphi in Lazarus-Projekt umwandeln
Lazarus ist nicht Delphi. Punkt.stoffel_hessen hat geschrieben: Mi 27. Jul 2022, 20:32 In Delphi war dies egal und ich bin davon ausgegangen, das es in Lazarus auch egal ist.
Gehe einmal davon aus, das es ein komplett anders aufgebautes System ist. Mit Vorteilen und manchmal mit scheinbaren Nachteilen (SCNR).
Auch hat Lazarus nur einen 'Kompatilitätsmodus' der halt die meisten Eigenheiten von Delphi nachbaut (Frag mich ja nicht wie sinnvoll das ist - Ich verwende den Mode Delphi normalerweise nicht mehr).
Wenn, dann muss man sich mit Lazarus beschäftigen und nicht mit Delphi vergleichen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: Delphi in Lazarus-Projekt umwandeln
In jeder, mir geläufigen, Programmiersprache sind Globale-Variablen schlecht. Weil merkst du bestimmt gerade selbst, sie dir auf die Füße fallen. Globale Variablen sind ganz gut mit einem Minenfeld vergleichbar. Du weißt das sie da sind, du weißt aber nie wo genau sie sind und welche auswirkungen sie haben. Irgendwann geht die Übersicht ganz einfach flöten.stoffel_hessen hat geschrieben: Mi 27. Jul 2022, 20:35Das ist leider keine Option, die Anwendung hat ca. 250 globale variablen, ist wahrscheinlich ein schlechter Programmierstiel.theo hat geschrieben: Mi 27. Jul 2022, 20:24 Ich habe noch eine Idee: Wenn du nicht mehr sicher bist, ob eine globale Variable irgendwo verwendet wird, dann kommentiere sie einfach aus. Wenn's kompiliert war sie überflüssig.![]()
Weil die Software von Delphi nach Lazarus wandert, würde ich es zum Anlaß nehmen und die Problematik der Globalen Variablen langsam auflösen. Wie af0815 gesagt hat, Lazarus ist nicht Delphi und bietet somit eine gelegenheit den Code umfassender anzupassen. Davon würde es auch profitieren, wenn es eine Delphi-Software bleiben würde.
-
- Beiträge: 954
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: Delphi in Lazarus-Projekt umwandeln
Du musst sicher gehen, dass unter Projekt -> Projekteinstellungen -> Compilereinstellungen -> Ausführlichkeit ein Haken bei Notizen anzeigen (-vn) gesetzt ist, da die Nachricht für eine ungenutzte Variable eine relative niedrige Verbosity hat (und Notizen und Hinweise können unter Umständen sehr viele werden).stoffel_hessen hat geschrieben: Mi 27. Jul 2022, 19:27 Danke für eure Unbterstützung.
Die Haken in Project --> Project Options --> Compiler Options --> Messages sind alle gesetzt.
Eine Variable in einer function/procedure, welche nicht verwendet wird, wird als Warnung gemeldet, eine global definierte Variable hingegen nicht.
Hat noch einer eine Idee?
FPC Compiler Entwickler
Re: Delphi in Lazarus-Projekt umwandeln
Das ändert nichts daran, dass bei ungenutzen globalen Variablen in Units keine Hinweise ausgespuckt werden.PascalDragon hat geschrieben: Do 28. Jul 2022, 09:55 Du musst sicher gehen, dass unter Projekt -> Projekteinstellungen -> Compilereinstellungen -> Ausführlichkeit ein Haken bei Notizen anzeigen (-vn) gesetzt ist, da die Nachricht für eine ungenutzte Variable eine relative niedrige Verbosity hat (und Notizen und Hinweise können unter Umständen sehr viele werden).
Der Code:
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs;
type
TForm1 = class(TForm)
end;
var
Form1: TForm1;
Test:String;
implementation
{$R *.lfm}
end.
Hint: (11030) Start of reading config file /home/theo/lazarus/fpcupdeluxe/fpc/bin/x86_64-linux/fpc.cfg
Hint: (11031) End of reading config file /home/theo/lazarus/fpcupdeluxe/fpc/bin/x86_64-linux/fpc.cfg
Free Pascal Compiler version 3.2.2-rrelease_3_2_2-0-g0d122c4953 [2022/06/24] for x86_64
Copyright (c) 1993-2021 by Florian Klaempfl and others
(1002) Target OS: Linux for x86-64
(3104) Compiling /home/theo/lazarus/fpcupdeluxe/projects/project1.lpr
(3104) Compiling unit1.pas
(9022) Compiling resource /home/theo/lazarus/fpcupdeluxe/projects/lib/x86_64-linux/project1.or
(9015) Linking /home/theo/lazarus/fpcupdeluxe/projects/project1
(1008) 52 lines compiled, 2.1 sec
(1022) 2 hint(s) issued
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Delphi in Lazarus-Projekt umwandeln
Ich denke, daß das Absicht ist. Wenn die Variable im Interfaceteil einer Unit definiert ist, kann bei Verwendung der Unit auch von aussen darauf zugegriffen werden.
Wenn man eine ungenutzte globale Variable in einer Programmdatei anlegt, erscheint der Hinweis.
Wenn man eine ungenutzte globale Variable in einer Programmdatei anlegt, erscheint der Hinweis.
- stoffel_hessen
- Beiträge: 66
- Registriert: Sa 18. Jun 2022, 12:27
- OS, Lazarus, FPC: Windows 11 (Version 2.2.2, FPC 3.2.2)
- CPU-Target: x86 64Bit
- Wohnort: Riedstadt
Re: Delphi in Lazarus-Projekt umwandeln
Würde ich gerne in Angriff nehmen, allerdings fehlt mir hier der Hintergrund, wie so etwas richtig und gut gelöst wird.hum4n0id3 hat geschrieben: Do 28. Jul 2022, 09:29 In jeder, mir geläufigen, Programmiersprache sind Globale-Variablen schlecht. Weil merkst du bestimmt gerade selbst, sie dir auf die Füße fallen. Globale Variablen sind ganz gut mit einem Minenfeld vergleichbar. Du weißt das sie da sind, du weißt aber nie wo genau sie sind und welche auswirkungen sie haben. Irgendwann geht die Übersicht ganz einfach flöten.
Weil die Software von Delphi nach Lazarus wandert, würde ich es zum Anlaß nehmen und die Problematik der Globalen Variablen langsam auflösen. Wie af0815 gesagt hat, Lazarus ist nicht Delphi und bietet somit eine gelegenheit den Code umfassender anzupassen. Davon würde es auch profitieren, wenn es eine Delphi-Software bleiben würde.
Ich hole mal etwas weiter aus, das Projekt um was es in erster Linie geht ist ein Tool welches zur Konfiguration von MPLS-Geräten verwendet wird.
Es gibt hier eine Vielzahl an Konfigurationsmöglichkeiten, welche über 7 weiter Formulare abgefragt bzw. ausgegeben werden, auch gibt es eine Unit in der Globale Funktionen abgelegt sind.
Außerdem gibt es etwa 110 Dateien als Vorlagenschnipsel, welche nach Bedarf zusammengebaut werden, diese sind als Pfad-Konstanten angelegt.
Auch werden Formularübergreifend Werte benötigt, welche eben in Globalen Variablen abgelegt werden.
Als kleines Beispiel, wird aus dem Maschinenname die Loopback-IP-Adresse berechnet (aus xx5325 wird die IP 10.19.215.125) und dann einer Globalen Variablen zugewiesen, da der Wert mehrfach verwendet wird.
Löst man so etwas anders?
Code: Alles auswählen
function TSDIAPP.MaschinennameInIP(Ziffern : string) : string;
var GeraeteArt : string;
ersteZiffer : string;
Ziffernrest : string;
ZiffernInInteger : integer;
StelleZwei : integer;
i : integer;
IPAdresse : string;
IPAdresseGeraeteklasse : string;
begin
GeraeteArt := copy (Ziffern,1,2);
if GeraeteArt = 'xx' then IPAdresseGeraeteklasse := '10.19.2';
if GeraeteArt = 'yy' then IPAdresseGeraeteklasse := '172.24.7.';
ersteZiffer := copy (Ziffern,3,1);
Ziffernrest := copy (Ziffern,4,3);
ZiffernInInteger := strtoint (Ziffernrest);
if RBxx.Checked
then // Loopback Adresse xx
begin
StelleZwei := 0;
for i := 1 to 4 do
if ZiffernInInteger > 200 then
begin
inc(StelleZwei);
ZiffernInInteger := ZiffernInInteger - 200;
end;
IPAdresse := IPAdresseGeraeteklasse + inttostr (StelleZwei) + ersteZiffer + '.' + inttostr (ZiffernInInteger);
end
else IPAdresse := IPAdresseGeraeteklasse + inttostr (ZiffernInInteger); // Loopback Adresse yy
MaschinennameInIP := IPAdresse;
end;
Gruß Christopher
Re: Delphi in Lazarus-Projekt umwandeln
Man muss auch nichts sofort überstürzen, den die Umstellung von Code bringt neuen Aufwand und muss vorbereitet werden. Deswegen ist es eine gute Frage, welche man hier (vielleicht separat im einem extra Thread) erfragen könnte. Mich würde es übringens auch interessieren wie es die Pascal-Profis lösenstoffel_hessen hat geschrieben: Do 28. Jul 2022, 11:46 Würde ich gerne in Angriff nehmen, allerdings fehlt mir hier der Hintergrund, wie so etwas richtig und gut gelöst wird.

Ich arbeite hauptsächlich mit PHP, JavaScript und hatte beruflich auch schon mit C# zu tun und ich löse solchen Sachen mit einem Service.
Und genau das macht dann das Service. Du rufst es auf wenn du es benötigst und hast die Sicherheit das die Daten nicht irgendwo verändert werden. Wenn du dann Fehler feststellst, musst du normalerweise nur das Service untersuchen, ob da nicht der Fehler produziert wird und nicht (im schlimmsten Fall), das gesamte Programm.stoffel_hessen hat geschrieben: Do 28. Jul 2022, 11:46 Als kleines Beispiel, wird aus dem Maschinenname die Loopback-IP-Adresse berechnet (aus xx5325 wird die IP 10.19.215.125).
- af0815
- Lazarusforum e. V.
- Beiträge: 6770
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Delphi in Lazarus-Projekt umwandeln
Ich kapsle alles zugehörige in einer Klasse.stoffel_hessen hat geschrieben: Do 28. Jul 2022, 11:46 Globale Variablen: Über ein paar Tipps, wie ich dies sinnvoll löse, würde ich mich sehr freuen.
Bei mir verwendet: Daher hat die Klasse Maschine alles beinhaltet was sie braucht. Konfiguartionsparameter die allgemeiner sind, sind ebenso in einer Klasse. Das ganze meist in einem Datenmodul.
Generell erzeuge ich zur Laufzeit nur ein Formular (!!) automatisch. Dieses kümmert sich um den Splash, alle Datenmodule, alle Klassen auch um die Initialisierung in der richtigen Reihenfolge. Weil damit wird sichergestellt das alles Resourcen sauber gebunden werden und auch wieder entfernt werden.
Selten verwendet Teile werden sogar erst erzeugt und Initialisiert wenn sie wirklich gebraucht werden.
Sehr starke Verwendung von Frames und der Kapselung von dem Code in den Frames bei optischen Einheiten. Vererbung nur dort wo es sinn macht, die Kommunikation bzw. Datenweitergabe erfolgt über Schnittstellen, Events und Datenmodule. Also sehr modular. Vererbung von Frames ist normal bei mir. Ich habe da eine BasisFrameKlasse die die von mir normalerweise verwendeten Schnittstellen beinhaltet. Zum Beispiel die SQL-Connection. Das Frame selbst hat dezitiert keine Connection, das wird alles vom Hauptformular gemacht. Damit habe ich automatisch auf allen Frames eine Verbindung und wenn ich das Frame in einen anderen Projekt, Maschine, whatever verwende wird es trotzdem richtig and die Datenbank gebunden.
Gewisse Techniken entstehen auch daraus, wie die Arbeitsabläufe in der Firma gehalten werden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- stoffel_hessen
- Beiträge: 66
- Registriert: Sa 18. Jun 2022, 12:27
- OS, Lazarus, FPC: Windows 11 (Version 2.2.2, FPC 3.2.2)
- CPU-Target: x86 64Bit
- Wohnort: Riedstadt
Re: Delphi in Lazarus-Projekt umwandeln
Habe hierzu einen neuen Tread erstellt viewtopic.php?f=55&t=14390hum4n0id3 hat geschrieben: Do 28. Jul 2022, 12:47 Deswegen ist es eine gute Frage, welche man hier (vielleicht separat im einem extra Thread) erfragen könnte. Mich würde es übringens auch interessieren wie es die Pascal-Profis lösen![]()
Gruß Christopher
-
- Beiträge: 954
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: Delphi in Lazarus-Projekt umwandeln
Korrekt. Und der Compiler geht eben nicht nochmal alle vorkompilierten Units durch um zu schauen, ob da eventuell eine Variable ist, für die er eine Meldung ausgeben müsste.fliegermichl hat geschrieben: Do 28. Jul 2022, 11:16 Ich denke, daß das Absicht ist. Wenn die Variable im Interfaceteil einer Unit definiert ist, kann bei Verwendung der Unit auch von aussen darauf zugegriffen werden.
FPC Compiler Entwickler
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Delphi in Lazarus-Projekt umwandeln
Was ja auch gar nicht ginge, wenn die Unit in mehreren Projekten zum Einsatz kommt und die Variable mal verwendet wird und mal nicht.PascalDragon hat geschrieben: Do 28. Jul 2022, 13:32Korrekt. Und der Compiler geht eben nicht nochmal alle vorkompilierten Units durch um zu schauen, ob da eventuell eine Variable ist, für die er eine Meldung ausgeben müsste.fliegermichl hat geschrieben: Do 28. Jul 2022, 11:16 Ich denke, daß das Absicht ist. Wenn die Variable im Interfaceteil einer Unit definiert ist, kann bei Verwendung der Unit auch von aussen darauf zugegriffen werden.
-
- Beiträge: 954
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: Delphi in Lazarus-Projekt umwandeln
Korrekt. Deswegen würde hieran auch nichts geändert.fliegermichl hat geschrieben: Fr 29. Jul 2022, 10:51Was ja auch gar nicht ginge, wenn die Unit in mehreren Projekten zum Einsatz kommt und die Variable mal verwendet wird und mal nicht.PascalDragon hat geschrieben: Do 28. Jul 2022, 13:32Korrekt. Und der Compiler geht eben nicht nochmal alle vorkompilierten Units durch um zu schauen, ob da eventuell eine Variable ist, für die er eine Meldung ausgeben müsste.fliegermichl hat geschrieben: Do 28. Jul 2022, 11:16 Ich denke, daß das Absicht ist. Wenn die Variable im Interfaceteil einer Unit definiert ist, kann bei Verwendung der Unit auch von aussen darauf zugegriffen werden.
FPC Compiler Entwickler