El programilla no es mas que una cola de impresión, la condición para que funcione es que el documento a imprimir debe tener no mas de 5 paginas, en caso de que tuviera mas de 5 paginas el numero que identifica al documento ocuparía dos puestos en la cola, el primero con las primeras 5 paginas a imprimir, y el segundo puesto con el numero de paginas restantes quedando algo asi en la cola, donde el documento numero 5 tiene 7 paginas:
(*1 -3pag; *2 -4pag; *3 -5pag; *4 -1pag; *5 -5pag; *5 -2pag;...*N -Mpag)
(disculpen el ejemplo chapucero de la cola :eolo:)
la cuestión es que he programado ya todo, sin embargo no se me ocurre, o no encuentro ni el modo ni la manera de que segun una condicion "if strtoint (nombrevariable.text) > 5 then" el programa me discrimine los documentos de mas de 5 paginas y los ponga en dos puestos sucesivos en la cola (como en el ejemplo grafico).
aquí el código, si alguien me ayuda le estaría agradecido, esto es solo un ejercicio de practica, no crean que estoy pidiendo la tarea en el foro :chavo:
Cita:
Les estaría muy agradecido, ya que este ejemplo m serviría muchísimo para futuras estructuras un poco mas complejas :metal: const
max=10;
type
ta=array[1..max] of integer;
TForm1 = class(TForm)
colimp: TListBox;
colaimpr: TLabel;
ndoc: TLabel;
num: TEdit;
agregar: TButton;
imprimir: TButton;
impri: TLabel;
limpiar: TButton;
salir: TButton;
impr: TLabel;
npag: TLabel;
numpag: TEdit;
procedure FormActivate(Sender: TObject);
procedure limpiarClick(Sender: TObject);
procedure salirClick(Sender: TObject);
procedure agregarClick(Sender: TObject);
procedure llego (var cola:ta; var nfrente, nfinal:integer; valor:integer);
procedure mostrar(cola:ta; nfrente, nfinal:integer);
procedure imprimirClick(Sender: TObject);
procedure salio(var cola:ta; var nfrente, nfinal, valor2:integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
cola:ta;
Form1: TForm1;
nfrente, nfinal:integer;
implementation
{$R *.DFM}
procedure TForm1.FormActivate(Sender: TObject);
begin
num.SetFocus;
nfrente:=0;
nfinal:=0;
end;
procedure TForm1.limpiarClick(Sender: TObject);
begin
colimp.Items.Clear;
num.Text:='';
nfrente:=0;
nfinal:=0;
impri.caption:='';
num.SetFocus;
end;
procedure TForm1.salirClick(Sender: TObject);
begin
close;
end;
procedure TForm1.llego (var cola:ta; var nfrente, nfinal:integer; valor:integer);
begin
if nfinal=0 then begin
nfinal:=1;
nfrente:=1;
end
else
inc(nfinal);
cola[nfinal]:=valor;
end;
procedure TForm1.mostrar(cola:ta; nfrente, nfinal:integer);
var
i:integer;
begin
colimp.items.clear;
for i:=1 to nfinal do
colimp.items.add(inttostr(Cola[i]));
end;
procedure TForm1.agregarClick(Sender: TObject);
begin
if nfinal=max then showmessage('Cola de impresion llena')
else
if num.text='' then showmessage('numero invalido')
else
es aqui donde se me ocurriria meter la condicion "if strtoint (nombrevariable.text) > 5 then" para empezar el proceso de discriminacion de documentos con mas de 5 paginas, para luego continuar con:
begin
llego(cola, nfrente, nfinal, strtoint(num.text));
mostrar(cola, nfrente, nfinal);
end;
num.clear;
num.setfocus;
end;
procedure tform1.salio(var cola:ta; var nfrente, nfinal, valor2:integer);
var
i:integer;
begin
valor2:=cola[nfrente];
for i:=2 to nfinal do
cola[i-1]:=cola[i];
cola[nfinal]:=0;
if nfinal=1 then nfrente:=0;
dec(nfinal);
end;
procedure TForm1.imprimirClick(Sender: TObject);
var
valor2:integer;
begin
if nfrente=0 then showmessage('No hay documentos en la cola de impresion')
else
begin
salio(cola, nfrente, nfinal, valor2);
impri.caption:=inttostr(valor2);
mostrar(cola, nfrente, nfinal);
end;
num.setfocus;
end;
end.
max=10;
type
ta=array[1..max] of integer;
TForm1 = class(TForm)
colimp: TListBox;
colaimpr: TLabel;
ndoc: TLabel;
num: TEdit;
agregar: TButton;
imprimir: TButton;
impri: TLabel;
limpiar: TButton;
salir: TButton;
impr: TLabel;
npag: TLabel;
numpag: TEdit;
procedure FormActivate(Sender: TObject);
procedure limpiarClick(Sender: TObject);
procedure salirClick(Sender: TObject);
procedure agregarClick(Sender: TObject);
procedure llego (var cola:ta; var nfrente, nfinal:integer; valor:integer);
procedure mostrar(cola:ta; nfrente, nfinal:integer);
procedure imprimirClick(Sender: TObject);
procedure salio(var cola:ta; var nfrente, nfinal, valor2:integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
cola:ta;
Form1: TForm1;
nfrente, nfinal:integer;
implementation
{$R *.DFM}
procedure TForm1.FormActivate(Sender: TObject);
begin
num.SetFocus;
nfrente:=0;
nfinal:=0;
end;
procedure TForm1.limpiarClick(Sender: TObject);
begin
colimp.Items.Clear;
num.Text:='';
nfrente:=0;
nfinal:=0;
impri.caption:='';
num.SetFocus;
end;
procedure TForm1.salirClick(Sender: TObject);
begin
close;
end;
procedure TForm1.llego (var cola:ta; var nfrente, nfinal:integer; valor:integer);
begin
if nfinal=0 then begin
nfinal:=1;
nfrente:=1;
end
else
inc(nfinal);
cola[nfinal]:=valor;
end;
procedure TForm1.mostrar(cola:ta; nfrente, nfinal:integer);
var
i:integer;
begin
colimp.items.clear;
for i:=1 to nfinal do
colimp.items.add(inttostr(Cola[i]));
end;
procedure TForm1.agregarClick(Sender: TObject);
begin
if nfinal=max then showmessage('Cola de impresion llena')
else
if num.text='' then showmessage('numero invalido')
else
es aqui donde se me ocurriria meter la condicion "if strtoint (nombrevariable.text) > 5 then" para empezar el proceso de discriminacion de documentos con mas de 5 paginas, para luego continuar con:
begin
llego(cola, nfrente, nfinal, strtoint(num.text));
mostrar(cola, nfrente, nfinal);
end;
num.clear;
num.setfocus;
end;
procedure tform1.salio(var cola:ta; var nfrente, nfinal, valor2:integer);
var
i:integer;
begin
valor2:=cola[nfrente];
for i:=2 to nfinal do
cola[i-1]:=cola[i];
cola[nfinal]:=0;
if nfinal=1 then nfrente:=0;
dec(nfinal);
end;
procedure TForm1.imprimirClick(Sender: TObject);
var
valor2:integer;
begin
if nfrente=0 then showmessage('No hay documentos en la cola de impresion')
else
begin
salio(cola, nfrente, nfinal, valor2);
impri.caption:=inttostr(valor2);
mostrar(cola, nfrente, nfinal);
end;
num.setfocus;
end;
end.