AGB  ·  Datenschutz  ·  Impressum  







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

größe der Komponente automatisch anpassen

Ein Thema von BAMatze · begonnen am 11. Mai 2009 · letzter Beitrag vom 13. Mai 2009
Antwort Antwort
Seite 1 von 2  1 2      
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#1

größe der Komponente automatisch anpassen

  Alt 11. Mai 2009, 08:47
Hallo und guten Morgen an alle DP´ler,

hab mal wieder eine Frage an die etwas versierteren Programmierer unter euch. Ich verwende mehrfach eine Kombination aus 1 Label und 1 Edit. Diese haben immer gemeinsame Zusammenhänge. Deswegen möchte ich sie als eine Komponente schreiben und diese dann nur in meinem Projekt draufziehen. Soweit so gut. Jetzt möchte ich aber aus übungstechnischem Sinne dass die größe der TWincontrol in die ich das ganze packe seine Größe an die Schriftgröße der im Edit und Label verwendeten Schriftgröße anpasst.

Ok habe zu diesem Thema auch ein wenig Reschaschiert und etwas über ein TPresistent gelesen, in die man wohl die "Eigenschaften" der Komponente (wenn ich das richtig verstanden habe) packt. Ist dies sinnvoll oder wie würdet ihr die Größenanpassung vornehmen?

Vielen Dank
BAMatze
2. Account Sero
  Mit Zitat antworten Zitat
Flips

Registriert seit: 17. Feb 2005
Ort: Sankt Wendel
491 Beiträge
 
Delphi 7 Professional
 
#2

Re: größe der Komponente automatisch anpassen

  Alt 11. Mai 2009, 09:04
Hi,

warum das Rad neu erfinden, such ma nach der Komponente TLabeledEdit.
lg, Flips
Philipp F.
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#3

Re: größe der Komponente automatisch anpassen

  Alt 11. Mai 2009, 09:07
Moin BAMatze,

als erstes würde ich dir empfehlen dir die Komponente LabeledEdit anzuschauen. Die wird von Hause aus in Delphi mitgeliefert.
Das nächste Thema Größenanpassung. Du kannst natürlich auf die Änderung des Fonts reagieren. Ich glaube da gibt es eine protected Methode die du überscheiben kannst um auf die Änderung der Fontgröße zu reagieren. Müßte ich aber noch mal suchen um den Code zu finden wo ich sowas mal gemacht habe.

Das Thema TPersistent in deinem Post soll sicher die Implementation eines Wrappers sein. Da bindet man in Published der eigenen Komponente ein Objekt einer eigenen Klasse ein um Eigenschaften im Objektinspektor als Untereinträge anzuzeigen (steht dann ein + davor). Diese Klasse ist von TPersistent abgeleitet.

Bsp:
Delphi-Quellcode:
type
  TMyNewPropertys = class(TPersistent)
  privat
    FFirstProperty : Boolean;
    FSecondProperty : String;
  published
    property FirstProperty : Boolean read FFirstProperty write FFirstProperty;
    property SecondProperty : Boolean read FSecondProperty write FSecondProperty;
  end;

....

  TMyComponent = class(TCustomControl)
  private
    FAdditionalPropertys : TMyNewPropertys;
...
  published
    property AdditonalPropertys : TMyNewPropertys read FAdditonalPropertys write FAdditonalPropertys;
...

constructor TMyComponent.Create(AOwner : TComponent);
begin
  ....
  FAdditionalPropertys := TMyNewPropertys.Create;
end;
Üblicherwereise benutzt mal für die Eigenschaften des Wrappers Getter- und Settermethoden um in MyComponent Eigenschaften anderer Klassen zu ändern. Ich empfehle dir mal unter dem Stichwort Wrapper zu suchen. Da gibt es sicher eine Menge zu in der DP.

Gruß oki
42
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: größe der Komponente automatisch anpassen

  Alt 11. Mai 2009, 09:23
Zitat von Flips:
Hi,

warum das Rad neu erfinden, such ma nach der Komponente TLabeledEdit.
lg, Flips
Hallo oki und Flips.

@TLabeledEdit: ist nicht exakt was ich meinte. Was ich brauche, ist eher sowas: Wenn die Komponente (habe ich wieder von TWinControl abgeleitet) nicht angewählt ist, soll sie ein Label zeigen, in der ein Wert drin steht. Wenn ich es anklicke, verschwindet das Label und das Edit wird sichtbar, damit ich den Wert ändern kann. Wenn ich wieder fertig ist, soll das Edit wieder verschwinden und das Label steht wieder an der Stelle. Brauche ich damit ich bei der schematischen Darstellung einer Technischen Zeichnung Werte Ändern kann.

@oki danke werde gleich mal schauen nach Wrapper.

Ps.: Falls es eine Standartkomponente gibt, dass das von mir beschrieben Verhalten aufweist, bitte sagen, kenne die noch nicht alle.

BAMatze
2. Account Sero
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: größe der Komponente automatisch anpassen

  Alt 11. Mai 2009, 09:48
So hab hier mal mit den einfachsten Mitteln (um den Arbeitsaufwand möglichst gering zu halten) eine Komponente Vorbereitet, die zumindest zeigt, was ich möchte. Sie hat keinerlei Propertys oder irgendwas, was man sonst alles von Edit und Label gewohnt ist. Soll ja nur mal schmatisch sein.

Wie gesagt, weiß nicht ob es sowas gibt und wenn nein, möchte ich die Komponente für aus den oben genannten Gründen sozusagen in eine Komponente überführen, die ebend allen "gängigen" Ansprüchen genügt. Kenne diese Art von Komponete von einem Arbeitskollegen in C#. Die verwendet er auch relativ häufig.
Angehängte Dateien
Dateityp: zip tlabeledit_329.zip (231,0 KB, 7x aufgerufen)
2. Account Sero
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#6

