View Issue Details

IDProjectCategoryView StatusLast Update
0005371JEDI VCL00 JVCL Componentspublic2010-11-09 14:14
ReporterdecodingAssigned Toobones 
PrioritynormalSeveritymajorReproducibilityalways
Status resolvedResolutionnot fixable 
Product Version3.40 
Target VersionFixed in Version 
Summary0005371: component TJvDiskFullDialog
DescriptionJvDiskFullDialog1.Execute
raise exception class EWinDialogError - "Method not supported"
Additional InformationEmbarcadero® Delphi® 2010 Version 14.0.3513.24210
TagsNo tags attached.

Activities

2010-10-20 09:53

 

jvcl-error.jpg (28,869 bytes)
jvcl-error.jpg (28,869 bytes)

decoding

2010-10-20 10:02

reporter   ~0017928

function TJvDiskFullDialog.Execute: Boolean;
begin
  if not Assigned(SHHandleDiskFull) then // !!! not assigned
    raise EWinDialogError.CreateRes(@RsENotSupported); // !!! Error
  Result := GetDriveType(PChar(DriveChar + ':\')) = 3;
  if Result then
    SHHandleDiskFull(GetForegroundWindow, GetDrive);
end;

decoding

2010-10-20 10:10

reporter   ~0017929

Windosw 7:

procedure LoadJvDialogs;
begin
  ShellHandle := SafeLoadLibrary(Shell32);
  if ShellHandle <> 0 then
  begin
    if Win32Platform = VER_PLATFORM_WIN32_NT then
      @SHChangeIconW := GetProcAddress(ShellHandle, PAnsiChar(62))
    else
      @SHChangeIcon := GetProcAddress(ShellHandle, PAnsiChar(62));
    @SHFormatDrive := GetProcAddress(ShellHandle, PAnsiChar('SHFormatDrive'));
    @FreePIDL := GetProcAddress(ShellHandle, PAnsiChar(155));
    if CheckWin32Version(6, 0) then
      @SHShutDownDialog6 := GetProcAddress(ShellHandle, PAnsiChar(60))
    else
      @SHShutDownDialog := GetProcAddress(ShellHandle, PAnsiChar(60));
    @SHRunDialog := GetProcAddress(ShellHandle, PAnsiChar(61));
    @SHFindFiles := GetProcAddress(ShellHandle, PAnsiChar(90));
    @SHFindComputer := GetProcAddress(ShellHandle, PAnsiChar(91));
    @SHObjectProperties := GetProcAddress(ShellHandle, PAnsiChar(178));
    @SHNetConnectionDialog := GetProcAddress(ShellHandle, PAnsiChar(160));
    @SHOutOfMemoryMessageBox := GetProcAddress(ShellHandle, PAnsiChar(126)); // nil
    @SHHandleDiskFull := GetProcAddress(ShellHandle, PAnsiChar(185)); // nil
    @SHStartNetConnectionDialog := GetProcAddress(ShellHandle, PAnsiChar(215)); // nil
    @SHOpenWith := GetProcAddress(ShellHandle, PAnsiChar('OpenAs_RunDLLA')); // nil
  end;
  ...
end;

obones

2010-11-09 14:14

administrator   ~0018026

Hello,

Well, yes, that's the expected behavior of the component and no fix is possible.
This component, and a few others, rely on undocumented APIs from Windows.
If the API is not there, as under Windows 7, it cannot call it. You, as the developer, have to rely on other means to provide this information

Issue History

Date Modified Username Field Change
2010-10-20 09:53 decoding New Issue
2010-10-20 09:53 decoding File Added: jvcl-error.jpg
2010-10-20 10:02 decoding Note Added: 0017928
2010-10-20 10:10 decoding Note Added: 0017929
2010-11-09 14:14 obones Note Added: 0018026
2010-11-09 14:14 obones Status new => resolved
2010-11-09 14:14 obones Resolution open => not fixable
2010-11-09 14:14 obones Assigned To => obones