![]() |
Button-Komponente erstellen: Oberfläche aus Datei laden
Hallo,
ich habe mich in die Komponentenentwicklung gestürzt, aber es hapert leider an ziemlich grundlegenden Dingen. :( Mein Ziel: Meine Komponente soll zur Laufzeit ähnliche Eigenschaften besitzen, wie ein TButton. Da die Standard-Buttons aber so schnöde sind, möchte ich zur Entwicklungszeit von der Festplatte drei *.bmp-Dateien laden können. Jeweils ein BMP, das im "Normal-Zustand" des Buttons zu sehen sein soll, eines für "onMouseDown" und eines für den Zustand "enabled = false". Meine bisherigen Ideen/Versuche: Da ich im Web keine Komponente finden konnte, die auch nur annähernd meinen Ideen entsprach, habe ich mir überlegt, die Komponente TBmpButton zu erstellen. Dafür habe ich mir dann via Online-Hilfe drei Möglichkeiten überlegt, wie ich mein Ziel am effizientesten erreichen könnte:
Meine (wichtigsten) Fragen:
Ich freue mich schon im Voraus über eure Hilfe, und wünsche noch einen schönen Abend. hanselmansel |
Re: Button-Komponente erstellen: Oberfläche aus Datei laden
also du könntest schon von TCustomControl bzw TGraphicControl ableiten. Und abstrakte Methoden musst du da gar keine neu schreiben wenn du die nicht brauchst. In deinem Fall wäre es die Paint-Methode welche du überschreiben müsstest. Zu deinen 6 Bildern. Üblicherweise wird es gemacht das alles in einem Bild ist und das ganze in Glyphs geteilt wird. Also deine 3 Stati liegen alle nebeneinander in einem Bild. Diese müsstest du dann je nachdem halt heraus-"schneiden". Natürlich hällt dich auch niemand davon ab 6 einzelne Bilder zu nehmen. Am einfachsten ist es da das du 6 properties vom Typ TBitmap nimmst.
|
Re: Button-Komponente erstellen: Oberfläche aus Datei laden
Oups... mit den "6 Bildern" habe ich mich unklar ausgedrückt! :oops:
Auf die Zeichenfläche des fertigen Buttons soll immer nur ein Bild geladen werden. Was ich ansprechen wollte ist, dass ich z.B. mit 3DButton Creator Gold einen "Beenden" und einen "Laden" Button zeichne. Da ich für jeden Button drei Bitmaps erstellen würde, komme ich auf die Zahl 6. Es geht mir nur darum, dass ich im fertigen Programm dann auch einen Beenden und einen Laden Button haben kann, und nicht beide blöderweise das gleiche Bild anzeigen. :!: Ich setz' mich gleich mal dran, und versuch mich mit TCustomControl. :coder: (Die fertige Komponente soll ja auch den Fokus erhalten können.) Ich melde mich dann nochmal, wenn ich auf weitere Probleme treffe. (Und ich werde auf sie treffen! :? ) Danke für die schnelle Antwort! :kiss: |
Re: Button-Komponente erstellen: Oberfläche aus Datei laden
naja, wenn du ein Bitmapproperty machst (mit den verschiedenen Glyphs (also die 3 Stati in einem Bild nebeneinander)) oder eben mehre Bitmapproperties dann ist es auch möglich bei den Komponenten später das Bild zu wechseln bzw. überhaupt erstmal eines zu zuweisen.
|
Re: Button-Komponente erstellen: Oberfläche aus Datei laden
Liste der Anhänge anzeigen (Anzahl: 1)
So, ich habe mich mal an die Programmierung der Komponente gegeben, und auch (wie ich finde) schon einige kleine Erfolge erzielen können.
Delphi-Quellcode:
Ich bin nun allerdings an einige Probleme gestoßen, zu denen ich von euch mal den einen oder anderen Wink mit dem Zaunpfahl gebrauchen könnte:
unit MyButtons;
interface uses SysUtils, Classes, Controls, Graphics; type Wechselbutton = class(TCustomControl) private { Private-Deklarationen } protected { Protected-Deklarationen } Procedure Paint; override; public { Public-Deklarationen } published { Published-Deklarationen } Procedure LoadImg_normal(Pfad: String); Procedure LoadImg_MouseDown(Pfad: String); Procedure LoadImg_disabled(Pfad: String); end; procedure Register; var Img_normal :TBitmap; Img_MouseDown :TBitmap; Img_disabled :TBitmap; b_Enabled :Boolean; b_MouseDown :Boolean; implementation procedure Wechselbutton.Paint; begin If b_Enabled then Begin If b_MouseDown then Begin {Width := Img_MouseDown.Width; Height := Img_MouseDown.Height; } Canvas.Draw(0,0,Img_MouseDown); End Else Begin {Width := Img_normal.Width; Height := Img_normal.Height;} Canvas.Draw(0,0,Img_normal); End; End Else Begin {Width := Img_disabled.Width; Height := Img_disabled.Height;} Canvas.Draw(0,0,Img_disabled); End; end; procedure Wechselbutton.LoadImg_normal(Pfad :String); begin Img_normal := TBitmap.Create; try Img_normal.LoadFromFile(Pfad); except Img_normal.Free; end; end; Procedure Wechselbutton.LoadImg_MouseDown(Pfad: String); begin Img_MouseDown := TBitmap.Create; try Img_MouseDown.LoadFromFile(Pfad); except Img_MouseDown.Free; end; end; Procedure Wechselbutton.LoadImg_disabled(Pfad: String); begin Img_disabled := TBitmap.Create; try Img_disabled.LoadFromFile(Pfad); except Img_disabled.Free; end; end; //***************** //***************** //***************** procedure Register; begin RegisterComponents('Beispiele', [MyButtons.Wechselbutton]); end; end.
Ich denke, das war es erstmal... :| |
Re: Button-Komponente erstellen: Oberfläche aus Datei laden
Defaultwerte im Constructor setzen ;)
|
Re: Button-Komponente erstellen: Oberfläche aus Datei laden
Was spricht gegen eine TBitButton?
|
Re: Button-Komponente erstellen: Oberfläche aus Datei laden
@ jfheins: Danke! Hat super geklappt!
So, ich denke, die hier gestellten Fragen sind super beantwortet, und weitere fragen passen thematisch wohl eher in einen neuen Thread. MfG und vielen, vielen Dank, hanselmansel :love: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz