\alaska\xppw32\source\samples\basics\ownerdrw
Moderator: Moderatoren
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
\alaska\xppw32\source\samples\basics\ownerdrw
hi,
ich habe mir mal das ownerdraw Menu angesehen und damit experimentiert. was ich leider nicht verstehe :
wie wir ein Menuitem "refresh"ed ?
also wenn ich z.b. beim Item 1,1 das Bitmap wechsel möchte
(z.b. "Checked" Bitmap gegen "Unchecked" Bitmap) , wie
bekomme ich das neue angezeigt ?
ich sehe zwar die Methode MeasureItem() und DrawItem()
aber wie verwende ich die und woher bekomme ich die nötigen
Parameter ?
gruss by OHR
Jimmy
p.s. ownerdraw Menu werden scheinbar nicht über einem ActiveX
Element angezeigt s.h. Bugreport in der Alaska-Software NG.
ich habe mir mal das ownerdraw Menu angesehen und damit experimentiert. was ich leider nicht verstehe :
wie wir ein Menuitem "refresh"ed ?
also wenn ich z.b. beim Item 1,1 das Bitmap wechsel möchte
(z.b. "Checked" Bitmap gegen "Unchecked" Bitmap) , wie
bekomme ich das neue angezeigt ?
ich sehe zwar die Methode MeasureItem() und DrawItem()
aber wie verwende ich die und woher bekomme ich die nötigen
Parameter ?
gruss by OHR
Jimmy
p.s. ownerdraw Menu werden scheinbar nicht über einem ActiveX
Element angezeigt s.h. Bugreport in der Alaska-Software NG.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Jimmy,
wenn ich mich recht erinnere, geht das (noch) nicht!
So etwas ähnliches war nämlich Thema am Rand der DevCon bei Tills (glaube ich?) Vortrag.
Aber da müsste Tom noch mal was zu sagen - soweit ich mich erinnere ging es darum, dass die Menüs nicht mehr richtig neu gezeichnet werden, wenn man Aufklappmenüs hat und die sich am Rand ein wenig überlagern. Sobald die Untermenüs zuklappen, wird das übergeordnete Menü nicht richtig neu gezeichnet (der Rand des Untermenüs bleibt zu sehen). Und da wurde dann gefragt, wie man dabei die Menüeinträge refreshen kann. Und laut Till (?) geht das (noch) nicht!
Viele Grüße,
Martin
wenn ich mich recht erinnere, geht das (noch) nicht!
So etwas ähnliches war nämlich Thema am Rand der DevCon bei Tills (glaube ich?) Vortrag.
Aber da müsste Tom noch mal was zu sagen - soweit ich mich erinnere ging es darum, dass die Menüs nicht mehr richtig neu gezeichnet werden, wenn man Aufklappmenüs hat und die sich am Rand ein wenig überlagern. Sobald die Untermenüs zuklappen, wird das übergeordnete Menü nicht richtig neu gezeichnet (der Rand des Untermenüs bleibt zu sehen). Und da wurde dann gefragt, wie man dabei die Menüeinträge refreshen kann. Und laut Till (?) geht das (noch) nicht!
Viele Grüße,
Martin
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.
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Hi,
es würde mir ja reichen wenn ich ein :invalidaterect() abschicken
könnte, aber "wohin" ? wie bekomme ich raus welche Menu-Element
ich angeclickt habe (oMenu:getitem(x) geht nicht ...) ?
gruss by OHR
Jimmy
... na toll und was sollen wir dann mit dem sample ... grummelMartin Altmann hat geschrieben: wenn ich mich recht erinnere, geht das (noch) nicht!
So etwas ähnliches war nämlich Thema am Rand der DevCon bei Tills (glaube ich?) Vortrag.
es würde mir ja reichen wenn ich ein :invalidaterect() abschicken
könnte, aber "wohin" ? wie bekomme ich raus welche Menu-Element
ich angeclickt habe (oMenu:getitem(x) geht nicht ...) ?
gruss by OHR
Jimmy
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Huhu.
Mein Problem bestand aus zweien. Erstens wollte ich nach Erzeugung des Menüs weitere Items hinzufügen, was das Layout des Menüs zerpfriemelt hat. Die Lösung bestand schlicht darin, daß ich bei AddItem() den Stil vergessen hatte:
Das zweite Problem waren Menüeinträge, deren Captions ich zur Laufzeit verändern wollte. Das habe ich schlicht an der falschen Stelle gemacht.
Mein Problem bestand aus zweien. Erstens wollte ich nach Erzeugung des Menüs weitere Items hinzufügen, was das Layout des Menüs zerpfriemelt hat. Die Lösung bestand schlicht darin, daß ich bei AddItem() den Stil vergessen hatte:
Code: Alles auswählen
oMenu:AddItem({"Menüeintrag",{||msgbox("Menüeintrag")},,XBPMENUBAR_MIA_OWNERDRAW})
Code: Alles auswählen
SetNewItemCaption(oMenu,1,"Neuer Menüeintrag")
PROC SetNewItemCaption(oMenu,nItem,cCaption)
LOCAL aItems
aItems := oMenu:getItem(nItem)
aItems[1] := cCaption
oMenu:SetItem(nItem,aItems)
RETURN
Zuletzt geändert von Tom am Fr, 09. Jun 2006 15:17, insgesamt 2-mal geändert.
Herzlich,
Tom
Tom
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Moin allerseits,
ich meinte damit eigentlich nicht Toms Problem, sondern ein Problem das (glaube ich) Bobby Drakos hatte.
Aber mal schauen, vielleicht ist Jimmy ja auch schon mit Toms Posting geholfen
Viele Grüße,
Martin
ich meinte damit eigentlich nicht Toms Problem, sondern ein Problem das (glaube ich) Bobby Drakos hatte.
Aber mal schauen, vielleicht ist Jimmy ja auch schon mit Toms Posting geholfen
Viele Grüße,
Martin
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.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Hallo, Jimmy.
Wenn Du :checkItem setzt (oMenu:CheckItem(nIndex,.T.)), werden die nötigen Redraw-Methoden eigentlich automatisch ausgeführt.also wenn ich z.b. beim Item 1,1 das Bitmap wechsel möchte
(z.b. "Checked" Bitmap gegen "Unchecked" Bitmap) , wie
bekomme ich das neue angezeigt ?
Herzlich,
Tom
Tom
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
gibt eben kein "Check Zeichen" sondern das muss man selbst per
Bitmap machen ...
ich bin jetzt soweit gekommen :
das funktioniert soweit das ich "blabla" als neuen Menutext habe ...
aber das Bitmap ist immer noch das "alte" ...
was mache ich immer noch verkehrt ?
gruss by OHR
Jimmy
tja "eigendlich" hatte ich sowas bei ownerdraw Menu gedacht, aber esTom hat geschrieben:Wenn Du :checkItem setzt (oMenu:CheckItem(nIndex,.T.)), werden die nötigen Redraw-Methoden eigentlich automatisch ausgeführt.also wenn ich z.b. beim Item 1,1 das Bitmap wechsel möchte
(z.b. "Checked" Bitmap gegen "Unchecked" Bitmap) , wie
bekomme ich das neue angezeigt ?
gibt eben kein "Check Zeichen" sondern das muss man selbst per
Bitmap machen ...
ich bin jetzt soweit gekommen :
Code: Alles auswählen
// get the ownerdraw menuitem
aTemp := oMainDlg:childFromName(ID_VIEW):getItem(8)
// just test set a new Text
aTemp [1] := "blabla"
// while aTEMP only have 4 Elements and ownerdraw menu
// use 5st Element for bitmap ...
IF( SP_DLGPANEL(),;
aadd(aTemp,CHECK_ON),;
aadd(aTemp,CHECK_OFF))
// now set the hole
oMainDlg:childFromName(ID_VIEW):SetItem(8,aTemp)
aber das Bitmap ist immer noch das "alte" ...
was mache ich immer noch verkehrt ?
gruss by OHR
Jimmy
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
5 Elemente liefern würde. Im Debugger hab ich dann gesehen das nur
"standart" 4 Elemente zurückgegeben werden. Danach hab ich dann
versucht per AADD das 5st Element hinzuzufügen.
"eigendlich" sollte oMainDlg:childFromName(ID_VIEW):SetItem(8,aTemp)
dann alles korrekt setzten und anzeigen. mit dem Menutext geht es ja
aber das Bitmap ändert sich nicht ...
danke für den Versuch ... wer hat noch eine Idee ?
gruss by OHR
Jimmy
ich hatte "gehofft" das mir oMainDlg:childFromName(ID_VIEW):getItem(8)Tom hat geschrieben: 5. Element möglicherweise bereits vorhanden - und Du addierst als sechstes?
5 Elemente liefern würde. Im Debugger hab ich dann gesehen das nur
"standart" 4 Elemente zurückgegeben werden. Danach hab ich dann
versucht per AADD das 5st Element hinzuzufügen.
"eigendlich" sollte oMainDlg:childFromName(ID_VIEW):SetItem(8,aTemp)
dann alles korrekt setzten und anzeigen. mit dem Menutext geht es ja
aber das Bitmap ändert sich nicht ...
danke für den Versuch ... wer hat noch eine Idee ?
gruss by OHR
Jimmy
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
also ich hab mir nochmal das Ownerdraw Sample vorgenommen
und mit verschiedenen Vorschlägen in den Alaska Newsgroup
verglichen. Dabei bin ich auf die Lösung von James Loughner
vom 26.04.06 in der public.xbase++.gui gestossen.
Im orignal MENUS.PRG gibt es 3x "IF oBmp != NIL".
wenn man nun an die Stellen
.AND. BAnd(aInfo[3],XBP_DRAWSTATE_CHECKED) != 0
anhängt wird ein Bitmap nur dann angezeigt wenn das MenuItem
isItemChecked() = .T. ist. Leider weiss die Function nicht welches
Bitmap nun das "check mark"-Bitmap ist sodas man eben alle die
ein Bitmap anzeigen sollen o:checkItem(nItem,.T.) zuweisen muss.
mit dem workaround kann ich leben ... das dass Sample aber auf
MenuItemDisabled() nicht reagiert muss noch gelöst werden
gruss by OHR
Jimmy
also ich hab mir nochmal das Ownerdraw Sample vorgenommen
und mit verschiedenen Vorschlägen in den Alaska Newsgroup
verglichen. Dabei bin ich auf die Lösung von James Loughner
vom 26.04.06 in der public.xbase++.gui gestossen.
Im orignal MENUS.PRG gibt es 3x "IF oBmp != NIL".
wenn man nun an die Stellen
.AND. BAnd(aInfo[3],XBP_DRAWSTATE_CHECKED) != 0
anhängt wird ein Bitmap nur dann angezeigt wenn das MenuItem
isItemChecked() = .T. ist. Leider weiss die Function nicht welches
Bitmap nun das "check mark"-Bitmap ist sodas man eben alle die
ein Bitmap anzeigen sollen o:checkItem(nItem,.T.) zuweisen muss.
mit dem workaround kann ich leben ... das dass Sample aber auf
MenuItemDisabled() nicht reagiert muss noch gelöst werden
gruss by OHR
Jimmy
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Jimmy,
vielen Dank für die Info - was heißt "fast"
Viele Grüsse,
Martin
vielen Dank für die Info - was heißt "fast"
Viele Grüsse,
Martin
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.
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
und siehe da ich habe nun ein Ownerdraw Menu über den ActiveX.
ersetzt durch
und es funktioniert (ausser das dass Bitmap nicht mehr geSCALED wird)
gruss by OHR
Jimmy
naja zuerst hatte ich gleich einen Absturz :Martin Altmann hat geschrieben: was heißt "fast"
ich habe die Zeile, welche den "Absturz" provozierte, rausgenommenoError:args :
-> VALTYPE: O CLASS: XbpBitmap
-> VALTYPE: O CLASS: XbpPresSpace
oError:canDefault : N
oError:canRetry : N
oError:canSubstitute: J
oError:cargo : NIL
oError:description : Falscher Objekt Status
oError:filename :
oError:genCode : 104
oError:operation : resSpace
oError:osCode : 0
oError:severity : 2
oError:subCode : 4208
oError:subSystem : BASE
oError:thread : 1
oError:tries : 0
--------------------------------------------
CALLSTACK:
--------------------------------------------
Called from BMP2BMP(181)
Called from MAIN(520)
und siehe da ich habe nun ein Ownerdraw Menu über den ActiveX.
Code: Alles auswählen
oBMP := ExXbpBitmap():new():create()
oBMP:load( , 2000 )
aSize := oDlg:DrawingArea:Currentsize()
...
oLogo := XbpStatic():new(oDlg:drawingArea ...)
oLogo:type := XBPSTATIC_TYPE_BITMAP
oLogo:autoSize := .F.
oLogo:caption := BMP2BMP(oBMP,aSize) -> ERROR
Code: Alles auswählen
oLogo:caption := oBMP
gruss by OHR
Jimmy
Code: Alles auswählen
*** snip ***
FUNCTION BMP2BMP(oBMP,aNewSize)
LOCAL oHuge,oTiny,oPS, oRet
IF aNewSize[2] > 0
oHuge := oBMP
//Create a small bitmap to fit in our XbpStatic
oTiny := XbpBitmap():New():Create()
oTiny:Make(aNewSize[1], aNewSize[2])
oPS := XbpPresSpace():new()
oTiny:presSpace(oPS)
//Copie and resize the huge bitmap to the small bitmap
oHuge:Draw(oPS, { 0, 0, aNewSize[1], aNewSize[2]}, , ,
GRA_BLT_BBO_IGNORE)
oRet := oTiny
ELSE
oRet := oBMP
ENDIF
RETURN oRet
*** eof ***
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Jimmy,
was durchaus daran liegen könnte, dass der caption-slot nicht mit einer Funktion als Parameter klar kommt!
Bei dem Ownerdrawing gibt es doch verschiedene Paint-Events (je nach Objekt unterschiedlich - bei einem Menü z.B. Vordergrund, Hintergrund, Rahmen und Grafik). Sorge doch dafür, dass Deine Funktion beim Painten der Grafik eingebunden wird. Den initialen caption-slot lässt Du so, wie er jetzt ist...
Viele Grüße,
Martin
was durchaus daran liegen könnte, dass der caption-slot nicht mit einer Funktion als Parameter klar kommt!
Bei dem Ownerdrawing gibt es doch verschiedene Paint-Events (je nach Objekt unterschiedlich - bei einem Menü z.B. Vordergrund, Hintergrund, Rahmen und Grafik). Sorge doch dafür, dass Deine Funktion beim Painten der Grafik eingebunden wird. Den initialen caption-slot lässt Du so, wie er jetzt ist...
Viele Grüße,
Martin
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.
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
so nun hat Till mir den 2st Versuch geschickt, nachdem ich ihm nochmal
das letzte aktuelle Demo gemailt hatte. Die funktioniert nun bei mir so
wie es wohl sein sollte ... weiter "Nebenwirkungen" hab ich noch nicht geprüft denn nun geht es langsam Richtung FUSSBALL !!!
gruss by OHR
Jimmy
... (und wir fahren nach Berlin, Berlin,Berlin ...)
so nun hat Till mir den 2st Versuch geschickt, nachdem ich ihm nochmal
das letzte aktuelle Demo gemailt hatte. Die funktioniert nun bei mir so
wie es wohl sein sollte ... weiter "Nebenwirkungen" hab ich noch nicht geprüft denn nun geht es langsam Richtung FUSSBALL !!!
gruss by OHR
Jimmy
... (und wir fahren nach Berlin, Berlin,Berlin ...)
- Manfred
- Foren-Administrator
- Beiträge: 21197
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Ich interessiere mich ja eigentlich überhaupt nicht dafür, aber dieses Jahr drücke ich alle Daumen, die irgendwie zu finden sind.....gruss by OHR
Jimmy
... (und wir fahren nach Berlin, Berlin,Berlin ...)
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!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Jimmy,
Viele Grüße und Daumen drücken!
Martin
sowieso - die haben ja noch ihre Sachen hier nebenan im Hotel liegen...AUGE_OHR hat geschrieben:... (und wir fahren nach Berlin, Berlin,Berlin ...)
Viele Grüße und Daumen drücken!
Martin
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.
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi
gruss by OHR
Jimmy
tja ... über einer XbpListbox (!!!) habe wir nun auch noch ein Problem !AUGE_OHR hat geschrieben: so nun hat Till mir den 2st Versuch geschickt ...
... weiter "Nebenwirkungen" hab ich noch nicht geprüft
das war wohl nixAUGE_OHR hat geschrieben: ... (und wir fahren nach Berlin, Berlin,Berlin ...)
gruss by OHR
Jimmy