Schlagschatten für Fenster/Objekte?

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Schlagschatten für Fenster/Objekte?

Beitrag von Tom »

Huhu.

Es muß eine Möglichkeit (ab Windows 2000) geben, Fenster mit einem Schlagschatten zu versehen. Ich finde die API-Funktion(en) dafür aber nicht. Kennt sie jemand?
Herzlich,
Tom
thomas
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 116
Registriert: Fr, 23. Sep 2005 16:07
Wohnort: Bad Oldesloe
Kontaktdaten:

Beitrag von thomas »

Hallo Tom.

Schau doch mal hier nach. http://msdn.microsoft.com/library/deu/d ... nlp_rp.asp

Gruß

Thomas
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, Thomas.

:lol: Das hatte ich auch schon gefunden, aber ich will nicht auf die API von Visual FoxPro zugreifen, sondern auf die Windows-API. :?:
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Tom,

öhm, was ist ein Schlagschatten?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, Manfred.

Ein halbtransparenter Schatten an einem Fenster/Objekt. Wie in diesem Beispiel hier:

Bild
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Tom,

danke für die Mühe, aber ich kann keinen halbtransparenten Schatten erkennen. Brille habe ich geputzt, hat aber nicht geholfen.

Vielleicht liegt es am Firefox.

Egal, war nur ne Frage so am Rande. Mach Dir keine weitere Mühe.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Beitrag von Tom »

@Manfred: Hinter dem eingekreisten Tooltip.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

das hatte ich vermutete, dass es sowas ist, aber ich habe es zum Verrecken nicht gesehen. Altersmuff..... :evil:

Hm, mit den Tools geht das auf Textbasis. Schade
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Die Anzeige von Schlagschatten für Menüs ist unter XP einstellbar. Das es Schlagschatten auch für Dialoge bzw. Fenster geben soll, ist mir neu. Zumindest habe dafür noch keine Einstellung unter Windows finden können.

Wird über XP die Anzeige von Schlagschatten aktiviert, gilt dies auch für xbase-Programme.
Zuletzt geändert von Lewi am Mi, 15. Feb 2006 10:05, insgesamt 1-mal geändert.
boddy
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 22
Registriert: Fr, 30. Sep 2005 11:39
Wohnort: Berlin

Beitrag von boddy »

Hallo Tom,

soweit ich gehört (gelesen) habe, sind Fenster seit Windows XP mit Schlagschatten ausgestattet.

Steuern kann man sie mit SetClassLong (SetClassLongA) bzw. GetClassLong (GetClassLongA) aus der user32.dll über den GCL_STYLE Parameter.

gruß
boddy
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Beitrag von Tom »

Danke, Boddy, das waren sie. :)

Also, API-Funktionen gefunden. Das ist der Korpus:

Code: Alles auswählen

#define GCL_STYLE -26
#define CS_DROPSHADOW 0x20000

DLLFUNCTION GetClassLongA( hWnd, nIndex ) ;
USING STDCALL FROM USER32.DLL
DLLFUNCTION SetClassLongA( hWnd, nIndex, dwNewLong ) ;
USING STDCALL FROM USER32.DLL

FUNCTION SetDropShadow(nHandle)
LOCAL nNewStyle
IF !"Windows XP" $ Os() // läuft nur mit XP
  RETURN nil
ENDIF
SetClassLongA(nHandle,GCL_STYLE,0) // Reset des Styles
nNewStyle := GetClassLongA(nHandle,GCL_STYLE)+CS_DROPSHADOW // Dropshadow-Wert ermitteln
SetClassLongA(nHandle,GCL_STYLE,nNewStyle) // Dropshadow setzen
RETURN nil
Aufruf:

Code: Alles auswählen

... neues Fensterobjekt erzeugen

nHandle := oDlg:GetHwnd()
SetDropShadow(nHandle)
oDlg:Show()
Das funktioniert auch ganz gut, aber offensichtlich "erben" alle im Folgenden entstehenden Fensterobjekte diesen Style, und das ist nicht im Sinne des Erfinders. Sieht jemand den Fehler? :?

Edit: Außerdem verlangsamt sich die Applikation (Fensteraufbau) spürbar. Irgendwas ist da noch im Busch...
Herzlich,
Tom
olaf870
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 128
Registriert: Mi, 26. Okt 2005 18:41
Wohnort: Berlin
Kontaktdaten:

Beitrag von olaf870 »

Hi Tom,
bei deinem Code habe ich ein ganz anderes Problem. Der Rahhmen verschwindet von alleine wieder. Auf den folgenden ist er auch nicht zu sehen.

Wenn das bei Dir nicht passiert, dann mußt Du ihn wohl manuell ausschalten. Z.B. ev. mit:

Code: Alles auswählen

#define SPI_SETDROPSHADOW	0x1025
SystemParametersInfo(SPI_SETDROPSHADOW, ,.F. )
Gruß
Olaf
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, Olaf.

Ich glaube, ich habe die Ursache gefunden; nachher mehr.

Der Vorschlag, quasi die Systemsteuerung zu übernehmen/überschreiben, ist zwar originell, aber geht m.E. ein bißchen zu weit. Trotzdem danke!
Herzlich,
Tom
Antworten