Autor Beitrag
anno2007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68

Win 7, Ubuntu
Delphi XE
BeitragVerfasst: Mi 08.12.10 16:00 
Hey,
ich benutze Delphi XE. Also kann ich PNG Bilder direkt einbinden.
Jetzt würde ich gerne die Form unsichtbar machen und nur noch das Hintergrundbild als GUI benutzen.
Kann mir da vielleicht jemand einen Ansatz zeigen? Ich habe bis jetzt nur ein Beispiel mit BMP gesehen, mit dem ich allerdings nicht wirklich klar komme und dort wird der Alpha Channel nicht richtig unterstützt.

Wäre echt toll, wenn jemand einen Ansatz hätte.
Vielen dank,
anno2007
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Mi 08.12.10 16:32 
user profile iconanno2007 hat folgendes geschrieben Zum zitierten Posting springen:
Jetzt würde ich gerne die Form unsichtbar machen und nur noch das Hintergrundbild als GUI benutzen.
Wenn ich Dich richtig verstanden habe, liegt das Bild auf dem Form1. Dann könnte man bei der Darstellung von Form1 Teile wegschneiden. Beispiel für ein Formular mit abgerundeten Ecken:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.FormCreate(Sender: TObject);
var
  Rechteck : HRgn;
begin
  Rechteck := CreateRoundRectRgn(006404806060);
  SetWindowRgn(Form1.Handle, Rechteck, True);
end;
In der Hilfe solltest Du unter dem Suchbegriff "CreateRoundRectRgn" Verweise auf weitere Funktionen finden. Damit könnte man dem Formular auch die Form eines Weihnachtsbaumes, eines Kreises oder gar eines Osterhasen geben. ;-)

Für diesen Beitrag haben gedankt: Xion
anno2007 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68

Win 7, Ubuntu
Delphi XE
BeitragVerfasst: Mi 08.12.10 17:20 
Hey, ja, das ist schonmal ein Anfang. Ja, das Bild liegt auf der Form.

So ähnlich wird das auch hier gemacht:
www.delphi-central.c...itmapShapedForm.aspx

Allerdings funktioniert das mit Alpha Channel nicht. Das erzeugt Kanten, ich bräuchte transparenz.

Ich hab jetzt noch was gefunden:
melander.dk/articles/alphasplash2/2/

Allerdings werden dort Bibliotheken benutzt. Ich bekomme nicht mal das Beispiel zum laufen.
Habt ihr noch ne idee?
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Mi 08.12.10 17:30 
Kommt drauf an wie lange du den Splash-Screen anzeigen willst, aber ich hab schon gesehen, dass der Splash Screen einfach nur hingemalt wird (sobald man ein Fenster drüberschiebt ist er weg). Das funktioniert, solange du den nicht 1min anzeigen willst.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
anno2007 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68

Win 7, Ubuntu
Delphi XE
BeitragVerfasst: Mi 08.12.10 21:56 
Nee, das soll meine GUI werden.
Also ich will auch noch Controls drauf machen.

Splash Screen war vielleicht bisschen falsch gewählt :).
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Do 09.12.10 01:14 
user profile iconanno2007 hat folgendes geschrieben Zum zitierten Posting springen:
Habt ihr noch ne idee?
Meinst Du das in etwa so, wie im folgenden Beispielprogramm? Das Bild zeigt übrigens meine Schäferhündin.
Hier noch der Source dazu:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, jpeg, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    procedure FormActivate(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Close;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
  // Im Objektinspektor bei Form1 setzen:
  //    AlphaBlend := true;
  //    AlphaBlendValue := 0;
  while AlphaBlendValue < 255 do
    begin
      AlphaBlendValue := AlphaBlendValue + 1;
      Form1.Update;
      Sleep(20);
    end;
  // Der Button muß auf dem Image1 liegen, sonst wird er mit dem Fensterrand
  // weggeschnitten.
  Button1.Visible := true;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  Rechteck : HRgn;
begin
  // Form1 wird so beschnitten, daß nur noch Image1 mit dem Bild sichtbar ist.
  Rechteck := CreateRectRgn(1738560456);
  SetWindowRgn(Form1.Handle, Rechteck, True);
end;

end.
anno2007 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68

Win 7, Ubuntu
Delphi XE
BeitragVerfasst: Do 09.12.10 14:41 
Hmm,
ich meine das eigentlich so wie die Links die ich gepostet habe.

user defined image

Also ich habe ein PNG mit Alpha Channel, das die GUI darstellen soll.
Allerdings komm ich damit gar nicht klar.

Aber danke schonmal für deine Bemühungen.
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Do 09.12.10 15:34 
Nachfrage: Also besteht die GUI praktisch nur aus der 7 und dem Schriftzug "Delphi"? Und soll das dann wie in meinem Beispiel eingeblendet werden?
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: Do 09.12.10 15:54 
In meiner Delphi Version hat eine TForm die Eigenschaft TransparentColor und TranspaentColorValue, wenn du BorderStyle auf bsNone setzt, kannst du damit genau das erreichen, was du vorhast. Scheint aber alles nicht sonderlich schnell zu sein.
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Do 09.12.10 16:07 
Ließ dir mal das hier durch. Ich denke es könnte dir helfen.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
anno2007 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68

Win 7, Ubuntu
Delphi XE
BeitragVerfasst: Do 09.12.10 20:57 
@Gerd Kayser

Das "Delphi 7" und der Schriftzug ist einfach ein Bild. Mein Bild später ist eine PNG Datei mit Alpha Channel, die ich als GUI benutzen will. Die Form soll auch nicht eingeblendet werden oder so, ich will nur das Bild als Hintergrund.
Das Bild soll meine GUI sein.

@Jann1k, damit bleibt aber die GUI bei mir irgendwie erhalten.

@elundril, das ist schon genau das was ich suche. Ich bekomme im Moment die gr32 nicht zum laufen unter Delphi XE, aber das bekomme ich schon noch hin.
Meine Hoffnung war halt, dass ich keine externe Bibliothek verwenden muss, weil Delphi PNG ja unterstützt.
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: Do 09.12.10 21:35 
Zitat:
@Jann1k, damit bleibt aber die GUI bei mir irgendwie erhalten.


Mach mal nen Screenshot wie das aussieht, wenn du TransparentColor auf true setzt und TransparentColorValue auf die farbe deiner TForm (am besten beides auf was unbenötigtes wie clFuchsia setzen).
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Do 09.12.10 23:17 
meinst Du in der Art?
www.bummisoft.de/download/transtest.zip
ist Resizeable

die entscheidenden Codeteile sind
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
  SetWindowLong(handle, GWL_EXSTYLE, exStyle or WS_EX_LAYERED);



   With blendFunc do
   begin
     AlphaFormat := 1//=AC_SRC_ALPHA;
     BlendFlags := 0;
     BlendOp := AC_SRC_OVER;
     SourceConstantAlpha := 255 - FAlphaValue;  // here you can set Alpha
   end;

   UpdateLayeredWindow(Handle, DC, @DestPoint, @winSize, Fbackimage.Canvas.Handle,  @srcPoint,FSheetColor, @blendFunc, 2);//=ULW_ALPHA


Allerdings mußt Du Controls dann wenn selbst gemacht präparieren, wenn Fremd reinfaken...

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
anno2007 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68

Win 7, Ubuntu
Delphi XE
BeitragVerfasst: Fr 10.12.10 00:56 
Hey,
@Jann1k, es funktioniert nach deiner beschreibung, allerdings funktioniert die Transparenz im Bild nicht.

@bummi, das sieht echt gut aus!
Ich weis nur leider gar nicht wie ich das implementieren soll.

was is blendFunc?
Und wo muss SetWindowLong, UpdateLayeredWindow?

Ich danke echt für eure Gedult :) mit mir habt ihrs schon schwer.