AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi [UpdateLayeredWindow] Vergrößerbare Form realisieren
Thema durchsuchen
Ansicht
Themen-Optionen

[UpdateLayeredWindow] Vergrößerbare Form realisieren

Ein Thema von Yheeky · begonnen am 16. Jun 2007 · letzter Beitrag vom 30. Jun 2007
Antwort Antwort
Seite 3 von 3     123   
EWeiss
(Gast)

n/a Beiträge
 
#21

Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren

  Alt 18. Jun 2007, 14:39
Zitat von Yheeky:
Also vom Zeichnen her klappt bei mir alles. Es geht lediglich darum, dass das Image beim Vergrößern der Form, auch nach wie vor die Zeichenfläche der Form benutzt. Das ist irgendwie nicht der Fall, wie man in meinem letzten Posting an dem Bild im Anhang erkennt kann.
Bei deinem Beispiel kann ich das leider auch nicht finden, weil du bei deiner Form auch keine Veränderung der Größe zulässt.
???

Warum klar kannst du die größe verändern.
Unten in der rechten Ecke MouseDown und ziehen.

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#22

Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren

  Alt 18. Jun 2007, 14:55
Zitat von Yheeky:
Ja, habe ich ja versucht, aber bei Form1.OnResize bzw. OnPaint geht´s nicht
Dann kann der Fehler aber so langsam nicht mehr in der VCL oder meinem Sieb von Gedächtnis liegen, sondern definitiv in deinem Code.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#23

Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren

  Alt 18. Jun 2007, 15:07
@EWeiss: Okay, sorry, hatte ich nicht gesehen.

Habe nun das Problem gefunden. Man muss die Größe unter Picture.Graphic noch anpassen, dann geht es:

Delphi-Quellcode:
Image1.Picture.Graphic.Width := Image1.Width;
Image1.Picture.Graphic.Height := Image1.Height;
Danke an alle, die mir bei der Problemlösung geholfen haben
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#24

Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren

  Alt 18. Jun 2007, 16:21
Nun kommt es wieder zum Problem mit der Transparenz
Ich kann auf das Bit vom Typ TBitmap32 nicht zeichnen Wenn ich auf das Canvas zeichnen möchte kommt die Meldung "Zeichnen auf Leinwand nicht erlaubt". Wie mache ich das denn nun?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#25

Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren

  Alt 18. Jun 2007, 17:28
Zitat von Yheeky:
Nun kommt es wieder zum Problem mit der Transparenz
Ich kann auf das Bit vom Typ TBitmap32 nicht zeichnen Wenn ich auf das Canvas zeichnen möchte kommt die Meldung "Zeichnen auf Leinwand nicht erlaubt". Wie mache ich das denn nun?
Ich verstehe nicht so ganz was du vorhast.
Du hast ne Form und willst dieser ein aussehen ala Vista spendieren ? oder was!
Wenn ja dann mach dir ein standart Picture in dem sich einzelne bereiche der Pictures welche du auf
die Form setzen willst befinden.

Dann kannst du über 2 API's auf ein Image kopieren.
Das geht dann über BitBlt und StretchBlt

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#26

Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren

  Alt 18. Jun 2007, 19:01
Zitat von Yheeky:
Wie mache ich das denn nun?
Benutzt man die Graphics32-Lib, ist es nicht unklug, auch die Graphics32-Funktionen zu benutzen . Es existiert keine TCanvas32, alle Routinen sind direkt in TBitmap32 enthalten. Und unter denen wirst du auf jeden Fall etwas Passendes finden (afair besitzt Draw(To) zum Bleistift einige Überladungen mehr als das VCL-Äquivalent).
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#27

Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren

  Alt 18. Jun 2007, 21:33
Okay, danke für den Hinweis, dass ich direkt auf die Funktionen Draw und DrawTo zugreifen muss.
Das habe ich nun gemacht und bin dann nach dem gewohnten Schema vorgegangen, doch leider ist es wohl nur "oberflächlich" gezeichnet werden. Die Form jedenfalls bleibt leer.

Hier der Code:

Delphi-Quellcode:
procedure TfrmMain_Maske.FormCreate(Sender: TObject);
var Alpha : Boolean;
    I : Integer;
    ObenLinks, ObenMitte, ObenRechts,
    RandLinks, RandRechts,
    UntenLinks, UntenMitte, UntenRechts : TBitmap32;
    ObenLinksStream, ObenMitteStream, ObenRechtsStream,
    RandLinksStream, RandRechtsStream,
    UntenLinksStream, UntenMitteStream, UntenRechtsStream : TResourceStream;
