STS

Forum Replies Created

Viewing 14 posts - 1 through 14 (of 14 total)
  • Author
    Posts
  • in reply to: TsSkinmanager и Windows XP #54542
    STS
    Participant

    хех, чето дублей там полно, несколько раз запускал пока нашел куда лог валит.

    in reply to: TsSkinmanager и Windows XP #54541
    STS
    Participant

    вот от drwtsn32

    in reply to: TsSkinmanager и Windows XP #54511
    STS
    Participant

    переодически скачиваю демку – посмотреть что нового, аналогичная ошибка при старте 10.22 в XP

    исправляется включением в свойствах совместимости win2000.

    in reply to: Скинированные .chm и .hlp #42615
    STS
    Participant

    Вот прототип.

    in reply to: Скинированные .chm и .hlp #42591
    STS
    Participant

    QUOTE (TopCore @ May 19 2010, 02:43 PM)
    Понятно. Спасибо.


    в общемто я случайно наткнуся в лазарусе есть самопальный просмотрщик chm
    http://wiki.lazarus.freepascal.org/IDE_Dev…uiltin_CHM_help
    соответсвенно есть исходники, насколько трудоемко их подогнать по делфу не смотрел, там используется простенький (без CSS) TIpHtmlPanel но в теории можно заменить на THtmlViewer который помощнее, все сейчас халявное.
    накинуть поверх скины уже проще, и если не заморачиватся с html наворотами, то можно сделать для своей проги красивый хелп, гдето месяца два неспешного ковыряния (рабочий прототип за неделю наверное).

    и впринципе это хорошая идея для расширения возможностей библиотеки альфа

    in reply to: ошибка при вызове Build #42586
    STS
    Participant

    смутно подозреваю что имеется несколько acPathDialog.dcu или acShellCtrls.dcu или acntD7_R.dcp, т.е. при компиляции разных проектов они кидаютберут dcudcp в разных местах, надо поискать по диску

    in reply to: Скинированные .chm и .hlp #42578
    STS
    Participant

    можно, например, путем написанием собственного просмоторщика, либо заскиновать стандартный винодовый путем всяких хуков и експлоитов.
    в обоих случаях куча проблем, для первого – использовать свой хтмл движок (а какой, а размер, а какие фичи надо реализовать – cssJS) или эксплорер (а как скинировать скроллы)
    для второго – долго разбираться, антивирусы нервные не дадут и т.п.

    in reply to: ColorSelect #42559
    STS
    Participant

    смутно подозреваю – поможет ColorSelect.SkinData.Invalidate;

    in reply to: Скинирование MENU ARROW #42541
    STS
    Participant

    QUOTE (Support @ May 15 2010, 07:00 PM) <{POST_SNAPBACK}>
    Ага, а что править надо?

    здорово, я пытался еще тогда (12-го) отослать архив проекта он хотмай чето не пускает, ща еще попробую

    отослал…

    суть такая – при самопальной рисовки элемента меню надо, под конец, запретить контексту рисовать на том месте (ExcludeClipRect)

    CODE
        WM_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 (как оно по русски то будет)

    ну теоретически можно добавить в скин спец. картинку

    CODE
      procedure 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 begin

         if 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;

    рисует аналогично тексту с учетом оконтуривания

    in reply to: Компиляция пакета #42504
    STS
    Participant

    вот, а если добавить типа %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

    in reply to: Компиляция пакета #42502
    STS
    Participant

    батник запускается из каталога (является текущим при запуске) где лежит acntD7_R.dpk?

    in reply to: Компиляция пакета #42500
    STS
    Participant

    кароче, я вспомнил – “она из молока тигровых коров”
    в общем, лет 10 назад с таким (ошибкой) сталкивался и забыл почему в dpk до сих пор удаляю (на автомате) in в – модуль in 'модуль.pas'

    было

    CODE
    package acntD7_R;
    {$R *.res}
    {$ALIGN 8}

    requires
      vcl,
      vclx,
      vcljpg;

    contains
      sEdit in 'sEdit.pas',
      sMemo in 'sMemo.pas',
      sComboBoxes in 'sComboBoxes.pas',

    надо

    CODE
    package acntD7_R;
    {$R *.res}
    {$ALIGN 8}

    requires
      vcl,
      vclx,
      vcljpg;

    contains
      sEdit,
      sMemo,
      sComboBoxes,

    после этого все компилится

    актуально для D6D7 выше не знаю

    in reply to: Компиляция пакета #42495
    STS
    Participant

    попробуй добавить в -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”
    in reply to: Скинирование MENU ARROW #42493
    STS
    Participant

    QUOTE (Torbins @ May 12 2010, 06:35 PM) <{POST_SNAPBACK}>
    Эм, а что тут не так?


    эээ, всмысле, исправил ошибку – не скинировались стрелочка подменю, теперь рисуется темже цветом что текст элемента меню
    проверял под WinXP SP2

Viewing 14 posts - 1 through 14 (of 14 total)