AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Comboliste klappt nicht auf

Ein Thema von EWeiss · begonnen am 17. Mai 2019 · letzter Beitrag vom 17. Mai 2019
Antwort Antwort
Benutzerbild von EWeiss
EWeiss

Registriert seit: 16. Okt 2010
6.377 Beiträge
 
Delphi 2010 Architect
 
#1

Comboliste klappt nicht auf

  Alt 17. Mai 2019, 11:16
CB_SHOWDROPDOWN hat keine Auswirkung Liste klappt nicht auf.
Kann aber nicht erkennen das irgend etwas falsch ist.

Delphi-Quellcode:
LStyle := WS_CHILD or WS_VISIBLE or WS_TABSTOP or CBS_DROPDOWNLIST or
  CBS_HASSTRINGS or CBS_DISABLENOSCROLL or CBS_OWNERDRAWFIXED or WS_VSCROLL
  or CBS_NOINTEGRALHEIGHT;

HCombo := CreateWindowEx(0, 'COMBOBOX', PWideChar(ColorLabel), LStyle,
  Width - 24, 0, 0, 152, FHColorPicker, DlgItemID, SkinEngine.skInstance,
  nil);

// Speicher das Handle in mein Property.
SkinEngine.SetProperty(FHColorPicker, COLORPICK_COMBO, HCombo);
Delphi-Quellcode:
WM_COMMAND:
  begin
    HCombo := SkinEngine.GetProperty(WinHandle, COLORPICK_COMBO);
    EnableWindow(HCombo, true);
    SendMessage(HCombo, CB_SHOWDROPDOWN, WPARAM(True), 0); // funktioniert nicht warum auch immer.
    SkinColorPicker.PutFocusOn(HCombo);
  end;
gruss
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
184 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Comboliste klappt nicht auf

  Alt 17. Mai 2019, 12:16
CB_SHOWDROPDOWN hat keine Auswirkung Liste klappt nicht auf.
Kann aber nicht erkennen das irgend etwas falsch ist.

Delphi-Quellcode:
LStyle := WS_CHILD or WS_VISIBLE or WS_TABSTOP or CBS_DROPDOWNLIST or
  CBS_HASSTRINGS or CBS_DISABLENOSCROLL or CBS_OWNERDRAWFIXED or WS_VSCROLL
  or CBS_NOINTEGRALHEIGHT;

HCombo := CreateWindowEx(0, 'COMBOBOX', PWideChar(ColorLabel), LStyle,
  Width - 24, 0, 0, 152, FHColorPicker, DlgItemID, SkinEngine.skInstance,
  nil);

// Speicher das Handle in mein Property.
SkinEngine.SetProperty(FHColorPicker, COLORPICK_COMBO, HCombo);
Delphi-Quellcode:
WM_COMMAND:
  begin
    HCombo := SkinEngine.GetProperty(WinHandle, COLORPICK_COMBO);
    EnableWindow(HCombo, true);
    SendMessage(HCombo, CB_SHOWDROPDOWN, WPARAM(True), 0); // funktioniert nicht warum auch immer.
    SkinColorPicker.PutFocusOn(HCombo);
  end;
gruss
Hat die Combobox den Fokus?
Peter Below
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss

Registriert seit: 16. Okt 2010
6.377 Beiträge
 
Delphi 2010 Architect
 
#3

AW: Comboliste klappt nicht auf

  Alt 17. Mai 2019, 12:20
Zitat:
Hat die Combobox den Fokus?
SkinColorPicker.PutFocusOn(HCombo); Wird nachher gesetzt.

Delphi-Quellcode:
HCombo := SkinEngine.GetProperty(WinHandle, COLORPICK_COMBO);
SetFocus(HCombo);
Hat keinen Effekt.

gruss

Geändert von EWeiss (17. Mai 2019 um 12:25 Uhr)
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
184 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Comboliste klappt nicht auf

  Alt 17. Mai 2019, 12:22
Zitat:
Hat die Combobox den Fokus?
SkinColorPicker.PutFocusOn(HCombo); Wird nachher gesetzt.

gruss
Machs vorher.
Peter Below
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss

Registriert seit: 16. Okt 2010
6.377 Beiträge
 
Delphi 2010 Architect
 
#5

AW: Comboliste klappt nicht auf

  Alt 17. Mai 2019, 12:25
Zitat:
Hat die Combobox den Fokus?
SkinColorPicker.PutFocusOn(HCombo); Wird nachher gesetzt.

gruss
Machs vorher.
bringt nix.

Zusätzlich habe ich noch das Problem das wenn ich den Style CBS_DROPDOWNLIST addiere
dann bekomme ich kein Event auf die Message WM_CTLCOLORLISTBOX.. Hmmmm

