Ermittlung der Titlebar [ERLEDIGT]

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
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]

Beitrag von Manfred »

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?
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!!
Benutzeravatar
AUGE_OHR
Marvin
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

Beitrag von AUGE_OHR »

hi,
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?
hast du die "Border" dazugezählt ?

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)
was eigendlich auch gehen müsste wenn du "nur" die Höhe haben willst

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)
wobei "o" das XbpDialog "Fenster" ist.
gruss by OHR
Jimmy
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21248
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 211 Mal
Danksagung erhalten: 71 Mal

Beitrag von Manfred »

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.

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!!
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12913
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Beitrag von AUGE_OHR »

hi,
Manfred 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.
ich habe doch mal einen Thread mit "Border" gemacht der ja je nach
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
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21248
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 211 Mal
Danksagung erhalten: 71 Mal

Beitrag von Manfred »

Ach,

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!!
Benutzeravatar
Manfred
Foren-Administrator
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]

Beitrag von Manfred »

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.
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!!
Antworten