AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Eigene Komponte: Eigene Grafiken einbinden

Ein Thema von Ares · begonnen am 7. Mär 2007 · letzter Beitrag vom 7. Mär 2007
Antwort Antwort
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#1

Eigene Komponte: Eigene Grafiken einbinden

  Alt 7. Mär 2007, 15:06
Hallo!

Ich hatte gestern ja schon geschrieben, dass ich mir zur Übung eine eigene Komponente schreiben will. Es geht um ein Panel das ein Hintergrundbild anzeigt. In der Ursprünglichen Version konnte man das Bild über die Eigenschaft HintergrundBild einstellen. Im nächsten Schritt soll das Hintergrundbild fest in der Kompontene verankert sein. Jedes Panel dieser Art soll also den gleichen, nicht änderbaren Hintergrund anzeigen.

Aber wie füge ich das Bild in die Komponente ein?

Ich habe folgendes Versucht:

Delphi-Quellcode:
unit MyPanelUnit;

{$R 'background.res' 'background.rc'}

interface

uses ExtCtrls, Graphics, Classes;

type
   TMyPanel = class(TPanel)
   private
     { private-Deklarationen }
     FHindergrundBild: TPNGObject;

   protected
     { protected-Deklarationen }
     procedure Paint; override;
   public
     { public-Deklarationen }
     constructor Create(AOwner: TComponent); override;
     destructor Destroy; override;

   published
     { published-Deklarationen }
   end;


procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Eigene', [TMyPanel]);
end;

constructor TMyPanel.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);

  FHindergrundBild := TPNGObject.Create;

  //FHindergrundBild.LoadFromFile('MeinHintergrund.png');
  FHindergrundBild.LoadFromResourceName(HInstance, 'hintergrund');
end;

destructor TMyPanel.Destroy;
begin
  FHindergrundBild.Free;
  inherited;
end;

procedure TMyPanel.Paint;
begin
   inherited;
   Canvas.Draw(0, 0, FHindergrundBild);

   Canvas.TextRect(ClientRect, 5, 5, IntToStr(FHindergrundBild.Width)+'x'+IntToStr(FHindergrundBild.Height)) ;

   Canvas.Refresh;
end;

end.
Ich habe also einmal versucht die Grafik aus einer Datei zu laden und einmal eine Ressource-Datei anzubinden. Beides funktioniert nicht. Die Komponente lässt sich zwar fehlerfrei compilieren und ich kann auch entsprechende Panels auf ein Formular setzten und diesen compilieren, es wird jedoch kein Hintergrundbild angezeigt...

Die Ausgabe BreitexHöhe funktioniert aber korrekt. Es wird also die korrekte Breite und Höhe des Bildes ausgegeben. Irgendwie wird das Bild also richtig eingebunden aber nicht richtig ausgegeben.

Habt ihre eine Idee was ich falsch mache? Bzw. was ich anders machen muss?

Besten Dank
Ares
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

Re: Eigene Komponte: Eigene Grafiken einbinden

  Alt 7. Mär 2007, 15:10
Du musst die DCR mit ins Package einbinden
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#3

Re: Eigene Komponte: Eigene Grafiken einbinden

  Alt 7. Mär 2007, 15:15
Öhm, DCR? Sorry, aber ich bin noch nicht sooo der Profi...

Die Komponente besteht im Moment nur aus der einen Unit MyPanelUnit.pas. Beim Compilieren des Package wird dann noch die Datei MyPanelUnit.dcu erstellt. Wo finde ich die DCR?
  Mit Zitat antworten Zitat
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#4

Re: Eigene Komponte: Eigene Grafiken einbinden

  Alt 7. Mär 2007, 15:46
Ok, ich habe nun raus gefunden, dass eine DCR Datei eine Bild als compilierte Ressource ist. Stimmt das? Erstellen kann man die z.B. mit dem Bild-Editor. Aber wo finde ich den in Delphi 2006? Ich weiß, dass der in Delphi 6 bei den Tools war. In Delphi 2006 konnte ich ihn aber nirgendwo finden...

Wie erstelle ich also auch dem Bild eine DCR-Datei?
  Mit Zitat antworten Zitat
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#5

Re: Eigene Komponte: Eigene Grafiken einbinden

  Alt 7. Mär 2007, 15:56
Ok, nun habe ich herausgefunden, dass eine DCR Datei wohl einfach nur eine umbenannte RES Datei ist. Stimmt das?

Ich habe somit die background.res in background.dcr umbennant und zum Projekt hinzugefügt:

Delphi-Quellcode:
package MeinPack;

{$R *.res}
{$R 'background.dcr'}
...
Die Komponenten zeigt aber genau das gleiche Verhalten wie zuvor. Sie lässt sich also fehlerfrei compilieren, das Package problemlos installieren und ein Panel kann prima auf einem Form platziert werden. Dort wird aber kein Hintergrundbild angezeigt. Die Angabe BreitexHöhe wird nachwievor korrekt ausgegeben... Daran kann es also eigentlich nicht liegen, oder?
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Eigene Komponte: Eigene Grafiken einbinden

  Alt 7. Mär 2007, 16:18
Hallo Ares,

könnte es sein, daß du mit dem Befehl TextRect das Hintergrundbild übermalst? TextRect() füllt das gesamte angegebene Rechteck mit der aktuellen Hintergrundfarbe. Wenn du das verhindern möchtest, mußt du den Füllstil auf den Wert bsClear setzen:

Delphi-Quellcode:
Canvas.Brush.Style := bsClear;
Canvas.TextRect(...)
Gruß Hawkeye
  Mit Zitat antworten Zitat
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#7

Re: Eigene Komponte: Eigene Grafiken einbinden

  Alt 7. Mär 2007, 16:31
Ah, vielen Dank für den Tipp! Das scheints gewesen zu sein...
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 21:22 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