WxListCtrl --> pb avec majuscule en premier caractere (trés bizzarre)

cs_satellite34 Messages postés 688 Date d'inscription mercredi 6 avril 2005 Statut Membre Dernière intervention 2 juin 2006 - 29 août 2005 à 15:55
cs_satellite34 Messages postés 688 Date d'inscription mercredi 6 avril 2005 Statut Membre Dernière intervention 2 juin 2006 - 3 sept. 2005 à 15:42
Bonjour,

je crée un wxListCtrl avec plusieurs colonnes qui prends comme items le listage d' un repertoire sur un serveur ftp, mon probleme c'est que lorsque le premier caractere de la premiere colonne est en majuscule ca buggue severe , a savoir que ca zappe toutes les autres colonnes sur toutes les lignes du listctrl qui se situent en dessus de l' item concerné; en + ca ne liste plus correctement aprés, c a d que ca erronne les infos.

voila mon code :

DistantSite = new wxListCtrl(this, ID_DISTANTSITE, wxPoint(215,255),wxSize(480,315) ,
wxVSCROLL | wxHSCROLL | wxLC_EDIT_LABELS | wxLC_REPORT | wxLC_SORT_ASCENDING );

DistantSite->InsertColumn(0,_("nom"),wxLIST_FORMAT_LEFT, -1);
DistantSite->InsertColumn(1,_("type"),wxLIST_FORMAT_LEFT, -1);
DistantSite->InsertColumn(2,_("taille"),wxLIST_FORMAT_LEFT, -1);
DistantSite->InsertColumn(3,_("date"),wxLIST_FORMAT_LEFT, -1);
DistantSite->InsertColumn(4,_("heure"),wxLIST_FORMAT_LEFT, -1 );
DistantSite->InsertColumn(5,_("permissions"),wxLIST_FORMAT_LEFT, -1 );

Commandes = new wxTextCtrl(this, ID_COMMANDES,"Bienvenue sur SatFTPclient\n", wxPoint(6,60),wxSize(690,182) ,
wxTE_MULTILINE | wxTE_READONLY | wxTE_WORDWRAP);
Commandes->AppendText("Historique des commandes FTP :\n");


StatusBar1 = new wxStatusBar(this, ID_STATUSBAR1 );

ftp = new wxFTP();

SaveFileDlg = new wxFileDialog(this, "" , "" , "" , "", wxSAVE);

OpenFileDlg = new wxFileDialog(this, "" , "" , "" , "", wxOPEN);

m_dirctrl = new wxGenericDirCtrl(this, ID_DIRCTRL,
wxDirDialogDefaultFolderStr,
wxPoint(6, 255), wxSize(200, 150),
wxDIRCTRL_DIR_ONLY|wxSUNKEN_BORDER,
_("All files (*.*)|*.*"), 0);

fileList = new wxListBox(this, ID_FILELIST,
wxPoint(6, 415), wxSize(200, 155),
0, NULL,
wxLB_EXTENDED|wxSUNKEN_BORDER);

this->SetStatusBar(StatusBar1);
ToolBar->SetToolBitmapSize(wxSize(35,35));
ToolBar->Realize();
this->SetToolBar(ToolBar);
this->SetSize(8,8,710,650);
this->SetTitle(_("SatFTPclient"));
this->Center();
this->SetIcon(wxNullIcon);
this->SetBackgroundColour(wxColour(52, 84, 143));
////GUI Items Creation End
}


void FTPclientFrm::FTPclientFrmClose(wxCloseEvent& event)
{
Destroy();
}

void FTPclientFrm::ConnecterClick(wxCommandEvent& event)
{
connect();
}


void FTPclientFrm::quitter(wxCommandEvent& event)
{
Destroy();
}


