| Autor |
Beitrag |
Matthias-K
      
Beiträge: 271
Win95, Win98, Win2000, WinXP, Linux
D2, D4 Client/Server, D5 Enterprise, D6 Enterprise, D7 Enterprise, Delphi2005, C/C++ 3.0, C/C ++ 5.0, C/C++ 6.0
|
Verfasst: Sa 14.10.06 17:55
nabend,
ich hab hier etwas entdeckt, was ich nicht direkt nachvollziehen kann:
und zwar benutze ich eine procedure, die das automatische aufklappen der combobox bewirkt. nur leider mache ich das beim onshow einer form. das problem ist, das das aufgeklappte menü ne halbe sekunde eher da ist, wie die form. das ist an sich kein problem, nur sieht das irgendwie sch***e aus.
auserdem ist das beim ersten aufruf des forms an der falschen stelle.
das 2. prob ist das gravierendere.
aufklappen mac ich wie folgt:
Delphi-Quelltext 1:
| cbvorwahl.Perform(CB_SHOWDROPDOWN, Integer(True), 0); |
zur veranschaulichung hab ich mal noch ein bild angehängt, wo das dropdown menü auftaucht.
beim 2. start ist das menü wiederum an der richtigen pos.
ic könnte das auch durch eine andere möglichkeit umgehen, nur ist mir das extrem unlieb, weil das gesammtbild dadurch zerstört wird.
mfg matthias
p.s. lasst euch zeit, ich sitz grad auf der geb feier meines opas mit dem schlaptop! *gggg*
p.p.s i love wlan
Einloggen, um Attachments anzusehen!
_________________ Ein Spezialist ist ein Mensch, der immer mehr von immer weniger weis, bis er alles von nichts weis!
|
|
Reinhard Kern
      
Beiträge: 591
Erhaltene Danke: 14
|
Verfasst: So 15.10.06 12:39
Matthias-K hat folgendes geschrieben: | nabend,
ich hab hier etwas entdeckt, was ich nicht direkt nachvollziehen kann:
und zwar benutze ich eine procedure, die das automatische aufklappen der combobox bewirkt. nur leider mache ich das beim onshow einer form. das problem ist, das das aufgeklappte menü ne halbe sekunde eher da ist, wie die form. das ist an sich kein problem, nur sieht das irgendwie sch***e aus.
auserdem ist das beim ersten aufruf des forms an der falschen stelle.
das 2. prob ist das gravierendere.
aufklappen mac ich wie folgt:
Delphi-Quelltext 1:
| cbvorwahl.Perform(CB_SHOWDROPDOWN, Integer(True), 0); |
zur veranschaulichung hab ich mal noch ein bild angehängt, wo das dropdown menü auftaucht.
beim 2. start ist das menü wiederum an der richtigen pos.
ic könnte das auch durch eine andere möglichkeit umgehen, nur ist mir das extrem unlieb, weil das gesammtbild dadurch zerstört wird.
mfg matthias
p.s. lasst euch zeit, ich sitz grad auf der geb feier meines opas mit dem schlaptop! *gggg*
p.p.s i love wlan |
Hallo,
hoffe, du hast die Feier inzwischen überwunden.
Zum Problem: bei perform muss die Combobox ja sofort reagieren. Hast du schon mal versucht, stattdessen PostMessage zu verwenden? Muss nicht besser sein, aber könnte.
Gruss Reinhard
|
|
Matthias-K 
      
