![]() |
strings und zeilenumbruch
Mein String.
Delphi-Quellcode:
Gibt es eine andere Möglichkeit für die Umbrüche?
DialogStr := gM.Title +
{ ' ' + Duration + } #13#10 + gM.release_date + #13#10 + gM.genre_ids + #13#10#13#10#13#10#13#10#13#10#13#10 + gM.overview;
Delphi-Quellcode:
#13#10#13#10#13#10#13#10#13#10#13#10
|
AW: strings und zeilenumbruch
Es kommt drauf an.
#10 #13#10 #13 (macht z.B. intern das RichEdit, wobei TRichEdit "teilweise" es zu sLineBreak ändert/stringreplaced ... und sogar MacOS inzwischen standardmäßig von #13 zu #10 gewechselt ist) sLineBreak An ein TMemo oder eine TStringList kann man auch nur #10 übergeben, da es bei Übergabe automatisch zu #13#10 wird. (TStringList erlaubt alles im Eingang) Auch MessageBox und Co. erlauben sowohl #10 als auch #13#10. Man kann auch StringReplace von irgendeinem Zeichen nach #10/#13#10/sLineBreak machen, wenn man den String nicht "unterbrechen" will. Aber manche APIs/Funktionen wollen ausschließlich #13#10 und behandeln #10 wie ein Zeichen, also nicht als Zeilenumbruch. (z.B. bekannt vom alten Windows-Notepad oder einigen Canvas-DrawText-Funktionen) ............. Und wie wäre es mit ![]() |
AW: strings und zeilenumbruch
Wenn ich jetzt 12 Zeilenumbrüche erstellen will um zwischen einen String platz zu schaffen bin ich gezwungen die komplette Zeile zu übergeben.
Ist das so?
Delphi-Quellcode:
Wenn ja.. Schade das man das nicht kürzen kann.
#13#10#13#10#13#10#13#10#13#10#13#10#13#10#13#10#13#10#13#10#13#10#13#10
bsp. LineBreak(12) |
AW: strings und zeilenumbruch
Moin,
mich nervt auch immer das #13#10 getippe, habe mir delhalb in meine Unit mit diversen Stringroutinen eine kleine Funktion geschrieben:
Delphi-Quellcode:
Aufruf dann z.B.:
function NewLine(Anzahl: Integer): string;
begin Result := ''; if Anzahl > 0 then Result := DupeString(#13#10, Anzahl); end;
Delphi-Quellcode:
ShowMessage('a' + NewLine(2) + 'b');
|
AW: strings und zeilenumbruch
Zitat:
Selbst ist der Mann. Vielen Danke! Genau das meinte ich. |
AW: strings und zeilenumbruch
Oder man schreibt gleich
Delphi-Quellcode:
8-)
S := 'a' + DupeString(#13#10, 2) + 'b';
|
AW: strings und zeilenumbruch
Zitat:
Habe die umbenannt funktioniert gut. Danke nochmals.
Delphi-Quellcode:
function LineBreak(Count: Integer): string;
begin Result := ''; if Count > 0 then Result := DupeString(#13#10, Count); end;
Delphi-Quellcode:
Vorher hätte das so ausgesehen.DialogStr := gM.Title + LineBreak(1) + gM.release_date + LineBreak(1) + gM.genre_ids + LineBreak(8) + gM.overview;
Delphi-Quellcode:
Genug platz ohne diese #13#10 Umbruchstrings.DialogStr := gM.Title + #13#10 + gM.release_date + #13#10 + gM.genre_ids + #13#10#13#10#13#10#13#10#13#10#13#10#13#10#13#10 + gM.overview; Kann jetzt adverage und vote dazwischen packen. |
AW: strings und zeilenumbruch
Delphi-Quellcode:
?
function LineBreak(Count: Integer=1): string; // oder gleich LB
begin Result := ''; if Count > 0 then Result := DupeString(sLineBreak, Count); end;
Delphi-Quellcode:
Noch kürzer und keine MagicNumbers im Code.
DialogStr := gM.Title + LineBreak + gM.release_date + LineBreak +
gM.genre_ids + LineBreak(8) + gM.overview; Aber warum dort überhaupt ein Freiraum von unhandlicher Größe? Zwei Texte ... der Eine von unten und der Andere von oben. :stupid: |
AW: strings und zeilenumbruch
Zitat:
Es spricht nichts dagegen. Damit ich den Text nicht immer bei jeder Aktualisierung des Fensters neu zeichnen muß erstelle ich ein Bitmap auf dem der Text gerendert wird. Und auf diesen Bitmap überlagere ich dann die Bilder für Ratings, Average und Vote. Deshalb verwende ich einen Text! Dieses Bitmap ist als Sprite ausgelegt wird in meiner DLL(SpriteContainer) Klasse verwaltet und kann diverse zusätzlich Funktionen erhalten. Zoomen, Drehen, Transparenz, zur Laufzeit auf dem Fenster verschieben usw.. Beispiel:
Delphi-Quellcode:
Zoom Beispiel:
SpriteArray[0].FontText := 'Use Symmetrical';
SpriteArray[1].FontText := 'Use Transparent'; SpriteArray[2].FontText := 'Use Smoothing'; for K := 0 to 2 do begin SpriteArray[K].FontUseSize := 20; SpriteArray[K].FontName := 'TAHOMA'; SpriteArray[K].FontUseARGB := gSprSettings.GD_ARGB(255, 255, 255, 255); SpriteArray[K].FontUse3D := 1; SpriteArray[K].hBmp := gSprSettings.GD_CreateBitmapFromText (PWideChar(SpriteArray[K].FontText), nil, PWideChar(SpriteArray[K].FontName), SpriteArray[K].FontUseSize, SpriteArray[K].FontUseARGB, SpriteArray[K].FontUse3D); gSprSettings.GD_SetObjectAnchorMode(ID + K, ANCHOR_NONE); gSprSettings.GI_GetBitmapSize(SpriteArray[K].hBmp, IbmW, IbmH); SpriteArray[K].ID := ID + K; if (K = 2) then begin SpriteArray[K].xPos := x + 1; SpriteArray[K].yPos := y; end else begin SpriteArray[K].xPos := x; SpriteArray[K].yPos := y; end; y := y + 34; gSprSettings.GD_DrawTextBitmapToCtrl(hSprSettings, SpriteArray[K].xPos, SpriteArray[K].yPos, SpriteArray[K].hBmp, $FFFFFFFF, SpriteArray[K].ID, GS_VISIBLE); gSprSettings.GD_SetObjectLocked(SpriteArray[K].ID, true); SpriteArray[K].scale := SCALE_DEFAULT; gSprSettings.GD_SetObjectScale(SpriteArray[K].ID, SpriteArray[K].scale); gSprSettings.GD_SetObjectImageLabel(K, SpriteArray[K].FontText); end;
Delphi-Quellcode:
Aber das kannst du natürlich nicht alles wissen.
if bAnimate then
begin for K := (Length(SpriteArray) - 1) downto 0 do begin if InflateID = SpriteArray[K].ID then begin if SpriteArray[K].scale < 0.85 then SpriteArray[K].scale := SpriteArray[K].scale + SCALE_STEP; end else begin if SpriteArray[K].scale > SCALE_DEFAULT then SpriteArray[K].scale := SpriteArray[K].scale - SCALE_STEP; end; gSprSettings.GD_SetObjectScale(SpriteArray[K].ID, SpriteArray[K].scale); Angle := gSprSettings.GD_GetObjectAngle(SpriteArray[K].ID); if Angle > 0 then begin Angle := Angle - 8; gSprSettings.GD_SetObjectAngle(SpriteArray[K].ID, Angle); end; end; gSprSettings.GI_UpdateWindow(WinHandle, false); end; Email :lol: denkt das geht schon so. ... Wenn du schon "Count: Integer=1" definierst dann benötigt man auch Result = '' und die abfrage if Count > 0 then nicht mehr. Count kann ja dann nicht mehr 0 sein.
Delphi-Quellcode:
Aber danke für den Tip "sLineBreak" und mit dem Optionalen Parameter hätte ich auch drauf kommen müssen :)
function LineBreak(Count: Integer = 1): string; // oder gleich LB
begin Result := DupeString(sLineBreak, Count); end; |
AW: strings und zeilenumbruch
Büdde. :)
Zitat:
Die 1 ist nur, wenn man "garnichts" reingibt und 0 ist ja etwas. Aber OK, SetLength und somit auch DupeString kommen mit kleiner-0 zurecht und bei 0 macht DupeString nichts, also ja, kann man das auch noch weglassen, da es intern abgefangen ist. War dann sowas Doppeltgemoppeltes, wie ein
Delphi-Quellcode:
. :)
if Assigned(x) then x.Free;
Hatte nicht nachgesehn/ausprobiert, was bei negativen Zahlen passiert, drum ließ ich es noch drin. Bin etwas durch Funktion gebrandmarkt, wo Cardinal (unsigned int) als Längenparameter rein gehen und dann -1 plötzlich ganz groß wird ($FFFFFFFF).
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:43 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