Re: größe der Komponente automatisch anpassen

  Alt 11. Mai 2009, 10:18
Hallo BAMatze,

das ist dann sicher doch etwas anderes wie das TLabeledEdit. Ich kenne persönlich keine Komponent, die diese Ansprüche erfüllt. Das muss aber nicht bedeuten, dass es keine gibt (zumindest ausserhalb der Standard-Delphi Componenten).

An deiner Stelle würde ich folgendermaßen umgehen:

- Ein eigenes Label von TCustomLabel ableiten,
- diesem Label ein Edit verpassen,
- das Edit ist ein privater Member der neuen Labelklasse,
- erhält das Label den Focus, wird das Edit darüber eingeblendet,
- verliert es den Focus, wird es wieder unsichtbar,
- alle Eigenschaften wie Font, Größe usw. erhält das Edit vom Label automatisch zugewiesen, so braucht man eigentlich auch keinen Wrapper.

Damit müsste das eigentlich so funzen. Ich bin mir nur nicht sicher, ob ein Label auch einen Focus bekommen kann. Muss ich noch mal schauen

Gruß oki
42
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: größe der Komponente automatisch anpassen

  Alt 11. Mai 2009, 10:25
Zitat von oki:
Hallo BAMatze,

Damit müsste das eigentlich so funzen. Ich bin mir nur nicht sicher, ob ein Label auch einen Focus bekommen kann. Muss ich noch mal schauen

Gruß oki
Also ein Label hat auf jeden Fall das onClick, mit dem ich das Edit hervorlocken könnte und beim Edit kann man dann den Focus abfragen.
Was vieleicht interessant wäre, wenn man einprogrammieren könnte, ob "außerhalb" der Komponente geklickt wird. Das würde das mit dem Focus sicherlich nochmal vereinfachen, weil man dann auf ein Event reagieren könnte (nur mal so ne kleine Idee).
2. Account Sero
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#8

Re: größe der Komponente automatisch anpassen

  Alt 11. Mai 2009, 10:44
Ich habe mal so eine Komponente gemacht - sie funktionierte im Grunde wie folgt:

Label und Edit erstellen, aber das Edit unsichtbar machen. (damit man nicht von außen alles verändern kann - was verändert werden soll, kann man ja wieder nach außen führen)

Beim Doppelklick aufs Label dem Edit den Text zuweisen (evtl. positionieren) und sichtbar machen

Wenn das Edit den Focus verliert oder Enter gedrückt wird, Label den text zuweisen und Edit unsichtbar machen

Wenn im Edit Esc gedrückt wird, Edit nur unsichtbar machen.


Ich denke die schwierigse Aufgabe ist es, das Edit so zu positionieren, dass der Text genau auf dem vom label zu liegen kommt. Könnte man vll. dadurch lösen, dass man die Mittelpunkte an die Gleiche Stelle rückt (ist aber nur so ne überlegung - in der Kompo die ich gemacht hab war die schriftgröße konstant)
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: größe der Komponente automatisch anpassen

  Alt 11. Mai 2009, 10:54
Zitat von jfheins:
Ich habe mal so eine Komponente gemacht - sie funktionierte im Grunde wie folgt:

Label und Edit erstellen, aber das Edit unsichtbar machen. (damit man nicht von außen alles verändern kann - was verändert werden soll, kann man ja wieder nach außen führen)

Beim Doppelklick aufs Label dem Edit den Text zuweisen (evtl. positionieren) und sichtbar machen

Wenn das Edit den Focus verliert oder Enter gedrückt wird, Label den text zuweisen und Edit unsichtbar machen

Wenn im Edit Esc gedrückt wird, Edit nur unsichtbar machen.


Ich denke die schwierigse Aufgabe ist es, das Edit so zu positionieren, dass der Text genau auf dem vom label zu liegen kommt. Könnte man vll. dadurch lösen, dass man die Mittelpunkte an die Gleiche Stelle rückt (ist aber nur so ne überlegung - in der Kompo die ich gemacht hab war die schriftgröße konstant)
Jap so funktioniert das kleine Programm, wie ich das oben mal gepostet habe. Label und Edit in einem TWinControl gepackt. Das TWinControl hat dort aber noch die feste Größe von 100 x 100 Pixel. Und noch hatte ich nix gefunden, wie man das eventuell ändern kann. Deswegen verfolge ich gerade oki´s Ansatz, das Edit in ein TCustomLabel zu integrieren.

Ps.: das Edit muss 3Pixel höher und 3 weiter nach links verschoben werden, dann liegen Schrift von Label und Edit genau übereinander (bei gleicher Textformatierung).
2. Account Sero
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: größe der Komponente automatisch anpassen

  Alt 11. Mai 2009, 11:58
Hab hier warscheinlich wieder ein kleines Problem mit dem Parent (bin ja eigentlich schonmal froh, dass ich das verstanden hab ).

Wenn ich das Edit in das TCustomLabel einbinde, dann muss ich ja eigentlich einen Parent wieder setzen, damit das Edit sichbar werden kann. Probiert habe ich nil und Self. Beide führen aber nicht dazu, dass das Edit sichbar wird. Wenn ich TLabEdit (ist der Name für die neue Komponente abgeleitet von TCustomLabel) einsetze, dann beschwert er sich, dass diese verschieden ist von TWinControl.
Welchen Parent sollte ich dort einsetzen?
2. Account Sero
  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 09:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz