Alternativa alterar unit original
Algum tempo atráz precisei incluir as 2 linhas abaixo nas procedures BeginDoc e NewPage da unit original Printers, nunca tinha dado problema, porém agora começou dar conflito (was compiled version different) com um novo componente que instalei.
Tem alternativa ao invés de mexer na unit original do Delphi, porque estas linhas pra funcionar tem que estar antes da linha StartPage(DC). Pensei em criar uma unit nova descendente de Printers só com BeginDoc, NewPage pra sobrepor os originais, mas não sei como fazer isto.
DevMode.dmDefaultSource:=FNumBand; // <-- muda bandeja impressão
Windows.ResetDC(DC,DevMode^); // <-- aplica alteração
procedure TPrinter.BeginDoc;
var
DocInfo: TDocInfo;
begin
CheckPrinting(False);
SetState(psHandleDC);
Canvas.Refresh;
TPrinterCanvas(Canvas).UpdateFont;
FPrinting := True;
FAborted := False;
FPageNumber := 1;
FillChar(DocInfo, SizeOf(DocInfo), 0);
with DocInfo do
begin
cbSize := SizeOf(DocInfo);
lpszDocName := PChar(Title);
end;
SetAbortProc(DC, AbortProc);
StartDoc(DC, DocInfo);
DevMode.dmDefaultSource:=FNumBand; // <-- muda bandeja impressão
Windows.ResetDC(DC,DevMode^); // <-- aplica alteração
StartPage(DC);
end;
procedure TPrinter.NewPage;
begin
CheckPrinting(True);
EndPage(DC);
DevMode.dmDefaultSource:=FNumBand; //<-- muda bandeja impressão
Windows.ResetDC(DC,DevMode^); //<-- aplica alteração
StartPage(DC);
Inc(FPageNumber);
Canvas.Refresh;
end;
Obrigado,
Tem alternativa ao invés de mexer na unit original do Delphi, porque estas linhas pra funcionar tem que estar antes da linha StartPage(DC). Pensei em criar uma unit nova descendente de Printers só com BeginDoc, NewPage pra sobrepor os originais, mas não sei como fazer isto.
DevMode.dmDefaultSource:=FNumBand; // <-- muda bandeja impressão
Windows.ResetDC(DC,DevMode^); // <-- aplica alteração
procedure TPrinter.BeginDoc;
var
DocInfo: TDocInfo;
begin
CheckPrinting(False);
SetState(psHandleDC);
Canvas.Refresh;
TPrinterCanvas(Canvas).UpdateFont;
FPrinting := True;
FAborted := False;
FPageNumber := 1;
FillChar(DocInfo, SizeOf(DocInfo), 0);
with DocInfo do
begin
cbSize := SizeOf(DocInfo);
lpszDocName := PChar(Title);
end;
SetAbortProc(DC, AbortProc);
StartDoc(DC, DocInfo);
DevMode.dmDefaultSource:=FNumBand; // <-- muda bandeja impressão
Windows.ResetDC(DC,DevMode^); // <-- aplica alteração
StartPage(DC);
end;
procedure TPrinter.NewPage;
begin
CheckPrinting(True);
EndPage(DC);
DevMode.dmDefaultSource:=FNumBand; //<-- muda bandeja impressão
Windows.ResetDC(DC,DevMode^); //<-- aplica alteração
StartPage(DC);
Inc(FPageNumber);
Canvas.Refresh;
end;
Obrigado,
Edurocha
Curtidas 0
Respostas
Weber
25/09/2007
Copie a Unit original do Delphi para a pasta do seu projeto, então faça as alterações na cópia da unit dentro da pasta do seu projeto.
Quando você compilar o Delphi vai assumir esta cópia da unit.
Quando você compilar o Delphi vai assumir esta cópia da unit.
GOSTEI 0
Edurocha
25/09/2007
Valeu Weber já deu uma luz... fiz isto só que quando compilo o conflito continua, pois neste mesmo projeto utilizo os componentes novos que gera o erro was compiled version different.
O que mais poderia fazer ? Tem alguma forma de compilar o form que usa o componente novo utilizar a unit original do Delphi e o restante do meu projeto utilizar a unit alterada ?
Obrigado,
O que mais poderia fazer ? Tem alguma forma de compilar o form que usa o componente novo utilizar a unit original do Delphi e o restante do meu projeto utilizar a unit alterada ?
Obrigado,
GOSTEI 0
Paulo Samurai
25/09/2007
Seria ruim criar um descendente da TPrinter e usar o descendente? Daí voce trabalharia com o TNewPrinter onde for necessário e deixaria a TPrinter do jeito que está ;)
[]´s
[]´s
GOSTEI 0
Edurocha
25/09/2007
ótima idéia, porém não sei como faze-lo, alguem poderia dar uma ajuda ? por onde começar.
GOSTEI 0
Martins
25/09/2007
ótima idéia, porém não sei como faze-lo, alguem poderia dar uma ajuda ? por onde começar.
E se você mudasse o nome da unit q vc copiou para a pasta do seu projeto, deixando a original do Delphi como era antes das modificações, não resolveria?
GOSTEI 0
Edurocha
25/09/2007
Valeu Martins, funcionou tudo certinho, mudei somente o nome da unit é isto mesmo né ? não preciso mexer em mais nada no corpo da unit ?
GOSTEI 0
Martins
25/09/2007
Valeu Martins, funcionou tudo certinho, mudei somente o nome da unit é isto mesmo né ? não preciso mexer em mais nada no corpo da unit ?
Teoricamente isso deveria resolver seu problema e o Delphi continuaria funcionando perfeitamente, qualquer problema, retorne e nos informe sobre o erro q tentaremos juntos encontrar uma solução.
Bons códigos!
GOSTEI 0