![]() |
Caret in TEdit /TComboBox an X/Y - Position setzen
Hallo!
Wie kann man das Caret (=den blinkenden Cursor) in einer Combobox an eine bestimmte Stelle setzen? (ausgehend von Ziel-Koordinaten in Pixel) Hintergrund: Man kann per Drag&Drop Labels in die Combobox ziehen. Wenn die Drag-operation auf der Combobox beendet wird, soll an dieser Stelle der entsprechende Text eingefügt werden. Ich dachte ich setze den Cursor schon jeweils im OnDragOver auf die aktuelle Position. Aber wie?!? (d.h. ich hab X/Y-Pixel-Koordinaten und weiss noch NICHT an welcher Zeichen-Position das dann währe. SelStart fällt also aus) Danke, Ralf |
Re: Caret in TEdit /TComboBox an X/Y - Position setzen
xxxxx << War Unsinn, nicht ganz gelesen, sorry.
|
Re: Caret in TEdit /TComboBox an X/Y - Position setzen
Geht das nicht mit
![]() |
Re: Caret in TEdit /TComboBox an X/Y - Position setzen
Zitat:
Ich hab schon vorher eine Zeitlang damit herumprobiert und bin zu keinen vernünftigen Ergebnissen gekommen. :wall: HILFE!!! Danke! |
Re: Caret in TEdit /TComboBox an X/Y - Position setzen
Hab mal schnell in der DP gestöbert und bin auf
![]() |
Re: Caret in TEdit /TComboBox an X/Y - Position setzen
Zitat:
Hab das früher schon mal ausprobiert, hat nicht funktioniert. Jetzt bin ich draufgekommen, das funktioniert bei TEdit, nicht aber bei TCombobox. Danke für den Tip, werd' wohl einfach ein verstecktes Dummy-TEdit mit der da beschriebenen Methode verwenden um die Caret-Position zu bestimmen. |
Re: Caret in TEdit /TComboBox an X/Y - Position setzen
Warum hat es nicht funktioniert?
Weil du nicht an das Handle vom Edit herangekommen bist? Verfolge mal den Source von TComboBox, an das Handle kommst du schon 'ran. |
Re: Caret in TEdit /TComboBox an X/Y - Position setzen
Zitat:
hat bei mir gar nix getan, CaretPos:=MyTestControl.Perform(EM_CHARFROMPOS, 0, X); geht aber. Zumindest bei TEdit. Ist von ![]() |
Re: Caret in TEdit /TComboBox an X/Y - Position setzen
Du hast das Handle der Combobox übergeben, du benötigst aber das Handle des eingebetteten Edits. Daher funktioniert das nicht.
Der Vorfahr TCustomCombo kennt dieses Handle, schau mal in den Source - es ist dort allerdings als "protected" deklariert. Deswegen kannst du in TComboBox nicht darauf zugreifen. Du kannst jetzt z. B. eine eigene Combobox ableiten, das EditHandle darin veröffentlichen "public" und dann natürlich benutzen.
Delphi-Quellcode:
Das ist natürlich nur ein Beispielschema ...
type tMyCombo = class(TCustomCombobox)
public property EditHandle; end; procedure Tfo~~.FormShow(Sender:TObject); var cb :tMyCombo; begin cb:=tMyCombo.Create(Self); cb.Parent:=Self; cb.Top :=200; cb.Left :=400; cb.Text :=IntToStr(cb.EditHandle); // << das ist das Edit-Handle // .. end; |
Re: Caret in TEdit /TComboBox an X/Y - Position setzen
Zitat:
Einfachere Lösung: hacken und drübercasten. In der gleichen Unit kommt man ja auch auf die Protected-Teile.
Delphi-Quellcode:
Danke für den Denkanstoss! :cheers:
type
TCrackCombobox = class(TCombobox) end; procedure TForm1.Edit1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); var i : integer; begin i:=SendMessage(TCrackCombobox(ComboBox1).EditHandle, EM_CHARFROMPOS, 0, x); if i>=0 then ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:38 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