![]() |
In eine Zeile in einem Richtext mehrere texte einfügen.
Hi
Ich habe volgendes Problem: Und zwar möchte ich in ein Richtext feld 2-3 texte in einer zeile unterbringen. Sie sollen aber immer an der selben Position landen, also egal wie lang der eine ist, der andere Text soll trotzdem an die gleiche stelle wie vorher, also ungefähr so:
Code:
Also egal wie lang das wort, oder der Satz ist, sie sollen immer untereinander stehn.
Test1 Test2 Test3
Dieter1 Dieter2 Dieter3 und nicht so: Test1 Test2 Test3 Dieter1 Dieter2 Dieter3 Ich hoffe ihr versteht was ich meine :| Danke im Voraus Mfg Power-Poler |
Re: In eine Zeile vin einem Richtext mehrere texte einfügen.
Wie kommen denn die Texte in das RichEdit?
|
Re: In eine Zeile vin einem Richtext mehrere texte einfügen.
So:
Delphi-Quellcode:
Den code verwände ich dafür.
RichEdit1.Clear;
RichEdit1.Lines.Insert(0,''); RichEdit1.SelAttributes.Size := 15; RichEdit1.Lines.Insert(1,' Text1');; RichEdit1.SelAttributes.Size := 10; RichEdit1.Lines.Insert(2,' ' + Variable1 + 'Text2' + 'Text3'); RichEdit1.Lines.Insert(3,''); RichEdit1.SelAttributes.Size := 10; RichEdit1.Lines.Insert(4,' ' + Variable2 + 'text4' + 'Text5'); RichEdit1.SelAttributes.Size := 10; RichEdit1.Lines.Insert(5,' ' + Variable3 + 'text6' + 'Text7'); RichEdit1.SelAttributes.Size := 10; RichEdit1.Lines.Insert(6,' ' + Variable4 + 'Text8' + 'Text8'); RichEdit1.Lines.Insert(7,''); und die Texte, 2-8, sollen immer untereinander stehn, egal wie lang die Variable1-4 ist Variable 1-4 sind String's mit unterschiedlich langen Texten drin, die verändert werden können |
Re: In eine Zeile vin einem Richtext mehrere texte einfügen.
Hallo,
anstelle der Leerzeichen einfach #9 (Tab) einsetzen. |
Re: In eine Zeile vin einem Richtext mehrere texte einfügen.
und was bedeutet das dan?
wiviel abstand is das dan? ein Tap abstand? Wie soll ich das einfügen? hab jetzt so Probiert:
Delphi-Quellcode:
Dan kommt ein error, und so kommt nur der zeichensatz raus:
RichEdit1.Lines.Insert(2,' ' + Variable1 + #9 (Tab) + 'Text2' + 'Text3');
Delphi-Quellcode:
Also wie muss ich das dazwischen einsetzten??RichEdit1.Lines.Insert(2,' ' + Variable1 + '#9 (Tab)' + 'Text2' + 'Text3'); |
Re: In eine Zeile vin einem Richtext mehrere texte einfügen.
Moin, Moin,
nur #9 einsetzen, nicht die im Text als Erklärung eingefügten Hinweis (TAB) |
Re: In eine Zeile vin einem Richtext mehrere texte einfügen.
Also, ich weis nicht, wie mir das helfen soll, der Abstand ist nicht gross genaug, der dan erzeugt wird, also muss ich mehrere hintereinander setzten, und sobald die variable länger wird, wird der rest weiter verückt.
Delphi-Quellcode:
wenn in der Variable Beispielsweise Martin steht, geht es, aber sobal MartinMusterman drin steht, werden die Texte 2 und 3 trotzdem weiter gerückt.
RichEdit1.Lines.Insert(2,' ' + Variable1 + #9+ #9+ #9+ #9+ #9+ #9+ #9+ 'Text2' + 'Text3');
|
Re: In eine Zeile in einem Richtext mehrere texte einfügen.
Das ist verständlich, du musst natürlich den Tabulator auf einen passenden Wert setzen. Etwa so: Alle Einträge VOR dem Einfügen auf die Länge (in Pixeln) utersuchen, die Tabschrittweite setzen und erst dann einfügen.
|
Re: In eine Zeile in einem Richtext mehrere texte einfügen.
Und jetzt mal auf deutsch bitte, dan ich es auch verstehen kann :stupid:
:mrgreen: |
Re: In eine Zeile in einem Richtext mehrere texte einfügen.
In einer Schleife alle Einträge, die innerhalb einer Spalte stehen sollen, auf deren Länge untersuchen, der längste gefundene Wert+Freiraum ist dann dein Wert für den Tabulator der Spalte. Canvas hat eine Methode "TextWidth" - schau hierzu in die Hilfe.
Den Wert für den Tabulator setzt du mit Hilfe von SendMessage/PostMessage und EM_SETTABSTOPS, auch hierzu solltest du weitere Informationen finden. Alternativ anstelle eines MEMOS/RICHEDITS vielleicht auch ein Stringgrid verwenden. Wenn keine Linien und keine FixedCols/FixedRows dargestellt werden, schaut das eigentlich genau so aus wie ein EditControl - damit dürfte das alles ein wenig einfacher sein. Sollen spezielle Textattribute verwendet werden, musst du das OnDraw des Grids dann selbst übernehmen. |
Re: In eine Zeile in einem Richtext mehrere texte einfügen.
So, habe jetzt das hofenlich so, wie du es gemeint hast, mit der schleife das brauche ich nicht, da es keine Tabele in dem sin sein solte, mir geht es nur um einzele Zeilen.
Mein code sieht jetzt, für die ermitlung des Abstandes in px so aus:
Delphi-Quellcode:
Jetzt habe ich den px abstand in Abstand3 den ich brauche, also den zwischen variable 1 und Text2
Abstand1 := canvas.TextWidth(' ' + variable1);
Abstand2 := canvas.TextWidth(' '); Abstand3 := Abstand2 - Abstand1; wie sage ich jetzt aber dem tab, das er diesen abstand anhemen soll. Dein bezug auf die Hilfe, ich denke mal du meinst die vom Delphi, die will bei mir irgenwie nicht, der meint immer das das file in meinem Projekt Order ligt, und das es da nicht ist, ist klar. Hab woll irgenwo nen fehler gemacht :oops: Deswegen frage ich, befor ich vor verzweiflubg wider ein Projekt aufgebe, wäre nicht das erste, das ich angefangen habe, und das in die tonne getretten wurde, weil ich nicht weitergekommen bin. (Nicht nur in delphi) |
Re: In eine Zeile in einem Richtext mehrere texte einfügen.
Hallo!
Ich würde auch zu einem StringGrid raten, das ist am einfachsten. Wenn Du es doch in einem RichEdit haben möchtest und das Setzen der Tabs Dir zu kompliziert erscheint, dann könntest Du vielleicht eine Schriftart mit fester Zeichenbreite nehmen(z.B. Courier). Dann in einer Schleife die maximale Anzahl der Zeichen je Spalte ermitteln (mit Length('Dein String')) und jeweils entsprechend viele Leerzeichen anhängen. Aber elegant ist das nicht! Gruß, Zugi |
Re: In eine Zeile in einem Richtext mehrere texte einfügen.
taaktaak sagte etwas davon, das man die länger des Tab bestimmen kann, mit welchem befehl geht das?
Zitat:
|
Re: In eine Zeile in einem Richtext mehrere texte einfügen.
Hi,
es geht Dir darum, Daten mehr oder weniger tabellarisch darzustellen? Warum nutzt Du kein TStringGrid oder eine TListView? Ein RichEdit für so etwas zu "missbrauchen" ist nicht gerade eine gute Alternative. |
Re: In eine Zeile in einem Richtext mehrere texte einfügen.
Ich glaube ihr habt das falsch verstaden, ich will die Strings in keiner Tabele ausgeben, es ist schon richtig, das ich ein richtext nehme.
Bin über jede hilfe dankbar, aber von meiner entscheidung ein RichText zu verwänden, lasse ich micht nicht abringen. Oben das:
Code:
Das war nur ein Beispiel, so sieht das nachher nicht aus, das wahr nur zur erklärung, wie ich das meine, das halt die Position vom nächsten String nicht verändert werden darf, egal wie lang der vorhergehende ist.
Test1 Test2 Test3
Dieter1 Dieter2 Dieter3 und nicht so: Test1 Test2 Test3 Dieter1 Dieter2 Dieter3 |
Re: In eine Zeile in einem Richtext mehrere texte einfügen.
Wenn Du eine Schriftart fester Breite verwendest, kannst Du auch die Textlängen ausrechnen und ggf. mit Leerzeichen auffüllen.
|
Re: In eine Zeile in einem Richtext mehrere texte einfügen.
Hallo!
OK, ganz auf die Schnelle, Quick'n'Dirty:
Delphi-Quellcode:
Du brauchst: 1 * TRichEdit, 1 * TButton, 3 * TEdit.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls; type TForm1 = class(TForm) RichEdit1: TRichEdit; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private-Deklarationen } StringList1: TStringList; StringList2: TStringList; StringList3: TStringList; function GetMaxLength(StringList: TStringList): Integer; procedure AppendBlanks(var StringList: TStringList; nLength: Integer); public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var nCount: Integer; TabPixelPos1: Integer; TabPixelPos2: Integer; begin StringList1.Add(Edit1.Text); StringList2.Add(Edit2.Text); StringList3.Add(Edit3.Text); TabPixelPos1 := GetMaxLength(StringList1); TabPixelPos2 := GetMaxLength(StringList2); RichEdit1.Clear; AppendBlanks(StringList1, TabPixelPos1); AppendBlanks(StringList2, TabPixelPos2); for nCount := 0 to StringList1.Count - 1 do begin RichEdit1.Lines.Add(StringList1[nCount] + ' ' + StringList2[nCount] + ' ' + StringList3[nCount]); end; RichEdit1.Repaint; end; function TForm1.GetMaxLength(StringList: TStringList): Integer; var nCount: Integer; nLength: Integer; begin nLength := 0; for nCount := 0 to StringList.Count - 1 do begin if nLength < Length(StringList[nCount]) then nLength := Length(StringList[nCount]); end; result := nLength; end; procedure TForm1.AppendBlanks(var StringList: TStringList; nLength: Integer); var nCount: Integer; begin for nCount := 0 to StringList.Count - 1 do begin while Length(StringList[nCount]) < nLength do begin StringList[nCount] := StringList[nCount] + ' '; end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin StringList1 := TStringList.Create; StringList2 := TStringList.Create; StringList3 := TStringList.Create; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin FreeAndNil(StringList1); FreeAndNil(StringList2); FreeAndNil(StringList3); end; end. Hoffe das hilft. Ach ja, nicht vergessen: im RichEdit den Font auf Courier stellen! Gruß, Zugi |
Re: In eine Zeile in einem Richtext mehrere texte einfügen.
So in der Art hatte ich das gemeint :)
|
Re: In eine Zeile in einem Richtext mehrere texte einfügen.
Ich in #12 auch schon :P
Gruß, Zugi |
Re: In eine Zeile in einem Richtext mehrere texte einfügen.
Muss ich irgendwie übersehen haben :cyclops: .
|
Re: In eine Zeile in einem Richtext mehrere texte einfügen.
Wenn die Schrieft immer die gleiche breite hat, sieht das irgenwie nicht gut aus, die Seite soll ja schlieslich getruckt werden.
Was ich meine: taaktaak sagte etwas davon, das man die länger des Tab bestimmen kann, mit welchem befehl geht das? Zitat:
Und was ist in #12 auch schon?? |
Re: In eine Zeile in einem Richtext mehrere texte einfügen.
Hallo!
@DeddyH: Bist nicht der einzige :-D @Power-Poler: In #12 hatte ich schon die "Lösung" mit den Leerzeichen skizziert. So, wenn ich mich schon mal damit auseinandersetze: Schau mal unter ![]() Bezieht sich zwar auf TMemo, ist aber Deinem Problem sehr ähnlich. Ausschnitt aus #13: Zitat:
Gruß, Zugi |
Re: In eine Zeile in einem Richtext mehrere texte einfügen.
Danke Leute :thumb:
Funktioniert jetzt ungefähr so wie ich mir das vorstehle. Undgefähr weil: Bin doch auf Courier umgestiegen :wink: Über px hat er doch irgenwie noch fehler gehabt mir dem abstand. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:05 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-2025 by Thomas Breitkreuz