Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Design (oder fast) Komponenten zeichnen - Aber wie? (https://www.delphipraxis.net/8776-design-oder-fast-komponenten-zeichnen-aber-wie.html)

Stanlay Hanks 11. Sep 2003 19:10


Design (oder fast) Komponenten zeichnen - Aber wie?
 
Hallo zusammen.
In letzter Zeit hab ich im Forum immer wieder irgendwas zu Themen wie "Design Komponenten gesucht" oder solchen Sachen gelesen. Da bin ich auf die Idee gekommen, auch mal Design Komponenten zu machen oder es zumindest mal als Herausforderung (ja, für mich ist das eine...) zu versuchen. Allerdings hab ich da im Forum ehrlich gesagt nix richtiges gefunden. Ich hab zwar Sakuras Komponenten Tutorial verschlungen, aber das beschäftigt sich bis jetzt leider nur mit non visual Komponenten. Meine Frage wäre nun, wie kann ich eigene Komponenten (die z.B. von TButton abgeleitet sind) zeichnen. Kann/muss ich da irgendwie Bitmaps oder andere Bilder verwenden? Ich habe von diesem Thema wirklich keine Ahnung. Was ich mir noch vorstellen könnte, wäre, dass ich die Paint Methode irgendwie überschreiben muss...
Ich wäre dankbar für jedes Tutorial, dass sich mit diesem Thema beschäftigt. Was mir glaube ich auch helfen würde, wäre irgendein kommentierter Code (Natürlich soll sich jetzt keiner hinsetzen und extra einen schreiben! :wink:).

Danke schon mal, Stanlay :hi:

Meflin 11. Sep 2003 19:29

Re: Design (oder fast) Komponenten zeichnen - Aber wie?
 
hey daddy :wink: ,
würd mich auch mal stark interessieren!

hoofe da weis einer was!

*MFG*

Stanlay Hanks 11. Sep 2003 19:37

Re: Design (oder fast) Komponenten zeichnen - Aber wie?
 
Ich hab mir auch schon mal Source dazu angeschaut... zum beispiel von einem TFlatButton (gibts kostenlos bei torry glaub ich). Und mein Problem ist schlicht und ergreifend: Ich verstehe den Source nicht ausreichend, um ihn in anderer Form umzusetzen. :(

Wie gesagt, ich bin dankbar für jeden Ansatz :)

Man liest sich, Stanlay :hi:

phlux 11. Sep 2003 19:38

Re: Design (oder fast) Komponenten zeichnen - Aber wie?
 
Du musst die Paint Proceduren überschreiben und dann wenn der normale Button gezeichnet werden sollte deinen Code da reinpacken, allerdings musst du dabei beachten das du die OnMouseDown usw. Events auch noch beachtest und dort deinen Code reinschreibst wie sich der Button (z.B.) verhält wenn man auf ihn drückt.

Stanlay Hanks 11. Sep 2003 19:40

Re: Design (oder fast) Komponenten zeichnen - Aber wie?
 
Hallo Phlux. Danke schon mal. Das ich die Paint Procedur überschreiben muss, hab ich mir schon fast gedacht. Aber wie kann ich denn überhaupt irgendwas zeichnen? Gibts da so ne Art "Canvas"? Ich hab da überhaupt keinen anhaltspunkt auf was ich zeichnen soll..:(

phlux 11. Sep 2003 19:45

Re: Design (oder fast) Komponenten zeichnen - Aber wie?
 
Hmm Canvas gibt es glaub ich immer, ist nur die Frage wie du da dran kommst...
Ein einfaches Beispiel findest du auch auf meiner Homepage, da kannst du dir mal das TGradientPanel angucken, das is recht simpel gestrickt ;)

Stanlay Hanks 11. Sep 2003 19:50

Re: Design (oder fast) Komponenten zeichnen - Aber wie?
 
Danke! Werd ich mir gleich mal anschauen! Ich meld mich dann, wenn ich fragen hab. :wink:

phlux 11. Sep 2003 19:57

Re: Design (oder fast) Komponenten zeichnen - Aber wie?
 
Guck dir einfach genug beispiele an empfehlen kann ich auch noch www.shagrouni.com
Such einfach mal nach Sources wo Buttons komplett farbverändert werden und spiel mit dem Quellcode etwas rum.

Stanlay Hanks 11. Sep 2003 20:31

Re: Design (oder fast) Komponenten zeichnen - Aber wie?
 
Danke erstmal! Dank deines Beispiels mit deinem Gradient Panel hab ich kapiert, dass ich da, wie auf einem normalen Panel auch drauf zeichnen kann. Allerdings könnte ich mir vorstellen, dass das bei Buttons etwas schwieriger wird. Ich hab da noch irgendwas im Hinterkopf, dass die von windows gezeichnet werden oder so... naja. wird schon schief gehen :wink: Wenn ich noch mit etwas nicht zurecht komme, dann frag ich einfach hier nochmal. Aber ich werd mich bemühen, so viel wie möglich durch eigenarbeit zu lernen.

Man liest sich, Stanlay :hi:

phlux 11. Sep 2003 21:45

Re: Design (oder fast) Komponenten zeichnen - Aber wie?
 
Klar :) kein problem, was mir nur noch eingefallen ist, das du wenn du eine grafische Kompo von TControl ableitest anders vorgehen musst als bei dem Panel, aber so lange du dich jetzt erstmal nur mit Ableitungen bestehender Kompos beschäftigst ist das Panel Beispiel ganz passend :mrgreen:

