Finde den Fehler nicht, brauche mal ein Tipp

Alle Fragen zur Programmierung, die nicht in die speziellen Themen passen
gambasso
Foriker
Beiträge: 1325
Registriert: Sa 17. Mär 2012, 09:55
Kontaktdaten:

Finde den Fehler nicht, brauche mal ein Tipp

Beitrag von gambasso » Mi 18. Sep 2024, 14:58

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?
Gruss

Crabman
Foriker
Beiträge: 197
Registriert: So 6. Jan 2019, 13:31
Kontaktdaten:

Re: Finde den Fehler nicht, brauche mal ein Tipp

Beitrag von Crabman » Mi 18. Sep 2024, 17:05

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

Code: Alles auswählen

Print "Klick" 
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

gambasso
Foriker
Beiträge: 1325
Registriert: Sa 17. Mär 2012, 09:55
Kontaktdaten:

Re: Finde den Fehler nicht, brauche mal ein Tipp

Beitrag von gambasso » Mi 18. Sep 2024, 17:22

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:

Code: Alles auswählen

qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 9873, resource id: 22406730, major code: 40 (TranslateCoords), minor code: 0
aber was bedeuted dieses?
Gruss

gambasso
Foriker
Beiträge: 1325
Registriert: Sa 17. Mär 2012, 09:55
Kontaktdaten:

Re: Finde den Fehler nicht, brauche mal ein Tipp

Beitrag von gambasso » Do 19. Sep 2024, 12:16

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?
Gruss

Bonus
Foriker
Beiträge: 111
Registriert: Mo 18. Mär 2024, 14:38
Kontaktdaten:

Re: Finde den Fehler nicht, brauche mal ein Tipp

Beitrag von Bonus » Do 19. Sep 2024, 12:54

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.
Ich bin Engländer und verwende Google Übersetzer. (Das tut mir leid)

gambasso
Foriker
Beiträge: 1325
Registriert: Sa 17. Mär 2012, 09:55
Kontaktdaten:

Re: Finde den Fehler nicht, brauche mal ein Tipp

Beitrag von gambasso » Do 19. Sep 2024, 14:30

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

Bonus
Foriker
Beiträge: 111
Registriert: Mo 18. Mär 2024, 14:38
Kontaktdaten:

Re: Finde den Fehler nicht, brauche mal ein Tipp

Beitrag von Bonus » Do 19. Sep 2024, 16:11

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

' 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

End
vielleicht 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)

Crabman
Foriker
Beiträge: 197
Registriert: So 6. Jan 2019, 13:31
Kontaktdaten:

Re: Finde den Fehler nicht, brauche mal ein Tipp

Beitrag von Crabman » Do 19. Sep 2024, 17:34

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

Code: Alles auswählen

Public Sub DrawingArea_Enter()

  $hDrawingArea.Refresh

End

Public Sub DrawingArea_Leave()

  $hDrawingArea.Refresh

End
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
Dateianhänge
ScrollView_mod_0.0.1.tar.gz
(12.98 KiB) 9-mal heruntergeladen

gambasso
Foriker
Beiträge: 1325
Registriert: Sa 17. Mär 2012, 09:55
Kontaktdaten:

Re: Finde den Fehler nicht, brauche mal ein Tipp

Beitrag von gambasso » Fr 20. Sep 2024, 11:40

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

Crabman
Foriker
Beiträge: 197
Registriert: So 6. Jan 2019, 13:31
Kontaktdaten:

Re: Finde den Fehler nicht, brauche mal ein Tipp

Beitrag von Crabman » Fr 20. Sep 2024, 12:38

Moin,
das Event 'ScrollArea_Draw' wird aber schon ausgelößt, wenn der Mauszeiger auf dem Eltern-Objekt bewegt wird.
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.

Vielleicht hilfts.

Viele Grüße
Crabman
Dateianhänge
ScrollArea_mod_ScrollView_mod_demo.tar.gz
(13.75 KiB) 8-mal heruntergeladen

gambasso
Foriker
Beiträge: 1325
Registriert: Sa 17. Mär 2012, 09:55
Kontaktdaten:

Re: Finde den Fehler nicht, brauche mal ein Tipp

Beitrag von gambasso » Fr 20. Sep 2024, 14:29

@ Crabman: kann beide Beispielel nicht starten, Gambas vermisst Componente!

Was sind da für Teile auf FMain?
Gruss

Crabman
Foriker
Beiträge: 197
Registriert: So 6. Jan 2019, 13:31
Kontaktdaten:

Re: Finde den Fehler nicht, brauche mal ein Tipp

Beitrag von Crabman » Fr 20. Sep 2024, 14:40

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

Bonus
Foriker
Beiträge: 111
Registriert: Mo 18. Mär 2024, 14:38
Kontaktdaten:

Re: Finde den Fehler nicht, brauche mal ein Tipp

Beitrag von Bonus » Fr 20. Sep 2024, 15:39

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
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)

gambasso
Foriker
Beiträge: 1325
Registriert: Sa 17. Mär 2012, 09:55
Kontaktdaten:

Re: Finde den Fehler nicht, brauche mal ein Tipp

Beitrag von gambasso » Fr 20. Sep 2024, 16:46

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

Crabman
Foriker
Beiträge: 197
Registriert: So 6. Jan 2019, 13:31
Kontaktdaten:

Re: Finde den Fehler nicht, brauche mal ein Tipp

Beitrag von Crabman » Fr 20. Sep 2024, 17:38

Code: Alles auswählen

die Ereignisauswertung in dem Beispiel ist aber auch nicht ganz ok.
Damit meinst Du wohl ..." passt nicht in mein Konzept."

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

Antworten

Wer ist online?

Mitglieder in diesem Forum: Ahrefs [Bot], Google [Bot] und 0 Gäste