Seite 3 von 29

Re: DialogDesign0R V1.02

Verfasst: 07.03.2018 14:19
von Bisonte
das ist weder ein bug, noch generelles XML Dialog Verhalten.
Das ist schlicht und ergreifend das SplitterGadget und das Resize von ihm. Das kann man leider nicht
so wirklich abstellen.

Allerdings hatte Eddy im englischen Forum ein eigenes CanvasSplitterGadget vorgestellt, das nahezu frei von diesen Artefakten war.

Re: DialogDesign0R V1.02

Verfasst: 07.03.2018 14:22
von oO0XX0Oo
Alles klar, danke für die Aufklärung!

Re: DialogDesign0R V1.02

Verfasst: 07.03.2018 14:23
von Shardik
Drag 'n drop mit ListIconGadgets, ListViewGadgets und TreeGadgets auf MacOS funktioniert übrigens seit der Umstellung vom Carbon- auf das Cocoa-Framework in PB 5.00 nicht mehr. Es gibt dazu diese Fehlersammlung von fsw, in der Fred schon 2013 schrieb:
Fred hat geschrieben:Cocoa drag'n'drop model is not fully compatiable with PB model, I don't know how to work around it (for now).

Re: DialogDesign0R V1.02

Verfasst: 07.03.2018 14:40
von RSBasic
@Shardik
Das hast du glaube ich falsch verstanden.
Es ging darum, mit Hilfe der Handle-Nummer die Index-Nummer des ersten sichtbaren Eintrages zu ermitteln. HeX0R verwendete nicht ohne Grund die Konstante #TVGN_FIRSTVISIBLE.
Meinen Code habe ich nur beispielhaft in den Case-Block eingefügt. Das funktioniert natürlich nur per Klick und Tastatur. Das war aber nur ein Beispiel.
Shardik hat geschrieben:Ich habe daher einmal ein eigenes Beispiel erstellt, das für alle Einträge das ItemHandle ermittelt und aus dem ItemHandle den Index. Und auch für gerade nicht sichtbare Einträge wird der korrekte Index ermittelt:
Aber das ist nicht das, was HeX0R haben wollte?
HeX0R hat geschrieben:Wie kann ich denn aus einem TreeItemHandle den Index ermitteln?

Code: Alles auswählen

