![]() |
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. |
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. |
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 * ... |
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
![]() |
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. |
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 :-) |
AW: Komponente (TImage & TLabel) -> Image wird nicht angezeigt
Zitat:
Delphi-Quellcode:
FSubLabelComponent.AlignWithMargins := False;
FSubLabelComponent.Margins.Left := 0; FSubLabelComponent.Margins.Right := 0; FSubLabelComponent.Margins.Top := 8; FSubLabelComponent.Margins.Bottom := 0; |
AW: Komponente (TImage & TLabel) -> Image wird nicht angezeigt
Zitat:
|
AW: Komponente (TImage & TLabel) -> Image wird nicht angezeigt
Zitat:
Aber ok, dann nehme ich meine Aussage zurück. |
AW: Komponente (TImage & TLabel) -> Image wird nicht angezeigt
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21: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