Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi [UpdateLayeredWindow] Vergrößerbare Form realisieren (https://www.delphipraxis.net/94113-%5Bupdatelayeredwindow%5D-vergroesserbare-form-realisieren.html)

Khabarakh 17. Jun 2007 14:50

Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren
 
Erstelle ein PNG, das den kleinstmöglichen Rahmen beinhaltet. Daraus kannst du nun alle benötigten Größen erstellen, indem du die Kanten streckst (kachelst). Es seien 1,2,3,4 die Ecken und - & | die Kanten, dann kannst du aus dem Ausgangsbitmap
Code:
1-2
| |
4-3
(kleiner geht es nur noch, wenn du einfach nur eine Ecke speicherst und diese dann drehst)
z.B. soetwas generieren lassen:
Code:
1-----------2
|           |
|           |
|           |
|           |
|           |
4-----------3

Yheeky 17. Jun 2007 15:56

Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Okay, nächstes Problem ;-)
Ich habe mir mal eine neue Testanwendung geschrieben, mit der ich die einzelnen Teile zeichnen lasse. Die Funktion Zeichnen sieht so aus:

Delphi-Quellcode:
procedure TForm1.Zeichnen;
var ObenLinks, ObenMitte, ObenRechts : TImage;
    FormBreite, ObenLinksBreite,
    ObenMitteBreite, ObenRechtsBreite : SmallInt;
    I: Integer;
begin
Image1.Canvas.FillRect(Rect(0, 0, Image1.Width, Image1.Height));

ObenLinks := TImage.Create(Form1);
ObenMitte := TImage.Create(Form1);
ObenRechts := Timage.Create(Form1);

ObenLinks.Picture.LoadFromFile('C:\Dokumente und Einstellungen\Chris\Desktop\SkinForm\ObenLinks.png');
ObenMitte.Picture.LoadFromFile('C:\Dokumente und Einstellungen\Chris\Desktop\SkinForm\ObenMitte.png');
ObenRechts.Picture.LoadFromFile('C:\Dokumente und Einstellungen\Chris\Desktop\SkinForm\ObenRechts.png');

ObenLinksBreite := ObenLinks.Picture.Width;
ObenMitteBreite := ObenMitte.Picture.Width;
ObenRechtsBreite := ObenRechts.Picture.Width;

FormBreite := Image1.Width;

// Ecke Links oben zeichnen
Image1.Canvas.Draw(0,0, ObenLinks.Picture.Graphic);

// Mitte zeichnen
for I := ObenLinksBreite to FormBreite - ObenRechtsBreite-1 do
Image1.Canvas.Draw(I, 0, ObenMitte.Picture.Graphic);

// Ecke Rechts oben zeichnen
Image1.Canvas.Draw(FormBreite - ObenRechtsBreite,0, ObenRechts.Picture.Graphic);

end;
Vom Prinzip her funktioniert es schon, aber wenn ich die Form vergrößere, scheint sich das Programm nur die Position vom Image zu merken, die es beim Start hatte (s.Screenshot). Image1 ist bei Align auf alClient gestellt.

Khabarakh 17. Jun 2007 16:14

Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren
 
Rufst du "Zeichnen" auch im OnPaint des Images auf? Sonst ist es logisch, dass der Inhalt ein wenig statisch ist ;) .

Yheeky 17. Jun 2007 17:01

Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren
 
TImage hat kein OnPaint :???:

Khabarakh 17. Jun 2007 17:15

Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren
 
Tut mir leid, habe die VCL nicht (mehr) im Kopf und auch keine OH installiert - versuch es mal mit OnResize, sollte dieses Event existieren :mrgreen: .

Yheeky 17. Jun 2007 17:43

Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren
 
Das Image hat kein Event, was das Zeichnen oder das Verändern der Größe abfragt.
Was nun? :roll:

Khabarakh 17. Jun 2007 17:58

Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren
 
Das Image bezieht seine Größe doch von einem gewissen anderen Control. Also könnte man statt Image.OnResize ebenso gut auf das Event jenes gewissen Controls zurückgreifen ;) .

Memo @myself: Die Unterschiede zwischen VCL und Windows Forms sind doch größer, als ich sie in Erinnerung hatte :duck: .

Yheeky 18. Jun 2007 00:24

Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren
 
Ja, habe ich ja versucht, aber bei Form1.OnResize bzw. OnPaint geht´s nicht :-(

EWeiss 18. Jun 2007 06:36

Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren
 
Im grunde ist das doch nichts anderes als ein Skin der auf einer Form aufgesetzt wird.
Schau dir mal mein beispiel an vielleicht kannst du was von brauchen,.

Welche Bitmaps du letztendlich verwendest liegt in deinen ermessen.
Ist aber vom händling so gut wie das selbe

http://www.delphipraxis.net/download.php?id=22588

gruss Emil

Yheeky 18. Jun 2007 09:14

Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:36 Uhr.
Seite 2 von 3     12 3      

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