Forum Replies Created
-
AuthorPosts
-
m.rabatscherParticipant
@ alpha skin team:
this option above works fine BUT! :In some circumstances the code above leads to a stack overflow
-> if some caches are not ready yet the WM_PAINT call triggers a full repaint?!?! which again triggres
this event handler to be called again.So basically the code needs to be modified as:
procedure TfrmDarwin.sDarwinTitleBarItems1DrawItem(Item: TacTitleBarItem; ADrawData: TacTitleItemDrawData); const cTopOffset = 2; begin if not fInTitleDrawing and (geProgress.Progress > 0) then begin // ########################################### // #### Now paint the hidden progress bar to the titel bar // the Perform(WM_PAINT,...) method can atually cause a stack overflow in case the timing is bad and the components cache has not yet been // created before the title bar is drawn. This should not happen though in the component and is just a hack to avoid the stack problem. // basically start the darwin with bad sema connection params and see the overflow happen fInTitleDrawing := True; try ADrawData.Bmp.Canvas.Lock; OffsetViewportOrgEx(ADrawData.Bmp.Canvas.Handle, aDrawData.ARect.Left, aDrawData.ARect.Top + cTopOffset, nil ); geProgress.Perform(WM_PAINT, WPARAM(ADrawData.Bmp.Canvas.Handle), 0); OffsetViewportOrgEx(ADrawData.Bmp.Canvas.Handle, -aDrawData.ARect.Left, -aDrawData.ARect.Top - cTopOffset, nil ); ADrawData.Bmp.Canvas.Unlock; finally fInTitleDrawing := False; end; end; end;
Note:
fInTitleDrawing
is a member variable of the form- This reply was modified 2 years, 4 months ago by m.rabatscher.
m.rabatscherParticipantI actually rewrote my approach such that I now use the TsPageControl.
On the first tab we have the standard form’s elements and on the second one I attach the second form
via the parent property. The form now has bsNone border style and the skin section used is ‘TRANSPARENT’ (used in the routine above).It looks now quite nice but there is an invisible margin of a few pixels which I don’t know where that one can
come from. I already removed any margin values from the forms/tabs/pagecontrol but still there is a margin when on the main form and the database view tab.Is there anything I can do?
m.rabatscherParticipantI actually have a solution but I’m not quite sure if it’s the right one:
procedure TForm1.sSkinProvider1SkinItemEx(Item: TComponent;
var CanBeAdded: Boolean; SkinParams: PacSkinParams);
begin
CanBeAdded := True;// tfrmdbbrowser is the form to be embedded
if (item is TfrmDBBrowser) then
SkinParams^.SkinSection := ‘PANEL’;
end;this reduces the border to a minimum.
Is there another thing I can try? -
AuthorPosts