Nadpisywanie komponentów

Nadpisywanie komponentów
m_Lesiu
  • Rejestracja:około 12 lat
  • Ostatnio:około 4 lata
  • Postów:138
0

Ostatnio często zdaza mi się, że muszę nadpisać komponent.
Wyczytałem, że tworzony komponent powinien dziedziczyć po klasie

Kopiuj
TCustomNadpisywanyKomponent;

a nie po

Kopiuj
TNadpisywanyKomponent;

w TNadpisywanyKomponent są w zasadzie same property.

zazwyczaj chciał bym, zeby mój komponent również miał te wszystkie property które ma Klasa TNadrzednyKomponent, więc po prostu kopiuje je wszystkie do mojej klasy dziedziczącej po TCustomNadpisywanyKomponent.

a Pytanie brzmi. czy można to zrobić jakoś bez kopiowania? tylko, ze by wskazać mojemu komponentowi, Ty weź i zrob takei property jak ma TNadpisywanyKomponent?


edytowany 1x, ostatnio: flowCRANE
abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:7 miesięcy
  • Postów:6610
0

ta, dziedziczyć po TNadpisywanyKomponent a nie po TCustomNadpisywanyKomponent


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:Tuchów
  • Postów:12167
0

Nie rozumiem w ogóle o co Ci chodzi... Zamiast wymyślać jakieś dziwne klasy podaj dokładne nazwy przykładowych klas do dziedziczenia i nazwy ich właściwości czy metod;

Poza tym komponentów się nie nadpisuje, tylko się po nich dziedziczy (czyli buduje nowe - rozszerzone - na podstawie innych) - nic nie jest nadpisywane (teoretycznie);

Podaj więc kod Twojego komponentu a coś więcej się napisze.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
m_Lesiu
  • Rejestracja:około 12 lat
  • Ostatnio:około 4 lata
  • Postów:138
0

w zasadzie kod nie ma tu nic do rzeczy. Po prostu chciałem usystematyzować wiedzę. Przeczytałen na forum, że jeśli chce zrobić Swoj komponent który miałby dziedziczyć po TEdit. To, że lepiej by było dziedziczyć po TCustomEdit. No z tym, że wtedy musze skopiować wszystkie property z klasy TEdit. Więc, czy jest sens dziedziczenia po TCustomach?


edytowany 2x, ostatnio: m_Lesiu
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:Tuchów
  • Postów:12167
1

Tak, bo masz zaimplementowaną jedynie podstawę kontrolki bez zbędnych pierdół (czyt. właściwości i zdarzeń), z których i tak nie skorzystasz; Więc jaki sens byłby dziedziczyć wszystko, skoro ani połowa tego nie jest Ci potrzebna?

Żeby dokładnie to stwierdzić - trzeaba by zobaczyć jak wygląda implementacja klasy np. TCustomEdit i TEdit i je porównać.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 2x, ostatnio: flowCRANE
abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:7 miesięcy
  • Postów:6610
1
furious programming napisał(a):

Tak, bo masz zaimplementowaną jedynie podstawę kontrolki bez zbędnych pierdół (czyt. właściwości i zdarzeń), z których i tak nie skorzystasz; Więc jaki sens byłby dziedziczyć wszystko, skoro ani połowa tego nie jest Ci potrzebna?
Guzik prawda! Skąd Ty wiesz czy pytaczowi są potrzebne czy nie? Skoro ma taką potrzebę i "...zazwyczaj chciał bym, zeby mój komponent również miał te wszystkie property które ma Klasa ..." to znaczy, że pytaczowi są potrzebne. Głupotą jest dziedziczyć po TCustomControl tylko po to aby nie dziedziczyć po TControl i we własnej kontrolce robić kopiuj-wklej właściwości z TControl. Dziedziczenie po TCustomCustom ma sens jedynie wtedy, kiedy chcemy UKRYĆ (a właściwie nie udostępniać) właściwości publiczne klasy TControl

  • za TControl i TCustomControl wstawiamy odpowiednie kontrolki, np TEdit i TCustomEdit

Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
flowCRANE
Masz plusik za łatwiejsze w zrozumieniu wyjaśnienie ;)
m_Lesiu
  • Rejestracja:około 12 lat
  • Ostatnio:około 4 lata
  • Postów:138
