Entwickler-Ecke

Open Source Projekte - TXStyleForm reloaded 1.1 beta 4 - Formular mit Skin


jaenicke - Di 24.02.09 11:25
Titel: TXStyleForm reloaded 1.1 beta 4 - Formular mit Skin
Hallo!

Diese Komponente verpasst einem Formular einen Skin. Dabei geht es nicht um die Komponenten auf dem Formular, sondern um den Rand und die Titelleiste des Formulars.
Dafür wird das eigentliche Fenster in einem Containerfenster eingebettet, das die Darstellung der Ränder übernimmt.

user defined image
Weitere Screenshots siehe unten im Folgepost.

Ein Editor für das visuelle Erstellen oder Editieren von Styles ist ebenfalls vorhanden, auch Hovereffekte werden visuell dargestellt.
Die Integration in die Komponente und die Delphi-IDE steht noch aus.

Ein Forum zum Support und mit weiteren Informationen findet ihr hier:
http://sjberlin.de/forum/viewforum.php?f=3

Dies ist die Weiterführung des Projektes TXStyleForm von obbschtkuche:
http://www.delphi-forum.de/viewtopic.php?p=148096

Features:(*) Neu heißt im Vergleich zum ursprünglichen TXStyleForm.

Lizenz:
MPL 1.1 oder GPL 2.0 oder LGPL 2.1

Installation:
Das Setup ausführen oder:Bei Verwendung des Setups sollte als Ziel der Installation ein anderes als das voreingestellte Verzeichnis benutzt werden, da dieses recht lang ist.
Das Setup und das danach ausgeführte Tool sollte die Installation automatisch vornehmen. Delphi 2007 und 2009 funktionieren damit noch nicht richtig, da ist nach wie vor eine manuelle Nacharbeit bei der Installation des Packages notwendig.

Verwendung:
Es gibt jetzt ein kleines Demovideo am Beispiel von Delphi 7:
http://www.sjberlin.de/service/videos/XStyleDemo.html
Unterstützte Delphiversionen:
Delphi (3), 5, 6, 7, 2005, 2006, 2007 und 2009
(Delphi 3 visualisiert nicht, ob das Fenster den Fokus hat und das Fenster kann beliebig klein gezogen werden.)

Unterstützte Windowsversionen:
Getestet unter Windows 95, 98, ME, 2000, XP, Vista

Weitere Planung:Die Version 1.2 mit dem Experten in der IDE plane ich dann für Mitte Mai, Ende Juni soll es dann die Version 2.0 mit komplett überarbeiteter Implementierung der Komponente mit integriertem Editor geben.

Bekannte Probleme:
Das solls fürs Erste gewesen sein, im Anhang gibts den Quelltext inkl. und ohne kompilierte Demo und Editor.

Ich habe die Komponente jetzt auch in der DP und dem DT vorgestellt:
http://www.delphipraxis.net/post1005910.html
http://forum.delphi-treff.de/showthread.php?t=26292

Die Changelogs veröffentliche ich jetzt nicht mehr hier sondern im Forum in den entsprechenden Threads:
http://sjberlin.de/forum/viewtopic.php?f=5&t=3&p=3 (Changelog der Version 1.1)

Schönen Gruß,
Sebastian


jaenicke - Di 24.02.09 11:32

Screenshots der Demo (im Anhang liegen die selben Bilder, falls mein Server mal nicht erreichbar ist):

user defined image

wird zu

user defined image

Editor:

user defined image


jaenicke - Do 26.02.09 18:53

So, eine neue Version ist da. Diese enthält bisher nicht viele offensichtliche Änderungen, aber ich habe folgendes geändert:

Bei den Tests habe ich gemerkt, dass ich mit älteren Delphiversionen doch ein Problem bekomme.
Delphi 3 werde ich voraussichtlich nicht unterstützen. Delphi 5 lässt sich zwar kompilieren, produziert aber Darstellungsfehler. Beides schaue ich mir noch an, es kann aber sein, dass ich alles vor Delphi 6 nicht unterstützen werde.
(Ich habe noch eine Idee wie ich beide Probleme direkt beheben kann, mal schauen ob das klappt.)


