AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Die Form der Form...
Thema durchsuchen
Ansicht
Themen-Optionen

Die Form der Form...

Ein Thema von Prototypjack · begonnen am 3. Nov 2006 · letzter Beitrag vom 3. Nov 2006
Antwort Antwort
Prototypjack

Registriert seit: 2. Feb 2003
611 Beiträge
 
Delphi 2009 Professional
 
#1

Die Form der Form...

  Alt 3. Nov 2006, 20:20
Welch' ein poetischer Titel

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 .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
Max
„If you have any great suggestions, feel free to mail me, and I'll probably feel free to ignore you.“ . Linus Torvalds
  Mit Zitat antworten Zitat
Balu der Bär
(Gast)

n/a Beiträge
 
#2

Re: Die Form der Form...

  Alt 3. Nov 2006, 20:55
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...
  Mit Zitat antworten Zitat
Prototypjack

Registriert seit: 2. Feb 2003
611 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Die Form der Form...

  Alt 3. Nov 2006, 21:26
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 )
Max
„If you have any great suggestions, feel free to mail me, and I'll probably feel free to ignore you.“ . Linus Torvalds
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
878 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Die Form der Form...

  Alt 3. Nov 2006, 21:45
Zitat von Prototypjack:
Regions, absolut möglich aber ich kann die Form später per .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.
  Mit Zitat antworten Zitat
Prototypjack

Registriert seit: 2. Feb 2003
611 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Die Form der Form...

  Alt 3. Nov 2006, 21:56
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 , sprich seine Eigenschaft das sich die Erde 'mitdreht'.
Max
„If you have any great suggestions, feel free to mail me, and I'll probably feel free to ignore you.“ . Linus Torvalds
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:41 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