0

Pytacz sam nie wie czy są mu potrzebne wszystkie^^, ale skoro ktoś mądry kiedyś je stworzył to mysli, ze warto by je w razie czego mieć:D

ok. Czyli podsumowując. Nie będzie problemu z dostępem to pól i metod zdefiniowanych w tCustomControl gdy moj komponent będzie dziedziczył po TControl?

a dziedzidzenie po TCustomControl umozliwia jedynie nie dodanie któregoś property do mojego komonentu.


edytowany 1x, ostatnio: m_Lesiu
abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:7 miesięcy
  • Postów:6610
0

jak sam zauważyłeś TXXX różni się praktycznie tylko jednym od TCustomXXX - udostępnia właściwości opublikowane (published). Z punktu widzenia programowania nie ma znaczenia po czym dziedziczysz. Jeśli chcesz dodać jedną (albo i sto) właściwość i jednocześnie mieć wszystkie właściwości bazowe to dziedzicz po TXXX. Jeśli chcesz czegoś nie pokazywać to dziedzicz po TCustomXXX i pokaż tylko to co chcesz.

Jeszcze taka uwaga - w nowych delphi jest coś takiego jak Helper - http://docwiki.embarcadero.com/RADStudio/XE4/en/Class_and_Record_Helpers


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:Tuchów
  • Postów:12167
0

@abrakadaber - niejasno się wyraziłem, ale chodziło mi dokładnie o to, o czym napisałeś, tyle że użyłem innych (widać niezrozumiałych/złych) słów:

Furious Programming napisał(a)

bo masz zaimplementowaną jedynie podstawę kontrolki bez zbędnych pierdół (czyt. właściwości i zdarzeń)

co odpowiada Twoim słowom:

abrakadaber napisał(a)

Dziedziczenie po TCustomCustom ma sens jedynie wtedy, kiedy chcemy UKRYĆ (a właściwie nie udostępniać) właściwości publiczne klasy TControl

Chodziło mi o to, że udostępnione i widoczne są jedynie podstawowe właściwości i żadnych zdarzeń (dziedzicząc po Customach) - można to zobaczyć w inspektorze obiektów; No i tak jak piszesz - przepisywanie wszystkiego nie ma sensu;

Reszta oczywiście jest, tyle że niewidoczna i można ją dodać, ale ich obsługa jest już zaimplementowana.


Przykładowo mamy komponent zbudowany na podstawie TCheckBox, który udostępnia wszystkie właściwości i zdarzenia klasy TCheckBox; Ale jeśli dziedziczymy po TCustomCheckBox to mamy postawowe właściwości i żadnych zdarzeń; Aby je dodać wystarczy uzupełnić odpowiednią sekcję kl;asy;

Np. dodajemy właściwość Color:

Kopiuj
type
  TFooCheckBox = class(TCustomCheckBox)
  {...}
  published
    property Color;
  end;

Po kompilacji mamy dostępną właściwość Color (do modyfikacji np. w inspektorze obiektów); Jej obsługa jest już zaimplementowana, więc po modyfikacji tej właściwości kontrolka przyjmie inny kolor.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 5x, ostatnio: flowCRANE
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 4 godziny
1

Jeśli chcesz, by twoja kontrolka miała wszystkie property które ma oryginał,dziedziczysz po TNadpisywanyKomponent.
Jeśli chcesz jakieś właściwości ukryć, bo nie mają w twoim przypadku sensu, dziedziczysz po TCustomNadpisywanyKomponent i udostępniasz tylko te property, które trzeba.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)