jaenicke - Fr 27.02.09 06:26

So und wieder eine neue Version:Die Downloads sind alle aktualisiert.


jaenicke - Fr 27.02.09 19:41

Leider hat sich beim Unterdrücken des Flackerns ein Fehler eingeschlichen. Der wurde vorhin in der DP gemeldet. Das Problem ist, dass ich das Resizen bzw. genauer gesagt dessen Behandlung teilweise unterdrückt habe. Leider nicht nur in dem richtigen Fall, sondern auch wenn es benötigt würde.

Das habe ich jetzt wieder behoben, es sollte also jetzt weder flackern noch Darstellungsfehler geben.

Die Downloads sind wieder aktualisiert.


Webo - Fr 27.02.09 20:06

Find ich gut, das sich jemand an die Weiterführung des Projekts von obbschtkuche gemacht hat. Ich hab die Komponente von ihm schon öfters benutzt, jetzt ist ja wieder aktuell, werde sie glaub ich wieder häufiger einsetzen.

Lob an die user profile iconjaenicke, dass du dich dran gesetzt hast !

Edit: Funktioniert einwandfrei bei mir unter D7 und D2009 !


jaenicke - Sa 28.02.09 06:33

Ich dachte schon ich führe hier Selbstgespräche, freut mich, dass es jemand brauchen kann. ;-)

Jetzt habe ich nochmal alles überarbeitet und einiges optimiert. Im Detail:Da die Fehler soweit weitgehend behoben sind, deklariere ich diese Version einmal als Beta 1. Neue Features wird es in der Version 1.1 nicht mehr geben, ich werde mich nur noch um die letzten Fehler kümmern.

Das Alphablending werde ich nochmal komplett überarbeiten, dann sollte der Fehler raus sein, für den mit den Constraints muss ich nur noch einmal die Abläufe genau überdenken denke ich. Beides wird also bald fertig sein.

Für die Version 1.2 habe ich mir dann die komplette Überarbeitung der Komponente und die Integration des Editors in die IDE vorgenommen. Im Moment ist das einfach etwas umständlich.


Webo - Sa 28.02.09 10:37

Wie macht man das jetzt am besten, die neue Komponente zu installieren ?

Muss ich jetzt die alte alpha Version erst deinstallieren (sowas find ich nämlich nicht unter D2009) oder einfach die neue "drüber" installieren ?

Ich hab noch mal ne Frage so zum Editor: Beim alten Projekt konnte man nur bestehende Skins bearbeiten, ich würde aber auch mal gerne eigene erstellen ! Planst du sowas im Editor auch ?


jaenicke - Sa 28.02.09 10:57

Dank toms aus der Delphi-Praxis funktioniert jetzt auch das Systemmenü. Die Downloads sind aktualisiert.

user profile iconWebo hat folgendes geschrieben Zum zitierten Posting springen:
Wie macht man das jetzt am besten, die neue Komponente zu installieren ?

Muss ich jetzt die alte alpha Version erst deinstallieren (sowas find ich nämlich nicht unter D2009) oder einfach die neue "drüber" installieren ?
Überschreibe einfach die Dateien und installiere das Package erneut, das reicht schon. Sollte da einmal mehr nötig sein, schreibe ich das dazu.

Ach ja, auch wenn das hier nicht nötig ist: Deinstallieren findest du bei 2009 unter Komponente --> Packages installieren..., dann das Package in der Liste auswählen und darunter Entfernen drücken. ;-)

Aber ich plane erst einmal keine weiteren Dateien hinzuzufügen oder zu entfernen. Unter anderem deshalb gibt es auch so viele fast identische Dateien für die verschiedenen Delphiversionen. Sollte eine Anpassung nötig sein, kann ich das direkt machen ohne dass sich bei der Benutzung etwas ändert.

user profile iconWebo hat folgendes geschrieben Zum zitierten Posting springen:
Ich hab noch mal ne Frage so zum Editor: Beim alten Projekt konnte man nur bestehende Skins bearbeiten, ich würde aber auch mal gerne eigene erstellen ! Planst du sowas im Editor auch ?
Wenn du alles ersetzt, dann ist es ja wie ein neuer Skin. Ich kann natürlich auch noch einen Resetknopf hinzufügen, aber eigentlich musst du ja so oder so nur alles neu einstellen. ;-)


MDX - Sa 28.02.09 15:38

Ich hab einen Bug gefunden:

Und zwar wenn man das Design zur Laufzeit verändert, verschwindet das Programm aus der Taskleiste!

Ansonten :zustimm: das du weitermachst!


jaenicke - Sa 28.02.09 15:49

user profile iconMDX hat folgendes geschrieben Zum zitierten Posting springen:
Und zwar wenn man das Design zur Laufzeit verändert, verschwindet das Programm aus der Taskleiste!
Mit welchem Delphi und welchem Betriebssystem? Tritt das auch mit der mitgelieferten kompilierten Exe auf?

Denn den Fehler kann ich hier nicht reproduzieren, ich habs erstmal mit Delphi 2006 sowie XP und Vista getestet. Aber auch sonst hätte mir sowas eigentlich auffallen müssen, wenn es bei mir passiert wäre. :gruebel:

Aber ich schau mal, ob mir auffällt wo sowas passieren könnte, so viel Quelltext wird dabei eigentlich gar nicht ausgeführt.

// EDIT;
Auch mit Delphi 2009 gehts hier, aber dafür habe ich dort Grafikfehler entdeckt, das muss ich gleich mal beheben.


MDX - Sa 28.02.09 16:21

Also ich hab Delphi 2009:

Vorher:
http://img1.mwsbb.de/393260c4b2.jpg

Nachher:
http://img1.mwsbb.de/4f2dbe5d47.jpg


jaenicke - Sa 28.02.09 19:54

Ja stimmt, bei Delphi 2009 verschwindet das unter Vista bei mir gleich beim Aktivieren des Skins. Dafür funktioniert die Fenstervorschau auch im minimierten Zustand, da wurde also einiges geändert.

Ich schau mir das einmal an, das sollte sich ja leicht beheben lassen.


jaenicke - Mo 02.03.09 02:44

Also den Button in der Taskleiste zu bekommen war einfach, dafür reicht am Ende dieser Zusatz:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
    SetWindowLong(Container.Handle, GWL_EXSTYLE,
      GetWindowLong(Container.Handle, GWL_EXSTYLE) or WS_EX_APPWINDOW);

    Container.Visible := True;
    inherited Visible := True;
  end;
end;

end.
Aber aus irgendeinem Grund wird der Titel des Fensters nicht angezeigt, obwohl das Containerfenster den Titel eigentlich zugewiesen bekommen hat. :gruebel:
Und beim minimieren ist der Eintrag in der Taskleiste auch wieder weg.

Aber das werde ich vermutlich auch noch hinbekommen, am Alphablending und den Constraints bin ich auch dran.


jaenicke - Di 24.03.09 05:04

So, es gibt eine neue Version. Ich habe den Alphablending- und Transparenzsupport komplett neu geschrieben, was allerdings nach ein wenig Überlegung nur wenig Quelltext erforderte.

Zusätzlich habe ich das automatische Setup als Alpha veröffentlicht. Das Setup erkennt den Installationsstatus der Komponente in den installierten Delphiversionen. Die ausgewählten Packages werden dann kompiliert und der Pfad zu den Units in den Suchpfad eingetragen.
Dafür muss nach der Ausführung des Setups das Tool gestartet werden. Dieses ist nur in dem Setup enthalten.

Das Tool funktioniert leider unter Delphi 2007 und 2009 noch nicht richtig. In diesen Versionen besteht auch noch das Problem mit dem Taskleisteneintrag.

Ich empfehle bei Ausführung des Setups einen anderen Pfad zu benutzen als voreingestellt ist, da der Pfad zu den Anwendungsdaten meistens relativ lang ist.
(Da aber jeder einen anderen Pfad für Komponenten benutzt, war das die beste voreingestellte Variante.)

Ich plane einen Ausbau des automatischen Installers und die Behebung der letzten beiden Fehler in der Komponente. Dann werde ich noch einen RC veröffentlichen und dann, wenn keine Probleme auftauchen, die Final. Geplant habe ich das für Mitte bis Ende April.

Die Version 1.2 mit dem Experten in der IDE plane ich dann für Mitte Mai, Ende Juni soll es dann die Version 2.0 mit komplett überarbeiteter Implementierung der Komponente mit integriertem Editor geben.


elundril - Di 24.03.09 11:14

funktioniert das auch mit teilweisem Alphablending? also das ich zum beispiel nur einen kreis in der mitte mit transparenz ausstatten kann und den rest undurchsichtig lasse?

lg elundril


jaenicke - Di 24.03.09 11:57

Nein, es funktioniert genau wie sonst mit den internen Methoden via AlphaBlend und AlphaBlendValue. Mit Regionen müsste ich schauen wie sowas geht, prinzipiell kann ich das dann auch umsetzen, ich weiß jetzt wo ich das dann machen müsste.


jaenicke - Di 24.03.09 23:48

Ich habe mal geschaut, ich denke das könnte ich einbauen. Fragt sich wie du dir das genau vorstellst. Also möchtest du eine Region für den transparenten Bereich selbst erstellen und übergeben?

Dann noch eine Info:
Ich habe jetzt ein Supportforum aufgemacht um mehr Raum und Übersicht für Diskussionen und Informationen zu haben. Ich werde hier im ersten Beitrag dann ein paar unwichtigere Informationen wie das Changelog entfernen und in das Forum umlagern.
http://www.sjberlin.de/forum/viewforum.php?f=3

Damit sollte der Beitrag mit dem Download hier deutlich übersichtlicher werden. Wichtige Informationen bleiben natürlich auch hier stehen.


elundril - Mi 25.03.09 00:01

hmm, ich hätt so zwei ideen dazu:

1) vl mit einem einenen Bild das graustufen ist und die transparenz mit diesem bild dann erstellen

2) vl. mit PNG.

auf jeden fall sollte man halt einen Aero-Style für deine Komponente erstellen kann :mrgreen:

lg


jaenicke - Mi 25.03.09 08:01

Also ich habe es mir angeschaut. Prinzipiell bekomme ich es hin, dass ein gewisser Rand zu einem eingestellten Grad transparent wird, was ja dann dem Aero-Look etwas näher kommt.

Ob ich da einen Weg finde, dass sich das einfach benutzen lässt, muss ich noch schauen, vor allem ob und wie ich das insgesamt mit der normalen Transparenz kombinieren kann. :gruebel:


jaenicke - Mo 30.03.09 09:43

Für die aktuelle Version werde ich diese Woche einen Release Candidate veröffentlichen, die Fehler in der Komponente selbst habe ich soweit behoben, ich baue aber noch einen Vista-Fix gleich mit ein statt per Sonderbehandlung verschiedener Versionen von Delphi oder Windows Fehler beizubehalten. Deshalb dauert es noch ein paar Tage.

Ich habe mir den Wunsch nach einem transparenten Rahmen jetzt angeschaut und mit der Planung für Version 2.0 angefangen. (Vorher wird es aber noch eine Zwischenversion auf Basis des alten Codes geben.)

Folgendes habe ich jetzt geplant:Aufgrund dieser Überlegungen wird der geplante Termin (Ende Juni) wohl nicht haltbar sein. Genaueres kann ich erst nach der Planung sagen, derzeit sammele ich noch Überlegungen.

Wichtig: Wenn noch jemand Featurewünsche hat, dann schreibt es bitte jetzt, damit ich ggf. dies gleich in die Planung einfließen lassen kann. Spätere Wünsche werde ich nicht so gut berücksichtigen können, das muss dann ggf. bis zur nächsten Version warten.


jaenicke - So 12.04.09 05:30

Ich habe soeben die beta 3 hochgeladen. Das Problem mit den Constraints ist behoben, das Problem mit Vista und Delphi 2007 und 2009 größtenteils.

Das zu beheben hat länger gedauert, weil ich auch noch die Reparatur für Vista generell eingebaut habe. Die Benutzung von XStyleForm sorgt also auch gleich dafür, dass unter Vista die Vorschau und Taskumschaltung usw. korrekt funktioniert, auch mit Delphi 2006 und früher.
Das hat leider andere Probleme mit sich gebracht, die ich erst noch ausführlich testen muss, aber zumindest bei einem einzelnen Formular sollte es immer funktionieren, nur beim Minimieren über das Systemmenü verschwindet der Taskleistenbutton noch.

Was die Transparenz des Rahmens angeht, so habe ich damit einige Probleme, das habe ich bisher nicht zufriedenstellend hinbekommen.

Abgerundete Ecken habe ich in einer anderen Version bereits eingebaut, dort werde ich die Korrekturen dieser Version noch einbauen, dann wird zumindest das schon einmal bald funktionieren.


umpani - Di 02.03.10 10:46

Hallo,

ich habe folgendes Problen mit der Komponente.

Die Anzeige bzw das Erstellen von Skins funktioniert einwandfrei. Allerdings scheint die Komponente irgendwie die "FsStyOnTop"-Einstellung zu killen.
Ich habe drei Forms in meinem Programm. Zwei davon sind "OnTop" und eine soll im Hintergrund stehen. Alle drei sind mit der Komponente geskinnt.

Jetzt ist es aber so, dass egal welche Form aktiv ist, diese auch in den Vordergrund gesetzt wird, wenn die Kompo aktive ist.

Kennt jemand eine Lösung?

Gruß Umpani


chickenfigt1989 - Sa 01.05.10 12:11

Hey
Wollt mir deine Komponente installieren allerdings mit dem Auto Setup kommt immer
Fehler bei der Installation und wen ich die Package manuell installiere kommt immer das hier:
[Error] XStyleForm.pas(406): Undeclared identifier: 'PopupParent'
[Error] XStyleForm.pas(407): Undeclared identifier: 'PopupParent'
[Fatal Error] XStyleContainer.pas(164): Could not compile used unit 'XStyleForm'
Hoffe du kannst mir weiter helfen
Lg


jaenicke - Sa 01.05.10 12:36

Ist das noch irgendeine alte Delphiversion?


chickenfigt1989 - Sa 01.05.10 13:25

Ich benutze Delphi 7 Personal Edition


jaenicke - Sa 01.05.10 15:53

Es gibt eine neue Version, diese funktioniert ab Delphi 5 wieder, ich hatte nach der Anpassung für Vista keinen Test mit den Uraltversionen mehr gemacht.

Leider funktionieren mit Delphi 7 oder früher kompilierte Programme dadurch nicht genauso gut wie mit neueren Delphiversionen, um genau zu sein gibt es dabei evtl. ein Problem mit ShowModal. Aber das muss ich noch testen und ggf. irgendwie anders lösen. Da es ohnehin ab Vista mit Programmen von Delphi 7 und früher Probleme gibt, ist das aber auch nicht so wichtig.

Zumindest funktioniert es aber, auch das AutoSetup.


chickenfigt1989 - Sa 01.05.10 16:00

oke und wo finde ich die neue Version??
Weil egal was ich mache, ich bring die Version von diesen Thread nicht zum Laufen
Mfg


jaenicke - Sa 01.05.10 16:06

Die neue Version wurde bisher noch gar nicht heruntergeladen, siehe Downloadcounter. ;-)
Du findest diese wie immer im ersten Beitrag des Threads, die Downloads sind dort aktualisiert.


chickenfigt1989 - Sa 01.05.10 16:42

Lool
Ich hab es mir aber heut schon mal runtergeladen, und dann den Bibliothekspfad zu dem Sourceordner hinzugefügt, die Package compiliert und installiert.


jaenicke - Sa 01.05.10 17:11

