Ermittlung der Titlebar [ERLEDIGT]
Moderator: Moderatoren
- Manfred
- Foren-Administrator
- Beiträge: 21248
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 211 Mal
- Danksagung erhalten: 71 Mal
Ermittlung der Titlebar [ERLEDIGT]
Moin,
Jimmy hat in diesem Thread
http://www.xbaseforum.de/viewtopic.php? ... light=luna
einen Tipp gegeben, wie man die unterschiedlichen Höhen der Titlebar bei verschiedenen Themes usw. ermitteln kann. Das habe ich auch ausprobiert, leider muß ich aber immer 15 hinzuzählen, weil es sonst nicht paßt.
Hat jemand eine Erklärung, was wohl der Grund sein könnte?
Jimmy hat in diesem Thread
http://www.xbaseforum.de/viewtopic.php? ... light=luna
einen Tipp gegeben, wie man die unterschiedlichen Höhen der Titlebar bei verschiedenen Themes usw. ermitteln kann. Das habe ich auch ausprobiert, leider muß ich aber immer 15 hinzuzählen, weil es sonst nicht paßt.
Hat jemand eine Erklärung, was wohl der Grund sein könnte?
Zuletzt geändert von Manfred am Mo, 24. Nov 2008 16:22, insgesamt 2-mal geändert.
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: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Ermittlung der Titlebar
hi,
was eigendlich auch gehen müsste wenn du "nur" die Höhe haben willst
wobei "o" das XbpDialog "Fenster" ist.
hast du die "Border" dazugezählt ?Manfred hat geschrieben: http://www.xbaseforum.de/viewtopic.php? ... light=luna
einen Tipp gegeben, wie man die unterschiedlichen Höhen der Titlebar bei verschiedenen Themes usw. ermitteln kann. Das habe ich auch ausprobiert, leider muß ich aber immer 15 hinzuzählen, weil es sonst nicht paßt.
Hat jemand eine Erklärung, was wohl der Grund sein könnte?
Code: Alles auswählen
#define SM_CYCAPTION 4
#define BORDER_SIZE 6 // how to get borderSize by API ?
METHOD XbpDialogEx:create(oParent,oOwner,aPos,aSize,aPP,lVisible)
::XbpDialog:create(oParent,oOwner,aPos,aSize,aPP,lVisible)
::nYTitlebarheight := GetSystemMetrics(SM_CYCAPTION) - 3
DO CASE
CASE (::XbpDialog:minButton .AND. ::XbpDialog:maxButton)
::nXOffset := (::nYTitlebarheight * 4)+(BORDER_SIZE+1)
CASE (::XbpDialog:maxButton .AND. .NOT. ::XbpDialog:minButton)
::nXOffset := (::nYTitlebarheight * 3)+(BORDER_SIZE+1)
CASE (::XbpDialog:minButton .AND. .NOT. ::XbpDialog:maxButton)
::nXOffset := (::nYTitlebarheight * 4)+(BORDER_SIZE+1)
CASE (.NOT. ::XbpDialog:minButton .AND. .NOT. ::XbpDialog:maxButton)
::nXOffset := (::nYTitlebarheight * 1)+(BORDER_SIZE+1)
ENDCASE
RETURN (self)
Code: Alles auswählen
FUNCTION GetTitleBarHeight(o)
LOCAL oRet
IF IsThemeActive(.T.)
oRet := (o:currentSize() [2] - o:drawingArea:currentSize() [2] - ;
(2 * BORDER_SIZE) - 1 - 2)
ELSE
oRet := (o:currentSize() [2] - o:drawingArea:currentSize() [2] - ;
(2 * BORDER_SIZE) - 1)
ENDIF
RETURN (oRet)
gruss by OHR
Jimmy
Jimmy
- Manfred
- Foren-Administrator
- Beiträge: 21248
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 211 Mal
- Danksagung erhalten: 71 Mal
Hi Jimmy,
ich verstehe nichts von dem, was Du geschrieben hast. Ich weiß nicht warum Du 1 oder 2 usw. abziehst, oder warum Du multiplizierst.
ich verstehe nichts von dem, was Du geschrieben hast. Ich weiß nicht warum Du 1 oder 2 usw. abziehst, oder warum Du multiplizierst.
Code: Alles auswählen
********************************************************************************
METHOD DBbrowse:init(oParent,oOwner, aPos, aSize, aPresParam, lVisible)
LOCAL nChildListMenge := Len(oParent:childlist())
MEMVAR oSysPara
::nVonLinks := 12
::nVonOben := oSysPara:nTitleBarHoehe + 12 // 12 muß noch dabei, weil es sonst nicht paßt. WArum???
DEFAULT aPos TO {0,0}
DEFAULT aSize TO {oParent:currentsize()[1]- ::nVonLinks,oParent:currentsize()[2]- ::nVonOben}
DEFAULT aPresParam TO {;
{ XBP_PP_BGCLR, GRA_CLR_PALEGRAY };
}
IF oParent:childlist()[nChildListMenge]:classname() == "rahmen" // es gibt einen Rahmen, mit einem SLE am unteren Rand zum Suchen .
aPos[2] := oParent:childlist()[nChildListMenge]:currentsize()[2] // oberen Rand des Rahmens ermitteln .
aSize[2] -= aPos[2] // die Ausgabefläche wird um die Rahmenhöhe verkleinert .
ENDIF
::XbpBrowse:init(oParent, oOwner, aPos, aSize, aPresParam, lVisible)
::adjustHeight := .T. // damit die letzte Zeile auch sichtbar wird .
::cTagName := "" // wird benötigt für die Umschaltung bei Mausklick .
::cursorMode := XBPBRW_CURSOR_ROW // Cursort geht über die ganze Zeile .
::nSpalteSortiert := 0 // hier kommt beime Indexwechsel die neue Spaltennumer rein, die sortiert ist .
::firstPosBlock := { || 1 } .
::goBottomBlock := { || DbGoBottom() } .
::goPosBlock := { |nProzent| DbGoPosition(nProzent) }
::goTopBlock := { || DbGoTop() .
::lastPosBlock := { || 100 }
::phyPosBlock := { || RecNo() } .
::posBlock := { || DbPosition() } .
::skipBlock := { |nSkip| DbSkipper(nSkip) }
::softTrack := .F.
RETURN self
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: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
Type verschieden ist und damit sich die :drawinArea "verändert"
Ich gehe mal von "BorderSize" = 1 aus.
Ein Border besteht aus 3 Pixeln : "der" Line, Schatten und Lichtseite.
Die Titlebar hat oben/unter einen "Border" und die :drawingArea auch
also 4x3 = 12.
ich habe doch mal einen Thread mit "Border" gemacht der ja je nachManfred hat geschrieben: ich verstehe nichts von dem, was Du geschrieben hast. Ich weiß nicht warum Du 1 oder 2 usw. abziehst, oder warum Du multiplizierst.
Type verschieden ist und damit sich die :drawinArea "verändert"
Ich gehe mal von "BorderSize" = 1 aus.
Ein Border besteht aus 3 Pixeln : "der" Line, Schatten und Lichtseite.
Die Titlebar hat oben/unter einen "Border" und die :drawingArea auch
also 4x3 = 12.
gruss by OHR
Jimmy
Jimmy
- Manfred
- Foren-Administrator
- Beiträge: 21248
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 211 Mal
- Danksagung erhalten: 71 Mal
Ach,
deshalb dann auch die 12. Jetzt leuchtet es langsam ein.
deshalb dann auch die 12. Jetzt leuchtet es langsam ein.
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!!
- Manfred
- Foren-Administrator
- Beiträge: 21248
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 211 Mal
- Danksagung erhalten: 71 Mal
Re: Ermittlung der Titlebar [ERLEDIGT]
Hi,
ich denke das Problem sollte mit :calcClientRect() zu lösen sein. Mit dieser Methode bekommt man doch die Innenmasse des Dialoges und auch gleichzeitig, wo der oben endet, oder anfängt je nachdem wie man es interpretiert. Das bringt bei 2000er oder XP Oberfläche unterschiedliche Ergebnisse und scheint genau zu passen.
ich denke das Problem sollte mit :calcClientRect() zu lösen sein. Mit dieser Methode bekommt man doch die Innenmasse des Dialoges und auch gleichzeitig, wo der oben endet, oder anfängt je nachdem wie man es interpretiert. Das bringt bei 2000er oder XP Oberfläche unterschiedliche Ergebnisse und scheint genau zu passen.
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!!