AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Popup/Contextmenü bleibt leer

Ein Thema von Orakel-von-Delphi · begonnen am 28. Feb 2012 · letzter Beitrag vom 21. Mai 2012
Antwort Antwort
Seite 2 von 2     12   
EWeiss
(Gast)

n/a Beiträge
 
#11

AW: Popup/Contextmenü bleibt leer

  Alt 25. Mär 2012, 10:44
Ob ein Subclassing dafür die richtige lösung ist (auch wenn es funktioniert) mag dahin gestellt sein.
Ich würde den Fehler bei der Wurzel packen und nach dem Übeltäter suchen bzw. dann lieber das popupmenu selber zeichnen
als dieses zu verwenden das die Fehler verursacht.
Irgenwo hängt das in einer Winproc(Fremdcomponente)

Das verstehe ich auch nicht.
OldPopupListWndProc := TFNWndProc(GetWindowLong(PopupList.Window, GWL_WNDPROC));

warum nicht einfach
OldPopupListWndProc := pointer(GetWindowLong(PopupList.Window, GWL_WNDPROC));

Vielleicht hilft dir da was weiter

gruss

Geändert von EWeiss (25. Mär 2012 um 11:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#12

AW: Fremdkomponenten

  Alt 25. Mär 2012, 16:26
Wenn Du den Screenshot (http://softwaremacher.de/images/context_empty_001.jpg) einmal ansiehst, erkennst Du, dass das Popupmenü zwar rudimentär angezeigt wird, aber keine Inhalte hat
Bis hierhin gehe ich mit, und das war mir schon klar. Das hingegen
Zitat:
und auch nicht mehr reagiert.
kann ich einem Screenshot (=stehendes Bild) nicht entnehmen.

Zitat:
Alle anderen Funktionen der GUI stehen nämlich weiter zur Verfügung und führen auch nicht dazu, dass der Popup wieder automatisch schließt.
Kann ich einem stehenden Bild auch nicht entnehmen. Und das hast du bisher auch noch nicht erwähnt. Also ist das Problem nicht nur auf den fehlenden Text beschränkt sondern beeinflusst noch andere Dinge im Programm.

Ich kann mich nur wiederholen: ich würde erstmal ein dummes Testprogramm erstellen und prüfen, ob das Kontextmenü dort ebenso leer ist. Und dann Stück für Stück die im Problemprogramm benutzten Komponenten einbinden. Irgendwann sollte das Problem ja auftauchen. Und falls nicht, so kann man immernoch selber zeichnen (oder eine andere Komponente fürs PopupMenu benutzen).

MfG Dalai
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#13

AW: Popup/Contextmenü bleibt leer

  Alt 25. Mär 2012, 16:41
Zitat:
Ich kann mich nur wiederholen: ich würde erstmal ein dummes Testprogramm erstellen und prüfen, ob das Kontextmenü dort ebenso leer ist. Und dann Stück für Stück die im Problemprogramm benutzten Komponenten einbinden. Irgendwann sollte das Problem ja auftauchen. Und falls nicht, so kann man immernoch selber zeichnen (oder eine andere Komponente fürs PopupMenu benutzen).
Dem kann ich nur beipflichten.. bzw. Habe ich ja auch schon angemerk.
Mit dem Subclassing pfuscht er irgendwo noch zusätztlich im programm herum der Fehler ist dahingehend aber nicht beseitigt.
Es könnte ja wie in meinem Link beschrieben eine Kompo sein die Unicode nicht unterstützt.

Zitat:
If your compiler is not set to compile for unicode (i.e #ifndef UNICODE) then winuser.h will map AppendMenu to AppendMenuA which is a non-unicode version and would interpret your strings as multi-byte.

gruss

Geändert von EWeiss (25. Mär 2012 um 16:49 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Orakel-von-Delphi
Orakel-von-Delphi

Registriert seit: 27. Jan 2004
Ort: Mittelhessen
45 Beiträge
 
Delphi 2007 Professional
 
#14

Testprogramm

  Alt 26. Mär 2012, 05:01
Zitat:
Ich kann mich nur wiederholen: ich würde erstmal ein dummes Testprogramm erstellen und prüfen, ob das Kontextmenü dort ebenso leer ist.
Das Problem ist aber eben, dass es mit einem "dummen" Testprogramm nicht einfach zu reproduzieren ist. Das Problem ist nämlich intermittierend - d.h. es tritt nicht bei allen 70 Arbeitsplätzen des Kunden auf und auch nicht jeden Tag. Auch die Mitarbeiterinnen, die am häufigsten davon betroffen sind, können nicht genau sagen, wie das Problem reproduzierbar ist. Die Rechner sind übrigens alle gleich und mit dem gleichen Image installiert worden.
Zitat:
... nicht nur auf den fehlenden Text beschränkt sondern beeinflusst noch andere Dinge im Programm.
Ja - nämlich ein totaler Absturz, wenn man es nicht sofort schließt.
Zitat:
Irgendwo hängt das in einer Winproc(Fremdcomponente).
Exakt ! Nur in welchem Kontext

VG Michael
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Orakel-von-Delphi
Orakel-von-Delphi

Registriert seit: 27. Jan 2004
Ort: Mittelhessen
45 Beiträge
 
Delphi 2007 Professional
 
#15

Solved

  Alt 21. Mai 2012, 12:55
Die ca. 15 - 20 Fremdkomponenten können nicht einfach aus mehreren 100.000 Zeilen Code entfernt werden.

Deshalb habe ich die oben angesprochene Mimik
Code:
.
.

procedure TMain.PopupListWndProc(var Message: TMessage);
begin
  with Message do
  begin
    case Msg of
      WM_ENTERMENULOOP:
        if evPopAvail.WaitFor(0) = wrSignaled then
          begin
           evPopAvail.ResetEvent();
           .
           <Subroutine mit Application.ProcessMessages>
           .
          end
        else
          begin
           Exit;
          end;
      WM_EXITMENULOOP:
        evPopAvail.SetEvent();
    end;
   Result := CallWindowProc(OldPopupListWndProc, PopupList.Window, Msg, WParam, LParam);
  end;
end;

.
.
im Hauptfenster der Applikation implementiert. Seitdem ist das Problem verschwunden. Der TEvent sorgt zusammen mit WM_ENTERMENULOOP und WM_EXITMENULOOP auf jeden Fall sicher dafür, dass nicht aus irgendwelchen Gründen (bspw. Hintergrund-Threads) zwei mal zur gleichen Zeit ein Popup aufgehen kann.
Michael
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   

 

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 16:44 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