Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - TMemo als Editor geeignet ?
Lars B. - So 15.01.06 16:09
Titel: TMemo als Editor geeignet ?
Moin,
ich muss einen HTML Editor schreiben... Der Editor soll z.B. automatisch nach einem geschrieben Tag das schließende Tag erzeugen. Man soll alle gängigen Tags per Buttons einfügen können usw.
Eignet sich dafür als Grundgerüst ein TMemo oder würdet Ihr etwas anderes nehmen.
Vielen Dank für Hilfe
Gruss
Lars B.
MadDoctor - So 15.01.06 16:33
Ich würde die TRichEdit benutzen , du kannst dort praktischer weise die Lines aus der TSringlist lesen und meiner Meinung nach besser Formatieren ...
Wenn du das vorhast was ich denke was du vorhast würde ich dir noch dazu raten dir das
http://www.delphi-forum.de/topic_WBB+Offline+Poster+v00056_53338.html mal anzuschauen !
Lars B. - So 15.01.06 16:51
MadDoctor hat folgendes geschrieben: |
Ich würde die TRichEdit benutzen , du kannst dort praktischer weise die Lines aus der TSringlist lesen und meiner Meinung nach besser Formatieren ... |
Klingt gut.. Nur weiß ich nicht wo ich das Finde :), habe eben von Hand einmal alle Komponenten durchgeguckt unter welchem Punkt ist das denn zu finden.
Gibt es eigentlich eine Möglichkeit die Komponenten-Leiste nach etwas bestimmtem zu durchsuchen ?
Danke für Hilfe
Gruss
Lars
[Edit]
Ok unter Win32..
habs gefunden :)
Andreas L. - So 15.01.06 16:57
Lars B. hat folgendes geschrieben: |
MadDoctor hat folgendes geschrieben: | Ich würde die TRichEdit benutzen , du kannst dort praktischer weise die Lines aus der TSringlist lesen und meiner Meinung nach besser Formatieren ... |
Klingt gut.. Nur weiß ich nicht wo ich das Finde :), habe eben von Hand einmal alle Komponenten durchgeguckt unter welchem Punkt ist das denn zu finden.
Gibt es eigentlich eine Möglichkeit die Komponenten-Leiste nach etwas bestimmtem zu durchsuchen ?
Danke für Hilfe
Gruss
Lars |
TRichEdit ist unter den Win32-Reiter zu finden. Aber ich denke für einen HTML-Editor ist RichEdit nicht geeignet, es sei den du willst einen WYSIWYG-Editor (wie Frontpage) machen. Dann musst du aber auch erst den RichEdit-Code in HTML-Code umwandeln... Bilder und Tabellen einfügen kannste auch nicht so ohne weiteres...
MadDoctor - So 15.01.06 16:58
Da muss ich ihm recht geben , es kommt jetzt drauf an was du damit machen willst ... !
Lars B. - So 15.01.06 17:06
Ich versuche es jetzt mal damit, der Editor soll nur Tagvervollständigung bieten (ist so von der Schule vorgegeben)..
Es wird direkt HTML Code reingeschrieben.. Also Bilder usw nicht... Abschließend soll man den Inhalt in einer Datei speichern können -> als .html.
Sollte es dabei Probleme mit TRichEdit geben ?
vielen Dank für Hilfe
Gruss
Lars
MadDoctor - So 15.01.06 17:09
Es sollte meines erachtens keine Probleme geben, könnte nur evtl. etwas umständlich werden die Tags automatisch zuvervollständigen ... !
Andreas L. - So 15.01.06 17:10
Lars B. hat folgendes geschrieben: |
Ich versuche es jetzt mal damit, der Editor soll nur Tagvervollständigung bieten (ist so von der Schule vorgegeben)..
Es wird direkt HTML Code reingeschrieben.. Also Bilder usw nicht... Abschließend soll man den Inhalt in einer Datei speichern können -> als .html.
Sollte es dabei Probleme mit TRichEdit geben ?
vielen Dank für Hilfe
Gruss
Lars |
Evtl. ja. RichEdit ist wie gesagt eine Komponente die dir die Möglichkeit bietet den Text zu formatieren. Z. B. Fett, Kursiv, etc. zu machen.
Die Formatierungen werden auch in die Datei gespeichert. Also hat deine HTML-Datei ein ganz anderes Format und kann von einen Webbrowser nicht dargstellt werden.
Also nimm das Memo...
Ein bisschen Kenntnisse von HTML solltest du schon haben wenn du einen Editor schrieben willst :-(
EDIT: Es gibt im RichEdit die Möglichkeit die Formatierung auszuschalten (irgendwas mit plaintext im OI). Somit könntest du es schon für HTML-Code nehmen. Aber dann wird das Programm halt größer als wenn du ein memo nimmst welches in diesen Fall nichts anderes wäre!
MadDoctor - So 15.01.06 17:12
@OnlineHome
Wenn er doch gar keine Formatierung angibt und die datei dan sofort als HTML speichert sollte es doch möglich sein das der Explorer/Browser die datei dan Lesen kann
//Edit//
Zitat: |
EDIT: Es gibt im RichEdit die Möglichkeit die Formatierung auszuschalten (irgendwas mit plaintext im OI). Somit könntest du es schon für HTML-Code nehmen. Aber dann wird das Programm halt größer als wenn du ein memo nimmst welches in diesen Fall nichts anderes wäre!
|
Darauf wollte ich hinaus, mir war aber nicht bewust das die RichEdit dann ein Memo "wird".
Naja, so hab ich auch noch was aus der Sache gelernt !
Dann verwende besser von vornherein eine Memo Lars B. !
Andreas L. - So 15.01.06 17:14
MadDoctor hat folgendes geschrieben: |
@OnlineHome
Wenn er doch gar keine Formatierung angibt und die datei dan sofort als HTML speichert sollte es doch möglich sein das der Explorer/Browser die datei dan Lesen kann |
siehe mein Edit :-)
Lars B. - So 15.01.06 17:14
onlinehome hat folgendes geschrieben: |
Ein bisschen Kenntnisse von HTML solltest du schon haben wenn du einen Editor schrieben willst :-( |
Die nötigen Kenntnisse in html habe ich, ist bei einem solchen Projekt auch nicht viel...
Also ist ein "Memo" für reine Textdateierzeugung besser ?
Vielen Dank für Hilfe
Gruss
Lars
MadDoctor - So 15.01.06 17:17
Jo, ist sie !
Lars B. - So 15.01.06 17:40
Hm.. irgendwie ist es mir zwar unangenehmn das zu fragen, aber ich stehe unter Zeitdruck. Ich finde gerade nicht die Methode mit der ich einen String an einer Stelle y,x in das Memo schreiben kann....
Durch
Delphi-Quelltext
1: 2: 3: 4:
| var Tag:String; Tag:='TEST'; Memo.Lines.Insert(Index,Tag); Memo.Repaint; |
passiert nichts :)
vielen Dank für Hilfe
Gruss
Lars
Moderiert von
Christian S.: Code- durch Delphi-Tags ersetzt
MadDoctor - So 15.01.06 17:53
Versuch mal so :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| var Tag : String; Index : Integer; begin Tag:='TEST'; Index := 1; Memo1.Lines.Insert(Index,Tag); Memo1.Repaint; end; |
Andreas L. - So 15.01.06 18:27
Oder am Curser einfügen:
memo1.seltext:='TEST';
Lars B. - So 15.01.06 18:42
Das klappt ja schon mal prima :)
Nun kann man an beliebiger Stelle ein Tag einbauen..
Jetzt fehlt mir noch ein Weg automatisch Tags zu vervollständigen. Dafür müßte ich nur wissen, wie ich an die zu letzt eingegeben Zeichen rankomme (egal in welcher Zeile)...
Da hab ich nun gar nichts zu gefunden :(
vielen Dank für Hilfe
Gruss
Lars B.
jojo-sp - So 15.01.06 18:47
Dein start Tag steht am Anfang der Zeile:
Kannst ja prüfen was dort steht und aus einer Liste den ensprechenden ende Tag setzen.
Wenn du am Anfang z.B. ein <a findest setzte einfach am Ende dein <\a>
Edit:
Die Überprüfung des Start Tags machst du einfach in das ?onkeyPress? Ereignis, wenn du mit Enter zur nächten Zeile gehst.
Lars B. - So 15.01.06 22:06
Hmm..
Also ich komme da nicht weiter...
Es darf ja nur die Zeile wo eben noch kein Text zwischen den Tags ist verändert werden, weil man ja nicht weiss ob in einer Zeile schon ein anderes Tag offen ist usw sprich das schließende Tag muss direkt hinter das manuell geöffnete..
Mit sowas
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| var i,index:Integer; begin for i:=1 to 28 do begin if ((i mod 2) >0) then begin index := M_Editor.Lines.IndexOf(TagList[i]); if (index <> -1) then M_Editor.Lines.Insert(index+1,TagList[i+1]); end; end; end; |
Wird ein Tag gefunden und bei jedem Tastendruck dahinter das schließende gemacht.. Problem das wird immer wieder gemacht.. soll aber nur einmal gemacht werden ^^. Außerdem wird das Tag eine Zeile tiefer eingefügt - durch index+1.
Wenn ich jetzt einfach nur index nehme wird es eine Zeile über das zu schließende Tag gesetzt..
Wie kann ich denn die Ziele ansprechen in der es Steht ?
TagList ist ein Array mit den Tags wo erst das offene, dass gesucht werden soll und dann das geschlossene welches eingesetzt werden soll drinne steht.
Danke für Hilfe
Gruss
Lars
Blackheart666 - So 15.01.06 23:15
Man Lernt nicht Aus. Respekt!!!!
Lars B. - So 15.01.06 23:23
So damit gehts :)
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:
| const TagList:array[1..28] of String = ('<b>','</b>','<i>','</i>','<u>','</u>', '<h1>','</h1>','<h2>','</h2>','<h3>','</h3>','<h4>','</h4>', '<h5>','</h5>','<table>','</table>','<tr>','</tr>','<td>', '</td>','<ul>','</ul>','<ol>','</ol>','<li>','</li>');
var i,count,index:Integer; dummy:String; begin for count:=0 to M_Editor.Lines.Count-1 do begin dummy:=M_Editor.Lines[count]; for i:=1 to 28 do begin if ((i mod 2) >0) then begin if (pos(TagList[i],dummy)<>0)and(pos(TagList[i+1],dummy)=0) then begin dummy:=dummy+TagList[i+1]; M_Editor.Lines[count]:=dummy; end; end; end; end; end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!