Toon posts:

[Delphi] Probleem met PageWidth en height ivm printers

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben een programma aan het schrijven voor een bedrijf..

Ik gebruik hiervoor Borland Delphi...

Maar nu zit het zo, dat ik een print-optie heb, en in mn source, teken en schrijf ik dus van alles op de canvas van de Printer... Maar De page-width en height hangt af van je printer.. en dat is wel op te vragen, maar dan zou ik dus voor lelke lijn, en elke positie, of coordinaat een berekening moeten neerletten...

Is er niet een mogelijkheid, om htegeen ik getekend heb, in 1 keer van grote te kunnen veranderen... In totalliteit dus...


Owja, nog een simpele vraag: Hoe verander ik Floating-point-values in Integers. Hoe ik het ook doe, de enige manier die me lukt, is om er eerst een string van te maken, en dan pas een integer... En dat is uiteraard onlogisch.

Integer1 := StrToInt(FloatToString(Float1));

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Nee dat is niet mogelijk, tenzij je eerst alles in een windows metafile stopt, maar daarvoor zijn al die berekeningen ook nodig. Je kan evengoed alle berekeningen zelf doen. Wat is daar eigenlijk op tegen?

Wat betreft je tweede vraag: daar zijn verschillende functies voor, te weten Round(), Trunc() en Int(). Moet je maar ff in de manual kijken wat de verschillen zijn.

日本!🎌


Verwijderd

Topicstarter
Okee thanx. Hetgeen ik erop tegen had, had te maken met dat tweede.. anders zou ik voor elk lijntje 4x iets als

StrToInt(FloatToString(Float1)); moeten opgeven..

Maar als het met round oid kan is het beter natuurlijk.

  • Paul
  • Registratie: September 2000
  • Nu online
Dit probleem heb ik ook gehad. Eerst werkte alles perfect, maar toen klanten nieuwere printers kochten, bleek dit niet meer te werken (vaste waarde geven).

We hebben het toen opgelost door een verhouding te berekenen. en die te gebruiken in de printopdracht

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
procedure printIets;
var xMod, yMod : double;

  function x(xWaarde : integer): integer;
  begin
    result := round(xwaarde * xMod);
  end;

  function y(yWaarde : integer): integer;
  begin
    result := round(ywaarde * yMod);
  end;

begin
  xMod := Printer.PageWidth / 2400;   // <-- Waarde waar oude X op gebaseerd was
  yMod := Printer.PageHeight / 3400;  // <-- Waarde waar oude y op gebaseerd was
  with Printer.Canvas do
    begin
      TextOut(x(50), y(50), 'Hello world');

      [..]

    end;
end;

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


Verwijderd

StrToInt(FloatToString(Float1));
Dit kan natuurlijk alleen maar goed gaan wanneer die Float in principe een integer waarde bevat, anders niet! Voorbeeld:

float = 1,33445533. Je converteert dit naar een string. De string krijg dus de waarde 1,33445533 (copy-paste :D ) en vervolgens ga je die string weer opzetten naar een integer, wat dan dus niet wil. Je zult dus wel een van de functies van _Thanatos_ moeten gebruiken als het echt mooi en goed wilt doen :D

Verwijderd

Topicstarter
Bedankt!

  • ProgrammerX
  • Registratie: Juli 2002
  • Laatst online: 26-02-2021
Misschien heb ik iets gemist ofzo maar wat is het voordeel van het schrijven naar de canvas van de printer t.o.v. het gebruiken van een reportwriter zoals quickreport (niet dat quickreport zo'n geweldig product is :) ). Het gebruik van een reportwriter is misschien eenvoudiger ?

Verwijderd

Topicstarter
Zal ik daar eens naar kijken...
Pagina: 1