Falls das missverständlich war:
Mein Beitrag vorhin war die Benachrichtigung, dass es eine neue Version (Beta 4) gibt nachdem ich diese kurz vorher im ersten Beitrag aktualisiert hatte. ;-)


chickenfigt1989 - Sa 01.05.10 17:38

Joa habs gemerkt aufeinmal ging es
Nur ich komm irgendwie nicht klar damit.
Also wie ich des mach das mein Programm mit dem gewünschten Style startet :(


jaenicke - Sa 01.05.10 17:41

Steht doch dabei unter Verwendung. Wenn du in der Komponente die Eigenschaften gesetzt hast, kannst du XStyleEnabled in OnCreate auf True setzen.


chickenfigt1989 - Sa 01.05.10 18:21

Ich check es trotzdem noch nicht so ganz.
Ich will eig. nur das mein Programm dein xtremexp.xstyle style hat :(


jaenicke - Sa 01.05.10 18:24

Dann frage ich mal anders: Was hast du denn bisher von den fünf Punkten unter Verwendung schon gemacht? :roll:


chickenfigt1989 - Sa 01.05.10 19:16

Ich hab folgendes gemacht:

Die Komponente TStyleComponent aufs Formular legen
XStyleForm in die uses Liste hinzufügen
Aus class(TForm) in der Formulardeklaration TXStyleForm machen

Und hier komm ich nicht weiter:
Eigenschaften selbst definieren oder bei OpenFile den kompletten Dateinamen inkl. Pfad zu einer der Skindateien angeben
Mit der Eigenschaft XStyleEnabled z.B. im Ereignis OnCreate den Style aktivieren oder deaktivieren. Standardmäßig ist dieser deaktiviert.
lg


jaenicke - Sa 01.05.10 19:44

Gemeint sind die Eigenschaften der Komponente, die du auf das Formular gelegt hast. Dort kannst du im Objektinspektor bei OpenFile einen kompletten Dateinamen zu einer Styledatei inklusive Pfad angeben um diese zu laden.

XStyleForm kannst du dann in OnCreate den Wert True zuweisen um den Style zur Laufzeit zu aktivieren.


chickenfigt1989 - Sa 01.05.10 20:03

oh hab nur das SaveFile gesehen.
Oke jetzt habe ich bei OpenFile eines deiner Beispiel Styles hergenommen und bei OnCreate meiner Form XStyleEnabled:= true; reingeschrieben, aber wenn ich das Programm dan starte ist nur ein grauer kasten da siehe screen im Anhang. Lg


jaenicke - Sa 01.05.10 20:31

Ich muss da das Design irgendwann einmal verbessern. Das zeigt soweit ich mich erinnere keine Fehlermeldung an, wenn die Datei nicht gefunden wird.

Hast du da wirklich den kompletten Pfad inkl. Dateinamen angegeben und mit Return bestätigt? :gruebel:


chickenfigt1989 - Sa 01.05.10 20:39

Ich bin bei OpenFile einfach auf die drei Punkte gegangen dann kam das Datei Öffnen, und von dort aus hab ich zu der Style Datei Navigiert und sie Doppelt angeklickt.

Edit://Ich hab jetzt 5mal den pfad über die drei Punkte bei OpenFile reingemacht, und auch manuell den pfad eingegeben, aber er nimmt mir keinen einzigen pfad an. Es steht dann immer bei OpenFile Bitte geben sie ienen Dateinamen ein.


jaenicke - Sa 01.05.10 21:33

Die drei Punkte zeigen, dass da irgendein Addon aktiv ist, denn Delphi selbst hat das nicht. Offenbar blockiert dieses den Setter der Eigenschaft, so dass der Dateiname nicht wirklich gesetzt wird. :nixweiss:

Ich habe einmal ein Demovideo unter Verwendung im ersten Beitrag ergänzt, das ich mit einer sauberen Installation erstellt habe. Da funktioniert es problemlos.


chickenfigt1989 - Sa 01.05.10 22:52

Oke hab das ganze mal auf mein Laptop getestet mit Delphi 7 Second Edition und es funzt wunderbar.
Allerdings geht dan mein Account System nicht mehr :(