Bitmap Ecken runden mit Transparenz [erledigt]
Moderator: Moderatoren
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Bitmap Ecken runden mit Transparenz [erledigt]
hi,
beim Windows Ownerdraw/Customdraw habe ich keinen Pressspace oPS (Object) sondern ein hDC (Device Context)
ich brauche also eine API Function für ein hDC und nicht für o:gethWnd()
ich benutze die DrawText API Function zur Anzeige von Text.
https://msdn.microsoft.com/en-us/librar ... s.85).aspx
das Icon hole ich mir direkt aus der Imagelist zu Anzeige mit ImageList_DrawEx().
https://msdn.microsoft.com/de-de/librar ... s.85).aspx
als Hintergrund zeige ich nun besagtest Bitmap an ... welche runde Ecken (transparent) bekommen soll.
nun dachte ich das es die DrawEdge API Function machen würde ... aber das kann man nur paar Konstanten angeben.
https://msdn.microsoft.com/de-de/librar ... s.85).aspx
da es ein hDC ist kann ich nicht eine "Region" API Function verwenden um das zu "maskieren". oder
wer hat noch eine Idee
Nachtrag : mit @GDI32:SetPixel(nHDC.aPos[1],aPos[2]) die Pixel in den Ecken gesetzt.
beim Windows Ownerdraw/Customdraw habe ich keinen Pressspace oPS (Object) sondern ein hDC (Device Context)
ich brauche also eine API Function für ein hDC und nicht für o:gethWnd()
ich benutze die DrawText API Function zur Anzeige von Text.
https://msdn.microsoft.com/en-us/librar ... s.85).aspx
das Icon hole ich mir direkt aus der Imagelist zu Anzeige mit ImageList_DrawEx().
https://msdn.microsoft.com/de-de/librar ... s.85).aspx
als Hintergrund zeige ich nun besagtest Bitmap an ... welche runde Ecken (transparent) bekommen soll.
nun dachte ich das es die DrawEdge API Function machen würde ... aber das kann man nur paar Konstanten angeben.
https://msdn.microsoft.com/de-de/librar ... s.85).aspx
da es ein hDC ist kann ich nicht eine "Region" API Function verwenden um das zu "maskieren". oder
wer hat noch eine Idee
Nachtrag : mit @GDI32:SetPixel(nHDC.aPos[1],aPos[2]) die Pixel in den Ecken gesetzt.
Zuletzt geändert von AUGE_OHR am Mi, 16. Aug 2017 19:18, insgesamt 1-mal geändert.
gruss by OHR
Jimmy
Jimmy
- mikehoffmann
- Rekursionen-Architekt
- Beiträge: 133
- Registriert: Mo, 21. Sep 2015 16:22
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 18 Mal
Re: Bitmap Ecken runden mit Transparenz
Charles Petzold, Programming Windows 5th. Edition, Chapter 14.
Bleibt aber noch das Problem, dass das Fensterlein unter Deinem den unbepinselten Platz befüllen muss (oder Du Dich speziell darum kümmerst).
Außerdem hege ich grundsätzliche Zweifel daran, dass Deine Mischung xb/win32 fehlerfrei funktioniert, weil Du Dich wahrscheinlich nicht an die korrekten Paint-Verfahren hältst.
Michael
Bleibt aber noch das Problem, dass das Fensterlein unter Deinem den unbepinselten Platz befüllen muss (oder Du Dich speziell darum kümmerst).
Außerdem hege ich grundsätzliche Zweifel daran, dass Deine Mischung xb/win32 fehlerfrei funktioniert, weil Du Dich wahrscheinlich nicht an die korrekten Paint-Verfahren hältst.
Michael
- HaPe
- 1000 working lines a day
- Beiträge: 996
- Registriert: So, 15. Nov 2015 17:44
- Wohnort: 71665 Vaihingen-Enz
- Hat sich bedankt: 17 Mal
- Danksagung erhalten: 15 Mal
Re: Bitmap Ecken runden mit Transparenz
Hallo Jimmy !
Vielleicht hilft dir das etwas: http://news2news.com/vfp/?example=126 bzw. http://news2news.com/vfp/?example=143
Das letzte sieht bei mir so aus:
Vielleicht hilft dir das etwas: http://news2news.com/vfp/?example=126 bzw. http://news2news.com/vfp/?example=143
Das letzte sieht bei mir so aus:
- Dateianhänge
-
- roundform.png (20.6 KiB) 9494 mal betrachtet
--
Hans-Peter
Hans-Peter
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Bitmap Ecken runden mit Transparenz
hi,
Danke für eure Antworten.
@Hape : die Links gehen in Richtung "Form" ( XbpDialog ) was ein "Top-Window" ist und mit o:gethWnd() arbeitet.
ich möchte aber ein "Teil" in einem Fenster "malen" wobei ich eine hDC statt PressSpace habe.
@Mike : warum behauptest du immer wieder das ich nicht "sauber" mit der API umgehe ...
klar habe ich wie jeder Newbie Problem mit "neuen" Sachen egal ob Xbase oder Windows API aber man lernt ja dazu.
überhaupt geht es um die Idee z.b. das iTaskList Interface vom Progressbar. das hat zwar gedauert aber nun funktioniert es. so nun auch die Idee mit Listview und (echten) Customdraw weil bei LVS_ICON (echtes) Ownerdraw nicht funktioniert.
nun gehört visual Style dazu aber im LVS_ICON Modus "wirkt" er nicht wie im LVS_REPORT Style ... "Focus" ist nicht transparent. wie der visual Style aussehen soll kennt jeder vom Windows 7 Desktop. und so sieht mein Code aus
ich nehme also den Visual Style als Bitmap. was mir noch fehlt sind "nur" noch die "runden" Ecken.
p.s. unter Windows 10 ist es wieder obsolet denn da sind es normale Ecken und fast keine transparenz ( nur Rahmen )
Danke für eure Antworten.
@Hape : die Links gehen in Richtung "Form" ( XbpDialog ) was ein "Top-Window" ist und mit o:gethWnd() arbeitet.
ich möchte aber ein "Teil" in einem Fenster "malen" wobei ich eine hDC statt PressSpace habe.
@Mike : warum behauptest du immer wieder das ich nicht "sauber" mit der API umgehe ...
klar habe ich wie jeder Newbie Problem mit "neuen" Sachen egal ob Xbase oder Windows API aber man lernt ja dazu.
überhaupt geht es um die Idee z.b. das iTaskList Interface vom Progressbar. das hat zwar gedauert aber nun funktioniert es. so nun auch die Idee mit Listview und (echten) Customdraw weil bei LVS_ICON (echtes) Ownerdraw nicht funktioniert.
nun gehört visual Style dazu aber im LVS_ICON Modus "wirkt" er nicht wie im LVS_REPORT Style ... "Focus" ist nicht transparent. wie der visual Style aussehen soll kennt jeder vom Windows 7 Desktop. und so sieht mein Code aus
Code: Alles auswählen
nhDC := @user32:GetWindowDC(::hLv)
// Memory DC anfordern
hMemDC := @Gdi32:CreateCompatibleDC(nhDC)
// Platz für Text berechnen
@UxTheme:GetThemeTextExtent(::hTheme ,;
hMemDC ,;
iPartId ,;
iStateId ,;
Str2Unicode(cName),;
-1 ,;
nOr(DT_CENTER, DT_BOTTOM,DT_WORDBREAK,DT_WORD_ELLIPSIS),;
aRect2 ,;
rcText )
// Memory Bitmap erstellen
hMemBM := @Gdi32:CreateCompatibleBitmap (hMemDC, aSize[1], aSize[2] )
oldBmp := @Gdi32:SelectObject(hMemDC, hMemBM)
// alles im Memory
nRet := @UxTheme:IsThemeBackgroundPartiallyTransparent(::hTheme, iPartId, iStateId)
IF .NOT. EMPTY(nRet)
nRet := @UxTheme:DrawThemeParentBackground(::hLv,hMemDC, aRect2)
ENDIF
IF nRet = S_OK
nRet := @UxTheme:DrawThemeBackground( ::hTheme ,;
hMemDC ,;
iPartId ,;
iStateId ,;
aRect2 ,;
rcText )
ENDIF
...
// AlphaBlend in den "echten" Customdraw DC
//
nRet := @Msimg32:AlphaBlend(;
pDC, aRect2[1], aRect2[2], aSize[1], aSize[2],;
hMemDC, 0, 0, aSize[1], aSize[2], nblend )
p.s. unter Windows 10 ist es wieder obsolet denn da sind es normale Ecken und fast keine transparenz ( nur Rahmen )
gruss by OHR
Jimmy
Jimmy
- mikehoffmann
- Rekursionen-Architekt
- Beiträge: 133
- Registriert: Mo, 21. Sep 2015 16:22
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 18 Mal
Re: Bitmap Ecken runden mit Transparenz
-- snip ---
warum behauptest du immer wieder das ich nicht "sauber" mit der API umgehe
--- snap ---
So etwas würde ich nie so einfach behaupten. Ich habe sogar geschrieben, wo ich die Probleme sehe.
Viele Grüße
Michael
warum behauptest du immer wieder das ich nicht "sauber" mit der API umgehe
--- snap ---
So etwas würde ich nie so einfach behaupten. Ich habe sogar geschrieben, wo ich die Probleme sehe.
Viele Grüße
Michael
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Bitmap Ecken runden mit Transparenz
ich bin mir sehr wohl bewusst wie (echtes) Ownerdraw und (echtes) Customdraw funktioniertmikehoffmann hat geschrieben: ↑Di, 15. Aug 2017 15:21 Außerdem hege ich grundsätzliche Zweifel daran, dass Deine Mischung xb/win32 fehlerfrei funktioniert, weil Du Dich wahrscheinlich nicht an die korrekten Paint-Verfahren hältst.
ich sehe nicht das die NMLVCUSTOMDRAW in Cockpit definiert ist ... nur NMCUSTOMDRAW
die Frage ist also ob du weisst welches Paint Verhalten hier gefragt ist ?
---
ich habe keine grundsätzlichen Problem mit ot4xb oder Windows API
... wenn frage ich Pablo und nicht hier im Forum
wenn ich ein Problem habe dann mit Xbase++ da es "anders" ist als Windows es fordert.
ich habe als letztes an AlphaBlend() gearbeitet. die Structure BLENDFUNCTION sieht so aus
https://msdn.microsoft.com/de-de/librar ... s.85).aspx
Code: Alles auswählen
typedef struct _BLENDFUNCTION {
BYTE BlendOp;
BYTE BlendFlags;
BYTE SourceConstantAlpha;
BYTE AlphaFormat;
} BLENDFUNCTION, *PBLENDFUNCTION, *LPBLENDFUNCTION;
Frage : wer weiss warum
p.s. "ich" habe die Lösung. es soll nur verdeutlichen welche Problem Xbase++ User haben.
p.s.p.s. habe das Problem mit @GDI32:SetPixel() gelöst
gruss by OHR
Jimmy
Jimmy
- mikehoffmann
- Rekursionen-Architekt
- Beiträge: 133
- Registriert: Mo, 21. Sep 2015 16:22
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 18 Mal
Re: Bitmap Ecken runden mit Transparenz [erledigt]
Du verwendest die Ownerdraw-Notifications eines Listview Controls an das Parentwindow dieses Listviews um einen halbdurchsichtigem Mülleimer mit runden Ecken zu malen? Einfacher geht es wirklich nicht.
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Bitmap Ecken runden mit Transparenz [erledigt]
Nein, Ownerdraw functioniert nicht mit LVS_ICON ... ich benutzte Customdraw.
aber das ist egal denn es geht NICHT um das Paint Verhalten sondern um die runden Ecken wo ich machbaren keinen Vorschlag erhalten habe. ich habe nun mit @GDI32:SetPixel() je 3 Pixel in die Ecken gesetzt und bis damit zufrieden.
p.s. es geht hier im Forum um Lösungen und nicht um Belehrungen, Danke
gruss by OHR
Jimmy
Jimmy
- Jan
- Marvin
- Beiträge: 14651
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Bitmap Ecken runden mit Transparenz [erledigt]
Das seh ich aber etwas anders.
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.
- mikehoffmann
- Rekursionen-Architekt
- Beiträge: 133
- Registriert: Mo, 21. Sep 2015 16:22
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 18 Mal
Re: Bitmap Ecken runden mit Transparenz [erledigt]
Hallo Jimmy,
bitte lies nochmal meine erste Antwort. Wo belehre ich da? Ich schreibe Dir ganz genau, wie Du die Lösung für Dein Problem findest und worauf Du dann noch achten mußt. Außerdem äußere ich Bedenken, dass Du die richtigen Verfahren anwendest. Bitte besorg Dir das Buch von Chales Petzold und arbeite es durch. Das gibt's bei Ebay für einen Apple und ein I. Dann weisst Du genau, welche Begriffe wichtig sind, was sie genau bedeuten und wofür man sie fälschlicherweise verwendet, weil Mr Mc Microsoft Mc Bean es so vorgibt. Vielleicht verstehe danach sogar ich trotz hohen Alters, was Du schreibst, wenn Du über Deine API-Erfahrungen und Erkenntnisse berichtest. Und vielleicht verstehst Du auch, was ich so schreibe und findest nicht mehr alles zu kompliziert. Das Windows API und GUI ist ein Scheinriese. Wenn man genau hinsieht, wird alles ganz einfach. Aber dieses Genau-Hingucken dauert Zeit und das kann einem keiner abnehmen. Alles andere is Fake News.
Liebe Grüße
Michael
bitte lies nochmal meine erste Antwort. Wo belehre ich da? Ich schreibe Dir ganz genau, wie Du die Lösung für Dein Problem findest und worauf Du dann noch achten mußt. Außerdem äußere ich Bedenken, dass Du die richtigen Verfahren anwendest. Bitte besorg Dir das Buch von Chales Petzold und arbeite es durch. Das gibt's bei Ebay für einen Apple und ein I. Dann weisst Du genau, welche Begriffe wichtig sind, was sie genau bedeuten und wofür man sie fälschlicherweise verwendet, weil Mr Mc Microsoft Mc Bean es so vorgibt. Vielleicht verstehe danach sogar ich trotz hohen Alters, was Du schreibst, wenn Du über Deine API-Erfahrungen und Erkenntnisse berichtest. Und vielleicht verstehst Du auch, was ich so schreibe und findest nicht mehr alles zu kompliziert. Das Windows API und GUI ist ein Scheinriese. Wenn man genau hinsieht, wird alles ganz einfach. Aber dieses Genau-Hingucken dauert Zeit und das kann einem keiner abnehmen. Alles andere is Fake News.
Liebe Grüße
Michael
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Bitmap Ecken runden mit Transparenz [erledigt]
ach, Jimmy hat bestimmt wieder ein paar Nächte hintereinander durchgearbeitet und ist jetzt ein wenig gestresst...
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Bitmap Ecken runden mit Transparenz [erledigt]
hi,
ich habe ein konkrete Frage gestellt aber keine direkte Antwort (Link, Code etc.) bekommen.
also wenn du an dem Code den ich veröffentlicht habe was zu meckern hast bitte ich um Klarstellung.
es wird von dir der Eindruck erweckt das alles doch so schwierig sei und nur wenige Leute was davon verstehen.
es ist wie einige von Alaska die sich ebenfalls so darstellen als wenn die etwas besseres wären als die (dummen) User.
jeder User hat mal als Newbie angefangen und auch Profis machen jeden Tag Fehler.
ich bin kein C Profi und ich will es auch nicht werden ... obwohl meine harbour Apps würde ich gerne "selbst" erweitern.
klar ist es für einen C Profi sicherlich nicht so schwer eine API Function wie Alphablend() zu nutzen ...
aber wie kann das ein Xbase++ User ... oder sieht keiner das "Problem" ?
Ich habe das Buch seit 9 Jahren sowie andere Bücher die ich in den letzten Jahren durchgearbeitet habe.
ich habe ein konkrete Frage gestellt aber keine direkte Antwort (Link, Code etc.) bekommen.
also wenn du an dem Code den ich veröffentlicht habe was zu meckern hast bitte ich um Klarstellung.
es wird von dir der Eindruck erweckt das alles doch so schwierig sei und nur wenige Leute was davon verstehen.
es ist wie einige von Alaska die sich ebenfalls so darstellen als wenn die etwas besseres wären als die (dummen) User.
jeder User hat mal als Newbie angefangen und auch Profis machen jeden Tag Fehler.
ich bin kein C Profi und ich will es auch nicht werden ... obwohl meine harbour Apps würde ich gerne "selbst" erweitern.
klar ist es für einen C Profi sicherlich nicht so schwer eine API Function wie Alphablend() zu nutzen ...
aber wie kann das ein Xbase++ User ... oder sieht keiner das "Problem" ?
gruss by OHR
Jimmy
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Bitmap Ecken runden mit Transparenz [erledigt]
Welches Problem meinst du denn. Dass wir keinen Byte Datentyp haben, oder das der gui thread neben Main abläuft ?
Pablo hat für beides Lösung. 4 Byte in eine long in oder 4 Zeichen string unterbringen ist auch alt ... BAB.
Oder ein anderes Problem?
Ich hab keine Lust auf Rätselraten und die meisten wollen sich um sowas auch nicht kümmerk müssen.
Pablo hat für beides Lösung. 4 Byte in eine long in oder 4 Zeichen string unterbringen ist auch alt ... BAB.
Oder ein anderes Problem?
Ich hab keine Lust auf Rätselraten und die meisten wollen sich um sowas auch nicht kümmerk müssen.
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Bitmap Ecken runden mit Transparenz [erledigt]
YUP
kann das Newsforum z.Z. nicht erreichen und nach der Lösung fragen den die "eingebaute" BLENDFUNCTION Structure in ot4xb funktioniert "so" nicht"brandelh hat geschrieben:Pablo hat für beides Lösung. 4 Byte in eine long in oder 4 Zeichen string unterbringen ist auch alt ... BAB.
Code: Alles auswählen
blend := BLENDFUNCTION():New()
blend:BlendOp := AC_SRC_OVER // 0
blend:BlendFlags := 0
blend:SourceConstantAlpha := 127
blend:AlphaFormat := 0
habe einen extra Thread fpr die Alphablend() API Function aufgemacht.brandelh hat geschrieben:Ich hab keine Lust auf Rätselraten und die meisten wollen sich um sowas auch nicht kümmerk müssen.
https://xbaseforum.de/viewtopic.php?f=27&t=9923
gruss by OHR
Jimmy
Jimmy