![]() |
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: |
Re: Design (oder fast) Komponenten zeichnen - Aber wie?
hey daddy :wink: ,
würd mich auch mal stark interessieren! hoofe da weis einer was! *MFG* |
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: |
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.
|
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..:(
|
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 ;) |
Re: Design (oder fast) Komponenten zeichnen - Aber wie?
Danke! Werd ich mir gleich mal anschauen! Ich meld mich dann, wenn ich fragen hab. :wink:
|
Re: Design (oder fast) Komponenten zeichnen - Aber wie?
Guck dir einfach genug beispiele an empfehlen kann ich auch noch
![]() Such einfach mal nach Sources wo Buttons komplett farbverändert werden und spiel mit dem Quellcode etwas rum. |
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: |
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:
|
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: |
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 ;)
|
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: |
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:
Das ergibt dann, wenn ich die Komponente installiere und auf Form ziehe, so etwas, wie im Anhang.
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; 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] |
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... |
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.
|
Re: Design (oder fast) Komponenten zeichnen - Aber wie?
achso...heißt clnone dann praktisch, dass der hintergrund druchscheint, oder?
|
Re: Design (oder fast) Komponenten zeichnen - Aber wie?
Ja, du gibst ja keine Farbe an cl None (= Keine, nichts)
|
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: |
Re: Design (oder fast) Komponenten zeichnen - Aber wie?
Zitat:
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 ![]() |
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. |
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: |
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 |
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. |
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 15:43 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