Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

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 Komponente (TImage & TLabel) -> Image wird nicht angezeigt (https://www.delphipraxis.net/214936-komponente-timage-tlabel-image-wird-nicht-angezeigt.html)

NoGAD 8. Apr 2024 08:09

Komponente (TImage & TLabel) -> Image wird nicht angezeigt
 
Hallo,

Folgende Unit soll eigentlich ein TImage und ein TLabel kombiniert anzeigen. Leider wird zur Laufzeit das TPicture wieder gelöscht. In der Designansicht ist das TPicture dagegen komplett sichtbar - egal, welcher Typ (Gif/png/jpg/bmp) als Bild ausgewählt wurde.

Habe ich eine Property falsch gesetzt?

Delphi-Quellcode:
unit TRM_ImageLabel;

interface

uses
  System.SysUtils, System.Classes, Vcl.Controls, Vcl.ExtCtrls, Vcl.StdCtrls,
  Vcl.Imaging.GIFConsts,
  Vcl.Imaging.GIFImg,
  Vcl.Imaging.JConsts,
  Vcl.Imaging.jpeg,
  Vcl.Imaging.pngimage,
  Vcl.Imaging.pnglang;

type
  TLabelPosition = (lpTop, lpBottom, lpLeft, lpRight);

  TTRM_ImageLabel = class(TCustomPanel)
  private
    FSubImageComponent: TImage;
    FSubLabelComponent: TLabel;
    FLabelPosition: TLabelPosition;
    procedure SetLabelPosition(const Value: TLabelPosition);
  protected
    procedure Resize; override;
  public
    constructor Create(AOwner: TComponent); override;
  published
    property SubImageComponent: TImage read FSubImageComponent;
    property SubLabelComponent: TLabel read FSubLabelComponent;
    property Align;
    property Anchors;
    property OnClick;
    property OnDblClick;
    property OnMouseEnter;
    property OnMouseLeave;
    property LabelPosition: TLabelPosition read FLabelPosition write SetLabelPosition;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('TRM', [TTRM_ImageLabel]);
end;

{ TTRM_ImageLabel }

constructor TTRM_ImageLabel.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  (* Für meine eigenen Bedürfnisse *)
  Self.Width := 64;
  Self.Height := 97;

  FSubImageComponent := TImage.Create(Self);
  FSubImageComponent.Parent := Self;
  FSubImageComponent.Align := alClient;

  FSubLabelComponent := TLabel.Create(Self);
  FSubLabelComponent.Parent := Self;
  FSubLabelComponent.Height := 25;
  FSubLabelComponent.AlignWithMargins := False;
  FSubLabelComponent.Margins.Left := 0;
  FSubLabelComponent.Margins.Right := 0;
  FSubLabelComponent.Margins.Top := 8;
  FSubLabelComponent.Margins.Bottom := 0;
  FSubLabelComponent.Caption := 'TEST';
  SubLabelComponent.Font.Size := 14;

  FLabelPosition := lpBottom;

  Resize;
end;

procedure TTRM_ImageLabel.Resize;
begin
  inherited;
  case FLabelPosition of
    lpTop:
      begin
        FSubLabelComponent.Align := alTop;
        FSubLabelComponent.Alignment := taCenter;
      end;
    lpBottom:
      begin
        FSubLabelComponent.Align := alBottom;
        FSubLabelComponent.Alignment := taCenter;
      end;
    lpLeft:
      begin
        FSubLabelComponent.Align := alLeft;
        FSubLabelComponent.Alignment := taCenter;
      end;
    lpRight:
      begin
        FSubLabelComponent.Align := alRight;
        FSubLabelComponent.Alignment := taCenter;
      end;
  end;
end;

procedure TTRM_ImageLabel.SetLabelPosition(const Value: TLabelPosition);
begin
  if FLabelPosition <> Value then
  begin
    FLabelPosition := Value;
    Resize;
  end;
end;

end.

Delphi.Narium 8. Apr 2024 08:31

AW: Komponente (TImage & TLabel) -> Image wird nicht angezeigt
 
Zu Beginn wird das Label alBottom gesetzt. Damit erhält es die volle Breite das Panels, auf das es gelegt wird.

Wenn Du nun hergehst und das Label z. B. alLeft setzt, so bleibt die Breite des Labels erhalten und es füllt damit das Panel vollständig aus, so dass für das Image kein Platz mehr übrig bleibt.

Du müsstest im Resize die Höhe bzw. die Breite das Labels jeweils mit anpassen, bei alTop und alBottom jeweils Height, wie im Create auf 25 setzen und bei alLeft bzw. alRight Width auf die von Dir gewünschte Breite.

himitsu 8. Apr 2024 08:44

AW: Komponente (TImage & TLabel) -> Image wird nicht angezeigt
 
Tja, diese Komponenten wissen nunmal nicht, dass sie im Design-Modus sein sollen.
Wobei, sollen sie es wirklich, also z.B. auch per Hand im Designer umhergeschubst und mit dem Property-Editor geändert werden können?

* in TTRM_ImageLabel auf csDesigning reagieren und die untergeordneten Komponenten manuell anpassen, also z.B. garnicht oder anders darstellen
* * im constructor beim Owner nachsehn, da es bei sich selbst leider noch nicht gesetzt ist (obwohl das möglich wäre, wenn Emba die zugehörigen FeatureRequsts/Bugreports übernommen hätte)
* TComponent.SetDesignInstance
* TComponent.SetDesigning
* oder
* oder
* oder
* ...

Uwe Raabe 8. Apr 2024 08:48

AW: Komponente (TImage & TLabel) -> Image wird nicht angezeigt
 
Lädst du das Bild in die TImage-Komponente während des Design? Dann musst du auch dafür sorgen, dass es mit in die DFM gestreamt wird. Nach dem Erzeugen der Controls sollte somit noch ein Aufruf von SetSubcomponent erfolgen.

itsChris 8. Apr 2024 09:29

AW: Komponente (TImage & TLabel) -> Image wird nicht angezeigt
 
Moin,
so wie Uwe schon geschrieben hat, merkt sich die DFM zurzeit dein Picture nicht, wenn du es zur Designzeit lädst.

OT: Auch, wenn dass nicht deine Frage war, ist mir noch folgendes an deinem Code aufgefallen:

Margins werden nur beachtet, wenn AlignWithMargins = True ist. Deine gesetzten Margins werden also nicht beachtet.
Für dein Image würde ich noch Proportional und Center auf True setzen, damit das eingefügte Bild an die Komponentengröße angepasst wird und zentriert ist.

NoGAD 8. Apr 2024 10:12

AW: Komponente (TImage & TLabel) -> Image wird nicht angezeigt
 
Hallo an euch alle.

Danke für die Bemerkungen. Ich möchte nicht unverschämt klingen, jedoch hat mir keine der Informationen bis auf die von Uwe geholfen. ;-)

