AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi fremde Combobox mit CBN_SELCHANGE ändern
Thema durchsuchen
Ansicht
Themen-Optionen

fremde Combobox mit CBN_SELCHANGE ändern

Ein Thema von stoxx · begonnen am 24. Feb 2010 · letzter Beitrag vom 24. Nov 2010
Antwort Antwort
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#1

fremde Combobox mit CBN_SELCHANGE ändern

  Alt 24. Feb 2010, 12:12
ich hatte versucht, eine fremde Combobox mit Sendmessage und CBN_SELCHANGE zu ändern.
Das funktioniert nur halb, der Eintrag wird geändert, aber das Programm reagiert nicht so, als wenn ein User die Auswahl treffen würde.
Das Programm bekommt also nichts mit, von der Änderung.
Was fehlt da noch?
vielen Dank !
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#2

AW: fremde Combobox mit CBN_SELCHANGE ändern

  Alt 23. Nov 2010, 12:33
Hey,
ich hab das selbe Problem.
Deshalb: *PUSH*
Delphi-Quellcode:
  ItemIndex := SendMessage(wndCB, CB_FINDSTRING, -1, Integer(@AItemStr[1])); // Funzt
  SendMessage(wndCB, CB_SETCURSEL, ItemIndex, 0); // Funzt

  // myList->GetParent()->SendMessage(WM_COMMAND, MAKEWPARAM(myList->GetDlgCtrlID(), CBN_SELCHANGE), LPARAM( myLyst->GetSafeHwnd() ));
  SendMessage(GetParent(wndCB),
              WM_COMMAND,
              MakeWParam(GetDlgCtrlID(wndCB), CBN_SELCHANGE),
              wndCB); // Wo liegt der Fehler?
Hier funktionierts anscheinend: 1 2
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#3

AW: fremde Combobox mit CBN_SELCHANGE ändern

  Alt 23. Nov 2010, 13:09
Ich habs!
Delphi-Quellcode:
    SendMessage(GetParent(wndCB),
                WM_COMMAND,
                MakeWParam(1000, CBN_SELCHANGE),
                wndCB);
Jetzt müsste man nur noch rausbekommen wozu die 1000 da steht. Aber für meinen einmaligen Fall jetzt auch egal.
Danke für die Aufmerksamkeit.
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#4

AW: fremde Combobox mit CBN_SELCHANGE ändern

  Alt 23. Nov 2010, 13:11
Dann sag doch mal an was das entfernte Programm ist? Und vor allem ob es sich um eine echte Win32-Combobox handelt (kannste mit WinSpy gucken).

CBN_SELCHANGE ist übrigens eine Benachrichtigung, keine Fensternachricht im eigentlichen Sinn. Wie ich sehe haste das schonmal mitbekommen - denn die meisten Benachrichtigungen kommen via MSDN-Library durchsuchenWM_COMMAND.

Die tausend kannste dir selber herausfinden wenn du die Doku liest
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#5

AW: fremde Combobox mit CBN_SELCHANGE ändern

  Alt 23. Nov 2010, 13:25
Dann sag doch mal an was das entfernte Programm ist?
Eine in Delphi geschriebene Anwendung.

Und vor allem ob es sich um eine echte Win32-Combobox handelt (kannste mit WinSpy gucken).
Durch den Namen habe ich auf eine von T[Custom]ComboBox abgeleitete Komponente geschlossen.
Deshalb -> selber abgeleitet, Messages abgefangen + analysiert und raus kam die wparamlo magic number.

Geändert von mleyen (23. Nov 2010 um 13:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: fremde Combobox mit CBN_SELCHANGE ändern

  Alt 23. Nov 2010, 14:26
Durch den Namen habe ich auf eine von T[Custom]ComboBox abgeleitete Komponente geschlossen.
Es gibt genügend Custom-Comboboxen die nicht auf TCustomComboBox basieren (z.B. ElPack-Controls).
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#7

AW: fremde Combobox mit CBN_SELCHANGE ändern

  Alt 23. Nov 2010, 15:16
ja, ok.
Ich habs jetzt nochmal spaßeshalber getestet und siehe da: es geht nicht mehr mit der 1000.
Es schien zufall gewesen zu sein, dass es eine programmsitzung lang funktioniert hat.

ich hab nochmal kurz drüber geschaut, da fliegen beim Itemchange noch einige CN_COMMAND-Msgs mit WParamHi=1en+9en und lparam=wndCB. wplo kA ...
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#8

AW: fremde Combobox mit CBN_SELCHANGE ändern

  Alt 23. Nov 2010, 17:23
ja, ok.
Ich habs jetzt nochmal spaßeshalber getestet und siehe da: es geht nicht mehr mit der 1000.
Dann würde mich mal interessieren, ob du zuvor (als es "zufällig") ging nicht zufällig das Fenster welches die CB besitzt fokussiert hattest?!

Fenster arbeiten basierend auf Nachrichten und ein Fenster welches den Fokus hat, bekommt Nachrichten zu sehen die es nicht zu sehen bekommt wenn es nicht den Fokus hat.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#9

AW: fremde Combobox mit CBN_SELCHANGE ändern

  Alt 24. Nov 2010, 07:51
ja, ok.
Ich habs jetzt nochmal spaßeshalber getestet und siehe da: es geht nicht mehr mit der 1000.
Dann würde mich mal interessieren, ob du zuvor (als es "zufällig") ging nicht zufällig das Fenster welches die CB besitzt fokussiert hattest?!
Ich hatte immer mein Formular aktiv um die Routine zu betätigen.
Vorhin hab ich es mal in einem Timer senden lassen und währenddessen die CB fokussiert. Nichts.

Aber ich hab jetzt einen Workaround der immer klappt:
Delphi-Quellcode:
      CBContent := getWinText(wndCB);
      if CBContent = cStr1 then
        tmp := SendMessage(wndCB, CB_FINDSTRING, -1, Integer(@cStr2[1]))
      else
        if CBContent = cStr2 then
          tmp := SendMessage(wndCB, CB_FINDSTRING, -1, Integer(@cStr1[1]))
        else
          Exit;
      SendMessage(wndCB, CB_SETCURSEL, tmp, 0);
      PostMessage(wndCB, WM_KEYDOWN, VK_RETURN, MakeLong(0, MapVirtualKey(VK_RETURN, 0)) );
      PostMessage(wndCB, WM_KEYUP, VK_RETURN, Cardinal(MakeLong(0, MapVirtualKey(VK_RETURN, 0))) or $C0000000);
So reichts mir jetzt eigentlich.
  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 23:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz