Ownerdraw / Manifest

Eigentlich ist mir die Frage peinlich, aber es kann sonst niemand helfen ... :)

Moderator: Moderatoren

Antworten
kallecux
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 104
Registriert: Mi, 01. Feb 2006 23:19

Ownerdraw / Manifest

Beitrag von kallecux »

Hallo xBase-Freunde,

ich habe nun einige Zeit versucht den grundsätzlichen Druchblick zum Thema Manifest und Ownerdraw herauszufinden und werde nicht so richtig schlau. Ich würde gerne mal folgenden Fragen stellen:

Manifest:
1. Welche Bedeutungen haben die Einträge in der Manifestdatei und welche Konsquenzen.

2. Gibt es "optische Steuerungsmöglichkeiten" durch Angabe unterschiedlicher Paramter.

3. Wenn ich eine Manifestdatei nutze, wird dann die Ownerdrawfähigkeit ausgeschaltet oder überwiegt Ownerdrawing.

4. Wenn ich Ownerdrawing benutzten, z.B. beim xbpPushButton, ist es korrekt, dass ich "jeden Pixel, Rahmen, Strich, etc." selber per Gra... programmieren muss. - (Welch ein Aufwand wenn es so wäre!)

5. Wenn Antwort 4 == "Ja" Gibt es die Möglichkeit die Gra...-Funktionen für den Standard-PushButton, etc. irgendwo zu erhalten, damit man nicht alles "hinfummeln" muss.

Soweit erstmal - weitere Fragen tauchen bestimmt nach den ersten Antworten auf - Danke in voraus!
Beste Grüße

Karl Heinz
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Hallo Kalle,

1) Soweit ich weiß, wird damit die Optik der beiden neueren Windows-Versionen eingeschaltet. Aber auch nur, wenn die unter Windows auch eingeschaltet ist. Ich z. B. habe mein XP auf Win2000-Optik umgeschaltet. Dann nützt natürlich auch die Manifest nix mehr.

2) Nö.

3) zumindest unter 1.9.331 überwiegt Ownerdrawing.

4)Oh ja. Alles von Hand machen. Sehr aufwändig. Das soll sich aber ändern. Ich weiß noch nicht, ob das schon in der 1.9.339 geändert wurde (soweit bin ich im Probieren damit noch nicht gekommen), aber kommen soll das. Das man nur die Sachen ändern braucht, die man anders haben möchte, und der Rest bleibt Standard.

5) Schau mal unter Wissensbasis. Da habe ich mal vor einiger Zeit einen OwnerDrawig-Pushbutton reingelegt. Vielleicht hilft das ja ein wenig weiter.

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:

Beitrag von Rolf Ramacher »

Hi Jan,

helf mir mal auf die Sprünge. Ich kann mit "manifest" nix anfangen.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Rolf,

schau mal in die Onlinehilfe. Da ist die Datei vom Aufbau her beschrieben.

Die ist dazu da, damit unter XP und Vista auch Xbase++-Programme eine XP- bzw. Vista-Optik haben. Fehlt die Datei, dann haben Xbase++-Programme "nur" eine Win2000-Optik.

Es gibt 2 Wege, die manifest einzubauen. Die einfachste ist, die Datei einfach in das Verzeichnis mit der exe zu legen. Die andere ist, das über die arc fest in das Programm einzubinden. Dann gibt es für den Kunden weniger Dateien, die kann nicht versehentlich gelöscht werden. Das ist die Standard-Vorgehensweise der meisten Programme, da ist ja eigenlich nie eine manifest bei.

Aber: Ein Grund für die externe manifest ist, daß das mit eingebundener natürlich unfelxibler ist. Will der Kunde partout die Win2000-Optik haben, dann schmeißt der einfach die manifest raus, wenn er die extern hat. Ich selber kann das aber nicht nachvollziehen. Will ich Win2000-Optik, dann stelle ich mir das Systemweit in der Systemsteuerung um. Und fertig ist die Sache für alle Programme und Windows selber.

Jan
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 »

Hi,

also ich muß mich jetzt auch mal einklinken. Ich habe mir einmal den Unterschied angesehen, zwischen Win 2000 und XP Look, in dem ich einfach den XP Look unter Windows aktiviert habe. Ich habe keine Manifest aktiviert und trotzdem ist das Erscheinungsbild unter dem XP Design anders als unter dem Win 2000 Design.

Was verstehe ich hier eigentlich immer verkehrt?
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
Bertram Hansen
Foren-Moderator
Foren-Moderator
Beiträge: 1015
Registriert: Di, 27. Sep 2005 8:55
Wohnort: 51379 Leverkusen
Hat sich bedankt: 28 Mal
Danksagung erhalten: 20 Mal
Kontaktdaten:

Beitrag von Bertram Hansen »

Hallo,

übrigens hat Roger auf seiner Homepage einen kleinen Filmbeitrag über die Benutzung der Manifestdatei.
:wave:
Gruß Bertram
http://www.tobax.de
Mitglied der XUG Cologne
Mitglied der XUG Osnabrück
Beisitzer des Deutschsprachige Xbase-Entwickler e.V.

Solange Kakaobohnen an Bäumen wachsen ist Schokolade Obst!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Manfred,

das beschränkt sich aber glaube ich nur auf Rahmen und titelleiste der Dialoge. Alles andere nicht.

In der 339 werden die Styles jetzt übrigens wesentlich besser unterstützt. Z. B. der gelbe Balken über den aktiven Tab-Reiter. Das geht unter der 331 noch nicht, trotz manifest. Da hat Till in den vergangenen Monaten wohl so einigen Gehirnschmalz reininvstiert 8) .

