Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - DeXon18

#1
PHP / Re: Problemas con un Array
3 Junio 2015, 20:22 PM
Gracias #!drvy, no veas que dolor de cabeza me estaba dando eso.

Mil gracias de verdad!!
#2
PHP / [Resuelto] Problemas con un Array
2 Junio 2015, 19:09 PM
Hola buenas tardes a ver si me pueden ayudar ya que llevo medio día pegándome con este código pero lo logro sacar lo que necesito.

El código es este
Código (php) [Seleccionar]
$fname= $_GET["valor"];


function findAllDirs($start) {
   $dirStack=[$start];
   while($dir=array_shift($dirStack)) {
       $ar=glob($dir.'/*',GLOB_ONLYDIR|GLOB_NOSORT);
       if(!$ar) continue;

       $dirStack=array_merge($dirStack,$ar);
       foreach($ar as $DIR)
           yield $DIR;
   }
}


$result=[];
foreach(findAllDirs('D:\xampp\htdocs\www\serverpruebas') as $dir) {
   $match=glob($dir.'/'.$fname,GLOB_NOSORT);
   if(!$match) continue;

   $result=array_merge($result,$match);

}

echo '<pre>';
print_r($result);
echo '</pre>';


Y el resultado es este:

Array
(
   [ 0 ] => D:\xampp\htdocs\www\serverprueba\COMMAND.arc
)

Y lo que estoy intentado hacer es esto:

   [ 0 ] => Array
       (
           [name] => COMMAND.arc
           [size] => 21160480
           [date] => 2015-06-02 16:48:05
       )


Espero que me puedan ayudar.

Un saludo y gracias de antemano
#3
Voy a intentar simplificarlo a ver si asi lo soluciono o no es tan complejo como intento hacerlo.

gracias de nuevo
#4
Bases de Datos / Re:
19 Agosto 2014, 12:08 PM
Cita de: vladek en 18 Agosto 2014, 22:31 PM
Si lo que querés es un solo registro donde los primeros dos campos pertenezcan a ese query y el tercero a otro query, el tercer campo debería ser un subquery.

Mirare eso que me comentaste, se que más o menos es asi pero no logro sacarlo bien.

Salu2 y gracias
#5
Bases de Datos / Sacar 3 resultados de 2 tablas
18 Agosto 2014, 17:26 PM
Hola buenas, lo que ando intentando es sacar 3 datos de 2 tablas diferentes. las consultas que tengo son estas:

Código (sql) [Seleccionar]
SELECT fecha_descargas_dia, SUM(num_descargas_dia) num_descargas_dia FROM descargas_dia GROUP BY fecha_descargas_dia ASC

que devuelve estos datos

Código (sql) [Seleccionar]
|2014-08-01|1
|2014-08-02|7
|2014-08-03|10
|2014-08-04|11
|2014-08-05|8


y esta otra:
Código (sql) [Seleccionar]
SELECT fecha_instalaciones_dia, SUM(num_instalaciones_dia) num_instalaciones_dia FROM instalaciones_dia GROUP BY fecha_instalaciones_dia ASC

que devuelve estos datos

Código (sql) [Seleccionar]
|2014-08-01|2
|2014-08-02|20
|2014-08-03|15
|2014-08-04|12
|2014-08-05|5


Lo que llevo 3 horas intentando es que me de el mismo día con lo 2 datos de las tablas

Código (sql) [Seleccionar]
|2014-08-02|7|20

Espero que me puedan ayudar.

Un saludo y mil gracias de antemano!
#6
HOla buenas, llevo toda la mañana mirando como crear un boton(justo al lado de atras) en el apartado de la selección de los complementos, y que cuando se pulse en el aparezca como un label que muestre lo que tengo generado en el codigo.
Código (pascal) [Seleccionar]

[Setup]
Appname=My Program
AppVername=My Program version 1.5
DefaultDirname=%25257Bpf%25257D%25255CMy Program
DefaultGroupname=My Program
OutputDir=.

[Types]
Name: "full"; Description: "Full installation"
Name: "compact"; Description: "Compact installation"
Name: "custom"; Description: "Custom installation"; Flags: iscustom

