Formular an Control binden

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Formular an Control binden

Beitrag von Michl »

Hallo allerseits,

ich bin dabei ein altes Control von mir neu zu schreiben, ähnlich einer Combobox. Bisher hatte ich ein TListBox unterhalb eines TEdits auf dem Parent verankert. Öfters hat aber der Platz nicht gereicht, die ListBox vollständig anzuzeigen. Daher erstelle ich nun ein Formular mit einer ListBox entsprechend der Position vom TEdit. Die Basics funktionieren eigentlich (Windows 7 / Linux Mint getestet).

Bei einem Problem habe ich bisher keine gute Lösung gefunden. Wenn man das Formular mit der Komponente fasst und verschiebt, bleibt das Formular an der alten Stelle stehen. Gut wäre es, wenn es dann einfach ausgeblendet wird.

Meine Überlegungen bisher waren, einen Timer zu erstellen, der überprüft, ob sich die Position vom TEdit auf dem Screen geändert hat. Doch ein Timer in meiner Komponente möchte ich möglichst vermeiden.

Der aktuelle Workaround ist, Messages zu nutzen, die gefeuert werden, wenn das Formular bewegt wird. Windows 7 sendet ein WM_IME_NOTIFY und Linux Mint GTK2 oft LM_PAINT, sodaß ich dort die Positionsänderung prüfe. Allerdings bleibt unter Linux Mint die Listbox solange sichtbar, bis man das Formular wieder loslässt.

Anbei ein Testprojekt, einfach mal ein "a" in das Edit eingeben und das Formular verschieben, dann sieht man mein Problem.

Hat jemand eine sonstige Idee, wie ich sonst noch mitbekommen kann, wenn das Formular, auf dem sich das TEdit befindet, bewegt wird?

Bin für jede Anregung dankbar!

Michael
Dateianhänge
TestSuggestEdit.zip
(12.6 KiB) 33-mal heruntergeladen

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Formular an Control binden

Beitrag von Michl »

Wenn ich das TSynBaseCompletionForm debugge, sehe ich, dass hier der Weg genau anders herum gegangen wurde. Das TSynBaseCompletionForm hat den Focus, wenn es diesen verliert, wird es automatisch ausgeblendet. Eingaben per Tastatur ändern das aufrufende Control (TCustomSynEdit).

Weiß jemand, wie man es hinbekommt, daß ein anderes Formular aktiv bleibt bzw. als aktiv dargestellt wird (z.B. blinkender Cursor in einem TEdit, Form Caption aktiv), während der Fokus auf einem anderen liegt?

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Antworten