Problem z ustawieniem tekstu w ComboBoxie

0

Witam, kończę właśnie pisać komponent w styli TCheckComboBox. Jako, że te, które znalazłem w Internecie w ogóle mi nie pasowały. Komponent dziedziczy oczywiście po TCustomComboBox

Generalnie mam jeden większy i jeden mniejszy problem.

Ten większy - to w którym momencie zmienić właściwość TEXT comboBoxa?

Mianowicie chcę osiągnąć taki efekt:
klikam checkBoxa obok itema i w tekście comboBoxa pojawia się tekst zaznaczonego itema.
Jeśli tych zaznaczonych jest kilka, no to pojawiają się wszystkie, np:
"Item1, Item2, Item10"

W żaden sposób mi to nie wychodzi.

Próbowałem coś takiego(procedura jest oczywiście przesłonięta):

procedure TJuhasCheckedComboBox.Click;
var
  Point: TPoint;
begin
  Point:=ScreenToClient(Mouse.CursorPos);
  if (ItemIndex <> -1) and GetItemEnabled(ItemIndex) then
  begin
    if Point.X<=FCheckWidth then
    begin
      ToggleClickCheck(ItemIndex); //jeśli kliknięto w odpowiednim miejscu itema, to zrób zaznaczenie
      DroppedDown:=true; //jeśli robisz zaznaczenie, to nie chowaj okienka z itemami
    end;
  end;

  inherited;
  SelText:='blabla';
end;

Próbowałem zmienić właściwość TEXT na dwa sposoby:

Text:='blabla';
//i
SelText:='blabla';

O ile pierwszy wydaje się nic nie robić, to drugi działa tak, że pojawia się na ułamek sekundy tekst właśnie zaznaczonego Itema, potem na ułamek sekundy 'blabla', potem ostatecznie zostaje puste.

Próbowałem też zrobić to w przesłoniętej procedurze Change, ale efekt był podobny.
Ktoś wie jak to zrobić??

Drugi problem mniejszy to taki, że gdy użytkownik zaznacza sobie ptaszki, to okienko z itemami się chowa, a ja chcę, żeby zostało. Rozwiązałem do po części instrukcją: DroppedDown:=true; ale problem jest taki, że okienko najpierw się chowa, a dopiero potem pokazuje, czyli jest taki chamski efekt mignięcia. Ktoś wie, jak to poprawić?

0

Cóż, przede wszystko pozdrawiam za wytrwałość i chęć poznania :)
Czytałem wczoraj Kolegi pytania w tym zakresie i uważam, że trochę niepotrzebnie zagalopował się Kolega do tworzenia komponentu, kiedy wystarczyłoby na formie umiejscowić odpowiednie komponenty i oprogramować niezbędne zdarzenia.
Cóż zdaje się, że uległ Kolega namowom (tudzież podżeganiu) innych forumowiczów do potrzeby utworzenia komponentu tego typu. Sam jestem ciekaw opracowania tego komponentu, szczególnie, że ma Kolega go na ukończeniu.
A kolegom, którzy uważają, że obiektowość należy bezsensownie zwielokratniać proponowałbym zapisać się do jakiejś partii, a nie psuć sztuki.

0

Gdybym miał to użyć w jednym miejscu, no to prawdopodobnie nie pisałbym komponentu ;) Ale ja to mam użyć aktualnie na około 15 formach, a w przyszłości też :)

0

próbowałeś przechwycic (i olać) komunikaty przychodzace do comboboxa? moze to zadziala.

0
cimak napisał(a)

próbowałeś przechwycic (i olać) komunikaty przychodzace do comboboxa? moze to zadziala.

Próbowałem. Doszedłem aż do TControl :D
Ale jakoś nie udało się.

0

OK, chciałem to zrobić inaczej. Żeby napis zmienić dopiero po zamknięciu listBoxa.
Ale co się okazało? Że kolejność wykonywania czynności przez COmboBox jest jakaś poj***ana!

Otóż ComboBox najpierw zamyka swojego listBoxa, a dopiero potem wywołuje zdarzenie kliknięcia. Mało tego. Jeśli przechwytuję komunikat CBN_CLOSEUP (opisany w jednym miejscu: comboBox is about to close, a w innym: "has been closed"), właściwość dropeeddown jest ustawiona na false. Wniosek z tego taki, że komunikat zostaje wysyłany dopiero po zamknięciu comboBoxa.

Przechwycenie CB_SHOWDROPDOWN nie daje nic, ponieważ jest on wysyłany wg moich testów tylko podczas otwierania comoBoxa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1