Wenn ich Dich richtig verstehe könnte Dir nBottom in Verbindung mit RenderWrite weiter helfen.
Das ist halt nicht sehr komfortabel.
Ich hatte dem Hersteller mal einen SoftPageBreak vorgeschlagen. Man könnte dann einen solchen setzen und falls die nächste(n) Aktion(en) einen Seitenwechsel benötigen würden, sollte das Framework diesen hart einfügen. Sie wollten das aufnehmen, aber so häufig tut sich da scheinbar nichts...
Mal ein Beispiel anbei. Ich brauche da zwar keinen Seitenwechsel aber vielleicht findest Du eine Anregung.
procedure WriteGameParty(L, T, W, H: Double; GameParty: TodGameParty; RightFlag: Boolean); var
S: String;
SL, PL, PW: Double;
I, C: Integer;
Player: TodPlayer;
PlayerName: String; begin
StahliSportOptions.GamePaperPictures := gppLarge; with VPEStahliSport do begin if IsDoubleGame then
C := 2 else
C := 1; if odExist(GameParty.Team) then begin
BKGMode := VBKG_SOLID;
BKGColor := ColorLightness(clBlue, 235);
WriteBox(L, T, W, VFREE, '[N CE]' + GameParty.Team.LongName); if C = 2 then begin
T := T + 1; // H := H - 1; end else begin
T := T + 0.75; // H := H - 0.75; end;
BKGColor := clWhite;
BKGMode := VBKG_TRANSPARENT; end; for I := 1 to C do begin case I of
1: begin
Player := GameParty.Player1;
PlayerName := VPEPlayerName(Player, True, True); end;
2: begin
Player := GameParty.Player2;
PlayerName := VPEPlayerName(Player, True, True); end else begin
Player := nil;
PlayerName := ''; end; end; Write(L, T, W, VFREE, PlayerName);
ifnot odExist(GameParty.Team) then begin if Player <> nilthen
S := Player.GetClubName else
S := '';; if S = '' then
S := '';
TextColor := clGray; Write(L, nBottom, W, VFREE, '[N CE]' + S); end;
TextColor := clBlack;
WriteBox(L, T, W, nBottom, '');
T := nBottom; if StahliSportOptions.GamePaperPictures <> gppNone then begin
S := ''; if Player <> nilthen begin if Player <> PlayerBye then begin
S := PathTmp + 'PersonPicture' + Player.Person.odId + '.bmp';
Player.Person.PictureStream.SaveToFile(S); if C > 1 then begin
PW := (W / C) - (W / 10); ifnot RightFlag then
PL := L + Abs(W) - Abs(PW) else
PL := L;
Picture(PL, T, PW, PW, S); end else begin case StahliSportOptions.GamePaperPictures of
gppLarge: begin
PW := W;
PL := L;
Picture(PL, T, PW, PW, S); end;
gppSmall: begin
PW := W / 2; ifnot RightFlag then
PL := L + Abs(W) - Abs(PW) else
PL := L;
Picture(PL, T, PW, PW, S); end; end; end; end; end; end;
T := nBottom;
ifnot RightFlag then
SL := nRightMargin - 4 else
SL := nLeftMargin;
WriteBox(SL, nBottomMargin - 1.5, -4, -1.5, '[N CE S 10 I C Gray]Zeichen'); end; end; end;
begin with VPEStahliSport do begin // Margin := 1.3;
XC := nLeftMargin + ((nRightMargin - nLeftMargin) / 2);
T := nBottom + 0.25;
S := 'Spielzettel';
S := '' + S + '';
RenderWrite(0, 0, VFREE, VFREE, '[N S 12 CE I C White BC Gray U TO AO]' + S);
TW := nRenderWidth; // TH := nRenderHeight;
WriteBox(nLeftMargin, nTopMargin, nRightMargin, nBottomMargin, ''); Write(XC - (TW / 2), T, -TW, VFREE, '[N S 12 CE I C White BC Gray U TO AO]' + S); Write(XC - (TW / 2) + 0.01, T, -TW, VFREE, '[N S 12 CE I C Blue U T AO]' + S);
Y1 := T; // nBottom + 0.5;
PenSize := 0.01;
S := te.Sport.SportPlaceName; if S = '' then
S := 'Feld'; Write(nLeftMargin + 1, Y1, VFREE, VFREE, S + '-Nr.');
Y2 := nBottom;
WriteBox(nLeftMargin + 1, Y2, -1.5, -0.75, '');