Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Memo in Html exportieren


free4all - So 15.10.06 13:36
Titel: Memo in Html exportieren
Hi Leute also erstmal respekt zu diesem Forum, ich hab hier echt schon ne menge gefunden...

doch jetzt muss ich mal was fragen, ich hoffe ihr könnt mir helfen.

also...

Ich möchte gern mit hilfe eines Memo's eine Htmldatei erstellen.

Nur soll der Code nicht sichtbar sein, d.H. man soll den Text normal ins feld schreiben können, ein Edit-feld für den Titel haben und dadurch dann eine komplette Html datei bekommen.

zu den Fragen:

1. Wie kann ich den kompletten Inhalt eines Memofeldes auslesen und korriegieren (Zeilenumbrüche mit<br> umändern, ä mit &auml;...)
2. Die datei im Nachhinein als html datei speichern...

wäre wirklich nett wenn ihr mir helfen könntet sitz schon seit freitag und probiere :(

Danke im Vorraus...

greetz free4all


Marco D. - So 15.10.06 13:41

Du gehst in einer for-Schleife alle Zeilen durch und mit StringReplace oder ReplaceString (:gruebel:) ersetzt du z.B. ä durch &auml;.


free4all - So 15.10.06 13:43

wow... is das ein cooles Forum... :D

Danke das du so schnell geantwortet hast...

aber.. ich habe noch nie mit einer for schleife gearbeitet...

könntest du mir bitte ein beispiel posten??

TH free4all


DarkLord05 - So 15.10.06 13:44

und speichern kannste mit:


Delphi-Quelltext
1:
memo1.saveToFile("index.html");                    


Marco D. - So 15.10.06 13:46


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
//am besten lokal deklarieren
var i: integer;

for i := 0 to memo1.lines.count - 1 do
begin
  //tue hier, was auch immer du willst
end;


ZeitGeist87 - So 15.10.06 13:46


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var i: integer; //deine Zählervariable für die schleife

//Schleife beginnt bei 1 (1. Zeile im Memo und geht bis zur letzten des selbigen)
for i:= 1 to deinMemo.lines.count do
begin
 //mach irgendwas
end;


LG
Stefan


Marco D. - So 15.10.06 13:48

user profile iconZeitGeist87 hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var i: integer; //deine Zählervariable für die schleife

//Schleife beginnt bei 1 (1. Zeile im Memo und geht bis zur letzten des selbigen)
for i:= 1 to deinMemo.lines.count do
begin
 //mach irgendwas
end;


LG
Stefan

Listeinindex überschreitet das Maximum! :lol:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var i: integer; //deine Zählervariable für die schleife

//Schleife beginnt bei 1 (1. Zeile im Memo und geht bis zur letzten des selbigen)
for i:= 1 to deinMemo.lines.count-1 do
begin
 //mach irgendwas
end;


free4all - So 15.10.06 13:49

o.O Hallo? Boah dieses Forum ist ja der hammer!

Ok danke an euch... Ich probier's gleich aus...

1000 Dank... ich hab meine neue Startseite gefunden! *lach*

bis dann byebye free4all


ZeitGeist87 - So 15.10.06 13:52

gar nicht wahr marco =)


Delphi-Quelltext
1:
2:
3:
//bei der bearbeitung in der schleife einfach
memo.lines.strings[i-1];
//wenn zu drauf zugreifst^^


LG
Stefan


free4all - So 15.10.06 13:53

Halt hab noch eine Frage...(sry)

Wie ist der befehl um ein ä durch &auml auszutauschen...
danke im vorraus;)

free4all


Delete - So 15.10.06 13:54


Delphi-Quelltext
1:
2:
3:
for i := 0 to count -1 do ;
//beginnt bei 0 
//endet bei demnach bei Länge -1


zu HTML [url]de.selfhtml.org/[/url] hier findest du die nötigen Informationen.


ZeitGeist87 - So 15.10.06 13:55

user profile iconMarco D.
Zitat:
Du gehst in einer for-Schleife alle Zeilen durch und mit StringReplace oder ReplaceString (:gruebel:) ersetzt du z.B. ä durch &auml;.


LG
Stefan


jaenicke - So 15.10.06 14:02

Hier mal die Ersetzung aller (? ;-)) HTML-Sonderzeichen (woher der Code stammt, weiß ich nicht, ich hab den lediglich angepasst):

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
procedure TForm37.btn1Click(Sender: TObject);

const
  HTMLSpecialChars: array[0..102of char = (
    '&''<''>'' ''©''®''™''«''»''¡''¿''À''à''Á''á',
    'Â''â''Ã''ã''Ä''ä''Å''å''Æ''æ''Ç''ç''Ð''ð''È',
    'è''É''é''Ê''ê''Ë''ë''Ì''ì''Í''í''Î''î''Ï''ï',
    'Ñ''ñ''Ò''ò''Ó''ó''Ô''ô''Õ''õ''Ö''ö''Ø''ø''Ù',
    'ù''Ú''ú''Û''û''Ü''ü''Ý''ý''ÿ''Þ''þ''ß''§''¶',
    'µ''|''±''­''¨''¸''ª''°''¬''–''¯''º''¹',
    '²''³''¼''½''¾''×''÷''¢''£''¤''¥''€''“''"''”');

  HTMLCharacterCodes: array[0..102of String[8] = (
    '&','>','<',' ''©''®''™''«',
    '»''¡''¿''À''à''Á',
    'á''Â''â''Ã''ã''Ä',
    'ä''Å''å''Æ''æ''Ç',
    'ç''Ð''ð''È''è''É',
    'é''Ê''ê''Ë''ë''Ì',
    'ì''Í''í''Î''î''Ï',
    'ï''Ñ''ñ''Ò''ò''Ó',
    'ó''Ô''ô''Õ''õ''Ö',
    'ö''Ø''ø''Ù''ù''Ú',
    'ú''Û''û''Ü''ü''Ý',
    'ý''ÿ''Þ''þ''ß''§''¶',
    'µ''¦''±''·''¨''¸''ª',
    'º''¬''­''¯''&def;''¹''²''³',
    '¼''½''¾''×''÷''¢',
    '£''¤''¥''€''“''"''”');

function ReplaceHTML(uNormalText: String): String;
var
  i: Integer;
begin
  for i := 0 to High(HTMLSpecialChars) do
    uNormalText := StringReplace(uNormalText, HTMLSpecialChars[i], HTMLCharacterCodes[i],
      [rfReplaceAll]);
  Result := uNormalText;
end;

begin
  memText.Text := ReplaceHTML(memText.Text);
end;

Du hast ja sicher nicht Lust, die alle aufzuschreiben...


free4all - So 15.10.06 14:05

Soll das heissen das ich es in etwa so machen soll???

var i:integer;
begin

for i:= 1 to Memo1.lines.count-1 do
begin
Memo1.Lines[i]:=StringReplace(text, '1', '!', [rfReplaceAll);
end;
end;


THX free4all


Marco D. - So 15.10.06 14:06

Ok, an memo1.text hatte ich nicht gedacht. :zustimm:


jaenicke - So 15.10.06 14:12

user profile iconfree4all hat folgendes geschrieben:
Soll das heissen das ich es in etwa so machen soll???

var i:integer;
begin

for i:= 1 to Memo1.lines.count-1 do
begin
Memo1.Lines[i]:=StringReplace(text, '1', '!', [rfReplaceAll);
end;
end;


THX free4all

Ja, nur dass du statt "StringReplace(text, ..." "StringReplace(Memo1.Lines[i], ..." schreiben müsstest und statt bei 1 bei 0 anfange musst. Die erste Zeile ist Zeile 0, deshalb auch das Count - 1, denn die letzte Zeile ist nicht Count sondern Count - 1. Aber ich habe ja schon nen kompletten Source für die Ersetzung aller oder zumindest vieler Sonderzeichen gepostet.
Denn du musst nicht zeilenweise durch den Text gehen, du kannst einfach mit Memo1.Text auf den gesamten Text auf einmal zugreifen.

Noch was: Formatiere bitte Quelltext auch als solchen. Klicke dazu über dem Eingabefeld auf Bereiche. Dann vor der Eingabe des Quelltextes auf das Plus und danach nochmal oder drücke voher und nachher Alt + R.


free4all - So 15.10.06 14:19

Also echt 1000 dank an euch....

Ich hätte da nurnoch eine Frage...

da ja in Html alle Zeilenumbrüche eingegeben werden (<br>, <p>) wollte ich fragen ob ihr wisst wie ich das umsetzten kann...


jaenicke - So 15.10.06 14:26

Du nimmst den Befehl zum Ersetzen von Strings und ersetzt den Zeilenumbruch in Memo1.Text durch <br>. Jetzt musst du nur noch wissen, wie der Zeilenumbruch in Delphi aussieht, ich weiß:
#13#10
Erklärung: Zeilenumbruch und Zeilenvorschub sind zwei Steuerzeichen, nämlich Zeichen 13 und Zeichen 10. Die musst du also nur ersetzen. #13#10 musst du nicht in Anführungszeichen setzen wie '<br>'.


free4all - So 15.10.06 14:44

Gut dann danke ich euch erstmal für den schnellen Support an einem Sonntag-nachmittag...

Ich bin immernoch überweältigt von der schnellen hilfe...

Man sieht sich definitiv wieder ;)

byebye free4all