Gracias #!drvy, no veas que dolor de cabeza me estaba dando eso.
Mil gracias de verdad!!
Mil gracias de verdad!!
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ú$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>';
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.
SELECT fecha_descargas_dia, SUM(num_descargas_dia) num_descargas_dia FROM descargas_dia GROUP BY fecha_descargas_dia ASC
|2014-08-01|1
|2014-08-02|7
|2014-08-03|10
|2014-08-04|11
|2014-08-05|8
SELECT fecha_instalaciones_dia, SUM(num_instalaciones_dia) num_instalaciones_dia FROM instalaciones_dia GROUP BY fecha_instalaciones_dia ASC
|2014-08-01|2
|2014-08-02|20
|2014-08-03|15
|2014-08-04|12
|2014-08-05|5
|2014-08-02|7|20
[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;
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í: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;
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;
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:
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!
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;