Конференция "WinAPI" » Аналог TLabel для WinAPI.
 
  • MA (30.08.14 19:39) [0]
    Здрасти.
    Вопрос в название темы.
    Если Static, то как сделать перенос строки и автоматически меняющийся размер как в Label(VCL, WordWrap и AutoSize)?
  • junglecat (30.08.14 21:23) [1]
    SS_OWNERDRAW, рисовать самому DrawText()
  • MA (30.08.14 22:20) [2]

    > junglecat   (30.08.14 21:23) [1]
    > SS_OWNERDRAW, рисовать самому DrawText()

    Оказалось я дурак , надо было писать ss_left.

    CreateWindowEx(0, 'Static', '111', WS_CHILD or WS_VISIBLE or SS_LEFT, 1, 33, 100, 50, AddForm, LBNameId, HInstance, nil);

  • Игорь Шевченко © (31.08.14 13:02) [3]
    Static - это не аналог Label
  • MA (31.08.14 20:13) [4]

    > Игорь Шевченко ©   (31.08.14 13:02) [3]
    > Static - это не аналог Label

    А что на Label похоже?
  • Rouse_ © (31.08.14 20:46) [5]

    > А что на Label похоже?

    см [1]
  • MA (02.09.14 17:47) [6]
    А в STATIC'e можно рисовать по таймеру?:)
  • junglecat (02.09.14 18:33) [7]
    можно
  • Rouse_ © (02.09.14 19:01) [8]
    В любом окне можно рисовать по таймеру.
    Зачем тебе это вообще нужно?
  • MA (02.09.14 20:04) [9]
    API изучаю. В VCL рисовал в PaitBox, если на форме были другие компонеты или усли форма пуста - то на последней.
    Вычитал когда-то и где  , что STATIC можно загрузить только изображения формата BMP, а другие форматы нет?
  • junglecat (02.09.14 20:09) [10]
    > [9] MA   (02.09.14 20:04)

    любой формат можно привести к bmp.
    А можно воспользоваться GDI+ или какой-нибудь другой графической библиотечкой
  • MA (02.09.14 20:22) [11]

    > junglecat   (02.09.14 20:09) [10]
    > > [9] MA   (02.09.14 20:04)любой формат можно привести к
    > bmp.А можно воспользоваться GDI+ или какой-нибудь другой
    > графической библиотечкой

    Мнеб хотелость сделать стандартными средствами для начала.
  • Rouse__ (02.09.14 20:54) [12]
    GDI+ является стандартом при работе с графикой
  • MA (03.09.14 23:39) [13]
    Здравствуйтес.
    Рисовать фигурки и лилии вроде получаестя :).
    WM_PAINT:
    Var
     Rectl: TRect;
     Ps : TPAINTSTRUCT;
     DC : HDC;
    nBrush : HBRUSH ;
    nPen : HPEN ;

    begin
           dc:=BeginPaint(Form, &ps);
           GetClientRect(Form, Rectl);

        Rectangle(DC, Rectl.Right div 2, 5, Rectl.Right - 5, 45);

        nBrush:=CreateSolidBrush(RGB(10,200,100));
        SelectObject(dc, nBrush);

        Ellipse(dc, 20,100,200,200);
       
        nBrush:=CreateSolidBrush(RGB(250,200,100));
        SelectObject(dc, nBrush);
        nPen:=CreatePen(2,2,RGB(0,0,255));
        SelectObject(dc, nPen);
        RoundRect(dc, 20, 250, 250, 350, 15, 15);

     
        MoveToEx(DC,1,25,nil);  
        LineTo(dc, Rectl.Right - 5, 25);

        ValidateRect(Form, nil);

        EndPaint(Form, &ps);
    end;



    а как в таймере(Смущает BeginPaint и EndPaint)?
    Икак обновить или перерисовать(для WM_PAINT)?
    Спасибо.
  • junglecat (03.09.14 23:54) [14]
    WM_TIMER:
    RedrawWindow(Form, nil, 0, RDW_UPDATENOW);
  • Rouse_ © (04.09.14 10:24) [15]

    > MA   (03.09.14 23:39) [13]

    Эдак ты все GDI хэндлы в системе захватишь под себя.
    Ресурсы то освобождать кто будет?
  • Edgar_Wine (08.09.14 22:48) [16]
    Есть "Оконные" компоненты и есть "Рисованные" компоненты.
    "Оконные" - это создаётся окно с какими-то параметрами, и во многих случаях ОС сама отрисовывает всё что нужно без вашего участия.
    "Рисованные" - это на существующем окне добавляется рисующая процедура в WM_PAINT этого окна. Тут всё рисуется самостоятельно внутри программы (хотя и через функции рисования ОС).

    Копонент - это группа взаимосвязанных классов, оформленных в виде готового блока с определённой функциональностью, который "умеет" взаимодействовать с другими компонентами, например TForm и TLabel. У TForm есть список дочерних компонентов и при OnPaint оно сначала отрисовывает себя, а после поочерёдно дёргает OnPaint всех дочерних (рисующих на том же HDC).

    Аналог TLabel это подфункция в WM_PAINT, рисующая текст. А вы делая "CreateWindowEx" создавали аналог TStatic (или TStaticLabel, не помню точно).

    Правильный вывод анимации делается так: в нужном OnPaint (вызываемом внутри WM_PAINT окна) рисуется графика с параметрами зависящими от времени, или каких-то других переменных, а в таймере делается только Repaint (то что в VCL называется Refresh).
  • MA (09.09.14 18:51) [17]

    > Edgar_Wine   (08.09.14 22:48) [16]
    > Есть "Оконные" компоненты и есть "Рисованные" компоненты.
    >

    Вы меня вообще запутали. Може книгу посаветуете? "Щупак" уже читаю.
  • brother © (09.09.14 18:55) [18]
    [15] судя по http://pda.delphimaster.net/?n=18
    автор не любит (не знает о) уничтожение...
  • Edgar_Wine (09.09.14 22:27) [19]
    Лень самому рисовать кнопку - создаёте окно с классом, дающим нужное поведение (если такой есть).
    А непосредственно TLabel просто рисует на TForm.Canvas текст.

    SelectObject возвращает предыдущий объект, который нужно запоминать и удалять или возвращать на место.
    Созданные nBrush тоже нужно куда-то девать. Или создать одну и пользоваться только ей, или хранить, или удалять.
 
Конференция "WinAPI" » Аналог TLabel для WinAPI.
Есть новые Нет новых   [118484   +52][b:0][p:0.001]