[BCB] StatusBar i OwnerDraw

0

Dlaczego poniższy kod nie chce działać? Tzn. bardzo ładnie rysuje obrazek na panelu, ale ciąg "Przykładowy tekst" nie jest już wyświetlany :|

void __fastcall TMainForm::StatusBar1DrawPanel(TStatusBar *StatusBar,
      TStatusPanel *Panel, const TRect &Rect)
{
  TCanvas & pnlCanvas = *StatusBar->Canvas;
  if (Panel->Index == 2)
  {
    Graphics::TBitmap *Image = new Graphics::TBitmap;
    TRect rct;
      rct.left = 0;
      rct.top = 0;
      rct.right = 16;
      rct.bottom = 16;
    Image->Canvas->Brush->Color = clBtnFace;
    Image->Canvas->FillRect(rct);
    StatusBarList->GetBitmap(1, Image);

    pnlCanvas.Draw(Rect.Left, Rect.Top, Image);
    pnlCanvas.TextOutA(10,2, "Przykładowy tekst");
    delete Image;
  }
}

Początkowo myślałem, że zmiana koloru pióra Canvas->Pen na np. clBlack rozwiąże problem, ale chyba nie w tym rzecz, bo nie działa...

0

Początkowo myślałem, że zmiana koloru pióra Canvas->Pen na np. clBlack rozwiąże problem, ale chyba nie w tym rzecz, bo nie działa...

Nie Canvas->Pen tylko Canvas->Font->Color

0

Sorry, czeski błąd, miałem napisać Canvas->Font->Color;
ale to i tak nie działa...

0

Podaj więcej szczegółów. Jaki jest charakter tego "niedziałania". Dlaczego TCanvas::TextOutA, a nie TCanvas::TextOut???

0

Może być i TextOut, też nie działa... ;)

Chodzi o to, że na 2 panelu status bara chcę umieścić obrazek i wyświetlić obok tekst. Obraz ładuję z ImageList, odwołuję się do Canvasa i rysuję na 2 panelu - wszystko jest OK. Ale gdy w następnej linii chcę wyrysować tekst, to nie pojawia się już on na panelu, a według wszelkich danych powinien.

TextOutA pojawiło się zamiast TextOut, bo inspektor kodu podpowiedział tę właśnie funkcję, ale z tego, co wiem, parametry i działanie jest identyczne (testowałem na zwykłym Image i działa).

0

AAaaa chwila chwila. Przyjrzyj się:

pnlCanvas.Draw(Rect.Left, Rect.Top, Image);
pnlCanvas.TextOutA(10,2, "Przykładowy tekst");

współrzędne textu nie uwzględniają współrzędnych panela i stąd ten brak napisu. Zrób tak:

pnlCanvas.TextOutA(Rect.Left+10, Rect.Top+2, "Przykładowy tekst");

PS. Lubie tego typu błędy ;P

0

Pewnie, teraz działa :)

Ale się zakręciłem :) Męczyłem się z tym przez dwa dni :|

I znowu potwierdza się teoria, że osoba z zewnątrz szybciej dostrzeże błąd niż ten, kto bezpośrednio jest zaangażowany w jego eliminację...

Dzięki [browar]

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