Grid column width
Moderator: Rathinagiri
- karweru
- Posts: 220
- Joined: Fri Aug 01, 2008 1:51 pm
- DBs Used: DBF,mysql,mariadb,postgresql,sqlite,odbc
- Contact:
Grid column width
Hi friends,
If you resize the column width of a grid using the mouse at runtime, is there a way of trapping this resizing event and calculating the new column width?
Kindly assist.
If you resize the column width of a grid using the mouse at runtime, is there a way of trapping this resizing event and calculating the new column width?
Kindly assist.
Kind regards,
Gilbert.
Gilbert.
- Pablo César
- Posts: 4059
- Joined: Wed Sep 08, 2010 1:18 pm
- Location: Curitiba - Brasil
Grid column width
This would be marvel to get this information during the resize of width columns.
Last edited by Pablo César on Mon Nov 14, 2016 9:24 am, edited 1 time in total.
HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
- Rathinagiri
- Posts: 5482
- Joined: Tue Jul 29, 2008 6:30 pm
- DBs Used: MariaDB, SQLite, SQLCipher and MySQL
- Location: Sivakasi, India
- Contact:
Re: Grid column width
It is doable. I have first done that in GridPlus utility. I have removed it in the finished library. I will share the code though.
East or West HMG is the Best.
South or North HMG is worth.
...the possibilities are endless.
South or North HMG is worth.
...the possibilities are endless.
Re: Grid column width
Pablo, here is the marvel:Pablo César wrote:This would be marvel to get this information during resing of width columns.
Code: Select all
//Try to change column width by dragging a divider in the header
#include "hmg.ch"
FUNCTION Main()
DEFINE WINDOW Main_WA;
MAIN;
WIDTH 450;
HEIGHT 235;
TITLE 'Grid Columns Width - see in StatusBar'
DEFINE GRID Users_GR
ROW 10
COL 10
WIDTH 420
HEIGHT 120
WIDTHS {130, 140, 70}
ITEMS {{'John', 'Brown', '37'}, {'Peter', 'Green', '29'}, {'Eric', 'Pink', '45'}}
JUSTIFY {GRID_JTFY_LEFT, GRID_JTFY_LEFT, GRID_JTFY_RIGHT}
CELLNAVIGATION .F.
END GRID
DEFINE BUTTON SetText_BU
ROW 140
COL 160
WIDTH 130
HEIGHT 25
CAPTION 'Change header text'
ACTION SetHeaderText()
END BUTTON
DEFINE STATUSBAR
STATUSITEM ''
STATUSITEM '' WIDTH 140
STATUSITEM '' WIDTH 170
END STATUSBAR
END WINDOW
SetHeaderText()
UpdateStatus()
Main_WA.Users_GR.VALUE := 1
Main_WA.CENTER
InstallEventHandler('EventHandler')
Main_WA.ACTIVATE
RETURN NIL
FUNCTION UpdateStatus()
Main_WA.STATUSBAR.Item(1) := LTrim(Str(Main_WA.Users_GR.ColumnWIDTH(1))) + ' (range 50 - 150)'
Main_WA.STATUSBAR.Item(2) := LTrim(Str(Main_WA.Users_GR.ColumnWIDTH(2))) + ' (range 90 - 200)'
Main_WA.STATUSBAR.Item(3) := LTrim(Str(Main_WA.Users_GR.ColumnWIDTH(3))) + ' (range 30 - 90)'
RETURN NIL
FUNCTION EventHandler(nHWnd, nMsg, nWParam, nLParam)
LOCAL nNotiCode
LOCAL nCX
LOCAL nItem
IF nMsg == 78 //WM_NOTIFY
IF GetHWNDFrom(nLParam) == ListView_GetHeader(Main_WA.Users_GR.HANDLE)
nNotiCode := GetNotifyCode(nLParam)
// https://thomasfreudenberg.com/archive/2004/03/14/hdn-track-and-hds-fulldrag
// No HDN_TRACK is sent if HDS_FULLDRAG style is set
// So we will check HDN_ITEMCHANGING and HDN_ITEMCHANGED
//IF nNotiCode == -328 //HDN_TRACKW
IF nNotiCode == -320 //HDN_ITEMCHANGINGW
nCX := GetHeaderItemCX(nLParam)
IF nCX >= 0
nItem := GetHeaderItem(nLParam) + 1
IF nItem == 1
IF nCX < 50
Main_WA.Users_GR.ColumnWIDTH(nItem) := 50
RETURN 1
ELSEIF nCX > 150
Main_WA.Users_GR.ColumnWIDTH(nItem) := 150
RETURN 1
ENDIF
ELSEIF nItem == 2
IF nCX < 90
Main_WA.Users_GR.ColumnWIDTH(nItem) := 90
RETURN 1
ELSEIF nCX > 200
Main_WA.Users_GR.ColumnWIDTH(nItem) := 200
RETURN 1
ENDIF
ELSEIF nItem == 3
IF nCX < 30
Main_WA.Users_GR.ColumnWIDTH(nItem) := 30
RETURN 1
ELSEIF nCX > 90
Main_WA.Users_GR.ColumnWIDTH(nItem) := 90
RETURN 1
ENDIF
ENDIF
ENDIF
ELSEIF nNotiCode == -321 //HDN_ITEMCHANGEDW
UpdateStatus()
ENDIF
ENDIF
ELSEIF nMsg == 273 //WM_COMMAND
IF LoWord(nWParam) == 2 /*IDCANCEL*/
Main_WA.RELEASE
ENDIF
ENDIF
RETURN NIL
FUNCTION SetHeaderText()
STATIC nType := 0
IF nType == 0
Main_WA.Users_GR.Header(1) := 'First name'
Main_WA.Users_GR.Header(2) := 'Last name'
Main_WA.Users_GR.Header(3) := 'Age'
nType := 1
ELSE
Main_WA.Users_GR.Header(1) := 'Column 1'
Main_WA.Users_GR.Header(2) := 'Column 2'
Main_WA.Users_GR.Header(3) := 'Column 3'
nType := 0
ENDIF
RETURN NIL
#pragma BEGINDUMP
#include "SET_COMPILE_HMG_UNICODE.ch"
#include "HMG_UNICODE.h"
#include <windows.h>
#include <commctrl.h>
#include "hbapi.h"
//GetHeaderItem(nLParam)
HB_FUNC ( GETHEADERITEM )
{
LPNMHEADER lpnmheader = (LPNMHEADER) HMG_parnl(1);
hb_retni(lpnmheader->iItem);
}
//GetHeaderItemCX(nLParam)
HB_FUNC ( GETHEADERITEMCX )
{
LPNMHEADER lpnmheader = (LPNMHEADER) HMG_parnl(1);
if (lpnmheader->pitem->mask == HDI_WIDTH)
hb_retni(lpnmheader->pitem->cxy);
else
hb_retni(-1);
}
#pragma ENDDUMP
- Pablo César
- Posts: 4059
- Joined: Wed Sep 08, 2010 1:18 pm
- Location: Curitiba - Brasil
Grid column width
Thank you man ! Very cool !


HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
- srvet_claudio
- Posts: 2224
- Joined: Thu Feb 25, 2010 8:43 pm
- Location: Uruguay
- Contact:
Re: Grid column width
I have not test the code but it looks good, very good!KDJ wrote:Pablo, here is the marvel:Pablo César wrote:This would be marvel to get this information during resing of width columns.
Code: Select all
//Try to change column width by dragging a divider in the header #include "hmg.ch" FUNCTION Main() DEFINE WINDOW Main_WA; MAIN; WIDTH 450; HEIGHT 235; TITLE 'Grid Columns Width - see in StatusBar' DEFINE GRID Users_GR ROW 10 COL 10 WIDTH 420 HEIGHT 120 WIDTHS {130, 140, 70} ITEMS {{'John', 'Brown', '37'}, {'Peter', 'Green', '29'}, {'Eric', 'Pink', '45'}} JUSTIFY {GRID_JTFY_LEFT, GRID_JTFY_LEFT, GRID_JTFY_RIGHT} CELLNAVIGATION .F. END GRID DEFINE BUTTON SetText_BU ROW 140 COL 160 WIDTH 130 HEIGHT 25 CAPTION 'Change header text' ACTION SetHeaderText() END BUTTON DEFINE STATUSBAR STATUSITEM '' STATUSITEM '' WIDTH 140 STATUSITEM '' WIDTH 170 END STATUSBAR END WINDOW SetHeaderText() UpdateStatus() Main_WA.Users_GR.VALUE := 1 Main_WA.CENTER InstallEventHandler('EventHandler') Main_WA.ACTIVATE RETURN NIL FUNCTION UpdateStatus() Main_WA.STATUSBAR.Item(1) := LTrim(Str(Main_WA.Users_GR.ColumnWIDTH(1))) + ' (range 50 - 150)' Main_WA.STATUSBAR.Item(2) := LTrim(Str(Main_WA.Users_GR.ColumnWIDTH(2))) + ' (range 90 - 200)' Main_WA.STATUSBAR.Item(3) := LTrim(Str(Main_WA.Users_GR.ColumnWIDTH(3))) + ' (range 30 - 90)' RETURN NIL FUNCTION EventHandler(nHWnd, nMsg, nWParam, nLParam) LOCAL nNotiCode LOCAL nCX LOCAL nItem IF nMsg == 78 //WM_NOTIFY IF GetHWNDFrom(nLParam) == ListView_GetHeader(Main_WA.Users_GR.HANDLE) nNotiCode := GetNotifyCode(nLParam) // https://thomasfreudenberg.com/archive/2004/03/14/hdn-track-and-hds-fulldrag // No HDN_TRACK is sent if HDS_FULLDRAG style is set // So we will check HDN_ITEMCHANGING and HDN_ITEMCHANGED //IF nNotiCode == -328 //HDN_TRACKW IF nNotiCode == -320 //HDN_ITEMCHANGINGW nCX := GetHeaderItemCX(nLParam) IF nCX >= 0 nItem := GetHeaderItem(nLParam) + 1 IF nItem == 1 IF nCX < 50 Main_WA.Users_GR.ColumnWIDTH(nItem) := 50 RETURN 1 ELSEIF nCX > 150 Main_WA.Users_GR.ColumnWIDTH(nItem) := 150 RETURN 1 ENDIF ELSEIF nItem == 2 IF nCX < 90 Main_WA.Users_GR.ColumnWIDTH(nItem) := 90 RETURN 1 ELSEIF nCX > 200 Main_WA.Users_GR.ColumnWIDTH(nItem) := 200 RETURN 1 ENDIF ELSEIF nItem == 3 IF nCX < 30 Main_WA.Users_GR.ColumnWIDTH(nItem) := 30 RETURN 1 ELSEIF nCX > 90 Main_WA.Users_GR.ColumnWIDTH(nItem) := 90 RETURN 1 ENDIF ENDIF ENDIF ELSEIF nNotiCode == -321 //HDN_ITEMCHANGEDW UpdateStatus() ENDIF ENDIF ELSEIF nMsg == 273 //WM_COMMAND IF LoWord(nWParam) == 2 /*IDCANCEL*/ Main_WA.RELEASE ENDIF ENDIF RETURN NIL FUNCTION SetHeaderText() STATIC nType := 0 IF nType == 0 Main_WA.Users_GR.Header(1) := 'First name' Main_WA.Users_GR.Header(2) := 'Last name' Main_WA.Users_GR.Header(3) := 'Age' nType := 1 ELSE Main_WA.Users_GR.Header(1) := 'Column 1' Main_WA.Users_GR.Header(2) := 'Column 2' Main_WA.Users_GR.Header(3) := 'Column 3' nType := 0 ENDIF RETURN NIL #pragma BEGINDUMP #include "SET_COMPILE_HMG_UNICODE.ch" #include "HMG_UNICODE.h" #include <windows.h> #include <commctrl.h> #include "hbapi.h" //GetHeaderItem(nLParam) HB_FUNC ( GETHEADERITEM ) { LPNMHEADER lpnmheader = (LPNMHEADER) HMG_parnl(1); hb_retni(lpnmheader->iItem); } //GetHeaderItemCX(nLParam) HB_FUNC ( GETHEADERITEMCX ) { LPNMHEADER lpnmheader = (LPNMHEADER) HMG_parnl(1); if (lpnmheader->pitem->mask == HDI_WIDTH) hb_retni(lpnmheader->pitem->cxy); else hb_retni(-1); } #pragma ENDDUMP
- danielmaximiliano
- Posts: 2716
- Joined: Fri Apr 09, 2010 4:53 pm
- Location: Argentina
- Contact:
Re: Grid column width
Claudio : solo falto redimensionar la ventana ya que al agrandar las columnas a su maximo tamaño se crea el Slicer y se pierde contacto visual con la colunma edad .... (se puede corregir?)
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*
Saludos / Regards
DaNiElMaXiMiLiAnO
Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*
Saludos / Regards
DaNiElMaXiMiLiAnO
Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
- srvet_claudio
- Posts: 2224
- Joined: Thu Feb 25, 2010 8:43 pm
- Location: Uruguay
- Contact:
Re: Grid column width
Daniel, ni bien tenga tiempo voy a chequear el código.danielmaximiliano wrote:Claudio : solo falto redimensionar la ventana ya que al agrandar las columnas a su maximo tamaño se crea el Slicer y se pierde contacto visual con la colunma edad .... (se puede corregir?)