Seite 1 von 1

DCMULTILINE und Scrollbar [ERLEDIGT]

Verfasst: Do, 11. Apr 2019 21:03
von Manfred
mir ist heute etwas merkwürdiges aufgefallen. Kann es sein, das ein disabled() DCMULTILINE zwar den vertikalen Scrollbalken anzeigt, der aber nicht bewegt werden kann? Erst wenn enabled wird, ist dieser zu bedienen. Das kann doch nicht richtig sein, oder?

Re: DCMULTILINE und Scrollbar

Verfasst: Do, 11. Apr 2019 21:52
von Tom
Doch, das ist vernünftiges Verhalten. Ein Control, das deaktiviert ist, deaktiviert auch seine Kinder. Bei Editprotect verhält es sich dann so, wie Du das vermutlich erwartest.

Re: DCMULTILINE und Scrollbar

Verfasst: Fr, 12. Apr 2019 6:33
von Manfred
das stimmt, so ist es. Deshalb ist es ja auch anfänglich nicht aufgefallen. Also muß man sowas Editprotect setzen und dann für den passenden Moment freischalten!? Und nicht mit enable disable arbeiten

Re: DCMULTILINE und Scrollbar

Verfasst: Fr, 12. Apr 2019 9:06
von Tom
EditProtect ist ja Rogers Lösung dafür, dass man Controls in normaler Darstellung (es gibt außerdem die Möglichkeit, Farben für diesen Modus festzulegen) anbietet, also nicht abgegraut o.ä., ohne dass sie bearbeitbar sind. Das erreicht er dadurch, dass das Control in diesem Modus seinen Fokus einfach sofort wieder zurückreicht, wenn es ihn bekommt. Insofern: Ja, das wäre die Lösung. Der Scrollbar, der zu einem MLE gehört, ist auch - anders als z.B. derjenige bei einem XbpBrowse - kein XbPart, das angeflanscht wird. Die ChildList() eines MLE/DCMULTILINE ist leer.

Re: DCMULTILINE und Scrollbar [ERLEDIGT]

Verfasst: Fr, 12. Apr 2019 9:30
von Manfred
Danke Tom,
ich habe es etwas umgebaut. Jetzt scheint es so zu klappen, wie erwartet.

Re: DCMULTILINE und Scrollbar [ERLEDIGT]

Verfasst: Fr, 12. Apr 2019 9:43
von Manfred
Mist, klappt doch nicht. Genügt es denn nicht den Protectblock zu ändern?

Re: DCMULTILINE und Scrollbar [ERLEDIGT]

Verfasst: Fr, 12. Apr 2019 10:02
von Tom
Kannst Du einen Codeschnipsel zeigen? Oder ein kleines Beispiel bauen?

Re: DCMULTILINE und Scrollbar [ERLEDIGT]

Verfasst: Fr, 12. Apr 2019 10:15
von Manfred
Tom,
ich weiß nicht was ich da für ein Beispiel zeigen soll? Es geht hier doch nur um das Grundprinzip.

Code: Alles auswählen

@ oDialogZusatz:nOben,DCGUI_COL DCMULTILINE oDialogZusatz:oArbeitsablauf:textein;
                                                EVAL {|o| o:usevisualstyle := .F.,;
                                                          oDialogZusatz:oArbeitsablauf:addEditControl(o,.T.,,,"Ereignis");
                                                     };
                                                FONT oSysPara:doParaWS:schrifteingabe;
                                           IGNORETAB;
                                       NOHORIZSCROLL;
                                              OBJECT oDialogZusatz:oArbeitsablauf:oTextein;
                                              PARENT oDialogZusatz:oRahmenKopf;
                                        PRESENTATION {{XBP_PP_DISABLED_FGCLR,GRA_CLR_BLACK},{XBP_PP_DISABLED_BGCLR,GRA_CLR_WHITE}};
                                             TABSTOP
In Addeditcontrol werden alle parts gespeichert um sie dann am Ende der reihe nach zu enablen oder disablen. Das klappt alles. Es ist halt nur, das man bei einem DCMULTILINE welches disabled ist, keinen Scrollbalken bewegen kann.

Re: DCMULTILINE und Scrollbar [ERLEDIGT]

Verfasst: Fr, 12. Apr 2019 10:32
von Tom
Genau. Also musst Du aus dem WHEN in diesem Fall ein EDITPROTECT machen (und, Achtung, die Logik umdrehen - WHEN lässt die Bearbeitung zu, wenn der Codeblock ja sagt, EDITPROTECT umgekehrt) - und die Farben entsprechend anpassen.

Re: DCMULTILINE und Scrollbar [ERLEDIGT]

Verfasst: Fr, 12. Apr 2019 10:35
von Manfred
wenn ich EDITPROTECT {|| .T.} mache bekomme ich es nicht wieder abgeschaltet. An WHEN habe ich jetzt nicht gedacht, das werde ich mal probieren.

Re: DCMULTILINE und Scrollbar [ERLEDIGT]

