CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - DBLookupComboBox i kolorowa lista

DBLookupComboBox i kolorowa lista

Problemy związane z tworzeniem i zarządzaniem programami bazo-danowymi.
Regulamin działu


Zadając pytania dotyczące baz danych należy podawać szczegółowe informacje o bazie danych nad którą się pracuje, czyli:

  • Rodzaj serwera bazodanowego: MySql, MSSQL, Oracle itp.
  • Wersja bazy danych
  • Technologia bazodanowa używana w programie: ADO, DbExpress, InterBase
  • Komponenty użyte do zestawienia połączenia: ADOConnection, SqlConnection
  • Sposób zestawienia komponentów bazodanowych np. DataSet - DataSource - DbGrid lub DataSet - DataSetProvider - ClientDataSet - DataSource - DbGrid
  • Jeżeli używane były biblioteki innych firm niż Borland, CodeGeer i Embarcadero proszę podać ich nazwy, numer wersji i adres źródła.

DBLookupComboBox i kolorowa lista

Nowy postprzez admszczep » poniedziałek, 5 listopada 2012, 15:54

Witam,
Chcę aby dla podanych wartości pobieranych do DBLookupComboBox pozycje listy miały odpowiednie kolory albo napisy albo tło bez różnicy np tak:
pozycja_1
pozycja_2
pozycja_3
pozycja_4
Avatar użytkownika
admszczep
Homos antropiczny
Homos antropiczny
 
Posty: 66
Dołączył(a): wtorek, 3 listopada 2009, 23:25
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: Windows XP PRO SP3
Kompilator: Embarcadero RAD Studio XE
C++Builder XE
Gadu Gadu: 0
    Windows XPFirefox

Re: DBLookupComboBox i kolorowa lista

Nowy postprzez Cyfrowy Baron » poniedziałek, 5 listopada 2012, 17:14

Ten komponent nie posiada żadnego zdarzenia, które umożliwiałoby przeprowadzenie takiej operacji, przez co nie można dostać się do funkcji odpowiedzialnych za odrysowywanie tegoż komponentu. Dla przykładu komponent DBComboBox posiada zdarzenie OnDrawItem i poprzez to zdarzenie można przekazać do obiektu odpowiednie parametry zmieniające sposób odrysowywania obiektu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4719
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: DBLookupComboBox i kolorowa lista

Nowy postprzez admszczep » wtorek, 6 listopada 2012, 08:39

Witam
rzeczywiście ComboBox to jedyne rozwiązanie proszę o podpowiedz jak kolorować tła dla konkretnych item'ów
Avatar użytkownika
admszczep
Homos antropiczny
Homos antropiczny
 
Posty: 66
Dołączył(a): wtorek, 3 listopada 2009, 23:25
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: Windows XP PRO SP3
Kompilator: Embarcadero RAD Studio XE
C++Builder XE
Gadu Gadu: 0
    Windows XPFirefox

Re: DBLookupComboBox i kolorowa lista

Nowy postprzez admszczep » wtorek, 6 listopada 2012, 12:48

witam,
znalazłem działający kod w internecie wiec załączam dla innych na przyszłość

Lista rozwijana TComboBox składa się z pojedynczych elementów (item-ów). Domyślnie dla wszystkich elementów ustawiono białe tło oraz czcionkę w kolorze czarnym. Jeźeli chcemy zmienić kolor wybranego elementu listy naleźy wykonać następujące kroki:

zmień właściwość Style z csDropDown na csOwnerDrawVariable,
zdarzenie OnDrawItem
Właściwość Style
Właściwość ta pozwala na określenie jak lista będzie wyglądać. Dla komponentu TComboBox moźna wyróźnić takie oto style:
csDropDown - edytowalna lista rozwijana,
csSimple - uproszczona, edytowalna lista, w której można wybrać wartość za pomocą kursorów,
csDropDownList - zwykła lista rozwijana,
csOwnerDrawFixed - styl wykorzystywany przy zdarzeniu OnDrawItem przy wstawianiu grafiki do listy,
csOwnerDrawVariable - styl wykorzystywany przy zdarzeniu OnDrawItem przy zmianie domyślnych ustawień czcionki i tła.

Zdarzenie OnDrawItem

