Radio Button

dział ogólny

Radio Button

Nowy postprzez Harton » poniedziałek, 25 maja 2009, 18:25

Chciałbym napisać klasę, która będzie odwzorowywała obiekty radio buttons. Jednak nie mam pojęcia jak można ją zaimplementować. Mam już klasy CheckBox, Button i chciałem coś z tym zrobić. Jednak zawsze wychodził mi jakiś kod spaghetti a nie ładna klasa. Prosiłbym o rady.
Avatar użytkownika
Harton
Bladawiec
Bladawiec
 
Posty: 3
Dołączył(a): poniedziałek, 25 maja 2009, 18:00
Podziękował : 0
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Radio Button

Nowy postprzez polymorphism » poniedziałek, 25 maja 2009, 18:40

A co rozumiesz przez "odwzorowywała"?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    NieznanyNieznana

Re: Radio Button

Nowy postprzez Harton » poniedziałek, 25 maja 2009, 18:57

No po prostu chodziło mi o to żeby działała jak radio button. :)
Avatar użytkownika
Harton
Bladawiec
Bladawiec
 
Posty: 3
Dołączył(a): poniedziałek, 25 maja 2009, 18:00
Podziękował : 0
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Radio Button

Nowy postprzez Cyfrowy Baron » poniedziałek, 25 maja 2009, 19:02

Przede wszystkim klasa TRadioButton to element interfejsu API i tam są zdefiowane wszystkie właściwości tegoż obiektu - to tak na marginesie.

Jakiej dokładnie pomocy oczekujesz? Czy masz jakąś wiedzę o tworzeniu komponentów? Czy chcesz stworzyć dokładnie taki sam obiekt TRadioButton jak ten już istniejący, jeżeli nie to czym ma się różnić? Czy chcesz stworzyć nową klasę TRadioButton od podstaw w oparciu o klasę TComponent, czy też w oparciu o klasę TRadioButton i tylko chcesz uzupełnić komponent o nowe właściwości - jakie, a może chcesz wogóle stworzyć nową klasę w oparciu o biblioteki MFC?

Właściwie to nie wiem co ty właściwie chcesz! :?
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
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
    NieznanyNieznana

Re: Radio Button

Nowy postprzez Harton » poniedziałek, 25 maja 2009, 19:09

Przepraszam! Faktycznie nie opisałem dokładnie o co mi chodzi... Chciałbym prosić o wyjaśnienie działania (od strony implementacji) komponentu RadioButton. Tylko tyle albo aż tyle. Dziękuje!
Avatar użytkownika
Harton
Bladawiec
Bladawiec
 
Posty: 3
Dołączył(a): poniedziałek, 25 maja 2009, 18:00
Podziękował : 0
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Radio Button

Nowy postprzez Cyfrowy Baron » poniedziałek, 25 maja 2009, 19:28

Jakiej implementacji, przecież na samym wstępie wspomniałem, że ten komponent to element interfejsu API, więc cała implementacja tego komponentu zawiera się w systemie operacyjnym, czyli w API systemu. To tak samo jak z komponentem Button, jak mam ci wyjaśnić implementację komponentu, którego biblioteki zawierają tylko odwołania do systemu.
Inna sprawa, żeby opisać implementację jakiegoś obiektu należałoby dokładnie przeanalizować cały kod takiego obiektu, a trudno analizować kod, którego się samemu nie napisało.

Co wiadomo o TRadioButton, ano to, że dziedziczy po klasie TButtonControl, wiadomo również że obiekt TButton również dziedziczy po klasie TButtonControl. Chcesz stworzyć własny RadioButton - najprościej będzie zrobić go właśnie w oparciu o klasę TButtonControl, a cała reszta jaką dodasz do komponentu zależy od Twojej inwencji. Gdybym miał wyjaśniać implementację TRadioButton, to byłoby to równoznaczne z odtworzeniem kompletnego kodu tego obiektu, czyli notabene napisanie komponentu od podstaw i dodatkowo opisanie wszystkiego co się w tym komponencie znajduje. Chyba nie oczekujesz, że ktoś poda Tobie gotowe rozwiązanie na tacy i stworzy ten komponent za Ciebie.

Komponent RadiButton to etykieta (właściwość Caption), czyli coś w rodzaju TLabel + grafika w postaci kółka, jedno kliknięcie zaznacza kółko, czyli wymienia grafikę, drugie odznacza. To kółko to może być bitmapa wczytywana z zasobów, lub też może być to rysunek kółka na płótnie TCanvas. Definiujesz w komponencie płótno TCanvas i przypisujesz mu uchwyt do obiektu na którym zostanie umieszczone, czyli na którym grafika zostanie odrysowana. Etytkieta to również może być napis na płótnie TCanvas.

Tak więc tworząc własny obiekt typu TRadioButton możesz zacząć od klasy TButtonControl, albo też możesz pojść zupełnie inną drogą i bazować np. na klasie TImage lub TPaintBox odrysowując wszystko na płótnie TCanvas tych obiektów.

Jako przykład niech Tobie posłuży komponent TPicButton który ja stworzyłem (do pobrania w serwisie Cyfrowy Baron). Stworzyłem przycisk, który bazuje na klasie TPainBox i w ten sposób stworzyłem przycisk. Ten komponent bez większego trudu można by przerobić na coś w rodzaju RadioButton, co więcej jeżeli ustawisz właściwość Status tego komponentu na true, to będzie się ona zachowywał właśnie jak RadioButton, chociaż tak nie wygląda.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
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
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

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

cron