Protected TreeItemHandle
TreeItemHandle = SendMessage_(GadgetID(DID("tree_objects")), #TVM_GETNEXTITEM, #TVGN_FIRSTVISIBLE, #Null)
For i = 0 To CountGadgetItems(DID("tree_objects")) - 1
	If GadgetItemID(DID("tree_objects"), i) = TreeItemHandle
		Break
	EndIf
Next i 
Wenn man seinen Code anschaut, will er nicht, die Index-Nummer jedes sichtbaren Eintrages haben, sondern nur die Index-Nummer des ersten sichtbaren EIntrages:

Code: Alles auswählen

TreeItemHandle = SendMessage_(GadgetID(DID("tree_objects")), #TVM_GETNEXTITEM, #TVGN_FIRSTVISIBLE, #Null)
Sonst hätte er nicht folgende Abfrage geschrieben:

Code: Alles auswählen

If GadgetItemID(DID("tree_objects"), i) = TreeItemHandle
D.h. er vergleicht die Handle-Nummer des ersten sichtbaren Eintrages mit allen Einträgen. Da er nicht wusste, wie man es macht, hat er eine Schleife gebaut. Er wollte es gerne kürzen bzw. direkter ermitteln.

So habe ich das verstanden.

Re: DialogDesign0R V1.02

Verfasst: 07.03.2018 14:51
von HeX0R
Genau!
Das Problem ist ja, dass ich im DropCallback nur y Werte habe, die beim ersten sichbaren Eintrag des Treegadgets beginnen.

Re: DialogDesign0R V1.02

Verfasst: 07.03.2018 16:18
von Shardik
OK, Ray. Dann war Dein Beispiel ja doch das Richtige. Vielen Dank, dass Du Dir die Mühe gemacht hast, mir das noch einmal haarklein zu erklären... :allright:

Re: DialogDesign0R V1.02

Verfasst: 07.03.2018 19:41
von Omi
Hallo,
folgende Linux-Unzulänglichkeit könnte einem ebenfalls unterkommen:
Manche Installationen selektieren bei Erhalt des Fokus in StringGadget/GtkEntry (SetActiveGadget(Gadget)) den gesamten Text per default.

Ist man bei Eingaben zu langsam, bekommt das Demo-Window den Fokus, wird upgedatet und das vorherige Eingabefeld bekommt den Fokus zurück - jetzt vollständig selektiert und man überschreibt die bisherige Eingabe und alles beginnt von vorn :evil:
Originelle Foltermethode, die man nur mit 'nem Sekretärinnenkurs übersteht ;-)

Zusätzlich folgender ImportC:

Code: Alles auswählen

g_object_set(*object.GObject, property_name.p-utf8, *data, value= 0)
und folgende Routine bei Programmstart müßte dieses Problem beseitigen:

Code: Alles auswählen

CompilerIf #PB_Compiler_OS = #PB_OS_Linux
  g_object_set(gtk_settings_get_default_(), "gtk-entry-select-on-focus", #False)
CompilerEndIf
Gruß, Charly

Re: DialogDesign0R V1.02

Verfasst: 07.03.2018 22:07
von HeX0R
Na toll, das Linux wird langsam anstrengend...
So, ich habe jetzt:
1.) Kiffis Fehler beseitigt (musste die ganze BuildUpTree() Prozedur neu machen, aber eigentlich nur, weil ich die glaube ich im Vollsuff erstellt hatte...)
2.) RSBasics Windows API eingebaut
3.) Omis letzte Erweiterung eingebaut
4.) Die Menüs etwas anders angeordnet, jetzt sieht man gleich, welcher Container nur ein Element beinhaltet
5.) Fehlendes "Page"-Attribut hinzugefügt
6.) Fehlende Attribute der ScrollArea eingebaut.
7.) Windows-Pos und Slider-Pos werden nun gespeichert für den nächsten Start.

So, ich habe ziemlich viel verändert, wahrscheinlich auch ziemlich viele neue Bugs platziert :)

Was das SplitterGadget betrifft:
Ich weiss, dass es suboptimal aussieht, aber mal ehrlich: Wie oft muss man den denn verschieben?
Ich lasse das alles mal so, vielleicht haben wir ja in PB 12.7 dann ein flickerfreies SplitterGadget...

Re: DialogDesign0R V1.02

Verfasst: 07.03.2018 22:22
von oO0XX0Oo
Was das SplitterGadget betrifft:
Ich weiss, dass es suboptimal aussieht, aber mal ehrlich: Wie oft muss man den denn verschieben?
Ich lasse das alles mal so, vielleicht haben wir ja in PB 12.7 dann ein flickerfreies SplitterGadget...
Kein Problem, ich war nur neugierig...

Könntest du mir bitte einen Gefallen tun und beim Programmstart checken ob die settings.prefs bereits
im aktuellen Verzeichnis der .exe Datei liegt und diese dann von dort aus einlesen (und natürlich unter
%APPDATA% kein Verzeichnis erstellen)? Wenn du möchtest mit dem zusätzlichen check, ob das
aktuelle Verzeichnis UAC protected ist und die .exe nicht mit Adminrechten gestartet wurde. Dann müsste
eine geänderte .prefs Datei natürlich unter %APPDATA% abgelegt werden. Stichwort Portabilität...

Re: DialogDesign0R V1.02

Verfasst: 07.03.2018 22:33
von HeX0R
Erledigt.
Starte einmalig mit /portable
Omi hat geschrieben:Ist man bei Eingaben zu langsam, bekommt das Demo-Window den Fokus, wird upgedatet und das vorherige Eingabefeld bekommt den Fokus zurück - jetzt vollständig selektiert und man überschreibt die bisherige Eingabe und alles beginnt von vorn :evil:
Originelle Foltermethode, die man nur mit 'nem Sekretärinnenkurs übersteht ;-)
Langsamtipper können übrigens auch #Update_Interval erhöhen.