Chcę utworzyć ciąg obejmujący wiele wierszy w celu przypisania do właściwości Podpis etykiety. Jak to się robi w Delphi?
W System.pas (który jest używany automatycznie) zdefiniowano:
const
sLineBreak = {$IFDEF LINUX} AnsiChar(#10) {$ENDIF}
{$IFDEF MSWINDOWS} AnsiString(#13#10) {$ENDIF};
Pochodzi z Delphi 2009 (zwróć uwagę na użycie AnsiChar i AnsiString). (Zawijanie linii dodane przeze mnie.)
Więc jeśli chcesz zawinąć TLabel, upewnij się, że AutoSize jest ustawione na true, a następnie użyj następującego kodu:
label1.Caption := 'Line one'+sLineBreak+'Line two';
Działa we wszystkich wersjach Delphi od czasu wprowadzenia sLineBreak, czyli moim zdaniem Delphi 6.
my_string := 'Hello,' + #13#10 + 'world!';
#13#10
to dziesiętne znaki CR / LF
Możesz też użyć skrótu ^ M + ^ J. Wszystko to kwestia preferencji. kody „CTRL-CHAR” są tłumaczone przez kompilator.
MyString := 'Hello,' + ^M + ^J + 'world!';
Możesz usunąć + między ^ M i ^ J, ale wtedy otrzymasz ostrzeżenie od kompilatora (ale nadal będzie się kompilował dobrze).
Z drugiej strony, sztuczka, która może być przydatna:
jeśli trzymasz wiele łańcuchów w TStrings, wystarczy użyć właściwości Text TStrings, jak w poniższym przykładzie.
Label1.Caption := Memo1.Lines.Text;
Otrzymasz wieloliniową etykietę ...
var
stlst: TStringList;
begin
Label1.Caption := 'Hello,'+sLineBreak+'world!';
Label2.Caption := 'Hello,'#13#10'world!';
Label3.Caption := 'Hello,' + chr(13) + chr(10) + 'world!';
stlst := TStringList.Create;
stlst.Add('Hello,');
stlst.Add('world!');
Label4.Caption := stlst.Text;
Label5.WordWrap := True; //Multi-line Caption
Label5.Caption := 'Hello,'^M^J'world!';
Label6.Caption := AdjustLineBreaks('Hello,'#10'world!');
{http://delphi.about.com/library/rtl/blrtlAdjustLineBreaks.htm}
end;
Metoda agnostyczna platformy to „sLineBreak”: http://www.freepascal.org/docs-html/rtl/system/slinebreak.html
Write ('Hello' + sLineBreak + 'World!');
Nie mam pod ręką kopii Delphi, ale jestem prawie pewien, że jeśli ustawisz właściwość wordwrap na true, a właściwość autosize na false, to powinno zawijać każdy tekst, który umieścisz w rozmiarze, jaki tworzysz na etykiecie. Jeśli chcesz zmienić wiersz w określonym miejscu , może to zadziałać, jeśli ustawisz powyższe ustawienia i wkleisz z edytora tekstu .
Mam nadzieję że to pomoże.
Czasami nie chcę zaśmiecać mojej przestrzeni kodu, szczególnie w przypadku etykiety statycznej. Aby po prostu zdefiniować go w formularzu, wprowadź tekst etykiety w formularzu, a następnie kliknij prawym przyciskiem myszy w dowolnym miejscu tego samego formularza. Wybierz „Wyświetl jako tekst”. Teraz zobaczysz wszystkie obiekty zgodnie z projektem, ale tylko jako tekst. Przewiń w dół lub wyszukaj swój tekst. Kiedy go znajdziesz, edytuj podpis, aby wyglądał mniej więcej tak:
Podpis = 'Linia 1' # 13'Linia 2 '# 13'Linia 3'
# 13 oznacza liczbę porządkową 13 lub ascii dla powrotu karetki. Chr (13) to ta sama idea, CHR () zmienia liczbę na typ porządkowy.
Zauważ, że w tym konkretnym aspekcie Delphi nie ma średnika, a zamiast „: =” używany jest znak „=”. Tekst w każdym wierszu jest ujęty w pojedyncze cudzysłowy.
Gdy skończysz, kliknij ponownie prawym przyciskiem myszy i wybierz „Wyświetl jako formularz”. Możesz teraz wykonać dowolne formatowanie, takie jak pogrubienie, wyrównanie do prawej itp. Po prostu nie możesz ponownie edytować tekstu w formularzu, bo stracisz podziały wierszy.
Używam również opcji „Wyświetl jako tekst” dla wielu zmian, w których chcę po prostu przewijać i zastępować itp. Szybko.
Dave
źródło