[Components]
Name: "program"; Description: "Program Files"; Types: full compact custom; Flags: fixed
Name: "help"; Description: "Help File"; Types: full
Name: "readme"; Description: "Readme File"; Types: full
Name: "readme\en"; Description: "English"; Flags: exclusive
Name: "readme\de"; Description: "German"; Flags: exclusive

[Files]
Source: descctrl.dll; Flags: dontcopy

[_Code]
#ifdef UNICODE
 #define AW "W"
#else
 #define AW "A"
#endif

type
 HMONITOR = THandle;
 TMonitorInfo = record
   cbSize: DWORD;
   rcMonitor: TRect;
   rcWork: TRect;
   dwFlags: DWORD;
 end;

const
 MONITOR_DEFAULTTONULL = $0;
 MONITOR_DEFAULTTOPRIMARY = $1;
 MONITOR_DEFAULTTONEAREST = $2;

function GetMonitorInfo(hMonitor: HMONITOR; out lpmi: TMonitorInfo): BOOL;
 external 'GetMonitorInfo{#AW}@user32.dll stdcall';
function MonitorFromWindow(hwnd: HWND; dwFlags: DWORD): HMONITOR;
 external 'MonitorFromWindow@user32.dll stdcall';

procedure CenterForm(Form: TForm; Horz, Vert: Boolean);
var
 X, Y: Integer;
 Monitor: HMONITOR;
 MonitorInfo: TMonitorInfo;
begin
 if not (Horz or Vert) then
   Exit;
 Monitor := MonitorFromWindow(Form.Handle, MONITOR_DEFAULTTONEAREST);
 MonitorInfo.cbSize := SizeOf(MonitorInfo);
 if GetMonitorInfo(Monitor, MonitorInfo) then
 begin
   if not Horz then
     X := Form.Left
   else
     X := MonitorInfo.rcWork.Left + ((MonitorInfo.rcWork.Right -
       MonitorInfo.rcWork.Left) - Form.Width) div 2;
   if not Vert then
     Y := Form.Top
   else
     Y := MonitorInfo.rcWork.Top + ((MonitorInfo.rcWork.Bottom -
       MonitorInfo.rcWork.Top) - Form.Height) div 2;
   Form.SetBounds(X, Y, Form.Width, Form.Height);
 end;
end;


function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';
function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

var
 Info: TNewStaticText;
 InfoCaption: TNewStaticText;
 InfoPanel: TPanel;

procedure DeinitializeSetup();
begin
 disabledesc();
end;

type
 TPositionStorage = array of Integer;

var
 CompPageModified: Boolean;
 CompPagePositions: TPositionStorage;

procedure SaveComponentsPage(out Storage: TPositionStorage);
begin
 SetArrayLength(Storage, 10);

 Storage[0] := WizardForm.Height;
 Storage[1] := WizardForm.NextButton.Top;
 Storage[2] := WizardForm.BackButton.Top;
 Storage[3] := WizardForm.CancelButton.Top;
 Storage[4] := WizardForm.ComponentsList.Height;
 Storage[5] := WizardForm.OuterNotebook.Height;
 Storage[6] := WizardForm.InnerNotebook.Height;
 Storage[7] := WizardForm.Bevel.Top;
 Storage[8] := WizardForm.BeveledLabel.Top;
 Storage[9] := WizardForm.ComponentsDiskSpaceLabel.Top;
end;

procedure LoadComponentsPage(const Storage: TPositionStorage;
 HeightOffset: Integer);
begin
 if GetArrayLength(Storage) <> 10 then
   RaiseException('Invalid storage array length.');

 WizardForm.Height := Storage[0] + HeightOffset;
 WizardForm.NextButton.Top := Storage[1] + HeightOffset;
 WizardForm.BackButton.Top := Storage[2] + HeightOffset;
 WizardForm.CancelButton.Top := Storage[3] + HeightOffset;
 WizardForm.ComponentsList.Height := Storage[4] + HeightOffset;
 WizardForm.OuterNotebook.Height := Storage[5] + HeightOffset;
 WizardForm.InnerNotebook.Height := Storage[6] + HeightOffset;
 WizardForm.Bevel.Top := Storage[7] + HeightOffset;
 WizardForm.BeveledLabel.Top := Storage[8] + HeightOffset;
 WizardForm.ComponentsDiskSpaceLabel.Top := Storage[9] + HeightOffset;
