elpik

Forum Replies Created

Viewing 20 posts - 81 through 100 (of 132 total)
  • Author
    Posts
  • elpik
    Participant
    'duhar' wrote:

    Так показывается подсказка только к выбранной строке ComboBox. А я имел ввиду подсказки для длинных строк в раскрывающемся списке. Чтобы при небольшой ширине комбобокса видеть наглядно что именно выбираешь.

    возможно вас устроит такое решение? Менять комбобоксы для этого не нужно.

    Code:
    //меняет ширину выпадающего списка комбобокса ———————————-
    procedure TfrmMainPolis.DropDownWidth(Sender: TObject);
    var
    CBox: TsComboBox;
    Width: Integer;
    I, TextLen: Longint;
    lf: LOGFONT;
    f: HFONT;
    begin
    CBox := (Sender as TsComboBox);
    Width := CBox.Width;
    FillChar(lf,SizeOf(lf),0);
    StrPCopy(lf.lfFaceName, CBox.Font.Name);
    lf.lfHeight := CBox.Font.Height;
    lf.lfWeight := FW_NORMAL;
    if fsBold in CBox.Font.Style then
    lf.lfWeight := lf.lfWeight or FW_BOLD;

    f := CreateFontIndirect(lf);
    if (f <> 0) then
    try
    CBox.Canvas.Handle := GetDC(CBox.Handle);
    SelectObject(CBox.Canvas.Handle,f);
    try
    for i := 0 to CBox.Items.Count-1 do begin
    TextLen := CBox.Canvas.TextWidth(CBox.Items);
    if CBox.Items.Count-1 > CBox.DropDownCount then
    begin
    if TextLen > Width-25 then
    Width := TextLen +25;
    end
    else if CBox.Items.Count-1 <= CBox.DropDownCount then
    begin
    if TextLen > Width-5 then
    Width := TextLen+8;
    end;
    end;
    finally
    ReleaseDC(CBox.Handle, CBox.Canvas.Handle);
    end;
    finally
    DeleteObject(f);
    end;
    SendMessage(CBox.Handle, CB_SETDROPPEDWIDTH, Width, 0);
    end;

    вызывается так:

    Code:
    procedure TfrmMainPolis.cboxGrajdDropDown(Sender: TObject);
    begin
    DropDownWidth(cboxGrajd);
    end;

    Выглядит так:

    in reply to: TsDBGrid #46780
    elpik
    Participant
    'Support' wrote:

    Спасибо.

    Попробовал потестить под Delphi 7, но сходу нарвался на сообщения :

    Code:
    [Error] acDBGrid.pas(1267): Undeclared identifier: 'DrawCellBackground'
    [Error] acDBGrid.pas(1417): Undeclared identifier: 'gdPressed'
    [Error] acDBGrid.pas(1417): Incompatible types: 'Enumeration' and 'Integer'
    [Error] acDBGrid.pas(1949): Too many actual parameters

    Извиняюсь за долгое отсутствие, ошибки исправил. Проверял на 5-рке и XE.

    Файл прикладываю.

    Если есть пожелания или замечания пишите (впредь буду стараться отвечать быстро). Спасибо вам за вашу поддержку.

    in reply to: TsDBGrid #46275
    elpik
    Participant

    Извиняюсь за задержку. не было возможности вылезти в инет.

    Вот модуль с Англ коментами. (прошу прощения за мой очень плохой английский).

    Перевел как смог.

    Если будут замечания пишите буду исправлять.

    С уважением elpik.

    in reply to: Прозрачная картинка в гриде #46164
    elpik
    Participant
    'VahaC' wrote:

    Мой тебе совет возьми стандартную процедуру отрисовки айтема у альфовского грида и переделай под свои нужды

    Да документации конечно по ф-циях отрисовки не хватает, сам наступал на эти грабли 🙁 теперь обхожу их способ описанным выше.

    в том то и проблема… не могу найти

    все что понял для стандартной ячейки стоит

    Code:
    inherited DrawCell(ACol, ARow, ARect, AState);

    – а это уже метот из DBGrid.pasVCL-Delphi

    и так не смог найти где закрашивается ячейка.

    in reply to: Прозрачная картинка в гриде #46160
    elpik
    Participant

    спасибо за ответ, но вопросов только прибавилось 🙂

    вот ветка форума: http://www.alphaskins.com/forum/index.php?showtopic=812

    в частности описание:

    Quote:

    Posted 31 January 2006

    procedure PaintItemBG(SkinIndex : integer; SkinSection : string; ci : TCacheInfo; State : integer; R : TRect; pP : TPoint; ItemBmp : TBitmap); overload;

    procedure PaintItemBG(SkinData : TsCommonData; ci : TCacheInfo; State : integer; R : TRect; pP : TPoint; ItemBmp : TBitmap); overload;

    procedure PaintItemBGFast(SkinIndex, BGIndex, BGHotIndex : integer; SkinSection : string; ci : TCacheInfo; State : integer; R : TRect; pP : TPoint; ItemBmp : TBitmap);

    procedure PaintItem(SkinIndex : integer; SkinSection : string; ci : TCacheInfo; Filling : boolean; State : integer; R : TRect; pP : TPoint; ItemBmp : TBitmap); overload;

    procedure PaintItem(SkinIndex : integer; SkinSection : string; ci : TCacheInfo; Filling : boolean; State : integer; R : TRect; pP : TPoint; DC : HDC); overload;

    procedure PaintItem(SkinData : TsCommonData; ci : TCacheInfo; Filling : boolean; State : integer; R : TRect; pP : TPoint; ItemBmp : TBitmap; UpdateCorners : boolean); overload;

    procedure PaintItemFast(SkinIndex, MaskIndex, BGIndex, BGHotIndex : integer; SkinSection : string; ci : TCacheInfo; Filling : boolean; State : integer; R : TRect; pP : TPoint; ItemBmp : TBitmap); overload;

    Семейство процедур PaintItem, PaintItemFast, PaintItemBG, PaintItemBGFast по своей сути похожи, отличаються они и в основном в параметрах. Кроме того, процедура PaintItem рисует элемент управления или его часть в соответствии со свойствами, задаваемыми в скине. Т.е. рисуется контрол, но без текста, иконок, и т.д.

    PaintItemBG рисует только фон контрола. Итак, рассмотрим параметры:

    SkinIndex – индекс скина данного элемента управления, с помощью которого можно найти его свойства в массиве скина, состоящем из TsGeneralData. Этот индекс определен всегда для каждого элемента управления и находится в

    Control.SkinData.SkinIndex.

    ВАЖНО: процедура с параметром SkinIndex устаревает и желательно использовать другую процедуру, где сразу передается SkinData, а процедуры с SkinIndex используються в основном для рисования элементов, когда SkinData не заданно, например для закладок или пунктов меню.

    MaskIndex – индекс маски данного элемента управления. Используйте свойство SkinData.BorderIndex.

    BGIndex, BGHotIndex – индексы скина бэграунда данного элемента управления и индекс скина бэкграунда элемента управления в состоянии hot.

    Используйте для его проеделения function GetPatternIndex(SkinIndex : integer; SkinSection, pattern : string) : integer; (sStyleCimply.pas)

    pattern – строка, определяющая тип шаблона, например, для определения BGIndex она будет 'PATTERN', а для BGHotIndex – 'HOTPATTERN'.

    SkinSection – отвечает за то, какой стиль будет применен для отображаемого элемента управления. Например, может быть SkinSection = 'EDIT' или SkinSection = 'PANEL'.

    ci : TCacheInfo – структура, хранящая информацию об изображении родительского элемента управления. Чтобы заполнить данную структуру, можно вызвать функцию GetParentCache из модуля sCommonData.

    Если ci.Ready = True, то это значит, что можно использовать ci.Bmp для копирования изображения родительского контрола. Иначе – такого изображения нет и контрол нужно рисовать без прозрачности.

    ci.X и ci.Y – если необходимо смешение для копирования фона парента.

    Filling определяет, заполнять середину прямоугольника куском маски или нет.

    На больших контролах (например, на панелях) использование не целесообразно. Т.е. целесообразно если размеры контрола небольшие.

    State – состояние контрола. Используйте function ControlIsActive(SkinData : TsCommonData): boolean; для его определения. Если контрол активен, то State больше 0, если 2 – если контрол нажат.

    Следующее выражение вернет значение состояния – State := integer(ControlIsActive(SkinData)) + integer(ControlIsPressed);

    R – прямоугольник, в котором рисовать;

    pP – верхняя левая координата контрола (актуально при рисовании прозрачного фона);

    ItemBmp – Bitmap в котором рисовать.

    Какую из этих процедур использовать?

    SkinSection – какую секцию взять? (в последней версии секции перестали быть выпадающим списком, и не понятно где взять весь список?)

    в каком юните есть описание констант всех секций? (например s_Button, s_Edit, s_Panel)

    sStyleCimply.pas – например в acDBGrid не используется, откуда брать параметры BGIndex, BGHotIndex

    ci : TCacheInfo – вообще непонятная структура…

    ItemBmp – “Bitmap в котором рисовать.” – что это означает? если все процедуры рисуют на канве?

    Теперь осталось, как-то, все это совместить с отрисовкой обычной ячейки грида.

    на данный момент я реализовал следующее:

    Code:
    procedure TfrmPrimeExp.grdChildDrawColumnCell(Sender: TObject;
    const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
    var XOffset: Integer;
    begin
    inherited;
    if Column.FieldName = 'STATUS_FIN' then
    begin
    if Column.Field.Value = 1 then
    begin
    //FillDC(grdChild.Canvas.Handle, Rect, sSkinProvider1.SkinData.SkinManager.GetActiveEditColor)
    XOffset := Trunc((Rect.Right – Rect.Left – 16)/2);
    frmDataModule.imgLstButtons.Draw(grdChild.Canvas, Rect.Left + XOffset, Rect.Top+1, 14);
    end;
    end;
    end;

    картинка тупо рисуется поверх текста 0 или 1, отрисовкой ячейки занимается сам грид.

    in reply to: Прозрачная картинка в гриде #46156
    elpik
    Participant

    вопрос решился следующим образом:

    у TImageList есть свой метод рисования на канве (и он прекрасно рисует картинки с прозрачным фоном):

    Code:
    frmDataModule.imgLstButtons.Draw(grdChild.Canvas, Rect.Left + XOffset, Rect.Top+1, 14);

    Однако остался вопрос как залить активную ячейку правильным цветом фона?

    in reply to: Заголовок формы в ASkinEditor #46155
    elpik
    Participant
    'Smolensky' wrote:

    В моем проекте для некоторых окон нет смысла предусматривать кнопки Minimize и Maximize, для них хватает одной кнопки Close. Соответственно, если использовать для заголовка показанный выше шаблон, на месте двух кнопок возникнет пустое место, не очень эстетичное. Поэтому нужна пара вот таких заголовков:

    form_caption3.gif

    Когда я использовал компоненты от ThemeEngine, то проблема решалась просто: окнам второго типа присваивалось BorderStyle=bsToolWindow, а в скине для них организовывался свой шаблон. С AlphaControls я этого сделать, к сожалению, не могу. Было бы очень неплохо заиметь такую возможность в следующих версиях. А на данный момент – хотя бы суметь задать заголовки одинаковой толщины.

    Была у меня мысль, попробовать нарисовать кнопки размером с заголовок вместе с серыми краями….

    Т.е. сам заголовок однородный и заливается полностью фиолетовым а потом поверх рисуются кнопки полностью перекрашивая края заголовка.

    Но такой способ вряд-ли прокатит. плюс реакция на нажатие будет сдвигать кнопку вместе с краями… в общем “не эстетично” 🙂

    elpik
    Participant

    а если открыть и скомпилировать мой проект он тоже не работает?

    и кстати какая у Вас версия IDE и Альфаскинов?

    elpik
    Participant
    'Smolensky' wrote:

    Я в предельно ясной форме написал, что ПРОБОВАЛ воспользоваться этим свойством, но безуспешно. Читайте внимательнее.

    Не знаю что там у Вас не получилось но вот результат простенького теста…

    Проект тоже прикладываю.

    [attachment=4959:111.jpg]


    Большая картинка

    [attachment=4960:TestIco2.png] —- Картинка 18х18

    [attachment=4961:TestIco3.jpg] —- Таже картинка 32х32

    elpik
    Participant

    У SkinProvaider есть свойство TitleIcon – попробуйте воспользоваться им. Я както засунул туда картинку размером 256 на 256. она на пол формы вылезла 🙂

    И стоит учесть что она рисуется одной их первых, потому если картина большая то она окажется перекрыта контролами формы.

    in reply to: TsDBGrid #46113
    elpik
    Participant

    Вечер добрый.

    Сегодня снова копался в модуле грида… Мне никак не давала покоя проблема нахлестки объеденных заголовков при перерисовке…

    (это видно на верхнем рисунке /правильно нарисована только последняя колонка а все предыдущие получают нахлестку от верхнего уровня в виде линии).

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

    Сегодня эти проблемы я исправил.

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

    Текст же наоборот. рисуется в самой последней колонке объединенного уровня заголовка… это дало положительный результат в рантайме.

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

    Теперь этих проблем нет и грид заполняется как положено.

    (В дизайн тайме можно наблюдать интересную картину, объеденные заголовки заполняются интересным способом. первая часть объединенного заголовка, заполняется как положено при включенных скинах, а остальные как при отключенных, что приводит к мысли о том что свойства SkinManagera отличаются в рантайме и дизайнтайме. Но это не особо важно, в рантайме грид работает как положено).

    Теперь о дополнениях:

    Добавлено 2 свойства

    MaxColumnWidth и MinColumnWidth – они задают пределы изменения ширины колонок, соответственно макс. ширина и мин. ширина по умолчанию = 0

    (эти свойства действуют при изменении ширины колонки, однако игнорируются при включении свойства AutoSizeColums, т.к. в этом случае есть 2 пограничных состояния которые не вписываются в правила

    1- число колонок с мин. шириной суммарно дают большую ширину чем ширина грида…

    2- число колонок с макс. шириной суммарно дают меньшую ширину чем ширина грида…).

    За сим все, модуль грида прилагаю.

    Если будут замечания пишите буду исправлять.

    ЗЫ: С уважением elpik.

    in reply to: Заголовок формы в ASkinEditor #46108
    elpik
    Participant
    'Smolensky' wrote:

    Было бы неплохо.

    Нынешние заголовки одинаковы – но, кажется, неодинакова их толщина. Заголовки диалоговых окон тоньше. Нет ли способа сделать их той же толщины, что и у других окон?

    Самое простое, не использовать BorderStyle=bsToolWindow. Чем не устраивают стандартные окна?

    in reply to: Исчезновение главного окна #46129
    elpik
    Participant
    'Smolensky' wrote:

    Если в программе наряду с главным окном открыть еще какое-нибудь, свернуть всё в панель задач, дать там полежать несколько минут, а потом вернуть на экран, то довольно часто отрисовывается лишь одно окно, неглавное. Главное же не удается увидеть никакими ухищрениями. Проблему наблюдаю как сам, так и глазами бета-тестеров. Как под семеркой, так и под XP. Один раз было, что от главного окна нарисовались лишь некоторые элементы, а на месте всего остального – прозрачное место.

    Нет ли готовых рецептов борьбы с такой напастью?

    v7.34, Delphi 6

    а примерчик можете выложить?

    in reply to: TsDBGrid #46128
    elpik
    Participant

    Пришлось покопаться в модуле acDBGrid, внес кое какие изменения.

    Итоговый вариант модуля:

    Корректно рисует объединенные заголовки (с нужным выравниванием), центрирует текст заголовка по вертикали (если высота больше 1 линии), автоматически переносит по словам заголовок если влезает по высоте (если не влезает пишет одной строкой с троеточием), понимает перевод строки в заголовке. Позволяет менять высоту строки(уровня) заголовка через свойство TitleHeight.

    Автоматически подгоняет ширину колонок по ширине грида (если включить AutoSizeColums) с нужным видом выравнивания (по свойству AutosizeColumnIndex).

    Добавлены свойства:

    AutoSizeColums: boolean; – (вкл/выкл автоматического подбора ширины колонок, по умолчанию False)

    AutosizeColumnIndex: integer – (Индекс колонки которая будет автоматически подгоняться по ширине. -1 – подгоняет ширину всех колонок пропорционально, -2 – подгоняет ширину последней видимой колонки по умолчанию -1).

    LevelAlignment: TAlignment – (Определяет выравнивание объедененных заголовков, по умолчанию taCenter)

    TitleHeight: integer – (определяет высоту строки заголовка в пикселях, что позволяет задать произвольный размер строки заголовка полезно при длинных названиях т.к. будет переносить по словам по умолчанию = 17)

    Тестируйте, смотрите. Если будут замечания пишите, буду исправлять.

    Модуль грида прилагаю.

    ЗЫ: С уважением elpik.

    [attachment=4948:TestTsDBGrid.png]

    in reply to: Системный трей #46114
    elpik
    Participant
    Code:
    function TaskBarAddIcon(hWindow: THandle; ID: Cardinal;
    ICON: hicon; CallbackMessage: Cardinal; Tip: string): Boolean;
    var
    NID: TNotifyIconData;
    begin
    FillChar(NID, SizeOf(TNotifyIconData), 0);
    with NID do
    begin
    cbSize := SizeOf(TNotifyIconData);
    Wnd := hWindow;
    uID := ID;
    uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
    uCallbackMessage := CallbackMessage;
    hIcon := Icon;
    if Length(Tip) > 63 then
    SetLength(Tip, 63);
    StrPCopy(szTip, Tip);
    end;
    Result := Shell_NotifyIcon(NIM_ADD, @NID);
    end;

    или вот, если лень разбираться.

    Компонент SystemTray

    in reply to: Заголовок формы в ASkinEditor #46097
    elpik
    Participant
    'Smolensky' wrote:

    Хотелось бы все же дождаться ответа от уважаемого автора. Метод тыка, к сожалению, только отнимает время, а результатов не приносит. Если можно сделать такую пару заголовков, то не поленитесь обьяснить, как именно это следует делать. Если нельзя – то скажите открытым текстом: нельзя.

    Какой Вы ленивый… Ладно приду домой попробую нарисовать вам такой заголовоек на основе какого нибудь готового скина (поменяю только заголовок окна). 🙂

    in reply to: Заголовок формы в ASkinEditor #46046
    elpik
    Participant

    Ну, надо экспериментировать.

    Скажем есть такое предположение

    Выставь грвницы заголовка примерно такими. как я очертил красным. и а середину сделай растягиваемой. и тогда у тебя должно получиться то что ты хочешь но для активного и неактивного рисунка нужно иметь разные макеты. т.е. активный синий а неактивный серый… ну примерно такие мысли у меня.[attachment=4917:form_caption2.gif]

    in reply to: Заголовок формы в ASkinEditor #46036
    elpik
    Participant
    'Smolensky' wrote:

    Мануал этот я читал много раз вдоль и поперек, чуть не наизусть выучил. Но все равно не понял, как задать координаты заголовка пассивной формы. Нельзя ли это здесь разъяснить, чтобы всем стало понятно? Думаю, такая проблема не у одного меня.

    Почему не желаете использовать цветовую заливку для пассивного заголовка? Редактор вроде как позволяет причем можно прозрачность настраивать.

    in reply to: проблема скинирования TJvDBGrid #45915
    elpik
    Participant

    Да посмотрел на грид повнимательней. Действительно “неправильная” отрисовка заголовка связана со свойством ReduceFlicker – оно включает метод отрисовки сложных заголовков (который отличается от стандартного). В результате страдает скин. Спасибо за инфу. Получается что такой грид безболезненно можно юзать только при DrawingStyle = gdsClassic – Хотябы в цвет попадает.

    Демку прикладываю.

    in reply to: проблема скинирования TJvDBGrid #45900
    elpik
    Participant
    'Support' wrote:

    Проблема в заголовках связана с багом в самом гриде. Слетает рисование градиента при DrawingStyle = gdsGradient когда активируется DataSource (не важно – есть AlphaSkins или нет)

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

    А комбобоксы у меня в этой демке имеют одинаковое поведение – при первом выпадании списка он выпадает одной строкой, а при последующих уже как надо.

    в v7.42 вродебы баг комбобокса побороли. Теперь выпадает как надо. И еще вопрос почему в демке 7.42 при сворачивании и развертке окна в комбобоксе не появляется вертикальная полоса рядом с кнопкой а в проекте появляется?

    По поводу грида, посмотрю еще раз позже отпишусь.

Viewing 20 posts - 81 through 100 (of 132 total)