ComboBox i indeks górny

ComboBox i indeks górny
RudyBestyj
  • Rejestracja:ponad 19 lat
  • Ostatnio:prawie 10 lat
  • Postów:103
0

Czy jest możliwość wyświetlania w comboboxie listy zawierającej nazwy
z indeksem górnym.
Przekopałem internet i wyskakuje tylko jak to zrobić w RichEdicie ale to już wiedziałem. Sądzę że jezeli jest to do zrobienia w ComboBoxie to nie będzie to takie łatwe jak w RichEdit. Może coś z wykorzystaniem Canvas, ale jak?
Proszę o pomoc ;-)


Nie dyskutuj z głupcem - sprowadzi cię do swojego poziomu i pokona doświadczeniem.
AP
  • Rejestracja:około 22 lata
  • Ostatnio:ponad 12 lat
  • Postów:3079
0

Ustaw Style na csOwnerDrawFixed oraz zwiększ ItemHeight w zależności od użytej czcionki.

Następnie w zdarzeniu OnDrawItem:

Kopiuj
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
  StringWidth: Integer;
  Napis: String;
begin
  Napis:= 'indeks górny';
  with ComboBox1.Canvas do
  begin
    Brush.Color:= clWhite;
    FillRect(Rect);
    Font.Size:= 12;
    TextOut(Rect.Left + 2, Rect.Top+4, ComboBox1.Items[Index]);
    StringWidth:= TextWidth(ComboBox1.Items[Index]);
    Font.Size:= 8;
    TextOut(Rect.Left + StringWidth + 4, Rect.Top+2, Napis);
  end;
end;
RudyBestyj
  • Rejestracja:ponad 19 lat
  • Ostatnio:prawie 10 lat
  • Postów:103
0

Dzięki [green]


Nie dyskutuj z głupcem - sprowadzi cię do swojego poziomu i pokona doświadczeniem.
0

a da się zrobić coś takiego w "label" nie tworząc drugiego "label"??

jestem początkujący

puchi
  • Rejestracja:ponad 19 lat
  • Ostatnio:około 3 lata
  • Postów:411
0

da się po prostu musisz ręcnie obsłużyć rysowanie komponentu podobnie ja w przykładzie który podał ci AdamPL.

0

Też mnie to interesuje tylko, że label nie ma zdarzenia dotyczącego rysowania...

cimak
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 9 lat
  • Postów:1668
0

kocham ten sposob:

Kopiuj
type
  TLabel = class(StdCtrls.TLabel)
  public
    procedure Paint; override;
end;

{...}

procedure TLabel.Paint;
begin
  self.Canvas.LineTo(10, 10);
end;
edytowany 1x, ostatnio: cimak
0

No tak, tylko, że nic mi nie rysuje...

0

Dobra, pokombinuje sobie. Bo potrzebuje czegoś takiego?

cimak
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 9 lat
  • Postów:1668
0

hmm.... procedura jest wywolywana w odpowiednim momencie ale faktycznie niec nie rysuje.
wyglada na to ze powinienes rysowac nie na canvasie labelu tylko bezposrednio na canvasie formy (parenta) :|

KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:2 minuty
  • Lokalizacja:Gorlice
0

Jak to nie rysuje u mnie Delphi 7, Windows XP wszystko działa.

EDIT//
Sprawdziłem i faktycznie z LineTo coś nie tak ale TextOut a przecież o to chodzi pytającemu działa :)

Kopiuj
procedure TLabel.Paint;
const
  s = 'Test';
begin
  SetBKMode(self.Canvas.Handle, Windows.TRANSPARENT);
  self.Canvas.TextOut(2, 2, s);
end;

Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
edytowany 2x, ostatnio: kAzek
cimak
tylko za pierwszym razem. przykryj okno a potem odkryj i zobaczysz...
KA
No faktycznie dziwna sprawa :/
Misiekd
bo po Twoim Paint jest wywoływane Paint TCustomLabel, które zamazuje to co nagryzmoli się w Paint. Rozwiązanie to nadpisać Paint bez override ale wtedy trzeba dorzucić kod, który narysuje resztę. BTW TLabel to nie jest komponent graficzny! Do tego jest TPaintBox/TImage (od biedy)
KA
Nic nie jest zamazywane specjalnie nie pobierałem Caption tylko tekst "Test" i tekst jest rysowany metodą TextOut (gdyby na końcu procedury wstawić override to by zamazało) natomiast przy próbie rysowania linii metodą LineTo jest tak jak pisał cimak (tylko za pierwszym razem działa a później nie przerysowuje). I tu pytanie dlaczego skoro to i to rysuje po Canvas nie działa tak samo. Wiem że TLabel to nie komponent graficzny ale dziedziczy po TGraphicControl ma Canvas więc można rysować ;)
Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 12 lat
  • Postów:7923
0
kAzek napisał(a)

Wiem że TLabel to nie komponent graficzny ale dziedziczy po TGraphicControl ma Canvas więc można rysować ;)

Pewnie - rower to też pojazd więc nic nie stoi na przeszkodzie, żeby w zimę dopiąć do niego pług i odśnieżać.

Mnie zawsze zastanawia co kieruje ludźmi, którzy próbują na siłę wykopać dołek kartką papieru zamiast wziąć szpadel/koparkę i narzekają, że ta kartka to taka toporna, że się zgina, że ciężko idzie, że w ogóle to ta kartka do d**y jest i do niczego się nie nadaje. Naucz się najpierw używać narzędzi (tu komponentów) zgodnie z ich przeznaczeniem a dopiero potem narzekaj.


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
KA
Czy ja narzekam? Mnie to do szczęścia nie potrzebne! Tylko zaciekawiło mnie dlaczego TextOut działa poprawnie (tj. zgodnie z oczekiwaniem) a LineTo nie. Piszesz o używaniu zgodnie z przeznaczeniem to powiedz mi po jaką cholerę TLabel ma Canvas jak nie po to aby można było po nim rysować? Zresztą z rysowaniem po TLabel zaczął cimak mnie tylko zaciekawiło dlaczego jedno działa a drugie nie i to mnie interesuje a nie który komponent do czego służy...
Misiekd
każda kontrolka graficzna ma canvas aby na czymś się narysować - takie to trudne do zrozumienia. BTW na 2k10 działa normalnie
KA
To dlaczego Canvas dostępne jest z zewnątrz? Takie trudne do zrozumienia jest, że właśnie po to aby móc po nim rysować?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.