pas2js - Text laden

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Mathias
Beiträge: 6210
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

pas2js - Text laden

Beitrag von Mathias »

Wieso lädt es mir die Textdatei nicht ?
Der Code kommt nicht mal bei "Writeln('Nach Laden:');" an, somit muss es beim Laden stecken geblieben sein.

Code: Alles auswählen

uses
  browserconsole, browserapp, JS, Classes, SysUtils, Web;

var
  canvas: TJSHTMLCanvasElement;
  s: string;

begin
  canvas := TJSHTMLCanvasElement(document.createElement('canvas'));
  canvas.Width := 640;
  canvas.Height := 480;
  document.body.appendChild(canvas);

  Writeln('Vor Laden:'); // Kommt
  s := document.getElementById('project1.lpr').textContent;
  Writeln('Nach Laden:'); // Kommt nicht mehr
  Writeln(s);
end.    
Im Anhang der ganze Code.
Dateianhänge
File_Test.zip
(184.5 KiB) 55-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

PascalDragon
Beiträge: 834
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: pas2js - Text laden

Beitrag von PascalDragon »

Mathias hat geschrieben:
Mi 3. Jan 2024, 19:26
Wieso lädt es mir die Textdatei nicht ?
Der Code kommt nicht mal bei "Writeln('Nach Laden:');" an, somit muss es beim Laden stecken geblieben sein.

Code: Alles auswählen

uses
  browserconsole, browserapp, JS, Classes, SysUtils, Web;

var
  canvas: TJSHTMLCanvasElement;
  s: string;

begin
  canvas := TJSHTMLCanvasElement(document.createElement('canvas'));
  canvas.Width := 640;
  canvas.Height := 480;
  document.body.appendChild(canvas);

  Writeln('Vor Laden:'); // Kommt
  s := document.getElementById('project1.lpr').textContent;
  Writeln('Nach Laden:'); // Kommt nicht mehr
  Writeln(s);
end.    
Im Anhang der ganze Code.
Du bist dir gewahr, dass die DOM Funktion getElementById aus dem HTML DOM das HTML-Element herausholt, was in seinem id-Tag den übergebenen Wert (in dem Fall project1.lpr) hat? Da deine HTML-Datei kein entsprechendes HTML-Element hat, gibt dir die Funktion Nil zurück und der Zugriff auf textContent macht demnach bumm. Du solltest in der Entwicklerkonsole deines Browsers eine entsprechende Fehlermeldung sehen können.
Wenn du mit pas2js arbeitest und es über stupide Programme, die einfach nur Write und Freunde verwenden, dann musst du dich mit Konzepten des Webs wie DOM, HTML und CSS auseinandersetzen. Die Mozilla Dokumentation ist dann zum Beispiel ein sehr guter Freund, so wie es das MSDN für Windows Entwickler ist.
FPC Compiler Entwickler

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

Re: pas2js - Text laden

Beitrag von theo »

Das ist genau das Problem.
Ich kann mir vorstellen, dass die Entwicklung des Pas2js Transpilers eine spannende Sache war/ist, aber verstehe bis heute nicht, für wen/was das eigentlich gedacht ist.
Wer keine Ahnung hat von Web, HTML, CSS, DOM, JS, PHP... der kann auch mit Pas2js nichts Vernünftiges anfangen und wer eine Ahnung hat, für den ist es nur ein weiterer Umweg.
Ausser dem "Proof of Concept" und "Hello World" sehe ich da nicht viel.
Ich hoffe immer noch, dass ich mich irre... :wink:

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 338
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon (Windows wenn notwendig), Lazarus 3.0 FPC 3.3.1

Re: pas2js - Text laden

Beitrag von Niesi »

Nach meiner Meinung sind die Hauptproblem die fehlende Dokumentation und die fehlenden Tutorials.
Ich interessiere mich seit 2018 für das Thema, aber es mangelte immer an Wissen bei mir. jetzt will ich mich mal durchbeißen, das Thema ist wirklich cool, ich habe "aufregende" Ideen. Allerdings möchte ich die Web GUI Applications nutzen, also mit visuellem Design der Oberflächen. Einfach, damit ich genug Zeit für meine eigentliche Aufgabe habe und nicht noch Fenster, Editfelder und so durch Quellcode erzeugen muss.

Das soll jetzt keine Kritik sein, es ist eine Tatsachenbeschreibung ... :lol:
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

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

Re: pas2js - Text laden

Beitrag von Mathias »

Ich kann mir vorstellen, dass die Entwicklung des Pas2js Transpilers eine spannende Sache war/ist, aber verstehe bis heute nicht, für wen/was das eigentlich gedacht ist.
Für eine WebGL-Animation ist es eine sehr tolle Sache. Ich denke, mit pas2js ist es der einfachste Weg um eine Web-Animation zu erstellen.
Wen man mal den Trick draussen hat, geht es fast so einfach wie auf dem Desktop.
Was noch ein Tüpfli auf dem i wäre, wen WebGL2 unterstützt würde.

Zum Ursprünglichen Thema zurück, das laden der Datei habe ich hingekriegt.

Code: Alles auswählen

  var
    xhr: TJSXMLHttpRequest;

    procedure LocalLoad(aEvent: TEventListenerEvent);
    var
      s: string;
    begin
      if (xhr.status = 200) then  begin
        s := xhr.responseText;
        Writeln(s);
      end;
    end;

  begin
    Writeln(aEvent.target.Properties['id']);
    xhr := TJSXMLHttpRequest.New;
    xhr.addEventListener('load', @LocalLoad);
    xhr.Open('GET', 'project1.lpr');
    xhr.send;    
Du bist dir gewahr, dass die DOM Funktion getElementById aus dem HTML DOM das HTML-Element herausholt, was in seinem id-Tag den übergebenen Wert (in dem Fall project1.lpr) hat?
Da wurde ich in die Irre geführt, in einer Demo stand "vertex.glsl" und dda dachte ich, die sei eine Datei, dabei war es die id, welche in die HTML-Datei zeigte.
Was noch recht speziell ist, das Programm kommt am Ende an, und läuft trotzdem weiter. Bei einer normalen App ist bei "end." fertig.

Im Anhang noch ein funktionierendes Beispiel.
Dateianhänge
File_Test.zip
(170.62 KiB) 50-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten