Einzelnen Beitrag anzeigen

venice2
(Gast)

n/a Beiträge
 
#9

AW: strings und zeilenumbruch

  Alt 22. Feb 2021, 00:10
Zitat:
Aber warum dort überhaupt ein Freiraum von unhandlicher Größe?
Zwei Texte ... der Eine von unten und der Andere von oben.
Warum sollte ich zwei Texte verwenden wenn es genau so gut mit einem geht.
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:
  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;
Zoom Beispiel:
Delphi-Quellcode:
  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;
Aber das kannst du natürlich nicht alles wissen.
Email 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:
function LineBreak(Count: Integer = 1): string; // oder gleich LB
begin

    Result := DupeString(sLineBreak, Count);
end;
Aber danke für den Tip "sLineBreak" und mit dem Optionalen Parameter hätte ich auch drauf kommen müssen

Geändert von venice2 (22. Feb 2021 um 03:31 Uhr)
  Mit Zitat antworten Zitat