Mam aplikację Delphi 2006 z plikiem pomocy CHM. Wszystko działa poprawnie, z tym że nie mogę uzyskać pomocy, aby połączyć się z przyciskiem "Pomoc" na TOpenDialog i TSaveDialog.Nie mogę uzyskać Delphi Pomoc kontekstowa działająca w otwartych i zapisywanych oknach dialogowych
Prosty program demonstrujący to jest pokazany poniżej. Kliknięcie przycisku 2 powoduje otwarcie pliku pomocy i wyświetlenie poprawnej strony. Kliknięcie przycisku 1 otwiera okno dialogowe, ale kliknięcie przycisku pomocy w oknie dialogowym nie ma żadnego efektu.
unit Unit22;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,
HTMLHelpViewer ;
type
TForm22 = class(TForm)
OpenDialog1: TOpenDialog;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form22: TForm22;
implementation
{$R *.dfm}
procedure TForm22.Button1Click(Sender: TObject);
begin
OpenDialog1.HelpContext := 10410 ;
OpenDialog1.Execute ;
end;
procedure TForm22.Button2Click(Sender: TObject);
begin
Application.HelpContext (10410) ;
end;
procedure TForm22.FormCreate(Sender: TObject);
begin
Application.HelpFile := 'c:\help.chm' ;
end;
end.
Dzięki za to. Prostsza poprawka działała (Application.ModalPopupMode: = pmAuto, wywołana w overriden CreateWnd() metoda) - Nie wiem, jakie inne możliwe efekty uboczne mogą mieć w mojej aplikacji. Przypuszczalnie nie muszę nic robić przy wyjściu, ponieważ instancja TApplication i tak zniknie. – rossmcm
@ user89691: Będzie to miało efekt uboczny, że każdy otwarty formularz będzie "nadrzędny" do formularza, z którego został otwarty. Oznacza to, że zostanie zamknięty, gdy formularz "rodzica" zostanie zamknięty. Jeśli potrzebujesz większej kontroli, użyj pmExplicit jako PopupMode i ustaw wszystkie formularze PopupParent ..., cóż, wyraźnie ... "Parentend" (między nawiasami), ponieważ rzeczywisty rodzic formularza jest _nie_ dotknięty, tylko jego PopupParent. –
OK, nadal jestem trochę zdezorientowany. Nadpisanie CreateWnd działa, więc czy można go tak zostawić? Alternatywnie MyTypDialog i TSaveDialog są tworzone automatycznie (tzn. Komponenty zostały upuszczone na formularz w czasie projektowania). Czy mogę: 1) Zaraz przed wywołaniem funkcji Wykonaj, zapisz bieżącą wartość Application.ModalPopup. 2) następnie ustaw Application.ModalPopup = pmAuto. 3) po wywołaniu Execute, przywróć Application.ModalPopup do jego zapisanej wartości. Wydaje się, że działa i ma tę zaletę, że mniej prawdopodobne jest, że rozbiję go gdzie indziej, ponieważ wszystko pozostało takie, jakie było. – rossmcm