Announcement

Collapse
No announcement yet.

winspool.getform will nicht

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • winspool.getform will nicht

    Hallo,

    jetzt verstehe ich gar nichts mehr. Vielleicht könnt Ihr mir helfen.
    Ich möchte die Formate der der möglichen Papierwahlen der Drucker haben.
    Dazu mache ich folgendes:
    (Das was hier nicht gesetzt ist, ist alles richtig gesetzt!)

    var needed,k: dword;
    b: boolean;
    fi2: PFormInfo1;
    begin
    try
    openprinter(adevice,phandle,nil);
    new(fi2);
    fillchar(fi2^.pName,100,'0');
    b:=false;
    if not winspool.getform(pHandle, PChar(Formatname),1,fi2,40,needed) then begin
    if winspool.getform(pHandle,PChar(Formatname),1,fi2,n eeded,k) then
    b:=true
    else
    MyMessageBox(format('%s (%d)',[SysErrorMessage( GetLastError ),getlasterror]),'Fehler',mterror,[mbok],0,-1,-1)
    end else
    b:=true;
    if b then
    with fi2^ do begin
    label7.caption:=inttostr(size.cx Div 1000) +'mm X '+ inttostr(size.cy Div 1000)+'mm';
    label8.Caption:=inttostr(ImageableArea.left DIV 1000)+'mm X '+
    inttostr(ImageableArea.top Div 1000)+'mm';
    Label9.caption:=inttostr(ImageableArea.right Div 1000) + 'mm X '+
    inttostr(ImageableArea.bottom Div 1000) + 'mm';
    end
    else
    MyMessageBox(format('%s (%d)',[SysErrorMessage( GetLastError ),getlasterror]),'Fehler',mterror,[mbok],0,-1,-1);
    finally
    closeprinter(phandle);
    dispose(fi2);
    end;

    Das dispose(fi2) ergibt immer einen Fehler (Access violation). Warum?

    Wenn ich das zum ersten Mal aufrufe funktioniert es bestens und gibt mir die Daten zurück. (Auch, wenn das ausgewählte Papier nicht das für den Drucker gewählte ist, nur eins, das er unterstützt.)
    Rufe ich es zum 2. Mal auf erfolgt ein Crash. Stack-Überlauf oder Access violation bei einem LoadResString (?).

    Was mache ich falsch?

    Gruß
    Matthias
Working...
X