AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Komponente (TImage & TLabel) -> Image wird nicht angezeigt
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von NoGAD · begonnen am 8. Apr 2024 · letzter Beitrag vom 18. Mai 2024
Antwort Antwort
Seite 1 von 2  1 2      
itsChris

Registriert seit: 29. Jul 2022
29 Beiträge
 
Delphi 12 Athens
 
#1

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

  Alt 8. Apr 2024, 09:29
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.

Geändert von itsChris ( 8. Apr 2024 um 09:31 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#2

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

  Alt 8. Apr 2024, 10:12
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
Mathias
Ich vergesse einfach zu viel.
  Mit Zitat antworten Zitat
itsChris

Registriert seit: 29. Jul 2022
29 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 8. Apr 2024, 10:30
@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;
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.757 Beiträge
 
Delphi 12 Athens
 
#4

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

  Alt 8. Apr 2024, 10:56
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
itsChris

Registriert seit: 29. Jul 2022
29 Beiträge
 
Delphi 12 Athens
 
#5

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

  Alt 8. Apr 2024, 11:03
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.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.757 Beiträge
 
Delphi 12 Athens
 
#6

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

  Alt 8. Apr 2024, 11:14
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#7

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

  Alt 8. Apr 2024, 11:47
Für mich macht es Sinn. Bei den Standardkomponenten hat sich ja bisher sicher auch keiner daran gestört, dass die Eigenschaften auf 3 gesetzt sind
Mathias
Ich vergesse einfach zu viel.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.553 Beiträge
 
Delphi 12 Athens
 
#8

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

  Alt 8. Apr 2024, 13:44
@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?)
Ausschließlich Komponenten, welche vom Designer erstellt werden (mit Owner=Form) werden von ihm auch in den DesignModus versetzt.
Aber UnterKomponenten standardmäßig nicht.

* SetSubcomponent
* oder, wenn es nur ums Speichern geht, diese Funktion in die Hauptkomponente und dann intern die Daten zur Subkomponente durchreichen.



Ach ja, wenn man die initialen Werte von "Standardeigenschaften" ändert, dann sollte man auch niemals vergessen das DEFAULT am Property zu aktualisieren.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#9

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

  Alt 8. Apr 2024, 20:59
Danke für die Ergänzung. 😃

LG Mathias
Mathias
Ich vergesse einfach zu viel.
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#10

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

  Alt 14. Mai 2024, 09:43
Ich habe eine Rückfrage zu SetSubComponent.

Die Komponente funktioniert sehr gut, jedoch besteht jetzt das Problem, dass das Label (SubComponente) einige Eigenschaften nicht speichert.

Z.B. Align. Ich setze die Eigenscahft der Subcomponente auf alClient, speichere das Project, schließe und lade es erneut. Dann ist die Eigenschaft wieder auf alRight.

Hier der Code der aktuellen Version

Delphi-Quellcode:
unit TRM_ImageLabel;

(*

  TRM_ImageLabel erstellt von Mathias Fiege 2024

  www.nogad.de

  Open Source License
  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software component and associated documentation files (the "Software"),
  to deal in the Software without restriction, including without limitation the
  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  sell copies of the Software, and to permit persons to whom the Software is
  furnished to do so, subject to the following conditions:

  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.

  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  THE SOFTWARE.

  Thanks and greetings to www.delphipraxis.net

*)


interface

uses
  System.SysUtils, System.Classes, Vcl.Controls, Vcl.Forms, 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;

    FVersion: String;

    procedure SetLabelPosition(const Value: TLabelPosition);

    procedure ImageClick(Sender: TObject);
    procedure ImageDblClick(Sender: TObject);
    procedure ImageMouseEnter(Sender: TObject);
    procedure ImageMouseLeave(Sender: TObject);

    procedure LabelClick(Sender: TObject);
    procedure LabelDblClick(Sender: TObject);
    procedure LabelMouseEnter(Sender: TObject);
    procedure LabelMouseLeave(Sender: TObject);
  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 BevelInner;
    property BevelKind;
    property BevelOuter;
    property BevelWidth;
    property BorderStyle;
    property BorderWidth;
    property Caption;
    property Ctl3D;
    property Cursor;
    property ParentBackground;
    property PopupMenu;

    property OnClick;
    property OnDblClick;
    property OnMouseEnter;
    property OnMouseLeave;
    property LabelPosition: TLabelPosition read FLabelPosition write SetLabelPosition;

    property Version: String read FVersion;

  end;

procedure Register;

implementation

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

{ TTRM_ImageLabel }

constructor TTRM_ImageLabel.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Self.Width := 64;
  Self.Height := 89;
  Self.AlignWithMargins := True;
  Self.Margins.Top := 0;
  Self.Margins.Left := 8;
  Self.Margins.Right := 8;
  Self.Margins.Bottom := 0;
  Self.BevelInner := bvNone;
  Self.BevelKind := bkNone;
  Self.BevelOuter := bvNone;
  Self.BevelWidth := 1;
  Self.BorderStyle := bsNone;
  Self.BorderWidth := 0;
  Self.Caption := '';
  Self.Ctl3D := False;
  Self.Cursor := crHandPoint;
  Self.ParentBackground := True;

  FSubImageComponent := TImage.Create(Self);
  SubImageComponent.SetSubComponent(True);
  FSubImageComponent.Parent := Self;
  FSubImageComponent.Align := alClient;
  FSubImageComponent.OnClick := ImageClick;
  FSubImageComponent.OnDblClick := ImageDblClick;
  FSubImageComponent.OnMouseEnter := ImageMouseEnter;
  FSubImageComponent.OnMouseLeave := ImageMouseLeave;

  FSubLabelComponent := TLabel.Create(Self);
  SubLabelComponent.SetSubComponent(True);
  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 := '...';
  SubLabelComponent.Font.Size := 14;
  SubLabelComponent.OnClick := LabelClick;
  SubLabelComponent.OnDblClick := LabelDblClick;
  SubLabelComponent.OnMouseEnter := LabelMouseEnter;
  SubLabelComponent.OnMouseLeave := LabelMouseLeave;

  FLabelPosition := lpBottom;

  FVersion := '2024.05.14.1038';

  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;

  Update;
end;

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

procedure TTRM_ImageLabel.ImageClick(Sender: TObject);
begin
  if Assigned(OnClick) then
    OnClick(Self);
end;

procedure TTRM_ImageLabel.ImageDblClick(Sender: TObject);
begin
  if Assigned(OnDblClick) then
    OnDblClick(Self);
end;

procedure TTRM_ImageLabel.ImageMouseEnter(Sender: TObject);
begin
  if Assigned(OnMouseEnter) then
    OnMouseEnter(Self);
end;

procedure TTRM_ImageLabel.ImageMouseLeave(Sender: TObject);
begin
  if Assigned(OnMouseLeave) then
    OnMouseLeave(Self);
end;

procedure TTRM_ImageLabel.LabelClick(Sender: TObject);
begin
  if Assigned(OnClick) then
    OnClick(Self);
end;

procedure TTRM_ImageLabel.LabelDblClick(Sender: TObject);
begin
  if Assigned(OnDblClick) then
    OnDblClick(Self);
end;

procedure TTRM_ImageLabel.LabelMouseEnter(Sender: TObject);
begin
  if Assigned(OnMouseEnter) then
    OnMouseEnter(Self);
end;

procedure TTRM_ImageLabel.LabelMouseLeave(Sender: TObject);
begin
  if Assigned(OnMouseLeave) then
    OnMouseLeave(Self);
end;

end.
Mathias
Ich vergesse einfach zu viel.
  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 22:57 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