Stanlay Hanks 12. Sep 2003 14:33

Re: Design (oder fast) Komponenten zeichnen - Aber wie?
 
Ja, da hast du wohl recht. Ich fang erstmal ganz unten an...Das wird mit der Zeit schon werden, hoffe ich.

Aber ich hätte zum Zeichnen noch eine Frage (Das gehört zu diesem Thema, deswegen mache ich keinen neuens Thread auf). Wenn ich sagen wir mal, das Panel mit abgerundeten Ecken dargestellt hab möchte, wie kann ich das machen. Da reicht ja zeichnen nicht mehr, oder?

Man liest sich, Stanlay :hi:

phlux 12. Sep 2003 14:38

Re: Design (oder fast) Komponenten zeichnen - Aber wie?
 
hmm du musst dann einfach nur den Canvas des Panels einmal löschen und dann mit RoundRect (bin mir nicht sicher ob die Fkt. so hieß, such einfach mal nach Rect in der OH) ein abgerundetes Rechteckt anstelle der normalen Form zeichnen, aber wenn du nen abgerundetes Panel zeichnen willst rate ich dir doch vom Typ TCustomControl abzuleiten, da musst dann dann zwar auch Text usw. per Hand ausgeben ist aber leichter finde ich ;)

Stanlay Hanks 12. Sep 2003 14:41

Re: Design (oder fast) Komponenten zeichnen - Aber wie?
 
Danke schon mal für den Tip mit dem RoundRect. Ich werde mir das gleich mal anschauen. Aber das mit dem Text verstehe ich nicht. ich muss doch den Text sowieso manuell über TextOut(...) ausgeben. Oder meinst du was anderes? :oops:

Man liest sich, Stanlay :hi:

Stanlay Hanks 12. Sep 2003 15:08

Re: Design (oder fast) Komponenten zeichnen - Aber wie?
 