Jan
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,
Manifest und Ownerdraw
Das eine hat mit dem anderen nichts zu tun.

Mit Manifest meinst du sicherlich die "visual Styles" wozu man uxtheme.dll
benötigt (was es unter W98 / W2K nicht gibt)

Wenn man bei XP die "Theme" aktiviert werden alle Resourcen
"Anfragen" von der ComCtl32.dll (v6.x) "umgeleitet" auf :

C:\WINDOWS\Resources\Themes\Luna\luna.msstyles

dort gibt es dann 3 SubDirectorys (wenn man nicht zusätzliche installiert
hat ) "NormalColor" (Blau) , "Homestead" (gruen) and "Metallic" (Silber)
die jeweils eine "shellstyle.dll" haben. Sieht man mit einem Tool wie
"Bitmap-Extractor" in die Dateien so kann man die Icons, Bitmaps und
ihre Resource ID sehen.

Dies ist dann auch der Ansatz wenn man ein eigenes XP "Theme"
erstellen will, den man muss die M$ Resource ID verwenden wenn
das "re-map" erfolgreich sein soll. Übrigens braucht man dazu eine
ge"patch"te "uxtheme.dll" weil die sonst wegen fehlender "M$ Signatur"
nicht funktioniert ...

In der Registry findet man übrigens unter :

Code: Alles auswählen

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ThemeManager    
unter "ColorName" die entsprechend aktuelle "Theme" Einstelllung
(NormalColor,HomeStead,Metallic)

...
Mit Ownerdraw brauchst du also überhaupt nichts zu machen.

...
in der 339 gibt es nun :styleClass und :stylePart neu. Damit müsste man
einzelne XbParts bzw Teile davon selbst "behandeln" können was meistens
bei eine eigenen Class und Ownerdraw interessant wird.
Mal sehen ob man auch eine "gepatchte uxtheme.dll" braucht um eigene
"Theme" einzubinden.

...
Als Ownerdraw Beispiel gibt es ja das Ownerdraw Menu. Dies ist ein
schönes Beispiel wie man ein "gewöhliches" XbpMenu "aufbohren" kann.

Ownerdraw ist also nur bei speziellen eigenen Lösungen notwendig wie
z.b. bei meine "Outlook-Leiste" wo ich jetzt eine Ownerdraw Listbox
benutze. (per die testen will möge mir eine Msg schreiben)
gruss by OHR
Jimmy
kallecux
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 104
Registriert: Mi, 01. Feb 2006 23:19

Beitrag von kallecux »

Auf meine eigene Frage, ob mal alle Pixel/Linie z.B. beim Erstellen eines Ownerdraw-Buttons selber malen muss habe ich - nach Untersuchung der Neuerungen in der 339 folgende Gra...Funktionen gefunden, die das Leben einfacher machen.

- GraEdge(oPS)
- GraBackground(oPS)
- GraGradient(oPS,,{{10,10}},,)
- GraCaptionStr(oPS,5,5},,"Hallo",XBPALIGN_HCENTER+XBPALIGN_VCENTER)

Schönes Wochenende!
Beste Grüße

Karl Heinz
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,
kallecux hat geschrieben: Neuerungen in der 339 folgende Gra...Funktionen gefunden, die das Leben einfacher machen.

- GraEdge(oPS)
- GraBackground(oPS)
bei den beiden Functionen kannst du nicht mit dem "normalen" Presspace
arbeiten sondern der bezieht sich auf den MicroPS eines XbPart Object.

damit sind die beiden Functionen praktisch nur bei ownerdraw zu
gebrauchen. Bei GraEdge gibt es auch 6 statt wie angegeben 5 Parameter
sodas ich nicht weiss ob es daran liegt das ich es bislang nicht geschafft
habe ein Demo zu machen um mir das mal anzuschauen.

witzigerweise habe ich gerade meine "Ecken" Functionen für die 8 Ecken
(je 45 Grad) fertig und benötige daher GraEdge eingendlich gar nicht mehr
gruss by OHR
Jimmy
kallecux
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 104
Registriert: Mi, 01. Feb 2006 23:19

Beitrag von kallecux »

Hallo Jimmy,

ich bin mir nicht sicher, ob ich Dich richtig verstanden haben, aber hier mein "GraEdge"-Code:

CLASS khPushbutton FROM XbpPushbutton
EXPORTED:
VAR type, dbArea READONLY
METHOD init, draw// , create// , // , configure, destroy, activate
ENDCLASS

METHOD khPushbutton:draw(oPS, aInfo)
// <aInfo> := {nItem, nAction, nState, aRect}
// nItem Nicht mit Pushbuttons verwendet, sollte ignoriert werden
// nAction Aktion, die die Nachricht xbeP_Draw auslöste
// nState Aktueller Anzeige-Status des Pushbuttons-Objekts
// aRect Ausgaberechteck für die Zeichenoperation
aRect := aInfo[4]
GraEdge(oPS)
GraBackground(oPS)
GraCaptionStr(oPS,{5,5},,"Hallo",XBPALIGN_HCENTER+XBPALIGN_VCENTER)

RETURN self
Beste Grüße

Karl Heinz
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,
kallecux hat geschrieben: ich bin mir nicht sicher, ob ich Dich richtig verstanden haben, aber hier mein "GraEdge"-Code:

METHOD khPushbutton:draw(oPS, aInfo)
JA, du setzt ja schon ownerdraw ein zumindest sehe ich die Methode :draw
Das oPS hier ist vom XbpPushbutton Object und ein MicroPS also alles
richtig.

Ich dachte du wollte die zum "malen" auf SetAppWindow:Pressspace()
benutzen was ja mit allen anderen GRA* Functionen geht.
gruss by OHR
Jimmy
Antworten