AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Strings in RichEdit auf Substring ausrichten
Thema durchsuchen
Ansicht
Themen-Optionen

Strings in RichEdit auf Substring ausrichten

Ein Thema von frieder2008 · begonnen am 29. Mär 2011 · letzter Beitrag vom 30. Mär 2011
Antwort Antwort
frieder2008

Registriert seit: 28. Feb 2009
78 Beiträge
 
#1

Strings in RichEdit auf Substring ausrichten

  Alt 29. Mär 2011, 21:54
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
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

AW: Strings in RichEdit auf Substring ausrichten

  Alt 29. Mär 2011, 22:39
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?
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von isilive
isilive

Registriert seit: 15. Okt 2008
Ort: Österreich
192 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Strings in RichEdit auf Substring ausrichten

  Alt 29. Mär 2011, 22:54
(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.
Stefan
Jedoch kann die referenzbasierte Implementierung des Standard-Objektmodells in Kombination mit den komplexen syntaktischen Dereferenzierungsregeln bei einer objektorientierten API wie ein Stolperstein wirken.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#4

AW: Strings in RichEdit auf Substring ausrichten

  Alt 29. Mär 2011, 23:20
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.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
frieder2008

Registriert seit: 28. Feb 2009
78 Beiträge
 
#5

AW: Strings in RichEdit auf Substring ausrichten

  Alt 30. Mär 2011, 07:35
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.
  Mit Zitat antworten Zitat
frieder2008

Registriert seit: 28. Feb 2009
78 Beiträge
 
#6

AW: Strings in RichEdit auf Substring ausrichten

  Alt 30. Mär 2011, 08:09
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:

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
  Mit Zitat antworten Zitat
Benutzerbild von isilive
isilive

Registriert seit: 15. Okt 2008
Ort: Österreich
192 Beiträge
 
Delphi 2009 Professional
 
#7

AW: Strings in RichEdit auf Substring ausrichten

  Alt 30. Mär 2011, 16:12

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?!
Stefan
Jedoch kann die referenzbasierte Implementierung des Standard-Objektmodells in Kombination mit den komplexen syntaktischen Dereferenzierungsregeln bei einer objektorientierten API wie ein Stolperstein wirken.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:02 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