powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lazarus: проблема с изменением размера сплэша на GTK2
3 сообщений из 3, страница 1 из 1
Lazarus: проблема с изменением размера сплэша на GTK2
    #39600439
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пытаюсь поменять размеры сплэша из доп.потока в рантайм.
Код: 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
Lazarus: проблема с изменением размера сплэша на GTK2
    #39600457
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упс, с флагами напутал :)
Код: pascal
1.
2.
3.
4.
5.
6.
    AFlag:=
      //DT_NOCLIP
      DT_CALCRECT
      or DT_WORDBREAK
      or DT_LEFT
      ;



Решено
...
Рейтинг: 0 / 0
Lazarus: проблема с изменением размера сплэша на GTK2
    #39600855
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Увы, "дело было не бобине...". Добавил альтернативный метод отрисовки, теперь почти порядок (перерисовка сплэша заметна) :)
Код: 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
3 сообщений из 3, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lazarus: проблема с изменением размера сплэша на GTK2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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