W zdarzeniu OnDrawItem należy sprawdzić stan pojedynczego elementu a następnie ustawić kolor tła w taki sposób:

KOD cpp:     UKRYJ  
// jeżeli element jest zaznaczony
if(State.Contains(odSelected))
{
   ComboBox->Canvas->Brush->Color = StringToColor("clNavy");
   ComboBox->Canvas->TextRect(Rect,Rect.Left + 5,Rect.Top,ComboBox->Items->Strings[Index]);
}
// jeżeli to są pozostałe stany
else
{
   // jeżeli jest to element o parzystym indeksie lub jak w moim przypadku if(Index==0) itd.
   if(Index % 2 == 0)
   {
     ComboBox->Canvas->Brush->Color = StringToColor("0x00C1F0EF");
     ComboBox->Canvas->TextRect(Rect,Rect.Left + 5,Rect.Top,ComboBox->Items->Strings[Index]);
   }
   else
   {
     ComboBox->Canvas->Brush->Color = StringToColor("clWhite");
     ComboBox->Canvas->TextRect(Rect,Rect.Left+ 5,Rect.Top,ComboBox->Items->Strings[Index]);
   }
}


Canvas to obszar, po którym można rysować. Jedną z metod klasy TCanvas jest TextRect(TRect &Rect, int X, int Y, const AnsiString Text). Pierwszy parametr, Rect to obszar pojedynczego elementu listy rozwijanej, (X, Y) to pozycje z lewej i górnej strony, od której rozpoczynamy rysować tekst, Text to tekst, który rysujemy.

Dodanie grafiki do listy TComboBox

Aby dodać grafikę do listy rozwijanej należy w pierwszej kolejności wybrać z palety komponentów TImageList, do którego wczytamy ikony, które chcemy wyświetlić. Po wykonaniu w/w kroku zmieniamy właściwość Style z csDropDown na csOwnerDrawFixed a następnie oprogramowujemy zdarzenie OnDrawItem.

KOD cpp:     UKRYJ  
// tworzymy obiekt graficzny
Graphics::TBitmap *Bmp = new Graphics::TBitmap();
// odczytujemy kolejny element graficzny z TImageList
ImageList->GetBitmap(Index, Bmp);
// rysujemy go
ComboBox->Canvas->Draw(Rect.Left, Rect.Top, Bmp);
// określamy szerokość obszaru dla tekstu
Rect.Left = Rect.Left + Bmp->Width + 5;
Rect.Right = ComboBox->Width;

// jeżeli element jest zaznaczony
if(State.Contains(odSelected))
{
   ComboBox->Canvas->Brush->Color = StringToColor("clNavy");
}
// jeżeli to są pozostałe stany
else
{
   // jeżeli jest to element o parzystym indeksie
   if(Index % 2 == 0)
   {
     ComboBox->Canvas->Brush->Color = StringToColor("0x00C1F0EF");
   }
   else
   {
     ComboBox->Canvas->Brush->Color = StringToColor("clWhite");
   }
}

// rysujemy prostokąt dla określonego stylu i koloru
ComboBox->Canvas->FillRect(Rect);
// rysujemy tekst
ComboBox->Canvas->TextOutA(Rect.Left, Rect.Top,ComboBox->Items->Strings[Index]);
// usuwamy obiekt graficzny
delete Bmp;
Avatar użytkownika
admszczep
Homos antropiczny
Homos antropiczny
 
Posty: 66
Dołączył(a): wtorek, 3 listopada 2009, 23:25
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: Windows XP PRO SP3
Kompilator: Embarcadero RAD Studio XE
C++Builder XE
Gadu Gadu: 0
    Windows XPFirefox

Re: DBLookupComboBox i kolorowa lista

Nowy postprzez Cyfrowy Baron » wtorek, 6 listopada 2012, 16:07

Nie musiałeś tego tak daleko szukać, gdyż w ► patrz serwis: Cyfrowy Baron podałem kod do takiego kolorowania i wypełniania grafiką dla TListBox, dokładnie tak samo działa to w TComboBox, gdyż obydwa obiekty mają zdarzenie OnDrawItem i używa się ich identycznie.

Zmiana koloru zaznaczenia wybranej pozycji w ListBox.
Grafika jako tło w ListBox.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4719
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Bazy danych

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 2 gości

cron