Proyecto

General

Perfil

Descargar (25,6 KB) Estadísticas
| Rama: | Revisión:
23a384b9 Elisa
unit gruposservidores;

{$mode objfpc}{$H+}

interface

uses
globales,inicio,Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
ExtCtrls, Grids, StdCtrls, Menus,IniFiles, Buttons;

type

{ TfrmGruposServidores }

TfrmGruposServidores = class(TForm)
btAnadirGrupo: TButton;
btAnadirEquipo: TButton;
btAnadirEquipoDominio: TButton;
btnEliminarEquipo: TButton;
btnVolver: TButton;
mnuNuevo: TButton;
btnLimpiarEquipos: TButton;
btnModificarGrupo: TButton;
btnEliminarGrupo: TButton;
cboDominios: TComboBox;
EdGrupo: TEdit;
Image1: TImage;
Image2: TImage;
Label1: TLabel;
Label81: TLabel;
Label82: TLabel;
Label83: TLabel;
Label84: TLabel;
Label85: TLabel;
ltsGrupos: TListBox;
sgED: TStringGrid;
sgEquiposGrupo: TStringGrid;
spArriba: TSpeedButton;
spAbajo: TSpeedButton;
procedure btAnadirEquipoClick(Sender: TObject);
procedure btAnadirEquipoDominioClick(Sender: TObject);
procedure btAnadirGrupoClick(Sender: TObject);
procedure btMoverAbajoClick(Sender: TObject);
procedure btMoverArribaClick(Sender: TObject);
procedure btnEliminarEquipoClick(Sender: TObject);
procedure btnEliminarGrupoClick(Sender: TObject);
procedure btnLimpiarEquiposClick(Sender: TObject);
procedure btnModificarGrupoClick(Sender: TObject);
procedure btnVolverClick(Sender: TObject);
procedure cboDominiosChange(Sender: TObject);
procedure cboDominiosKeyPress(Sender: TObject; var Key: char);
procedure FormActivate(Sender: TObject);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure ltsGruposClick(Sender: TObject);
procedure mnuNuevoClick(Sender: TObject);
procedure sgEDSelectCell(Sender: TObject; aCol, aRow: Integer;
var CanSelect: Boolean);
procedure sgEquiposGrupoSelectCell(Sender: TObject; aCol, aRow: Integer;
var CanSelect: Boolean);
procedure spArribaClick(Sender: TObject);
private
procedure AnadirGrupo;
procedure cargaListaEquipos(mdominio: string);
procedure CargarListaGrupos();
procedure EliminarEquipo();
procedure EliminarGrupo();
procedure EscribirficheroCursos;
procedure LimpiarGrupos();
procedure ModificarGrupo;
procedure mueveAbajo();
procedure mueveArriba();
function ValidarDatosGrupo(): boolean;
{ private declarations }
public
{ public declarations }
end;

var
frmGruposServidores: TfrmGruposServidores;
f_fila:integer=-1;
f_grupo:integer=-1;
f_equipo:integer=-1;
f_gruposEquipos:array of TGruposDeEquipos;
f_numGrupo:integer=0;

implementation

{ TfrmGruposServidores }


procedure TfrmGruposServidores.LimpiarGrupos();
var
mygrupo:integer;
begin
mygrupo:=ltsGrupos.ItemIndex;
if (ltsGrupos.Items.count=0) or (mygrupo=-1) then
begin
mensaje('Selecciona un grupo',aceptar);
exit;
end;
if mensaje('¿Desea eliminar todos los equipos de este grupo ' +ltsGrupos.Items[mygrupo]+'?',sino)=2 then exit;
sgEquiposGrupo.Clean;
sgEquiposGrupo.RowCount:=1;
f_gruposEquipos[mygrupo].NumeroEquipos:=sgEquiposGrupo.RowCount-1;
SetLength(f_gruposEquipos[mygrupo].Host,f_gruposEquipos[mygrupo].NumeroEquipos);
SetLength(f_gruposEquipos[mygrupo].MAC,f_gruposEquipos[mygrupo].NumeroEquipos);
SetLength(f_gruposEquipos[mygrupo].IP,f_gruposEquipos[mygrupo].NumeroEquipos);
SetLength(f_gruposEquipos[mygrupo].curso,f_gruposEquipos[mygrupo].NumeroEquipos);
SetLength(f_gruposEquipos[mygrupo].Dominio,f_gruposEquipos[mygrupo].NumeroEquipos);
//btnEliminarGrupo.Enabled:=false;
//btnModificarGrupo.Enabled:=false;
end;
procedure TfrmGruposServidores.EliminarGrupo();
var
mgrupo:String;
misgrupos:array of TGruposDeEquipos;
i,j,z:integer;
begin
f_grupo:=ltsGrupos.ItemIndex;
mgrupo:= f_gruposEquipos[f_grupo].Nombre;
if mensaje('¿Desea eliminar el grupo ' +mgrupo+'?',sino)=2 then exit;
setlength(misgrupos, f_numGrupo);
////writeln( 'El grupo elegido es ', f_grupo);
j:=0;
for i:=0 to f_numGrupo-1 do
begin
if i<>f_grupo then
begin
misgrupos[j].nombre:= f_gruposEquipos[i].Nombre;
misgrupos[j].NumeroEquipos:=f_gruposEquipos[i].NumeroEquipos;
setlength(misgrupos[j].Host,f_gruposEquipos[i].NumeroEquipos);
setlength(misgrupos[j].IP,f_gruposEquipos[i].NumeroEquipos);
setlength(misgrupos[j].MAC,f_gruposEquipos[i].NumeroEquipos);
setlength(misgrupos[j].Dominio,f_gruposEquipos[i].NumeroEquipos);
setlength(misgrupos[j].curso,f_gruposEquipos[i].NumeroEquipos);
for z:=0 to misgrupos[j].NumeroEquipos -1 do
begin
misgrupos[j].Host[z]:=f_gruposEquipos[i].Host[z];
misgrupos[j].IP[z]:=f_gruposEquipos[i].ip[z];
misgrupos[j].MAC[z]:=f_gruposEquipos[i].mac[z];
misgrupos[j].Dominio[z]:=f_gruposEquipos[i].dominio[z];
misgrupos[j].curso[z]:=f_gruposEquipos[i].curso[z];
end;
j:=j+1;
end;
end;

f_gruposEquipos:=misgrupos;
f_numGrupo:=f_numGrupo-1;
SetLength(f_gruposEquipos,f_numGrupo);
ltsGrupos.Items.Delete(ltsGrupos.itemindex);
ltsGrupos.ItemIndex:=-1;
mensaje('El grupo '+ mgrupo +' ha sido eliminado',aceptar);
btnEliminarGrupo.Enabled:=false;
btnModificarGrupo.Enabled:=false;
EdGrupo.Text:='';
sgEquiposGrupo.Clean;
sgEquiposGrupo.RowCount:=1;
end;

procedure TfrmGruposServidores.ModificarGrupo;
var
grupo:string;
i:integer;
begin
if (ltsGrupos.Items.count=0) or (ltsGrupos.ItemIndex=-1) then exit;
grupo:=EdGrupo.text;
if mensaje('¿Desea modificar el grupo ' +grupo+'?',sino)=2 then exit;
ltsGrupos.Items[f_grupo]:=grupo;
f_gruposEquipos[f_grupo].Nombre:=grupo;
f_gruposEquipos[f_grupo].NumeroEquipos:=sgEquiposGrupo.RowCount-1;
SetLength(f_gruposEquipos[f_grupo].Host,f_gruposEquipos[f_grupo].NumeroEquipos);
SetLength(f_gruposEquipos[f_grupo].MAC,f_gruposEquipos[f_grupo].NumeroEquipos);
SetLength(f_gruposEquipos[f_grupo].IP,f_gruposEquipos[f_grupo].NumeroEquipos);
SetLength(f_gruposEquipos[f_grupo].curso,f_gruposEquipos[f_grupo].NumeroEquipos);
SetLength(f_gruposEquipos[f_grupo].Dominio,f_gruposEquipos[f_grupo].NumeroEquipos);
for i:=0 to f_gruposEquipos[f_grupo].NumeroEquipos-1 do
begin
f_gruposEquipos[f_grupo].Host[i]:=sgEquiposGrupo.Cells[1,i+1];
f_gruposEquipos[f_grupo].IP[i]:=sgEquiposGrupo.Cells[2,i+1];
f_gruposEquipos[f_grupo].MAC[i]:=sgEquiposGrupo.Cells[3,i+1];
f_gruposEquipos[f_grupo].Dominio[i]:=sgEquiposGrupo.Cells[4,i+1];
f_gruposEquipos[f_grupo].curso[i]:=sgEquiposGrupo.Cells[5,i+1];
end;
mensaje('El grupo ' + EdGrupo.Text + ' ha sido modificado correctamente',aceptar);
end;

procedure TfrmGruposServidores.CargarListaGrupos();
var
i:integer;
begin
if f_numGrupo=0 then exit;;
ltsGrupos.Clear;
for i:=0 to f_numGrupo-1 do
ltsGrupos.Items.Add(f_gruposEquipos[i].nombre);
end;

procedure TfrmGruposServidores.EscribirficheroCursos;
var
Mifichero:TMemIniFile;
j,i:integer;
begin
try
if FileExists('/var/lib/adtos/grupos.ini') then
DeleteFile('/var/lib/adtos/grupos.ini');
Mifichero := TMemIniFile.Create('/var/lib/adtos/grupos.ini');
try
with Mifichero do
begin

for i:=0 to high(f_gruposEquipos) do
WriteString('Grupos','Grupo_'+inttostr(i),f_gruposEquipos[i].nombre);
WriteInteger('Grupos','Numero_Grupos',f_numGrupo);
for i:=0 to high(f_gruposEquipos) do
begin
WriteString('Grupo_'+inttostr(i),'Nombre',f_gruposEquipos[i].nombre);
WriteInteger('Grupo_'+inttostr(i),'Numero_Equipos',f_gruposEquipos[i].NumeroEquipos);
////writeln('Grupo: ','Grupo_'+inttostr(i),'Numero_Equipos: ',f_gruposEquipos[i].NumeroEquipos);
for j:=0 to f_gruposEquipos[i].NumeroEquipos-1 do
begin
WriteString('Grupo_'+inttostr(i),'Host_'+inttostr(j), f_gruposEquipos[i].Host[j]);
WriteString('Grupo_'+inttostr(i),'IP_'+inttostr(j), f_gruposEquipos[i].IP[j]);
WriteString('Grupo_'+inttostr(i),'MAC_'+inttostr(j), f_gruposEquipos[i].MAC[j]);
WriteString('Grupo_'+inttostr(i),'Dominio_'+inttostr(j), f_gruposEquipos[i].Dominio[j]);
WriteString('Grupo_'+inttostr(i),'Curso_'+inttostr(j), f_gruposEquipos[i].curso[j]);
end;
end;
UpdateFile;
end;
finally
Mifichero.free;
end;
except
//Mensaje(MEN_ERROR_GRUPOS,aceptar);
end;
end;

procedure TfrmGruposServidores.AnadirGrupo;
var
nc,i:integer;
begin
f_numGrupo:=f_numGrupo+1;
SetLength(f_gruposEquipos,f_numGrupo);
nc:=f_numGrupo-1;
f_gruposEquipos[nc].Nombre:=EdGrupo.text;
f_gruposEquipos[nc].NumeroEquipos:=sgEquiposGrupo.RowCount-1;
SetLength(f_gruposEquipos[nc].Host,f_gruposEquipos[nc].NumeroEquipos);
SetLength(f_gruposEquipos[nc].MAC,f_gruposEquipos[nc].NumeroEquipos);
SetLength(f_gruposEquipos[nc].IP,f_gruposEquipos[nc].NumeroEquipos);
SetLength(f_gruposEquipos[nc].curso,f_gruposEquipos[nc].NumeroEquipos);
SetLength(f_gruposEquipos[nc].Dominio,f_gruposEquipos[nc].NumeroEquipos);
for i:=0 to f_gruposEquipos[nc].NumeroEquipos-1 do
begin
f_gruposEquipos[nc].Host[i]:=sgEquiposGrupo.Cells[1,i+1];
f_gruposEquipos[nc].IP[i]:=sgEquiposGrupo.Cells[2,i+1];
f_gruposEquipos[nc].MAC[i]:=sgEquiposGrupo.Cells[3,i+1];
f_gruposEquipos[nc].Dominio[i]:=sgEquiposGrupo.Cells[4,i+1];
f_gruposEquipos[nc].curso[i]:=sgEquiposGrupo.Cells[5,i+1];
end;
ltsGrupos.Items.add(EdGrupo.text);
sgEquiposGrupo.RowCount:=1;
EdGrupo.Text:='';
end;

procedure TfrmGruposServidores.cargaListaEquipos(mdominio:string);
var
j,i: integer;

