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 2 von 2     12   
Benutzerbild von jfheins
jfheins

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

Re: größe der Komponente automatisch anpassen

  Alt 11. Mai 2009, 12:20
Du kannt ein TLabel nicht als Parent verwenden, weil es nicht von TWinControl abstammt.

Erstelle entweder eine komplett neue Kompo, abgeleitet von TWinControl oder verwende TStaticText als Vorfahr.
  Mit Zitat antworten Zitat
oki

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

Re: größe der Komponente automatisch anpassen

  Alt 11. Mai 2009, 14:35
Zitat von jfheins:
Du kannt ein TLabel nicht als Parent verwenden, weil es nicht von TWinControl abstammt.

Erstelle entweder eine komplett neue Kompo, abgeleitet von TWinControl oder verwende TStaticText als Vorfahr.
Sorry, daran hatte ich nicht gedacht, verwende das TLabel zu selten. Somit gilt das was ich in Post #6 geschrieben habe, wobei du dann nicht von TCustomLable, sodern von TWinControl oder TCustomControl (verwende ich immer) ableiten musst. Dabei fällt dir dann aber die Aufgabe zu den Text auf deiner Komponente selber zu zeichnen. Halte ich aber eher für einen Vorteil. Verwendest du dein eigenes "Label" dann ausschließlich auf Rechner mit W2000 aufwärts, kannst du für die Ausgabe des Textes auch die GDI+ verwenden, wass die ganze Sache optisch dann mächtig aufwertet.

TStaticText nimmt dir natürlich den ganzen Text-Kram ab. Leite dann aber lieber von TCustomStaticText ab.

Gruß oki
42
  Mit Zitat antworten Zitat
BAMatze

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

Re: größe der Komponente automatisch anpassen

  Alt 11. Mai 2009, 14:45
@oki ja hab schon alles umgestellt auf TWinControl, kein Thema. Hänge mal den aktuellen Status der Komponente an. Könnt ja mal Anregungen geben, wen es interessiert, bräuchte mal ein kleines Brainstorming, welche der normalen Propertys, außer alles was mit Fond ect. zusammenhängt, sinnvoll wäre wieder zu implizieren.

Edit: Datei angehängt
Angehängte Dateien
Dateityp: zip tlabeledit_323.zip (246,9 KB, 5x aufgerufen)
2. Account Sero
  Mit Zitat antworten Zitat
oki

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

Re: größe der Komponente automatisch anpassen

  Alt 11. Mai 2009, 15:32
Joop, geht doch gut vorwärts. Die Methode TTWinControlAnpassung würde ich ändern in ChangeEmbeddedEdit oder UpdateEditSize oder so. Ist zwar völlig wurscht, aber das Auge isst mit. Den alten Wert brauchst des Label brauchst du dir so eigentlich nicht merken. Der Wert als Solches reicht Vollständig. Verpass deinem neuen Label die Eigenschaft Text. Da steht dein einzutragender Wert drin. Beim Edit fängst du das Esc ab. Damit kannst du dann das Edit verstecken und änderst FText einfach nicht. Dan musst du aber sicher wieder ein Flag definieren, dass du setzt bevor du das Edit versteckst um es vom normalen "Lost Focus" zu unterscheiden wo ja der Wert geändert werden soll.

Eigenschaften für published ? ... nehm doch mal alle. Kenne eingentlich keine unnützen da.

Gruß oki
42
  Mit Zitat antworten Zitat
BAMatze

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

Re: größe der Komponente automatisch anpassen

  Alt 11. Mai 2009, 16:04
Zitat von oki:
Joop, geht doch gut vorwärts. Die Methode TTWinControlAnpassung würde ich ändern in ChangeEmbeddedEdit oder UpdateEditSize oder so. Ist zwar völlig wurscht, aber das Auge isst mit.

Eigenschaften für published ? ... nehm doch mal alle. Kenne eingentlich keine unnützen da.

Gruß oki
Hmm ok hier erstmal das einfache, die Properties, die ich bisher identifiziert habe, die nützlich sind:
- Enabled
- Text
- Font(hier als Unterpunkte Color, Height, Name, Style)
- Visible
- eventuell Readonly (Wobei ich hier noch überlege, dann könnte man gleich einfach ein Label nehmen)
- Length
- MaxLength

Jetzt zu dem etwas schwierigeren Sachen, die ich auch teilweise noch nicht verstanden habe.

Zitat von oki:
Den alten Wert brauchst des Label brauchst du dir so eigentlich nicht merken. Der Wert als Solches reicht Vollständig.
Hmm das verstehe ich so, dass ich meinen Quellcode etwa so abändern müsste:
Delphi-Quellcode:
procedure TLabEdit.FEdKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
// Die Änderung hier an dieser Prozedur sehen wie folgt aus: OnChange wird nur
// aktiviert, wenn eine Eingabe getätigt wurde, die verschieden von der vorherigen
// ist.
// Bei Esc wird alles wieder zurückgesetzt und das OnChangeEvent wird nicht aktiviert.
  if (Key = 13) then
    begin
      FEdEingabe.Visible := false;
      FLblAnzeige.Visible := true;
      FLblAnzeige.Caption := FEdEingabe.Text;
      if assigned(FOnChange) then FOnchange;
      ChangeEmbeddedEdit;
    end;
  if (key = 27) then
    begin
      FEdEingabe.Visible := false;
      FLblAnzeige.Visible := true;
      FEdEingabe.Text := sTextWert;
       ChangeEmbeddedEdit;
    end;
