![]() |
HTML und Delphi
hallo.
wie kann ich z.b. ein stringgrid in ein html-dokument exportieren. ich meine damit nicht einfach so , sondern damit die html-seite auch formatierungen bekommt. kann man das mit dem "pageproducer" realisieren oder ist es besser eine datei erstellen und alles per hand reinschreiben, z.B. die ganzen tags <html>, <body>, usw.
Delphi-Quellcode:
auf den ersten blick würde ich sasgen das man eine datei erstellen soll..
var htmlfile:textfile;
begin assignfile(htmlfile, 'bsp.html'); rewrite(htmlfile); writeln(htmlfile, '<html>'); writeln(htmlfile, '<body>'); . . usw. . closefile(htmlfile); end; ist es zu empfehlen, es so zu machen wie der angegebene code? was würdest du machen? oder ist xml eine alternative zu html? aber da hab ich noch keine ahnung. die erstellte seite soll in einem browser dargestellt werden. |
Re: HTML mit Delphi
oder die frage anders formuliert: wie würdest du aus delphi heraus eine html-datei erstellen!?
|
Re: HTML und Delphi
also ich generiere die html seite in einem Memo oder wo auch immer, schreibe p. programm alles so rein wie wenn ich es mit der hand machen würde. schön step by step und vorderhufigerweise und speichere das als html seite ab.
da weiß ich dann was drinn'steht. fredi |
Re: HTML und Delphi
also wie im text edditior geschrieben?
wenn ja, dann ist dass simple..
Delphi-Quellcode:
et voila alles was in memo1 steht wird als bla.htm gespeichert.
memo1.Lines.SaveToFile(bla.htm);
vorher kannste ja memo1.lines.add('string'); benutzen im inhalt zuzufügen. |
Re: HTML und Delphi
Also wenn du es ohne MEmo oder dergleichen machen willst:
Ich würde es entweder so machen oder vielleicht mit einer TStringlist. Allerdings ist die wieder auf eine bestimmte Größe beschränkt (aber das Memo auch ;-)) Sonst wäre vielleicht TFileStream noch ein Stichwort. Habe allerdings noch nicht sehr oft mit gearbeitet... |
Re: HTML und Delphi
@alexander
TStringList und TStrings(TMemo) reichen doch vollkommen aus, da passen doch glaube bis zu 2 GB rein. Ich weis ja nich was du für HTML-Dateien erstellen würdest. :mrgreen: Also ich mache das so ähnlich wie markon es schon in seinem Beispiel gepostest hat. Also direkt in die Datei. |
Re: HTML und Delphi
Machen die nicht standardmäßig bei 64KB Schluss?
Obwohl das eigentlich auch schon so gut wie reichen würde ;-) |
Re: HTML und Delphi
Bei mir waren gerade 16,8 MB in einem Memo drin.
TStringList hat wie String 32-Bit für dir Größe und das sind ja 2 GB - 1 Byte. |
Re: HTML und Delphi
mhm dann habe ihc mich wohl vertan...
Bist du dir ganz sicher?, dass das Memo standardmäßig so viel unterstützt? |
Re: HTML und Delphi
Jo.
Wirst es wohl nicht ganz ausnutzen können, ist halt nur ein Theoretischer Wert. Wenn dein Virtueller Arbeitsspeicher voll ist, ist auch schon Schluß. (die meißten werden weniger als 1 GB haben) |
Re: HTML und Delphi
@ alexander
hab da grad mal ini der hilfe nachgeschaut. hab folgendes zum memo gefunden: Zitat:
Delphi-Quellcode:
frage: sieht jemand von euch auf den ersten blick ob man am code etwas verbessern kann ?
assignfile(htmlfile, 'bsp.html');
rewrite(htmlfile); writeln(htmlfile, '<html>'); writeln(htmlfile, '<head>'); writeln(htmlfile, '<title>irgend ne headline</title>'); writeln(htmlfile, '</head>'); writeln(htmlfile, '<body>'); writeln(htmlfile, ' '); writeln(htmlfile, '<center>'); adoquery1.DisableControls; adoquery1.First; writeln(htmlfile, '<table border=1 CELLPADDING=1>'); bgfarbe := 'BGCOLOR="#BBBBBB"'; writeln(htmlfile, '<tr '+bgfarbe+'><td width=10></td><td width=120>Verein</td><td width=50 ALIGN=center>Spiele</td><td width=50 ALIGN=center>TorP</td><td width=50 ALIGN=center>TorM</td><td width=50 ALIGN=center>TorDiff</td><td width=50 ALIGN=center>Punkte</td></tr>'); while not adoquery1.Eof do begin {dynamische groesse, kommt auf die anzahl der datensaetze an} i:=i+1; if i mod 2 = 0 then bgfarbe := 'BGCOLOR="#CCCCCC"' {zeilenhintergrund unterschiedlich} else bgfarbe := 'BGCOLOR="#CCCCDD"'; write(htmlfile, '<tr '+bgfarbe+'><td ALIGN=center>'+inttostr(i)+ '</td>'); write(htmlfile, '<td>'+adoquery1.FieldByName('Name').AsString+ '</td>'); write(htmlfile, '<td ALIGN=center>'+inttostr(adoquery1.FieldByName('Spiele').asinteger)+ '</td>'); write(htmlfile, '<td ALIGN=center>'+inttostr(adoquery1.FieldByName('TorP').AsInteger)+ '</td>'); write(htmlfile, '<td ALIGN=center>'+inttostr(adoquery1.FieldByName('TorM').AsInteger)+ '</td>'); write(htmlfile, '<td ALIGN=center>'+inttostr(adoquery1.FieldByName('TorDiff').AsInteger)+ '</td>'); write(htmlfile, '<td ALIGN=center>'+inttostr(adoquery1.FieldByName('Punkte').AsInteger)+'</td>'); writeln(htmlfile, '</tr>'); adoquery1.Next; end;{end-while} writeln(htmlfile, '</table>'); adoquery1.EnableControls; writeln(htmlfile, '</center>'); writeln(htmlfile, '</p>'); writeln(htmlfile, '</body>'); writeln(htmlfile, '</head>'); closefile(htmlfile); |
Re: HTML und Delphi
Den Absatz könnteste noch weglassen, da du ja eh nur einen hast.
Delphi-Quellcode:
Sind aber auch nur 11 Byte gespart.
writeln(htmlfile, '
'); writeln(htmlfile, '</p>'); Es gäbe auch noch die Möglichkeit bei der Farbe zu sparen.
Delphi-Quellcode:
Jedes mal 2 Byte.
BGCOLOR="#CCCCCC" => BGCOLOR=#CCCCCC
:oops: Die 64k kannte ich noch nicht. Bin vor Win 2000 noch nicht an diese Grenze gestoßen. |
Re: HTML und Delphi
@ himitsu
danke für deinen vorschlag. @ all kann man am code selber etwas ändern, ich meine damit ob ich etwas zu umständlich programmiert habe? |
Re: HTML und Delphi
Moin,
ich persönlich würde an deiner Stelle eher den Weg über "Templates" gehen. Wenn du jetzt auch nur das kleinste bisschen am Layout oder dem Aufbau deiner Seite ändern willst, dann musst du jedesmal komplett den Source da oben umbasteln. Als Template-Beispiel:
Code:
Das wäre mal was ganz simples als Idee. Dieses Template kann dann entweder als Datei bei der Anwendung mitgeliefert werden, so dass der User das anpassen kann, oder man packt es z.B in die Resourcen der Anwendung mit rein.
<html>
<head> <title>%TITLE%</title> </head> <body bgcolor="%BGCOLOR%"> <div align="center"> <h1 class="dp_rulez">%HEADLINE%</h1> ... Wenn man das Template dann in eine StringVariable reingeladen hat, dann ist der Rest (bei dieser einfachen Version) nur noch Search & Replace...
Delphi-Quellcode:
Auch so Dinge wie Loops (Tabellenzeilen z.B.) sind möglich, aber da muss man dann noch ein wenig mehr an Gehirnschmalz rein investieren.
StringReplace(sTemplate, '%TITLE%', sTitle, [rfReplaceAll, rfIgnoreCase]);
Gruß Wormid |
Re: HTML und Delphi
Zitat:
|
Re: HTML und Delphi
Das mit den Templates ist meiner Meinung nach die beste Möglichkeit. Du lieferst mit dem Quellcode die Template-Dateien mit, und aus denen generierst du dir dann die HTML-Seite. Logisch musst du die Variablen im Template noch mit den richtigen Werten ersetzen, doch das dürfte eben wie schon gesagt mit StringReplace kein Problem sein. Falls du noch Hilfe zu den Templates benötigst, schick mir eine PN...
|
Re: HTML und Delphi
@Wormid
Der "HTML-Standard" ist mehr ein "Vorschlag" zum Aufbau einer HTML-Seite. HTML ist ja keine statische Sprache wie z.B. Delphi, wo alles in einer bestimmten Art aufgebaut sein muss. Er läßt einem eine gewisse Freiheit beim schreiben. Modemnutzer freut es ja, wenn die zu übertragende Datenmenge geringer wird, auch wenn es nur so ein biss'l ist, denn im Grossen und Ganzen läppert sich da einiges zusammen. Und da das (") eine Sache ist, bei der die Browser flexiebel sind, ist das doch verkraftbar. :zwinker: ![]() |
Re: HTML und Delphi
Oh oh... das der HTML-Standard nur ein "Vorschlag" ist, das habe ich ja noch nie gehört... :shock:
Eigentlich ist das schon ein Standard - ein Standard an den sich nur leider kaum jemand hält... Aber im Grunde führt das ein wenig vom Thema weg, also lassen wir das! :stupid: |
Re: HTML und Delphi
eine gewisse dynamität erreiche ich auch einfach mit einem string:
Delphi-Quellcode:
das mit dem StringReplace kapier ich nich so richtig:
var TITLE : string;
begin assignfile(htmlfile, 'bsp.html'); rewrite(htmlfile); writeln(htmlfile, '<html>'); writeln(htmlfile, '<head>'); TITLE := 'New Title'; // irgend ein text writeln(htmlfile, '<title>' + TITLE + '</title>'); writeln(htmlfile, '</head>'); writeln(htmlfile, '<body>'); writeln(htmlfile, ' '); writeln(htmlfile, '<center>'); ... usw ...
Delphi-Quellcode:
wie muss die zeile für mein oben aufgeführtes beispiel aussehen? wo muss die zeile stehen? :gruebel:
StringReplace(sTemplate, '%TITLE%', sTitle, [rfReplaceAll, rfIgnoreCase]);
|
Re: HTML und Delphi
In deinem Beispiel kannst du das so nicht verwenden...
Delphi-Quellcode:
Dieser Code ist jetzt ungestestet und nur mal eben so hingehackt... aber ich hoffe, er verdeutlicht wie ich es funzen soll.
var
S: String; F: Textfile; begin // Richtig Sinn macht das nur, wenn man "S" entweder aus einer Datei oder einer Resource lädt! // Hier jetzt der einfachheit halber einfach mal fest zugewiesen. S := '<html>' + #13#10 + '<head><title>%TITLE%</title></head>' + #13#10 + '<body bgcolor="%BGCOLOR%">...'; // usw und so fort... S := StringReplace(S, '%TITLE%', 'Dies ist der Seitentitel', [rfReplaceAll, rfIgnoreCase]); S := StringReplace(S, '%BGCOLOR%', '#beef00', [rfReplaceAll, rfIgnoreCase]); // ... so lange weitermachen, bis alle Variablen ersetzt sind AssignFile(F, 'foo.html'); Rewrite(F); Write(F, S); CloseFile(F); end; Gruß Wormid |
Re: HTML und Delphi
@ wormid
dank dir. jetzt hab ich die funktionsweise des StringReplace kapiert :thuimb: |
Re: HTML und Delphi
und im menu das templentate in einer memo, damit ein user das bearbeiten kann mitner legende der %bla% -Abk.
CrashMan |
Re: HTML und Delphi
Ju hu doch richtig mit den 64KB ;-)
Das mit den Templates ist wirklich die beste Idee. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz