AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Komponentenentwicklung (runder Button)

Ein Thema von DeddyH · begonnen am 26. Jan 2008 · letzter Beitrag vom 27. Jan 2008
Antwort Antwort
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#1

Komponentenentwicklung (runder Button)

  Alt 26. Jan 2008, 21:12
Hallöle,

angeregt durch Hansas kürzlichen Thread bzgl. eines runden Buttons habe ich mir Gedanken gemacht, wie man so etwas möglichst einfach, aber dennoch optisch ansprechend umsetzen könnte. Hier fiel mir GDI+ ein (eine API dazu gibt es unter http://www.progdigy.com/modules.php?name=gdiplus, ich bin ja faul ). Nun ist mein Gedankengang folgender:
- beim Erzeugen der Kompo werden 2 Bitmaps angelegt (Up und Down)
- wenn sich Größe oder Farben ändern, werden diese mit Hilfe von GDI+ neu gezeichnet (Farbverlauf und Antialiasing)
- OnPaint des Buttons wird je nach Zustand der linken Maustaste die eine oder andere Bitmap per BitBt als Hintergrund gezeichnet
- um den klickbaren Bereich einzuschränken, wird eine Region verwendet
- ist der Button "gedrückt", wird die Caption leicht rechts unten versetzt gezeichnet, ansonsten zentriert

Denke ich hier korrekt oder könnte man das noch optimieren? Mir ist klar, dass GDI+ auf dem Zielrechner vorhanden sein muss, aber die entsprechende DLL ist ja frei verfügbar. Ich bin mir auch nicht sicher, ob ich das jemals produktiv einsetzen werde, ich sehe das eher als Machbarkeitsstudie.

Danke schon jetzt für alle Vorschläge und Anregungen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2

Re: Komponentenentwicklung (runder Button)

  Alt 27. Jan 2008, 02:04
Du denkst also mit ? Stand der Dinge ist folgender : soll der Bereich tatsächlich exakt anklickbar sein, dann kommt man um Regions kaum rum, trotz Alzaimar. Zeichnet man etwas rundes, dann gibt es bei Verwendung von TImage etc. auch Ecken. Das wäre dann eben nicht 1:1. Solcherlei Effekte unsichtbar zu machen, bedeutet : selber mit RoundRect usw., alles zu zeichnen. Das widerum hat zur Folge : die Pixel-Struktur. Die schaffe ich nun aus der Welt, indem doch Grafiken verwendet werden. Die sind dann schön rund (ohne Pixel) und ich muss sie selber anfertigen. Dann noch pro Button zwei für jeweils Down oder Up. Das ist viel Arbeit für einen optischen Effekt. Ist das auch soweit fertig, dann braucht man irgendwann große Schriften und die Buttons sind schön rund, aber die Schriften sind pixelig. Und jetzt ? Ausweg wäre, Komponente zuzukaufen. Die sind aber meistens überdimensioniert, zumindest für diesen Zweck. Oft auch schlecht kommentiert. Bei 3-Zeilen Prozedur steht da beispielsweise hinter dem end; dass das zu dem begin kurz vorher gehört. 8) Von der Programm-Logik ist nicht mal was kommentiert.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Komponentenentwicklung (runder Button)

  Alt 27. Jan 2008, 09:40
Zitat von Hansa:
soll der Bereich tatsächlich exakt anklickbar sein, dann kommt man um Regions kaum rum, trotz Alzaimar. Zeichnet man etwas rundes, dann gibt es bei Verwendung von TImage etc. auch Ecken. Das wäre dann eben nicht 1:1.
Man könnte noch ein TBitmap in ein Image laden und dann bmp.TransparentColor abfragen. Also wenn der Pixel unter dem Kursor <> TransparentColor dann wird ein onClick Ereignis ausgelöst. Dazu muss man allerdings die Bildvorlage vorher dementsprechend präparieren.

Die Buttons von Hansa sehen doch ziemlich 08/15 mäßig aus.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Komponentenentwicklung (runder Button)

  Alt 27. Jan 2008, 11:01
Zitat von Hansa:
Du denkst also mit ? Stand der Dinge ist folgender : soll der Bereich tatsächlich exakt anklickbar sein, dann kommt man um Regions kaum rum, trotz Alzaimar. .
Doch. Man kommt um Regions herum, aber das willst Du ja nicht hören. Das geht mit einer simplen TImage-Komponente und mindestens drei Bitmaps, sagen wir: Vier, damit man einen 'disabled' Buttoni auch darstellen kann.

1. Bitmap: Standard (Buttoni oben)
2. Bitmap: Gedrückt
3. Bitmap: Disabled
4. Bitmap: Maske (Schwarz = klickbar, weiss=außerhalb des Buttoni)

Das ist dann eine allgemeine Button-Komponente, die man mit geeigneten Bitmaps zu einem 'runden' Buttoni umformen kann. Das kann man natürlich noch erweitern, um 'MouseOver' Bitmaps, oder Animationen beim Drücken etc.

DeddyH's Ansatz, das zur Laufzeit zu rendern, ist natürlich insofern viel besser, weil man die Farben (Hinter- und Vordergrund) zur Laufzeit ändern kann. Hinsichtlich der Hintergrundfarbe ginge das natürlich mit einem Alpha-Kanal, den man als 5.Bitmap noch speichert.

Etwas zur Laufzeit zu rendern ist einfach, aber so, das es richtig gut aussieht, ist imho nicht trivial.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Komponentenentwicklung (runder Button)

  Alt 27. Jan 2008, 11:35
Zitat von Hansa:
, dann braucht man irgendwann große Schriften und die Buttons sind schön rund, aber die Schriften sind pixelig.
Die kann man aber auch per GDI+ zeichnen, dann ist nix pixelig
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz