GetOpenFileName // TOpenFileName - Delphi/Pascal - Programmation
Marsh Posté le 24-03-2005 à 19:12:15
Je suis pas sûr que passer @buffer soit correct. Si ça marche sans le @ il ne faut pas le @.
Et ton filter est bizarre
Pourquoi tu n'utilises pas le TOpenDialog simplement ?
Marsh Posté le 24-03-2005 à 20:14:31
Citation : Je suis pas sûr que passer @buffer soit correct. Si ça marche sans le @ il ne faut pas le @. |
ça passe pas sans le @, le paramètre requis est un pointeur.
Citation : Et ton filter est bizarre |
vi je sais
Citation : Pourquoi tu n'utilises pas le TOpenDialog simplement ? |
j'essaye de faire un truc pure Api'powa ...je sais pas si je vais gagner quelque chose en procédant ainsi mais ce qui est sûr c'est que je vais apprendre des nouvelles structures de données et tout, c'est pas mal pour enrichir les connaissances
Marsh Posté le 24-03-2005 à 20:27:07
Ayé j'ai trouvé les amis, j'ai eu ce problème et si d'autres le croise vous saurez quoi lui dire, je post la solution :
ZeroMemory(@ofn,sizeof(ofn)); |
voilà la ligne qu'il faut ajouter avant l'initialisation de ses valeurs dans l'implémentation de la fonction. Ca permet d'initialiser les propriétés de la structure et donc après c'est nikel
En tout cas, merci Antp de m'avoir fait chercher dans ce coin là
champion du monde
Marsh Posté le 24-03-2005 à 21:06:42
arf j'avais cru voir que t'initialisais la structure et non le buffer (le nom "buffer" aurait dû me mettre sur la voie )
en effet sans initialisation ça marche moins bien
Marsh Posté le 24-03-2005 à 22:20:02
maintenant y'a un autre problème copain
la structure enregistre le nom du fichier dans le buffer mais j'arrive pas à assigner la valeur du buffer dans le string de mon attribut privé FNom
Marsh Posté le 24-03-2005 à 22:30:46
FNom := Buffer;
Ça doit marcher. Sinon en le castant en PChar peut-être.
Marsh Posté le 25-03-2005 à 12:21:57
arf il me dit :
--------------------------- |
Pourtant ma classe n'a rien d'extraordinaire
type |
je vois pô du tout
Marsh Posté le 25-03-2005 à 12:51:21
Et en pas à pas c'est sur l'assignation que ça plante ?
Marsh Posté le 25-03-2005 à 12:54:06
ouai ouai il me dit "inaccessible value" quand je place le curseur sur la propriété "Nom".
Est-ce que je dois utiliser un accesseur ?
Marsh Posté le 25-03-2005 à 12:56:13
Non, mais désactive les optimisations dans les options du projet, pour le debug c'est plus facile, et ça évite les "inaccessible..." (il faut faire un Build All après).
Marsh Posté le 25-03-2005 à 13:07:41
j'ai désactivé l'optimisation mais le "inaccessible value" est toujours là lorsque je mets le curseur sur "Nom" pendant l'assignation "Nom := buffer". Avec un "Nom := PChar(buffer)" ça foire toujours autant :|
Marsh Posté le 25-03-2005 à 13:10:22
Et pour buffer, il arrive à dire ce qu'il y a dedans ?
Marsh Posté le 25-03-2005 à 13:13:03
ouai ouai, un mega tableau composé de 261 éléments qui contiennent chacun 1 caractère qui représente le chemin + le nom du fichier sélectionné dans le dialog OpenFileName ouvert 2 sec juste avant
ps : tu veux qu'on en discute sur msn ? je te montrerai le code en entier
Marsh Posté le 25-03-2005 à 13:18:15
Ta procédure Button1Click elle est complète ? Parce qu'il faudrait peut-être créer l'objet avant d'accèder à ses propriétés (tout le début du code n'accédant à rien, ça passe même si l'objet lui-même n'est pas créé)
Marsh Posté le 24-03-2005 à 18:55:43
Salut les amis,
Je tente de me faire une petite classe pour apprendre à en faire et je souhaiterai créer une fonction Ouvrir qui affiche la boite de dialogue de Windows...bref, voilà ce que j'ai fais pour l'instant :
function TinkFichier.Ouvrir(Hwnd:THandle): string;
var
ofn: TOpenFileName;
buffer: array [0..MAX_PATH] of char;
begin
ZeroMemory(@buffer,sizeof(buffer));
ofn.lStructSize := SizeOf(TOpenFileName);
ofn.hWndOwner := Hwnd;
ofn.lpstrFilter := 'Marche bordel de !!!';
ofn.nFilterIndex := 0;
ofn.lpstrFile := buffer;
ofn.nMaxFile := sizeof(buffer);
ofn.lpstrInitialDir := nil;
ofn.lpstrTitle := nil;
ofn.Flags := OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_LONGNAMES;
if GetOpenFileName(ofn) then
FNom := ofn.lpstrFile;
end;
voilà comment j'appel ma méthode :
procedure TForm1.Button1Click(Sender: TObject);
var aFichier: TinkFichier;
begin
aFichier.Ouvrir(self.Handle);
end;
et voilà ce qu'il me répond le tonton :
---------------------------
Project1
---------------------------
Access violation at address 77E5A86B in module 'kernel32.dll'. Read of address 00463000.
---------------------------
OK
---------------------------
en débuguant pas à pas, l'erreur survient à ce moment :
if GetOpenFileName(ofn) then
...j'ai dû oublier quelque chose mais ze sais pas quoi
help me
Message édité par Inekman le 24-03-2005 à 18:57:19