Komponente lädt PNG's nicht aus der *.lrs

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Guckst du hier:

Code: Alles auswählen

type
 
  TCaptionBarButtonSet = (btn_help, btn_iconize, btn_resize, btn_formwiz,
                          btn_close);
  TCaptionBarButtons = Set of TCaptionBarButtonSet;
  TCaptionBarButton = btn_help..btn_close; // dieses hier für Laufvariable
 
{-----------------------------------------------------------------------------
  Class:     TCaptionPanel
  Methode:   Create
  Author:    root
  Date:      02-Jan-2007
  Arguments: AOwner: TComponent
-----------------------------------------------------------------------------}

constructor TCaptionPanel.Create(AOwner: TComponent);
const
  cProcName = 'CaptionPanel.TCaptionPanel.Create';
 
  function SetErrorParams: string;
  begin
    Result:= '';
    // 'AOwner: TComponent'
  end; // of function SetErrorParams: string
 
var
  btnFlag: TCaptionBarButton; // nämlich hier !!!!!!!!!!!
 
begin
  { procedure body }
  inherited Create(AOwner);
  Self.BevelInner:= bvLowered;
  Self.BevelOuter:= bvRaised;
  Self.Height:= 26;
  Self.Caption:= '';
  Self.Align:= alTop;
  Self.Parent:= TWinControl(AOwner);
  Self.ShowHint:= true;
  FFormIcon:= TImage.Create(Self);
  FFormIcon.Height:= Self.ClientHeight;
  FFormIcon.Width := FFormIcon.Height;
  FFormIcon.Align:= alLeft;
  FFormIcon.Stretch:= true;
  FFormIcon.Parent:= Self;
  FButtonPanel:= TCustomPanel.Create(Self);
  FButtonPanel.Width:= 0;
  FButtonPanel.Align:= alRight;
  FButtonPanel.Parent:= Self;
  FButtonPanel.ShowHint:= true;
  FOwnerCaption:= TPanel.Create(Self);
  FOwnerCaption.BevelInner:= bvNone;
  FOwnerCaption.BevelOuter:= bvNone;
  FOwnerCaption.BorderWidth:= 2;
  FOwnerCaption.Align:= alClient;
  FOwnerCaption.Alignment:= taLeftJustify;
  FOwnerCaption.Color:= clNavy;
  FOwnerCaption.Font.Style:= [fsBold];
  FOwnerCaption.Font.Color:= clWhite;
  FOwnerCaption.Height:= Self.ClientHeight;
  FOwnerCaption.Caption:= TComponent(AOwner).Name;
  FOwnerCaption.Parent:= Self;
  FMinimized:= false;
  //
  // und das da, da hier, wird bei FPC nicht ausgeführt !!!!!!!!!!!!!!!!!!!!!!!!!!!!
  //
  for btnFlag:= btn_help to btn_close
    do FButtonArr[btnFlag]:= Self.CreateButton(btnFlag);
  FCtrlButtons:= [btn_close];
  FButtonPanel.Visible:= false;
  FFormIcon.Picture.Bitmap:= Self.LoadGlyph('22X22RUN');
  Self.Parent:= TWinControl(AOwner);
end; // of TCaptionPanel.Create
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Sodele, einmal ganz neu installieren. Das ganze FPC/Lazarus-System war offenbar abgepfiffen. Nun kompiliert er das zwar richtig aber die Bildchen lädt er noch immer nicht.

Ich hab das Gefühl das hat was mit den PNG's zu tun. Die ließen sich bei Delphi auch erst über TImage laden. TBitmap ging da direkt überhaupts mal nix.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

schnullerbacke hat geschrieben:Sodele, einmal ganz neu installieren. Das ganze FPC/Lazarus-System war offenbar abgepfiffen. Nun kompiliert er das zwar richtig aber die Bildchen lädt er noch immer nicht.

Ich hab das Gefühl das hat was mit den PNG's zu tun. Die ließen sich bei Delphi auch erst über TImage laden. TBitmap ging da direkt überhaupts mal nix.


Mas macht denn LoadGlyph?
Normalerweise sollte man afaik über Graphic gehen, wenn man nicht ein BMP erwartet.
FFormIcon.Picture.Graphic.Load....

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Habs gefunden, genau wie bei Delphi muß man über TPNGImage gehen. Dann einfach:

Result.Assign(Image);
Image.Free;

und gut dem Dinge. Sonst kann er nur XPM oder BMP verarbeiten, andere Formate sind per TBitmap nicht ladbar. Das Problem sind da die TSpeedButtons, weil die halt nur TBitmap anbieten. Also muß man halt den Umweg machen.

Was mich dazu bringt sofort selbst einen TImageButton zu basteln. Damit kann man dem Käse aus dem Weg gehen.

Und LoadGlyph holt wirklich nur das entspechende Pic aus der Resource. Und weil die Linux-Icons einfach hübscher sind und vor allem von Haus aus ne Menge Auswahl vorhanden ist, hab ich auf die crystalsvg zurück gegriffen. Da hat man bei 16x16 und 22x22 Massenweise. Und sieht dann halt bei Windoofs und Linux gleichmäßig aus. Sind aber eben alle PNG.

Nun muß ich noch vom Panel entweder Height verstecken oder den Trick finden wie man das gesteuert setzt ohne nen Stapelüberlauf zu kriegen.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

ist TSpeedButton.Glyph in Delphi auch TBitmap ?? Son Quark der Speedbutton macht immer weniger sinn
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Jepp, leider. Deswegen die Klimmzüge am Brotkasten. Wobei bei Delphi noch hinzukommt, das zumindest bis D7 PNG's erst mit ner zusätzlichen Lib liefen. Deswegen hab ich das package mit reingepackt, weil das auch gleich mng mitmacht.

So und nun folgt die neueste Version, die läuft schon ganz brauchbar... :wink:
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Das hier läuft jetzt ganz ordentlich. Ist auch gleich ein hübsches Beispiel wie mans für Delphi/Lazarus kompatibel machen kann.
Dateianhänge
CaptionPanel.zip
Funzt gut und kann verwendet werden.
(1.02 MiB) 37-mal heruntergeladen
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Antworten