Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi [Delphi 5] Form schnappt Mausklicks weg (https://www.delphipraxis.net/183355-%5Bdelphi-5%5D-form-schnappt-mausklicks-weg.html)

BMI 5. Jan 2015 08:26

[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:
form1.Button.click;
begin
Form2.show;
end;
Jetzt meine Frage:
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.

Jumpy 5. Jan 2015 08:43

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, ...

BMI 5. Jan 2015 09:15

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:
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;
Form1.Button1.click()
begin
Form2.show;
end;

Jumpy 5. Jan 2015 09:31

AW: [Delphi 5] Form schnappt Mausklicks weg
 
Zitat:

Zitat von BMI (Beitrag 1285392)
onChange oder so gibt es nicht.
Nur Button Klick.

Meinst du jetzt den ButtonClick der die zweite Form anzeigt oder gibt es bei den Checkboxen ein Event OnClick?

Zitat:

mhh, ob der Code weiterhilft?
Nö. Ich dachte jetzt auch eher daran, wo Form2 auf Form1 erzeugt wird, aber das wird es wahrsch. gar nicht, da du das im Projekt eingebunden hast, so dass es autom. erzeugt wird?

Zitat:

Form1.Button1.click()
begin
Form2.show;
end;
Und so wird es wahrscheinlich angezeigt? Wobei die erste Zeile nur symbolisch gemeint ist?

Was passiert den generell mit den Checkboxen? wird ihr Zustand irgendwo von außerhalb des Form2 gesetzt oder ausgelesen?

BMI 5. Jan 2015 09:55

AW: [Delphi 5] Form schnappt Mausklicks weg
 
Zitat:


Meinst du jetzt den ButtonClick der die zweite Form anzeigt oder gibt es bei den Checkboxen ein Event OnClick?
die checkboxen sind ohne change und click.
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:

Nö. Ich dachte jetzt auch eher daran, wo Form2 auf Form1 erzeugt wird, aber das wird es wahrsch. gar nicht, da du das im Projekt eingebunden hast, so dass es autom. erzeugt wird?
also Form2 existiert bereits - also normal eingebunden.
und dann in Form1.Button nur Form2.show aufgerufen. onCreate der Form2 ist oben abgedruckt.

Zitat:

Und so wird es wahrscheinlich angezeigt? Wobei die erste [von dem Form1.Button.Click()]Zeile nur symbolisch gemeint ist?

Was passiert denn generell mit den Checkboxen? wird ihr Zustand irgendwo von außerhalb des Form2 gesetzt oder ausgelesen?
ja,
Code:
procedure TForm1.Button3Click(Sender: TObject); // hier vollständig
begin
  form2.show;
end;
- 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

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

Jumpy 5. Jan 2015 10:24

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.

BMI 5. Jan 2015 11:25

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;

jaenicke 5. Jan 2015 13:38

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...
WM_MOUSELEAVE
Damit arbeitet in neueren Delphiversionen auch das entsprechende Mausevent.

BMI 5. Jan 2015 14:55

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)
http://www.delphipages.com/forum/sho...d.php?t=165355

Zum einen fehlt der
Delphi-Quellcode:
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); overload;
overload hab ich angehängt,

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?

DeddyH 5. Jan 2015 15:53

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 04:48 Uhr.
Seite 1 von 2  1 2      

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