Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lazarus: проблема с изменением размера сплэша на GTK2 / 3 сообщений из 3, страница 1 из 1
12.02.2018, 10:33
    #39600439
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lazarus: проблема с изменением размера сплэша на GTK2
Пытаюсь поменять размеры сплэша из доп.потока в рантайм.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
procedure TFrmMain.LMMyMsg(var Msg: TLMessage);
var
  AText: String;
  ARect: TRect;
  h: Integer; //height of the drawn text
  AFlag: UINT;
  SplashCenterPnt: TPoint;
  DiffHeight: Integer;//difference between a splash height and textcontainer height
begin
  ARect:= Rect(-500,0, FrmSplash.sttTextCont.Width - 500,0);
  AText:= String(NativeInt(Msg.lParam));

  with Self.Canvas do
  begin
    //uses LCLType
    AFlag:=
      DT_NOCLIP
      or DT_WORDBREAK
      or DT_LEFT
      ;
    //uses LCLIntf
    h:= DrawText(Handle,PChar(AText),-1, ARect, AFlag);

    { TODO : it's not work for linux GTK2. Why? }
    with FrmSplash do
    begin
      sttTextCont.Caption:= '';
      SplashCenterPnt.y:= Top + Height div 2;//a middle splash height
      DiffHeight:= Height - sttTextCont.Height;
      Height:= h + 15 + DiffHeight;
      Top:= SplashCenterPnt.y - Height div 2;
      Repaint;
      InMsgStr:= AText;
    end;
  end;
end;


Под винду и убунту все тип-топ





А вот под дебианом с его долбанным GTK2 облом


Есть какие-нибудь идеи?

зы. Тестовый проект приаттачил
=================
Док.

Win7 Ultim x64/Deb 9.2(GNOME, MATE; gtk2) i386:
FB 3.0.2.32703, диалект 3, SS,
Lazarus 1.9(r.57277); FPC 3.1.1 (r.38156), IBX by -Rik-; IBE 2017.4.19.2
...
Рейтинг: 0 / 0
12.02.2018, 10:57
    #39600457
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lazarus: проблема с изменением размера сплэша на GTK2
Упс, с флагами напутал :)
Код: pascal
1.
2.
3.
4.
5.
6.
    AFlag:=
      //DT_NOCLIP
      DT_CALCRECT
      or DT_WORDBREAK
      or DT_LEFT
      ;



Решено
...
Рейтинг: 0 / 0
12.02.2018, 23:05
    #39600855
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lazarus: проблема с изменением размера сплэша на GTK2
Увы, "дело было не бобине...". Добавил альтернативный метод отрисовки, теперь почти порядок (перерисовка сплэша заметна) :)
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
  with Self.Canvas do
  begin
    //uses LCLType
    AFlag:= DT_CALCRECT or DT_WORDBREAK or DT_LEFT;

    //uses LCLIntf
    h:= DrawText(Handle,PUTF8Char(AText),UTF8Length(AText), ARect, AFlag);
  end;

  with FrmSplash do
  begin
    sttTextCont.Caption:= '';
    SplashCenterPnt.y:= Top + Height div 2;//a middle splash height
    DiffHeight:= Height - sttTextCont.Height;
    Height:= h + 15 + DiffHeight;

    {$IFDEF LCLGTK2}
    DoSetBounds(Left,SplashCenterPnt.y - Height div 2,Width,Height);
    {$ELSE}
    Top:= SplashCenterPnt.y - Height div 2;
    {$ENDIF}

    InMsgStr:= AText;
  end;

...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lazarus: проблема с изменением размера сплэша на GTK2 / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]