gruss

Geändert von EWeiss (17. Mai 2019 um 13:07 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss

Registriert seit: 16. Okt 2010
6.377 Beiträge
 
Delphi 2010 Architect
 
#6

AW: Comboliste klappt nicht auf

  Alt 17. Mai 2019, 16:27
Geht jetzt.. aber nicht mit dem CB_SHOWDROPDOWN denke das ist überflüssig.
Erste Problem war das die Weite der Combo 0 war wenn dem so ist wird die Liste nicht aufgeklappt warum auch immer

Delphi-Quellcode:
    HCombo := CreateWindowEx(0, 'COMBOBOX', PWideChar(ColorLabel), LStyle,
      Width - 24, 0, 0, 152, FHColorPicker, DlgItemID, SkinEngine.skInstance,
      nil);
zu
Delphi-Quellcode:
    HCombo := CreateWindowEx(0, 'COMBOBOX', PWideChar(ColorLabel), LStyle,
      Width - 24, 0, 1, 152, FHColorPicker, DlgItemID, SkinEngine.skInstance,
      nil);
Zweite Problem ich musste die alte Position der Combo wieder herstellen bevor sie erneut aufgeklappt wird.
Delphi-Quellcode:
procedure TSkinColorPicker.PutFocusOn(ObjectHandle: HWND);
begin

  PostMessage(ObjectHandle, WM_LBUTTONDOWN, 0, 0);
  PostMessage(ObjectHandle, WM_LBUTTONUP, 0, 0);
end;
Delphi-Quellcode:
WM_COMMAND:
  begin
    HCombo := SkinEngine.GetProperty(WinHandle, COLORPICK_COMBO);
    GetWindowRect(WinHandle, rc);
    SetWindowPos(HCombo, 0, rc.Left, 0, 1, 152, SWP_NOZORDER);
    SkinColorPicker.PutFocusOn(HCombo);
  end;
Ergebnis siehe shot!
Muss noch was an der Hintergrundfarbe machen sowie die Schrift der Combo mit der des Skins ersetzen verwende im Moment TextOut. Wird dann GDI+
Der ColorPicker ändert die Aero Farbe.

gruss
Miniaturansicht angehängter Grafiken
picker.png   p2.png  

Geändert von EWeiss (17. Mai 2019 um 16:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss

Registriert seit: 16. Okt 2010
6.377 Beiträge
 
Delphi 2010 Architect
 
#7

AW: Comboliste klappt nicht auf

  Alt 17. Mai 2019, 17:21
grrr... mir fehlt der erste Eintrag.

Zitat:
"AliceBlue, $F0F8FF_" _ ' COLORLABEL
"AntiqueWhite, $FAEBD7_" _ '
"Aqua, $00FFFF_" _ '
"Aquamarine, $7FFFD4_" _ '
"Azure, $F0FFFF_" _ '
"Beige, $F5F5DC_" _ '
"Bisque, $FFE4C4_" _ '
"Black, $000000_" _ '
Ich parse den String auf diese weise.

Delphi-Quellcode:
    if ColorLabel > 'then
    begin
      SetItem := -1;
      Parse := Split(ColorLabel, '_');
      Count := High(Parse);

      R1 := 0;
      G1 := 0;
      B1 := 0;

      for K := 0 to Count - 1 do
      begin
        // Get Color Name
        ColorName := Split(Parse[K], ',');
        CLName := ColorName[Low(ColorName)];
        SendMessage(HCombo, CB_ADDSTRING, 0, LParam(CLName));
        // Get Color Value
        Color := ColorName[High(ColorName)];
        R := Byte(StrToInt('$' + MidStr(Color, 3, 2)));
        G := Byte(StrToInt('$' + MidStr(Color, 5, 2)));
        B := Byte(StrToInt('$' + MidStr(Color, 7, 2)));
        SendMessage(HCombo, CB_SETITEMDATA, K, LParam(RGB(R, G, B)));
        
        if (R = R1) and (G = G1) and (B = B1) then
          SetItem := K;
      end;
      if SetItem > -1 then
        SendMessage(HCombo, CB_SETCURSEL, SetItem, 0);
    end;
Der erste Eintrag 0 wird nicht zur Liste addiert. Warum?

gruss
Miniaturansicht angehängter Grafiken
fehlt.png  
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss

Registriert seit: 16. Okt 2010
6.377 Beiträge
 
Delphi 2010 Architect
 
#8

AW: Comboliste klappt nicht auf

  Alt 17. Mai 2019, 18:47
Hat sich erledigt Danke!

gruss
Miniaturansicht angehängter Grafiken
backcolor.png   two.png  

Geändert von EWeiss (18. Mai 2019 um 00:01 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 03:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf