Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TForm im aussehn ändern? (https://www.delphipraxis.net/103858-tform-im-aussehn-aendern.html)

Clane 22. Nov 2007 20:17


TForm im aussehn ändern?
 
Ich eine "Tochter" von TForm erstellen welches in form z.b. eines Herzes ist ?? Also eine TForm in herzform ??

MfG Clane

mkinzler 22. Nov 2007 20:21

Re: TForm im aussehn ändern?
 
Ja. Indem du eine Form mit Tranzparenz erstellst und dann ein Hintergrundbild mit tranzparenten Randteilen verwendest.

Clane 22. Nov 2007 20:34

Re: TForm im aussehn ändern?
 
wie gehts das genau ?? kleines tut oder sowas wäre hilfreicht hab mich noch nie sooo tief in die TFormen gewagt

mkinzler 22. Nov 2007 20:40

Re: TForm im aussehn ändern?
 
http://www.dsdt.info/tipps/?id=9
http://www.dsdt.info/tipps/?id=241

Clane 22. Nov 2007 20:42

Re: TForm im aussehn ändern?
 
ja nur mit poligonen kann ich schlecht n herz machen .... kann ich als rgn auch eine alphamap nehmen ?

mkinzler 22. Nov 2007 20:45

Re: TForm im aussehn ändern?
 
http://www.torry.net/vcl/forms/nonrect/tdformshape.zip
http://www.torry.net/vcl/forms/nonrect/vwimageshape.zip

Popov 22. Nov 2007 21:34

Re: TForm im aussehn ändern?
 
Zitat:

Zitat von mkinzler
Ja. Indem du eine Form mit Tranzparenz erstellst und dann ein Hintergrundbild mit tranzparenten Randteilen verwendest.

Ist nicht böse gemeint, aber das mit der Transparenz ist leider eine Unsitte und nicht die wirkliche Art wie man es machen sollte.

@Clane

Der richtige Weg um dem Formular eine Form zu geben sind Regionen. Da wird das Formular zugeschnitten.

Hier ein Beispiel das das Prinzip anzeigt. Die betreffende Funktion zu Berechnung der Region ist langsam. Der Code stammt aus meinem Beispiele Ordner wo es eher um das Prinzip als um Effizienz geht. Wenn man das mit einer vernünftigen Geschwindigkeit machen will, dann sollte man es mit ScanLine machen. Hier im Beispiel habe ich es mit Pixels gemacht, da mir die Geschwindigkeit nicht wichtig war sondern das Verständnis.

Wenn du keine Erfahrung mit ScanLine hast, dann sag bescheid und ich erstelle dir eine bessere Funktion.

Im Beispiel wird eine Beispiel-Bitmap aus Text erstellt und alles drumherum wird weggeschnitten.

Delphi-Quellcode:
var
  RGN: THandle;

function CreateRGN(Bmp: TBitmap; TransparentColor: TColor): THandle;
var
  X, Y: Integer;
  PixRGN: THandle;
begin
  Result := CreateRectRGN(0, 0, Bmp.Width, Bmp.Height);

  for Y := 0 to Bmp.Height - 1 do
    for X := 0 to Bmp.Width - 1 do
      if Bmp.Canvas.Pixels[X, Y] = TransparentColor then
      begin
        PixRGN := CreateRectRGN(X, Y, X + 1, Y + 1);
        try
          CombineRGN(Result, Result, PixRGN, RGN_DIFF);
        finally
          DeleteObject(PixRGN);
        end;
      end;
end;

//Erstellt nur eine Beispiel-Bitmap mit einem Text (Font: Arial, Fett, 72)
procedure BeispielBitmapErstellen(Bmp: TBitmap);
var
  MyText: String;
begin
  MyText := 'Delphi Regio';

  //Bitmap Teil (eine Beispiel-Bitmap mit einem Text wird erstellt)
  Bmp.Canvas.Font.Name := 'Arial';
  Bmp.Canvas.Font.Size := 72;
  Bmp.Canvas.Font.Style := Bmp.Canvas.Font.Style + [fsBold];
  Bmp.Height := Bmp.Canvas.TextHeight(MyText);
  Bmp.Width := Bmp.Canvas.TextWidth(MyText);
  Bmp.Canvas.TextOut(0, 0, MyText);
end;


procedure TForm1.FormDestroy(Sender: TObject);
begin
  //Wieder freigeben
  DeleteObject(RGN);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Bmp: TBitmap;
begin
  Button1.Enabled := False;
 
  Color := clRed;

  Bmp := TBitmap.Create;
  try
    //Bitmap erstellen
    BeispielBitmapErstellen(Bmp);

    //Größe des Formulars an Bitmap anpassen
    ClientHeight := Bmp.Height;
    ClientWidth := Bmp.Width;

    //Region erstellen
    RGN := CreateRGN(Bmp, Bmp.Canvas.Pixels[0, 0]);

    //Zeichenbereich eines Fensters setzen
    SetWindowRGN(Handle, RGN, True);
  finally
    Bmp.Free;
  end;
end;

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

Clane 22. Nov 2007 21:50

Re: TForm im aussehn ändern?
 
das ist doch mal ne richtig gute hilfe allerdings versteh ich net wie ich da jezt da herz mache ??

mkinzler 22. Nov 2007 21:52

Re: TForm im aussehn ändern?
 
Na als das Bitmap.

Clane 22. Nov 2007 21:55

Re: TForm im aussehn ändern?
 
als ganz normales bitmap in der var da ?? richtig oda ??

mkinzler 22. Nov 2007 21:58

Re: TForm im aussehn ändern?
 
Ja, statt dem Beispielbitmap, welches hier zur Laufzeit erzeugt wird ein vorhandenes laden.

Clane 22. Nov 2007 22:00

Re: TForm im aussehn ändern?
 
aso ja kla ^^ sry bin heute wohl bissel verpeilt funzt super danke

Popov 22. Nov 2007 22:01

Re: TForm im aussehn ändern?
 
Zitat:

Zitat von Clane
als ganz normales bitmap in der var da ?? richtig oda ??

Was ist "oda"?

Die Bitmap hat eine Art transparente Farbe. Diese Farbe dient dazu zu bestimmen was nicht Teil der neunen Form sein soll. Dese Farbe wird weggeschnitten.

Guck dir das Beispiel selbst genau an, studiere es. Es ist wirklich sehr einfach geschrieben. Eigentlich kann man es nicht mißverstehen.

Clane 24. Nov 2007 10:11

Re: TForm im aussehn ändern?
 
soweit funktioniert das alles danke dafür schonmal aber ich bekomme das nicht compiliert ....

Zitat:

[DCC Fehler] Unit1.pas(54): E2008 Inkompatible Typen
betreffende stelle

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);

begin
  Color := clRed;

  try
        //Bitmap erstellen
   

//Fehler
AssignFile(Bmp, 'testbmp.bmp');
//Fehler
 

   //Größe des Formulars an Bitmap anpassen
    ClientHeight := Bmp.Height;
    ClientWidth := Bmp.Width;

    //Region erstellen
    RGN := CreateRGN(Bmp, Bmp.Canvas.Pixels[0, 0]);

    //Zeichenbereich eines Fensters setzen
    SetWindowRGN(Handle, RGN, True);
  finally
    Bmp.Free;
  end;
end;

end.

mkinzler 24. Nov 2007 10:12

Re: TForm im aussehn ändern?
 
.LoadFromFile()

Clane 24. Nov 2007 10:23

Re: TForm im aussehn ändern?
 
danke so jetz geht alles so wie es soll auch mit eigenen bitmaps ^^ danke

hedie 4. Jan 2008 13:09

Re: TForm im aussehn ändern?
 
So ich roll das hier mal kurz auf... sorry...

Was muss man tun, damit es die Farben des Bitmap übernimmt?

Ansonsten funktioniert der Code ganz gut, nur ein bisschen dof, das man
Die "Form" danach nichtmer verschieben kann...

Und es hat ein paar sekunden bis es die Form übernommen hat

MSSSSM 10. Sep 2008 14:20

Re: TForm im aussehn ändern?
 
ist zwar alt aber...
Delphi-Quellcode:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
  var p:TPoint;
begin
if [ssLeft] = Shift then
  begin
    p:=self.ClientToScreen(Point(x,y));
    self.Left:=p.X;
    self.Top:=p.Y;
  end;

end;
da gibt leider nur nen nachteil :(

DeddyH 10. Sep 2008 14:32

Re: TForm im aussehn ändern?
 
Aha, und welchen?

toms 10. Sep 2008 14:47

Re: TForm im aussehn ändern?
 
Zitat:

Zitat von DeddyH
Aha, und welchen?

Dass der Code Unsinn ist..
Delphi-Quellcode:
 self.Left:=p.X;
 self.Top:=p.Y;
:wall:

DeddyH 10. Sep 2008 15:13

Re: TForm im aussehn ändern?
 
Ich würde das eh anders machen ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz