Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi HTML und Delphi (https://www.delphipraxis.net/11306-html-und-delphi.html)

markon 4. Nov 2003 08:17


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:
var htmlfile:textfile;
begin
 assignfile(htmlfile, 'bsp.html');
 rewrite(htmlfile);
 writeln(htmlfile, '<html>');
 writeln(htmlfile, '<body>');
  .
  . usw.
  .
 closefile(htmlfile);
end;
auf den ersten blick würde ich sasgen das man eine datei erstellen soll..

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.

markon 4. Nov 2003 12:56

Re: HTML mit Delphi
 
oder die frage anders formuliert: wie würdest du aus delphi heraus eine html-datei erstellen!?

fredi 4. Nov 2003 13:35

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

Skyruner2 4. Nov 2003 14:08

Re: HTML und Delphi
 
also wie im text edditior geschrieben?

wenn ja, dann ist dass simple..

Delphi-Quellcode:
memo1.Lines.SaveToFile(bla.htm);
et voila alles was in memo1 steht wird als bla.htm gespeichert.

vorher kannste ja memo1.lines.add('string'); benutzen im inhalt zuzufügen.

Alexander 4. Nov 2003 18:14

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...

himitsu 4. Nov 2003 18:37

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.

Alexander 4. Nov 2003 18:39

Re: HTML und Delphi
 
Machen die nicht standardmäßig bei 64KB Schluss?

Obwohl das eigentlich auch schon so gut wie reichen würde ;-)

himitsu 4. Nov 2003 18:47

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.

Alexander 4. Nov 2003 18:51

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?

himitsu 4. Nov 2003 18:57

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)

markon 5. Nov 2003 08:27

Re: HTML und Delphi
 
@ alexander

hab da grad mal ini der hilfe nachgeschaut. hab folgendes zum memo gefunden:
Zitat:

Note: Under Win 9x, there is a limit of 64k of text for this control.
hab mich entschieden die werte direkt in eine datei zu schreiben, ohne memo.
Delphi-Quellcode:
 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);
frage: sieht jemand von euch auf den ersten blick ob man am code etwas verbessern kann ?

himitsu 5. Nov 2003 09:24

Re: HTML und Delphi
 
Den Absatz könnteste noch weglassen, da du ja eh nur einen hast.
Delphi-Quellcode:
writeln(htmlfile, '

');
writeln(htmlfile, '</p>');
Sind aber auch nur 11 Byte gespart.

Es gäbe auch noch die Möglichkeit bei der Farbe zu sparen.
Delphi-Quellcode:
BGCOLOR="#CCCCCC" => BGCOLOR=#CCCCCC
Jedes mal 2 Byte.



:oops: Die 64k kannte ich noch nicht. Bin vor Win 2000 noch nicht an diese Grenze gestoßen.

markon 5. Nov 2003 10:56

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?

Wormid 5. Nov 2003 11:13

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:
<html>
<head>
  <title>%TITLE%</title>
</head>

<body bgcolor="%BGCOLOR%">

<div align="center">
<h1 class="dp_rulez">%HEADLINE%</h1>

...
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.

Wenn man das Template dann in eine StringVariable reingeladen hat, dann ist der Rest (bei dieser einfachen Version) nur noch Search & Replace...

Delphi-Quellcode:
  StringReplace(sTemplate, '%TITLE%', sTitle, [rfReplaceAll, rfIgnoreCase]);
Auch so Dinge wie Loops (Tabellenzeilen z.B.) sind möglich, aber da muss man dann noch ein wenig mehr an Gehirnschmalz rein investieren.

Gruß

Wormid

Wormid 5. Nov 2003 11:17

Re: HTML und Delphi
 
Zitat:

Zitat von himitsu
Es gäbe auch noch die Möglichkeit bei der Farbe zu sparen.
Delphi-Quellcode:
BGCOLOR="#CCCCCC" => BGCOLOR=#CCCCCC
Jedes mal 2 Byte.

Aber wenn er sich an html-Standards halten möchte, dann kann man eben die "" nicht weglassen... :warn:

alcaeus 5. Nov 2003 11:54

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...

himitsu 5. Nov 2003 12:13

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:

http://www.FrankNStein.de/peitsch.gifJetzt nur nicht schlagen. Ich bin schon dafür, das man diesen Standard einhällt, jeden falls solange es wirklich sinnvoll und notwendig ist.

Wormid 5. Nov 2003 12:27

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:

markon 5. Nov 2003 13:21

Re: HTML und Delphi
 
eine gewisse dynamität erreiche ich auch einfach mit einem string:
Delphi-Quellcode:
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 ...
das mit dem StringReplace kapier ich nich so richtig:
Delphi-Quellcode:
StringReplace(sTemplate, '%TITLE%', sTitle, [rfReplaceAll, rfIgnoreCase]);
wie muss die zeile für mein oben aufgeführtes beispiel aussehen? wo muss die zeile stehen? :gruebel:

Wormid 5. Nov 2003 14:17

Re: HTML und Delphi
 
In deinem Beispiel kannst du das so nicht verwenden...

Delphi-Quellcode:
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;
Dieser Code ist jetzt ungestestet und nur mal eben so hingehackt... aber ich hoffe, er verdeutlicht wie ich es funzen soll.

Gruß

Wormid

markon 5. Nov 2003 14:24

Re: HTML und Delphi
 
@ wormid

dank dir. jetzt hab ich die funktionsweise des StringReplace kapiert :thuimb:

CrashMan 5. Nov 2003 15:57

Re: HTML und Delphi
 
und im menu das templentate in einer memo, damit ein user das bearbeiten kann mitner legende der %bla% -Abk.

CrashMan

Alexander 5. Nov 2003 18:28

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 03:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz