Entwickler-Ecke
Multimedia / Grafik - Meinem Programm ein Aussehen verpassen
Michi89 - Sa 20.09.08 19:00
Titel: Meinem Programm ein Aussehen verpassen
Hallo wie kann ich, dem was ich Programmiert habe eine Grafische Oberfläche bieten?
(Wenn möglich ohne die grund Programmierung zu änderen)
Calculon - Sa 20.09.08 19:42
Hast du denn eine Formularanwendung programmiert oder eine Konsolenanwendung?
Gruß
--
Michi89 - Sa 20.09.08 19:45
Ganz normale Anwendung...
Calculon - Sa 20.09.08 19:52
Dann hast du doch schon eine grafische Oberfläche. Was du meinst sind wahrscheinlich
SKINS...
Gruß
--
Michi89 - Sa 20.09.08 19:53
Unter einer Grafischen Benutzerfläsche meint man nicht das Standtart Grafische...^^
Aber danke für den link..
hoffe ich finde was ich suche... xD
Xion - Sa 20.09.08 22:03
hier [
http://www.delphi-forum.de/viewtopic.php?t=79891&highlight=advimage] hab ich mal die Unit AdvImage gepostet. Mit der kannst du gucken, wann die Maus über das Image bewegt wird. Wenn du jetzt z.B. beim MouseEnter einen glühenden Knopf und bei MouseLeave einen normalen Knopf lädst, hast du schon einen grafisch aufgepeppten Button.
Beispiel:
Gewuerzgurke - So 12.10.08 13:44
Auch wenn das Thema schon vor einiger Zeit "aufgehört hat, aktuell zu sein", aber ist mit
Zitat: |
Hallo wie kann ich, dem was ich Programmiert habe eine Grafische Oberfläche bieten?
(Wenn möglich ohne die grund Programmierung zu änderen) |
denn nicht eher gemeint, dass man sich eine DLL oder so macht, die dann im Programm einbindet und schon verändern sich Fensterleiste und Buttons... ?
Im Prinzip so, wie Windows das sowiso schon macht. Das heist, die (Voreinstellung) *:\WINDOWS\Resources\Themes\Luna\Shell\NormalColor\shellstyle.dll, zum Beispiel, bewirkt dieses Standard-XP-Blau, usw.
Was mich nämlich auch interessiert, ist ob das Programm irgendwie die Möglichkeit hat, sich diese "Layout-DLL" selber auszusuchen?! Oder noch besser: Ob man sich so eine DLL selber machen - und diese dann als Vorlage für zahlreiche andere Programme verwenden kann?
Der Windows Mediaplayer 11 scheint dies datsächlich zu machen.
Mir ist es aber nur gelungen, ein Programm zu machen, dass mit Borderstyle = bsNone die XP-Fensterleiste "ausblendet" und dann mit Bildchen und haufenweise Prozeduren eine Eigene simuliert. Der Nachteil dabei ist aber, DASS man die komplette Grundprogrammierung ändern muss.
Hat nicht jemand anderes noch eine Idee?
http://www.delphi-forum.de/viewtopic.php?t=25336&highlight=txstyleform Das kommt dem schon sehr nahe, aber wenn ich das richtig verstanden habe, wird dort keine alternatieve "Layout-DLL" an Stelle der Standard-Windows-DLL verwendet - oder?
jaenicke - So 12.10.08 13:56
Layout-DLL? Was meinst du? Da werden die Teile selbst gezeichnet, und dafür sind die Teile des Styles in den Bildern der Styledatei, nur dass das in dem Fall keine DLL ist. Ich hatte da ja mal dran gearbeitet etwas, aber hatte das Projekt dann aus den Augen verloren.
Heiko - So 12.10.08 14:23
Gewuerzgurke hat folgendes geschrieben : |
Im Prinzip so, wie Windows das sowiso schon macht. Das heist, die (Voreinstellung) *:\WINDOWS\Resources\Themes\Luna\Shell\NormalColor\shellstyle.dll, zum Beispiel, bewirkt dieses Standard-XP-Blau, usw.
Was mich nämlich auch interessiert, ist ob das Programm irgendwie die Möglichkeit hat, sich diese "Layout-DLL" selber auszusuchen?! Oder noch besser: Ob man sich so eine DLL selber machen - und diese dann als Vorlage für zahlreiche andere Programme verwenden kann? |
Wenn du die Unit XPMan (oder bis Delphi7 das antsprechende Manifest) einbindest, passt sich dein Programm automatisch den gegebenheiten des Systemlayouts an. Du kannst aber nicht sagen, dass dein Proggi Luna-Blau verwenden soll, während das restliche System Luna-Silber verwendet. Das entspricht nicht der Idee, die hinter den Win-Themes steckt.
jaenicke hat folgendes geschrieben : |
Layout-DLL? |
Er meint DLLs, in denen die Zeichenroutinen liegen und man das Theme eben durch auswechseln der DLL erreicht.
Gewuerzgurke - So 12.10.08 15:57
Also, was ich wissen wollte ist, ob dieses Beispielprogramm wirklich einen eigenen Fensterrand erzäugt oder auch nur die Original-Rahmen von XP ausblendet und dann eine eigene Fensterleiste simuliert. Meines Erachtens giebt es da einen kleinen Unterschied, den ich selber aber nicht nachprüfen kann, weil ich dieses Programm bei mir nicht compilieren kann.
Wenn man ein Programm maximiert und dann minimiert, sieht man ja, dass das Fenster nicht gleich verschwindet, sondern noch kurz unverändert bleibt und sich statt dessen erst ein schwarzer Balken, der die Umrisse der Fensterleiste nachbildet, richtung Taskleiste verkleinert.
Nur wenn man mein Programm, das ich mal angefertigt habe, maximiert und dann minimiert, dann ist das Fenster sofort verschwunden und es verkleinert sich nur ein kurzer Balken von der Bildschirmmitte aus. Ich nehme mal an, das kommt daher, dass ich Borderstyle = bsNone verwende.
Mich interessiert jetzt eben, ob das bei diesem Beispielprogramm auch so ist, oder ob da, wie auch beim Mediaplayer 11 alles funktioniert. Denn eigentlich wollte ich mal wieder an meinem eigenen Programm herumbasteln aber bevor ich mir da jetzt umständlich Mühe gebe, möchte ich noch wissen, ob dieses merkwürdige "Verkleinerungsverhalten" bei mir nur an Borderstyle = bsNone liegt oder ob es zu den "echten" Programmleisten noch einen entscheidenden Unterschied giebt.
jaenicke - So 12.10.08 16:15
Wenn du den Mediaplayer 11 dazu bringst abzustürzen bzw. festzuhängen, dann siehst du, dass der den eigenen Rahmen über den anderen zeichnet, deshalb siehst du bei einem Absturz den neuen Rahmen an dieser Stelle.
XStyleForm basiert auf einem zweiten Formular, dass hinter das eigentliche Formular geschoben wird und dann die Rahmendarstellung übernimmt.
Gewuerzgurke - So 12.10.08 17:45
Heist das also, dass auch der Mediaplayer den Originalrahmen nur übermahlt? Aber wie funktioniert das eigentlich? Nur, indem man ein zweites Anzeigefenster darüber schiebt oder giebt es noch eine andere Möglichkeit, Pixel außerhalb des eigenen Anzeigefensters zu färben? Ich hab mal ein Programm entdeckt, das weiße Pixel wie Schneeflocken über den Bildschirm rieseln lässt. Das können doch nicht alles seperate Anzeigefenster sein!?
http://files.filefront.com/Schneeexe/;6508811;/fileinfo.html
Timosch - So 12.10.08 17:54
Aber sicher kann man außerhalb des eigenen Fensters zeichnen. Schau dir mal das hier an:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| var Desktop: THandle; DC: HDC; begin Desktop:=GetDesktopWindow; DC:=GetWindowDC(GetDesktopWindow); Rectangle(DC, 0, 0, 300, 300); end; |
(ungetestet; hab ich noch irgendwo rumliegen gehabt; stammt nicht von mir)
Heiko - So 12.10.08 17:54
Hallo,
die übermalen den Rahmen nicht, sondern schalten diesen ab und zeichnen auf dem eigentlichen Form einen neuen. Also den Rahmen auf bsNone und dann oben rechts drei Buttons hingeklatscht ;).
@schneeflocken: nein. Das zeichnet einfach direkt auf den Desktop. Also die Arbeitsfläche ist dort nicht ein eigenes Formular, sondern das Formular eines fremden Programmes ;).
jaenicke - So 12.10.08 18:14
Heiko hat folgendes geschrieben : |
die übermalen den Rahmen nicht, sondern schalten diesen ab und zeichnen auf dem eigentlichen Form einen neuen. Also den Rahmen auf bsNone und dann oben rechts drei Buttons hingeklatscht ;). |
Dann würde im MediaPlayer das selbe "Phänomen" auftreten wie bei allen anderen Programmen, bei einem Absturz würde die windowseigene Leiste
darüber erscheinen. Das tut sie aber nicht, die Leiste wird
nicht einfach auf das eigene Formular gezeichnet.
Beim WMP wird das definitiv anders gemacht. (Wie hab ich bisher nicht näher geschaut.)
Heiko - So 12.10.08 18:16
Sicher? Glaube ich eher nicht. Wenn der WMP11 abstürzt erscheint die Leiste oben. Das ist korrekt. Da er aber abgestürzt ist, kann er ja schlecht darauf reagieren dass er jetzt wneiger Platz hat. Von daher erscheint es so, dass er darüber zeichnet ;).
jaenicke - So 12.10.08 18:20
Wenn ich aber bei mir die Titelleiste mit bsNone ausblende erscheint die Orginalleiste bei einem Absturz oberhalb, das passiert auch beim Live Messenger zum Beispiel. Nur beim WMP erscheint diese an der selben Stelle wie die simulierte. Das ist dort ganz sicher anders. Ich weiß nur gerade nicht wie es da funktioniert.
Dafür müsste ich wieder nen Absturz provozieren und vergleichen was anders ist ;-).
Heiko - So 12.10.08 18:29
jaenicke hat folgendes geschrieben : |
Wenn ich aber bei mir die Titelleiste mit bsNone ausblende erscheint die Orginalleiste bei einem Absturz oberhalb, das passiert auch beim Live Messenger zum Beispiel. Nur beim WMP erscheint diese an der selben Stelle wie die simulierte. Das ist dort ganz sicher anders. Ich weiß nur gerade nicht wie es da funktioniert. |
Ok - ich bin gerade von der maximierten Variante ausgegangen (was er bei mir immer ist). Da fallen einem keine Unterschiede auf.
jaenicke hat folgendes geschrieben : |
Dafür müsste ich wieder nen Absturz provozieren und vergleichen was anders ist ;-). |
Das sollte nicht so schwer sein. Wenn er seine Phase hat bekommt man den ja nur gestartet, in dem man eine mp3 direkt startet ;).
Gewuerzgurke - So 12.10.08 18:44
Was man aber beachten sollte, ist, dass der WMP zum größten Teil auf C++ aufbaut, möglicher Weise giebt es da noch andere Warianten die Programmleiste auszublenden. Oder der kann wirklich eine eigene DLL laden. Bei Microsoft weis man ja nie...
Gewuerzgurke - So 12.10.08 18:48
Übrigens danke dür den Tipp mit dem Rechteck außerhalb des eigenen Fensters. So etwas kann man immer brauchen!
JDKDelphi - So 12.10.08 19:23
Hallo,
wie will man eigentlich programmieren, wenn man noch nicht mal die deutschen Sprache richtig schreiben kann....
Gewuerzgurke - So 12.10.08 19:42
Pascal ist ja auf Englisch.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!