Delphi in Lazarus-Projekt umwandeln

Für Fragen von Einsteigern und Programmieranfängern...
Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Delphi in Lazarus-Projekt umwandeln

Beitrag von theo »

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.
Vermutlich.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
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

Beitrag von af0815 »

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.
Lazarus ist nicht Delphi. Punkt.

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).

hum4n0id3
Beiträge: 301
Registriert: So 5. Mai 2019, 15:23

Re: Delphi in Lazarus-Projekt umwandeln

Beitrag von hum4n0id3 »

stoffel_hessen hat geschrieben:
Mi 27. Jul 2022, 20:35
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. :wink:
Das ist leider keine Option, die Anwendung hat ca. 250 globale variablen, ist wahrscheinlich ein schlechter Programmierstiel.
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.

PascalDragon
Beiträge: 830
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

Beitrag von PascalDragon »

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?
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).
FPC Compiler Entwickler

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Delphi in Lazarus-Projekt umwandeln

Beitrag von theo »

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).
Das ändert nichts daran, dass bei ungenutzen globalen Variablen in Units keine Hinweise ausgespuckt 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.    
ergibt lediglich:
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

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1435
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

Beitrag von fliegermichl »

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.

Benutzeravatar
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

Beitrag von stoffel_hessen »

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.
Würde ich gerne in Angriff nehmen, allerdings fehlt mir hier der Hintergrund, wie so etwas richtig und gut gelöst wird.
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;
Über ein paar Tipps, wie ich dies sinnvoll löse, würde ich mich sehr freuen.
Gruß Christopher

hum4n0id3
Beiträge: 301
Registriert: So 5. Mai 2019, 15:23

Re: Delphi in Lazarus-Projekt umwandeln

Beitrag von hum4n0id3 »

stoffel_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.
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ösen :)

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.
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).
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.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
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

Beitrag von af0815 »

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.
Ich kapsle alles zugehörige in einer Klasse.

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).

Benutzeravatar
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

Beitrag von stoffel_hessen »

hum4n0id3 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 :)
Habe hierzu einen neuen Tread erstellt viewtopic.php?f=55&t=14390
Gruß Christopher

PascalDragon
Beiträge: 830
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

Beitrag von PascalDragon »

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.
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.
FPC Compiler Entwickler

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1435
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

Beitrag von fliegermichl »

PascalDragon hat geschrieben:
Do 28. Jul 2022, 13:32
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.
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.
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
Beiträge: 830
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

Beitrag von PascalDragon »

fliegermichl hat geschrieben:
Fr 29. Jul 2022, 10:51
PascalDragon hat geschrieben:
Do 28. Jul 2022, 13:32
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.
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.
Was ja auch gar nicht ginge, wenn die Unit in mehreren Projekten zum Einsatz kommt und die Variable mal verwendet wird und mal nicht.
Korrekt. Deswegen würde hieran auch nichts geändert.
FPC Compiler Entwickler

Antworten