Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Die Form der Form... (https://www.delphipraxis.net/80158-die-form-der-form.html)

Prototypjack 3. Nov 2006 19:20


Die Form der Form...
 
Welch' ein poetischer Titel :mrgreen:

Moin erstmal,
Ich suche mich seit Tagen halbtot nach einer Möglichkeit meinen Formularen geeignete Formen zu verpassen (Fürs erste würden mir auch nur runde Ecken mit anpassbarem Radius reichen).

Nach zahlreichen Erkundigungen kam ich jedoch nicht zu einem Ergebnis doch zu vielen Techniken.
Da wären:
  • Aufwändige Blend-Geschichten --> Nur möglich unter WinXP/Win2K
  • TransparentColor --> Nur möglich unter WinXP/Win2K
  • Regions, absolut möglich aber ich kann die Form später per
    Delphi-Quellcode:
    .Perform(WM_SysCommand,$F008,0);
    nichtmehr vergrößern, da die Region ja irgendwann zu ende ist und dann ist Feierabend. Bei jedem Resize eine neue Region zu erstellen, die alte zu löschen und die neue zuzuweisen stelle ich mir dann bei einem weichen Drag des Users problematisch für den armen Prozessor vor.

Stellt sich also die Frage, wie kann ich Formulare basteln die anpassbar sind aber dennoch mit den entsprechenden Codes(WM_SYSCOMMAND-Messages, in diesem Fall) völlig dynamisch und normal im verhalten sind?

Ich hoffe jemand kann mir helfen, es muss doch eine Möglichkeit geben, der WMP oder WinAmp machen das doch auch.
Gruß,
Max

Balu der Bär 3. Nov 2006 19:55

Re: Die Form der Form...
 
So einfach wie du dir das vorstellst ist es AFAIR trotzdem nicht. Eine Möglichkeit ein Form abzurunden wäre unter anderem mit folgender Prozedur:
Delphi-Quellcode:
procedure MakeRounded(Control: TWinControl);
var
  R: TRect;
  Rgn: HRGN;
begin
  with Control do
  begin
    R := ClientRect;
    rgn := CreateRoundRectRgn(R.Left, R.Top, R.Right, R.Bottom, 20, 20);
    Perform(EM_GETRECT, 0, lParam(@r));
    InflateRect(r, - 5, - 5);
    Perform(EM_SETRECTNP, 0, lParam(@r));
    SetWindowRgn(Handle, rgn, True);
    Invalidate;
  end;
end;
Ich wage zu behaupten das WinAMP & Co spezielle Hier im Forum suchenSkin-Komponenten benutzen...

Prototypjack 3. Nov 2006 20:26

Re: Die Form der Form...
 
Moin!
Danke erstmal für deine Antwort!

Mir ist schon klar, das sowas durchaus kompliziert ist.

Das Problem an der Sache ist ja, ich weiß wie ich die Form so darstelle wie ich will, aber diese lässt sich selbst nicht vergrößern.
Das was du mir da Vorschlägst ist eben genau die Mutation durch Regions, doch diese lässt das Resize-Problem auftreten.
Alle anderen Methoden die ich mittlerweile kenne, laufen nur unter Win2K und höher.
Fragt sich also, wie sowas dennoch möglich ist, denn das es das ist steht durch Beispiele wie WinAmp und WMP außer Frage.

Zitat:

Ich wage zu behaupten das WinAMP & Co spezielle Suche in der Delphi-PRAXiSSkin -Komponenten benutzen...
Mag durchaus sein, dennoch müssen diese Komponenten auch irgendwie arbeiten und dieses "Arbeiten" will ich selbst imitieren.

Gruß,
Max

Edit: Mir drängt sich eine Frage auf: Würde alles unter Win2k eine Form akzeptieren deren Brush einfach bsClear in der Style-Eigenschaft hat?(Ich Idiot, dabei wird die Form nur durchsichtig jedoch ist sie doch nicht da und die klickst werden von ihr abgefangen, vergesst das einfach ;))

Gausi 3. Nov 2006 20:45

Re: Die Form der Form...
 
Zitat:

Zitat von Prototypjack
Regions, absolut möglich aber ich kann die Form später per
Delphi-Quellcode:
.Perform(WM_SysCommand,$F008,0);
nichtmehr vergrößern, da die Region ja irgendwann zu ende ist und dann ist Feierabend. Bei jedem Resize eine neue Region zu erstellen, die alte zu löschen und die neue zuzuweisen stelle ich mir dann bei einem weichen Drag des Users problematisch für den armen Prozessor vor.

Ohne Werbung machen zu wollen, aber bei meinem MP3-Player habe ich genau das gemacht, und das funktioniert ganz gut. Kannst es dir ja mal angucken, ob es bei dir zu sehr ruckelt. (Für das mit den Regions den Einzelfenster-Modus aktivieren). Die Region setzt sich dabei aus zwei abgerundeten Rechtecken zusammen.

Prototypjack 3. Nov 2006 20:56

Re: Die Form der Form...
 
Moin!
Ebenfalls danke für deine Antwort.
Naja, man merkt halt, dass da mehr passiert als bei einem normalen Resize.
Aber wie es aussieht(Ich suche bereits seit einer Ewigkeit in allen möglichen Ecken des Internets nach einer Lösung) werde ich es wohl auch so lösen müssen.

Sollte dennoch jemand eine Idee haben, immer her damit.. Bitte.. ;)

Gruß,
Max

Btw, der Erde-Skin von deinem Player ist ja cool :shock: , sprich seine Eigenschaft das sich die Erde 'mitdreht'.


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