void FTPclientFrm::connect()
{
if(!m_timer.IsRunning())
{
m_timer.Start(20000);
}
wxString adresse = EditAddress->GetValue();
wxString utilisateur = EditUser->GetValue();
wxString passe = EditPassword->GetValue();
wxString directory = EditDir->GetValue();
ftp->SetUser(utilisateur);
ftp->SetPassword(passe);
Commandes->AppendText("Connection.............................."
"Wait a second\n:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>\n");

if (!ftp->Connect(adresse))
{
result();
Commandes->AppendText("impossible de se connecter au serveur\n\nVeuillez vérifier l' adresse du serveur et"
" vos identifiants\nmerci\n");
return;
}
Commandes->AppendText(wxString::Format("Connecté à ")+adresse+(" dans ")+directory);
Commandes->AppendText("\n:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<:<<:<:<:<:<:<:<:<:<:<:<:<:<:<:<\n");

Commandes->AppendText("Commande : USER ");
Commandes->AppendText(utilisateur);
Commandes->AppendText("\n");
result();

StatusBar1->SetStatusText(wxString::Format("vous etes connecté à http://www.cppfrance.com/forum.v2.aspx?ID=530582
wxArrayString dirs;
if(!ftp->GetDirList(dirs, ""))
{
Commandes->AppendText("impossible de récuperer la liste\n");
return;
}
size_t numFiles = dirs.GetCount();

DistantSite->DeleteAllItems();

for (size_t i =0; i<numFiles; i++)
{
long m_count = DistantSite->GetItemCount();
DistantSite->InsertItem(m_count, dirs.Item(i).AfterLast(' '));

DistantSite->SetItem(m_count, 1, dirs.Item(i).AfterFirst(' ').substr(0, 13));
DistantSite->SetItem(m_count, 2, dirs.Item(i).AfterFirst(' ').substr(14, 8));
DistantSite->SetItem(m_count, 3, dirs.Item(i).AfterFirst(' ').substr(22, 6));
DistantSite->SetItem(m_count, 4, dirs.Item(i).AfterFirst(' ').substr(28, 6));
DistantSite->SetItem(m_count, 5, dirs.Item(i).Left(10));
}
//fin de l' aide
result();
}


if (ftp->GetLastResult()=="215 Windows_NT")
{
DistantSite->ClearAll();
DistantSite->InsertColumn(0,_("nom"),wxLIST_FORMAT_LEFT, -1);
DistantSite->InsertColumn(1,_("taille"),wxLIST_FORMAT_LEFT, -1);
DistantSite->InsertColumn(2,_("date"),wxLIST_FORMAT_LEFT, -1);
DistantSite->InsertColumn(3,_("heure"),wxLIST_FORMAT_LEFT, -1);

wxArrayString dirs;
if(!ftp->GetDirList(dirs, ""))
{
Commandes->AppendText("impossible de récuperer la liste\n");
return;
}
size_t numFiles = dirs.GetCount();

DistantSite->DeleteAllItems();

for (size_t i =0; i<numFiles; i++)
{
long m_count = DistantSite->GetItemCount();
DistantSite->InsertItem(m_count, dirs.Item(i).AfterLast(' '));

DistantSite->SetItem(m_count, 1, dirs.Item(i).AfterFirst(' ').substr(19, 10));
DistantSite->SetItem(m_count, 2, dirs.Item(i).BeforeLast(' ').substr(0, 10));
DistantSite->SetItem(m_count, 3, dirs.Item(i).BeforeLast(' ').substr(10, 14));
}
result();
}
}

En fait, je crois bien que ca buggue uniquement avec les serveurs unix mais bon, ac reste a vérifier;
+Sérieusement j' ai vraiment a coeur de réler ce pb car c'est un projet d'études que je fais en avance pour etre plus trankil dans l' année donc il faut que ca marche nikel et que je comprenne bien le pkoi du comment de ce pb mystique.

Merci pour votre aide;


A+

Recherche entreprise développement à Montpellier pour BTS Informatique de Gestion en alternance............

8 réponses

fredcl Messages postés 547 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 7 octobre 2007 1
29 août 2005 à 17:31
Bonjour,

si à la place de ça :
DistantSite->SetItem(m_count, 1, dirs.Item(i).AfterFirst(' ').substr(0, 13));
DistantSite->SetItem(m_count, 2, dirs.Item(i).AfterFirst(' ').substr(14, 8));
DistantSite->SetItem(m_count, 3, dirs.Item(i).AfterFirst(' ').substr(22, 6));
DistantSite->SetItem(m_count, 4, dirs.Item(i).AfterFirst(' ').substr(28, 6));
DistantSite->SetItem(m_count, 5, dirs.Item(i).Left(10));

tu met

DistantSite->SetItem(m_count, 1, "Chaine 1");
DistantSite->SetItem(m_count, 2, "Chaine 2");
DistantSite->SetItem(m_count, 3, "Chaine 3");
DistantSite->SetItem(m_count, 4, "Chaine 4");
DistantSite->SetItem(m_count, 5, "Chaine 5");

ton affichage bien que faux fonctionne t'il correctement?
0
cs_satellite34 Messages postés 688 Date d'inscription mercredi 6 avril 2005 Statut Membre Dernière intervention 2 juin 2006 1
29 août 2005 à 23:40
Non, ca fait exactement pareil, je suis perdu complet avec ce pb!!!J'ai fait une capture d' écran pour donner une idée :
http://satellitesound.free.fr/sanstitre.JPG

Mais de toutes facons , ca ne pouvait que faire pareil;
Je suis sous wxDevCpp 6.7, je vais essayer avec 6.8 , on sait jamais, mais c'est pareil , je suis convaincu que ca va faire le meme probleme, logiquement;
Doit y avoir une erreur dans mon code ou un oubli.....
Hum, la, y a du cassage de [mailto:cr@ne cr@ne] pour pas grand chose;
mdr;


A+

Recherche entreprise développement à Montpellier pour BTS Informatique de Gestion en alternance............
0
cs_satellite34 Messages postés 688 Date d'inscription mercredi 6 avril 2005 Statut Membre Dernière intervention 2 juin 2006 1
30 août 2005 à 00:32
Bon ben je viens de tester avec 6.8 et alors la , c'est panique à bord!!!!!
je met bien 26 a la place de 25 dans l'editeur de liens mais rien n'y fait, y a des erreurs a tous les endroits du fichier, pourtant je copie les options du projet venant du template wx, c'est ce que j'ai fait avec mon player avi mais la, avec ce code, ca ne marche pas;; hum, c'est bien mystique tt ca!


@+

Cherche projets à réaliser en communauté en wxWIDGETS............
0
fredcl Messages postés 547 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 7 octobre 2007 1
30 août 2005 à 09:09
J'ai pas le temps de regarder ça maintenant (je bosse), mais je regarderais ça ce soir.
Si tu pouvais me poster quelques lignes complètes que te renvois le FTP ce serais super.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fredcl Messages postés 547 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 7 octobre 2007 1
30 août 2005 à 11:58
Bonjour,

Je crois que ton problème viens de ta façon de découper les chaines.
Voici un exemple qui reprends le type de chaines que tu reçois d'un serveur Unix :
[DEBUT FICHIER mainframe.h]
/////////////////////////////////////////////////////////////////////////////
// Name: mainframe.h
// Purpose:
// Author: Fred Cailleau-Lepetit
// Modified by:
// Created: 08/30/05 10:33:05
// RCS-ID:
// Copyright: Copyright (c) 2005 Fred Cailleau-Lepetit.
// Licence:
/////////////////////////////////////////////////////////////////////////////


#ifndef _MAINFRAME_H_
#define _MAINFRAME_H_


#if defined(__GNUG__) && !defined(__APPLE__)
#pragma interface "mainframe.cpp"
#endif


#include "wx/frame.h"
#include "wx/listctrl.h"


#define MAINFRAME_TITLE _("Test wxListCtrl")


#define ID_FRAME 10000
#define ID_LISTCTRL 10001
#define ID_BUTTON 10002


class wxMainFrame: public wxFrame
{
DECLARE_CLASS(wxMainFrame)
DECLARE_EVENT_TABLE()


public:

wxMainFrame(){}

wxMainFrame(wxWindow* parent, wxWindowID id = ID_FRAME,
const wxString& caption = MAINFRAME_TITLE,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_FRAME_STYLE);


bool Create(wxWindow* parent, wxWindowID id = ID_FRAME,
const wxString& caption = MAINFRAME_TITLE,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_FRAME_STYLE);


void CreateControls();

protected:

void OnButtonClick(wxCommandEvent& event);

private:

wxListCtrl* TheListCtrl;

void AddElement(const wxString& element);

};


#endif // _MAINFRAME_H_

[FINFICHIER mainframe.h]

[DEBUT FICHIER mainframe.cpp]
/////////////////////////////////////////////////////////////////////////////
// Name: mainframe.cpp
// Purpose:
// Author: Fred Cailleau-Lepetit
// Modified by:
// Created: 08/30/05 10:33:05
// RCS-ID:
// Copyright: Copyright (c) 2005 Fred Cailleau-Lepetit.
// Licence:
/////////////////////////////////////////////////////////////////////////////


#if defined(__GNUG__) && !defined(__APPLE__)
#pragma implementation "mainframe.h"
#endif


// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"


#ifdef __BORLANDC__
#pragma hdrstop
#endif


#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
#include "mainframe.h"


IMPLEMENT_CLASS(wxMainFrame, wxFrame)


BEGIN_EVENT_TABLE(wxMainFrame, wxFrame)
EVT_BUTTON( ID_BUTTON, wxMainFrame::OnButtonClick )
END_EVENT_TABLE()


wxMainFrame::wxMainFrame(wxWindow* parent, wxWindowID id,
const wxString& caption, const wxPoint& pos,
const wxSize& size, long style)
{
Create( parent, id, caption, pos, size, style );
}


bool wxMainFrame::Create(wxWindow* parent, wxWindowID id,
const wxString& caption, const wxPoint& pos,
const wxSize& size, long style)
{
wxFrame::Create( parent, id, caption, pos, size, style );


CreateControls();
return TRUE;
}


void wxMainFrame::CreateControls()
{
wxBoxSizer* bSizer1 = new wxBoxSizer(wxVERTICAL);
SetSizer(bSizer1);


TheListCtrl = new wxListCtrl(this, ID_LISTCTRL, wxDefaultPosition,
wxDefaultSize, wxLC_REPORT);
bSizer1->Add(TheListCtrl, 1, wxGROW, 0);
TheListCtrl->InsertColumn(0, _("Name"));
TheListCtrl->InsertColumn(1, _("Type"));
TheListCtrl->InsertColumn(2, _("Size"));
TheListCtrl->InsertColumn(3, _("Date"));
TheListCtrl->InsertColumn(4, _("Time"));
TheListCtrl->InsertColumn(5, _("Right"));


wxButton* AddBtn = new wxButton(this, ID_BUTTON, _("Add Element"),
wxDefaultPosition, wxDefaultSize, 0);
bSizer1->Add(AddBtn, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
}


void wxMainFrame::OnButtonClick(wxCommandEvent& event)
{
// pour ne pas envoyer toujours la même chaine de caractères pour le test
// on prend parmis 6 chaines différentes
static int index = 0;
wxString str;
switch (index)
{
case 0 : str = "-r--r--r-- 1 guilhem lavaux 12738 Jan 16 20:17 cmndata.cpp";
break;
case 1 : str = "-r--r--r-- 1 guilhem lavaux 10866 Jan 24 16:41 Config.cpp";
break;
case 2 : str = "-rw-rw-rw- 1 guilhem lavaux 29967 Dec 21 19:17 cwlex_yy.c";
break;
case 3 : str = "-rw-rw-rw- 1 guilhem lavaux 14342 Jan 22 19:51 Cwy_tab.c";
break;
case 4 : str = "-r--r--r-- 1 guilhem lavaux 13890 Jan 29 19:18 date.cpp";
break;
default : str = "-r--r--r-- 1 guilhem lavaux 3989 Feb 8 19:18 Datstrm.cpp";
}


#if defined(__WXMSW__)
static bool pass = true; // Astuce pour MS Windows uniquement
// Attention dans une wxFrame deux évènement EVT_BUTTON sont générés
// Ce qui n'est pas le cas dans un wxDialog (voir remarque dans source wxWidgets)
if (pass)
{
#endif
AddElement(str);

index++; // Incrémentation de l'index des chaines pour le test
if (index > 5) index = 0; // Remise à zéro pour bouclage

#if defined(__WXMSW__)
}
pass = !pass;
#endif

event.Skip();
}


void wxMainFrame::AddElement(const wxString& element)
{
long index = TheListCtrl->GetItemCount();
TheListCtrl->InsertItem(index, element.Mid(55)); // Name
TheListCtrl->SetItem(index, 1, element.Mid(11, 3)); // Type
TheListCtrl->SetItem(index, 2, element.Mid(31, 10)); // Size
TheListCtrl->SetItem(index, 3, element.Mid(42, 6)); // Date
TheListCtrl->SetItem(index, 4, element.Mid(49, 5)); // Time
TheListCtrl->SetItem(index, 5, element.Mid(0, 10)); // Right
}

[FIN FICHIER mainframe.cpp]

Regardes bien la fonction wxMainFrame::AddElement c'est elle qui fait la découpe de la chaine passée en argument

Cordialement

FredCL
0
cs_satellite34 Messages postés 688 Date d'inscription mercredi 6 avril 2005 Statut Membre Dernière intervention 2 juin 2006 1
30 août 2005 à 20:37
Bonsoir,

Je viens d' essayer avec la méthode mid et j' arrive a un résultat identique c'est à dire qu' il y a toujours ce probleme de majuscule.
Sinon, j'ai réussi à passer mon projet sous 6.8 (j'avais oublié d'effacer les objets;hihi), mais rien n'y fait;

En + c'est clair que ca vient de mon programme car free me balance la meme chaine (sans buggues) avec ou sans majuscule en 1er caractere;

Ca commence à devenir vraiment mysthique comme probleme car j' ai découpé mes chaines de pleins de facons pendant tte la journée mais rien n' y fait.

AU SECOURS !!!!!


@+

Cherche projets à réaliser en communauté en wxWIDGETS............
0
fredcl Messages postés 547 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 7 octobre 2007 1
31 août 2005 à 08:56
Bonjour,

vérifie si les pointeurs que tu utilise sont bien alloué correctement. Que tu n'écraserait pas un espace mémoire en manipulant une mauvaise adresse.
As-tu essayer ton programme en mode DEBUG avec GDB? Je sais que l'interface de Dev-Cpp pour GDB n'est pas terrible, mais faut essayer ça peut aider!

Cordialement

FredCL
0
cs_satellite34 Messages postés 688 Date d'inscription mercredi 6 avril 2005 Statut Membre Dernière intervention 2 juin 2006 1
3 sept. 2005 à 15:42
bonjour,

erf, la ca va un peu trop loin pour moi, on utilise GDB de quelle maniere pour faire ce que tu dis???

Sinon, bah, je pense avoir essayé ttes les facons de découper cette satannée chaine;
Si t' a un tit moment, pour regarder ma source http://satellitesound.free.fr/Clientftp.rar
Voila, sinon, vraiment j' aimerai qu' on m' explique le pkoi du comment car je ne comprends vraiment pas la cause de ce pb;

event.Merci();
@+;
ROOT_DIEU Alias satellite34
0
Rejoignez-nous