![]() |
[Delphi 5] Form schnappt Mausklicks weg
EDIT: Weiter unten is wohl ein Grund.... aber wenn jemand einen einfachen Lösungsansatz wüßte ...
_ _ _ _ Hi, ich schreibe gerade ein Programm, das eine zweite Form anzeigt. Nichts ungewöhnliches. Keypreview ist auch false. (unwichtig) auf Form2 sind fast nur Checkboxen. Also:
Delphi-Quellcode:
Jetzt meine Frage:
form1.Button.click;
begin Form2.show; end; Immer wenn ich zur Laufzeit auf die Checkboxen der Form2 klicke, muß ich erst 2-3 x klicken, ehe ihr Check gesetzt wird. Ich habe mit Form2.OnMousedown() Haltepunkt auf Caption:='Mausklick'; festgestellt, daß die Mausklicks die erste Male von der Form geschnappt werden. hab dann auch schon Form2.show; Form2.SetFocus; erweitert, weil ich dachte, die Maus muß erstmal auf der Form ankommen. Ändert aber nix. WTF? Wieso? und wie kann ich das ändern? Das macht die GUI total träge. Obwohl Checkboxen setzen doch fix gehen müßte. Hat einer ne Idee? Danke. |
AW: [Delphi 5] Form schnappt Mausklicks weg
Betrifft das immer nur die erste Checkbox die du anklickst (dann ist es vllt. wirklich ein Problem mit dem Focus) oder auch weitere Checkboxen (wenn du denn mehrere hintereinander klicken willst)? Hast du irgendwelchen Code in den Checkboxen-Events (onClick, onChange,...)? Macht es einen Unterschied ob Show oder ShowModal?
Kannst du etwas mehr Code zeigen, wie Form2 erzeugt und aufgerufen wird, was bei den Checkboxen ist, ... |
AW: [Delphi 5] Form schnappt Mausklicks weg
ja, das betrifft überwiegend nur die ersten Klicks auf Checkboxen.
manchmal hab ich das Gefühl auch bei 2 oder mehrmals, wenn man andere nimmt. ShowModal hat keinen Effekt. onChange oder so gibt es nicht. EDIT: Nur Button.Click() und image.click() auf form2. mhh, ob der Code weiterhilft?
Delphi-Quellcode:
Form1.Button1.click()
procedure TMenuForm2.FormCreate(Sender: TObject);
begin color := clBtnShadow; Top := 0; left := 0; self.Width:= screen.Width; image1.Width := self.Width; Image1.Left := 0; ImageLeft.Top := 0; ImageLeft.Height := self.Height; ImageRight.Top := 0; ImageRight.Height := self.Height; Shape1.Top := self.Height-Shape1.Height+1; Shape1.Left := 0; Shape1.Width := Width; VolumenMitBerechnen.Checked := True; end; begin Form2.show; end; |
AW: [Delphi 5] Form schnappt Mausklicks weg
Zitat:
Zitat:
Zitat:
Was passiert den generell mit den Checkboxen? wird ihr Zustand irgendwo von außerhalb des Form2 gesetzt oder ausgelesen? |
AW: [Delphi 5] Form schnappt Mausklicks weg
Zitat:
Werden aber später mal auf Form1 abgefragt. Click gibt's nur bei dem CloseForm Button. Eigentlich eine total unkomplizierte, passive Form - nur für Einstellungen/Optionen. Zitat:
und dann in Form1.Button nur Form2.show aufgerufen. onCreate der Form2 ist oben abgedruckt. Zitat:
Code:
- die Parameter sind ja unverändert. Soll ja nur die neue Form aufrufen. Wollte das im vorherigen Thread nur optisch einfacher machen. War mißlungen :D
procedure TForm1.Button3Click(Sender: TObject); // hier vollständig
begin form2.show; end; also auf Form1 wird irgendwann später mal der Zustand abgefragt. if Form2.check1.checked then bla Ich weiß, so ganz optimal ist das auch nicht. Zumal Form2 auch nach Setzen der Einstellungen per "OK-Button" geclosed wird. Aber so ein Verhalten einer zweiten Form hatte ich noch nie. Ok, ich werd später mal versuchen bei dem Projekt, eine komplett NEUE einzubinden. (liegt vielleicht an etwas, das wir nicht sehen) und ich hab das gerade nochmal getestet: Es ist unterschiedlich: manche Checkboxen brauchen 2 Klicks manche 3, lassen sich dann aber mit 1--Klick checken und unchecken, und bei dernächsten Checkbox wieder 2 oder 3. Das macht hakelig und eine Form irgendwie ...bäh |
AW: [Delphi 5] Form schnappt Mausklicks weg
Um mal die Maus aussen vor zu lassen. Kannst du nach öffnen von Form2 sehen, dass Form2 den Fokus hat und da evtl. mit Tabulatortaste "rumspringen" und per Tastatur Checkboxen checken? Irgendwie hab ich sonst auch keine Idee mehr woher das kommen könnte.
|
AW: [Delphi 5] Form schnappt Mausklicks weg
Wahh, toll.
ich glaub, ich brauch demnächst 2 oder 3 x 76"Monitore - auf meinem 35"Laptop sieht man nicht alle Funktionen. ich hab die Form heute morgen in Gedanken immer schnell über den CloseButton verlassen, weshalb mir folgende Funktion nicht auffiel: Was ich (auch im Code) komplett übersehen hatte, war folgende Funktion (hab die Applikation letzte Woche angefangen) , welche mir ermöglicht zu überprüfen, ob die Maus noch über der Form2 schwebt - oder schon weg ist. Falls weg, soll sie geschlossen werden. hab das aus den Tiefen des Internets erwischt. Aber richtig klar, warum die den Focus ansich zieht ist mir auch nicht. Machen das Get und SetCapture? und wie kann ich mir unter Delphi 5 den Luxus erhalten, die Form per Mouse beim Verlassen zu closen? unter Delphi XE oder so hat man glaub ich: FormHasFocus(), mouseOut() oder sowas.
Delphi-Quellcode:
procedure TMenuForm2.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); begin warhier := 1; If GetCapture = 0 then SetCapture(self.Handle) ; if PtInRect(Rect(self.Left, self.Top, self.Left + self.Width, self.Top + self.Height), ClientToScreen(Point(x, y))) then self.Caption := 'Mouse is over form' else begin close; end; // hide // self.Caption := 'Mouse is outside of form'; end; |
AW: [Delphi 5] Form schnappt Mausklicks weg
Ach du Schreck, so eine Implementierung habe ich dafür noch nicht gesehen. :shock:
Windows ist doch so nett und schickt direkt eine Nachricht für den Zweck... ![]() Damit arbeitet in neueren Delphiversionen auch das entsprechende Mausevent. |
AW: [Delphi 5] Form schnappt Mausklicks weg
Danke Dir.
funzt aber immer noch nicht so ... aber das, was ich jetzt gefunden hab ist auch nicht das Gelbe vom Ei. (ganz unten) ![]() Zum einen fehlt der
Delphi-Quellcode:
overload hab ich angehängt,
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); overload;
aber dann hing es noch an HANDLE ... nicht deklariert ... was weiß ich welches Handle von welchem Objekt ... :D Wahhhh :D mhh, oder hast Du da ein konkretes Implementiertungsbeispiel vor Augen? |
AW: [Delphi 5] Form schnappt Mausklicks weg
Wieso denn overload? Das ist ganz normaler EventHandler, was gibt es denn da zu überladen?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:49 Uhr. |
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