Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Combobox ItemIndex=-1; Text ändern im Event (https://www.delphipraxis.net/96210-combobox-itemindex%3D-1%3B-text-aendern-im-event.html)

StTüff 23. Jul 2007 08:13

Re: Combobox ItemIndex=-1; Text ändern im Event
 
Hallo!

Ich habe mal ein kleines Testprojekt erstellt, dass die Problematik zeigen soll (anbei).
Es gibt eine Combobox bei der zwischen den Einträgen gewechselt werden kann (mit einer Dialogbox wird abgefragt, ob der Wechsel erfolgen soll, oder abgebrochen werden soll). Dabei wird immer der letzte Index gemerkt, so dass der Vorgang abgebrochen und auf den letzten Index zurückgesprungen werden kann.
Dies funktioniert für alle Einträge, nicht aber, wenn die Combobox auf dem Index -1 steht (ist beim Programmstart so und kann mit dem Button wiederhergestellt werden). Dabei wird der Text nicht gesetzt.
Damit der Anwender die Anzeige 'ungültig' nicht als Auswahl bekommt wurde das so gemacht (soll nur eine Info sein, die Programmgesteuert gesetzt werden kann; siehe auch Beschreibungen zuvor).

Wer Lust hat kann mal damit spielen. Bin gespannt, ob einer eine saubere Lösung für das Problem findet.
Ich bin inzwischen soweit, dass ich beinahe schon aufgebe... aber der Ehrgeiz... ich wills wissen :wall:

Gruß und viel Spaß beim tüfteln (das ist ja fast schon ein Wettbewerb :wink: ).

StTüff

PS: Gerade habe ich die Lösung von SirThornberry gesehen. Werde ich gleich mal testen....

=> Habe den Anhang wieder gelöscht, da weiter unten das Beispiel mit Lösung zu finden ist.

StTüff 23. Jul 2007 08:21

Re: Combobox ItemIndex=-1; Text ändern im Event
 
Liste der Anhänge anzeigen (Anzahl: 1)
:dancer: Jawohl... Die Lösung von SirThornberry funktioniert. Er hat damit den Wettbewerb gewonnen! :cheers:

Anbei noch mal die komplette Lösung als Beispiel.

Gruß und vielen Dank für die Beteiligung (und natürlich die Lösung),

StTüff

Reinhard Kern 23. Jul 2007 13:25

Re: Combobox ItemIndex=-1; Text ändern im Event
 
Zitat:

Zitat von StTüff
Hallo Reinhard!

Habe folgenden Versuch unternommen:

Delphi-Quellcode:
    SendMessage(CoBo_Version.Handle, WM_SETTEXT, MAXBUF, Integer(@Buf));
Leider funktioniert es nicht (zumindest nicht zuverlässig).
Schade :(

Gruß,

StTüff

Hallo,

kann es auch garnicht: Sendmessage wartet ja, bis die Message verarbeitet ist. Deswegen habe ich ja geschrieben "mit PostMessage". Sind oft so die Kleinigkeiten.

Gruss Reinhard

SirThornberry 23. Jul 2007 13:29

Re: Combobox ItemIndex=-1; Text ändern im Event
 
und bei PostMessage muss man aufpassen das der Buffer keine lokale Variable ist und nur auf dem Stack liegt.

StTüff 23. Jul 2007 13:32

Re: Combobox ItemIndex=-1; Text ändern im Event
 
Genau :roll:

Aber sonst wäre das leben ja auch zu lanweilig....

Selbstverständlich geht die hälfte des Ruhmes an Dich. SirThornberry war ja quasi nur der Abstauber. Aber auch die "Verwandlung" zählt, nicht (nur) die Torchance....

Gruß und schönen Tag,

StTüff

SirThornberry 23. Jul 2007 13:35

Re: Combobox ItemIndex=-1; Text ändern im Event
 
der Ausschlag gebende Punkt bei der Lösung ist, das die Rückänderung nicht im OnChange erfolgt sondern danach. Und das kann man über einen Timer oder über PostMessage erreichen sofern keine weiteren Messages der Messagequeue im OnChange abgearbeitet werden.

StTüff 23. Jul 2007 13:43

Re: Combobox ItemIndex=-1; Text ändern im Event
 
Die Überlegung mit dem Timer hatte ich ja weiter oben auch schon mal angestellt. Dabei war ich mir aber nicht sicher, ob es eine Überschneidung geben kann, wenn der Timer abläuft, solange das Event (aus welchem Grund auch immer) noch nicht abgelaufen ist.
Ich glaube aber zu wissen, dass das Timerevent (bzw. die zugehörige Nachricht) in der Messageque dann hinten ansteht. Sicher war und bin ich mir da aber nicht, dehalb habe ich es gelassen.

Die Lösung, wie sie jetzt ist finde ich sehr gut und bin froh, dass es ein solches Forum mit kompetenten Teilnehmern gibt.


Gruß,

StTüff

SirThornberry 23. Jul 2007 13:45

Re: Combobox ItemIndex=-1; Text ändern im Event
 
Die Timermessage würde dann hinten in der Messagequeue angestellt werden. Allerding hättest du bei hängen des Programmes den Nachteil das mehrere Timermessages anstehen und somit nach dem abschalten des Timers im OnTimer trotzdem noch weitere male das OnTimer-Event ausgeführt werden könnte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:28 Uhr.
Seite 3 von 3     123   

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