HTML Dateien erzeugen

Für Fragen von Einsteigern und Programmieranfängern...
Andy Nightingale
Beiträge: 179
Registriert: Mo 13. Jan 2025, 12:11

HTML Dateien erzeugen

Beitrag von Andy Nightingale »

Hallo Leute,
als Anfänger teste ich so einiges. Auch dieses jetzt. Ich wollte 2 HTML Seiten erstellen im Verzeichnis des Projektes. Es läuft alles durch und es wird auch grün und erstellt eine Exe.- aber es funktioniert nicht. Vestehe nicht warum. Hier der Code.
uses
SysUtils, Classes, Forms, Controls, Graphics, Dialogs;

var
Form1: TForm1;

function GetExePath: string;
begin
Result := ExtractFilePath(ParamStr(0));
end;

procedure GenerateHtml(const PageName: string; const Content: string);
var
HtmlFile: TextFile;
begin
try
AssignFile(HtmlFile, IncludeTrailingPathDelimiter(GetExePath) + PageName + '.html');
Rewrite(HtmlFile);
WriteLn(HtmlFile, '<html><body>');
WriteLn(HtmlFile, Content);
WriteLn(HtmlFile, '</body></html>');
CloseFile(HtmlFile);
ShowMessage('HTML-Datei "' + PageName + '.html" wurde erfolgreich erstellt.');
except
on EInOutError do
ShowMessage('Fehler beim Erstellen der HTML-Datei: ' + PageName + '.html');
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
GenerateHtml('index', 'Willkommen auf meiner Webseite!');
GenerateHtml('about', 'Hier erfahrt ihr mehr über mich.');
end;

Komisch oder? Danke im voraus. Grüße

Benutzeravatar
Jorg3000
Lazarusforum e. V.
Beiträge: 359
Registriert: So 10. Okt 2021, 10:24
OS, Lazarus, FPC: Win64
Wohnort: NRW

Re: HTML Dateien erzeugen

Beitrag von Jorg3000 »

Hi!
Sieht auf'n ersten Blick nicht falsch aus. Was kommt denn für'ne Meldung?

Man könnte mit try ... finally arbeiten, um die Datei in jedem Fall zu schließen, aber das sollte zunächst keine Rolle spielen.

PS: Ich sehe gerade, dass du es in FormCreate aufrufst. Mach es mal lieber in einem Button-Klick.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6763
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: HTML Dateien erzeugen

Beitrag von af0815 »

Als Anregung - ich würde hier anfangen auf Streams zu setzen. https://www.freepascal.org/docs-html/rt ... tream.html und https://wiki.freepascal.org/TFileStream/de und auch hier, wie man das über eine Stringlist einfach machen kann viewtopic.php?t=5379

Ausserdem wird der Code hier im Forum lesbarer, wenn man Codetags verwendet. Siehe </> über dem Editorfenster.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Andy Nightingale
Beiträge: 179
Registriert: Mo 13. Jan 2025, 12:11

Re: HTML Dateien erzeugen

Beitrag von Andy Nightingale »

Jorg3000 hat geschrieben: Mo 27. Jan 2025, 10:47 Hi!
Sieht auf'n ersten Blick nicht falsch aus. Was kommt denn für'ne Meldung?

Man könnte mit try ... finally arbeiten, um die Datei in jedem Fall zu schließen, aber das sollte zunächst keine Rolle spielen.

PS: Ich sehe gerade, dass du es in FormCreate aufrufst. Mach es mal lieber in einem Button-Klick.
Ich komme leider nicht klar. Es ist ja nur ein Test, aber ich möchte mal ein Erfolgserlebnis in Lazarus ....keine Ahnung was hier nicht geht. Es kommt keine Fehlermeldung nix.
Was mache ich nur falsch? Im Anhang das Programm.
Dateianhänge
Webtest.zip
(342.07 KiB) 34-mal heruntergeladen

Benutzeravatar
Jorg3000
Lazarusforum e. V.
Beiträge: 359
Registriert: So 10. Okt 2021, 10:24
OS, Lazarus, FPC: Win64
Wohnort: NRW

Re: HTML Dateien erzeugen

Beitrag von Jorg3000 »

Hallo nochmal!

Du bist ein Opfer deines eigenen Copy & Paste geworden.
In deiner Unit gibt es zwei implementation-Teile und zwei mal die Definition von TForm1 = class(TForm) und ihren Methoden.

Und es wird blöderweise wohl der Teil ausgeführt, in dem die Prozeduren ohne Inhalt sind, deshalb passiert nichts, nicht mal eine Fehlermeldung.

Es ist spannend, dass der Compiler nicht meckert! :shock:
Der Compiler hört wohl nach dem ersten "end." auf und ignoriert den übrigen Code - ausgerechnet aber jener ignorierte, zweite Teil ist der mit dem eigentlichen Inhalt. :D
Grüße, Jörg

Andy Nightingale
Beiträge: 179
Registriert: Mo 13. Jan 2025, 12:11

Re: HTML Dateien erzeugen

Beitrag von Andy Nightingale »

Kannst du mir das geändert mal zusenden damit ich verstehe was du meinst...Ist nicht einfach eine neue Sprache zu lernen.

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

Re: HTML Dateien erzeugen

Beitrag von theo »

In der Form ist auch der Eventhandler nicht eingehägt.

Fang einfach noch mal mit einem neuen Projekt an.
Dann legst du einen Button auf das Formular und doppelklickst den.
Dann hast du ein neues Gerüst wo du deinen Code reinkopieren kannst.

Zur Erklärung von Jorg3000s Anmerkung: In deinem Code gibt es zweimal "TForm1 = class(TForm)" und andere Merkwürdigkeiten. Das ist nicht gut.

Andy Nightingale
Beiträge: 179
Registriert: Mo 13. Jan 2025, 12:11

Re: HTML Dateien erzeugen

Beitrag von Andy Nightingale »

theo hat geschrieben: Mo 27. Jan 2025, 14:02 In der Form ist auch der Eventhandler nicht eingehägt.

Fang einfach noch mal mit einem neuen Projekt an.
Dann legst du einen Button auf das Formular und doppelklickst den.
Dann hast du ein neues Gerüst wo du deinen Code reinkopieren kannst.

Zur Erklärung von Jorg3000s Anmerkung: In deinem Code gibt es zweimal "TForm1 = class(TForm)" und andere Merkwürdigkeiten. Das ist nicht gut.
Wie machst du das denn? Also wenn du einen Code woanders kopierst? Also wenn ich z.B. ein Button erstelle, dann macht im Codebreich sofort ein Event vom Programm selbst. Wie kann ich das denn unterbinden und wie kann ich das Manuell erstellen lassen? Auch wenn ich ein Projekt neu mache, dann stehen schon sachen drin. Was bedeuten denn diese Sachen? Grüße

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6763
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: HTML Dateien erzeugen

Beitrag von af0815 »

Andy Nightingale hat geschrieben: Mo 27. Jan 2025, 15:49 Wie machst du das denn? Also wenn du einen Code woanders kopierst? Also wenn ich z.B. ein Button erstelle, dann macht im Codebreich sofort ein Event vom Programm selbst. Wie kann ich das denn unterbinden und wie kann ich das Manuell erstellen lassen? Auch wenn ich ein Projekt neu mache, dann stehen schon sachen drin. Was bedeuten denn diese Sachen? Grüße
Lazarus ist ein RAD-Tool. Daher muss man sich an die Spielregeln halten.

Das pas-File und das lfm-File bei GUI-Sachen gehören dazu. Und im Hintergrund werden die grafischen Elemente wie Button über das lfm File mit dem pas synchron gehalten. Kopierst du "irgendwas" aus anderen Quelltext heraus und in eine Routine hinein, so ist noch lange kein funktionierender Eventhandler damit gemacht - weil hat das nicht richtig mit dem lfm zusammengestimmt ist.

Wenn du einen Eventhandler sauber machen willst, so mache zuerst mit einem Doppelclick auf das Element oder im Objectinspektor (OI) die Grundroutine, die wird automatisch dann richtig im lfm UND pas File erzeugt. Dort kannst dann deinen Code hineinposten.

Sei gewarnt, pfusche nicht im lfm manuell herum, solange du nicht absolut weisst was du da tust !!! Es kann sein, das dann das lfm und das pas defekt sind, wenn du nicht tiefer von den internas von Lazarus bescheid weist.

Wenn du ein neues Form anlegst (zB. über Datei neu), so wird dir ein funktionierender Rumpf angelegt, das heisst pas und lfm. Nur pas zum Beispiel wenn eine Unit ist, die ohne grafische Komponenten auskommt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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

