\alaska\xppw32\source\samples\basics\ownerdrw

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

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

\alaska\xppw32\source\samples\basics\ownerdrw

Beitrag von AUGE_OHR »

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.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15694
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo,

ich vermute, dass man bei ownerdraw selbst entweder jedesmal 'drawen' oder aber den Bereich mit :infalidaterect() als ungültig markieren muß.

Eventuell weiß es jemand besser ?
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16507
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,
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
: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
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

Hi,
Martin 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.
:( ... na toll und was sollen wir dann mit dem sample ... grummel

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
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9355
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

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:

Code: Alles auswählen

oMenu:AddItem({"Menüeintrag",{||msgbox("Menüeintrag")},,XBPMENUBAR_MIA_OWNERDRAW})
Das zweite Problem waren Menüeinträge, deren Captions ich zur Laufzeit verändern wollte. Das habe ich schlicht an der falschen Stelle gemacht.

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
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16507
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

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 :D

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
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9355
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, Jimmy.
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 ?
Wenn Du :checkItem setzt (oMenu:CheckItem(nIndex,.T.)), werden die nötigen Redraw-Methoden eigentlich automatisch ausgeführt.
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
Tom hat geschrieben:
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 ?
Wenn Du :checkItem setzt (oMenu:CheckItem(nIndex,.T.)), werden die nötigen Redraw-Methoden eigentlich automatisch ausgeführt.
tja "eigendlich" hatte ich sowas bei ownerdraw Menu gedacht, aber es
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)
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
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9355
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

was mache ich immer noch verkehrt ?
5. Element möglicherweise bereits vorhanden - und Du addierst als sechstes?
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
Tom hat geschrieben: 5. Element möglicherweise bereits vorhanden - und Du addierst als sechstes?
ich hatte "gehofft" das mir oMainDlg:childFromName(ID_VIEW):getItem(8)
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
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

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 :roll:

gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

wollte nur Mitteilen das man bei Alaska Software bei Till nach einer
"neuen" XppUi1.dll für PDR 5562, ActiveX bekommen kann.

damit ist es (fast) möglich auch ein Ownerdraw Menu über einem
ActiveX zu haben was etwas anzeigt ...)

gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16507
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,
vielen Dank für die Info - was heißt "fast" :?:

Viele Grüsse,
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
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
Martin Altmann hat geschrieben: was heißt "fast" :?:
naja zuerst hatte ich gleich einen Absturz :
oError: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 : :presSpace
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)
ich habe die Zeile, welche den "Absturz" provozierte, rausgenommen
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
ersetzt durch

Code: Alles auswählen

oLogo:caption  := oBMP
und es funktioniert (ausser das dass Bitmap nicht mehr geSCALED wird)

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 ***
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16507
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 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
: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
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

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 ...)
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

gruss by OHR
Jimmy
... (und wir fahren nach Berlin, Berlin,Berlin ...)
Ich interessiere mich ja eigentlich überhaupt nicht dafür, aber dieses Jahr drücke ich alle Daumen, die irgendwie zu finden sind.....
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!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16507
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,
AUGE_OHR hat geschrieben:... (und wir fahren nach Berlin, Berlin,Berlin ...)
sowieso - die haben ja noch ihre Sachen hier nebenan im Hotel liegen... :lol:

Viele Grüße und Daumen drücken!
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
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi
AUGE_OHR hat geschrieben: so nun hat Till mir den 2st Versuch geschickt ...
... weiter "Nebenwirkungen" hab ich noch nicht geprüft
tja ... über einer XbpListbox (!!!) habe wir nun auch noch ein Problem !
AUGE_OHR hat geschrieben: ... (und wir fahren nach Berlin, Berlin,Berlin ...)
das war wohl nix

gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
AUGE_OHR hat geschrieben: tja ... über einer XbpListbox (!!!) habe wir nun auch noch ein Problem !
so die "lates" Version von heute die ich von Till bekam funktioniert nun
auch mit einem "ownerdraw" Menu über der XbpListbox UND ActiveX.

gruss by OHR
Jimmy
Antworten