begin
sgED.Clean;
sgEd.RowCount:=g_numero_equipos_registrados+1;
j:=0;
for i:=0 to g_numero_equipos_registrados -1 do
begin
if (Trim(g_EquiposDominio[i].Host)<>'') and ((g_EquiposDominio[i].Dominio=mdominio) or (mdominio='Todos')) then
begin
sgED.Cells[0,j+1]:=inttostr(j);
sgED.Cells[1,j+1]:=g_EquiposDominio[i].Host;
sgED.Cells[2,j+1]:=g_EquiposDominio[i].IP;
sgED.Cells[3,j+1]:=g_EquiposDominio[i].MAC;
sgED.Cells[4,j+1]:=g_EquiposDominio[i].Dominio;
sgED.Cells[5,j+1]:=g_EquiposDominio[i].Curso;
inc(j);
end
end;

if j>0 then sgEd.RowCount:=j+1 else sgEd.RowCount:=1;
end;

procedure TfrmGruposServidores.FormCreate(Sender: TObject);
var
i:integer;
begin
top:=13;
left:=(screen.Width-width) div 2;
f_gruposEquipos:=g_GruposEquipos;
f_numGrupo:=g_NumGrupos;
cboDominios.clear;
for i:=0 to High(g_listadominios) do
cboDominios.Items.Add(g_listadominios[i]);
cboDominios.Items.Add('Todos');
cboDominios.Text:='Todos';
cargaListaEquipos('Todos');
end;

procedure TfrmGruposServidores.FormShow(Sender: TObject);
begin
CargarListaGrupos();
end;

procedure TfrmGruposServidores.ltsGruposClick(Sender: TObject);
var
migrupo:string;
i:integer;
begin
if ltsGrupos.itemindex=-1 then exit;
migrupo:=ltsGrupos.Items[ltsGrupos.itemindex];
f_grupo:=ltsGrupos.itemindex;
EdGrupo.text:=migrupo;
sgEquiposGrupo.Clean;
sgEquiposGrupo.RowCount:=f_gruposEquipos[f_grupo].NumeroEquipos+1;
for i:=0 to f_gruposEquipos[f_grupo].NumeroEquipos-1 do
begin
sgEquiposGrupo.Cells[0,i+1]:=inttostr(i);
sgEquiposGrupo.Cells[1,i+1]:=f_gruposEquipos[f_grupo].Host[i];
sgEquiposGrupo.Cells[2,i+1]:=f_gruposEquipos[f_grupo].IP[i];
sgEquiposGrupo.Cells[3,i+1]:=f_gruposEquipos[f_grupo].MAC[i];
sgEquiposGrupo.Cells[4,i+1]:=f_gruposEquipos[f_grupo].Dominio[i];
sgEquiposGrupo.Cells[5,i+1]:=f_gruposEquipos[f_grupo].curso[i];
end;
btnEliminarGrupo.Enabled:=true;
btnModificarGrupo.Enabled:=true;
end;

procedure TfrmGruposServidores.mnuNuevoClick(Sender: TObject);
begin
EdGrupo.Text:='';
ltsGrupos.ItemIndex:=-1;
sgEquiposGrupo.Clean();
sgEquiposGrupo.RowCount:=1;
EdGrupo.SetFocus;
end;

procedure TfrmGruposServidores.sgEDSelectCell(Sender: TObject; aCol,
aRow: Integer; var CanSelect: Boolean);
begin
f_fila:=aRow;
end;

procedure TfrmGruposServidores.sgEquiposGrupoSelectCell(Sender: TObject; aCol,
aRow: Integer; var CanSelect: Boolean);
begin
f_equipo:=aRow;
end;

procedure TfrmGruposServidores.spArribaClick(Sender: TObject);
begin

end;

procedure TfrmGruposServidores.FormActivate(Sender: TObject);
begin
if frmMain.Visible then frmMain.hide;
end;

procedure TfrmGruposServidores.cboDominiosChange(Sender: TObject);
begin
cargaListaEquipos(cboDominios.Text);
end;

procedure TfrmGruposServidores.cboDominiosKeyPress(Sender: TObject;
var Key: char);
begin
key:=#0;
end;

procedure TfrmGruposServidores.btAnadirEquipoDominioClick(Sender: TObject);
var
ne,ng,numGrupo:integer;
begin
if (sgED.RowCount > 1) and (f_fila>0) then
begin
numGrupo:= sgEquiposGrupo.RowCount;
sgEquiposGrupo.RowCount:=sgEquiposGrupo.RowCount+1;
sgEquiposGrupo.Cells[0,numGrupo]:=inttostr(numGrupo-1);
sgEquiposGrupo.Cells[1,numGrupo]:=sgED.Cells[1,f_fila];
sgEquiposGrupo.Cells[2,numGrupo]:=sgED.Cells[2,f_fila];
sgEquiposGrupo.Cells[3,numGrupo]:=sgED.Cells[3,f_fila];
sgEquiposGrupo.Cells[4,numGrupo]:=sgED.Cells[4,f_fila];
sgEquiposGrupo.Cells[5,numGrupo]:=sgED.Cells[5,f_fila];
////writeln('mi fila es ', numGrupo-1);
end;
if ltsGrupos.ItemIndex<>-1 then
begin
ng:=ltsGrupos.ItemIndex;
ne:=f_gruposEquipos[ng].NumeroEquipos;
f_gruposEquipos[ng].NumeroEquipos:= f_gruposEquipos[ng].NumeroEquipos+1;
SetLength(f_gruposEquipos[ng].Host,f_gruposEquipos[ng].NumeroEquipos);
SetLength(f_gruposEquipos[ng].MAC,f_gruposEquipos[ng].NumeroEquipos);
SetLength(f_gruposEquipos[ng].IP,f_gruposEquipos[ng].NumeroEquipos);
SetLength(f_gruposEquipos[ng].curso,f_gruposEquipos[ng].NumeroEquipos);
SetLength(f_gruposEquipos[ng].Dominio,f_gruposEquipos[ng].NumeroEquipos);
f_gruposEquipos[ng].Host[ne]:=sgED.Cells[1,f_fila];
f_gruposEquipos[ng].IP[ne]:=sgED.Cells[2,f_fila];
f_gruposEquipos[ng].MAC[ne]:=sgED.Cells[3,f_fila];
f_gruposEquipos[ng].Dominio[ne]:=sgED.Cells[4,f_fila];
f_gruposEquipos[ng].Curso[ne]:=sgED.Cells[5,f_fila];
end;
end;

procedure TfrmGruposServidores.btAnadirEquipoClick(Sender: TObject);
begin
sgEquiposGrupo.RowCount:=sgEquiposGrupo.RowCount+1;
if ltsGrupos.ItemIndex=-1 then exit;
f_grupo:=ltsGrupos.ItemIndex;
f_gruposEquipos[f_grupo].NumeroEquipos:=sgEquiposGrupo.RowCount-1;
SetLength(f_gruposEquipos[f_grupo].Host,f_gruposEquipos[f_grupo].NumeroEquipos);
SetLength(f_gruposEquipos[f_grupo].MAC,f_gruposEquipos[f_grupo].NumeroEquipos);
SetLength(f_gruposEquipos[f_grupo].IP,f_gruposEquipos[f_grupo].NumeroEquipos);
SetLength(f_gruposEquipos[f_grupo].curso,f_gruposEquipos[f_grupo].NumeroEquipos);
SetLength(f_gruposEquipos[f_grupo].Dominio,f_gruposEquipos[f_grupo].NumeroEquipos);
end;

Function TfrmGruposServidores.ValidarDatosGrupo():boolean;
var
TextoMensaje:string;
begin
if length(trim(EdGrupo.text)) <1 then
TextoMensaje:='Indica un nombre para este grupo'
else
TextoMensaje:='';
result:=TextoMensaje='';
if not result then
mensaje(TextoMensaje,aceptar);
end;

procedure TfrmGruposServidores.btAnadirGrupoClick(Sender: TObject);
var
grupoexiste:boolean;
i:integer;
begin
grupoexiste:=false;
if ValidarDatosGrupo() then
begin
/////writeln(sgEquiposGrupo.RowCount);
for i:=0 to High(f_gruposEquipos) do
if EdGrupo.text = f_gruposEquipos[i].nombre then
grupoexiste:=true;
if grupoexiste then
mensaje('El grupo ' + EdGrupo.text + ' ya existe. Haz clic en modificar si deseas realizar algún cambio',aceptar)
else if sgEquiposGrupo.RowCount<2 then
mensaje ('El grupo no contiene ningún equipo',aceptar)
else
AnadirGrupo();
end;
end;

procedure TfrmGruposServidores.btMoverAbajoClick(Sender: TObject);
begin
if f_equipo>=sgEquiposGrupo.RowCount-1 then exit;
if(f_equipo=-1) then
mensaje('Selecciona el equipo que deseas mover',aceptar)
else
mueveAbajo
end;

procedure TfrmGruposServidores.btMoverArribaClick(Sender: TObject);
begin
if sgEquiposGrupo.RowCount<2 then exit;
if(f_equipo=-1) then
mensaje('Selecciona el equipo que deseas mover',aceptar)
else
mueveArriba()
end;

procedure TfrmGruposServidores.btnEliminarEquipoClick(Sender: TObject);
begin
if sgEquiposGrupo.RowCount<2 then
mensaje('Este grupo no contiene ningún equipo',aceptar)
else if(f_equipo=-1) then
mensaje('Selecciona el equipo que deseas eliminar de este grupo ',aceptar)
else
EliminarEquipo()
end;
procedure TfrmGruposServidores.mueveArriba();
var
destino:integer;
host,ip,mac,dominio,curso:String;
begin
//f_equipo:=-1;
destino:=f_equipo-1;
//writeln('f_equipo ',f_equipo ,'destino ',destino);
if destino<1 then destino:=1;
if (destino=f_equipo) or (f_equipo<1) then exit;
sgEquiposGrupo.MoveColRow(false,f_equipo,destino);
if ltsGrupos.ItemIndex=-1 then exit;
f_Grupo:=ltsGrupos.ItemIndex;
//writeln('f_equipo ',f_equipo ,'destino ',destino);
host:=f_gruposEquipos[f_Grupo].Host[f_equipo-1];
ip:=f_gruposEquipos[f_Grupo].ip[f_equipo-1];
mac:=f_gruposEquipos[f_Grupo].mac[f_equipo-1];
curso:=f_gruposEquipos[f_Grupo].curso[f_equipo-1];
dominio:=f_gruposEquipos[f_Grupo].Dominio[f_equipo-1];

f_gruposEquipos[f_Grupo].Host[f_equipo-1]:=f_gruposEquipos[f_Grupo].Host[destino-1];
f_gruposEquipos[f_Grupo].ip[f_equipo-1]:=f_gruposEquipos[f_Grupo].ip[destino-1];
f_gruposEquipos[f_Grupo].mac[f_equipo-1]:=f_gruposEquipos[f_Grupo].mac[destino-1];
f_gruposEquipos[f_Grupo].curso[f_equipo-1]:=f_gruposEquipos[f_Grupo].curso[destino-1];
f_gruposEquipos[f_Grupo].Dominio[f_equipo-1]:=f_gruposEquipos[f_Grupo].Dominio[destino-1];

f_gruposEquipos[f_Grupo].Host[destino-1]:=host;
f_gruposEquipos[f_Grupo].IP[destino-1]:=ip;
f_gruposEquipos[f_Grupo].mac[destino-1]:=mac;
f_gruposEquipos[f_Grupo].curso[destino-1]:=curso;
f_gruposEquipos[f_Grupo].Dominio[destino-1]:=dominio;
f_equipo:=destino;

end;
procedure TfrmGruposServidores.mueveAbajo();
var
destino:integer;
host,ip,mac,dominio,curso:String;
begin
//f_equipo:=-1;
destino:=f_equipo+1;
//writeln('f_equipo ',f_equipo ,'destino ',destino,'sgEquiposGrupo.RowCount ',sgEquiposGrupo.RowCount);
if destino> sgEquiposGrupo.RowCount-1 then destino:=sgEquiposGrupo.RowCount-1;
if (destino=f_equipo) or (f_equipo>sgEquiposGrupo.RowCount-1) then exit;
sgEquiposGrupo.MoveColRow(false,f_equipo,destino);
if ltsGrupos.ItemIndex=-1 then exit;
f_Grupo:=ltsGrupos.ItemIndex;

host:=f_gruposEquipos[f_Grupo].Host[f_equipo-1];
ip:=f_gruposEquipos[f_Grupo].ip[f_equipo-1];
mac:=f_gruposEquipos[f_Grupo].mac[f_equipo-1];
curso:=f_gruposEquipos[f_Grupo].curso[f_equipo-1];
dominio:=f_gruposEquipos[f_Grupo].Dominio[f_equipo-1];

f_gruposEquipos[f_Grupo].Host[f_equipo-1]:=f_gruposEquipos[f_Grupo].Host[destino-1];
f_gruposEquipos[f_Grupo].ip[f_equipo-1]:=f_gruposEquipos[f_Grupo].ip[destino-1];
f_gruposEquipos[f_Grupo].mac[f_equipo-1]:=f_gruposEquipos[f_Grupo].mac[destino-1];
f_gruposEquipos[f_Grupo].curso[f_equipo-1]:=f_gruposEquipos[f_Grupo].curso[destino-1];
f_gruposEquipos[f_Grupo].Dominio[f_equipo-1]:=f_gruposEquipos[f_Grupo].Dominio[destino-1];

f_gruposEquipos[f_Grupo].Host[destino-1]:=host;
f_gruposEquipos[f_Grupo].IP[destino-1]:=ip;
f_gruposEquipos[f_Grupo].mac[destino-1]:=mac;
f_gruposEquipos[f_Grupo].curso[destino-1]:=curso;
f_gruposEquipos[f_Grupo].Dominio[destino-1]:=dominio;
f_equipo:=destino;

end;
procedure TfrmGruposServidores.EliminarEquipo();
var
migrupo:TGruposDeEquipos;
ne,numequ,i,j:integer;
begin
ne:=sgEquiposGrupo.Row;
sgEquiposGrupo.DeleteColRow(false,ne);
if ltsGrupos.ItemIndex=-1 then exit;
f_Grupo:=ltsGrupos.ItemIndex;
migrupo.nombre:= f_gruposEquipos[f_Grupo].Nombre;
numequ:=f_gruposEquipos[f_Grupo].NumeroEquipos;
migrupo.NumeroEquipos:=numequ;
setlength(migrupo.Host,numequ);
setlength(migrupo.IP,numequ);
setlength(migrupo.MAC,numequ);
setlength(migrupo.Dominio,numequ);
setlength(migrupo.curso,numequ);
j:=0;
for i:=0 to f_gruposEquipos[f_Grupo].NumeroEquipos-1 do
begin
if i<>ne then
begin
migrupo.Host[j]:=f_gruposEquipos[f_Grupo].Host[i];
migrupo.IP[j]:=f_gruposEquipos[f_Grupo].ip[i];
migrupo.MAC[j]:=f_gruposEquipos[f_Grupo].mac[i];
migrupo.Dominio[j]:=f_gruposEquipos[f_Grupo].dominio[i];
migrupo.curso[j]:=f_gruposEquipos[f_Grupo].curso[i];
inc(j)
end;
end;
numequ:=numequ-1;
migrupo.NumeroEquipos:=numequ;
setlength(migrupo.Host,numequ);
setlength(migrupo.IP,numequ);
setlength(migrupo.MAC,numequ);
setlength(migrupo.Dominio,numequ);
setlength(migrupo.curso,numequ);
f_gruposEquipos[f_Grupo]:=migrupo;
end;

procedure TfrmGruposServidores.btnEliminarGrupoClick(Sender: TObject);
begin
if ltsGrupos.Items.count=0 then
mensaje('No hay ningún grupo para eliminar',aceptar)
else if ltsGrupos.ItemIndex=-1 then
mensaje('Selecciona un grupo',aceptar)
else
EliminarGrupo()
end;

procedure TfrmGruposServidores.btnLimpiarEquiposClick(Sender: TObject);
begin
LimpiarGrupos();
end;

procedure TfrmGruposServidores.btnModificarGrupoClick(Sender: TObject);
begin
if ltsGrupos.ItemIndex=-1 then
mensaje('Selecciona un grupo',aceptar)
else
ModificarGrupo();
end;

procedure TfrmGruposServidores.btnVolverClick(Sender: TObject);
begin
Close;
end;

procedure TfrmGruposServidores.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
CloseAction:=caFree;
end;

procedure TfrmGruposServidores.FormCloseQuery(Sender: TObject; var CanClose: boolean);
begin
if mensaje('¿Deseas abandonar esta pantalla?',sino)=2 then
canclose:=false
else
begin
if mensaje('¿Deseas guardar los cambios realizados?',sino)=1 then
begin
g_NumGrupos:=f_numGrupo;
g_GruposEquipos:=f_gruposEquipos;
EscribirficheroCursos();
application.ProcessMessages;
frmMain.cargaGruposEquipos();
end;
frmMain.show;
hide;
end;
end;

initialization
{$I gruposservidores.lrs}

end.