![]() |
Combobox Komponente Visualisieren!
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Freunde,
kann man in Delphi durch eine Komponentenerstellung folgende TCombobox erstellen? (s. Anhang) Und wenn ja, wie geht man da am besten vor? Wie man Komponente allgemein erstellt weiß ich. Danke im voraus Thiago :-D |
Re: Combobox Komponente Visualisieren!
Würde auch gern wissen wie man solch eine grafische Komponente erstellen kann.
|
Re: Combobox Komponente Visualisieren!
Entweder man nimmt fertige Komponenten oder man zeichnet den Inhalt selbst. Wie man eine Komponente erstellt, steht hier:
![]() Und eine kleine Scrollbar, die ich mal geschrieben habe, hier (allerdings ist der Code nicht so schön geschrieben :oops: ): ![]() |
Re: Combobox Komponente Visualisieren!
In den Tutorial ist nie richtig erklärt wie man den die grafische Oberfläche der Komponente erstellt. Wie macht man das denn?
Wenn ich jetzt einen Scrollbalken machen will, dann müsste ich ja zuerst ein Rechteck zeichnen und dann nochmal ein kleineres Rechteck da rein zeichnen und links und rechts einen Button um nach links und rechts zu scrollen. Wie geht das oder denk ich da ganz falsch??? Wo muss ich das zeichnen??? Danke schonmal für eure Hilfe =) Übrigens gefällt mir das ![]() |
Re: Combobox Komponente Visualisieren!
An welches Featur denkst du den?
|
Re: Combobox Komponente Visualisieren!
Wenn man eine eigene Komponente entwickelt, muss man die grafische Darstellung tatsächlich selbst erledigen. Jede visuelle Komponente hat eine Paint-Methode. Diese muss man implementieren und darin die ganze Darstellung machen. Die Deklaration müsste so aussehen:
procedure WMNCPaint (var Message: TMessage); message WM_NCPAINT; In dieser Methode musst Du dann den Canvas benutzen, um darauf zu zeichnen oder Bitmaps draufzukopieren. |
Re: Combobox Komponente Visualisieren!
Achso, also besteht sozusagen jede Komponente aus Bildern die auf dem Canvas des jeweiligen Objekts gezeichnet werden?
Dann muss ich also nur in Photoshop die einzelnen Bilder zeichnen und dann zusammenfügen? Gibt es dafür vielleicht irgendwo ein Beispiel? |
Re: Combobox Komponente Visualisieren!
Bei mir ist kein einziges Bild dabei, das ist alles direkt gezeichnet. ;-)
|
Re: Combobox Komponente Visualisieren!
Beispiele gibt es übrigens genug in der OpenSource-Sparte.
|
Re: Combobox Komponente Visualisieren!
Zitat:
Kannst du vielleicht nen kleinen Ausschnitt davon wie du das machst hier posten? Zitat:
|
Re: Combobox Komponente Visualisieren!
Schau dir mal die verschiedenen Skinning-Kompos an ( von den AlphaControls gibt es z.B. eine kostenlose lite Version)
|
Re: Combobox Komponente Visualisieren!
Wenn Du die Komponente einbindest und Dein Programm startest, solltest Du es sehen. Dazu muss die Komponente ja nicht installiert sein, Du kannst ja die Unit einbinden und die Instanz dynamisch erzeugen.
[edit] Nur ein Beispiel von vielen: ![]() |
Re: Combobox Komponente Visualisieren!
Okay, also ich hab jetzt versucht die Paint Prozedur zu erstellen, aber es gibt noch einen kleinen Fehler:
Code:
Hier unterkringelt er mir Canvas.Draw, weil das keine Attribute von Self sind. Was muss ich da machen, damit ich das Bitmap jetzt auch zeichnen kann? Außerdem soll die Standard ProgressBar Klasse, von welcher ich meine ProgressBar ableite, nicht gezeichnet werden. Wie mache ich das?
procedure PbProgressBar.Paint;
var BackgroundBuffer: TBitmap; begin BackgroundBuffer := TBitmap.Create; BackgroundBuffer.Width := 20; BackgroundBuffer.Height := 20; BackgroundBuffer.Canvas.Brush.Color := clRed; BackgroundBuffer.Canvas.Rectangle(0,0,20,20); Self.Canvas.Draw(0, 0, BackgroundBuffer); BackgroundBuffer.Free; end; |
Re: Combobox Komponente Visualisieren!
Leite nicht von TProgressbar ab, sondern von TCustomControl oder TGraphicControl (das dürfte hier die erste Wahl sein).
|
Re: Combobox Komponente Visualisieren!
Yeah, cool. Jetzt hab ich immerhin schon mal ein rotes Quadrat. Jetzt kann ich mich an die Arbeit machen. Dankeschön =)
Edit: Hab noch ne kleine Frage. Wie kann ich der Komponente jetzt noch ein Icon zuweisen? Unter Tools gibt es nämlich keinen Bildeditor. |
Re: Combobox Komponente Visualisieren!
Wie füge ich so eine Einstellung ein, damit der User im Objektinspektor eine Farbe auswählen kann aus so eine Drop Down Menü?
|
Re: Combobox Komponente Visualisieren!
Unter published eine Property Color vom Typ TColor deklarieren.
|
Re: Combobox Komponente Visualisieren!
Es sollen aber alle Farben aufgelistet sein, mit einem kleinen Quadrat davor, als Vorschau der Farbe.
|
Re: Combobox Komponente Visualisieren!
Das macht die IDE doch automatisch (zumindest die aktuelleren).
|
Re: Combobox Komponente Visualisieren!
Super, klappt =) Dankeschön. Hier bekommt man echt schnell Hilfe! :)
|
Re: Combobox Komponente Visualisieren!
Ich hab jetzt ein im MouseMove Ereignis ein Repaint eingebaut, damit die Komponente neu gezeichnet wird wenn was bewegt wird.
Im Paint Ereignis erstelle ich dann ein Bitmap mit TBitmap.Create und gebe es anschließend wieder mit TBitmap.Free frei. Durch die vielen Aufrufe im MouseMove Ereignis flackert die Komponente jetzt aber immer etwas weil so oft neu gezeichnet werden muss. Wie muss ich das anstellen, dass es nicht mehr flackert? |
Re: Combobox Komponente Visualisieren!
Hast du DoubleBuffered beim Formular / Panels / ... gesetzt?
|
Re: Combobox Komponente Visualisieren!
Jetzt schon, aber es hat sich nix geändert.
Vll zur Hilfe die Prozedur: Edit: Ok, es klappt. Hatte das DoubleBuffered in meiner Form und nicht im Create Ereignis der Komponente platziert. |
Re: Combobox Komponente Visualisieren!
Will jetzt das OnChange Event einbauen, aber es klappt nicht so richtig.
Er unterkringelt mir immer das "property OnChange" : Zitat:
Unter private:
Delphi-Quellcode:
Unter protected:
FOnChange : TNotifyEvent;
Delphi-Quellcode:
und in meiner Funktion:
property OnChange: TNotifyEvent read FOnChange write FOnChange;
Delphi-Quellcode:
if Assigned(FOnChange) then
FOnChange(Self); |
Re: Combobox Komponente Visualisieren!
Wieso ist die Property unter protected deklariert? Wenn sie über den OI zuzuweisen sein soll, muss sie nach published.
|
Re: Combobox Komponente Visualisieren!
Keine Ahnung, so wars auch im Beispiel von jaenicke.
Wenn ich es jetzt unter published mache klappts aber trotzdem nicht |
Re: Combobox Komponente Visualisieren!
Was heißt "klappt nicht"? Wird der Quelltext lediglich unterkringelt oder lässt er sich nicht kompilieren?
|
Re: Combobox Komponente Visualisieren!
Es lässt sich nicht kompilieren weil der Fehler hier erscheint:
Zitat:
|
Re: Combobox Komponente Visualisieren!
Wieso nicht TGraphicControl? Naja egal, zeig mal die Deklaration der Klasse (den interface-Teil).
|
Re: Combobox Komponente Visualisieren!
Weiß nich, du hast gesagt entweder TCustomControl oder TGraphicControl. Ich weiß sowieso nicht wirklich worin sich beide untershcieden.
Delphi-Quellcode:
unit ProgressBar1;
interface uses Windows, SysUtils, Classes, Controls, Graphics, ComCtrls; type PbProgressBar = class(TCustomControl) private { Private-Deklarationen } FWidth : Integer; FThickness : Integer; FControllerWidth : Integer; FControllerHeight : Integer; FLineColor1 : TColor; FLineColor2 : TColor; FControllerColor : TColor; FScrollPos : Integer; FCursor : TPoint; FRMouseDown : Boolean; FMin : Integer; FMax : Integer; FRelScrollPos : Integer; FOnChange : TNotifyEvent; procedure SetThickness(uValue: Integer); procedure SetLineColor(uValue: TColor); procedure SetControllerColor(uValue: TColor); procedure SetPosition(uValue: Integer); procedure SetRelScrollPos(uValue:Integer); protected { Protected-Deklarationen } procedure Paint; override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; public { Public-Deklarationen } constructor Create(aOwner: TComponent); override; destructor Destroy; override; published { Published-Deklarationen } property OnChange: TNotifyEvent read FOnChange write FOnChange; property Position: Integer read FRelScrollPos write SetRelScrollPos; property Wer: Integer read FWidth write FWidth; property Thickness: Integer read FThickness write SetThickness; property LineColor1: TColor read FLineColor1 write SetLineColor; property ControllerColor: TColor read FControllerColor write SetControllerColor; property OnMouseDown; property OnMouseMove; property OnMouseUp; property OnChange; end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [PbProgressBar]); end; |
Re: Combobox Komponente Visualisieren!
Unten gibt es noch einmal die OnChange-Property, die muss weg.
|
Re: Combobox Komponente Visualisieren!
Uh shit :x
Manchmal bin ich echt blind :? |
Re: Combobox Komponente Visualisieren!
Ich hab in meienr Form jetzt das OnChange Event eingebaut, aber jedes Mal wenn ich mein Programm starte wird das OnChange Event schon aufgerufen ohne dass ich etwas gemacht habe. Woran liegt das?
|
Re: Combobox Komponente Visualisieren!
Woher sollen wir das ohne Code denn wissen? :glaskugel: Wenn ich Dich richtig verstanden habe, löst Du das Event ja selbst aus, das scheint etwas zu oft zu geschehen.
|
Re: Combobox Komponente Visualisieren!
Ok, hab das Problem schon gefunden.
Und zwar hab ich eine Property erstellt die auf die Prozedur verweißt in der das OnChange Event ausgeführt wird. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:57 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-2025 by Thomas Breitkreuz