Beiträge: 271
Win95, Win98, Win2000, WinXP, Linux
D2, D4 Client/Server, D5 Enterprise, D6 Enterprise, D7 Enterprise, Delphi2005, C/C++ 3.0, C/C ++ 5.0, C/C++ 6.0
|
Verfasst: So 15.10.06 23:15
nabend,
ich hab grad beim anstossen auf die geburt des ersten kindes von nem kumpel die idee gahbt und glei umgesetzt:
das automatische aufklappen nicht ins onshow der form setzen, sondern ins onactivate!
gesagt, getan. funktioniert! nur leider hatte das den effekt, das die combobox wie weg war! es war nur noch der drop down pfeil da! aber die lösung war ein einfaces repaint der combobox nach dem automatischen öffnen.
jetzt funktioniert alles wies sein soll!
trotzdem vielen dank!
mfg matthias
p.s. ich bin mir dieses paradoxum bewusst, das ich die ideen nur beim saufen habe! *ggg*
_________________ Ein Spezialist ist ein Mensch, der immer mehr von immer weniger weis, bis er alles von nichts weis!
|
|
Ironwulf
      
Beiträge: 733
Erhaltene Danke: 2
|
Verfasst: Mo 16.10.06 00:01
versuchs mal in das onpaint der form zusetzen, evtl kannst dir da noch das repaint ersparen
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: Mo 16.10.06 05:40
Ironwulf hat folgendes geschrieben: | | versuchs mal in das onpaint der form zusetzen, evtl kannst dir da noch das repaint ersparen |
Das würde ich nicht machen. Denn dann würde das aufklappen bei jedem Repaint kommen  . Man könnte natürlich das Repaint-Ereignis dann entfernen ( OnPaint:=nil;).
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mo 16.10.06 07:25
Wie wäre es mit einem Timer, denn Du im OnShow startest, und der nach ca. 500ms einmalig deine Aktion ausführt. Etwas Besseres ist mir bisher auch nicht eingefallen. Du könntest natürlich auch im Paint der Form über einen Flag dafür sorgen, das deine Aktion nur 1x ausgeführt wird.
_________________ Na denn, dann. Bis dann, denn.
|
|
Matthias-K 
      
Beiträge: 271
Win95, Win98, Win2000, WinXP, Linux
D2, D4 Client/Server, D5 Enterprise, D6 Enterprise, D7 Enterprise, Delphi2005, C/C++ 3.0, C/C ++ 5.0, C/C++ 6.0
|
Verfasst: Mo 16.10.06 09:54
im onpaint???
ob das so sauber funktioniert?
das im onactivate funktionier sauber! vorallem wird es ja per showmodal aufgerufen.
das ist die beste lösung, die mir eingefallen ist. woran das allerdings liegt, das das im onshow nicht klappt, kann ich mir nicht mal im ansatz erklären.
mfg matthias
_________________ Ein Spezialist ist ein Mensch, der immer mehr von immer weniger weis, bis er alles von nichts weis!
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mo 16.10.06 10:00
Das Control wird einfach zu früh gezeichnet, also sieht man das Popup, bevor man das Hauptformular sieht...
WANN ist also der frühestmögliche Zeitpunkt, bei dem man sicher sein kann, das das Fenster auch wirklich sichtbar ist?
Ich habe noch kein Event gefunden, das mir das sicherstellt, also verwende ich Timer.
Aber wieso sollte man überhaupt ein Menü schonmal hochpoppen lassen?
_________________ Na denn, dann. Bis dann, denn.
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Mo 16.10.06 14:22
Hallo,
versuch es doch mal mit PostMessage, wie Reinhard Kern es schon vorgeschlagen hat.
Ähnlich der folgenden Mini-Unit:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
const WM_AFTER_SHOW = WM_USER + 300;
type TForm1 = class(TForm) ComboBox1: TComboBox; procedure FormShow(Sender: TObject); private procedure WmAfterShow(var Msg: TMessage); message WM_AFTER_SHOW; public end;
var Form1: TForm1;
implementation
{$R *.DFM} procedure TForm1.WmAfterShow(var Msg: TMessage); begin Application.ProcessMessages; ComboBox1.Perform(CB_SHOWDROPDOWN,Integer(True),0); end;
procedure TForm1.FormShow(Sender: TObject); begin PostMessage(Self.Handle, WM_AFTER_SHOW, 0, 0); end;
end. |
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
|