В Delphi TCanvas
имеет перегруженный TextRect()
метод, который принимает параметр TextFormat
в качестве входных данных:
procedure TfrmMain.StatusBar1DrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect);
begin
StatusBar.Canvas.Font.Name := 'Times New Roman';
StatusBar.Canvas.Font.Style := [];
StatusBar.Canvas.Font.Size := 12;
StatusBar.Canvas.Font.Color := clBlack;
case Panel.Index of
2: begin
StatusBar.Canvas.TextRect(Rect, Rect.Left, Rect.Top, 'TOTALS:');
end;
3: begin
StatusBar.Canvas.Font.Color := clRed;
StatusBar.Canvas.TextRect(Rect, TotalQty, [tfRight]);
end;
4: begin
StatusBar.Canvas.Font.Color := clRed;
StatusBar.Canvas.TextRect(Rect, TotalStr, [tfRight]);
end;
end;
end;
В FreePascal, TCanvas
имеет перегруженный TextRect()
метод, который принимает параметр Style
в качестве входных данных:
procedure TfrmMain.StatusBar1DrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect);
var
Style: TTextStyle;
begin
StatusBar.Canvas.Font.Name := 'Times New Roman';
StatusBar.Canvas.Font.Style := [];
StatusBar.Canvas.Font.Size := 12;
StatusBar.Canvas.Font.Color := clBlack;
case Panel.Index of
2: begin
StatusBar.Canvas.TextRect(Rect, Rect.Left, Rect.Top, 'TOTALS:');
end;
3: begin
StatusBar.Canvas.Font.Color := clRed;
Style.Alignment := taRightJustify;
// set other Style settings as needed...
StatusBar.Canvas.TextRect(Rect, Rect.Left, Rect.Top, TotalQty, Style);
end;
4: begin
StatusBar.Canvas.Font.Color := clRed;
Style.Alignment := taRightJustify;
// set other Style settings as needed...
StatusBar.Canvas.TextRect(Rect, Rect.Left, Rect.Top, TotalStr, Style);
end;
end;
end;
Если вы используете версию Delphi/FreePascal, которая не есть те параметры, вам придется использовать API DrawText()
функцию Win32 непосредственно вместо:
procedure TfrmMain.StatusBar1DrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect);
var
TextRect: TRect;
begin
StatusBar.Canvas.Font.Name := 'Times New Roman';
StatusBar.Canvas.Font.Style := [];
StatusBar.Canvas.Font.Size := 12;
StatusBar.Canvas.Font.Color := clBlack;
case Panel.Index of
2: begin
StatusBar.Canvas.TextRect(Rect, Rect.Left, Rect.Top, 'TOTALS:');
end;
3: begin
StatusBar.Canvas.Font.Color := clRed;
TextRect := Rect;
DrawText(StatusBar.Canvas.Handle, PChar(TotalQty), Length(TotalQty), TextRect, DT_RIGHT);
// alternatively, to avoid making a copy:
//DrawText(..., PRect(@Rect)^, ...);
end;
4: begin
StatusBar.Canvas.Font.Color := clRed;
TextRect := Rect;
DrawText(StatusBar.Canvas.Handle, PChar(TotalStr), Length(TotalStr), TextRect, DT_RIGHT);
// alternatively, to avoid making a copy:
//DrawText(..., PRect(@Rect)^, ...);
end;
end;
end;
У меня есть, что перегруженная версия с параметром стиля, однако, когда я применяю стиль, я тогда потерять все форматирование Canvas шрифта Я сделал, и фон изменился на белый – JakeSays
Ваш ответ работает, за исключением того, что Rect является Const и он запрашивает Var. Итак, вам нужно объявить локальный var (например, TextRect: TRect), а затем назначить значение параметров const Rect локальной переменной и передать это вместо этого - например. .... TextRect, DT_RIGHT); – JakeSays
Вместо того, чтобы делать копию, вы можете в качестве альтернативы взять указатель на 'const' Rect и deference it, который отменит' const', например: '..., PRect (@Rect) ^, DT_RIGHT);' –