Forum Replies Created
-
AuthorPosts
-
STSParticipant
хех, чето дублей там полно, несколько раз запускал пока нашел куда лог валит.
STSParticipantвот от drwtsn32
STSParticipantпереодически скачиваю демку – посмотреть что нового, аналогичная ошибка при старте 10.22 в XP
исправляется включением в свойствах совместимости win2000.
STSParticipantВот прототип.
STSParticipantПонятно. Спасибо.
в общемто я случайно наткнуся в лазарусе есть самопальный просмотрщик chm
http://wiki.lazarus.freepascal.org/IDE_Dev…uiltin_CHM_help
соответсвенно есть исходники, насколько трудоемко их подогнать по делфу не смотрел, там используется простенький (без CSS) TIpHtmlPanel но в теории можно заменить на THtmlViewer который помощнее, все сейчас халявное.
накинуть поверх скины уже проще, и если не заморачиватся с html наворотами, то можно сделать для своей проги красивый хелп, гдето месяца два неспешного ковыряния (рабочий прототип за неделю наверное).и впринципе это хорошая идея для расширения возможностей библиотеки альфа
STSParticipantсмутно подозреваю что имеется несколько acPathDialog.dcu или acShellCtrls.dcu или acntD7_R.dcp, т.е. при компиляции разных проектов они кидаютберут dcudcp в разных местах, надо поискать по диску
STSParticipantможно, например, путем написанием собственного просмоторщика, либо заскиновать стандартный винодовый путем всяких хуков и експлоитов.
в обоих случаях куча проблем, для первого – использовать свой хтмл движок (а какой, а размер, а какие фичи надо реализовать – cssJS) или эксплорер (а как скинировать скроллы)
для второго – долго разбираться, антивирусы нервные не дадут и т.п.STSParticipantсмутно подозреваю – поможет ColorSelect.SkinData.Invalidate;
STSParticipantQUOTE (Support @ May 15 2010, 07:00 PM) <{POST_SNAPBACK}>Ага, а что править надо?здорово, я пытался еще тогда (12-го) отослать архив проекта он хотмай чето не пускает, ща еще попробую
…
отослал…
суть такая – при самопальной рисовки элемента меню надо, под конец, запретить контексту рисовать на том месте (ExcludeClipRect)
CODEWM_DRAWITEM:
with PDrawItemStruct(Message.LParam)^ do
begin
for I := 0 to Count – 1 do
begin
if TComponent(Items) is TsContextMenu then
MenuItem := TsContextMenu(Items).FindItemByUid(itemID)
else
MenuItem := TPopupMenu(Items).FindItem(itemID, fkCommand);
if MenuItem <> nil then
begin
Canvas := TControlCanvas.Create;
with Canvas do
try
SaveIndex := SaveDC(hDC);
try
Handle := hDC;
Font := Screen.MenuFont;
sSkinMenus.ExcludeDrawSubMenuArrow := false;
DrawMenuItem(MenuItem, Canvas, rcItem, TOwnerDrawState(LongRec(itemState).Lo));
finally
Handle := 0;
RestoreDC(hDC, SaveIndex);
end;
finally
Canvas.Free;
end;
if sSkinMenus.ExcludeDrawSubMenuArrow then ExcludeClipRect(hDC, rcItem.left, rcItem.top, rcItem.right,rcItem.bottom);
Exit;
end;
end;
end;Но, это надо сделать с контекстом который пришел от системы а не тот который стал в блоке SaveDC(hDC) – RestoreDC(hDC, SaveIndex);
для этого придется переопределить TPopupList (на TsPopupList sContextMenu.pas).
sSkinMenus.ExcludeDrawSubMenuArrow – признак что надо запрещать.
В procedure TsSkinableMenus.sAdvancedDrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; State: TOwnerDrawState);
добавил управление признаком ExcludeDrawSubMenuArrow
и процедуру рисование стандартного arrow (как оно по русски то будет)
ну теоретически можно добавить в скин спец. картинку
CODEprocedure DrawSubMenuArrow(const Canvas: TCanvas; Enabled: boolean; var aRect : TRect; SkinIndex : integer; Hot : boolean; SkinManager : TObject = nil);
var
arrowDC, fillDC: HDC;
arrowW, arrowH: integer;
arrowBitmap, oldArrowBitmap, fillBitmap, oldFillBitmap: HBITMAP;
tmpArrowR: TRect;
arrowBrush: HBRUSH;procedure DrawArrow(aLeft, aTop: integer; aBrush: HBRUSH);
begin
//Draw the frame control arrow (The OS draws this as a black on
// white bitmap mask)
DrawFrameControl(arrowDC, tmpArrowR, DFC_MENU, DFCS_MENUARROW);
//Fill the fill bitmap with the arrow color
FillRect(fillDC, tmpArrowR, aBrush);
//Blit the items in a masking fashion
BitBlt(Canvas.Handle, aLeft, aTop, arrowW, arrowH, fillDC, 0, 0, SRCINVERT);
BitBlt(Canvas.Handle, aLeft, aTop, arrowW, arrowH, arrowDC,0, 0, SRCAND);
BitBlt(Canvas.Handle, aLeft, aTop, arrowW, arrowH, fillDC, 0, 0, SRCINVERT);
end;begin
//Create the DCs and Bitmaps we will need
arrowDC := CreateCompatibleDC(Canvas.Handle);
fillDC := CreateCompatibleDC(Canvas.Handle);
arrowW := aRect.right – aRect.left;
arrowH := aRect.bottom – aRect.top;
arrowBitmap := CreateCompatibleBitmap(Canvas.Handle, arrowW, arrowH);
oldArrowBitmap := SelectObject(arrowDC, arrowBitmap);
fillBitmap := CreateCompatibleBitmap(Canvas.Handle, arrowW, arrowH);
oldFillBitmap := SelectObject(fillDC, fillBitmap);//Set the offscreen arrow rect
tmpArrowR := Rect(0, 0, arrowW, arrowH);//Set the arrow color
if SkinManager = nil then SkinManager := DefaultManager;
if not Assigned(DefaultManager) or not TsSkinManager(SkinManager).IsValidSkinIndex(SkinIndex) then beginif Enabled then begin
if Hot then
arrowBrush := GetSysColorBrush(COLOR_MENU)
else
arrowBrush := GetSysColorBrush(COLOR_MENUTEXT)
end else
arrowBrush := GetSysColorBrush(COLOR_GRAYTEXT);DrawArrow(aRect.left, aRect.top, arrowBrush);
end else begin
with TsSkinManager(SkinManager) do begin
Canvas.Brush.Style := bsSolid;
// Left
if Hot then Canvas.Brush.Color := gd[SkinIndex].HotFontColor[2] else Canvas.Brush.Color := gd[SkinIndex].FontColor[2];
if Canvas.Brush.Color <> -1 then begin
DrawArrow(aRect.left -1, aRect.top, Canvas.Brush.Handle);
end;
// Top
if Hot then Canvas.Brush.Color := gd[SkinIndex].HotFontColor[3] else Canvas.Brush.Color := gd[SkinIndex].FontColor[3];
if Canvas.Brush.Color <> -1 then begin
DrawArrow(aRect.left, aRect.top -1, Canvas.Brush.Handle);
end;
// Right
if Hot then Canvas.Brush.Color := gd[SkinIndex].HotFontColor[4] else Canvas.Brush.Color := gd[SkinIndex].FontColor[4];
if Canvas.Brush.Color <> -1 then begin
DrawArrow(aRect.left +1, aRect.top, Canvas.Brush.Handle);
end;
// Bottom
if Hot then Canvas.Brush.Color := gd[SkinIndex].HotFontColor[5] else Canvas.Brush.Color := gd[SkinIndex].FontColor[5];
if Canvas.Brush.Color <> -1 then begin
DrawArrow(aRect.left, aRect.top +1, Canvas.Brush.Handle);
end;
// Center
if Hot then Canvas.Brush.Color := gd[SkinIndex].HotFontColor[1] else Canvas.Brush.Color := gd[SkinIndex].FontColor[1];
DrawArrow(aRect.left, aRect.top, Canvas.Brush.Handle);
end;
end;//Clean up
SelectObject(fillDC, oldFillBitmap);
DeleteObject(fillBitmap);
SelectObject(arrowDC, oldArrowBitmap);
DeleteObject(arrowBitmap);
DeleteDC(fillDC);
DeleteDC(arrowDC);
end;рисует аналогично тексту с учетом оконтуривания
STSParticipantвот, а если добавить типа %SourceAC%
в
@%dcc% -Q -B -N%DestDCU% -LN%DestDCP% -LE%DestBPL% -U%DestBPL% %SourceAC%acntD7.dpkто работать не будет
конечно это не проблема для батника
типа сначала сделать
cd %SourceAC%
а потом
@%dcc% -Q -B -N%DestDCU% -LN%DestDCP% -LE%DestBPL% -U%DestBPL% acntD7.dpkно исходный вопрос именно в том как компилить с указанием пути в имени файла пакета, вызывая dcc с другим текущем каталогом
вот у меня это было актуально при настройке спец тулзы по компиляции которая сама дергала dcc
STSParticipantбатник запускается из каталога (является текущим при запуске) где лежит acntD7_R.dpk?
STSParticipantкароче, я вспомнил – “она из молока тигровых коров”
в общем, лет 10 назад с таким (ошибкой) сталкивался и забыл почему в dpk до сих пор удаляю (на автомате) in в – модуль in 'модуль.pas'было
CODEpackage acntD7_R;
{$R *.res}
{$ALIGN 8}
…
requires
vcl,
vclx,
vcljpg;contains
sEdit in 'sEdit.pas',
sMemo in 'sMemo.pas',
sComboBoxes in 'sComboBoxes.pas',
…надо
CODEpackage acntD7_R;
{$R *.res}
{$ALIGN 8}
…
requires
vcl,
vclx,
vcljpg;contains
sEdit,
sMemo,
sComboBoxes,
…после этого все компилится
актуально для D6D7 выше не знаю
STSParticipantпопробуй добавить в -I путь C:acnt_reg7 v6.64D7, или где там лежат dcupas файлы
CODE“C:Program FilesBorlandDelphi7Bindcc32.exe” “C:acnt_reg7 v6.64D7acntD7_R.dpk” -B
-I”C:Program FilesBorlandDelphi7ProjectsBpl;C:acnt_reg7 v6.64D7″
-LE”C:Program FilesBorlandDelphi7ProjectsBpl”
-LN”C:Program FilesBorlandDelphi7ProjectsBpl”STSParticipantQUOTE (Torbins @ May 12 2010, 06:35 PM) <{POST_SNAPBACK}>Эм, а что тут не так?
эээ, всмысле, исправил ошибку – не скинировались стрелочка подменю, теперь рисуется темже цветом что текст элемента меню
проверял под WinXP SP2 -
AuthorPosts