//--------------------------------------------------------------------------- #include #pragma hdrstop #include "visorAtaque.h" #include "Tmain.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" #include #include "inifiles.hpp" #define min(a, b) (((a) < (b)) ? (a) : (b)) TvisorAtaques *visorAtaques; //--------------------------------------------------------------------------- __fastcall TvisorAtaques::TvisorAtaques(TComponent* Owner) : TForm(Owner) { /* Magnetic Form */ snapped=false; UpdateWorkArea(); //set our workarea rect thresh = 25; //get threshold snapwin = FindWindow("Tmain",NULL); //get window to snap to /*****************/ tipoD->ItemIndex=0; updatingDB=false; /***********************/ } //--------------------------------------------------------------------------- void __fastcall TvisorAtaques::nextTABcontrol(TObject *Sender, char &Key) { if ( Key==VK_RETURN ) { Key=0; SelectNext( (TWinControl*)Sender,true,true ); } } //--------------------------------------------------------------------------- void __fastcall TvisorAtaques::SpeedButton2Click(TObject *Sender) { guardarAtaque(); } //--------------------------------------------------------------------------- int __fastcall TvisorAtaques::guardarAtaque(void) { int n; AnsiString aux; if ( ataqueActual==NULL ) { ataqueActual = new TAtaqueOfensivo; AtaquesOfensivos->Add(ataqueActual); dgAtaques->RowCount = AtaquesOfensivos->Count+1; } ataqueActual->lanzado=false; ataqueActual->evento.status=12;ataqueActual->evento.avisado=true; ataqueActual->numNaves=0; /* Fijamos la velocidad Factor / Base */ switch( velocidadFactor->ItemIndex ) { case '0': ataqueActual->velocidadFactor = 10; break; case '1': ataqueActual->velocidadFactor = 9; break; case '2': ataqueActual->velocidadFactor = 8; break; case '3': ataqueActual->velocidadFactor = 7; break; case '4': ataqueActual->velocidadFactor = 6; break; case '5': ataqueActual->velocidadFactor = 5; break; case '6': ataqueActual->velocidadFactor = 4; break; case '7': ataqueActual->velocidadFactor = 3; break; case '8': ataqueActual->velocidadFactor = 2; break; case '9': ataqueActual->velocidadFactor = 1; break; case '10': ataqueActual->velocidadFactor = 15; break; case '11': ataqueActual->velocidadFactor = 20; break; case '12': ataqueActual->velocidadFactor = 90; break; default: ataqueActual->velocidadFactor = 10; break; } switch( velocidadBase->ItemIndex ) { case 0: ataqueActual->velocidadBase = 0; break; case 1: ataqueActual->velocidadBase = 15000; break; case 2: ataqueActual->velocidadBase = 10000; break; case 3: ataqueActual->velocidadBase = 100000000; break; default: ataqueActual->velocidadBase = 0; break; } // Marca de uso de satelites (Posible BUG de oGAME) ataqueActual->usarSatelites = usarSatelites->Checked; // Origen del ataque aux = planetasOrigen->Items->Strings[ planetasOrigen->ItemIndex ]; ataqueActual->evento.gO=aux.SubString(1,1).ToIntDef(0); ataqueActual->evento.sO=aux.SubString(3,3).ToIntDef(0); ataqueActual->evento.pO=aux.SubString(7,2).ToIntDef(0); ataqueActual->evento.tO=aux.SubString(11,1).ToIntDef(0); // Destino del ataque ataqueActual->evento.gD=gD->Text.ToIntDef(0); ataqueActual->evento.sD=sD->Text.ToIntDef(0); ataqueActual->evento.pD=pD->Text.ToIntDef(0); ataqueActual->evento.tD=(tipoD->ItemIndex+1); // Mision switch( ordenes->ItemIndex ) { case 0: ataqueActual->evento.mision='a'; break; case 1: ataqueActual->evento.mision='d'; break; case 2: ataqueActual->evento.mision='t'; break; case 3: ataqueActual->evento.mision='r'; break; case 4: ataqueActual->evento.mision='e'; break; } // Naves que intervienen... // CARGA PEQUEÑA n = Edit1->Text.ToIntDef(0); if ( n>0 ) { ataqueActual->naves[ataqueActual->numNaves].id=202; ataqueActual->naves[ataqueActual->numNaves].consumption=10; ataqueActual->naves[ataqueActual->numNaves].speed=5000; ataqueActual->naves[ataqueActual->numNaves].capacity=5000; ataqueActual->naves[ataqueActual->numNaves].maxship = n; ataqueActual->naves[ataqueActual->numNaves].ship = n; ataqueActual->numNaves++; } // CARGA GRANDE n = Edit2->Text.ToIntDef(0); if ( n>0 ) { ataqueActual->naves[ataqueActual->numNaves].id=203; ataqueActual->naves[ataqueActual->numNaves].consumption=50; ataqueActual->naves[ataqueActual->numNaves].speed=7500; ataqueActual->naves[ataqueActual->numNaves].capacity=25000; ataqueActual->naves[ataqueActual->numNaves].maxship = n; ataqueActual->naves[ataqueActual->numNaves].ship = n; ataqueActual->numNaves++; } // CAZADOR LIGERO n = Edit3->Text.ToIntDef(0); if ( n>0 ) { ataqueActual->naves[ataqueActual->numNaves].id=204; ataqueActual->naves[ataqueActual->numNaves].consumption=20; ataqueActual->naves[ataqueActual->numNaves].speed=12500; ataqueActual->naves[ataqueActual->numNaves].capacity=50; ataqueActual->naves[ataqueActual->numNaves].maxship = n; ataqueActual->naves[ataqueActual->numNaves].ship = n; ataqueActual->numNaves++; } // CAZADOR PESADO n = Edit4->Text.ToIntDef(0); if ( n>0 ) { ataqueActual->naves[ataqueActual->numNaves].id=205; ataqueActual->naves[ataqueActual->numNaves].consumption=75; ataqueActual->naves[ataqueActual->numNaves].speed=10000; ataqueActual->naves[ataqueActual->numNaves].capacity=100; ataqueActual->naves[ataqueActual->numNaves].maxship = n; ataqueActual->naves[ataqueActual->numNaves].ship = n; ataqueActual->numNaves++; } // CRUCERO n = Edit5->Text.ToIntDef(0); if ( n>0 ) { ataqueActual->naves[ataqueActual->numNaves].id=206; ataqueActual->naves[ataqueActual->numNaves].consumption=300; ataqueActual->naves[ataqueActual->numNaves].speed=15000; ataqueActual->naves[ataqueActual->numNaves].capacity=800; ataqueActual->naves[ataqueActual->numNaves].maxship = n; ataqueActual->naves[ataqueActual->numNaves].ship = n; ataqueActual->numNaves++; } // NAVE DE BATALLA n = Edit6->Text.ToIntDef(0); if ( n>0 ) { ataqueActual->naves[ataqueActual->numNaves].id=207; ataqueActual->naves[ataqueActual->numNaves].consumption=500; ataqueActual->naves[ataqueActual->numNaves].speed=10000; ataqueActual->naves[ataqueActual->numNaves].capacity=1500; ataqueActual->naves[ataqueActual->numNaves].maxship = n; ataqueActual->naves[ataqueActual->numNaves].ship = n; ataqueActual->numNaves++; } // COLONIZADOR n = Edit7->Text.ToIntDef(0); if ( n>0 ) { ataqueActual->naves[ataqueActual->numNaves].id=208; ataqueActual->naves[ataqueActual->numNaves].consumption=1000; ataqueActual->naves[ataqueActual->numNaves].speed=2500; ataqueActual->naves[ataqueActual->numNaves].capacity=7500; ataqueActual->naves[ataqueActual->numNaves].maxship = n; ataqueActual->naves[ataqueActual->numNaves].ship = n; ataqueActual->numNaves++; } // RECICLADOR n = Edit8->Text.ToIntDef(0); if ( n>0 ) { ataqueActual->naves[ataqueActual->numNaves].id=209; ataqueActual->naves[ataqueActual->numNaves].consumption=300; ataqueActual->naves[ataqueActual->numNaves].speed=2000; ataqueActual->naves[ataqueActual->numNaves].capacity=20000; ataqueActual->naves[ataqueActual->numNaves].maxship = n; ataqueActual->naves[ataqueActual->numNaves].ship = n; ataqueActual->numNaves++; } // SONDA DE ESPIONAJE n = Edit9->Text.ToIntDef(0); if ( n>0 ) { ataqueActual->naves[ataqueActual->numNaves].id=210; ataqueActual->naves[ataqueActual->numNaves].consumption=1; ataqueActual->naves[ataqueActual->numNaves].speed=100000000; ataqueActual->naves[ataqueActual->numNaves].capacity=5; ataqueActual->naves[ataqueActual->numNaves].maxship = n; ataqueActual->naves[ataqueActual->numNaves].ship = n; ataqueActual->numNaves++; } // BOMBARDERO n = Edit10->Text.ToIntDef(0); if ( n>0 ) { ataqueActual->naves[ataqueActual->numNaves].id=211; ataqueActual->naves[ataqueActual->numNaves].consumption=1000; ataqueActual->naves[ataqueActual->numNaves].speed=4000; ataqueActual->naves[ataqueActual->numNaves].capacity=500; ataqueActual->naves[ataqueActual->numNaves].maxship = n; ataqueActual->naves[ataqueActual->numNaves].ship = n; ataqueActual->numNaves++; } // SATELITE SOLAR n = Edit11->Text.ToIntDef(0); if ( n>0 ) { ataqueActual->naves[ataqueActual->numNaves].id=212; ataqueActual->naves[ataqueActual->numNaves].consumption=1; ataqueActual->naves[ataqueActual->numNaves].speed=100000000; ataqueActual->naves[ataqueActual->numNaves].capacity=10000000; ataqueActual->naves[ataqueActual->numNaves].maxship = n; ataqueActual->naves[ataqueActual->numNaves].ship = n; ataqueActual->numNaves++; } // DESTRUCTOR n = Edit12->Text.ToIntDef(0); if ( n>0 ) { ataqueActual->naves[ataqueActual->numNaves].id=213; ataqueActual->naves[ataqueActual->numNaves].consumption=1000; ataqueActual->naves[ataqueActual->numNaves].speed=5000; ataqueActual->naves[ataqueActual->numNaves].capacity=2000; ataqueActual->naves[ataqueActual->numNaves].maxship = n; ataqueActual->naves[ataqueActual->numNaves].ship = n; ataqueActual->numNaves++; } // ESTRELLA DE LA MUERTE n = Edit13->Text.ToIntDef(0); if ( n>0 ) { ataqueActual->naves[ataqueActual->numNaves].id=214; ataqueActual->naves[ataqueActual->numNaves].consumption=1; ataqueActual->naves[ataqueActual->numNaves].speed=100; ataqueActual->naves[ataqueActual->numNaves].capacity=1000000; ataqueActual->naves[ataqueActual->numNaves].maxship = n; ataqueActual->naves[ataqueActual->numNaves].ship = n; ataqueActual->numNaves++; } return AtaquesOfensivos->IndexOf(ataqueActual); } //--------------------------------------------------------------------------- void __fastcall TvisorAtaques::SpeedButton5Click(TObject *Sender) { if ( dgAtaques->Row < (dgAtaques->RowCount-1) ) dgAtaques->Row++; } //--------------------------------------------------------------------------- void __fastcall TvisorAtaques::SpeedButton6Click(TObject *Sender) { if ( dgAtaques->Row > 1 ) dgAtaques->Row--; } //--------------------------------------------------------------------------- void __fastcall TvisorAtaques::nuevoAtaque(void) { int i; ataqueActual=NULL; i = guardarAtaque(); resetAtaque(i); cargarAtaque(i); } //--------------------------------------------------------------------------- void __fastcall TvisorAtaques::SpeedButton1Click(TObject *Sender) { guardarAtaque(); nuevoAtaque(); dgAtaques->Row=dgAtaques->RowCount-1; } //--------------------------------------------------------------------------- void __fastcall TvisorAtaques::resetAtaque(int i) { AnsiString aux; ataqueActual = (TAtaqueOfensivo *)AtaquesOfensivos->Items[i]; ataqueActual->lanzado=false; ataqueActual->numNaves=0; ataqueActual->velocidadBase = 0; ataqueActual->velocidadFactor = 0; ataqueActual->usarSatelites = false; // Origen del ataque aux = planetasOrigen->Items->Strings[ 0 ]; ataqueActual->evento.gO=aux.SubString(1,1).ToIntDef(0); ataqueActual->evento.sO=aux.SubString(3,3).ToIntDef(0); ataqueActual->evento.pO=aux.SubString(7,2).ToIntDef(0); ataqueActual->evento.tO=aux.SubString(11,1).ToIntDef(0); // Destino del ataque ataqueActual->evento.gD=ataqueActual->evento.gO; ataqueActual->evento.sD=0; ataqueActual->evento.pD=0; ataqueActual->evento.tD=1; // Mision ataqueActual->evento.mision='a'; // Naves que intervienen... for ( i=0; i<13; i++ ) { ataqueActual->naves[i].id = 0; ataqueActual->naves[i].ship = 0; } } //--------------------------------------------------------------------------- void __fastcall TvisorAtaques::cargarAtaque(int i) { ataqueActual = (TAtaqueOfensivo *)AtaquesOfensivos->Items[i]; dgAtaques->RowCount = AtaquesOfensivos->Count+1; // Fijamos los datos del destino... gD->Text = AnsiString( ataqueActual->evento.gD ); sD->Text = AnsiString( ataqueActual->evento.sD ); pD->Text = AnsiString( ataqueActual->evento.pD ); tipoD->ItemIndex = (ataqueActual->evento.tD-1); // mision switch( ataqueActual->evento.mision ) { case 'a': ordenes->ItemIndex=0; break; case 'd': ordenes->ItemIndex=1; break; case 't': ordenes->ItemIndex=2; break; case 'r': ordenes->ItemIndex=3; break; case 'e': ordenes->ItemIndex=4; break; } // Fijamos los datos del origen... AnsiString aux; aux = Format("%d:%.3d:%.2d -%d-",ARRAYOFCONST((ataqueActual->evento.gO,ataqueActual->evento.sO,ataqueActual->evento.pO,ataqueActual->evento.tO)) ); /* buscamos en la lista de planetas origen, un patron que concuerde con el formato anterior */ for( i=0;iItems->Count;i++ ) if ( planetasOrigen->Items->Strings[i].Pos(aux)!=0 ) planetasOrigen->ItemIndex=i; /* Fijamos la velocidad Factor / Base */ switch( ataqueActual->velocidadFactor ) { case '10': velocidadFactor->ItemIndex = 0; break; case '9': velocidadFactor->ItemIndex = 1; break; case '8': velocidadFactor->ItemIndex = 2; break; case '7': velocidadFactor->ItemIndex = 3; break; case '6': velocidadFactor->ItemIndex = 4; break; case '5': velocidadFactor->ItemIndex = 5; break; case '4': velocidadFactor->ItemIndex = 6; break; case '3': velocidadFactor->ItemIndex = 7; break; case '2': velocidadFactor->ItemIndex = 8; break; case '1': velocidadFactor->ItemIndex = 9; break; case '15': velocidadFactor->ItemIndex = 10; break; case '20': velocidadFactor->ItemIndex = 11; break; case '90': velocidadFactor->ItemIndex = 12; break; default: velocidadFactor->ItemIndex = 0; break; } switch( ataqueActual->velocidadBase ) { case 0: velocidadBase->ItemIndex = 0; break; case 15000: velocidadBase->ItemIndex = 1; break; case 10000: velocidadBase->ItemIndex = 2; break; case 100000000: velocidadBase->ItemIndex = 3; break; default: velocidadBase->ItemIndex = 0; break; } // Marca de uso de satelites (Posible BUG de oGAME) usarSatelites->Checked = ataqueActual->usarSatelites; Edit1->Text=0;Edit2->Text=0;Edit3->Text=0;Edit4->Text=0;Edit5->Text=0;Edit6->Text=0;Edit7->Text=0;Edit8->Text=0; Edit9->Text=0;Edit10->Text=0;Edit11->Text=0;Edit12->Text=0;Edit13->Text=0; // Naves que intervienen... for ( i=0; inumNaves; i++ ) { switch( ataqueActual->naves[i].id ) { case 202: Edit1->Text = ataqueActual->naves[i].ship; break; case 203: Edit2->Text = ataqueActual->naves[i].ship; break; case 204: Edit3->Text = ataqueActual->naves[i].ship; break; case 205: Edit4->Text = ataqueActual->naves[i].ship; break; case 206: Edit5->Text = ataqueActual->naves[i].ship; break; case 207: Edit6->Text = ataqueActual->naves[i].ship; break; case 208: Edit7->Text = ataqueActual->naves[i].ship; break; case 209: Edit8->Text = ataqueActual->naves[i].ship; break; case 210: Edit9->Text = ataqueActual->naves[i].ship; break; case 211: Edit10->Text = ataqueActual->naves[i].ship; break; case 212: Edit11->Text = ataqueActual->naves[i].ship; break; case 213: Edit12->Text = ataqueActual->naves[i].ship; break; case 214: Edit13->Text = ataqueActual->naves[i].ship; break; } } } //--------------------------------------------------------------------------- void __fastcall TvisorAtaques::dgAtaquesDrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) { if ( ARow==0 ) { if ( ACol==0 ) dgAtaques->RowHeights[0]=18; dgAtaques->Canvas->TextOut(Rect.Left,Rect.Top," Planeta Origen"); dgAtaques->Canvas->TextOut(Rect.Left+120,Rect.Top," [GSP] Destino" ); dgAtaques->Canvas->TextOut(Rect.Left+240,Rect.Top," Ord" ); } else { if ( ARow <= AtaquesOfensivos->Count ) // if ( (ARow-1) < AtaquesOfensivos->Count ) { int tH,tM,tS; PAtaqueOfensivo EAtaque; EAtaque = (PAtaqueOfensivo)AtaquesOfensivos->Items[ARow-1]; // Fondo del GRID if (!State.Contains(gdFocused)) { switch( EAtaque->evento.mision ) { case 's': dgAtaques->Canvas->Brush->Color = 0x007DDBFF; break; case 't': dgAtaques->Canvas->Brush->Color = clSkyBlue; break; case 'A': dgAtaques->Canvas->Brush->Color = 0x006262FF; break; case 'r': dgAtaques->Canvas->Brush->Color = 0x007282B8; break; /* BGR */ default: dgAtaques->Canvas->Brush->Color = clWhite; } } dgAtaques->Canvas->TextRect(TRect(Rect.Left,Rect.Top,Rect.Right,Rect.Top+16),Rect.Left,Rect.Top,"["+AnsiString(EAtaque->evento.gO)+":"+AnsiString(EAtaque->evento.sO)+":"+AnsiString(EAtaque->evento.pO)+"]."+AnsiString(EAtaque->evento.tO)); dgAtaques->Canvas->TextRect(TRect(Rect.Left+120,Rect.Top,Rect.Right,Rect.Top+16),Rect.Left+120,Rect.Top,"["+AnsiString(EAtaque->evento.gD)+":"+AnsiString(EAtaque->evento.sD)+":"+AnsiString(EAtaque->evento.pD)+"]."+AnsiString(EAtaque->evento.tD)); dgAtaques->Canvas->TextRect(TRect(Rect.Left+240,Rect.Top,Rect.Right,Rect.Top+16),Rect.Left+240,Rect.Top, EAtaque->evento.mision); dgAtaques->Canvas->TextRect(TRect(Rect.Left,Rect.Top+16,Rect.Right,Rect.Bottom),Rect.Left,Rect.Top + 16, digerirFlota(EAtaque->naves,EAtaque->numNaves) ); if (State.Contains(gdFocused)) dgAtaques->Canvas->DrawFocusRect(Rect); } } } //--------------------------------------------------------------------------- void __fastcall TvisorAtaques::dgAtaquesSelectCell(TObject *Sender, int ACol, int ARow, bool &CanSelect) { if ( ARow<1 ) CanSelect=false; else { if (!updatingDB) guardarAtaque(); cargarAtaque(ARow-1); } } //--------------------------------------------------------------------------- AnsiString __fastcall TvisorAtaques::digerirFlota(THangar *naves,int numNaves) { AnsiString dev; int i; for ( i=0; iIndexOf(ataqueActual); if ( i>=0 ) { delete ataqueActual; ataqueActual = NULL; AtaquesOfensivos->Delete(i); if ( AtaquesOfensivos->Count==0 ) { nuevoAtaque(); dgAtaques->RowCount = AtaquesOfensivos->Count + 1; dgAtaques->FixedRows=1; dgAtaques->Row=1; } else { if ( i==0 ) { cargarAtaque(0); dgAtaques->Row=1; } else { cargarAtaque(i-1); dgAtaques->Row=i; } } } updatingDB = false; } //--------------------------------------------------------------------------- void __fastcall TvisorAtaques::SpeedButton3Click(TObject *Sender) { bool save; int i; if (SaveDialog1->Execute()) { save = true; if ( FileExists(SaveDialog1->FileName) ) save = ( MessageDlg("El fichero destino ya existe. ¿reemplazar archivo? ", mtWarning, TMsgDlgButtons() << mbYes << mbNo << mbCancel, 0) == mrYes ); if ( save ) { FILE *out; if ((out = fopen(SaveDialog1->FileName.c_str(), "wt")) != NULL) { // Parseamos la lista de ataques a un CVS // gO,sO,pO,tO,mision,gD,sD,pD,tD,velocidad,metal,cristal,deuterio,-1,-2,-3,-4,-5,#c,#C,#lg,#cz,#cr,#nb~,#col,#rc,#S,#b,#sat,#d,#edlm TAtaqueOfensivo *Ataque; for (i=0;iCount; i++ ) { Ataque = (TAtaqueOfensivo *)AtaquesOfensivos->Items[i]; fprintf( out, "%d:%0.3d:%0.2d.%d,%c,%d:%0.3d:%0.2d.%d,%d,%ld,0,0,0,0,0,0,%d,%d:{%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d}\n", Ataque->evento.gO,Ataque->evento.sO,Ataque->evento.pO,Ataque->evento.tO, Ataque->evento.mision, Ataque->evento.gD,Ataque->evento.sD,Ataque->evento.pD,Ataque->evento.tD, Ataque->velocidadFactor,Ataque->velocidadBase, (Ataque->usarSatelites?1:0), Ataque->numNaves, Ataque->naves[0].id,Ataque->naves[0].ship, Ataque->naves[1].id,Ataque->naves[1].ship, Ataque->naves[2].id,Ataque->naves[2].ship, Ataque->naves[3].id,Ataque->naves[3].ship, Ataque->naves[4].id,Ataque->naves[4].ship, Ataque->naves[5].id,Ataque->naves[5].ship, Ataque->naves[6].id,Ataque->naves[6].ship, Ataque->naves[7].id,Ataque->naves[7].ship, Ataque->naves[8].id,Ataque->naves[8].ship, Ataque->naves[9].id,Ataque->naves[9].ship, Ataque->naves[10].id,Ataque->naves[10].ship, Ataque->naves[11].id,Ataque->naves[11].ship, Ataque->naves[12].id,Ataque->naves[12].ship ); } fclose(out); } } } } //--------------------------------------------------------------------------- void __fastcall TvisorAtaques::SpeedButton7Click(TObject *Sender) { if (OpenDialog1->Execute() && FileExists(OpenDialog1->FileName) ) { updatingDB = true; dgAtaques->RowCount = 1; TIniFile *ini; ini = new TIniFile(ExtractFileDir(Application->ExeName)+"\\salvaVidas.ini"); if ( main->cargarAtaques(OpenDialog1->FileName) ) { ini->WriteString("colaAtaques","nombreCola",OpenDialog1->FileName); dgAtaques->RowCount = AtaquesOfensivos->Count+1; if (dgAtaques->RowCount>1) { dgAtaques->FixedRows=1; // ataqueActual = NULL; cargarAtaque(0); // dgAtaques->Row=1; } } else ini->WriteString("colaAtaques","nombreCola",""); delete ini; updatingDB = false; } } /* bool __fastcall TvisorAtaques::cargarAtaques(AnsiString filename) { float aux; bool dev; dev=false; FILE *in; if ((in = fopen(filename.c_str(), "rt")) != NULL) { TAtaqueOfensivo *Ataque; // BEGIN -- Limpiamos la cola actual int i; for (i=0;iCount;i++) { Ataque = (TAtaqueOfensivo *)AtaquesOfensivos->Items[i]; delete Ataque; } AtaquesOfensivos->Clear(); // END -- Limpiamos la cola actual int _usarSatelites; i=0; Ataque = new TAtaqueOfensivo; do { i = fscanf(in,"%d:%d:%d.%d,%c,%d:%d:%d.%d,%d,%ld,%d,%d,%d,%d,%d,%d,%d,%d:{%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d}", &Ataque->evento.gO,&Ataque->evento.sO,&Ataque->evento.pO,&Ataque->evento.tO, &Ataque->evento.mision, &Ataque->evento.gD,&Ataque->evento.sD,&Ataque->evento.pD,&Ataque->evento.tD, &Ataque->velocidadFactor,&Ataque->velocidadBase, &aux,&aux,&aux,&aux,&aux,&aux, &_usarSatelites, &Ataque->numNaves, &Ataque->naves[0].id,&Ataque->naves[0].ship, &Ataque->naves[1].id,&Ataque->naves[1].ship, &Ataque->naves[2].id,&Ataque->naves[2].ship, &Ataque->naves[3].id,&Ataque->naves[3].ship, &Ataque->naves[4].id,&Ataque->naves[4].ship, &Ataque->naves[5].id,&Ataque->naves[5].ship, &Ataque->naves[6].id,&Ataque->naves[6].ship, &Ataque->naves[7].id,&Ataque->naves[7].ship, &Ataque->naves[8].id,&Ataque->naves[8].ship, &Ataque->naves[9].id,&Ataque->naves[9].ship, &Ataque->naves[10].id,&Ataque->naves[10].ship, &Ataque->naves[11].id,&Ataque->naves[11].ship, &Ataque->naves[12].id,&Ataque->naves[12].ship ); if ( i>0 ) { Ataque->usarSatelites = (_usarSatelites==1); Ataque->lanzado = false; Ataque->evento.status=12;Ataque->evento.avisado=true; if ( Ataque->numNaves>13 ) Ataque->numNaves=13; main->fixParams(Ataque->naves); AtaquesOfensivos->Add(Ataque); Ataque = new TAtaqueOfensivo; } }while( i>0 ); delete Ataque; fclose(in); dev = true; } return dev; } */ //--------------------------------------------------------------------------- /* Magnetic Form */ /*****************/ //--------------------------------------------------------------------------- void __fastcall TvisorAtaques::SettingChanged(TMessage &msg) { UpdateWorkArea(); } //--------------------------------------------------------------------------- void __fastcall TvisorAtaques::WMWindowPosChanging(TWMWindowPosChanging &msg) { RECT sr; snapped=false; //test window if (snapwin && IsWindowVisible(snapwin)) { if (GetWindowRect(snapwin,&sr)) { if ( (msg.WindowPos->x <= (sr.right+thresh)) && (msg.WindowPos->x >= (sr.right-thresh)) ) { if ((msg.WindowPos->y > sr.top) && (msg.WindowPos->y < sr.bottom)) { snapped=true; msg.WindowPos->x = sr.right; } } else if ((msg.WindowPos->x + msg.WindowPos->cx) >= (sr.left-thresh) && (msg.WindowPos->x + msg.WindowPos->cx) <= (sr.left+thresh)) { if ((msg.WindowPos->y > sr.top) && (msg.WindowPos->y < sr.bottom)) { snapped=true; msg.WindowPos->x = sr.left-msg.WindowPos->cx; } } if ( (msg.WindowPos->y <= (sr.bottom+thresh)) && (msg.WindowPos->y >= (sr.bottom-thresh)) ) { if ((msg.WindowPos->x > sr.left) && (msg.WindowPos->x < sr.right)) { snapped=true; msg.WindowPos->y = sr.bottom; } } else if ((msg.WindowPos->y + msg.WindowPos->cy) <= (sr.top+thresh) && (msg.WindowPos->y + msg.WindowPos->cy) >= (sr.top-thresh)) { if ((msg.WindowPos->x > sr.left) && (msg.WindowPos->x < sr.right)) { snapped=true; msg.WindowPos->y = sr.top-msg.WindowPos->cy; } } } } //test screen sr = work_area; if (abs(msg.WindowPos->x) <= (sr.left+thresh)) { snapped=true; msg.WindowPos->x = sr.left; } else if ((msg.WindowPos->x + msg.WindowPos->cx) >= (sr.right-thresh) && (msg.WindowPos->x + msg.WindowPos->cx) <= (sr.right+thresh)) { snapped=true; msg.WindowPos->x = sr.right-msg.WindowPos->cx; } if (abs(msg.WindowPos->y) <= (sr.top+thresh)) { snapped=true; msg.WindowPos->y = sr.top; } else if ((msg.WindowPos->y+msg.WindowPos->cy) >= (sr.bottom-thresh) && (msg.WindowPos->y+msg.WindowPos->cy) <= (sr.bottom+thresh)) { snapped=true; msg.WindowPos->y = sr.bottom-msg.WindowPos->cy; } } //--------------------------------------------------------------------------- void __fastcall TvisorAtaques::UpdateWorkArea() { SystemParametersInfo(SPI_GETWORKAREA, 0, &work_area, 0); //get the size of the desktop or whatever } //---------------------------------------------------------------------------