AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Property Read Only bei Combobox hinzufügen (Style = csSimple)
Thema durchsuchen
Ansicht
Themen-Optionen

Property Read Only bei Combobox hinzufügen (Style = csSimple)

Ein Thema von RWarnecke · begonnen am 24. Okt 2011 · letzter Beitrag vom 11. Jan 2019
 
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#10

AW: Property Read Only bei Combobox hinzufügen (Style = csSimple)

  Alt 25. Okt 2011, 17:09
Hintergrund ist Folgender:
Delphi-Quellcode:
procedure TComboBoxReadOnly.SetReadOnly(Value: Boolean);
begin
  ...
  if HandleAllocated then
    SendMessage(EditHandle, EM_SETREADONLY, Ord(Value), 0);
end;
Du setzt EM_SETREADONLY nur, wenn die interne Komponente vorhanden ist (HandleAllocated=True), was ja vollkommen korrekt ist.

Ist die interne Komponente da aber noch nicht vorhanden, oder wird sie zwischendurch/danach neu erstellt, ist/wird dieses natürlich nicht gesetzt.
Darum also Dieses ebenfalls setzen, nachdem die (neu) Komponente erstellt wurde.
Ich habe jetzt einfach die Zeile if HandleAllocated then einfach rausgenommen, dann habe ich die ReadOnly Funktion aktiv im Style csSimple, wenn ich den Style während der Laufzeit umstelle. Dieses war ja auch mein Ziel.

Delphi-Quellcode:
type
  TComboBoxReadOnly = class(TComboBox)
  private
    FReadOnly: Boolean;
    procedure SetReadOnly(const Value: Boolean);
   procedure KeyPress(var Key: Char);override;
   Procedure CreateWnd;Override;
  public
    { Public-Deklarationen }
  published
    property ReadOnly: Boolean read FReadOnly write SetReadOnly default False;
  end;

procedure TComboBoxReadOnly.CreateWnd;
begin
  inherited;
  ReadOnly := FReadOnly;
end;

procedure TComboBoxReadOnly.KeyPress(var Key: Char);
begin
  if not readonly then inherited;
end;

procedure TComboBoxReadOnly.SetReadOnly(const Value: Boolean);
begin
  FReadOnly := Value;
  if HandleAllocated then
    SendMessage(EditHandle, EM_SETREADONLY, Ord(Value), 0);
end;
Mit den beiden Funktionen KeyPress und CreateWnd erschlage ich doch das Gleiche, wie mit dem Weglassen der Abfrage nach HandleAllocated oder ?

Desweiteren taucht bei mir, dann auch noch die Frage auf, wenn ich jetzt das Ereignis KeyPress verwenden will in seiner ursprünglichen Form, funktioniert dieses doch nicht, da in der Deklaration ein Override drin steht ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
 


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 08:16 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