Liste der Anhänge anzeigen (Anzahl: 1)
:( Hallo. Ich hab das jetzt ausprobiert mit dem RoundRect. Das Problem ist nur: wenn ich diese Komponente dann verwende, bekomme ich nichts anderes, als ein Rechteck, in dem ein abgerundetes Rechteck gezeichnet ist...was ich aber irgendwie auch nicht anders erwartet habe, weil ich sicher war, dass ich wieder mal was falsch verstanden und gemacht hab. :oops:

Ich hab da folgende Paint Prozedur:

Delphi-Quellcode:
procedure TTestRoundPanel.Paint;
begin
  inherited;
 Canvas.Brush.Color := Self.Color;
 Canvas.Pen.Color  := Self.BorderColor;
 Canvas.RoundRect(0,0,Self.Width,Self.Height,34,34);
end;
Das ergibt dann, wenn ich die Komponente installiere und auf Form ziehe, so etwas, wie im Anhang.

Ich möchte aber nun, dass der Bereich außerhalb des abgerundeten Vierecks erst gar nicht angezeigt wird. Denn wenn ich zum Beispiel ein Bild als Hintergrund nehme, sieht man ja immer, dass mein Panel gar nicht abgerundet, sondern eigentlich viereckig ist.

Kann ich das irgendwie machen, oder muss ich da eine ganz neue Komponente ableiten?

[Edit]:wall: Hab vergessen, das bild anzuhängen :wall:[/Edit]

phlux 12. Sep 2003 15:41

Re: Design (oder fast) Komponenten zeichnen - Aber wie?
 
hmm hast du den Anhang vergessen??

Also ich denke für das was du versuchst muss man wohl ne eigene Kompo erstellen, bin mir aber im Moment nicht sicher was du meinst...

phlux 12. Sep 2003 15:43

Re: Design (oder fast) Komponenten zeichnen - Aber wie?
 
hmm entweder versuchst du die Farbe des Panels zuerst auf clNone zu setzen und zeichnest dann das Rechteckt und füllst es mit Farbe oder du machst ne Zusatzproperty wo du dann die Hintergrundfarbe angibst.

Stanlay Hanks 12. Sep 2003 15:45

Re: Design (oder fast) Komponenten zeichnen - Aber wie?
 
achso...heißt clnone dann praktisch, dass der hintergrund druchscheint, oder?

phlux 12. Sep 2003 15:47

Re: Design (oder fast) Komponenten zeichnen - Aber wie?
 
Ja, du gibst ja keine Farbe an cl None (= Keine, nichts)

Stanlay Hanks 12. Sep 2003 15:50

Re: Design (oder fast) Komponenten zeichnen - Aber wie?
 
Danke für die Erklährung. Eigentlich is der Name ja selbsterklährend...aber ich frag lieber nochmal nach. :oops:

Danke schon mal. :hello: Ich bin sicher, das war nicht meine letzte Frage zu diesem Thema :(

Man liest sich, Stanlay :hi:

Niko 12. Sep 2003 16:30

Re: Design (oder fast) Komponenten zeichnen - Aber wie?
 
Zitat:

Zitat von phlux
cl None (= Keine, nichts)

Das ist richtig, heißt in dem Fall aber, dass das Panel ein durchsichtiges Rechteck auf sein Canvas zeichnet. Der wurde von Windows bereits weiß gefüllt, was zu einem weißen Rechteck führt, das ein Rechteck mit abgerundeten Ecken enthält.
Um das Weiß-Füllen zu verhindern, müsste man aus der Eigenschaft ControlStyle des Panels den Wert csOpaque entfernen. Das funktioniert bei einem Panel (im Gegensatz zu einem Label) aber leider nicht. (Warum würde mich auch interessieren.)
Eventuell lässt sich ein Panel mit abgerundeten Ecken genauso erstellen, wie es hier für ein Fenster beschrieben ist.

neolithos 12. Sep 2003 16:48

Re: Design (oder fast) Komponenten zeichnen - Aber wie?
 
Ich will ja nicht mit Kanonen auf Spatzen schießen. Aber...

SetWindowRgn

Und

Region Functions

CombineRgn
CreateEllipticRgn
CreateEllipticRgnIndirect
CreatePolygonRgn
CreatePolyPolygonRgn
CreateRectRgn
CreateRectRgnIndirect
CreateRoundRectRgn
ExtCreateRegion
GetRgnBox
InvertRgn
OffsetRgn
PaintRgn
PtInRegion
RectInRegion
SetRectRgn

sollte auch weiter helfen.

Stanlay Hanks 12. Sep 2003 16:52

Re: Design (oder fast) Komponenten zeichnen - Aber wie?
 
Hallo! Ich habe grade festgestellt, dass das statt durchsichtig schwarz wird :(

Aber danke für die zusätzlichen Stichwörter. ICh werd mich demnächst mal damit auseinandersetzen.

Man liest sich, Stanlay :hi:

mirage228 12. Sep 2003 18:23

Re: Design (oder fast) Komponenten zeichnen - Aber wie?
 
vielleicht auch das "inherited" in der prozedur schuld, die einfach das normale panel zeichnet und seine prozedur zeichnet da dann ein rundes rechteck hinterher?

mfG
mirage228

phlux 12. Sep 2003 18:47

Re: Design (oder fast) Komponenten zeichnen - Aber wie?
 
Liste der Anhänge anzeigen (Anzahl: 2)
Nein an dem inherited liegt es nicht, es liegt wohl daran das er als Vorfahre das TPanel gewählt hat (um die Funktionen zu wahren ;) ) ich habe hier jetzt grad 2 Kompos nachgeschrieben, einmal die TRoundPanel basierend auf einem TCustomControl (ohne die Panel Eigenschaften) und die TRoundPanelEx (mit Panel Eigenschaften) allerdings noch mit den Punkten, bin mir aber sicher das ich die noch im Verlauf des Tages wegkriege ;)

Edit: So wie gesagt habe es hinbekommen, musste dabei auf die Farbe des Parents zurückgreifen damit die Punkte verschwinden. Die Punkte verschwinden auch erst wenn man die Kompo durch Invalidate neu zeichnen lässt. Beim Start des Progs braucht man dies jedoch nicht :mrgreen:
Nur wenn man nachträglich die Farbe der Form ändert muss man die Kompo durch Aufruf von invalidate neu zeichnen lassen.

Stanlay Hanks 13. Sep 2003 11:28

Re: Design (oder fast) Komponenten zeichnen - Aber wie?
 
Vielen Dank! Ich werde mir die Units mal anschauen und versuchen, sie zu verstehen :wink:
Danke nochmal :hello:
Man liest sich, Stanlay :hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:27 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