end;



// Meter esto al pulsar el botón detalles
 procedure InitializeWizard();
 begin
   WizardForm.ComponentsList.Height := ScaleY(90);
   WizardForm.ComponentsList.Width := ScaleX(415);

   InfoPanel := TPanel.Create(WizardForm);
   InfoPanel.Parent := WizardForm.SelectComponentsPage;
   InfoPanel.Top := Scaley(360);
   InfoPanel.Left := ScaleX(0);
   InfoPanel.Width := WizardForm.ComponentsList.Width;
   InfoPanel.Height := ScaleY(50);
   InfoPanel.BevelInner := bvRaised;
   InfoPanel.BevelOuter := bvLowered;
   Info := TNewStaticText.Create(WizardForm);
   Info.Parent := InfoPanel;
   Info.AutoSize := true;
   Info.Left := ScaleX(6);
   Info.Width := ScaleX(400);
   Info.Top := ScaleY(5); // Linea de texto
   Info.WordWrap := true;
   enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
         // Sustituir por ExpandConstant('{cm:Descripcion};') +
        'Descrip. Program Files;'+
        'Descrip. Help File;'+
        'Descrip. Readme File;'+
        'Descrip. English;'+
        'Descrip. German;'
        );

   begin
     CompPageModified := False;
   end;
 end;
// Meter esto al pulsar el botón detalles


procedure CurPageChanged(CurPageID: Integer);
begin
 if CurpageID = wpSelectComponents then
 begin
   SaveComponentsPage(CompPagePositions);
   LoadComponentsPage(CompPagePositions, 200);
   CenterForm(WizardForm, False, True);
   CompPageModified := True;
 end
 else
 if CompPageModified then
 begin
   LoadComponentsPage(CompPagePositions, 0);
   CenterForm(WizardForm, False, True);
   CompPageModified := False;
 end;
end;


Espero que me podais hechar una mano ya no se donde mirar ya que no encuentro mucha informacion.
Un saludo y mil gracias de antemano
#7
Cita de: Eleкtro en  9 Marzo 2014, 21:12 PM
No manejo Pascal, espera la respuesta de alguien que sepa más que yo, pero de todas formas sería algo así:

Código (pascal) [Seleccionar]
const
  // La constante de la versión actual.
 AppVer = 1.0;

begin
// Si el archivo se descarga corréctamente...
if DownloadFile('http://dex.wotanksmods.com/latestver.txt', DxLastVersion)  then

   // comparo el string de la version descargada, con la version actual...  // return 1 if ver1 > ver2
   if CompareVersion(DxLastVersion, AppVer) = 1 then
     // Se ha encontrado una versión más actualizada, hacer lo que quieras...
     // Code goes here.

   else
     // Estás usando la versión más reciente.
     // Do nothing.

   end;

end;


Gracias por la inspiración Elektro, te debo una buena cerveza !!

El codigo seria este:
Código (pascal) [Seleccionar]
function DownloadFile(const AURL: string; var AResponse: string): Boolean;
var
  WinHttpRequest: Variant;
begin
  Result := True;
  try
    WinHttpRequest := CreateOleObject('WinHttp.WinHttpRequest.5.1');
    WinHttpRequest.Open('GET', AURL, False);
    WinHttpRequest.Send;
    AResponse := WinHttpRequest.ResponseText;
  except
    Result := False;
    AResponse := GetExceptionMessage;
  end;
end;

procedure DecodeVersion( verstr: String; var verint: array of Integer );
var
  i,p: Integer; s: string;
begin
  // initialize array
  verint := [0,0,0,0];
  i := 0;
  while ( (Length(verstr) > 0) and (i < 4) ) do
  begin
  p := pos('.', verstr);
  if p > 0 then
  begin
      if p = 1 then s:= '0' else s:= Copy( verstr, 1, p - 1 );
    verint[i] := StrToInt(s);
    i := i + 1;
    verstr := Copy( verstr, p+1, Length(verstr));
  end
  else
  begin
    verint[i] := StrToInt( verstr );
    verstr := '';
  end;
  end;

end;

function CompareVersion( ver1, ver2: String ) : Integer;
var
  verint1, verint2: array of Integer;
  i: integer;
begin

  SetArrayLength( verint1, 4 );
  DecodeVersion( ver1, verint1 );

  SetArrayLength( verint2, 4 );
  DecodeVersion( ver2, verint2 );

  Result := 0; i := 0;
  while ( (Result = 0) and ( i < 4 ) ) do
  begin
  if verint1[i] > verint2[i] then
    Result := 1
  else
      if verint1[i] < verint2[i] then
      Result := -1
    else
      Result := 0;

  i := i + 1;
  end;

end;


function GetDeXVersion(): String;
var
  DeXVersion:  String;
begin
  DeXVersion := '';
  DownloadFile('http://www.laurl.com/latestver.txt', DeXVersion );
  Result := DeXVersion;
end;


function InitializeSetup(): Boolean;
begin
  if CompareVersion(GetDeXVersion(), '3.3.6') > 0 then
  begin
    Result := MsgBox('Se ha encontrado una version mas?',mbConfirmation, MB_YESNO) = idYes;
    if Result = False then
      MsgBox('Aqui mensaje para ir a la url o donde sea', mbInformation, MB_OK);
  end
  else
    Result := true;
end;


Un saludo y gracias de nuevo
#8
Cita de: Eleкtro en  9 Marzo 2014, 21:02 PM
Aquí tienes un método de uso genérico para comparar una versión:


Gracias Elektro por la respuesta, mi pega esta cuando intento juntar esos 2 scripts que no se como hacerlo
#9
Cita de: Eleкtro en  9 Marzo 2014, 20:36 PM
Sugerencia:

En una sección que está dedicada a todos los lenguajes en general, al menos podrías especificar que el lenguaje del que trata el post es Pascal, en un comentario o en un Tag, ya que no todos saben distinguir la sintaxis, y abrir un post sin saber de que lenguaje se habla es hacer perder el tiempo a todos los demás.

Sobre lo de 'el Setup', te digo lo mismo, ¿que Setup, que archivo de instalación, eso que es?, ¿acaso te refieres a un InstallBuilder ...InnoSetup por ejemplo?, ¡pues dilo!.

Saludos!

Tienes dota la razón ya esta comentado para que no haya lios, Sorry   :-(
#10
Hola buenas tardes, llevo unos días comiéndome la cabeza...

Lo que quiero hacer es que cuando ejecuto el setup, comprueba las nuevas actualizaciones.
1) si no hay una nueva actualización, no mostrar ningún mensaje.
2) y si hay una nueva actualización, aparece un mensaje preguntando si desea descargarlo y que lleve a una web o no.

El codigo de pascal es este:
Código (pascal) [Seleccionar]

function DownloadFile(const AURL: string; var AResponse: string): Boolean;
var
  WinHttpRequest: Variant;
begin
  Result := True;
  try
    WinHttpRequest := CreateOleObject('WinHttp.WinHttpRequest.5.1');
    WinHttpRequest.Open('GET', AURL, False);
    WinHttpRequest.Send;
    AResponse := WinHttpRequest.ResponseText;
  except
    Result := False;
    AResponse := GetExceptionMessage;
  end;
end;

procedure InitializeWizard;
var
  DxLastVersion: string;

begin
  if DownloadFile('http://dex.wotanksmods.com/latestver.txt', DxLastVersion)  then
    MsgBox(DxLastVersion, mbInformation, MB_YESNO)
  else
    MsgBox(DxLastVersion, mbError, MB_OK)
end;


Sobre la versión he leído por hay que al ser x.x.x parece mas complejo el código ya me da lo mismo que sea así que sea xxx

Espero que alguien pueda ayudarme se lo agradecería en el alma de verdad.

Un saludo y mil gracias de antemano.