Re: HTML Dateien erzeugen

Beitrag von theo »

Andy Nightingale hat geschrieben: Mo 27. Jan 2025, 15:49 Was bedeuten denn diese Sachen? Grüße
Das kannst du z..B. hier nachlesen:
http://svg-demo.rf.gd/lazarus/unit1.html?i=1

Es gibt bestimmt noch andere Quellen.

Andy Nightingale
Beiträge: 179
Registriert: Mo 13. Jan 2025, 12:11

Re: HTML Dateien erzeugen

Beitrag von Andy Nightingale »

af0815 hat geschrieben: Mo 27. Jan 2025, 16:46
Andy Nightingale hat geschrieben: Mo 27. Jan 2025, 15:49 Wie machst du das denn? Also wenn du einen Code woanders kopierst? Also wenn ich z.B. ein Button erstelle, dann macht im Codebreich sofort ein Event vom Programm selbst. Wie kann ich das denn unterbinden und wie kann ich das Manuell erstellen lassen? Auch wenn ich ein Projekt neu mache, dann stehen schon sachen drin. Was bedeuten denn diese Sachen? Grüße
Lazarus ist ein RAD-Tool. Daher muss man sich an die Spielregeln halten.

Das pas-File und das lfm-File bei GUI-Sachen gehören dazu. Und im Hintergrund werden die grafischen Elemente wie Button über das lfm File mit dem pas synchron gehalten. Kopierst du "irgendwas" aus anderen Quelltext heraus und in eine Routine hinein, so ist noch lange kein funktionierender Eventhandler damit gemacht - weil hat das nicht richtig mit dem lfm zusammengestimmt ist.

Wenn du einen Eventhandler sauber machen willst, so mache zuerst mit einem Doppelclick auf das Element oder im Objectinspektor (OI) die Grundroutine, die wird automatisch dann richtig im lfm UND pas File erzeugt. Dort kannst dann deinen Code hineinposten.

Sei gewarnt, pfusche nicht im lfm manuell herum, solange du nicht absolut weisst was du da tust !!! Es kann sein, das dann das lfm und das pas defekt sind, wenn du nicht tiefer von den internas von Lazarus bescheid weist.

Wenn du ein neues Form anlegst (zB. über Datei neu), so wird dir ein funktionierender Rumpf angelegt, das heisst pas und lfm. Nur pas zum Beispiel wenn eine Unit ist, die ohne grafische Komponenten auskommt.
Danke sehr für die Erklärung

Andy Nightingale
Beiträge: 179
Registriert: Mo 13. Jan 2025, 12:11

Re: HTML Dateien erzeugen

Beitrag von Andy Nightingale »

theo hat geschrieben: Mo 27. Jan 2025, 17:12
Andy Nightingale hat geschrieben: Mo 27. Jan 2025, 15:49 Was bedeuten denn diese Sachen? Grüße
Das kannst du z..B. hier nachlesen:
http://svg-demo.rf.gd/lazarus/unit1.html?i=1

Es gibt bestimmt noch andere Quellen.
Das hat mir sehr geholfen zu verstehen was da denn passiert. Als Anfänger braucht man eben irgendwie was optisches zum sehen und verstehen. Danke

wp_xyz
Beiträge: 5129
Registriert: Fr 8. Apr 2011, 09:01

Re: HTML Dateien erzeugen

Beitrag von wp_xyz »

Wenn du lieber Videos guckst als Anleitungen zu lesen, ist dieser Kanal vielleicht etwas für dich: https://www.youtube.com/watch?v=VnShzVDv85Y
Zuletzt geändert von wp_xyz am Mo 27. Jan 2025, 18:49, insgesamt 1-mal geändert.

Andy Nightingale
Beiträge: 179
Registriert: Mo 13. Jan 2025, 12:11

Re: HTML Dateien erzeugen

Beitrag von Andy Nightingale »

Danke eine gute Idee :D

Mathias
Beiträge: 6899
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: HTML Dateien erzeugen

Beitrag von Mathias »

Sei gewarnt, pfusche nicht im lfm manuell herum, solange du nicht absolut weisst was du da tust !!! Es kann sein, das dann das lfm und das pas defekt sind, wenn du nicht tiefer von den internas von Lazarus bescheid weist.
Da stimme ich dir zu. Wen man manuell etwas ändern will, erzeugt man am besten die Komponente dynamisch.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten