Il 02/07/2012 15:56, Martin ha scritto:

I don't know anything about the issue itself, but have you tried setting
a watchpoint (context menu in watches list). (Scope = global / Acess write)

Set the watchpoint after TCommonDialog.DoExecute has initialized the
value. The watchpoint should stop execution if the value is modified

I tried to evaluate when FUserChoice is assigned 2 (mrCancel).

function TCommonDialog.DoExecute : boolean;
var
  CanClose: boolean;
begin
  FCanCloseCalled := False;
  if Assigned(FOnShow) then
    FOnShow(Self);

--> before this is FUserChoice=0 (mrNone)

  TWSCommonDialogClass(WidgetSetClass).ShowModal(Self);

--> after this is  FUserChoice=2 (mrCancel)

I look deeper and I found that in:

class procedure TWin32WSOpenDialog.VistaDialogShowModal(ADialog: IFileDialog; const AOpenDialog: TOpenDialog);
var
  FileDialogEvents: IFileDialogEvents;
  Cookie: DWord;
  CanClose: Boolean;
begin
  FileDialogEvents := TFileDialogEvents.Create(AOpenDialog);
  ADialog.Advise(FileDialogEvents, @Cookie);
  try
    AOpenDialog.DoShow;
    repeat
      ADialog.Show(GetParentWnd);

--> I set a breakpoint on the line below, the dialog is not shown, UserChoice in the following 'if' line is mrNone, so different from mrOk and then UserChoice is set to mrCancel

      if (AOpenDialog.UserChoice <> mrOk) then
      begin
        CanClose := True;
        AOpenDialog.DoCanClose(CanClose);
        AOpenDialog.UserChoice := mrCancel;
      end
      else
        CanClose := True;
    until CanClose;
  finally
    ADialog.unadvise(Cookie);
    FileDialogEvents := nil;
  end;
end;


--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to