Lazarus Codetools benutzen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
thosch
Beiträge: 334
Registriert: Mo 10. Jul 2017, 20:32

Re: Lazarus Codetools benutzen

Beitrag von thosch »

m.fuchs hat geschrieben: So 15. Mär 2026, 13:28 Dann mach das doch. Kannst ja deine Fragen dann an den Support von ChatGPT und Co. stellen und musst nicht mehr hier fragen. Viel Spaß beim Vendor-Lock-in.
Mario Peters hat geschrieben: So 15. Mär 2026, 10:49 Die "Fetten Konzerne" holen sich ihr Wissen notfalls von woanders her die haben das fette Geld 80, 100 oder mehr Euro je Stunde aus der "Portokasse zu bezahlen, denen macht kostenpflichtige aber aussagekräfzige anfängerfreundliche Doku nämlich NICHTS aus.
Nö, das Geschäftsmodell dieser Konzerne rund um die Chatbots beruht genau darauf: Illegal Informationen die anderen Menschen erstellt haben zusammensammeln und gegen Geld wieder zur Verfügung stellen. Keine Entlohnung für die Urheber, völliges Ignorieren des Urheberrechts. Die zahlen eben keine 80, 100 oder mehr Euro.
Wer das unterstützt, sorgt dafür dass es eben irgendwann weniger oder gar nichts freies mehr gibt.
Was ist denn das für ne Diskussion?

Und was ist, wenn sich der KI User nur Programmiertipps aus der OpenSource Welt holt? Ist das auch verwerflich? Chatgpt gibt gar keine lizenzrechtlich gescützten Codes heraus!

thosch
Beiträge: 334
Registriert: Mo 10. Jul 2017, 20:32

Re: Lazarus Codetools benutzen

Beitrag von thosch »

hum4n0id3 hat geschrieben: Sa 21. Mär 2026, 13:25 Momentan sieht das nicht danach aus das es zusammen bricht und ich persönlich finde mich damit auch langsam ab. Ich schreibe Code immer mehr aus Spaß an der Freude und gehe davon aus das der überwiegende Teil der Programmierer aussterben wird.

Erstes, viele Problemfelder benötigen keine komplexe Logik. Das wird mit Vibe-Coding erschlagen. Absolut neues und High-End bleibt nur einigen wenigen überlassen, also ändert sich nichts.

Zweitens, Codequalität hat oft niedrige Priorität. Das etwas Funktioniert ist wichtiger, statt wie es funktioniert. Wurde schlechter Code von schlechten Programmierern geschrieben, schreibt die KI notfalls schlechten Code schneller und günstiger.

Drittens, selbst wenn nicht alle heutigen Erwartungen in Hinsicht KI erfüllt werden können, sammeln wir Erfahrungen wo die KI dennoch hervorragend funktioniert und diese Parts werden bleiben, wenn die allgemeine KI Blase platzt.

Mag man doof finden, finde ich auch, aber irgendwann muss man sich damit abfinden, weil man auch betroffen ist, das sich Dinge eben ändern.

Ich persönlich sitze gern mit ChatGPT zusammen und philosophiere über Code und Themen und lasse mir jedoch immer Links geben. OpenAI Codex habe ich auch schon ausprobiert aber nicht fest integriert, weil Code will ich noch selbst schreiben.
Ich nutze auch seit Kurzem Chatgpt.

thosch
Beiträge: 334
Registriert: Mo 10. Jul 2017, 20:32

Re: Lazarus Codetools benutzen

Beitrag von thosch »

multiplatform-coder hat geschrieben: Mo 30. Mär 2026, 21:02 Oiiiii damit müsste sich doch auch die fPGUI nach DOS portieren lassen, der GO32 Compiler will kurze DOS 8.3 Dateinamen haben, aber die Umbenennung sollte sich doch ebenso mit den Codetools machen lassen. Die langen Namen auf die kurzen Äquivalente umbenennen und die Uses- und Include Anweisungen scannen und die kurzen Äquivalente da rein und dann für DOS übersetzen und nur wenn da noch Probleme auftreten wegen Windows oder Linux Code dann muss das natürlich angepasst werden. Damit rückt die DOS fpGUI ein rieiges Stück näher da es immer noch echt viele DOS Freaks gibt die nun endlich nicht mehr auf die öde DOS KOmmandozeile angewiseen sind. Danke Jungs für diese Arbeit bei der mir auch die KI hilft, das alles umzusetzen, womit DOS auch nicht länger die alleinige Kommandozeilenbasion bleibt. DOS kann ganz genauso moderne Grafik. Konnte es ja auch schon unter Windows mit DOS Kernel warum dann das alte System nur noch auf der Kommandozeile verwenden. Auch DOS kann nun GUI. Dank Kirill Kranz's VIPGFX Package! Und dank umsichtiger FPC Programmierer, die wieklich plattformübergreifend programmiert haben. Klasse Arbeit.

@m.Fuchs; @pascoli: Wenn die KI in solchen Fällen nur für die Erstellung von Tools für das alte DOS verwendet wird um dort modrne Grafik reinzubringen, sehe ich nichts falsches oder schmarotzerisches. Ich bin da ganz sicher dass dieses DOS tatsächlich nur noch für Freizeitspassprojekte verwendet wird oder bei ausgesprochen speziellen Industrie Anwendungen bei denen dann aber aufgrund ihrer Seltenheit auch die KI nicht besonders weiter helfen dürfte, die ja von Menschen angelernt werden muss die aber in solche Spezalfällen und geschützten Projekten dann eben keine Infos ausgeben die ein Lizenzverletzer verwerten könnte. Dürfte aber bei GPL gar nicht zutreffen.

Ich glaub ich setz mich mal an die fpGUI ran. Ob ich mich auch an die msegui heran wage ist aber noch offen, wenn die fpGUI portierbar wird reicht das ja für das alte DOS! Schaun wir mal. was da geht. Mach ich ja alles in meiner Freizeit, alles bleibt Open Source! Versprochen!
fpGUI? Daran arbeite ich seit Jahren, ich will die nach DOD portieren. Gerne köönen wir uns damit auch zusammen tun. Bei Interesse einfach PN an mich! Dann können wir alles Weiter bereden.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2895
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Lazarus Codetools benutzen

Beitrag von m.fuchs »

thosch hat geschrieben: Do 16. Apr 2026, 18:35
m.fuchs hat geschrieben: So 15. Mär 2026, 13:28 Nö, das Geschäftsmodell dieser Konzerne rund um die Chatbots beruht genau darauf: Illegal Informationen die anderen Menschen erstellt haben zusammensammeln und gegen Geld wieder zur Verfügung stellen. Keine Entlohnung für die Urheber, völliges Ignorieren des Urheberrechts. Die zahlen eben keine 80, 100 oder mehr Euro.
Wer das unterstützt, sorgt dafür dass es eben irgendwann weniger oder gar nichts freies mehr gibt.
Was ist denn das für ne Diskussion?
Eine Diskussion, was stört dich denn daran?
thosch hat geschrieben: Do 16. Apr 2026, 18:35 Und was ist, wenn sich der KI User nur Programmiertipps aus der OpenSource Welt holt? Ist das auch verwerflich? Chatgpt gibt gar keine lizenzrechtlich gescützten Codes heraus!
1.) Wie holst du dir aus einem Chatbot (bitte nicht KI schreiben, das ist nämlich keine) nur Programmiertipps aus der Opensourcewelt? Also wie schränkst du die Datenquelle ein?
2.) Die Informationen werden kaum aus OpenSource-Quellcodes generiert, was man ja vielleicht noch unter der Lizenz als erlaubt ansehen könnten, sondern aus ganz vielen anderen Quellen, die dem nie zugestimmt haben.
3.) Woher weißt du dass keine lizenzrechtlich geschützten Codes verwendet wurden? Es wurden schon soviele illegale Datenquellen für die Trainingsdaten der LLM gefunden, da würde ich das nicht ausschließen.
0118999881999119725-3

Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 1344
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 4.99, FPC-Version: 3.3.1
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Lazarus Codetools benutzen

