elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Como proteger una cartera - billetera de Bitcoin


  Mostrar Mensajes
Páginas: [1] 2 3
1  Programación / Programación C/C++ / Re: configurar codeblock para compilar allegro en: 14 Mayo 2025, 17:54 pm
te agradezco la explicacion hoy no creo que pueda hacer nada pero mañana comento como me fue vulvo a darte las gracias por la explicacion



te agradezco mucho por tomarte el tiempo de contestarme, funciono de 10 mucgisimas graxias



como lo marco como solucionado
2  Informática / Software / problemas para configurar codeblock con allegro en: 14 Mayo 2025, 01:36 am
hola la pregunta es esa estoy tratando desde hace rato de configurar codeblock para que pueda compilar programas con allegro pro hasta ahora no logro que lo haga, haga lo que haga termina tirando errores de linkeo he visto tutoriales ya probe con codeblock 20.03 y 25.03 con allegro 5 y con allegro 4.2 como algunos sugieren he copiado los archivos de la carpeta lib de allegro a la carpeta lib de mingw e incluso intente con tdm-gcc copie el contenido de la carpeta include a mingw e incluso a tdm-gcc y los dll de la carpeta bin los copie en mingw windows y windows\system32 nada de nada sigo en ascuas se que es un error de configuracion de codeblock pero no se ya mas que hacer si les paso lo mismo por favor diganme como lo resolvieron o si hay un mejor compilador mas aigable con este asunto de usar allegro bienvenido sea tengo instalado tambien devc++ y vscode pero no los uso, de hecho a vscode voy a tener que desinstalarlo he instalarlo de nuevo porque lo dconfigure mal y no anda asi que estoy aierto a cualquier sugerencia y si es cambiar de compilador ´por favor tambien pasenme el seteo para usar allegro. Muchas gracias
3  Programación / Programación C/C++ / configurar codeblock para compilar allegro en: 13 Mayo 2025, 18:36 pm
hola la pregunta es esa estoy tratando desde hace rato de configurar codeblock para que pueda compilar programas con allegro pro hasta ahora no logro que lo haga, haga lo que haga termina tirando errores de linkeo he visto tutoriales ya probe con codeblock 20.03 y 25.03 con allegro 5 y con allegro 4.2 como algunos sugieren he copiado los archivos de la carpeta lib de allegro a la carpeta lib de mingw e incluso intente con tdm-gcc copie el contenido de la carpeta include a mingw e incluso a tdm-gcc y los dll de la carpeta bin los copie en mingw windows y windows\system32 nada de nada sigo en ascuas se que es un error de configuracion de codeblock pero no se ya mas que hacer si les paso lo mismo por favor diganme como lo resolvieron o si hay un mejor compilador mas aigable con este asunto de usar allegro bienvenido sea tengo instalado tambien devc++ y vscode pero no los uso, de hecho a vscode voy a tener que desinstalarlo he instalarlo de nuevo porque lo dconfigure mal y no anda asi que estoy aierto a cualquier sugerencia y si es cambiar de compilador ´por favor tambien pasenme el seteo para usar allegro. Muchas gracias
4  Programación / Programación C/C++ / Re: gui con wxwidgets en: 20 Julio 2024, 19:46 pm
te lo agradezco ahora por unos dias a estudiar esto y despues a ver que sale
5  Programación / Programación C/C++ / Re: gui con wxwidgets en: 20 Julio 2024, 00:43 am
por tu respuesta, yo no tengo idea de como usar los hilos tenes alguna idea de donde hay un buen tutorial sobre eso, tutoriales debe haber pero uno bueno nivel principiante no muchos
6  Programación / Programación C/C++ / Re: gui con wxwidgets en: 19 Julio 2024, 19:01 pm
gracias daniel por contestar si eso lo intente y sigue el problema y creo que encontre la causa

#include "errorMain.h"
#include <wx/msgdlg.h>
#include <ctime>

//(*InternalHeaders(errorFrame)
#include <wx/intl.h>
#include <wx/string.h>
//*)