end;
Sollte ich, wenn ich die Prozedure so umschreibe immer noch ein Flag setzen? hab das mal so getestet und scheint erstmal wunderbar zu funktionieren.

Setter und Getter schreibe ich gerade direkt in die Komponente. Denke einen zusätzlichen TPresistent zu schreiben wäre aufwendiger. Vorallem wüsste ich da nur schwer, wie ich die Setter und Getter schreiben müsste. So erstelle ich mir eine Variable und dazu jeweils einen Setter und Getter plus einer Property in Published wo ich die Eigenschaft frei gebe.
2. Account Sero
  Mit Zitat antworten Zitat
oki

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

Re: größe der Komponente automatisch anpassen

  Alt 11. Mai 2009, 16:33
Hi,

erst mal sorry für den Verhaspler
Zitat:
Den alten Wert brauchst des Label brauchst du dir so eigentlich nicht merken.
Richtig interpretiert. Dabei musst du aber das Tastaturereignis des Edits abfangen, nicht des Labels (wenn du deine Methode FedKeyDown auf das OnKeyDown des Edits gesetzt hast, dann erübriegt sich mein Kommentar hierzu). Ansonsten hast du vollkommen recht, das Flag ist dabei überflüssig. Wie bin ich blos darauf gekommen . Na ich glaub ich war bei meinem vorherigen Post nicht ganz bei der Sache.

Ich würde auch noch das Exit des Edit abfangen. Das wird aus ausgelöst, wenn das Edit den Fokus verliert. z.B. man clickt neben das Edit wähend es aktiv ist. Da kannst du dann auch das Eingegebene übernehmen wie bei deinem "Enter" in KeyDown.

Letztes Thema; ich sehe bis jetzt immer noch keinen Ansatz wo du einen Wrapper brauchst. Mein Kommaentar in den vorherigen Posts zu diesem Thema war eher eine Vermutung incl. Erläuterung zu deiner Umschreibung mit TPersistent. Das du einen solchen brauchst wollte ich damit nicht ausdrücken. Wie gesagt, da du alle wichtigen Eigenschaften von deinem Label an das Edit übergeben kannst (Font, Left, Top ....) musst du eigentlich keine Eigenschaften des Edit veröffentlichen.

gruß oki

[edit] diverse Fehler wieder eingesammelt [/edit]
42
  Mit Zitat antworten Zitat
BAMatze

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

Re: größe der Komponente automatisch anpassen

  Alt 13. Mai 2009, 10:10
Hab nochmal versucht diese Funktion etwas zu verbessern:
Delphi-Quellcode:
procedure TLabEdit.FEdKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
// Die Änderung hier an dieser Prozedur sehen wie folgt aus: OnChange wird nur
// aktiviert, wenn eine Eingabe getätigt wurde, die verschieden von der vorherigen
// ist.
// Bei Esc wird alles wieder zurückgesetzt und das OnChangeEvent wird nicht aktiviert.
  if (Key = 13) then
    begin
      FEdEingabe.Visible := false;
      FLblAnzeige.Visible := true;
      FLblAnzeige.Caption := FEdEingabe.Text;
      if assigned(FOnChange) then FOnchange;
      ChangeEmbeddedEdit;
    end;
  if (key = 27) then
    begin
      FEdEingabe.Visible := false;
      FLblAnzeige.Visible := true;
      FEdEingabe.Text := sTextWert;
       ChangeEmbeddedEdit;
    end;
end;
Sieht jetzt wie folgt aus und scheint auch seine Schuldigkeit zu tun. Mir ist zumindest kein Fehler aufgefallen:

Delphi-Quellcode:
if key in [13, 27] then
     begin
      FEdEingabe.Visible := false;
      FLblAnzeige.Visible := true;
      case key of
      13: begin
            FsTextWert := FEdEingabe.Text;
            FLblAnzeige.Caption := FEdEingabe.Text;
            if assigned(FOnChange) then FOnchange;
          end;
      27: begin
            FEdEingabe.Text := FsTextWert;

          end;
      end;
    end
  else
    begin
      inherited;
      FLblAnzeige.Caption := FEdEingabe.Text;
      ChangeEmbeddedEdit;
    end;
Sieht so schöner aus.

Mache gleichmal einen extra Threat auf für das Problem, wie erkenne ich, dass außerhalb meiner Komponente geklickt wurde.
2. Account Sero
  Mit Zitat antworten Zitat
oki

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

Re: größe der Komponente automatisch anpassen

  Alt 13. Mai 2009, 10:20
Schöner ist Ansichtssache

Poste hier mal den Link zu deinem neuen Thread, dann brauch ich nicht suchen.

Gruß oki
42
  Mit Zitat antworten Zitat
BAMatze

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

Re: größe der Komponente automatisch anpassen

  Alt 13. Mai 2009, 11:26
Zitat von oki:
Schöner ist Ansichtssache

Poste hier mal den Link zu deinem neuen Thread, dann brauch ich nicht suchen.

Gruß oki
hier der Link
2. Account Sero
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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:42 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