AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

bmp in Panel zeichnen

Ein Thema von youuu · begonnen am 3. Mai 2009 · letzter Beitrag vom 4. Mai 2009
Antwort Antwort
Seite 1 von 2  1 2      
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#1

bmp in Panel zeichnen

  Alt 3. Mai 2009, 18:56
Hallo,

kann man ein bmp in einen Panel zeichnen ohne Paintbox oder TImage?
Steven
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

Re: bmp in Panel zeichnen

  Alt 3. Mai 2009, 19:02
Leite Dir eine Klasse von TPanel ab, mache dort die Canvas-Eigenschaft öffentlich und zeichne dann darauf.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: bmp in Panel zeichnen

  Alt 3. Mai 2009, 19:05
Oder ohne Ableiten mittels GetWindowDC, ein kleines Beispiel:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  X: TBitmap;
  H: HDC;
begin
  X := TBitmap.Create;
  try
    X.Width := 20;
    X.Height := 20;
    X.Canvas.Ellipse(0, 0, 20, 20);
    H := GetWindowDC(Panel1.Handle);
    BitBlt(H, 0, 0, 20, 20, X.Canvas.Handle, 0, 0, SRCCOPY);
  finally
    X.Free;
  end;
end;
Gruß
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#4

Re: bmp in Panel zeichnen

  Alt 3. Mai 2009, 19:06
Hast du darüber zufällig ein Tutorial?
Habe soetwas noch nie gemacht.
Steven
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#5

Re: bmp in Panel zeichnen

  Alt 3. Mai 2009, 19:08
Da vermisse ich aber ein ReleaseDC

[edit]
Zitat von youuu:
Hast du darüber zufällig ein Tutorial?
Habe soetwas noch nie gemacht.
Wen meinst Du jetzt? [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: bmp in Panel zeichnen

  Alt 3. Mai 2009, 19:11
Zitat von DeddyH:
Da vermisse ich aber ein ReleaseDC
Huch, mir war nicht bewusst, dass man das machen muss Habe selber nicht oft damit gearbeitet
Also, dahinter noch einReleaseDC(Panel1.Handle, H); Ich hoffe das stimmt jetzt so..
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

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

Re: bmp in Panel zeichnen

  Alt 3. Mai 2009, 19:24
@Fussball-Robby ...und dach dem verschieben oder wenn ein fenster drüber war ist alles pfutsch.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#8

Re: bmp in Panel zeichnen

  Alt 3. Mai 2009, 19:52
Du musst natürlich im Ereignis Onpaint des Formulars oder Panels immer wieder alles neu reinmalen.
Das übernimmt ansonsten Delphi für Dich, da aber Delphi nix davon weiß, weil Du ja keine Paintbox genommen hast, dann musst Du Dich selbst um das neuzeichnen kümmern ..
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#9

Re: bmp in Panel zeichnen

  Alt 3. Mai 2009, 19:59
Also in etwa so:
Delphi-Quellcode:
...
interface

uses ..., ExtCtrls;

type
  TPanel = class(ExtCtrls.TPanel)
  protected
    procedure Paint;override; //erspart dann das Öffentlichmachen von Canvas
  end;

  TForm1 = class(TForm)
    Panel1: TPanel;
    ...
  end;

...

implementation

procedure TPanel.Paint;
var bmp: TBitmap;
begin
  inherited;
  bmp := TBitmap.Create;
  try
    bmp.LoadFromFile('C:\Program Files\Common Files\CodeGear Shared\Images\BackGrnd\Calendar.bmp');
    Canvas.Draw(0,0,bmp);
  finally
    bmp.Free;
  end;
end;

...
Das ist natürlich nur ein Beispiel, man kann die Bitmap auch zum Programmstart einmalig laden und im Speicher halten etc.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

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

Re: bmp in Panel zeichnen

  Alt 3. Mai 2009, 20:03
Oder So:

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TPanel = class(ExtCtrls.TPanel) // Wichtig, als erstes for TForm1
  private
    { Private-Deklarationen }
    FOnPaint: TNotifyEvent;
  protected
    { Protected-Deklarationen }
    procedure Paint; override;
  public
    { Public-Deklarationen }
    property Canvas;
  published
    { Published-Deklarationen }
    property OnPaint: TNotifyEvent read FOnPaint write FOnPaint;
  end;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure OnPanel1Paint(Sender: TOBject);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TPanel.Paint;
begin
  inherited;
  if assigned(fOnPaint) then fOnPaint(Self);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Panel1.OnPaint := OnPanel1Paint;
end;

procedure TForm1.OnPanel1Paint(Sender: TOBject);
var r: Trect;
begin
  r := Panel1.ClientRect;
  InflateRect(r, -2, -2);

  With Panel1 do
  begin
    Canvas.Brush.Color := clWindow;
    Canvas.RoundRect(r.Left, r.Top, r.Right, r.Bottom, 20, 20);
    Canvas.Brush.Color := Panel1.Color;
    Canvas.Draw(5, 5, Application.Icon);
  end;
end;

end.
- eine neues Project erstellen
- Ein Panel auf eine Form klatschen
- zwei mal auf die Form klicken und sich im FormCreate wiederfinden
- Copy & Paste mit diesem Quelltext den alten Quelltext ersetzen
- fertisch.



//Edit:

@Detlef, das gibt ne Beule !

Code:
procedure [color=#ff001f]TPanel.Paint;[/color] [color=#ff001f] <--<<<[/color]
var bmp: TBitmap;
begin
  ...
    bmp.[color=#ff001f]LoadFromFile[/color]('C:\Program Files\Common Files\CodeGear Shared\Images\BackGrnd\Calendar.bmp'); [color=#ff001f]<--<<<[/color]
  ...
end;
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 14:02 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