Danke @Uwe, das hatte ich bisher noch nie benötigt.

@itsChris: (* Für meine eigenen Bedürfnisse *) ;-)
@Delphi.Narium: Die Anpassung (Breite bei lpLeft/lpRight) erfolgt noch, hier werde ich eine vertikalen Ausrichtung einbinden.
@himitsu: Tja, diese Komponenten wissen nunmal nicht, dass sie im Design-Modus sein sollen. Warum nicht? Die Ableitung ist doch von den Standardkomponenten. (Oder verstehe ich etwas falsch?)


LG Mathias :-)

itsChris 8. Apr 2024 10:30

AW: Komponente (TImage & TLabel) -> Image wird nicht angezeigt
 
Zitat:

Zitat von NoGAD (Beitrag 1535490)
@itsChris: (* Für meine eigenen Bedürfnisse *) ;-)

Kann ja sein, ich wollte dich nur darauf hinweisen, dass der folgende Code keine Auswirkung/Funktionalität hat:
Delphi-Quellcode:
  FSubLabelComponent.AlignWithMargins := False;
  FSubLabelComponent.Margins.Left := 0;
  FSubLabelComponent.Margins.Right := 0;
  FSubLabelComponent.Margins.Top := 8;
  FSubLabelComponent.Margins.Bottom := 0;

Uwe Raabe 8. Apr 2024 10:56

AW: Komponente (TImage & TLabel) -> Image wird nicht angezeigt
 
Zitat:

Zitat von itsChris (Beitrag 1535491)
Kann ja sein, ich wollte dich nur darauf hinweisen, dass der folgende Code keine Auswirkung/Funktionalität hat:

Margins und Padding werden auch bei AlignWithMargins = False für die Abstands-Designer-Hilflinien verwendet.

itsChris 8. Apr 2024 11:03

AW: Komponente (TImage & TLabel) -> Image wird nicht angezeigt
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1535493)
Margins und Padding werden auch bei AlignWithMargins = False für die Abstands-Designer-Hilflinien verwendet.

Was hat das für eine Auswirkung, also wofür wird das benutzt? Visuell gesehen stimmt meine Aussage aber, jedenfalls kann ich keine Margins sehen, wenn AlignWithMargins = False ist.

Aber ok, dann nehme ich meine Aussage zurück.

Uwe Raabe 8. Apr 2024 11:14

AW: Komponente (TImage & TLabel) -> Image wird nicht angezeigt
 
Zitat:

Zitat von itsChris (Beitrag 1535495)
Aber ok, dann nehme ich meine Aussage zurück.

Das war eher als eine Art Ergänzung gemeint. Es betrifft ja auch nur den Design-Vorgang.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:34 Uhr.
Seite 1 von 4  1 23     Letzte »    

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