[fpc-pascal] GetSaveFileNameA limited to 100 characters in default name
James Richters
james.richters at productionautomation.net
Mon Jun 21 03:04:40 CEST 2021
I have it working better now.
I was having a crash with Code 216
Appearantly
SaveAsFileName.lpstrFile:= Pchar(DefaulSaveAsFileName);
Just doesn't work the way I want it to. If I try to do the conversion to
Pchar that way, I get an error 216 on:
SaveAsResult:=GetSaveFileNameA(@SaveAsFileName);
I ended up making a buffer
SaveAsFileNameBuffer: array[0..Max_Path+1] of char;
Then putting my default file name in the buffer with:
SaveAsFileNameBuffer:=Pchar(DefaulSaveAsFileName);
Then assigning the buffer with:
SaveAsFileName.lpstrFile:=SaveAsFileNameBuffer;
So even though it looks like that would be the same thing as:
SaveAsFileName.lpstrFile:= Pchar(DefaulSaveAsFileName); It is not.. and
even though I had SaveAsFileName.nMaxFile:=Max_Path+1;
SaveAsFileName.lpstrFile:= Pchar(DefaulSaveAsFileName); still fails with a
216
Here is my complete test program, I'm not positive it's completely correct,
but it seems to work better:
Program TestGetSaveFileNameA;
Uses windows, commdlg;
Var
SaveAsFileName : TOpenFileNameA;
SaveAsResult : Boolean;
DefaulSaveAsFileName,OutpuSaveAsFileName : Ansistring;
SaveAsFileNameBuffer: array[0..Max_Path+1] of char;
MyFile : Text;
Begin
DefaulSaveAsFileName := 'X:\Something with a really really really long
long long long file name to see if there is still a bug with really long
filenames.tap';
fillchar(SaveAsFileName, sizeof(SaveAsFileName), 0);
SaveAsFileName.lStructSize:=sizeof(SaveAsFileName);
SaveAsFileName.hwndOwner:=0;
SaveAsFileName.nMaxFile:=Max_Path+1;
// SaveAsFileName.lpstrFile:=Pchar(DefaulSaveAsFileName); // This
causes an Error 216
SaveAsFileNameBuffer:=Pchar(DefaulSaveAsFileName);
SaveAsFileName.lpstrFile:=SaveAsFileNameBuffer;
SaveAsFileName.lpstrFilter:='TAP Files (*.tap)'+#0+'*.tap'+#0;
SaveAsFileName.Flags := OFN_EXPLORER;
SaveAsFileName.lpstrDefExt:='tap';
SaveAsFileName.lpstrTitle:='Save File As:';
Writeln(SaveAsFileName.lpstrFile,' ',SaveAsFileName.nMaxFile);
SaveAsResult:=GetSaveFileNameA(@SaveAsFileName);
Writeln(SaveAsResult,' File Name Selected: ',SaveAsFileName.lpstrFile);
If SaveAsResult then
Begin
OutpuSaveAsFileName:=strpas(SaveAsFileName.lpstrFile);
Writeln('File Name AnsiString: '+OutpuSaveAsFileName);
Assign(MyFile,OutpuSaveAsFileName);
ReWrite(MyFile);
Writeln(MyFile,'Test');
Writeln(MyFile,OutpuSaveAsFileName);
Close(MyFile);
End;
End.
James
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20210620/41f06115/attachment-0001.htm>
More information about the fpc-pascal
mailing list