Beitrag von kralle »

Moin,

würdet Ihr bitte beim Thema bleiben.

Bitte verlegt Eure Diskussion über das Für und Wieder von "KI" und Co in ein passerendes Forum z.B. "Dies und Das".

Gruß
Kralle
Zuletzt geändert von kralle am Fr 17. Apr 2026, 03:27, insgesamt 1-mal geändert.
Grund: Rechtschreibung
OS: MX Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1

thosch
Beiträge: 334
Registriert: Mo 10. Jul 2017, 20:32

Re: Lazarus Codetools benutzen

Beitrag von thosch »

m.fuchs hat geschrieben: Do 16. Apr 2026, 20:23
thosch hat geschrieben: Do 16. Apr 2026, 18:35
m.fuchs hat geschrieben: So 15. Mär 2026, 13:28 Nö, das Geschäftsmodell dieser Konzerne rund um die Chatbots beruht genau darauf: Illegal Informationen die anderen Menschen erstellt haben zusammensammeln und gegen Geld wieder zur Verfügung stellen. Keine Entlohnung für die Urheber, völliges Ignorieren des Urheberrechts. Die zahlen eben keine 80, 100 oder mehr Euro.
Wer das unterstützt, sorgt dafür dass es eben irgendwann weniger oder gar nichts freies mehr gibt.
Was ist denn das für ne Diskussion?
Eine Diskussion, was stört dich denn daran?
thosch hat geschrieben: Do 16. Apr 2026, 18:35 Und was ist, wenn sich der KI User nur Programmiertipps aus der OpenSource Welt holt? Ist das auch verwerflich? Chatgpt gibt gar keine lizenzrechtlich gescützten Codes heraus!
1.) Wie holst du dir aus einem Chatbot (bitte nicht KI schreiben, das ist nämlich keine) nur Programmiertipps aus der Opensourcewelt? Also wie schränkst du die Datenquelle ein?
Gar nich, ich stelle einfach meine Frage:
Zum Beispiel:

Wie sieht der Original Windows Quellcode der API Funktion Arc() aus?

dann lautet die Chatgpt Antwort:


Der Originalquellcode der Windows-API-Funktion Arc() ist nicht öffentlich zugänglich, da der Windows-Betriebssystemcode und die APIs proprietär sind und von Microsoft entwickelt und lizenziert werden. Microsoft stellt den Quellcode des Windows-Betriebssystems (einschließlich der API-Funktionen) nicht frei zur Verfügung.

Ich habe KEINE Idee, wie ich da irgendwelche Lizenzbetimmungen umgehen können sollte!

Jedoch können Sie eine Dokumentation zur Funktion Arc() in den offiziellen Microsoft-Dokumentationen finden. Die Funktion wird verwendet, um einen Bogen zu zeichnen, der durch einen bestimmten Bereich von Grad definiert ist. Die Signatur der Funktion sieht folgendermaßen aus:

BOOL Arc(
HDC hdc,
int left,
int top,
int right,
int bottom,
int xStartArc,
int yStartArc,
int xEndArc,
int yEndArc
);

Erklärung der Parameter:
hdc: Handle zu einem Gerätekontext (z. B. für ein Fenster oder eine Zeichnung).
left, top, right, bottom: Koordinaten des Rechtecks, das den Bereich des Kreises oder Ellipsen definiert.
xStartArc, yStartArc: Startpunkt des Bogens (relativ zum Rechteck).
xEndArc, yEndArc: Endpunkt des Bogens (relativ zum Rechteck).

eispiel in C:
#include <windows.h>

void DrawArc(HDC hdc) {
// Zeichnet einen Bogen von (50, 50) bis (200, 200)
Arc(hdc, 10, 10, 300, 300, 50, 50, 200, 200);
}

Quellen und Dokumentation:
Die Funktion Arc() wird in der Microsoft-Dokumentation
beschrieben.
Die eigentliche Implementierung des Windows-Betriebssystems ist nicht einsehbar, aber sie basiert auf den Systembibliotheken und Grafikroutinen, die Microsoft für das Betriebssystem entwickelt hat.

Wenn Sie eine detailliertere Implementierung oder einen Blick auf den Windows-Code selbst wünschen, können Sie die Windows Insider Preview-Quellen
für bestimmte Open-Source-Komponenten durchsehen. Aber der Quellcode der grundlegenden Windows-APIs, insbesondere der Grafikfunktionen, bleibt unter Verschluss.

Hoffentlich hilft das! Wenn du noch mehr Fragen zu Windows-APIs oder spezifischen Grafikfunktionen hast, lass es mich wissen.

Hier noch ein Beispiel wie ich mir Programmiertips holen könnte:

gib mir ein Prgramm zur Ausgabe einer Ellipse in Freepascal

Um eine Ellipse in FreePascal zu zeichnen, kannst du die Graphikbibliothek verwenden, die das Zeichnen von grundlegenden Formen wie Linien, Kreisen und Ellipsen ermöglicht. In FreePascal ist dies über die Unit Graph möglich.

Hier ist ein einfaches Beispielprogramm, das eine Ellipse in einem Fenster zeichnet:

Schritt-für-Schritt Anleitung:
Stelle sicher, dass du FreePascal (z.B. über Lazarus) auf deinem System installiert hast.
Erstelle ein neues Konsolenprojekt und stelle sicher, dass du die Unit Graph in deinem Projekt verwendest.
Beispielcode:
program EllipseExample;

uses
Graph;

var
gd, gm: Integer;

begin
{ Initialisiere den Grafikmodus }
gd := Detect; { Ermittelt den Grafikmodus }
InitGraph(gd, gm, '');

{ Überprüfe, ob der Grafikmodus korrekt gestartet wurde }
if GraphResult <> grOk then
begin
WriteLn('Grafikmodus konnte nicht initialisiert werden.');
Halt(1); { Beende das Programm, wenn die Initialisierung fehlschlägt }
end;

{ Zeichne eine Ellipse: }
{ Die Syntax für Ellipse ist: Ellipse(x, y, rx, ry); }
{ x, y: Mittelpunkt der Ellipse, rx, ry: Halbachsen (horizontal und vertikal) }
Ellipse(320, 240, 0, 360, 100, 50); { Ellipse mit Mittelpunkt (320, 240) und Halbachsen 100 und 50 }

{ Warte auf eine Taste, bevor das Fenster geschlossen wird }
ReadLn;

{ Beende den Grafikmodus und schließe das Fenster }
CloseGraph;
end.
Erklärung des Programms:
Graph-Unit: Diese Unit stellt die Funktionen bereit, um Grafiken zu erstellen.
InitGraph: Diese Funktion startet den Grafikmodus. Die Variablen gd und gm werden verwendet, um den Grafikmodus und Treiber zu definieren. Detect lässt den besten verfügbaren Grafikmodus automatisch erkennen.
Ellipse(x, y, startAngle, endAngle, rx, ry): Diese Funktion zeichnet eine Ellipse mit Mittelpunkt (x, y) und den Halbachsen rx und ry. Die Parameter startAngle und endAngle definieren den Bogen (in Grad), den du zeichnen möchtest – im Fall von 0 bis 360 wird eine komplette Ellipse gezeichnet.
CloseGraph: Beendet den Grafikmodus und schließt das Fenster.
Weitere Anpassungen:
Du kannst die Größe der Ellipse ändern, indem du die Werte von rx (horizontaler Radius) und ry (vertikaler Radius) anpasst.
Der Mittelpunkt (320, 240) kann ebenfalls geändert werden, um die Ellipse an einer anderen Position im Fenster zu zeichnen.
Hinweise:
Dieses Beispiel geht davon aus, dass du einen PC mit einer passenden Grafikbibliothek hast, die von FreePascal unterstützt wird (z.B. DOSBox, Windows, oder X11).
Falls du mit einem grafischen Benutzerinterface wie Lazarus arbeitest, könnte die Implementierung ein bisschen anders sein, da Lazarus auch eigene grafische Widgets bietet.

Viel Spaß beim Programmieren! Wenn du Fragen hast oder weitere Anpassungen benötigst, lass es mich wissen!

Wie könnte das mit Windows Grafik aussehen?


Wenn du in FreePascal unter Windows eine Ellipse zeichnen möchtest, kannst du dafür die Windows API direkt verwenden, um mit der GDI (Graphics Device Interface) zu arbeiten. Die Windows GDI bietet Funktionen zum Zeichnen von Formen, Text und Bildern auf Fenstern und in Grafikkontexten.

Um eine Ellipse unter Windows zu zeichnen, kannst du die Funktionen der Windows-API wie CreateWindow (um ein Fenster zu erstellen), GetDC (um den Grafikbereich zu erhalten) und Ellipse (um die Ellipse zu zeichnen) verwenden.

Hier ist ein einfaches Beispiel in FreePascal, das ein Fenster öffnet und eine Ellipse darin zeichnet:

Beispielprogramm in FreePascal für Windows:
program DrawEllipseWindows;

uses
Windows, Messages;

var
wc: WNDCLASS;
hwnd: HWND;
msg: MSG;
hdc: HDC;
ps: PAINTSTRUCT;

{ Die Fenster-Prozedur, um die Nachricht zu verarbeiten und die Ellipse zu zeichnen }
procedure WndProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM); stdcall;
begin
case Msg of
WM_PAINT:
begin
hdc := BeginPaint(hWnd, ps);
{ Zeichne eine Ellipse: Ellipse(hdc, left, top, right, bottom) }
Ellipse(hdc, 50, 50, 400, 300); { Beispiel Ellipse mit diesen Koordinaten }
EndPaint(hWnd, ps);
end;
WM_DESTROY:
PostQuitMessage(0);
else
DefWindowProc(hWnd, Msg, wParam, lParam);
end;
end;

begin
{ Registrierung der Fensterklasse }
FillChar(wc, SizeOf(WNDCLASS), 0);
wc.lpfnWndProc := @WndProc; { Setze die Fenster-Prozedur }
wc.hInstance := GetModuleHandle(nil);
wc.lpszClassName := 'EllipseClass';
wc.style := CS_HREDRAW or CS_VREDRAW;

if RegisterClass(wc) = 0 then
begin
MessageBox(0, 'Fensterklasse konnte nicht registriert werden!', 'Fehler', MB_ICONERROR);
Halt(1);
end;

{ Fenster erstellen }
hwnd := CreateWindow('EllipseClass', 'Ellipse Zeichnen', WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 500, 400,
0, 0, wc.hInstance, nil);

if hwnd = 0 then
begin
MessageBox(0, 'Fenster konnte nicht erstellt werden!', 'Fehler', MB_ICONERROR);
Halt(1);
end;

{ Fenster anzeigen }
ShowWindow(hwnd, SW_SHOWNORMAL);
UpdateWindow(hwnd);