begin
  // Hintergrundbild erstellen
  Background := TBitmap32.Create;
  Background2 := TBitmap32.Create;

  // Formkacheln erstellen
  ObenLinks := TBitmap32.Create;
  ObenMitte := TBitmap32.Create;
  ObenRechts := TBitmap32.Create;

  RandLinks := TBitmap32.Create;
  RandRechts := TBitmap32.Create;

  UntenLinks := TBitmap32.Create;
  UntenMitte := TBitmap32.Create;
  UntenRechts := TBitmap32.Create;

  try
   // Formkacheln laden
   ObenLinksStream := TResourceStream.Create(Hinstance, 'ObenLinks', PChar('RC_DATA'));
   ObenMitteStream := TResourceStream.Create(Hinstance, 'ObenMitte', PChar('RC_DATA'));
   ObenRechtsStream := TResourceStream.Create(Hinstance, 'ObenRechts', PChar('RC_DATA'));

   RandLinksStream := TResourceStream.Create(Hinstance, 'RandLinks', PChar('RC_DATA'));
   RandRechtsStream := TResourceStream.Create(Hinstance, 'RandRechts', PChar('RC_DATA'));

   UntenLinksStream := TResourceStream.Create(Hinstance, 'UntenLinks', PChar('RC_DATA'));
   UntenMitteStream := TResourceStream.Create(Hinstance, 'UntenMitte', PChar('RC_DATA'));
   UntenRechtsStream := TResourceStream.Create(Hinstance, 'UntenRechts', PChar('RC_DATA'));

   LoadPNGIntoBitmap32(ObenLinks, ObenLinksStream, Alpha);
   LoadPNGIntoBitmap32(ObenMitte, ObenMitteStream, Alpha);
   LoadPNGIntoBitmap32(ObenRechts, ObenRechtsStream, Alpha);

   LoadPNGIntoBitmap32(RandLinks, RandLinksStream, Alpha);
   LoadPNGIntoBitmap32(RandRechts, RandRechtsStream, Alpha);

   LoadPNGIntoBitmap32(UntenLinks, UntenLinksStream, Alpha);
   LoadPNGIntoBitmap32(UntenMitte, UntenMitteStream, Alpha);
   LoadPNGIntoBitmap32(UntenRechts, UntenRechtsStream, Alpha);

   // FormSkin in Kacheln auf die Form zeichnen
   // Oben links
   Background.Draw(0,0, ObenLinks);

   // Oben Mitte
   for I := ObenLinks.Width to Self.ClientWidth-ObenRechts.Width do
   Background.Draw(I,0, ObenMitte);

   // Oben Rechts
   Background.Draw(Self.ClientWidth-ObenRechts.Width,0, ObenRechts);

  finally
   ObenLinksStream.Free;
   ObenMitteStream.Free;
   ObenRechtsStream.Free;

   RandLinksStream.Free;
   RandRechtsStream.Free;

   UntenLinksStream.Free;
   UntenMitteStream.Free;
   UntenRechtsStream.Free;
  end;

  SetWindowLong(Handle, GWL_EXSTYLE,
  GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED {or WS_EX_TRANSPARENT});
  // WS_EX_TRANSPARENT macht das Fenster für Mausklicks transparent

  BlendF.BlendOp := AC_SRC_OVER;
  BlendF.BlendFlags := 0;
  BlendF.SourceConstantAlpha := 255;
  BlendF.AlphaFormat := AC_SRC_ALPHA;
  P := Point(0, 0);
  Size.cx := Background.Width;
  Size.cy := Background.Height;

  UpdateLayeredWindow(Handle, 0, nil, @Size, Background.Handle, @P, 0, @BlendF, ULW_ALPHA);

  Left := 0;
  Top := 0;

end;
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#28

Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren

  Alt 19. Jun 2007, 13:00
Hatte die LoadPNGIntoBitmap32 - Aufrufe im Quellcode vergessen...dachte schon das Problem sei nun gelöst, aber leider gelingt mir das "Zusammensetzen" einer PNG-Datei mit anschließendem Zeichnen über UpdateLayeredWindow immer noch nicht.
Wenn jemand eine Idee hat einfach posten!
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#29

Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren

  Alt 21. Jun 2007, 15:17
*push*

Keiner eine Idee oder eine Erklärung warum das nicht funktioniert?
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#30

Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren

  Alt 30. Jun 2007, 19:24
Hi,

so, ich bin inzwischen etwas weiter gekommen. Soweit funktioniert das Zeichnen, aber der Alpha-Kanal ist irgendwie nicht richtig. Sind das wommöglich die falschen Alpha-Bilder?
Habe mal ein Beispiel geschrieben. Vielleicht kann sich das mal einer ansehen und mir einen Tipp geben, woran das liegt, dass das Bild nicht richtig transparent angezeigt wird. Wäre super, danke!

Noch eine Info zum Beispiel: Mit den Pfeiltasten "Hoch" und "Runter" wird die Form in der Größe verändert.
Angehängte Dateien
Dateityp: zip png_alpha_184.zip (287,9 KB, 51x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 00:36 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