XbpSLE mit rotem Rahmen
Moderator: Moderatoren
- klammerauf
- UDF-Programmierer
- Beiträge: 74
- Registriert: Do, 08. Feb 2007 14:16
- Wohnort: Karlsruhe
- Hat sich bedankt: 4 Mal
XbpSLE mit rotem Rahmen
Hallo,
ich will im Fall einer fehlenden Eingabe in einem SLE nachträglich einen roten Rahmen um dieses XbpSLE machen.
Hat das schon jemand gemacht? Muss ich hier Gra-Functions verwenden?
ich will im Fall einer fehlenden Eingabe in einem SLE nachträglich einen roten Rahmen um dieses XbpSLE machen.
Hat das schon jemand gemacht? Muss ich hier Gra-Functions verwenden?
Exzessiver Codeblock Programmierer
--
Grüße
Sebastian
--
Grüße
Sebastian
- Marcus Herz
- 1000 working lines a day
- Beiträge: 984
- Registriert: Mo, 16. Jan 2006 8:13
- Wohnort: Allgäu
- Hat sich bedankt: 49 Mal
- Danksagung erhalten: 242 Mal
- Kontaktdaten:
Re: XbpSLE mit rotem Rahmen
Richtig: Um einen Rahmen zu zeichnen, musst dur GRA Funtkkionen verwenden.
Du kannst allerdings auch die Hintergrundfarbe des SLE ändern, ist einfacher.
Weil ein gezeichneter Rahmen mit GRA musst du auch wieder löschen...
Du kannst allerdings auch die Hintergrundfarbe des SLE ändern, ist einfacher.
Weil ein gezeichneter Rahmen mit GRA musst du auch wieder löschen...
Gruß Marcus
Den Kopf in den Sand zu stecken rettet die Welt auch nicht.
Den Kopf in den Sand zu stecken rettet die Welt auch nicht.
- Jan
- Marvin
- Beiträge: 14864
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 34 Mal
- Danksagung erhalten: 113 Mal
- Kontaktdaten:
Re: XbpSLE mit rotem Rahmen
Ich mach das ähnlich wie Marcus beschreibt. Das aktuelle SLE hat einen gelben Hintergrund, ein SLE mit einem Validierungsproblem einen roten.
Das geht recht einfach über :setColorBG(nFarbe). Auf jeden Fall erheblich einfacher als da mit GRA-Funktionen oder Ownerdrawing zu arbeiten.
Jan
Das geht recht einfach über :setColorBG(nFarbe). Auf jeden Fall erheblich einfacher als da mit GRA-Funktionen oder Ownerdrawing zu arbeiten.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- klammerauf
- UDF-Programmierer
- Beiträge: 74
- Registriert: Do, 08. Feb 2007 14:16
- Wohnort: Karlsruhe
- Hat sich bedankt: 4 Mal
Re: XbpSLE mit rotem Rahmen
Ok, die Argument sind richtig, zu viel Aufwand mit den GRA-Funktionen.
:setColorBG geht nicht, weil ich das schon für invalide Eingaben verwenden möchte.
Ich hatte jetzt noch die Idee mit einem "Wander-Static". Ich erzeuge unsichtbar einen XbpStatic Rahmen und wenn es eine fehlende Eingabe in einem SLE gibt, dann lese ich aus dem SLE mit :currentPos() und :currentSize() dessen Daten aus und übertrage Position und Größe an das Static mit dem Rahmen, nur ein wenig angepasst auf die Größe und Position. Dann muss ich es nur noch mit :show() anzeigen. So "wandert" das Rahmen-Static von SLE zu SLE, wo noch eine Eingabe fehlt.
:setColorBG geht nicht, weil ich das schon für invalide Eingaben verwenden möchte.
Ich hatte jetzt noch die Idee mit einem "Wander-Static". Ich erzeuge unsichtbar einen XbpStatic Rahmen und wenn es eine fehlende Eingabe in einem SLE gibt, dann lese ich aus dem SLE mit :currentPos() und :currentSize() dessen Daten aus und übertrage Position und Größe an das Static mit dem Rahmen, nur ein wenig angepasst auf die Größe und Position. Dann muss ich es nur noch mit :show() anzeigen. So "wandert" das Rahmen-Static von SLE zu SLE, wo noch eine Eingabe fehlt.
Exzessiver Codeblock Programmierer
--
Grüße
Sebastian
--
Grüße
Sebastian
- Jan
- Marvin
- Beiträge: 14864
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 34 Mal
- Danksagung erhalten: 113 Mal
- Kontaktdaten:
Re: XbpSLE mit rotem Rahmen
Hallo Sebastian,
wie ich schrieb verwende ich das auch für zwei Zwecke. Halt mit unterschiedlichen Hintergrundfarben. Das könnte man auch weiter treiben und drei oder vier Farben nehmen. Was auch den Vorteil hätte das Hinweise immer gleich dargestellt werden - nur eben mit anderen Farben.
Jan
wie ich schrieb verwende ich das auch für zwei Zwecke. Halt mit unterschiedlichen Hintergrundfarben. Das könnte man auch weiter treiben und drei oder vier Farben nehmen. Was auch den Vorteil hätte das Hinweise immer gleich dargestellt werden - nur eben mit anderen Farben.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Marcus Herz
- 1000 working lines a day
- Beiträge: 984
- Registriert: Mo, 16. Jan 2006 8:13
- Wohnort: Allgäu
- Hat sich bedankt: 49 Mal
- Danksagung erhalten: 242 Mal
- Kontaktdaten:
Re: XbpSLE mit rotem Rahmen
In XClass++ malen wir um das aktive SLE (und alle anderen Editcontols) einen Rahmen.
Man kann das ganz einfach in einer abgeleiteten Klasse von xbpSLE integrieren.
INPUT_FOCUS malt den Rahmen,
KILL_FOCUS löscht ihn wieder.
Also doch nicht zu kompliziert
Man kann das ganz einfach in einer abgeleiteten Klasse von xbpSLE integrieren.
INPUT_FOCUS malt den Rahmen,
KILL_FOCUS löscht ihn wieder.
Also doch nicht zu kompliziert
Gruß Marcus
Den Kopf in den Sand zu stecken rettet die Welt auch nicht.
Den Kopf in den Sand zu stecken rettet die Welt auch nicht.
- brandelh
- Foren-Moderator
- Beiträge: 15778
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 86 Mal
- Danksagung erhalten: 43 Mal
- Kontaktdaten:
Re: XbpSLE mit rotem Rahmen
Ich habe folgenden Button in einer meiner Anwendungen:
nach Klick auf "Zeigen" kommt "Ändern" mit rotem Rahmen.
Hier ist der Code dafür:
das RefreshXbp() lädt Daten und Anzeigen nach, sicher ist sicher.
Der Clou ist, dass es nur ein FT Feld ist, das gefärbt wird.
Durch die Einstellungen wird das innere Control (hier PB, SLE sollte auch gehen) ausgespart !
GraFunktionen sind viel zu umständlich.
Das Fenster startet mit "Zeigen" alle SLE können nicht geändert werden (Systemvariable des Fensters wird durch Button gesetzt und geändert)nach Klick auf "Zeigen" kommt "Ändern" mit rotem Rahmen.
Hier ist der Code dafür:
Code: Alles auswählen
in CLASS des Fensters
VAR stInfoEditShowStatus
VAR pbEditShow
...
in INIT
::stInfoEditShowStatus := XbpStatic():new( ::drawingArea, , , , { { XBP_PP_BGCLR, GRA_CLR_GREEN } } )
::stInfoEditShowStatus:clipParent := .T.
::stInfoEditShowStatus:clipSiblings := .T.
::pbEditShow := XbpPushButton():new( ::drawingArea, , , , { { XBP_PP_FGCLR, GRA_CLR_BLACK } } )
::pbEditShow:caption := "zeigen"
::pbEditShow:clipParent := .T.
::pbEditShow:clipSiblings := .T.
::pbEditShow:tabStop := .T.
::pbEditShow:preSelect := .F.
::pbEditShow:pointerFocus := .F.
* ::pbEditShow:activate := {|| NIL }
... im Fenster, kann aber auch hier stehen
::pbEditShow:activate := {|| ::EditShow() } // Methode des Fensters teile ich auf, da von mir nicht vom Painter Classcode
...
in CREATE
::stInfoEditShowStatus:create(, ,{nPosX-3,nPosY-3},;
{ nPBschmal+6, nPBHoehe+6 } ,;
{ { XBP_PP_BGCLR, GRA_CLR_GREEN } } )
::pbEditShow:create( , , {nPosX,nPosY}, { nPBschmal, nPBHoehe })
... im Fenster, kann aber auch bei diesem Code stehen
*---------------------------------------------------------------------------
METHOD ...:EditShow(lForce)
LOCAL nButton
DEFAULT lForce to .F. // .t. erzwingt das Ende ohne Speichern (meist bei Neterr())
IF ::InEdit // steuert Anzeige oder Änderungsmodus
...
::InEdit := .F.
::stInfoEditShowStatus:setColorBG( GRA_CLR_GREEN )
::pbEditShow:setCaption("zeigen")
aeval(::editControls , {|oXbp| oXbp:setEditable(.F.) } )
ELSE
IF ::RLockMaster() // ist Sperre möglich ?
::InEdit := .T.
::stInfoEditShowStatus:setColorBG( GRA_CLR_RED )
::pbEditShow:setCaption("ändern")
aeval(::editControls , {|oXbp| oXbp:setEditable(.T.) } )
ENDIF * ansonsten wird nicht umgeschaltet
ENDIF
::RefreshXbp() // immer anzeigen
RETURN NIL
Der Clou ist, dass es nur ein FT Feld ist, das gefärbt wird.
Durch die Einstellungen wird das innere Control (hier PB, SLE sollte auch gehen) ausgespart !
GraFunktionen sind viel zu umständlich.
Gruß
Hubert
Hubert
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9773
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 132 Mal
- Danksagung erhalten: 450 Mal
- Kontaktdaten:
Re: XbpSLE mit rotem Rahmen
Das ist mit GRA-Funktionen überhaupt nicht kompliziert, und man löst es ganz simpel über SetInputFocus und KillInputFocus, was bei allen XbParts geht, weshalb man das einfach in einer Klasse machen könnte, die man kombiniert. Als eXpress++-Nutzer habe ich das mit der Option HILITEGETS aber sowieso an Bord, und ich kann die dazugehörige Funktion auch beliebig anderweitig nutzen.
Die Idee mit dem Static als Hintergrund ist nicht übel, aber man verdoppelt so die Menge der Objekte.
Die Idee mit dem Static als Hintergrund ist nicht übel, aber man verdoppelt so die Menge der Objekte.
Herzlich,
Tom
Tom
- klammerauf
- UDF-Programmierer
- Beiträge: 74
- Registriert: Do, 08. Feb 2007 14:16
- Wohnort: Karlsruhe
- Hat sich bedankt: 4 Mal
Re: XbpSLE mit rotem Rahmen
@Hubert,
ich habe deine Lösung ausprobiert, aber leider kann ich die so nicht verwenden.
Wenn ich das richtig sehe, dann erzeugst du beim :create() ein farbiges XbpStatic auf das du kurz darauf den Button "draufsetzt".
Ich muss mit einem vorhandenen Dialog leben, den ich lediglich mit einem Codeblock erweitern kann.
Weiß jemand, wie ich unter einen existierendes Xbp einen anderen Xbp "drunter- oder dahinterschieben" kann, so dass der gewünschte Rahmeneffekt zustandekommt?
ich habe deine Lösung ausprobiert, aber leider kann ich die so nicht verwenden.
Wenn ich das richtig sehe, dann erzeugst du beim :create() ein farbiges XbpStatic auf das du kurz darauf den Button "draufsetzt".
Ich muss mit einem vorhandenen Dialog leben, den ich lediglich mit einem Codeblock erweitern kann.
Weiß jemand, wie ich unter einen existierendes Xbp einen anderen Xbp "drunter- oder dahinterschieben" kann, so dass der gewünschte Rahmeneffekt zustandekommt?
Exzessiver Codeblock Programmierer
--
Grüße
Sebastian
--
Grüße
Sebastian
- brandelh
- Foren-Moderator
- Beiträge: 15778
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 86 Mal
- Danksagung erhalten: 43 Mal
- Kontaktdaten:
Re: XbpSLE mit rotem Rahmen
Ich meine man kann alles im Codeblock dynamisch anlegen. Aber es wird natürlich schnell sehr unübersichtlich. Falls überhaupt genug Quellcode untergebracht werden kann
Gruß
Hubert
Hubert
- klammerauf
- UDF-Programmierer
- Beiträge: 74
- Registriert: Do, 08. Feb 2007 14:16
- Wohnort: Karlsruhe
- Hat sich bedankt: 4 Mal
Re: XbpSLE mit rotem Rahmen
Anlegen kann ich schon, das ist kein Problem. Aber mein SLE ist ja schon vorhanden. Und ein farbiges XbpStatic unter das XbpSLE drunter legen bekomme ich nicht hin.
Eigentlich ärgerlich, dass es XbpStatic nur immer gefüllt gibt. Oder hab ich das was übersehen?
Eigentlich ärgerlich, dass es XbpStatic nur immer gefüllt gibt. Oder hab ich das was übersehen?
Exzessiver Codeblock Programmierer
--
Grüße
Sebastian
--
Grüße
Sebastian
- Marcus Herz
- 1000 working lines a day
- Beiträge: 984
- Registriert: Mo, 16. Jan 2006 8:13
- Wohnort: Allgäu
- Hat sich bedankt: 49 Mal
- Danksagung erhalten: 242 Mal
- Kontaktdaten:
Re: XbpSLE mit rotem Rahmen
Das SLE muss das darunter liegende Static als drawingarea bekommen
Gruß Marcus
Den Kopf in den Sand zu stecken rettet die Welt auch nicht.
Den Kopf in den Sand zu stecken rettet die Welt auch nicht.
- Jan
- Marvin
- Beiträge: 14864
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 34 Mal
- Danksagung erhalten: 113 Mal
- Kontaktdaten:
Re: XbpSLE mit rotem Rahmen
Hallo Marcus,
der Punkt ist ja: Wie bekomme ich im Fehlerfall (nachträglich) das farbige Static unter das SLE?
Ich vermute mal das geht nur, wenn man das Static grundsätzlich anlegt als Parent des SLE. Ohne Rahmen, mit der gleichen Farbe wie der normale Background - also unsichtbar. Und im Fehlerfall die Backgroundcolor ändert.
Jan
der Punkt ist ja: Wie bekomme ich im Fehlerfall (nachträglich) das farbige Static unter das SLE?
Ich vermute mal das geht nur, wenn man das Static grundsätzlich anlegt als Parent des SLE. Ohne Rahmen, mit der gleichen Farbe wie der normale Background - also unsichtbar. Und im Fehlerfall die Backgroundcolor ändert.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- klammerauf
- UDF-Programmierer
- Beiträge: 74
- Registriert: Do, 08. Feb 2007 14:16
- Wohnort: Karlsruhe
- Hat sich bedankt: 4 Mal
Re: XbpSLE mit rotem Rahmen [gelöst]
Jetzt hab ichs:
Nachdem ich das XbpStatic mit roter Füllung erzeugt und mit leichtem Versatz über das XbpSLE gelegt habe, rufe ich anschließend XbpSLE:configure() auf. Das sorgt dafür, dass das XbpSLE nochmal gezeichnet wird, und zwar über das darunter liegende XbpStatic.
Dabei muss ich das Static gar nicht als Parent des XbpSLE erzeugen.
Nachdem ich das XbpStatic mit roter Füllung erzeugt und mit leichtem Versatz über das XbpSLE gelegt habe, rufe ich anschließend XbpSLE:configure() auf. Das sorgt dafür, dass das XbpSLE nochmal gezeichnet wird, und zwar über das darunter liegende XbpStatic.
Dabei muss ich das Static gar nicht als Parent des XbpSLE erzeugen.
Exzessiver Codeblock Programmierer
--
Grüße
Sebastian
--
Grüße
Sebastian
- brandelh
- Foren-Moderator
- Beiträge: 15778
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 86 Mal
- Danksagung erhalten: 43 Mal
- Kontaktdaten:
Re: XbpSLE mit rotem Rahmen
eigentlich gruppiert man ja verschiedene SLE auf einem Static, dann ist der Parent wichtig, aber wie bei mir gezeigt geht es auch anders.
Wichtig ist aber die Einstellung des Static:
::stInfoEditShowStatus:clipParent := .T.
::stInfoEditShowStatus:clipSiblings := .T.
dadurch schneidet dieses schon alle "Geschwister" also alle Controls auf gleicher Ebene (Parent) aus.
Wichtig ist aber die Einstellung des Static:
::stInfoEditShowStatus:clipParent := .T.
::stInfoEditShowStatus:clipSiblings := .T.
dadurch schneidet dieses schon alle "Geschwister" also alle Controls auf gleicher Ebene (Parent) aus.
Gruß
Hubert
Hubert