Podstawy tworzenia komponentów

0

Witam

Tworzę sobie podstawy pod większą aplikacyjkę. Jestem na etapie formatek bazowych (z których potem będzie wszystko dziedziczone). No i pomyślałem że fajnie będzie dodać swoje buttony zamiast standardowych (TButton, TSpeedBtn ...) więc stworzyłem sobie prostą klasę:

(pisane z pamięci)

TbButton = class(TButton)
pivate
fGlyph : TBitmap;
procedure SetGlyph(aValue : TBitmap);
published
property Glyph : TBitmap read fGlyph write SetGlyph;
public
constructor Create(aOwner : TComponent); override;
destructor Destroy; override;
end;

w konstruktorze jest

inherited Create(aOwner);
fGlyph := TBitmap.Create;

w destruktorze jest

fGlyph.Free;
inherited Destroy;

w SetGlyph jest

If Assigned(aValue) and (aValue <> fGlyph) then
fGlyph.Assign(aValue);

Generalnie na ten moment nie chce nic robić z tym buttonem, chce mieć na przyszłość furtkę żeby sobie zrobić gradientowe buttoniki, z obrazeczkami ... - wystarczy że zmienię klasę TbButton i bedzie super.

  1. No ale wczoraj chciałem sobie dla testów dodać właściwość Glyph. No zrobiłem to jak napisałem wyżej. Pojawiła się ona w inspektorze obiektów, co więcej jest button do wyboru bitmapy, pojawia się okienko jak przy TSpeedButton.Glyph, tylko po wybraniu jest AccessViolation :( Wie ktoś dlaczego ? Nie chcę na razie nic malować, po prostu chcę przechowywać bitmapę, dla testów.

  2. Czytałem żę właściwości w sekcji published są zawsze (prawie zawsze) strumieniowane do dfm'ek - czyli rozumiem że nie muszę się martwić o zapis tego obrazka ?

  3. Przeklikałem sobie wczoraj klasy z których się wywodzi TButton, nie znalazłem w żadnej z nich pola fCanvas. Czy to znaczy że on nie ma Canvas'a ? Czy ma domyślnie jako kontrolka okienkowa, i trzeba użyć GetDC ?

Aha. Nie chcę TSpeedButton'a, ani żadnych innych komponentów, chcę sobie zrobić swój. Jak ktoś uważa że wyważam otwarte drzwi - to może ma rację, ale ja się chce tego nauczyć i już !

Z góry dzięku za wskazówki.

0

Nie byłoby wygodniej dziedziczyć po TBitBtn? Z TButton może być problem bo jego wygląd ustala OS.

0
Oleksy_Adam napisał(a)

Nie byłoby wygodniej dziedziczyć po TBitBtn? Z TButton może być problem bo jego wygląd ustala OS.

Znaczy tak, chciałem z TButton bo jakoś tak jest że TButton ma taki ładny wygląd przy włączonych stylach w XP jak piszę dll'ki w Delphi 4 Std. Generalnie to chciałem osiągnąć niewiele: możliwość dołączenia bitmapki do buttona oraz ewentualnie pomalowania go w jakiś gradientowy sposób. Szukałem też jakichś przykładów już gotowych. Wczoraj się natchnąłem na TColorBtutton, no i się przeraziłem ile tam jest kodu. Myślałem że trzeba tylko przepisać metode do malowania, upublicznić metodę kolor i już. A tam taka masakra. Malowanie button'a od podstaw, w uwzględnieniem stanów, focusów itd. Ja generalnie się łudziłem że jak podziedzicze z TButton, to będe miał zaokrąglonego button'a z bitmapką - okazuje się że owszem, ale musiał bym sobie sam to namalować ; (

Ma ktoś jakieś rady ? bo ja zaczynam się skłaniać ku gotowcom ...

Mam jeszcze jednen pomysł, wyciągnę kod z Turbo Delphi i sprubuje go wcisnąć do Delphi 4, a nóż się uda (chociaż powątpiewam).

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