Page 2 of 3
Posted: Sat Sep 13, 2008 2:29 pm
by MyTrial
Thats working well on my code. But only a imagegadget could not be placed on that disabled imagegadget background - it is not visible. Any ideas?
Sigi
Posted: Sun Sep 14, 2008 1:48 pm
by Sparkie
Code: Select all
RedrawWindow_(GadgetID(#YourImageGadget), 0, 0, #RDW_INVALIDATE)
Posted: Wed Sep 17, 2008 2:40 pm
by MyTrial
Hi Sparkie
thanks that works on windows - not on linux. First my software goes out to windows and in a few months on linux. Maybe there is a chance to get it work on linux?
The ugly thing is: Without your grandios help the image (on the image) does not come up on start up but if i set a window from an other program over it and get it back to the foreground then it is displayed.
Thanks
Sigi
Posted: Wed Sep 17, 2008 11:58 pm
by Sparkie
Will this work....
Code: Select all
ResizeGadget(#YourImageGadget, #PB_Ignore, #PB_Ignore, 0, 0)
ResizeGadget(#YourImageGadget, #PB_Ignore, #PB_Ignore, ImageWidth(#YourImage), ImageHeight(#YourImage))
Posted: Thu Sep 18, 2008 7:11 am
by MyTrial
Hi Sparkie
Thanks - that works.
But is a silly and non performant action :)
I tested only with setgadgetstate() but that didn't work. Your trick works only if both resizegadgets are used.
Thanks
Sigi
Posted: Fri Sep 19, 2008 10:13 pm
by MyTrial
Hi Sparkie
i have that problem with an other gadget too. It is a ListViewGadget() which i use for printing logging data on the screen. When i add items all goes fine until the scroll buttons should come up, then the border and the scroll buttons are hidden and sometimes the whole gadget goes hidden. If i set an other program window over the program then the gadget is visible until the next item is added.
With following code (like your help) after EVERY AddItem() it is shown all the times. Is that a bug or did i something wrong?
Code: Select all
Width = GadgetWidth(#GUI_Logging)
Height = GadgetHeight(#GUI_Logging)
ResizeGadget(#GUI_Logging,#PB_Ignore,#PB_Ignore,0,0)
ResizeGadget(#GUI_Logging,#PB_Ignore,#PB_Ignore,Width,Height)
Sigi
Posted: Fri Sep 19, 2008 11:31 pm
by Sparkie
Gadgets on top of Gadgets is not the best approach here. I know you're looking for cross platform solutions but I think you're asking a bit much of PureBasic. I highly doubt the troubles you are having are being caused by a PB bug.
I'd need to see some code to see what is happening on your side.
Posted: Sat Sep 20, 2008 8:49 am
by MyTrial
Maybe i am working the wrong way. My program background is a image. The program has no border. My first way was to draw that picture to the window and then set the gadgets on the window. All works fine until a other program comes in foreground. After my program is back to foreground the background image is gone! So my second way was to use a imagegadget for the background. All times a other program is in foreground and my program comes back the image is always there. That is only why i have a gadget on a gadget.
I have searched in the list and found that other people had the same problems but i didn't found a solution. Maybe i searched wrong or had tomatoes on my eyes and you have a link or a tipp for me. ;)
Posted: Sat Sep 20, 2008 1:29 pm
by Sparkie
MyTrial wrote:...you have a link or a tipp for me.

Sparkie wrote:I'd need to see some code to see what is happening on your side.
Posted: Sat Sep 20, 2008 2:40 pm
by srod
Why not place the other gadgets inside the image gadget?
Code: Select all
UseGadgetList(GadgetID(#ImageGadget))
Posted: Sat Sep 20, 2008 3:26 pm
by MyTrial
Thanks for your info, srod. But is there somewhere a sample how to use that? I do not understand what this does and how to use it.
Posted: Sat Sep 20, 2008 4:05 pm
by MyTrial
Sparkie my projekt is very big with many sub program files which blows up all here if i post it because i must post all that you can compile that.
So i build a small part of what is going up like the following.
Code: Select all
CreateImage(1,300,300)
StartDrawing(ImageOutput(1))
DrawingMode(#PB_2DDrawing_Default)
Box(0,0,300,300,RGB(111,111,222))
StopDrawing()
LoadImage(2,"test.bmp")
StartDrawing(ImageOutput(1))
DrawImage(ImageID(2),0,0,300,300)
StopDrawing()
Flag = #PB_Window_ScreenCentered|#PB_Window_BorderLess
WindowHandler = OpenWindow(#PB_Any,0,0,300,300,"ImageGadgetTest",Flag)
If WindowHandler <> 0
If CreateGadgetList(WindowID(WindowHandler))
ImageGadget(3,0,0,300,300,ImageID(1))
DisableGadget(3,1)
ButtonGadget(4,10,10,280,20,"new item")
Flag = #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection
ListViewGadget(5,10,40,280,210,Flag)
ButtonGadget(6,10,270,280,20,"quit")
EndIf
EndIf
number = 1
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_CloseWindow : Break
Case #PB_Event_Gadget
Select EventGadget()
Case 4 : AddGadgetItem(5,-1," a new item - "+Str(number)) : number + 1
Case 6 : Break
EndSelect
EndSelect
ForEver
You can use any image you have for "test.bmp".
But don't cosh me - i don't get it "work" to disable the loaded background image in this sample!? Maybe it is because in the original there are a lot of gadgets? I don't know.
Posted: Sat Sep 20, 2008 4:25 pm
by Demivec
@MyTrial: Your test code works fine for me. I activated other windows, covered up the program window, then re-exposed it. None of those actions stopped it from working. It always showed the background picture I loaded and displayed the gadgets correctly.
Posted: Sat Sep 20, 2008 4:29 pm
by srod
MyTrial, here's the code you posted adapted so that the 2 buttons and the listview are made child windows of the ImageGadget. This means that the gadgets are physically inside the image gadget.
The subclassed-procedure is required to pass command messages from the image gadget to the main window so that the event loop can trap the button clicks etc.
Code: Select all
Global GoldImageProc, WindowHandler
Procedure ImageGadgetCallback(hWnd, uMsg, wParam, lParam)
Protected result
Select uMsg
Case #WM_COMMAND
SendMessage_(WindowID(WindowHandler), uMsg, wParam, lParam)
Default
result = CallWindowProc_(GoldImageProc, hWnd, uMsg, wParam, lParam)
EndSelect
EndProcedure
CreateImage(1,300,300)
StartDrawing(ImageOutput(1))
DrawingMode(#PB_2DDrawing_Default)
Box(0,0,300,300,RGB(111,111,222))
StopDrawing()
LoadImage(2,"test.bmp")
StartDrawing(ImageOutput(1))
DrawImage(ImageID(2),0,0,300,300)
StopDrawing()
Flag = #PB_Window_ScreenCentered|#PB_Window_BorderLess
WindowHandler = OpenWindow(#PB_Any,0,0,300,300,"ImageGadgetTest",Flag)
If WindowHandler <> 0
If CreateGadgetList(WindowID(WindowHandler))
ImageGadget(3,0,0,300,300,ImageID(1))
UseGadgetList(GadgetID(3))
ButtonGadget(4,10,10,280,20,"new item")
Flag = #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection
ListViewGadget(5,10,40,280,210,Flag)
ButtonGadget(6,10,270,280,20,"quit")
GoldImageProc = SetWindowLong_(GadgetID(3), #GWL_WNDPROC, @ImageGadgetCallback())
EndIf
EndIf
number = 1
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_CloseWindow : Break
Case #PB_Event_Gadget
Select EventGadget()
Case 4 : AddGadgetItem(5,-1," a new item - "+Str(number)) : number + 1
Case 6 : Break
EndSelect
EndSelect
ForEver
Posted: Sat Sep 20, 2008 4:34 pm
by MyTrial
Thanks srod for your help. I really not understand what there is working how (maybe i have a problem in my head ;)). But i see that it uses microsoft specific parts which i should not use because my program should run on windows and linux. By the way - thanks.