AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi [Schattiere Fenster] - Schattierung ein/aus schalten
Thema durchsuchen
Ansicht
Themen-Optionen

[Schattiere Fenster] - Schattierung ein/aus schalten

Ein Thema von xZise · begonnen am 9. Apr 2007 · letzter Beitrag vom 9. Apr 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

[Schattiere Fenster] - Schattierung ein/aus schalten

  Alt 9. Apr 2007, 08:51
Ich habe folgenden Code aus dem SwissDelphicenter benutzt um ein Fenster ein Schatten zu versehen:
Delphi-Quellcode:
procedure TInfoBox.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  if not (csDesigning in ComponentState) then
  begin
    Params.WindowClass.style := Params.WindowClass.style or CS_DROPSHADOW;
  end;
end;
(siehe SwissDelphiCenter)

Nun funktioniert das wunderbar, aber ich würde gerne den Schatten ein/ausschalten lassen wollen ... Wie bekommt man dass hin?
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: [Schattiere Fenster] - Schattierung ein/aus schalten

  Alt 9. Apr 2007, 09:28
Es könnte mit MSDN-Library durchsuchenSetClassLong/GCL_STYLE funktionieren, allerdings habe ich es nicht getestet:
Delphi-Quellcode:
if FDropShadow then
  SetClassLong(Handle, GCL_STYLE, GetClassLong(hWnd, GCL_STYLE) or CS_DROPSHADOW)
else
  SetClassLong(Handle, GCL_STYLE, GetClassLong(hWnd, GCL_STYLE) and not CS_DROPSHADOW);
Ggf. musst du dann selbst darum kümmern, den vom Schatten überdeckten Hintergrund neu zeichnen zu lassen (Parent.Invalidate?).
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#3

Re: [Schattiere Fenster] - Schattierung ein/aus schalten

  Alt 9. Apr 2007, 09:34
Hallo,

einschalten kannst Du das so:
Delphi-Quellcode:
function ActivateDropShadow(const Handle: THandle): Boolean;

  function IsXP: Boolean;
  begin
    Result := (Win32Platform = VER_PLATFORM_WIN32_NT) and
      CheckWin32Version(5, 1);
  end;

const
  SPI_SETDROPSHADOW = $1025;
  CS_DROPSHADOW = $00020000;

var
  NewLong: Cardinal;
  B: Boolean;
begin
  B := True;
  if IsXP and SystemParametersInfo(SPI_SETDROPSHADOW, 0, @B, 0) then
  begin
    NewLong := GetClassLong(Handle, GCL_STYLE);
    NewLong := NewLong or CS_DROPSHADOW

    Result := SetClassLong(Handle, GCL_STYLE, NewLong) <> 0;
    if Result then
      SendMessage(Handle, CM_RECREATEWND, 0, 0);
  end else
    Result := False;
end;
Ausschalten hab ich leider noch nicht geschafft. Wenn das jemand weiß, ich bin sehr interessiert.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#4

Re: [Schattiere Fenster] - Schattierung ein/aus schalten

  Alt 9. Apr 2007, 10:22
Zitat von xaromz:
Ausschalten hab ich leider noch nicht geschafft.
Wieso ?

Delphi-Quellcode:
// ...
begin
  NewLong := GetClassLong(Handle, GCL_STYLE);
  NewLong := NewLong and not CS_DROPSHADOW;
  // ...
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
LizardKaiser

Registriert seit: 18. Feb 2007
Ort: Kassel
25 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: [Schattiere Fenster] - Schattierung ein/aus schalten

  Alt 9. Apr 2007, 10:44
Hey,

ein kleiner Tip: xor-Operator

also:
Delphi-Quellcode:
// ersetze OR durch XOR um zu "togglen"
NewLong := NewLong xor CS_DROPSHADOW;

...
// am ende der funktion ist natürlich ein redraw nötig:
SetWindowPos(Handle, 0, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE or SWP_DRAWFRAME);
müsste so funktionieren
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#6

Re: [Schattiere Fenster] - Schattierung ein/aus schalten

  Alt 9. Apr 2007, 11:03
xor hm, dann müsste man noch auf den Style prüfen ob er enthalten ist etc.


@xaromz, ich würde deine Funktion anders benennen:

Delphi-Quellcode:
function WindowShadow(const Handle: THandle; Mode: Boolean): Boolean;

  function IsXP: Boolean;
  begin
    Result := (Win32Platform = VER_PLATFORM_WIN32_NT) and
      CheckWin32Version(5, 1);
  end;

const
  SPI_SETDROPSHADOW = $1025;
  CS_DROPSHADOW = $00020000;

var
  ClassLong: Cardinal;
begin
  if IsXP and SystemParametersInfo(SPI_SETDROPSHADOW, 0, Pointer(TRUE), 0) then
  begin
    ClassLong := GetClassLong(Handle, GCL_STYLE);

    if Mode
      then ClassLong := ClassLong or CS_DROPSHADOW
      else ClassLong := ClassLong and not CS_DROPSHADOW;

    Result := SetClassLong(Handle, GCL_STYLE, ClassLong) <> 0;
    if Result then
      SendMessage(Handle, CM_RECREATEWND, 0, 0);

  end else
    Result := False;
end;

... mal sehen wie es mit dem XOR-Dinges werden könnte...
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#7

Re: [Schattiere Fenster] - Schattierung ein/aus schalten

  Alt 9. Apr 2007, 11:10
Zitat von xaromz:
Hallo,

einschalten kannst Du das so:
Delphi-Quellcode:
function ActivateDropShadow(const Handle: THandle): Boolean;

  function IsXP: Boolean;
  begin
    Result := (Win32Platform = VER_PLATFORM_WIN32_NT) and
      CheckWin32Version(5, 1);
  end;

const
  SPI_SETDROPSHADOW = $1025;
  CS_DROPSHADOW = $00020000;

var
  NewLong: Cardinal;
  B: Boolean;
begin
  B := True;
  if IsXP and SystemParametersInfo(SPI_SETDROPSHADOW, 0, @B, 0) then
  begin
    NewLong := GetClassLong(Handle, GCL_STYLE);
    NewLong := NewLong or CS_DROPSHADOW

    Result := SetClassLong(Handle, GCL_STYLE, NewLong) <> 0;
    if Result then
      SendMessage(Handle, CM_RECREATEWND, 0, 0);
  end else
    Result := False;
end;
Ausschalten hab ich leider noch nicht geschafft. Wenn das jemand weiß, ich bin sehr interessiert.

Gruß
xaromz
Danke... Aber:
Zitat:
[Pascal Fehler] infobox.pas(59): E2003 Undefinierter Bezeichner: 'Win32Platform'
PS: Ich habe es mal mit xor probiert Aber mit dem komplieren ^^
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#8

Re: [Schattiere Fenster] - Schattierung ein/aus schalten

  Alt 9. Apr 2007, 11:13
Hallo,

Zitat von turboPASCAL:
Zitat von xaromz:
Ausschalten hab ich leider noch nicht geschafft.
Wieso ?

Delphi-Quellcode:
// ...
begin
  NewLong := GetClassLong(Handle, GCL_STYLE);
  NewLong := NewLong and not CS_DROPSHADOW;
  // ...
Hast Du das auch ausprobiert? Sieht lustig aus. Das Form hat keinen Schatten mehr, aber der alte Schatten ist auf dem Screen "festgenagelt" .

@xZise: SysUtils einbinden.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#9

Re: [Schattiere Fenster] - Schattierung ein/aus schalten

  Alt 9. Apr 2007, 11:20
Hi xaromx!
Danke Die Hilfe meinte irgendwas mit Indy

Also mit xor funzt es wunderbar Nur isses leider eben mit dem festgenagelten Schatten etwas unschön xD
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#10

Re: [Schattiere Fenster] - Schattierung ein/aus schalten

  Alt 9. Apr 2007, 13:36
Zitat von xaromz:
Hast Du das auch ausprobiert?
Japp.

Zitat von xaromz:
Sieht lustig aus. Das Form hat keinen Schatten mehr, aber der alte Schatten ist auf dem Screen "festgenagelt"
Japp.

Äh, wenn man das Fenster Minimiert und dann wieder herstellt ist das Schattenartefact wech.
So richtig Versteh ich den Mechhanismus noch nicht. Die Funktion macht das was sie machen soll
nicht immer 100%.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 05:28 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