//helper functions
enum wxbuildinfoformat {
    short_f, long_f };

wxString wxbuildinfo(wxbuildinfoformat format)
{
    wxString wxbuild(wxVERSION_STRING);

    if (format == long_f )
    {
#if defined(__WXMSW__)
        wxbuild << _T("-Windows");
#elif defined(__UNIX__)
        wxbuild << _T("-Linux");
#endif

#if wxUSE_UNICODE
        wxbuild << _T("-Unicode build");
#else
        wxbuild << _T("-ANSI build");
#endif // wxUSE_UNICODE
    }

    return wxbuild;
}

//(*IdInit(errorFrame)
const long errorFrame::ID_TEXTCTRL1 = wxNewId();
const long errorFrame::ID_BUTTON1 = wxNewId();
//*)

BEGIN_EVENT_TABLE(errorFrame,wxFrame)
    //(*EventTable(errorFrame)
    //*)
END_EVENT_TABLE()

errorFrame::errorFrame(wxWindow* parent,wxWindowID id)
{
    //(*Initialize(errorFrame)
    Create(parent, id, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE, _T("id"));
    TextCtrl1 = new wxTextCtrl(this, ID_TEXTCTRL1, _("Text"), wxPoint(16,64), wxSize(368,280), 0, wxDefaultValidator, _T("ID_TEXTCTRL1"));
    Button1 = new wxButton(this, ID_BUTTON1, _("Label"), wxPoint(136,408), wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON1"));

    Connect(ID_BUTTON1,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&errorFrame::OnButton1Click);
    //*)
}

errorFrame::~errorFrame()
{
    //(*Destroy(errorFrame)
    //*)
}


void errorFrame::OnButton1Click(wxCommandEvent& event)
{
    unsigned t0,t1;
    double tim;

    t0=clock();
    do{
        t1=clock();
        tim= (double(t1-t0)/CLOCKS_PER_SEC);
    }while(tim<40.00);

}

en este ejemplo muy simple y bobo ocurre exactamente lo mismo, ojo esto esta hecho a proposito para imitar el ejemplo, en este caso se tarda tanto tiempo en el bucle, igual que en el bucle, igual que en los bucles donde hago el cifrado, que el programa durante ese tiempo, deja de prosesar los mensajes, o algo asi, y entonces se cuelga, de hecho si tratas de cerrar este programa windows alerta de que el programa no responde, pero cuando termina el bucle todo vuelve a la normalidad, este es exactamente el problemaque tengo y no puedo resolver, porque la funcion de cifrado va a tardar lo que tenga que tardar, ni mas ni menos.
no se y solo es pura especulacion, si en este ejemplo, justo debajo de la asignacion a tim colocara una funcion que llamara al prosesamiento de los mensajes por ahi estaria la solucion
pero no se si exista esa funcion, que te parece?
7  Programación / Programación C/C++ / Re: gui con wxwidgets en: 18 Julio 2024, 19:00 pm
al final lo logre o casi todo todavía me queda un ultimo inconveniente, y es este, para mostrar el progreso del programa uso una wxgauge, hasta ahi todo bien, el problema surge cuando por algun motivo el formulario pierde el foco, al pasar eso el programa sigue y al terminar recupera el foco y todo anda bien, pero hasta que termina la barra de progreso deja de actualizar, es mas pienso que como se queda en los bucles mucho tiempo, impido que el programa procese los eventos y es eso lo que lleva a la falla, recuerdo que en visual basic se agregaba un comando que lo resolvia pero no me acuerdo como se llamaba, habra algun comando similar. aca les dejo el main del programa

/***************************************************************
 * Name:      exploradorMain.cpp
 * Purpose:   Code for Application Frame
 * Author:     ()
 * Created:   2024-06-15
 * Copyright:  ()
 * License:
 **************************************************************/

#include "exploradorMain.h"
#include <wx/msgdlg.h>
#include <wx/dir.h>
#include <wx/file.h>
#include <wx/volume.h>
#include <Windowsx.h>
#include <wx/msw/winundef.h>
#include "cifrado.h"
#include <string>
#include <wx/msgdlg.h>
#include <wx/filedlg.h>
#include "mydialog.h"
#include <ctime>
#include "supercifrado.h"

//(*InternalHeaders(exploradorFrame)
#include <wx/bitmap.h>
#include <wx/font.h>
#include <wx/icon.h>
#include <wx/image.h>
#include <wx/intl.h>
#include <wx/settings.h>
#include <wx/string.h>
//*)


//helper functions
enum wxbuildinfoformat {
    short_f, long_f };

wxString wxbuildinfo(wxbuildinfoformat format)
{
    wxString wxbuild(wxVERSION_STRING);

    if (format == long_f )
    {
#if defined(__WXMSW__)
        wxbuild << _T("-Windows");
#elif defined(__UNIX__)
        wxbuild << _T("-Linux");
#endif

#if wxUSE_UNICODE
        wxbuild << _T("-Unicode build");
#else
        wxbuild << _T("-ANSI build");
#endif // wxUSE_UNICODE
    }

    return wxbuild;
}

//(*IdInit(exploradorFrame)
const long exploradorFrame::ID_LISTBOX1 = wxNewId();
const long exploradorFrame::ID_COMBOBOX1 = wxNewId();
const long exploradorFrame::ID_GENERICDIRCTRL1 = wxNewId();
const long exploradorFrame::ID_STATICTEXT1 = wxNewId();
const long exploradorFrame::ID_GAUGE1 = wxNewId();
const long exploradorFrame::ID_PROGRESSDIALOG1 = wxNewId();
//*)

BEGIN_EVENT_TABLE(exploradorFrame,wxFrame)
    //(*EventTable(exploradorFrame)
    //*)
END_EVENT_TABLE()

exploradorFrame::exploradorFrame(wxWindow* parent,wxWindowID id)
{
    wxArrayString Lista;
    Lista = wxFSVolume::GetVolumes();

    //(*Initialize(exploradorFrame)
    Create(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE, _T("wxID_ANY"));
    SetClientSize(wxSize(600,320));
    SetBackgroundColour(wxColour(0,128,192));
    {
       wxIcon FrameIcon;
       FrameIcon.CopyFromBitmap(wxBitmap(wxImage(_T("C:\\Users\\tca15\\Downloads\\keys_security_private_lock_1739.ico"))));
       SetIcon(FrameIcon);
    }
    ListBox1 = new wxListBox(this, ID_LISTBOX1, wxPoint(260,40), wxSize(335,255), 0, 0, 0, wxDefaultValidator, _T("ID_LISTBOX1"));
    wxFont ListBox1Font(10,wxFONTFAMILY_MODERN,wxFONTSTYLE_NORMAL,wxFONTWEIGHT_NORMAL,false,_T("Terminal"),wxFONTENCODING_DEFAULT);
    ListBox1->SetFont(ListBox1Font);
    ComboBox1 = new wxComboBox(this, ID_COMBOBOX1, wxEmptyString, wxPoint(16,176), wxSize(192,32), 0, 0, wxCB_READONLY|wxTE_PROCESS_ENTER|wxBORDER_DOUBLE|wxBORDER_SUNKEN|wxBORDER_STATIC, wxDefaultValidator, _T("ID_COMBOBOX1"));
    ComboBox1->Hide();
    wxFont ComboBox1Font(12,wxFONTFAMILY_MODERN,wxFONTSTYLE_NORMAL,wxFONTWEIGHT_BOLD,false,_T("Terminal"),wxFONTENCODING_DEFAULT);
    ComboBox1->SetFont(ComboBox1Font);
    DirCtrl1 = new wxGenericDirCtrl(this, ID_GENERICDIRCTRL1, wxEmptyString, wxPoint(5,40), wxSize(250,255), wxDIRCTRL_DIR_ONLY, wxEmptyString, 0, _T("ID_GENERICDIRCTRL1"));
    Statico = new wxStaticText(this, ID_STATICTEXT1, wxEmptyString, wxPoint(5,5), wxSize(590,30), wxBORDER_SIMPLE, _T("ID_STATICTEXT1"));
    Statico->SetForegroundColour(wxColour(255,0,128));
    Statico->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
    wxFont StaticoFont(14,wxFONTFAMILY_MODERN,wxFONTSTYLE_NORMAL,wxFONTWEIGHT_BOLD,false,_T("Terminal"),wxFONTENCODING_DEFAULT);
    Statico->SetFont(StaticoFont);
    Gauge = new wxGauge(this, ID_GAUGE1, 100, wxPoint(5,300), wxSize(590,15), wxGA_HORIZONTAL|wxGA_SMOOTH|wxGA_PROGRESS, wxDefaultValidator, _T("ID_GAUGE1"));
    Gauge->Hide();

    Connect(ID_GENERICDIRCTRL1,wxEVT_DIRCTRL_SELECTIONCHANGED,(wxObjectEventFunction)&exploradorFrame::OnGenericDirCtrl1SelectionChanged);
    //*)
    Connect(ID_LISTBOX1,wxEVT_LISTBOX_DCLICK,(wxObjectEventFunction)&exploradorFrame::OnListBox1DClick);
    DirCtrl1->ShowHidden(true);
    DirCtrl1->ExpandPath(wxGetCwd());
    explorar(wxGetCwd());
}

exploradorFrame::~exploradorFrame()
{
    //(*Destroy(exploradorFrame)
    //*)
}

void exploradorFrame::explorar(wxString Ruta)
{
    wxSetWorkingDirectory (Ruta);
    wxDir dir(wxGetCwd());
    wxArrayString Lista;
    wxString filename;
    unsigned int i=0;
    bool cont;
    HWND hctrl = (HWND)ListBox1->GetHandle();  //de aca consigo el handler del listbox

    SendMessageW(hctrl, LB_RESETCONTENT, 0, 0); // y enviando esto logro borrar el listbox
    if ( !dir.IsOpened() )
    {
        Lista.Add("No Existe",1);
        ListBox1->InsertItems(Lista,0);
        dir.Close();
        return;
    }
    Statico->SetLabel(dir.GetNameWithSep());
    cont = dir.GetFirst(&filename, "", wxDIR_DIRS|wxDIR_DOTDOT);
    while ( cont )
    {
        if(filename!=".")
        {
            Lista.Add(filename.MakeUpper());
            i++;
        }
        cont = dir.GetNext(&filename);
    }
    cont = dir.GetFirst(&filename, "", wxDIR_FILES|wxDIR_HIDDEN);
    while ( cont )
    {
        if(filename!=".")
        {
            Lista.Add(filename);
            i++;
        }
        cont = dir.GetNext(&filename);
    }
    ListBox1->InsertItems(Lista,0);
    dir.Close();
}

void exploradorFrame::OnClose(wxCommandEvent& event)
{
    Destroy();
}

void exploradorFrame::OnListBox1DClick(wxCommandEvent& event)
{
    wxDir dir;
    MyDialog Password(this,-1,_("Ingrese la Clave"));
    int Boton;
    if(!wxDirExists(ListBox1->GetString(ListBox1->GetSelection())))
    {
        Boton = Password.ShowModal();
        if(Boton != wxID_CANCEL)
            cifrar(Password.GetPassWord(), Boton);
        explorar(Statico->GetLabel());
    }
    else
    {
        DirCtrl1->CollapseTree();
        explorar(ListBox1->GetString(ListBox1->GetSelection()));
        DirCtrl1->ExpandPath(wxGetCwd());
    }
}

void exploradorFrame::cifrar(wxString Clave, int Boton)
{
    SuperCifrado code;
    unsigned char TPlano[2048],Salida[2048];
    wxString aux;
    wxFile plano, cifrado;
    std::string paso;
    unsigned long long bucle, resto, i;
    wxFileDialog saveFileDialog;

    if(Boton == 9001 || Boton == 9003)
        saveFileDialog.Create(this, _ ( "Guardar archivo ngm" ), wxEmptyString, wxEmptyString, "Archivos ngm (*.ngm)|*.ngm", wxFD_SAVE | wxFD_OVERWRITE_PROMPT);
    if(Boton == 9002 || Boton == 9002)
        saveFileDialog.Create(this, _ ( "Guardar archivo" ), wxEmptyString, wxEmptyString, "Archivos  (*.*)|*.*", wxFD_SAVE | wxFD_OVERWRITE_PROMPT);
    if(saveFileDialog.ShowModal()== wxID_CANCEL)
        return;

    aux=Statico->GetLabel() + ListBox1->GetString(ListBox1->GetSelection());
    plano.Open(aux,wxFile::read);

    if(!plano.IsOpened())
    {
        wxMessageBox (_("No se puede abrir"),_("ERROR") ,  wxOK | wxCENTRE | wxICON_ERROR , this);
        return;
    }

    if(!cifrado.Create(saveFileDialog.GetPath()))
    {
        wxMessageBox (_("No se puede crear"),_("ERROR") ,  wxOK | wxCENTRE | wxICON_ERROR , this);
        return;
    }

    wxString p;
    paso=Clave;
    code.Init(paso);
    Gauge->Show(true);

    resto = plano.Length() & 0x7ff; //lenght es un tipo longlong
    bucle = plano.Length() >> 11;
    Gauge->SetRange((int)bucle);
    DirCtrl1->Enable(false);
    DirCtrl1->Update();

        int y0=clock();
    switch (Boton)
    {
        case 9001:
            {
            for (i=0;i<bucle;i++)
            {
                plano.Read(TPlano,2048);
                code.DesOrden(TPlano);
                code.Codec(2048,TPlano,Salida);
                cifrado.Write(Salida,2048);
                Gauge->SetFocus();
                Gauge->SetValue(i);
            }
            if(resto)
            {
                plano.Read(TPlano,resto);
                code.Codec(resto,TPlano,Salida);
                cifrado.Write(Salida,resto);
            }
            Gauge->Hide();
                int y1=clock();
                double t=(double(y1-y0)/CLOCKS_PER_SEC);

                p.Printf("%f",t);
                wxMessageBox (_("rclick"), p,  wxOK | wxCENTRE , this);
            DirCtrl1->Enable(true);
            plano.Close();
            cifrado.Close();
            return;
            }
        case 9002:
            {
            for (i=0;i<bucle;i++)
            {
                plano.Read(TPlano,2048);
                code.Codec(2048,TPlano,Salida);
                code.Orden(Salida);
                cifrado.Write(Salida,2048);
                Gauge->SetFocus();
                Gauge->SetValue(i);
            }
            if(resto)
            {
                plano.Read(TPlano,resto);
                code.Codec(resto,TPlano,Salida);
                cifrado.Write(Salida,resto);
            }
            Gauge->Hide();
                int y1=clock();
                double t=(double(y1-y0)/CLOCKS_PER_SEC);
                wxString p;
                p.Printf("%f",t);
                wxMessageBox (_("rclick"), p,  wxOK | wxCENTRE , this);
            DirCtrl1->Enable(true);
            plano.Close();
            cifrado.Close();
            return;
            }
        case 9003:
            {
            for (i=0;i<bucle;i++)
            {
                plano.Read(TPlano,2048);
                code.SuperDesOrden(TPlano,2048);
                code.Codec(2048,TPlano,Salida);
                cifrado.Write(Salida,2048);
                Gauge->SetFocus();
                Gauge->SetValue(i);
            }
            if(resto)
            {
                plano.Read(TPlano,resto);
                code.Codec(resto,TPlano,Salida);
                cifrado.Write(Salida,resto);
            }
            Gauge->Hide();
                int y1=clock();
                double t=(double(y1-y0)/CLOCKS_PER_SEC);
                wxString p;
                p.Printf("%f",t);
                wxMessageBox (_("rclick"), p,  wxOK | wxCENTRE , this);
            DirCtrl1->Enable(true);
            plano.Close();
            cifrado.Close();
            return;
            }
        case 9004:
            {
            for (i=0;i<bucle;i++)
            {
                plano.Read(TPlano,2048);
                code.Codec(2048,TPlano,Salida);
                code.SuperOrden(Salida,2048);
                cifrado.Write(Salida,2048);
                Gauge->SetFocus();
                Gauge->SetValue(i);
            }
            if(resto)
            {
                plano.Read(TPlano,resto);
                code.Codec(resto,TPlano,Salida);
                cifrado.Write(Salida,resto);
            }
            Gauge->Hide();
                int y1=clock();
                double t=(double(y1-y0)/CLOCKS_PER_SEC);
                wxString p;
                p.Printf("%f",t);
                wxMessageBox (_("rclick"), p,  wxOK | wxCENTRE , this);
            DirCtrl1->Enable(true);
            plano.Close();
            cifrado.Close();
            return;
            }
    }
}

void exploradorFrame::OnGenericDirCtrl1SelectionChanged(wxTreeEvent& event)
{
    wxString ruta;

    ruta=DirCtrl1->GetPath();
    if(!ruta.ends_with("\\"))
        ruta.append("\\");
    explorar(ruta);
}
8  Programación / Programación C/C++ / Re: gui con wxwidgets en: 11 Junio 2024, 17:28 pm
si perdona es en C++



gracias, en cuanto a codeblocks lo uso porque me resulta mas liviano, otro que probé fue vscode pero en mi maquina esta muy lento, y como también tengo una maquina con linux no estoy usando dev-c++



hola de nuevo, encontré de casualidad  el control wxgenericdirctrl que se supone puede hacer todo lo que quiero, pero, al probarlo en un frame no compila, codeblock no reconoce el tipo, pero si lo intento desde un programa hecho en fase a dialogos (dialog base) si anda, como puedo usar este control en un frame?



de nuevo ya resolvi a medias el problema, pero ahora tengo otro, ya que puedo llenar un listbox con los archivos de una carpeta, ahora quiero poder navegar por todas las carpetas pero al cambiar de carpeta, el contenido de la anterior permanece, intente de todo para borrar la lista vieja pero no lo hace solo agrega el contenido del directorio nuevo al viejo. Hay alguna forma de borrar ya intente con DESELECTED pero no consegui nada, vi que hay una funcion DOCLEAR pero es protegida, hererada de wxITEMCONTAINER, y no se como hacerla funcionar, si alguien dabe como se puede hacer esto?



al final lo descubri, la unica forma de borrar un listbox es usando una funcion del winapi, que en codeblocks, no se si sera igual en las demas, es SendMessadeW, (en la descripcion de winapi hecha en la pagina conclase.com usan SendMessage sin la W). Y hay que hacerlo asi

HWND hctrl = (HWND)ListBox1->GetHandle();  //de aca consigo el handler del listbox
SendMessageW(hctrl, LB_RESETCONTENT, 0, 0); // y enviando esto logro borrar el listbox

Ya lo probe y funciona bien, y como dije es la unica forma que encontre
9  Programación / Programación C/C++ / Re: clase array en: 10 Junio 2024, 19:31 pm
muchisimas gracias por tu respuesta, tu respuesta me sirvio, gracias por tomarte el tiempo de ayudarme
10  Programación / Programación C/C++ / gui con wxwidgets en: 10 Junio 2024, 19:25 pm
hola estoy tratando de hacer un programa para windows usando codeblocks y wxwidgets, el programa tiene que seleccionar un archivo para luego mostrarlo en hexa pero la parte de la seleccion me esta matando, no de que hacer, si fuera un winapi32 usaria DLGDIRLIST pero necesiat que le pase el HWND de la ventana padre, y en wxwidgets no se como hacerlo, tiene algo parecido pero su prototipo es wxwindow y no se si es compatible, alguien sabe como hacer la seleccion de archivos desde un wxlistbox?
Páginas: [1] 2 3
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines