Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Strings in RichEdit auf Substring ausrichten (https://www.delphipraxis.net/159475-strings-richedit-auf-substring-ausrichten.html)

frieder2008 29. Mär 2011 21:54

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

s.h.a.r.k 29. Mär 2011 22:39

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?

isilive 29. Mär 2011 22:54

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.

s.h.a.r.k 29. Mär 2011 23:20

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.

frieder2008 30. Mär 2011 07:35

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:
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;
Aber Leerzeichen auffüllen, sollte klappen. :roll:

frieder2008 30. Mär 2011 08:09

AW: Strings in RichEdit auf Substring ausrichten
 
Das folgende tuts:

Delphi-Quellcode:
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;
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:

Delphi-Quellcode:
wordpos:= re.width div 2
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??)?

Danke und Gruß,
frieder

isilive 30. Mär 2011 16:12

AW: Strings in RichEdit auf Substring ausrichten
 
Zitat:

Zitat von frieder2008 (Beitrag 1091901)

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

Das war aber von Anfang an klar, oder?! :gruebel:


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