Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Edit leert sich bei Enter (https://www.delphipraxis.net/172586-edit-leert-sich-bei-enter.html)

Helmi 12. Jan 2013 13:40

Edit leert sich bei Enter
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich weiss momentan nicht mehr weiter.

Ich hab eine Komponente von TLabeledEdit abgeleitet, hab der noch ein 2. Label (PostLabel) verpasst und im Edit einen Button.
(heisst TAlignLabeledButtonEdit)

Es funktioniert auch tadellos - nur ein Problem hab ich:
Wenn ich im Edit einen Text eingebe und die Enter-Taste drücke, dann wird das Edit geleert.
Bei einem normalen TLabeledEdit passiert das nicht - also muss es durch meinen Code erfolgen.
Leider finde ich keine Stelle wo das (direkt) passiert.
Debuggen kann ich es leider nicht, weil mir der Ansatz dafür fehlt (weiss gar nicht wo ich ansetzen sollte).

Der Button ist ein SpeedButton - daher kann dieser nicht den Fokus erhalten und ich sehe ihn auch nicht als das Problem an (hab ihn auch mal komplett rauskommentiert - das Problem besteht weiterhin)

Anbei mal die Unit - vielleicht findet jemand das Problem...

Bummi 12. Jan 2013 13:56

AW: Edit leert sich bei Enter
 
Ich wollte nichts installieren und habe deshalb so getestet, aber keine Probleme feststellen können....

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
 i:Integer;
begin
  for I := 0 to 3 do

  with TAlignLabeledButtonEdit.Create(self) do
    begin
      Top := i*20;
      parent := self;
      OnButtonClick := Label1Click;
    end;
end;

procedure TForm1.Label1Click(Sender: TObject);
begin
  Showmessage(TAlignLabeledButtonEdit(Sender).Text)
end;

Helmi 12. Jan 2013 14:04

AW: Edit leert sich bei Enter
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Bummi (Beitrag 1198780)
Ich wollte nichts installieren und habe deshalb so getestet, aber keine Probleme feststellen können....

Danke fürs Testen...

Ich habe deinen Test genau so nachvollzogen.
Wenn ich in einem Edit etwas eingebe, und die Entertaste drücke (nicht den Button) wird der Inhalt vom Edit gelöscht.
Klick ich danach auf den Button, wird der vorher eingegebene Text im Label angezeigt.
Anscheinend wird nur optisch der Text geleert - aber nicht in der Variablen intern

[Edit]
Ich hab das mal in ein Beispiel-Projekt gepackt

Bummi 12. Jan 2013 16:50

AW: Edit leert sich bei Enter
 
es wird nicht leer, sondern es bricht um... mit Pfeil auf/ab kannst Du scrollen.

wenn Du das nicht willst, musst Du Deine CreateParams ändern.

Delphi-Quellcode:
procedure TAlignLabeledButtonEdit.CreateParams(var params: TCreateParams);
const
  Alignments: array[TAlignment] of Word = (DT_LEFT, DT_RIGHT, DT_CENTER);
begin
  // Geerbte Parameter setzen
  params.Style := (params.Style or Alignments[FAlignment] or WS_CLIPCHILDREN) and not ES_MULTILINE;
  inherited CreateParams(params);
end;

Helmi 12. Jan 2013 17:18

AW: Edit leert sich bei Enter
 
Zitat:

Zitat von Bummi (Beitrag 1198800)
es wird nicht leer, sondern es bricht um... mit Pfeil auf/ab kannst Du scrollen.

wenn Du das nicht willst, musst Du Deine CreateParams ändern.

Mist - ich könnt mich grad in A... beissen, weil ich da nicht selbst drauf gekommen bin
Danke für die Hilfe!

[EDIT]
Jetzt weiss ich auch woher das ES_MULTILINE kam:
Ich hab mir das mit dem Button einfügen in ein Edit von SpinEdit abgeschaut und dort ist ES_MULTILINE auch aktiv
so wie es ausschaut muss es auch aktiv bleiben, da es ohne nicht geht (also Button in Edit).

Wenn man sich aber dann das KeyPress intern vom SpinEdit anschaut, dann werden dort bestimmte Tasten "verschluckt"


Habs jetzt so gelöst:
Delphi-Quellcode:
procedure TAlignLabeledButtonEdit.KeyPress(var Key: Char);
begin
  If Key = #13 then
    Key := #0
  else
    inherited KeyPress(Key);
end;

procedure TAlignLabeledButtonEdit.CreateParams(var params: TCreateParams);
const
  Alignments: array[TAlignment] of Word = (DT_LEFT, DT_RIGHT, DT_CENTER);

begin
  inherited CreateParams(params);

  // Geerbte Parameter setzen
  params.Style := params.Style or Alignments[FAlignment] or ES_MULTILINE or
                  WS_CLIPCHILDREN;;
end;

Helmi 13. Jan 2013 12:58

AW: Edit leert sich bei Enter
 
Mittels meiner Änderung:
Delphi-Quellcode:
procedure TAlignLabeledButtonEdit.KeyPress(var Key: Char);
begin
   If Key = #13 then
     Key := #0
   else
     inherited KeyPress(Key);
end;
kann ich natürlich die Entertaste nicht mehr im OnKeyPress abfragen.
Gibts trotzdem ne Möglichkeit das ggf. zu Nutzen?

Volker Z. 13. Jan 2013 13:29

AW: Edit leert sich bei Enter
 
Hallo,

vielleich hilft Dir folgendes:
Delphi-Quellcode:
procedure TAlignLabeledButtonEdit.KeyPress(var Key: Char);
begin
  inherited KeyPress(Key);
  if Key = #13 then
    Key := #0
end;
Gruß

Helmi 13. Jan 2013 13:42

AW: Edit leert sich bei Enter
 
Zitat:

Zitat von Volker Z. (Beitrag 1198887)
Hallo,

vielleich hilft Dir folgendes:
Delphi-Quellcode:
procedure TAlignLabeledButtonEdit.KeyPress(var Key: Char);
begin
  inherited KeyPress(Key);
  if Key = #13 then
    Key := #0
end;
Gruß

Wenn alles so einfach wär :-)
Danke - so funktionierts

Volker Z. 13. Jan 2013 15:44

AW: Edit leert sich bei Enter
 
Hallo,

ist gerade aufgefallen: Deine Komponente lässt das Pasten mehrzeiligen Texts zu. Wenn Du ein Return abfängst, dann vermute ich mal, dass Du an Deiner WMPaste noch ein bisserl schleifen musst.

Gruss

Helmi 13. Jan 2013 19:56

AW: Edit leert sich bei Enter
 
Zitat:

Zitat von Volker Z. (Beitrag 1198896)
ist gerade aufgefallen: Deine Komponente lässt das Pasten mehrzeiligen Texts zu. Wenn Du ein Return abfängst, dann vermute ich mal, dass Du an Deiner WMPaste noch ein bisserl schleifen musst.

Theoretisch ja - aber das lass ich jetzt mal unter den Tisch fallen (ich sollte da drunter mal wieder aufräumen)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:58 Uhr.
Seite 1 von 2  1 2      

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