Erstmal must du nachsehn, ob es dafür irgendwas gibt.
Hier die vom TColorDialog gekapselte
WinAPI https://msdn.microsoft.com/de-de/lib.../ms646912.aspx
und da deren Callback
https://msdn.microsoft.com/de-de/lib.../ms646908.aspx .
Es gibt kein wirkliches Event in TColorDialog, für diesen Callback. (in Dialogs.pas)
Man könnte jetzt die
API hooken.
function ChooseColor(var CC: TChooseColor): Bool; stdcall;
(CommDlg.pas)
[add]
schau mal, was du mit Überschreiben solcher Events machen kannst, wenn du den TColorDialog ableitest und um sowas erweiterst.
Delphi-Quellcode:
procedure DefaultHandler(var Message); override;
function MessageHook(var Msg: TMessage): Boolean; override;
procedure WMInitDialog(var Message: TWMInitDialog); message WM_INITDIALOG;
[/add]
Oder du überschreibst
function TCommonDialog.TaskModalDialog(DialogFunc: Pointer; var DialogData): Bool;
.
Darin ist DialogData ein TChooseColor (tagCHOOSECOLOR
A), in welchem der Callback ausgetauscht werden könnte.
Geheimer und nicht öffentlich zugänglicher Original-Callback (Dialogs.pas > Implementation)
Delphi-Quellcode:
function DialogHook(Wnd: HWnd; Msg: UINT; WParam: WPARAM; LParam: LPARAM): UINT_PTR; stdcall;
begin
Result := 0;
if Msg = WM_INITDIALOG then
begin
CenterWindow(Wnd);
CreationControl.FHandle := Wnd;
CreationControl.FDefWndProc := Pointer(SetWindowLong(Wnd, GWL_WNDPROC,
IntPtr(CreationControl.FObjectInstance)));
CallWindowProc(CreationControl.FObjectInstance, Wnd, Msg, WParam, LParam);
CreationControl := nil;
end;
end;
Also eigenes Event schreiben, den Originalcode kopieren, (wenn gefunden) noch die eigenen Behandlungen da rein und letztendlich in DialogData den eigenen Callback eintragen.
Dann gibt es bestimmt auch Color-Dialoge von drittanwendern, wo deine gewünschte Funktion drin ist.
Und die
beste letzte Lösung: an
http://quality.embarcadero.com/ wenden, den "Fehler"/Featurerequest melden, warten bis es eingebaut wurde und dann XE8, XE9 oder XE10 kaufen.