Brak animacji podczas minimalizacji przy BorderStyle=bsNone

Brak animacji podczas minimalizacji przy BorderStyle=bsNone
JA
  • Rejestracja:ponad 17 lat
  • Ostatnio:około miesiąc
0

Delphi 10.4, testowałem tylko na Windows 8.1 ale przypuszczam, że to nie tego wina. Mam wrażenie, że kiedyś to robiłem za pomocą DrawAnimatedRects przy włączonym SPI_SETANIMATION ale teraz nie widać efektu. Nawet jak minimalizuję do traya przy bsSizeable to nie ma animacji. Okno jest tylko ukrywane. Przy bsSizeable system ładnie wszystko animuje ale programowo nie widać efektu. Jak pokazać tą animację? Za wszelkie rady z góry dzięki. Poniżej testowany kod DrawAnimatedRects:

Kopiuj
uses
  SysUtils, Classes, Math, ShellApi, Messages, Graphics, Windows, Forms,
  Vcl.Controls, Vcl.StdCtrls, Vcl.Dialogs;

procedure ShowAnimation(Form: TForm);

implementation

function SetAnimation(Animation: Boolean; AI: TAnimationInfo): Boolean;
begin
  FillChar(ai, SizeOf(AI), 0);
  AI.cbSize := SizeOf(AI);
  if Animation then
    ai.iMinAnimate := 1
  else
    ai.iMinAnimate := 0;
  Result := SystemParametersInfo(SPI_SETANIMATION, 0, @AI, SPIF_SENDCHANGE);
end;

function GetWindowAnimation(var AI: TAnimationInfo): Boolean;
begin
  FillChar(AI, SizeOf(ai), 0);
  AI.cbSize := SizeOf(AI);
  if not SystemParametersInfo(SPI_GETANIMATION, AI.cbSize, @AI, SPIF_SENDCHANGE) then
    RaiseLastOSError;
  Result := not (AI.iMinAnimate = 0);
end;

procedure ShowAnimation(Form: TForm);
var
  RectFrom, RectTo: TRect;
  abd: TAppBarData;
  AI: TAnimationInfo;
begin
  if not (GetWindowAnimation(AI)) then
    SetAnimation(True, AI);

  FillChar(abd, SizeOf(abd), 0);
  abd.cbSize := SizeOf(abd);
  if SHAppBarMessage(ABM_GETTASKBARPOS, abd) = 0 then
    Exit;

  RectTo := abd.rc;

  RectFrom := Application.MainForm.ClientRect;
  if not (DrawAnimatedRects(Form.Handle, IDANI_CAPTION, RectFrom, RectTo)) then
    ShowMessage('Error: DrawAnimatedRects');
end;
edytowany 2x, ostatnio: Riddle
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
1

Na ile pamiętam animacja się odbywa podczas zmiany ClientSize czyli nie powinna się odbywać podczas zmiany rodzaju ramki.
Zawsze możesz obliczyć rozmiar całego okna z ramkami, ustawić bsNone, zmienić ClientSize na wyliczony rozmiar, po czym ustawić animacje i zmniejszyć do poprzedniego rozmiaru ClientSize,


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
JA
  • Rejestracja:ponad 17 lat
  • Ostatnio:około miesiąc
0
_13th_Dragon napisał(a):

Na ile pamiętam animacja się odbywa podczas zmiany ClientSize czyli nie powinna się odbywać podczas zmiany rodzaju ramki.
Zawsze możesz obliczyć rozmiar całego okna z ramkami, ustawić bsNone, zmienić ClientSize na wyliczony rozmiar, po czym ustawić animacje i zmniejszyć do poprzedniego rozmiaru ClientSize,

Dzięki za podpowiedź, mimo że za bardzo jej nie zrozumiałem.

Chwilowo sobie poradziłem ustawiając przed minimalizacją BorderStyle := bsSingle; a po przywróceniu BorderStyle := bsNone;

Dalej trochę boli mnie animacja do Traya, którą nie wiem jak zrobić, mimo że chwilowo jej nie potrzebuję. Jak zmusić kod z pierwszego postu do działania?

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
0

Dokładnie tak samo, jak opisałem wyżej. Musisz przenieść okienko do rozmiaru i pozycji tray'a na ekranie i puścić animacje. Po zakończeniu dopiero zrobić hide.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
JA
  • Rejestracja:ponad 17 lat
  • Ostatnio:około miesiąc
0
_13th_Dragon napisał(a):

Dokładnie tak samo, jak opisałem wyżej. Musisz przenieść okienko do rozmiaru i pozycji tray'a na ekranie i puścić animacje. Po zakończeniu dopiero zrobić hide.

Jeszcze raz dzięki za podpowiedź, naprowadziłeś mnie na rozwiązanie, mimo że nie udało mi się zmusić "DrawAnimatedRects" do działania. Chwilę testowałem i wyszło mi na to, że po włączeniu animacji "SPI_SETANIMATION" przesuwanie okna jest animowane. Do testów stworzyłem procedurę testową, która o dziwo działa bez DrawAnimatedRects, przykład poniżej. Funkcja SetAnimation znajduje się w pierwszym poście. Osobiście chwilowo, suma summarum, z tego nie skorzystałem tylko z oryginalnej - automatycznej animacji do TaskBara przy Minimize i Restore ale może komuś się przyda np. do animacji do Traya. Robiłem to już jakiś czas temu i nie jestem pewien czy nie jest to zależne od innych ustawień.

Kopiuj
procedure ShowAnimation(Form: TForm);
var
  AI: TAnimationInfo;
begin
  if not (GetWindowAnimation(AI)) then
    SetAnimation(True, AI);

  Form.BorderStyle := bsSizeable;
  Form.ClientWidth  := 100;
  Form.ClientHeight := 100;
  Form.Top          := 10;
  Sleep(10);
  Form.Top          := 100;
  Sleep(10);
  Form.Top          := 200;
  Sleep(10);
  Form.Top          := 300;
  Sleep(10);
  Form.Top          := 400;
  Sleep(10);
  Form.Top          := 500;
  Sleep(10);
  Form.Top          := 600;
  Sleep(10);
  Form.Top          := 700;
  Sleep(10);
  Form.Top          := 800;
  Sleep(10);
  Form.Top          := 900;
  Sleep(10);
  Form.Top          := 1000;
  Form.BorderStyle := bsNone;
end;
LA
WTF! CO TO MA BYĆ? o pętli słyszał Pan?
JA
@lampasss Nie unoś się. Masz rację ale to jest tylko procedura testowa. Najpierw był jeden element, później copy - paste. Tutaj wrzuciłem poglądowo, to nie jest żaden gotowiec, etc. Widać tylko działanie, jak ktoś będzie chciał tego użyć to i tak musi zmodyfikować, dopasować do swojego widzimisię, trochę kodu dopisać.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)