Pulsujący button

K3
  • Rejestracja:ponad 19 lat
  • Ostatnio:prawie 9 lat
0

Próbuję zrobić "pulsujący" przycisk - poprzez cykliczne podmienianie glypha.
Na Formę wrzuciłem przycisk i timer.
W timerze dałem:

Kopiuj
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if x=0 then BitBtn1.Glyph.LoadFromFile('czysc2.bmp') else BitBtn1.Glyph.LoadFromFile('czysc1.bmp');
  x:=x xor 1;
end; 

Pod Win7 wszystko ładnie chodzi, natomiast pod XP wyrzuca: Floating point division by zero.
Sprawdzałem na kilku XP, oraz w Delphi 7 i XE2 - na wszystkich jest tak samo.

Proszę o radę co robię nie tak.
Ewentualnie jak to można zrobić inaczej.

DR
  • Rejestracja:prawie 13 lat
  • Ostatnio:około 11 lat
  • Postów:2
0

Spróbuj tak:

Kopiuj
var x: Bool = true;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if x then BitBtn1.Glyph.LoadFromFile('czysc2.bmp') else BitBtn1.Glyph.LoadFromFile('czysc1.bmp');
  x := not x;
end;  
K3
  • Rejestracja:ponad 19 lat
  • Ostatnio:prawie 9 lat
0

Bez zmian

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
1

W podanym przez Ciebie kodzie nie ma prawa występować błąd FPU...


msm
Prawda, jakieś bez sensu pytanie - jedyne co mi przychodzi do głowy to to żeby pliki czyscX.bmp były uszkodzone w taki sposób, że wpadają na bug w bibliotece standardowej (małe szanse)... Albo po prostu autorowi się wydaje że to tam błąd występuje.
flowCRANE
To musi być jakiś błąd podczas odkodowywania zawartości pliku; Ten kod jest zbyt oczywisty i prosty, by taki wyjątek mógł wystąpić;
K3
  • Rejestracja:ponad 19 lat
  • Ostatnio:prawie 9 lat
0

Też mi tak się wydaje (nigdzie tu nie widzę dzielenia), a jednak błąd się pokazuje i tak jak pisałem tylko pod XP - pod 7 jest ok.
(tworzyłem specjalnie nowy projekt w którym jest tylko ta jedna procedura i deklaracja zmiennej i nic więcej)

0
k3cz napisał(a):

Też mi tak się wydaje (nigdzie tu nie widzę dzielenia), a jednak błąd się pokazuje i tak jak pisałem tylko pod XP - pod 7 jest ok.
(tworzyłem specjalnie nowy projekt w którym jest tylko ta jedna procedura i deklaracja zmiennej i nic więcej)

To może lepiej w bieżącym projekcie zakomentuj jedną, potem drugą linię procedury i zobacz, która (i czy w ogóle) powoduje błąd.

1

W podanym przez Ciebie kodzie nie ma prawa występować błąd FPU...

Przecież wywołuje procedury WinApi, może tam się kreszuje.

To może lepiej w bieżącym projekcie zakomentuj jedną, potem drugą linię procedury i zobacz, która (i czy w ogóle) powoduje błąd.

Do takich metod się schodzi gdy się debuggera nie ma.

Pod Win7 wszystko ładnie chodzi, natomiast pod XP wyrzuca: Floating point division by zero.
Sprawdzałem na kilku XP, oraz w Delphi 7 i XE2 - na wszystkich jest tak samo.

Jaka szkoda że debugger nie pokazuje miejsca błędu, call stacku, stanu zmiennych itd. itd. A nawet jeżeli pokazuje to na co to?

K3
  • Rejestracja:ponad 19 lat
  • Ostatnio:prawie 9 lat
0

Zamiast zmieniać glypha, zmieniam sam napis i wtedy jest ok (ale efekt wizualny już nie taki sam :( )

0
-123oho napisał(a):

To może lepiej w bieżącym projekcie zakomentuj jedną, potem drugą linię procedury i zobacz, która (i czy w ogóle) powoduje błąd.

Do takich metod się schodzi gdy się debuggera nie ma.

Oczywiście, ale przecież autor wątku nie ma debuggera, sam pisał:

(tworzyłem specjalnie nowy projekt w którym jest tylko ta jedna procedura i deklaracja zmiennej i nic więcej)

;-)

K3
  • Rejestracja:ponad 19 lat
  • Ostatnio:prawie 9 lat
0

Delphi (zarówno D7 jak i XE2) mam zainstalowane na Win7, a na nim jak pisałem wszystko ładnie chodzi.
A więc debugger chyba nic nie pokaże.

0

Delphi (zarówno D7 jak i XE2) mam zainstalowane na Win7, a na nim jak pisałem wszystko ładnie chodzi.
A więc debugger chyba nic nie pokaże.

Można jakoś ustawić (przynajmniej w FPC) żeby zapisywało call stack do logu wraz z informacjami o kreszu, dawałoby więcej niż kod wyjątku. Poza tym (w FPC) można zainstalować GDB i się nim bawić bez IDE. A jak i to nie to zawsze jest kochana IDA która pomaga tam gdzie GDB przestaje. Możliwości masz dużo.

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Tuchów
  • Postów:12171
0

Sprawdzałem takie cudo na WinXP + Borland Delphi 7 i wszystko działa bez żadnych problemów, kod:

Kopiuj
{...}

type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    bHighlight: Boolean;
  end;

{...}

procedure TForm1.FormCreate(Sender: TObject);
begin
  bHighlight := False;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
const
  GLYPH_IMG: array [Boolean] of String = ('C:\czysc1.bmp', 'C:\czysc2.bmp');
begin
  bHighlight := not bHighlight;
  BitBtn1.Glyph.LoadFromFile(GLYPH_IMG[bHighlight]);
end;

{...}

Może zapomniałeś właczyć ten tajmer...? Sprawdź właściwość Timer.Enabled;


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
KR
  • Rejestracja:prawie 16 lat
  • Ostatnio:6 miesięcy
  • Postów:2514
0

moze on nie odpalil Timera


░█░█░█░█░█░█░█░█░█░█░█░
flowCRANE
Dlatego dopisałem ostatnią linijkę w poście :> Chociaż kładąc kontrolkę na formularz od razu jest ustawiony "Enabled" na "True"... O.o
K3
  • Rejestracja:ponad 19 lat
  • Ostatnio:prawie 9 lat
0

Sprawdzałem takie cudo na WinXP + Borland Delphi 7 i wszystko działa bez żadnych problemów

U mnie nadal wywala błąd (oczywiście przy uruchamianiu exe, a nie przy kompilacji).
Jakiego masz XP ? Ja sprawdzałem na Professional i Home, oba SP3.

Może zapomniałeś właczyć ten tajmer...? Sprawdź właściwość Timer.Enabled;

Timer oczywiście włączony (tak jak pisałem, pod Win7 działa dobrze - przycisk "pulsuje").

flowCRANE
Ja mam WinXP Professional SP2, bo trzecia wersja mi więcej szkód robiła niż pożytku... Możesz mieć uszkodzone pliki z grafiką, więc przetestuj program na innych bitmapach - stwórz bardzo proste dwa kwadraty o innych kolorach w "MS Paint" i wtedy sprawdź;
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 2 godziny
1

może masz plik bitmapy zwalony i crash jest w momencie ładowania.
spróbuj użyć dwa razy jednego obrazka, a potem dwa razy drugiego.

K3
  • Rejestracja:ponad 19 lat
  • Ostatnio:prawie 9 lat
0
Azarien napisał(a):

może masz plik bitmapy zwalony i crash jest w momencie ładowania.
spróbuj użyć dwa razy jednego obrazka, a potem dwa razy drugiego.

I to było to.
Widocznie Win7 inaczej interpretuje bitmapy niż XP.

Dzięki za pomoc.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.