Hi,
jetzt habe ich einen ganz merkwürdigen Effekt. Ich möchte testweise die Texthöhe in einem TEdit ausgeben:
Code:
procedure TMainForm.drucken1Click(Sender: TObject);
{ es wird von einem A4-Format ausgegangen }
var
PrintForm: TForm2;
txth: integer;
begin
if idx_wd >= 0 then
begin
if PrintDialog1.Execute then
begin
PrintForm := TForm2.Create(self); // <<-- hier wird das Objekt von Unit2 erzeugt
...
try
PrintForm.ShowModal;
// jetzt stehen die Ränder fest
txth:= PrintForm.Canvas.TextHeight('9');
...
len_ltick:= ...
len_stick:=len_ltick - PrintForm.Canvas.TextHeight('9');
finally
PrintForm.Free;
end;
// Printer.Orientation wird bereits in PrintDialog1 festgelegt
Edit2.Text:='bl='+border_left.ToString+' bt='+border_top.ToString+
' br='+border_right.ToString+' bb='+border_bottom.ToString+
' ltick='+len_ltick.ToString+' stick='+len_stick.ToString+
' txth='+txth.ToString; // <<-- txth kann ausgegeben werden
Application.ProcessMessages;
Edit2.Text:=Edit2.Text+(PrintForm.Canvas.TextHeight('9')).ToString; <<-- hier gibt es eine
Exception
Application.ProcessMessages;
...
Die Zeilen
Code:
var
...
txth: integer;
...
txth:= PrintForm.Canvas.TextHeight('9');
...
Edit2.Text:=Edit2.Text+(PrintForm.Canvas.TextHeight('9')).ToString;
sind extra zum Aufzeigen des Problems eingefügt.
Der Wert von txth lässt sich fehlerfrei berechnen und im Edit2 ausgeben.
Die direkte Ausgabe von "(PrintForm.Canvas.TextHeight('9')).ToString" ergibt jedoch eine
Exception "Zugriffsverletzung bei Adresse ..."
Die Variante mit "IntToStr(PrintForm.Canvas.TextHeight('9'))" ergibt das gleiche Problem.
Was ist denn da falsch daran?