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
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