![]() |
Strings in RichEdit auf Substring ausrichten
Moin leute,
ich habe KWICS in einem RichEdit, d.h. Strings, die ein ähnliches Wort enthalten, z.B.: Das Haus ist schön Haushoch stapeln sich die Bücher Und dann krachte das ganze Haus zusammen Das Bezugswort ist hier H/haus. Ich würde jetzt gerne diese Strings/Zeilen nach den Wörtern, die "Haus/haus" enthalten, im Richedit mittig anordnen, also so, dass immer "Haus/haus" untereinander steht. Ich hab keine Ahnung, wie ich das machen könnte. Hat jemand eine Idee? Danke und Grüße, frieder |
AW: Strings in RichEdit auf Substring ausrichten
Man könnte eine Schriftart mit fixer Breite nehmen, oder eine Komponente, bei der man solche Dinge selbst Zeichnen kann. Oder muss es unbedingt ein TRichEdit sein?
|
AW: Strings in RichEdit auf Substring ausrichten
(zu langsam, aber kann shark nur zustimmen):
Hast du im gesamten RichEdit die selbe Schriftart? Wenn ja könntest du mit pos() die Position der Substrings feststellen und dann entsprechend einrücken. Die Font sollte dann aber auch nicht-proportional sein. Auf einem normalen Memo wäre das aber wohl einfacher, als auf einem RichEdit. |
AW: Strings in RichEdit auf Substring ausrichten
Wenn du eine nichtproportionale Schrift setzt, dann ists egal, welche Komponente du nutzt. Im RichEdit kannst du dann sogar die "Bezugswörter" hervorheben. Du musst nur jeden Satz durchsuchen und die Anzahl an Buchstaben links vom Bezugswort herausfinden. Jede andere Zeile musst du dann von links mit Leerzeichen auffüllen, bis eben diese Länge auch dort erreicht ist.
|
AW: Strings in RichEdit auf Substring ausrichten
Moin und danke,
ja, das mit dem Einrücken hatte ich auch schon überlegt. Richedit muss sein wg. Formatierungen. Folgendes klappt schon mal nicht:
Delphi-Quellcode:
Aber Leerzeichen auffüllen, sollte klappen. :roll:
procedure TForm1.Button1Click(Sender: TObject);
var wordpos: integer; i: integer; str, neustr: string; mitte, neuepos: integer; begin mitte:= re.Width div 2; for i:=0 to re.Lines.Count-1 do begin wordpos:= pos('haus', re.lines.strings[i]); str:= re.lines.strings[i]; re.lines.strings[i]:= ''; neuepos:= mitte - wordpos; insert(str, neustr, neuepos); re.lines.strings[i]:= neustr; end; end; |
AW: Strings in RichEdit auf Substring ausrichten
Das folgende tuts:
Delphi-Quellcode:
Blöd bei der Lösung ist allerdings, dass ich vorher schon alle möglichen Word-Positionen kennen muss, um die 'richtige Mitte' zu finden. Anders ginge es nur, wenn ich eine feste Breite / Mitte angeben könnte, aber das funzt nicht:
Function MittigAusrichten (Source, Word: string; NeuePosition: integer): string;
begin while pos(word, Source) < NeuePosition do insert(' ', Source, 0); result:= Source; end; procedure TForm1.Button1Click(Sender: TObject); var i: integer; wordpos, tempint: integer; begin wordpos:= -1; for i:=1 to re.lines.count-1 do begin tempint:= pos('Haus', re.lines.strings[i]); if tempint > wordpos then mitte:= tempint; end; for i:= 0 to re.lines.count-1 do re.lines.strings[i]:= MittigAusrichten(re.lines.strings[i], 'Haus', wordpos); end;
Delphi-Quellcode:
Da hängt der Text dann Meilen weit außerhalb des sichtbaren RE-Fensters und man müsste die RE-Ansicht (über die Scrollbars) anpassen, was ich bisher nicht hinbekommen habe. - Weiß das zufällig jemand (RE hat kein HorizScrollbar-Attribut, oder??)?
wordpos:= re.width div 2
Danke und Gruß, frieder |
AW: Strings in RichEdit auf Substring ausrichten
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:51 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 by Thomas Breitkreuz