Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi API Befehl zum ändern eines Labels im Colordialog? (https://www.delphipraxis.net/36141-api-befehl-zum-aendern-eines-labels-im-colordialog.html)

GeorgPeifer 16. Dez 2004 12:17


API Befehl zum ändern eines Labels im Colordialog?
 
Liste der Anhänge anzeigen (Anzahl: 1)
ich habe dieses Thema zwar bereits im VCL-Forum gepostet. Eine Idee, wie man das Label "Benutzterdefinierte Farben" ändern kann, fehlt mir aber leider noch.

Hier ein paar Daten zu dem Label:

Bild im Anhang


Die Control ID 65535 ist allerdings offenbar unter GetDlgItem(ColorDialog1.Handle,65535) dem Label "Grundfarben" zugeordnet.

das habe ich dann wie folgt ändern können:
Code:
  SetWindowText(GetDlgItem(ColorDialog1.Handle, 65535), PChar('Basic Colors'));
Wie komme ich ich an das korrekte Handle bzw. wie ändert man den Text unter "Benutzterdefinierte Farben"?

Viele Grüße
Georg

[edit=sakura]Bild im Anhang. Mfg, sakura[/edit]

Sprint 16. Dez 2004 15:06

Re: API Befehl zum ändern eines Labels im Colordialog?
 
Zitat:

Zitat von GeorgPeifer
Die Control ID 65535 ist allerdings offenbar unter GetDlgItem(ColorDialog1.Handle,65535) dem Label "Grundfarben" zugeordnet.

Wenn du dir mit einem Resource Explorer wie ResHacker die COMDLG32.DLL anschaust, wirst du sehen das die STATIC's "Grundfarben" und "Benutzerdefinerte Farben" die Control ID -1 haben. So kommt halt der Wert 65535 zu stande.

Hab dir mal ein kleines Beispiel geschrieben wie du im OnShow Ereignis von TColorDialog die Fensterhandles ermitteln und den Text ändern kannst.

Delphi-Quellcode:
procedure TForm1.ColorDialog1Show(Sender: TObject);
const
  BASIC_COLORS = 'Basic Colors:' + #0;
  CUSTOM_COLORS = 'Custom Colors:' + #0;
var
  ChildHWnd: HWND;
begin

  // Fensterhandle für "Grundfarben" ermitteln
  // ist das erste Control auf dem Dialog
  ChildHWnd := GetWindow((Sender as TColorDialog).Handle, GW_CHILD);

  // Handle gefunden?
  if IsWindow(ChildHWnd) then
  begin

    // "Grundfarben" in "Basic Colors" ändern
    SendMessage(ChildHWnd, WM_SETTEXT, 0, Longint(PChar(BASIC_COLORS)));

    // Fensterhandle für "Benutzerdefinierte Farben" finden
    // ist das dritte Control
    ChildHWnd := GetWindow(ChildHWnd, GW_HWNDNEXT);

    // Zweites Control gefunden?
    if IsWindow(ChildHWnd) then
    begin

      // weiter machen... um drittes Control zu ermitteln
      ChildHWnd := GetWindow(ChildHWnd, GW_HWNDNEXT);

      // Handle gefunden?
      if IsWindow(ChildHWnd) then

        // "Benutzerdefinierte Farben" in "Custom Colors" ändern
        SendMessage(ChildHWnd, WM_SETTEXT, 0, Longint(PChar(CUSTOM_COLORS)));

    end; {end if}
  end; {end if}

end; {end procedure}
Getestet habe ich das nur unter Windows XP. Ich denke aber mal, das sich seit Windows 95 daran nichts geändert hat.

GeorgPeifer 16. Dez 2004 15:36

Re: API Befehl zum ändern eines Labels im Colordialog?
 
@ Sprint :bounce1: funktioniert!!

jetzt muss ich nur noch raffen wie es funktioniert :stupid:

Danke vielmals :cheers:

Sprint 16. Dez 2004 15:38

Re: API Befehl zum ändern eines Labels im Colordialog?
 
Zitat:

Zitat von GeorgPeifer
jetzt muss ich nur noch raffen wie es funktioniert

Deswegen habe ich ja Kommentare in meinem Beispiel eingefügt. Was ich eigentlich nicht mache. :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:52 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