AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ColorDialog mit OnChange gesucht

Ein Thema von Nelphin · begonnen am 1. Mär 2015 · letzter Beitrag vom 1. Mär 2015
Antwort Antwort
Nelphin

Registriert seit: 2. Feb 2009
Ort: Kaiserslautern
71 Beiträge
 
Turbo Delphi für Win32
 
#1

ColorDialog mit OnChange gesucht

  Alt 1. Mär 2015, 07:41
Delphi-Version: 5
Hallo,

ich möchte gerne das der Benutzer diverse Farbeinstellungen vornehmen kann, nun funktioniert das auch gut über TColordialog.
Noch schöner wäre es, wenn der Benutzer seine Änderung schon innerhalb des Dialogs sehen könnte aber es scheint kein OnChange Event zu geben.
Ich hab versucht über einen Timer die ColorDialog.Color dauernd abzufragen aber die scheint sich erst bei .execute zu ändern.
Es ist halt lästig das der Benutzer den Dialog erst schließen muss um das Ergebnis zu beurteilen, dann gefällt die Farbe nicht, wieder öffnen, wieder schliessen usw..

Kennt jemand eine alternative oder kann man das OnChange Event irgendwie an einen TColorDialog dranbasteln?

Danke!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#2

AW: ColorDialog mit OnChange gesucht

  Alt 1. Mär 2015, 10:15
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 (tagCHOOSECOLORA), 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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 1. Mär 2015 um 10:30 Uhr)
  Mit Zitat antworten Zitat
Sailor

Registriert seit: 20. Jul 2008
Ort: Balaton
112 Beiträge
 
Delphi 2010 Professional
 
#3

AW: ColorDialog mit OnChange gesucht

  Alt 1. Mär 2015, 11:06
Versuch's mal hiermit
Angehängte Dateien
Dateityp: zip AfpColorPicker.zip (4,8 KB, 20x aufgerufen)
  Mit Zitat antworten Zitat
Nelphin

Registriert seit: 2. Feb 2009
Ort: Kaiserslautern
71 Beiträge
 
Turbo Delphi für Win32
 
#4

AW: ColorDialog mit OnChange gesucht

  Alt 1. Mär 2015, 13:00
Versuch's mal hiermit
Super, ich hab mir das eben kurz angeschaut und ich denke daraus kann ich mir basteln was ich gesucht habe!

VIELEN DANK!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz