AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Komponenten zu labeled Komponenten "wandeln"

Ein Thema von Sherlock · begonnen am 7. Mär 2014 · letzter Beitrag vom 11. Mär 2014
Antwort Antwort
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.891 Beiträge
 
Delphi 12 Athens
 
#1

AW: Komponenten zu labeled Komponenten "wandeln"

  Alt 7. Mär 2014, 12:28
Nevig wäre, Labels von Hand auf´s Formular zu setzen und auszurichten. Wenn es allerdings nur statische Beschriftungen sein sollen ist es vermutlich der schnellste Weg (sofern man nicht entsprechende fertige Controls mit Label hat).
Wobei das immer neu ausrichten bei Verschiebungen bei Firemonkey ja nicht mehr nötig ist, da kann man die ja einfach an andere Komponenten antackern.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.809 Beiträge
 
Delphi 12 Athens
 
#2

AW: Komponenten zu labeled Komponenten "wandeln"

  Alt 7. Mär 2014, 13:42
Also nur zur Klärung: Ich möchte sowas wie das Vcl.ExtCtrls.TLabeledEdit für zB ein TDateTimePicker oder auch ein TwwDBSpinEdit oder ein TMemo etc. Das soll dann die Arbeit vereinfachen, ich finde es extrem praktisch wennd as Label gleich am Edit hängt, und auch auf "Knopfdruck" neu ausgerichtet werden kann.

Himitsus Ansatz scheint mir leider nicht geeignet, ich will zur Designzeit die Labels schon sehen können.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Komponenten zu labeled Komponenten "wandeln"

  Alt 7. Mär 2014, 14:00
Du kannst sie da doch auch schon anzeigen?

Ob nun Laufzeit oder DesignTime, ist eigentlich egal.
Untereinander sind die Komponenten gleich verbunden.

Der Owner der sichtbaren Labels darf aber nicht der Form entsprechen.
Es sollte sowieso die MasterKomponente sein, bzw. die Listenkomponente darin.

Die Iteminstanzen könnte man eben wie im TPoupMenü verwalten, oder wie die Fields in einigen DataSet-Komponenten.
Und wie bei diesem komischen DevExpressMenü kann man das auch schon zur Designtime anzeigen.

Wobei du da eventuell noch nichtmal zwischen DesignTime und Runtime entscheiden mußt, wenn du nicht willst/brauchst, daß deine Labels direkt im OI "anklickbar" sein sollen. (so wie das Label im TLabeledEdit)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.809 Beiträge
 
Delphi 12 Athens
 
#4

AW: Komponenten zu labeled Komponenten "wandeln"

  Alt 7. Mär 2014, 16:30
Ich geh ins Wochenende

Hier mein Versuch das per decorator pattern umzusetzen.
Das sind noch keine Komponenten, das käme später, es geht erstmal um Machbarkeit:

Delphi-Quellcode:
type
  TNxBoundLabel = class(TBoundLabel) //* Damit wir an die protected-Innereien herankommen
  end;

  TNxLabeledControl = class(TCustomEdit) //* Der Dekorateur für TCustomEdit
  private //* TCustomEdit deshalb, weil viele Komponenten davon abgeleitet sind...Datepicker leider nicht.
    fCustomEdit: TCustomEdit;
    fEditLabel: TNxBoundLabel;
    fLabelPosition: TLabelPosition;
    fLabelSpacing: Integer;
    procedure SetLabelPosition(const Value: TLabelPosition);
    procedure SetLabelSpacing(const Value: Integer);
  protected
    procedure SetParent(AParent: TWinControl); override;
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;
    procedure SetName(const Value: TComponentName); override;
    procedure CMVisiblechanged(var Message: TMessage); message CM_VISIBLECHANGED;
    procedure CMEnabledchanged(var Message: TMessage); message CM_ENABLEDCHANGED;
    procedure CMBidimodechanged(var Message: TMessage); message CM_BIDIMODECHANGED;
  public
    constructor Create(AOwner: TComponent; aCustomEdit: TCustomEdit); reintroduce;
    procedure SetBounds(ALeft: Integer; ATop: Integer; AWidth: Integer; AHeight: Integer); override;
    procedure SetupInternalLabel;
    property EditLabel: TNxBoundLabel read FEditLabel;
  published
    property LabelPosition: TLabelPosition read FLabelPosition
      write SetLabelPosition default lpAbove;
    property LabelSpacing: Integer read fLabelSpacing write SetLabelSpacing
      default 3;
  end;

  TNxEdit = class(TNxLabeledControl) //* Das zu dekorierende Control ist in diesem einfachen Fall ein TEdit (siehe Code im Contrustor)
  private
    fNXLabeledControl: TNxLabeledControl;
  public
    constructor Create(aOwner: TComponent);
    destructor Destroy; override;
  end;
Die meisten Methoden sind im Prinzip C&P aus TCustomLabeledEdit. Worauf es IMO ankommt ist:

Delphi-Quellcode:
constructor TNxLabeledControl.Create(AOwner: TComponent; aCustomEdit: TCustomEdit);
begin
  inherited Create(AOwner);
  fCustomEdit := aCustomEdit;
  FLabelPosition := lpAbove;
  FLabelSpacing := 3;
  SetupInternalLabel;
end;

procedure TNxLabeledControl.SetupInternalLabel;
begin
  if Assigned(FEditLabel) then
    exit;
  if not Assigned(fCustomEdit) then
    exit;
  FEditLabel := TNxBoundLabel.Create(fCustomEdit);
  FEditLabel.FreeNotification(fCustomEdit);
  FEditLabel.FocusControl := fCustomEdit;
end;
Der Code für das zu labelnde Edit
Delphi-Quellcode:
constructor TNxEdit.Create(aOwner: TComponent);
begin
  inherited Create(aOwner, TEdit.Create(Self)); //* Hier steht endlich die zu verwendende Komponente
end;

destructor TNxEdit.Destroy;
begin
  fCustomEdit.Free;
  inherited;
end;
In einem ersten Test wird zwar das Edit angezeigt, nicht jedoch das Label Ich freue mich aber darüber das es nicht knallt

Ich schau Montag wieder rein. Bis denne!

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.344 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Komponenten zu labeled Komponenten "wandeln"

  Alt 7. Mär 2014, 20:17
Hallo,

ich hab mir auch mal TLabeled-Komponenten gebaut
Hab ein TLabeledComboBox, TLabeledSpinEdit, TLabeledMaskEdit und ein paar Sonder-Komponenten.

Wobei ich nicht nur ein Label drin hab, sondern 2 (pre und pro)
Also eines vor links z. B. und eines vor rechts (z. B. links für einen Infotext, rechts für eine Einheit)

Anbei mal mein TLabeledSpinEdit

eigentlich unterscheiden sich die o. g. Komponenten nur in dieser Zeile:
TLabeledSpinEdit = class(TSpinEdit) (und natürlich der Klassennamen der functions....)
Angehängte Dateien
Dateityp: pas LabeledSpinEdit.pas (13,9 KB, 21x aufgerufen)
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<

Geändert von Helmi ( 7. Mär 2014 um 20:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.809 Beiträge
 
Delphi 12 Athens
 
#6

AW: Komponenten zu labeled Komponenten "wandeln"

  Alt 10. Mär 2014, 07:50
Hallo Helmi,
wunderschön. Sowas habe ich ja auch vor. Mit dem Unterschied, daß ich nicht für jede weitere gelabelte Komponente den gleichen Code kopieren möchte. Da muss es doch was von Ratioph...äh von den Freunden aus der GoF geben. Ich dachte eben an das Decorator Pattern, weil ich (eventuell zu bildlich denkend) das Label für die Dekoration eines Controls halte. Ich setze mich heute wieder ran, und schau ob ich es nicht doch noch hinbekomme. Ich will ja auch was lernen ISt ja eigentlich fast fertig, es fehlt schließlich nur die Anzeige des Labels.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Komponenten zu labeled Komponenten "wandeln"

  Alt 10. Mär 2014, 16:14
Wenn es darum geht das Decorator Pattern hier zu verwenden, ist mein Ansatz wahrscheinlich falsch.
Aber waren die Frames nicht auch dazu gedacht, genau so was zu realisieren?

Ein Frame der ein TLabel und ein TxxxxEdit enthält - samt der ganzen Logik die dazu benötigt wird?

Grüße
wo
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:30 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 by Thomas Breitkreuz