Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TRichEdit Einzelne Zeile Formatieren (https://www.delphipraxis.net/133895-trichedit-einzelne-zeile-formatieren.html)

5etH 11. Mai 2009 20:39


TRichEdit Einzelne Zeile Formatieren
 
Hallo Zusammen,

Ja ich weis es gibt einige Beiträge dazu, aber keiner Hilft mir wirklich.

Es geht darum, dass ich in einem Programm einen Test genereiere und nur Einzelne Zeilen Rechtsbündig setzen muss ... leder gelingt es mir nur das Ganze Richedit Rechtsbündig zu gestalten, und nicht nur eine einzelne Zeile.
Ich Hoffe das ihr mir weiterhelfen könnt.

Im Prinzip muss ich immer nur die gerade hinzugefügte Zeile formatieren.

Gruß
Manu

mkinzler 11. Mai 2009 20:41

Re: TRichEdit Einzelne Zeile Formatieren
 
Schau dir mal .SelStart und .SelCount an

Stevie 12. Mai 2009 06:34

Re: TRichEdit Einzelne Zeile Formatieren
 
Delphi-Quellcode:
begin
  RichEdit1.SelStart := RichEdit1.Perform(EM_LINEINDEX, LineIndex-1, 0); // LineIndex ist die Zeilennummer der zu ändernden Zeile
  RichEdit1.Paragraph.Alignment := taRightJustify;
end;

5etH 12. Mai 2009 19:05

Re: TRichEdit Einzelne Zeile Formatieren
 
Guten Abend,

habe mir jetzt einmal eine Eigene Prozedur gebastelt aber irgendwie haut das nicht hin. Der Fehler zeigt sich so das er das was er Rechtsbündig setzen sollte nicht macht oder erst eine Zeile zu Spät ich kann den Fehler leider nicht finden und hoffe das ihr mir helfen könnt.

Delphi-Quellcode:
procedure ADDROW(RE : TRichedit; TEXT : String; Align : TAlignment);
var
SEL1,SEL2 : Integer;
begin
  SEL1 := 0;
  SEL2 := 0;

  SEL1 := length(RE.text);

  RE.Lines.add(TEXT);

  SEL2 := length(RE.text);

  RE.SelStart := SEL1;

  RE.SelLength := (SEL2-SEL1);

  RE.Paragraph.Alignment := Align;

end;
schon mal vielen Dank im voraus
Gruß
manu

taaktaak 12. Mai 2009 20:31

Re: TRichEdit Einzelne Zeile Formatieren
 
Na, dann probiere mal das hier:

Delphi-Quellcode:
procedure TfoTest19.FormShow(Sender:TObject);
var i : Integer;

  procedure AddRow(RE:TRichEdit;Text:String;Align:TAlignment);
  begin
    Re.Lines.Add(Text);
    Re.SelStart:=length(RE.Text)-1;
    RE.Paragraph.Alignment:=Align
  end;

begin
  for i:=0 to 3 do
    if odd(i) then AddRow(RichEdit1,'Left',taLeftJustify)
              else AddRow(RichEdit1,'Right',taRightJustify)
end;

Lannes 12. Mai 2009 21:06

Re: TRichEdit Einzelne Zeile Formatieren
 
Hallo;

oder so:
Delphi-Quellcode:
RichEdit1.SelStart := MAXINT;
RichEdit1.Paragraph.Alignment := taCenter;
RichEdit1.Lines.Add('Center');
SelStart muss nicht jedesmal gesetzt werden, wenn mehrere Zeilen hinzugefügt werden:
Delphi-Quellcode:
RichEdit1.SelStart := MAXINT;
RichEdit1.Paragraph.Alignment := taCenter;
RichEdit1.Lines.Add('Center');
RichEdit1.Paragraph.Alignment := taRightJustify;
RichEdit1.Lines.Add('Right');

taaktaak 12. Mai 2009 21:21

Re: TRichEdit Einzelne Zeile Formatieren
 
Interessant, aber aus meiner Sicht ein etwas seltsames Verhalten.
Gibt es dafür eine Erklärung?

Lannes 12. Mai 2009 22:39

Re: TRichEdit Einzelne Zeile Formatieren
 
Hallo,

add versetzt Selstart an das Ende der hinzugefügten Zeile. Die hinzugefügte Zeile schließt mit #13#10 ab, dahinter beginnt ein neuer Absatz. Mit der Zuweisung an Alignment wird der Absatz quasi vorformatiert.

Oder meinst Du ein anderes seltsamens Verhalten?

taaktaak 13. Mai 2009 06:15

Re: TRichEdit Einzelne Zeile Formatieren
 
Moin, Moin.
Nein, genau das erschien mir seltsam :roll:
Danke!

5etH 13. Mai 2009 18:46

Re: TRichEdit Einzelne Zeile Formatieren
 
Um euch das Problem einmal näher darzustellen werde ich hier Prozedur Aufruf und Ergebnis mal posten

Prouedur
Delphi-Quellcode:
procedure AddRow2(RE:TRichEdit;Text:String;Align:TAlignment);
  begin
    Re.Lines.Add(Text);
    Re.SelStart:=length(RE.Text)-1;
    RE.Paragraph.Alignment:=Align
  end;
Aufruf
Delphi-Quellcode:
procedure TForm1.Button8Click(Sender: TObject);
var
  I: Integer;
  y: Integer;
  a: Integer;
  X: Integer;
begin
summe := 0;
counter := 1;
richedit1.Clear;
richedit2.Clear;
for X := 0 to Listbox1.items.Count - 1 do
begin
for I := 1 to stringgrid1.RowCount - 1 do
begin
  for y := 0 to stringgrid1.ColCount - 1 do
  begin
    if (stringgrid1.Cells[y,i] = (listbox1.Items[X])) and (stringgrid1.Cells[y+1,i+1] <> ' ') then
    begin
      ADDROW2(Richedit1,(InttoStr(counter) +'.'+#9+listbox1.Items[X]),TaLeftJustify);
      ADDROW2(Richedit1,(' / ' +stringgrid1.Cells[y+3,i]),TaRightJustify);
      ADDROW2(Richedit2,(InttoStr(counter) +'.'+#9+listbox1.Items[X]),TaLeftJustify);
      ADDROW2(Richedit2,(' / ' +stringgrid1.Cells[y+3,i]),TaRightJustify);

      summe := (summe + StrToFloat(stringgrid1.Cells[y+3,i]));
      inc(counter);
      a := i+1;
      while (stringgrid1.cells[3,a] <> ' ') do
      begin
         if stringgrid1.cells[3,a] = 'FREE' then
         begin
          ADDROW(Richedit1,(stringgrid1.cells[4,a]),TaLeftJustify);
          richedit2.Lines.Add(#13);
         end
         else
         begin
         ADDROW2(Richedit1,(#9+stringgrid1.cells[3,a] + ' ' + stringgrid1.cells[4,a]),TaLeftJustify);
         ADDROW2(Richedit2,(#9+stringgrid1.cells[3,a]),TaLeftJustify);
         end;
        inc(a);
      end;
      richedit1.lines.Add(#13);
      richedit2.lines.Add(#13)
    end;

  end;
end;
end;
 ADDROW2(Richedit1,('_____/'+FloatTOStr(summe)),TaRightJustify);
 ADDROW2(Richedit2,('_____/'+FloatTOStr(summe)),TaRightJustify);
end;
Ergebnis (Habe jetzt nur eins der beiden Richedits gepostet)
Delphi-Quellcode:
1.   (F) In welchem FL befindet sich die generelle Grenze zwischen dem oberen und unteren Luftraum?
 / 1 (FALSCH)





                              (FALSCH)  2.   (MC) Welche der genannten Luftraumklassen sind in Deutschland implementiert?
 / 2 (FALSCH)
                                                                  (FALSCH)    a) Luftraumklasse A, B, C, D, E, F, G
   b) Luftraumklasse C, D, E, F, G
   c) Luftraumklasse A, C, D, E, F, G
   d) Luftraumklasse C, D, E, F, G, H,


3.   (MC) Welcher FL definiert die Obergrenze des oberen kontrollierten Luftraum?
 / 1 (FALSCH)
                                                                                            (Falsch)       a) FL 600
   b) FL 100
   c) unlimited
   d) FL 245


4.   (F) Ab welchem FL beginnt die Flugplanpflicht?
 / 1  (FALSCH)






                                                                                                                 _____/5
Alles Was mit (FALSCH) beschriftet ist sollte jeweils auf der Anderen Seite Bündig sein


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:06 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