Finde den Fehler nicht, brauche mal ein Tipp
Finde den Fehler nicht, brauche mal ein Tipp
hallo,
suche eine Stelle im Prg. die eine Variable ändert.
Es ist ein Grafikprogramm. Auf der ScrollArea, dem Haupbild, kann ich u.a. 6 weitere Zusatz-ScrollAreas plazieren. Diese veänder und nach Wunsch im Hauptbild übernehmen.
In jeder Zusatz-ScrollArea kann ich einzeln der Reihe nach Images laden.
Mache ich es nicht der Reihe fumktioniert es nicht. Lege ich z.B. 3 Zusatz-ScrollAreas an, landen alle Images in dem zuletzt angelegten
Zusatz-ScrollArea.
Bei jeder 'Berührung' einer ScrollArea schreibe ich in einem String eine Kennung. Die muß aber irgendwo überschrieben werden.
Den Punkt finde ich nicht. Kann man diesen String irgenwie überwachen?
suche eine Stelle im Prg. die eine Variable ändert.
Es ist ein Grafikprogramm. Auf der ScrollArea, dem Haupbild, kann ich u.a. 6 weitere Zusatz-ScrollAreas plazieren. Diese veänder und nach Wunsch im Hauptbild übernehmen.
In jeder Zusatz-ScrollArea kann ich einzeln der Reihe nach Images laden.
Mache ich es nicht der Reihe fumktioniert es nicht. Lege ich z.B. 3 Zusatz-ScrollAreas an, landen alle Images in dem zuletzt angelegten
Zusatz-ScrollArea.
Bei jeder 'Berührung' einer ScrollArea schreibe ich in einem String eine Kennung. Die muß aber irgendwo überschrieben werden.
Den Punkt finde ich nicht. Kann man diesen String irgenwie überwachen?
Gruss
Re: Finde den Fehler nicht, brauche mal ein Tipp
Hallo
Man kann in der IDE nach Ausdrücken suchen. Der Ausdruck kann natürlich auch eine Variable sein.
Mit "Berühren" meinst Du vermutlich "Klicken". Kann es sein, dass durch irgendetwas ein unbeabsichtigtes Klick-Ereignis ausgelöst wird und dadurch die Kennung überschrieben wird? Das lässt sich z.B. dadurch überpüfen, indem man einfach ein
in die _Click-Ereignisroutine einfügt und in der IDE-Konsole schaut, ob dort ein "Klick" in einer unerwarteten Situation erscheint.
Wenn das der Fall ist, kann man zur Lösung des Problems in vielen Fällen den Code in der _Click-Routine einfach in die _MouseUp-Routine verschieben.
Viele Grüße
Crabman
Man kann in der IDE nach Ausdrücken suchen. Der Ausdruck kann natürlich auch eine Variable sein.
Mit "Berühren" meinst Du vermutlich "Klicken". Kann es sein, dass durch irgendetwas ein unbeabsichtigtes Klick-Ereignis ausgelöst wird und dadurch die Kennung überschrieben wird? Das lässt sich z.B. dadurch überpüfen, indem man einfach ein
Code: Alles auswählen
Print "Klick"
Wenn das der Fall ist, kann man zur Lösung des Problems in vielen Fällen den Code in der _Click-Routine einfach in die _MouseUp-Routine verschieben.
Viele Grüße
Crabman
Re: Finde den Fehler nicht, brauche mal ein Tipp
ich suche schon lange danach. ich möchte gerne wissen, wo der String einen anderen Inhalt bekommt.
habe schon gesucht nach 'String =', hab aber noch nchts passendes gefunden.
Bekomme auch einen 'qt-Fehler' angezeigt:
aber was bedeuted dieses?
habe schon gesucht nach 'String =', hab aber noch nchts passendes gefunden.
Bekomme auch einen 'qt-Fehler' angezeigt:
Code: Alles auswählen
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 9873, resource id: 22406730, major code: 40 (TranslateCoords), minor code: 0
Gruss
Re: Finde den Fehler nicht, brauche mal ein Tipp
moin,
habe mir mal die Mühe gemacht und in einem TextEditor die Sub's und den Variablen-Wert ausgegeben.
Dazu den Aufbau: 1 große ScrollArea - darauf bis zu 6 ScrollAreas. In diesen 6 ScrollAreas die Ausgabe zum TextEditor.
Wenn ich mit der Maus über der goßen ScrollArea komme, reagieren bei allen 6 ScrollAreas die Sub "ScrollArea_Draw", obwohl ich diese überhaupt nicht berühre.
Wie kommt das, wie kann ich das unterbinden?
habe mir mal die Mühe gemacht und in einem TextEditor die Sub's und den Variablen-Wert ausgegeben.
Dazu den Aufbau: 1 große ScrollArea - darauf bis zu 6 ScrollAreas. In diesen 6 ScrollAreas die Ausgabe zum TextEditor.
Wenn ich mit der Maus über der goßen ScrollArea komme, reagieren bei allen 6 ScrollAreas die Sub "ScrollArea_Draw", obwohl ich diese überhaupt nicht berühre.
Wie kommt das, wie kann ich das unterbinden?
Gruss
Re: Finde den Fehler nicht, brauche mal ein Tipp
Stellen Sie sicher, dass nichts versucht, die anderen Ansichten zu Refresh.
Wenn Sie die Ursache nicht finden können, versuchen Sie, Object.Lock() auf die anderen Objekte anzuwenden, um zu verhindern, dass sie ihre Ereignisse auslösen.
Vielleicht sind die Ereignisse Before_Arrange() oder Arrange() besser, als zu viel in Draw() zu tun.
Zu viel in einem Draw-Ereignis zu tun, kann riskant sein, da es jedes Mal passiert, wenn das Objekt Refresh wird, und viele Dinge können dazu führen, dass ein Objekt Refresh wird.
Wenn Sie die Ursache nicht finden können, versuchen Sie, Object.Lock() auf die anderen Objekte anzuwenden, um zu verhindern, dass sie ihre Ereignisse auslösen.
Vielleicht sind die Ereignisse Before_Arrange() oder Arrange() besser, als zu viel in Draw() zu tun.
Zu viel in einem Draw-Ereignis zu tun, kann riskant sein, da es jedes Mal passiert, wenn das Objekt Refresh wird, und viele Dinge können dazu führen, dass ein Objekt Refresh wird.
Ich bin Engländer und verwende Google Übersetzer. (Das tut mir leid)
Re: Finde den Fehler nicht, brauche mal ein Tipp
ich habe jetzt mal versucht eine von den 'kleinen' ScrollAreas auf einem ScrollView gesetzt und dabei passiert das Gleiche.
Wenn ich da die Maus auf dem ScrollView berühre, wird auch die Sub "ScrollArea_Draw" ausgelößt, obwohl ich diese nicht berühre!
Was ist Object.Lock() ? Habe ich noch nicht verwendet.
Wenn ich da die Maus auf dem ScrollView berühre, wird auch die Sub "ScrollArea_Draw" ausgelößt, obwohl ich diese nicht berühre!
Was ist Object.Lock() ? Habe ich noch nicht verwendet.
Gruss
Re: Finde den Fehler nicht, brauche mal ein Tipp
es sperrt ein Objekt, um zu verhindern, dass es Ereignisse sendet.
entsperrte Objekte erlauben das Auslösen von Ereignissen, gesperrte Objekte nicht.
Zum Beispiel..
gambas code
Aber vielleicht möchten Sie das alles auch nicht in einem Draw-Ereignis tun.
viele Dinge verursachen eine Neuzeichnungsaktualisierung, wie z. B. Enter/Leave-Ereignisse. (wie Sie gerade feststellen)
entsperrte Objekte erlauben das Auslösen von Ereignissen, gesperrte Objekte nicht.
Zum Beispiel..
gambas code
' Setzen eines Steuerelements '.Value', ohne dass dadurch Ereignisse ausgelöst werden Public Sub SetValue(hObject, vValue) Object.Lock(hObject) ' sperren hObject.Value = vValue ' einstellen Object.Unlock(hObject) ' entsperren Endvielleicht können alle anderen gesperrt werden, bis Sie möchten, dass sie zeichnen. Dann entsperren Sie sie, rufen Sie „Aktualisieren“ auf und sperren Sie sie erneut.
Aber vielleicht möchten Sie das alles auch nicht in einem Draw-Ereignis tun.
viele Dinge verursachen eine Neuzeichnungsaktualisierung, wie z. B. Enter/Leave-Ereignisse. (wie Sie gerade feststellen)
Ich bin Engländer und verwende Google Übersetzer. (Das tut mir leid)
Re: Finde den Fehler nicht, brauche mal ein Tipp
Hallo
Das Steuerelement ScrollArea wurde in Gambas geschrieben und es enthält zwei Routinen, die dafür sorgen, dass ein Draw-Ereignis ausgelöst wird, wenn der Mauszeiger in ein ScrollView hinein bewegt wird (ich hoffe, dass das mit "berühren" gemeint ist) und wenn der Mauszeiger die ScrollArea verlässt ...
Ob ein Refresh in diesen Momenten wirklich erforderlich ist? Jedenfalls besteht die Möglichkeit, das Steuerelement in Form von Sourcecode als Klasse ins Programm einzubinden und die Ereignis-Routinen zu entfernen. Anbei ein Miniprogramm, in dem beide Versioen des ScrollViews zum Vergleich verwendet werden.
Das Abfangen des Enter- und Leave-Ereignisses mittels Observer und Abbruch des Ereignisses funktionierte leider nicht.
Andererseits besteht ja vielleicht auch die Möglichkeit das Programm so zu verändern, dass diese Probleme gar nicht erst entstehen.
Viele Grüße
Crabman
Das Steuerelement ScrollArea wurde in Gambas geschrieben und es enthält zwei Routinen, die dafür sorgen, dass ein Draw-Ereignis ausgelöst wird, wenn der Mauszeiger in ein ScrollView hinein bewegt wird (ich hoffe, dass das mit "berühren" gemeint ist) und wenn der Mauszeiger die ScrollArea verlässt ...
Code: Alles auswählen
Public Sub DrawingArea_Enter()
$hDrawingArea.Refresh
End
Public Sub DrawingArea_Leave()
$hDrawingArea.Refresh
End
Das Abfangen des Enter- und Leave-Ereignisses mittels Observer und Abbruch des Ereignisses funktionierte leider nicht.
Andererseits besteht ja vielleicht auch die Möglichkeit das Programm so zu verändern, dass diese Probleme gar nicht erst entstehen.
Viele Grüße
Crabman
- Dateianhänge
-
- ScrollView_mod_0.0.1.tar.gz
- (12.98 KiB) 9-mal heruntergeladen
Re: Finde den Fehler nicht, brauche mal ein Tipp
moin,
das Event 'ScrollArea_Draw' wird aber schon ausgelößt, wenn der Mauszeiger auf dem Eltern-Objekt bewegt wird.
Habe eine ScrollArea auf einem ScrollView gelegt. Wenn ich diese ScrollView mit der Maus berühre, wird 'ScrollArea_Draw' im
Programm angesprungen. Das kann ich bei mehreren ScrollAreas auf gleichen Untergrund nicht gebrauchen, weil ich dann nicht unterscheiden kann, welche betätigt wurde.
Ist das nicht ein Fehler in Gambas?
Habe mal versucht eine andere Sub anstelle 'ScrollArea_Draw' zu benutzen. Da kommt ein Fehler nach dem anderen.
das Event 'ScrollArea_Draw' wird aber schon ausgelößt, wenn der Mauszeiger auf dem Eltern-Objekt bewegt wird.
Habe eine ScrollArea auf einem ScrollView gelegt. Wenn ich diese ScrollView mit der Maus berühre, wird 'ScrollArea_Draw' im
Programm angesprungen. Das kann ich bei mehreren ScrollAreas auf gleichen Untergrund nicht gebrauchen, weil ich dann nicht unterscheiden kann, welche betätigt wurde.
Ist das nicht ein Fehler in Gambas?
Habe mal versucht eine andere Sub anstelle 'ScrollArea_Draw' zu benutzen. Da kommt ein Fehler nach dem anderen.
Gruss
Re: Finde den Fehler nicht, brauche mal ein Tipp
Moin,
Vielleicht hilfts.
Viele Grüße
Crabman
Anbei zum Ausprobieren eine kleine Demo, in der eine modifizierte ScrollArea in einem modifizierten ScrollView liegt. Das Draw-Event wird hier nicht mehr dadurch ausgelöst, dass die Maus sich in die Steuerlemente hinein- oder hinaus bewegt.das Event 'ScrollArea_Draw' wird aber schon ausgelößt, wenn der Mauszeiger auf dem Eltern-Objekt bewegt wird.
Vielleicht hilfts.
Viele Grüße
Crabman
- Dateianhänge
-
- ScrollArea_mod_ScrollView_mod_demo.tar.gz
- (13.75 KiB) 8-mal heruntergeladen
Re: Finde den Fehler nicht, brauche mal ein Tipp
@ Crabman: kann beide Beispielel nicht starten, Gambas vermisst Componente!
Was sind da für Teile auf FMain?
Was sind da für Teile auf FMain?
Gruss
Re: Finde den Fehler nicht, brauche mal ein Tipp
Welche Komponenten fehlen denn?
Auf FMain befindet sich ein modifiziertes ScrollView und darin eine modifizierte ScrollArea.
Beide Steuerlemente sind als Klasse im Projektpfad zu finden.
Viele Grüße
Crabman
Auf FMain befindet sich ein modifiziertes ScrollView und darin eine modifizierte ScrollArea.
Beide Steuerlemente sind als Klasse im Projektpfad zu finden.
Viele Grüße
Crabman
Re: Finde den Fehler nicht, brauche mal ein Tipp
es ist so konzipiert, dass es die Komponente gb.gtk (gtk2) verwendet, vielleicht ist sie nicht installiert.
Ich habe etwas Ähnliches gemacht, indem ich stattdessen Klassenüberschreibungen verwendet habe, sodass ich nicht die ganze Klasse importieren muss.
und ich habe es in gb.gui geändert
Ich hoffe, es macht Ihnen nichts aus
Ich habe etwas Ähnliches gemacht, indem ich stattdessen Klassenüberschreibungen verwendet habe, sodass ich nicht die ganze Klasse importieren muss.
und ich habe es in gb.gui geändert
Ich hoffe, es macht Ihnen nichts aus
- Dateianhänge
-
- ScrollArea_mod_ScrollView_mod_demo-0.0.2.tar.gz
- (52.84 KiB) 9-mal heruntergeladen
Ich bin Engländer und verwende Google Übersetzer. (Das tut mir leid)
Re: Finde den Fehler nicht, brauche mal ein Tipp
die Ereignisauswertung in dem Beispiel ist aber auch nicht ganz ok.
Beim Beenden und beim Vergrößern der Form werden auch Meldungen auf der Konsole ausgegeben.
Beim Beenden und beim Vergrößern der Form werden auch Meldungen auf der Konsole ausgegeben.
Gruss
Re: Finde den Fehler nicht, brauche mal ein Tipp
Code: Alles auswählen
die Ereignisauswertung in dem Beispiel ist aber auch nicht ganz ok.
Wenn Du auch damit Probleme hast, dann solltest Du Dir besser ein anderes Programmkonzept überlegen. Steuerelemente an ein unbekanntes Konzept anzupassen ist wie Topfschlagen. Aber ein Versuch war es wert.
Viele Grüße
Crabman
Wer ist online?
Mitglieder in diesem Forum: Ahrefs [Bot], Google [Bot] und 0 Gäste