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
Antwort Antwort
Benutzerbild von RWarnecke
RWarnecke

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

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

  Alt 25. Okt 2011, 06:33
Hallo zusammen,

danke erstmal für eure Antworten.
Und es genügt nicht ... Style := csDropDownList; ? Danach kann man nix mehr eintippen, nur noch aus der vorhandenen Liste auswählen.
Nein, das reicht in dem Falle nicht. Ich möchte bei der Maske einen Lese-Modus und einen Schreibmodus haben.
Beim Lese-Modus soll es keine Möglichkeit geben, den Wert im Textfeld der Combobox zu ändern, daher der Style csSimple. Im Schreibenmodus sollen nur die Eingaben angenommen werden, die auch als Position in der Combobox stehen oder man soll sich eine Position aus der Liste per Maus auswählen.

@bummi & himitsu:
Wenn ich euch beide richtig verstanden habe, muss ich nur RecreateWnd und/oder CreateWnd überschreiben, nur verstehe ich da noch nicht ganz den Hintergrund. Wenn ich die Combobox in den Style csSimple setze habe ich ja lediglich ein sogenanntes Editfeld. Wenn ich darin jetzt eine Eingabe mache und bei den Items etwas drinsteht und diese beiden Sachen übereinstimmen, wird mir die Position ja vorgeschlagen. Wenn ich jetzt die Property Autocomplete auf False setze, dann schalte ich zumindest schonmal den Vorschlag ab, kann aber immer noch etwas eingeben. Deshalb vermute ich mal, dass ich für den ReadOnly Betrieb nur noch eine weitere Zeile honzufügen oder die bestehende Zeile ändern muss für den Style csSimple.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

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

  Alt 25. Okt 2011, 06:46
mhhhh, ob wir jetzt alles erwischt haben ....

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

  begin
    FReadOnly := Value;
    if HandleAllocated then
      SendMessage(EditHandle, EM_SETREADONLY, Ord(Value), 0);
  end;
end;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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

  Alt 25. Okt 2011, 07:33
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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

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

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
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

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

  Alt 25. Okt 2011, 18:56
Ich verstehe die letzte Frage nicht ganz...
Du rufst Du
if not readonly then inherited;
auf die Procedure ist ja mit override und nicht ohne alles oder mit overload oder reintroduce deklariert
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

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

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

  Alt 25. Okt 2011, 19:05
Ich verstehe die letzte Frage nicht ganz...
Du rufst Du
if not readonly then inherited;
auf die Procedure ist ja mit override und nicht ohne alles oder mit overload oder reintroduce deklariert
Ok, vergiss meine letzte Frage. Habe die Procedure KeyPress mit dem Ereignis OnKeyPress der Komponente verwechslet, weil nicht richtig gelesen. Deshalb erübrigt sich meine Frage nach dem KeyPress.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Koloss

Registriert seit: 21. Jul 2010
74 Beiträge
 
Delphi 2 Desktop
 
#7

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

  Alt 10. Jan 2019, 15:21
Gibt es hier ein Lösung? Weil das ganze hier ist keine Lösung.

Das man KeyPress nichts macht kann man doch einfacher auch lösen, es geht doch auch darum das er beim auswählen eines Eintrags den Text nicht reinschreibt. Ich möchte aber trotzdem die Einträge sehen. Nur beim auswählen sollte nichts passieren !
  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 20:14 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