Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Pages: 1
Bonjour,
j'ai un soucis pour retrouver la réelle hauteur de la bande Header d'une datawindow dont le contexte est le suivant:
- mode grid
- j'ai des statictexts sur chaque colonne avec un .height.autosize=yes et dont le .text est modifié dynamiquement
- le header.height.autosize=yes
- pb11.5.1 build 4843
le but étant de coller un controle (powerfilter button) en bas de la bande header; et là il se ballade au milieu et ça fait pas terminé...
j'ai tenté :
- si j'interroge "datawindow.height", j'ai la valeur d'origine
- si j'interroge "col1_t.height" sur mes statictexts, j'ai la valeur d'origine qui ne reflet pas la réalité
une idée ?
Dernière modification par xlat (13-10-2011 08:05:36)
Hors ligne
ça ?
dw_1.Describe("datawindow.header.Height")
Hors ligne
enfait j'ai tappé trop vite le
xlat a écrit:
- si j'interroge "datawindow.height", j'ai la valeur d'origine
j'ai bien testé ta proposition mais cela ne fait que retourné la valeur "d'origine"
Hors ligne
et si tu mets height à zéro au départ ?
Hors ligne
ou bien récupérer la hauteur max des statictexts ?
Hors ligne
je reçoit 0 avec
dw_1.Describe("datawindow.header.Height")
Hors ligne
erasorz a écrit:
ou bien récupérer la hauteur max des statictexts ?
"tout le monde ment (c) Dr.House",
même topo avec les statictext, ils sont eux même en height.autosize=yes et les
describe("statictext.height")
retourne la valeur du design qui ne correspond plus à ce que j'ai à l'écran (texte modifié dynamiquement).
Hors ligne
et en mettant un compute avec comme expression RowHeight() ?
Hors ligne
déjà essayé, même avec un
describe('evaluate("rowheight()",0)')
j'obtiens dans ce cas la hauteur de la première ligne de détail.
Dernière modification par xlat (13-10-2011 08:51:10)
Hors ligne
et si tu mets ton bouton plus bas que ce qu'il faut + slide up = "all above" ?
Hors ligne
je n'ai pas l'effet escompté en plus des bidouilles que cela impose :
les controles sont créer sur le layer foreground, donc le slideup ne fonctionne pas comme attendu.
maintenant si je change le controle de band avec
setposition( "b_powerfilter1", "header", false /* ou true */ )
le boutton remonte de 4 à 10 pixels avec le slideup=allabove et y=1500, mais cela ne correspond pas à ce que l'on pourrait attendre, en plus mon header grandis encore à causse du y du boutton.
Dernière modification par xlat (13-10-2011 09:41:27)
Hors ligne
bon il te reste l'option de mettre le bouton au-dessus des statictexts... ou à l'extérieur de la DW
Hors ligne
je capitule et je vais aligner les boutons sur les statictext.y et réduire le width des statics pour eviter un chevauchement avec les boutons...
je met [RESOLU] ou on laisse au cas où une âme généreuse y grefferait un jour une solution ?
Hors ligne
Juste pour rire, tu l'as mis où ton code ? Pas dans le constructor de la DW des fois ?
Hors ligne
Chrnico a écrit:
Juste pour rire, tu l'as mis où ton code ? Pas dans le constructor de la DW des fois ?
ha... si seulement... un post pouvait me sauver!
mais non ce n'est pas le cas.
Hors ligne
xlat a écrit:
Chrnico a écrit:
Juste pour rire, tu l'as mis où ton code ? Pas dans le constructor de la DW des fois ?
ha... si seulement... un post pouvait me sauver!
mais non ce n'est pas le cas.
Dommage, le remède aurait été rapide
Reste à :
- tenter un setredraw(true) avant de récupérer la hauteur du header (c'est peu probable mais c'est ballot un setredraw(false) qui met le bazard)
- vérifier les unités de la DW (Powerunit / Pixel) et faire une conversion éventuelle dans tes formules si besoin est.
- essayer de mettre un controle Line dans ton header avec y1 = 0 et y2 = rowheight(), puis récupérer le y2 une fois le autoheight du header effectué.
- allumer un cierge ou attendre un EBF (c'est un peu pareil)
Hors ligne
Bonjour,
Hélas, je n'ai pas de solution. Mais je me suis déjà heurté à ce problème. J'ai pas mal trituré le problème dans tous les sens sans résultat.
Je suis également preneur d'une solution.
Hors ligne
Désolé du déterrage, mais on ne sait jamais ça pourrait inspirer certains
Dans la série workaround de la mort qui tue, autrement dit, quand on est développeur PB on n'a pas d'IDE mais des idées
Ce code - vraiment simpliste mais améliorable à souhait - recherche verticalement le premier pixel de couleur rouge dans la DW :
// Fonctions externes à déclarer Function Ulong GetDC( Ulong hwnd ) Library "user32.dll" Function Ulong GetPixel( Ulong hwnd, Long xpos, Long ypos ) Library "gdi32.dll" // Recherche verticale du premier point d'une couleur donnée dans la DW Long ll_rgb, ll_rgb_target, ll_x, ll_y, ll_y_max, ll_ypb_max, ll_y_target = -1, ll_ypb_target Ulong ll_handle, ll_device String ls_msg ll_x = 1 ll_ypb_max = dw_grid.Height // ici il faudrait prendre la "vraie" hauteur de la DW non celle du control ll_y_max = UnitsToPixels( ll_ypb_max, YUnitsToPixels! ) ll_rgb_target = RGB( 255, 0, 0 ) ll_handle = Handle( dw_grid ) ll_device = GetDC( ll_handle ) For ll_y = 1 To ll_y_max ll_rgb = GetPixel( ll_device, ll_x, ll_y ) If ll_rgb = ll_rgb_target Then ll_y_target = ll_y Exit End If Next If ll_y_target <> -1 Then ll_ypb_target = PixelsToUnits( ll_y_target, YPixelsToUnits! ) ls_msg = "RGB recherché=" + String( ll_rgb_target ) + "~n" & + "yPixel=" + String( ll_y_target ) + "~n" & + "yPB=" + String( ll_ypb_target ) MessageBox( "Pixel trouvé", ls_msg ) End If
Le résultat :
Enjoy
Hors ligne
erasorz a écrit:
Dans la série workaround de la mort qui tue, autrement dit, quand on est développeur PB on n'a pas d'IDE mais des idées
Ce code - vraiment simpliste mais améliorable à souhait - recherche verticalement le premier pixel de couleur rouge dans la DW [...]
Wouahou, le genre de solution tordue mais inattendue comme j'aime !
Hors ligne
Pages: 1