{ Nachrichten-Schleife }
while GetMessage(msg, 0, 0, 0) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
end.
Erklärung des Programms:
Fensterklasse registrieren:
Zuerst wird eine Fensterklasse mit der Funktion RegisterClass registriert, die das Verhalten des Fensters definiert. Die WndProc-Prozedur wird als Fenster-Prozedur angegeben, die alle Nachrichten verarbeitet.
Fenster erstellen:
Mit der Funktion CreateWindow wird ein Fenster basierend auf der registrierten Fensterklasse erstellt. Wir definieren das Fenster als WS_OVERLAPPEDWINDOW, was ein einfaches, standardmäßiges Fenster ist.
Ellipse zeichnen:
In der WndProc-Prozedur, die auf das WM_PAINT-Ereignis reagiert, verwenden wir die Funktion Ellipse, um eine Ellipse zu zeichnen. Die Funktion erwartet die folgenden Parameter:
hdc: Der Grafikgerät-Kontext (HDC), der zum Zeichnen auf das Fenster verwendet wird.
left, top, right, bottom: Die Koordinaten des Rechtecks, das die Ellipse umgibt.
Nachrichtenschleife:
Die GetMessage-Schleife verarbeitet Windows-Nachrichten und sorgt dafür, dass das Fenster auf Benutzeraktionen reagiert und gleichzeitig die Ellipse angezeigt wird.
Details:
WM_PAINT: Wenn das Fenster neu gezeichnet werden muss (z. B. nach Minimieren und Wiederherstellen), wird diese Nachricht gesendet. Daraufhin wird die WndProc-Prozedur aufgerufen, um die Ellipse zu zeichnen.
BeginPaint und EndPaint: Diese Funktionen sind notwendig, um sicherzustellen, dass der Bereich zum Malen korrekt behandelt wird und alle Malvorgänge ordnungsgemäß abgeschlossen sind.
Ellipse(hdc, 50, 50, 400, 300): Dies ist der eigentliche Malbefehl. Hier wird eine Ellipse gezeichnet, deren Bounding-Box durch die Koordinaten (50, 50) (oben links) und (400, 300) (unten rechts) definiert wird.
Weitere Anpassungen:
Du kannst die Koordinaten der Ellipse anpassen, um sie an einer anderen Stelle oder in einer anderen Größe zu zeichnen.
Du könntest auch andere Formen oder zusätzliche Elemente hinzufügen, um dein Fenster zu erweitern.
Voraussetzung:

Dieses Programm benötigt FreePascal mit Windows-Support. Wenn du in einer IDE wie Lazarus arbeitest, sollte dieses Programm auf Windows gut funktionieren.

Ich hoffe, das hilft dir weiter! Wenn du weitere Fragen hast oder Anpassungen benötigst, lass es mich wissen!


Welcher Code ist davon lizenzrechtlich fragwürdig?

m.Fuchs hat geschrieben: 2.) Die Informationen werden kaum aus OpenSource-Quellcodes generiert, was man ja vielleicht noch unter der Lizenz als erlaubt ansehen könnten, sondern aus ganz vielen anderen Quellen, die dem nie zugestimmt haben.
3.) Woher weißt du dass keine lizenzrechtlich geschützten Codes verwendet wurden? Es wurden schon soviele illegale Datenquellen für die Trainingsdaten der LLM gefunden, da würde ich das nicht ausschließen.
Siehe oben. Bei der Frage nach Widows Quellcode verweigert Chatgpt die Antwort konkret und gibt nur das dokumentierte Windows API preis.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7281
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: Lazarus Codetools benutzen

Beitrag von af0815 »

Hat das was mit den Codetools zu tun ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

thosch
Beiträge: 334
Registriert: Mo 10. Jul 2017, 20:32

Re: Lazarus Codetools benutzen

Beitrag von thosch »

af0815 hat geschrieben: So 19. Apr 2026, 15:02 Hat das was mit den Codetools zu tun ?
nein, aber die Frage von m.fuchs doch auch nicht, der hat lizenzrechtliche Bedenken geäußert. Bestehen da etwa welche bei den Codetools? Ich bin von der Annahme ausgegangen dass die Codetools unter GPL oder einer andere freien Lizenz stehen und m.Fuchs hat gefragt, wie ich oder ein anderer User sicher stellen will dass kein propertiärer Code duch ChatGPT oder andere KI Programme verbreitet wird. Da habe ich einfach mal ChatGPT bemüht und eine Frage gestellt und gesehen dass @m.Fuchs's Bedenken unbegründet sind.

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 1344
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 4.99, FPC-Version: 3.3.1
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Lazarus Codetools benutzen

Beitrag von kralle »

Bleibt Ihr
1. Bitte beim Thema "Codetools"
2. Lasst Ihr bitte Voll-Zitate.
3. Postete hier keine OT Sitzungen mit einer "KI'.

kralle
OS: MX Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1

Mario Peters
Beiträge: 59
Registriert: Sa 26. Apr 2025, 22:41

Re: Lazarus Codetools benutzen

Beitrag von Mario Peters »

Enthält dieser Code lizenzrechtlich problematische Teile?:

Code: Alles auswählen

program FixUses83;

{$mode objfpc}{$H+}

uses
  Classes, SysUtils,
  LazFileUtils,
  CodeToolManager, CodeCache,
  Dos;

function theShortname(ofTheLongName: ShortString): String;
begin
  Result := ofTheLongName;
  if GetShortName(ofTheLongName) then
    Result := ofTheLongName;
end;

procedure ReplaceUses(const FN: string);
var
  Tool: TCodeTool;
  Code: TCodeBuffer;
  Units: TStrings;
  IntfUnits: String;
  ImpUnits: String;
  i: Integer;
  LongName, FileName, ShortName, ShortUnit: string;
  x,y,newx,newy: integer;
  NewTopLine: Integer;
  Identifier: PChar;
begin
  Units := TStringList.Create;
  Code := CodeToolBoss.LoadFile(FN, False, False);

  if Code = nil then
  begin
    Writeln('Cannot load ', FN);
    Exit;
  end;

  try
    { Datei parsen }
    if not CodeToolBoss.Explore(Code, Tool, false, false) then
    begin
      Writeln('Parse error in ', FN);
      Exit;
    end;

    { Uses lesen }
    if not CodeToolBoss.FindDeclarationOfIdentifier(Code,
  X,Y, Identifier, Code, NewX, NewY,
  NewTopLine) then
    begin
      Writeln('Cannot read uses in ', FN);
      Exit;
    end;

    { Interface uses }
    for i := 0 to Units.Count - 1 do
    begin
      LongName := Units[i];

      if CodeToolBoss.FindDeclarationOfIdentifier(Code,
  X,Y, Identifier, Code, NewX, NewY,
  NewTopLine) then
      begin
        ShortName := theShortname(FileName);
        ShortUnit := ChangeFileExt(ExtractFileName(ShortName), '');

        Writeln(LongName, ' -> ', ShortUnit);

        Code.Source :=
          StringReplace(
            Code.Source,
            LongName,
            ShortUnit,
            [rfIgnoreCase, rfReplaceAll]
          );
      end;
    end;

    Code.Save;

  finally

  end;
end;

procedure ScanProject(const Dir: string);
var
  SR: Sysutils.TSearchRec;
begin
  if Sysutils.FindFirst(Dir + DirectorySeparator + '*.pas', Sysutils.faAnyFile, SR) = 0 then
  repeat
    Writeln('Processing ', SR.Name);
    ReplaceUses(Dir + DirectorySeparator + SR.Name);
  until Sysutils.FindNext(SR) <> 0;

  Sysutils.FindClose(SR);

  if Sysutils.FindFirst(Dir + DirectorySeparator + '*.lpr', Sysutils.faAnyFile, SR) = 0 then
  repeat
    Writeln('Processing ', SR.Name);
    ReplaceUses(Dir + DirectorySeparator + SR.Name);
  until SysUtils.FindNext(SR) <> 0;

  SysUtils.FindClose(SR);
end;

begin
  if ParamCount < 1 then
  begin
    Writeln('Usage:');
    Writeln('  FixUses83 <project directory>');
    Halt;
  end;

  CodeToolBoss.SimpleInit('');

  ScanProject(ExpandFileName(ParamStr(1)));
end.

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 1344
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 4.99, FPC-Version: 3.3.1
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Lazarus Codetools benutzen

Beitrag von kralle »

Weil Ihr immer noch OffTopic seid, mache ich das Thema jetzt dicht.

Kralle
OS: MX Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1

Gesperrt