Verfasst: Fr, 12. Apr 2019 10:38
von Manfred
WHEN hat den gleichen EFFEKT wie EDITPROTECT und blockiert den SCROLLBAR auch.

Re: DCMULTILINE und Scrollbar [ERLEDIGT]

Verfasst: Fr, 12. Apr 2019 12:04
von Tom
WHEN ist Disablen. Das ist die Klausel dafür. Und EDITPROTECT bekommst Du wieder aus, indem Du die Bedingung änderst. Das wäre die gleiche wie für's Disablen, nur umgekehrt.

Re: DCMULTILINE und Scrollbar [ERLEDIGT]

Verfasst: Fr, 12. Apr 2019 12:10
von Manfred
Tom,
habe ich m.E. gemacht. Es gibt eine Membervar die heißt EDITBLOCK. Die wird gesetzt, wenn man EDITPROTECT setzt. Aber wenn ich die nachträglich ändere, bringt es nichts. Es stand zum Start entweder NIL oder {|| .T.} drin. wenn ich {|| .F.} oder NIL draus mache gibt es keine Resonanz in die Richtung, die ich erwarten würde. Deshalb ja auch meine Frage. Bisher war es ja immer möglich sowas zu manipulieren. Aber in dem Fall.....

Re: DCMULTILINE und Scrollbar [ERLEDIGT]

Verfasst: Fr, 12. Apr 2019 13:09
von Tom
DCMULTLINE kennt drei Klauseln, die ähnliche Dinge tun. Der Codeblock, der WHEN folgt, regelt, ob das Control en- oder disabled ist. Der Codeblock, der EDITPROTECT folgt, entscheidet (alternativ oder zusätzlich), ob der Text bearbeitet werden kann, aber das Ergebnis unterscheidet sich nicht von einem bearbeitbaren (enableten) MLE. READONLY lässt das MLE aussehen, als wäre es disabled (WHEN), aber es ist scrollbar - und man kann den Text auch kopieren.

Die Frage ist nur, ob und wie Du überhaupt diese Klauseln verwendest oder ob Du das irgendwie direkt machst, was nicht zu empfehlen ist.

Edit: Alle drei Codeblöcke werden evaluiert, wenn ein DC_GetRefresh() ausgelöst wird - oder wenn DC_GetWhenHideEval() ausgeführt wird.

Re: DCMULTILINE und Scrollbar [ERLEDIGT]

Verfasst: Fr, 12. Apr 2019 14:02
von Manfred
Dann muß ich nochmal in mich gehen. Irgendwas mache ich wohl falsch.
Woberi ja jetzt folgende Frage aufkommt:
Was mache ich zuerst?
Ich erzeuge das MLE und möchte im ersten Schritt haben, das es nur angezeigt wird, aber nicht editierbar ist. Aber es muß scrollbar sein.
Angezeigt wird es, nicht editierbar ist es auch, aber es kan auch nicht gescrollt werden. (unerwünschter Zustand)
Wenn ich EDITPROTECT {|| .T.} mache, wird es angezeigt, ist scrollbar, kann aber nicht editierbar gemacht werden. (unerwünschter Zustand)
Wenn ich die WHEN {|| .F.} Klausel nehme, wird es angezeigt, ist nicht editierbar und der Scrollbalken klappt auch nhicht (unerwünschter Zustand)
Wenn ich Readonly nehme, dann wird es angezeigt, ist nicht editierbar, der Scrollbalken klappt nicht, es kann nicht editierbar gemacht werden ( unerwünschter Zustand)
Was kann man sonst machen?

Re: DCMULTILINE und Scrollbar [ERLEDIGT]

Verfasst: Fr, 12. Apr 2019 15:47
von Tom
Wenn Du EDITPROTECT {||.NOT.DarfDasMLEbearbeitetwerden()} machst, dann regelt die Antwort von DarfDasMLEbearbeitetwerden(), ob das so ist. Alternativ kann das auch im Cargo oder in einer iVar des MLE stecken. Das Thema hatten wir doch schon in tausend Varianten, Manfred. Es ist immer das gleiche, oder?

Re: DCMULTILINE und Scrollbar [ERLEDIGT]

Verfasst: Fr, 12. Apr 2019 16:28
von Manfred
verdammt, ich glaube Du hast recht und jetzt kapiere ich wieder was Du meinst. Es kann ja auch eine Funktion da rein. Das vergesse ich immer wieder. :banghead: :banghead: :banghead: Das werde ich jetzt mal versuchen.

Re: DCMULTILINE und Scrollbar [ERLEDIGT]

Verfasst: Sa, 13. Apr 2019 13:04
von Manfred
ok, ich habe das jetzt über Editprotect und dann einer Funktion geregelt, die den etsprechenden Wert zurückliefert. Enable und disable komplett entfernt. Jetzt sieht es gut aus.

Re: DCMULTILINE und Scrollbar [ERLEDIGT]

Verfasst: Sa, 13. Apr 2019 13:21
von Tom
:)