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