Für Fragen von Einsteigern und Programmieranfängern...
wennerer
Beiträge: 607 Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2
Beitrag
von wennerer » So 1. Nov 2020, 20:24
Hallo an Alle,
ich versuche mit "Canvas.TextRect" unter Verwendung von TextStyle einen Text auszugeben. Ich dachte eigentlich das der Ausgabetext bei Verwendung dieses Befehls immer im angegebenen Rechteck liegen muss. Wenn ich aber taLeftJustify und/oder tlTop einstelle ist der Text bei mir in der linken/oberen Ecke der Form. Mach ich da was falsch?
TextRect.png (11.46 KiB) 1522 mal betrachtet
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ComCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
TrackBar1: TTrackBar;
TrackBar2: TTrackBar;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure TrackBar1Change(Sender: TObject);
procedure TrackBar2Change(Sender: TObject);
private
R : TRect;
MyTextStyle : TTextStyle;
L,T : integer;
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
R := rect(20,50,120,80);
L:=0; T:=0;
MyTextStyle.Layout := tlCenter;
MyTextStyle.Alignment:= taCenter;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
MyTextStyle.Layout := tlTop;
Invalidate;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
MyTextStyle.Layout := tlCenter;
Invalidate;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
MyTextStyle.Layout := tlBottom;
Invalidate;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
MyTextStyle.Alignment:= taLeftJustify;
Invalidate;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
MyTextStyle.Alignment:= taCenter;
Invalidate;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
MyTextStyle.Alignment:= taRightJustify;
Invalidate;
end;
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
L:= Trackbar1.Position;
Invalidate;
end;
procedure TForm1.TrackBar2Change(Sender: TObject);
begin
T:= Trackbar2.Position;
Invalidate;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
with canvas do
begin
brush.Color:= clWhite;
rectangle(R);
TextRect(R,L,T,'Ausgabe',MyTextStyle);
end;
end;
end.
Viele Grüße
Bernd
Dateianhänge
project1.zip
(126.08 KiB) 62-mal heruntergeladen
Sieben
Beiträge: 289 Registriert: Mo 24. Aug 2020, 14:16
OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.2.0, FPC 3.2.2
CPU-Target: i386
Beitrag
von Sieben » So 1. Nov 2020, 21:09
X und Y, bei dir L und T, spielen offenbar nur bei tlTop bzw taLeftjustify eine Rolle. Dann aber müssen sie Punkte innerhalb des definierten Rechtecks sein, keine Angaben relativ zu ihm:
Code: Alles auswählen
TextRect(R, R.Left + L, R.Top + T, 'Ausgabe', MyTextStyle);
Zuletzt geändert von
Sieben am So 1. Nov 2020, 22:51, insgesamt 1-mal geändert.
wennerer
Beiträge: 607 Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2
Beitrag
von wennerer » So 1. Nov 2020, 21:33
Hallo Sieben,
mit L und T hab ich schon herum gespielt. Die lassen sich in meinem kleinen Test mit den Trackbars einstellen. Aber wie du schon sagst liegt auch hier der Nullpunkt bei 0,0 der Form. Ich hätte erwartet das der Bezugspunkt in der linken, oberen Ecke des Rechteck liegen würde. Kann ich natürlich verrechnen aber macht man das so? Oder gibt's da einen Trick?
Viele Grüße
Bernd
Sieben
Beiträge: 289 Registriert: Mo 24. Aug 2020, 14:16
OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.2.0, FPC 3.2.2
CPU-Target: i386
Beitrag
von Sieben » So 1. Nov 2020, 21:50
Da du hier die Canvas des Forms verwendest sind auch alle Angaben darauf bezogen. Die Annahme, X und Y seien relativ zum Rechteck finde ich zwar erst mal nachvollziehbar, aber offensichtlich trifft sie nicht zu. Also bleibt dir nichts anderes als das 'Verrechnen'... Konsequent nur ein Bezugssystem zu verwenden dürfte aber insgesamt mehr Vor- als Nachteile bringen.
Winni
Beiträge: 1577 Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark
Beitrag
von Winni » So 1. Nov 2020, 22:46
Hi!
Völlig vergurkter Source. Hat mich schon bei Delphi geärgert.
Entweder sich selbst ne Prcoedure schreiben.
Dürfte nicht allzu schwer sein.
Oder BGRAbitmap benutzen. Da klappt das.
Winni
wennerer
Beiträge: 607 Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2
Beitrag
von wennerer » Mo 2. Nov 2020, 18:02
Danke für eure Antworten!
Dann werde ich es halt verrechnen, ist ja kein Problem (aber etwas seltsam
).
Viele Grüße
Bernd