Farbverlauf

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Farbverlauf

Beitrag von AUGE_OHR »

hi,

kann man direkt in ein XbpStatic oder oDlg:drawingArea eine Farbverlauf
bekommen ?

z.Z. lade ich ein Bitmap (mit Farbverlauf) in die XbpStatic.

gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Jimmy,
was spricht denn dagegen, die Bitmap mit dem Farbverlauf im Speicher zu erzeugen und anzuzeigen (wie Du es ja wahrscheinlich gerade machst)?
Hast Du Dir mal das Ownerdrawing-Beispiel von Alaska angeschaut?
Ich weiß jetzt nicht, wie das da mit dem Hintergrund gelöst ist - aber m.E. nach ist da doch auch ein Farbverlauf, oder?

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14658
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Jimmy,

auf der Präsentation von Till auf der DevCon dieses Jahr hat der im OwnerDraw-Menü sowas eingebaut. Das ging über einen DLL-Aufruf.

Wenn Du auf das Beispiel keinen Zugriff hast schaue ich mal in den Code und suche die relevanten Stellen raus.

Jan
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Farbverlauf

Beitrag von Rolf Ramacher »

Hallo Jimmy,

generelle Frage? Was meinst du mit Farbverlauf
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Beitrag von Günter Beyes »

Hi Jimmy,

Phil Ide hat ein Beispiel (Farbverlauf auf oDlg:drawingArea) hier veröffentlicht: http://www.idep.org.uk/xbase/datpage/gradient.html.
Der Farbverlauf wird dort mit einem API-Aufruf in :paint() dynamisch erzeugt. Ist zur Laufzeit in jeder Hinsicht konfigurierbar, sieht wunderschön aus, übermalt jedoch alles, was auf der drawingArea plaziert ist.

Um dem abzuhelfen, sehe ich zwei Möglichkeiten. Entweder den Griff in die API-Trickkiste, um beim :paint() die Children auszusparen. Recht kompliziert. Viel unproblematischer wäre es, beim ersten :paint(), und noch bevor die Children existieren, die Grafik in einem XbpBitmap-Objekt aufzuzeichnen. Das kann dann wie üblich drawingArea:bitmap (beziehungsweise XbpStatic:caption) zugewiesen werden.

Viele Grüße,
Günter
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Beitrag von AUGE_OHR »

hi,
Martin Altmann hat geschrieben: was spricht denn dagegen, die Bitmap mit dem Farbverlauf im Speicher zu erzeugen und anzuzeigen (wie Du es ja wahrscheinlich gerade machst)?
grundsätzlich nichts, aber ich würde gerne wissen on und wie man es mit
puren Xbase++ machen könnte.
Martin Altmann hat geschrieben: Hast Du Dir mal das Ownerdrawing-Beispiel von Alaska angeschaut?
Ich weiß jetzt nicht, wie das da mit dem Hintergrund gelöst ist - aber m.E. nach ist da doch auch ein Farbverlauf, oder?
das war mit einer der Gründe warum ich überhaupt auf die Frage kam.

Es scheint mir so als wenn die XP "Theme" dafür zuständig sind. Das
sieht man besonders gut an einen "silbernen" XP Button den man maximal
in der Höhe (:CurrenSize()[2]) macht damit man die Farbverlauf gut
sehen kann.
Stellt man nun auf "klassisches Windows" um verschwinden diese Farb-
verläufe auch bei den XP Buttons, aber im OwnerDraw Menue (Devcon)
sind bei dem MenuItem noch Farbverläufe.

Es gibt in Menus.prg der Methode :DrawItemBackground( oPS, aInfo )
die Stelle "// Fill the background area". Dort stand mal "vorher" der
Kommentar :
ELSEIF ::GradientFill == .T.
// Use gradient fill
// backBrush = New LinearGradientBrush(rectToPaint, _
// MenuItemBackColorStart, _
// MenuItemBackColorEnd, _
// LinearGradientMode.Horizontal)
// borderPen = Nothing
mir wird aber nicht ersichtlich wie ::GradientFill arbeitet
Günter Beyes hat geschrieben: Phil Ide hat ein Beispiel (Farbverlauf auf oDlg:drawingArea) hier veröffentlicht: http://www.idep.org.uk/xbase/datpage/gradient.html.
danke für den Tip. Ich hab mir das angesehen und des ist im Prinzip
das was ich haben möchte. Phil arbeitet mit der gdi32.dll .
Jan hat geschrieben: auf der Präsentation von Till auf der DevCon dieses Jahr hat der im OwnerDraw-Menü sowas eingebaut. Das ging über einen DLL-Aufruf.
jetzt wo du mich noch mal darauf hinweist hab ich es gefunden : GraGradientBox()

Code: Alles auswählen

   DLLCall( "MSIMG32.DLL", DLL_STDCALL, "GradientFill", nHDC, ;
            @aVertex, 2, @aGRect, 1, GRADIENT_FILL_RECT_H )
ok danke, ich werde das mal evaluieren.

gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

in der Titelzeile meines IE, Firefox oder auch Xbase++ Programmen ist ein Farbverlauf von links dunkelblau bis rechts hellblau zu sehen.

Diese Funktion des BS gibt es also zumindest schon seit Win2000 - vermutlich ab 16 Bit Farben, eventuell abhängig von Systemeinstellungen.

Somit dürfte es kein Problem sein diese GDI32.DLL zu verwenden.
Soweit ich mich erinnern kann wird die auch von RMCHART genutzt und soll auch schon bei Win98 dabei gewesen sein.
Gruß
Hubert
Antworten