Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mo Jul 14, 2025 18:06

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: So Jul 13, 2003 11:09 
Offline
DGL Member

Registriert: Sa Sep 21, 2002 21:32
Beiträge: 346
Wohnort: Eilsum (Nahe Emden)
Hi Leute!
Ich habe ein Problem:
Ich versuche momentan in ein Anderes Fenster zu rendern (in diesem Falle auf den Windows-Startbutton... mein Me-Startbutton wird mir langsam zu langweilig....)
Auf den Deskop habe ich es schonmal geschaft (auch wenn dann alle Icons verschwinden und der active-Desktop aus sein muss) ... ist aber schon etwas länger her...
Wenn ich nun aber einfach diese Zeile Quelltext
Code:
  1.  
  2. form1.myDC:= GetDC(FindWindowEx(FindWindow('Shell_TrayWnd', nil),0,'Button',nil));
  3.  


um die ganze Initialisierung auf den startmenübutton umzulenken passiert genau - nichts!
Das Ding bleibt einfach so wie zuvor... woran kann das liegen? (diese ganzen Deaktivierungs-triks mit dem teil funzen ja auch....)

_________________
Es sind immer die guten,
welche zu früh von uns gehen müssen...

Meine bislang 13 Open Gl - Tuts findet ihr auf www.dcw-group.net
Neu! Ein großer Teil der Demos nach Kylix übersetzt!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 13, 2003 14:15 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Das kannst du vergessen. Die Klasse BUTTON (alle anderen auch) hat eine Methode die für alles und jeden Quark aufgerufen wird. Logischerweise auch fürs Zeichnen. Allerdings diese Methode zu überschreiben geht nur solang der Button noch nicht erstellt wurde. In einem eigenen Programm kann man das machen. Allerdings ist das ein heiden akt. Du musst nur um das Zeichen zu überschreiben den Button komplett neu programmieren.

Das einzige was du machen könntest wären Themes oder WindowBlinds. So heißt das glaube ich. Alles andere kannst du vergessen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 13, 2003 14:31 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Eventuell könnte man auch versuchen für die Fensterklasse diese Schalters die Fensterprozedure mit setclasslong umzuleiten. Für alle anderen Ereignisse als WM_PAINT und alle anderen Fenster als den Button kannst du dann ja wieder die alte Funktion aufrufen. Vermutlich ist der Startbutton das einzige Fenster diese Klasse, so daß es keine Probleme geben sollte.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 13, 2003 15:23 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Lars das ist leider nicht so ganz Richtig. Ich hatte im Rahmen einer Idee mal die Klasse BUTTON (die Methode WinProc) überschrieben und das witzige was ich festgestellt hatte. Es wird eine ganzen Hand voll Messages der Button neu gemalt. Zum Beispiel wird auch bei den Messages für SetFocus und KillFocus der Button neu gemalt. Und das ohne das WM_PAINT aufgerufen wird. Und sobald du die originale WinProc aufrufst wird dein Ergebniss vollkommen durcheinander gewürfelt. In den meisten Fällen jedenfalls. Und umso komplexer die Klasse wird um so schwieriger wird es.

Und damit das in meinem Fall auch richtig funktioniert musste ich die Mausinteraktion komplett nachbilden. Sozusagen habe ich dort einen Button komplett nachbilden MÜSSEN damit das so richtig geht wie es soll. Und diese WinProc kann man auch nur dann austauschen, wenn der Button noch nicht erzeugt wurde. Ansonsten fehlen wichtig informationen Darüber.
PS: Radiobuttons und Checkboxen sind für Windows auch nur Button. Nur mit speziellen Flags. ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 13, 2003 16:30 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Achso. Ich hatte vermutet, daß der StartButton nur in WM_PAINT zeichnet.

Eine andere Idee, wäre das ganze Formular mit setparent in der StartButton hineinzusetzen oder in das parent window des StartButtons. Eine Komponente einzeln funktioniert zwar auch, aber dann wird das Ereignis nicht mehr ausgelöst.

Ich habe mal ein Pong Spiel gesehen, bei dem der Ball über den Bildschirm flog und der StartButton der Schläger war und frei am unteren Bildschirmrand bewegt werden konnte. Auch eine interessante Sache.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 13, 2003 19:32 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Na ja vom Prinzip her ist der Button auch nur ein Fenster. Wie Lars meinte könnte man ein Fenster in den Button einpflanzen. Wenn man alle Clickmessages an das Fenster des StartButtons sendet müsste das auch gehen. In das Parent des StartButtons würde zwar auch gehen aber bei gewissen Tastenkombos würde der Button wieder in den Vordergrund fallen. Das ist ja dann auch nicht gerade das Güldene vom Ei.

Aber wie gesagt ich finde solche Lösungen alle nicht so berauschend. Weil das nur halbe Sachen sind. Keine Lösung wird so gut funktionieren, dass diese den Aufwand rechtfertigen würde.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 13, 2003 20:07 
Offline
DGL Member

Registriert: Sa Sep 21, 2002 21:32
Beiträge: 346
Wohnort: Eilsum (Nahe Emden)
Das mit dem parent klingt aber schonma, interessant....
Mit zwei Forms habe ich das ja auch schonmal gemacht (form2.parent := form1), aber wie sollt eman sich das in diesem Falle vorzustellen haben? Ich habe ja nur ein Handle auf ein Fenster bzw Control, nicht aber das Fenster bzw. Control selber.....

_________________
Es sind immer die guten,
welche zu früh von uns gehen müssen...

Meine bislang 13 Open Gl - Tuts findet ihr auf www.dcw-group.net
Neu! Ein großer Teil der Demos nach Kylix übersetzt!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 13, 2003 20:29 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Mit der Funktion SetParent aus der windows.pas. Da die Komponenten auch so eine Methode haben muß man die Unit davor schreiben.
also so in der Art:
windows.setparent(handle,startbuttonhandle);


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 14, 2003 11:14 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Das ist es ja gerade. Sobald du das so tun würdest und jemand auf die Taskleiste (nicht den Button) klickt oder strg+esc drückt. Würde dein Fenster durch die Startleiste verdeckt werden. Wenn es sich überhaupt darüber legen könnte. Aus dem einfach Grund musst du eine Abhängigkeit zwischen den beiden Elementen schaffen. Und das ist nun mal nür über Parent eines Fenster möglich. Wenn sich die Startleiste zum Beispiel bewegen würde. Was durch Benutzereinwirkung ja durchaus möglich ist, dann würde dein Fenster ganz alleine in weiter Flur herrum stehen. Wenn es allerding ein Kindfenster des Buttons ist, dann wird es mit dem Button mitgezogen.

Da musst du einfach mal ein wenig mit rumspielen.

Und noch was zu deinem vorletzten Beitrag. Lasse dich von der TButton (TForm) Klasse nicht iritieren. In Wirklichkeit ist das nur eine Kapselung von einem Handle. Denn für Windows ist ein Button oder Fenster nur ein Handle mit ein paar Eigenschaften. Mit einem Handle kannst du alles ansprechen was du willst. Und du hast theoretisch die volle Hontrolle darüber. Sofern windows das erlaubt.

Ein TForm hat neben der Eigenschaft Parent auch noch eine Eigenschaft ParentWindow und das ist komischer Weise ein HWND. Also ein Handle auf ein Fenster.

PS: Könnte das mal ein lieber netter Admin ins Allgemeine verschieben???


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 15 Queries | GZIP : On ]