Thema: Delphi Pageproducer und IMG-Tag

Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#2

AW: Pageproducer und IMG-Tag

  Alt 2. Apr 2022, 16:43
Die Routine wird aufgerufen, wenn der Parser ein Tag entdeckt.

Wenn Du also 10 Bilder in der HTML-Datei hast, wird die Routine 10 mal aufgerufen und nicht einmal, um so "am Stück" alle 10 Tags zu ersetzen.

TagString kann immer nur einen Wert enthalten. Die Schleife ist da nicht wirklich zielführend. Klar kann man damit prüfen, ob das gelieferte Tag zufällig mit einem per Schleife durchprobierten Tag übereinstimmt. Aber das ist eigentlich nicht so wirklich der Sinn der Sache.

Zeig' uns bitte mal das zugrundeliegende HTML.

Ansonsten vergleiche bitte mal das statische und funktionierende HTML mit dem dynamisch per PageProducer erstellen HTML. Sind die identisch?

Eventuell kann es auch an den Pfadangaben zu den Bildern liegen.
Wird eine HTML-Datei im Browser geladen, dann werden die Pfade zu den Bildern ggfls. anders interpretiert, als bei einer dynamisch per Webserver zur Verfügung gestellten HTML-Seite.
Beim Laden einer Datei werden die Pfade ausgehend vom Pfad der Datei interpretiert, beim Laden über 'nen Webserver werden sie vom Webserver angefordert. Kann der Webserver die Dateien images/led_yellow_on.png und images/led_blue_on.png liefern? Wurde eine entsprechende Routine implementiert? Ggfls. muss HttpServerCommandGet entsprechend angepasst und ARequestInfo ausgewertet werden.

Momentan wird bei jeder Anforderung PageProducer.Content geliefert, auch bei den Bildern und die so erstellte HTML-Seite kann kein Browser als Bild darstellen.

Abgesehen davon:

Wenn nur zwei Bilder geliefert werden sollen, dann muss man die Tags nicht durchnummerieren. Der Name eines Tags kann mehrfach im HTML enthalten sein.
Delphi-Quellcode:
procedure TdmWebServer.PageProducerHTMLTag(Sender: TObject; Tag: TTag; const TagString: string; TagParams: TStrings; var ReplaceText: string);
begin
  if TagString = 'LEDIMGthen begin
    ReplaceText := 'images/led_yellow_on.png';
  end else if TagString = 'STRIMGthen begin
    ReplaceText := 'images/led_blue_on.png';
  end;
end;
Statt zehn Tags #LEDIMG1 .. #LEDIMG10 reicht es aus, wenn das Tag #LEDIMG zehn mal im HTML enthalten ist, kann aber auch beliebig weniger oder mehr sein. Bei Anpassungen im HTML muss man dann nicht an den Quelltext des Programmes ran. Jedes Tag #LEDIMG liefert dann images/led_yellow_on.png. Und wenn's mal 1000 werden, klappt das immer noch, bei der Schleifenvariante müsste man die Schleife dann ggfls. für dazugekommene Tags anpassen. Das ist nicht Sinn der Sache. Das gilt analog auch für das Tag #STRIMG.
  Mit Zitat antworten Zitat