Thread View: pl.comp.lang.delphi
6 messages
6 total messages
Started by stchebel
Mon, 07 May 2018 13:08
Scrollowanie bitmapy - c.d.
Author: stchebel
Date: Mon, 07 May 2018 13:08
Date: Mon, 07 May 2018 13:08
2 lines
1900 bytes
1900 bytes
Witam, W zasadzie jest to kontynuacja wątku sprzed paru dni. Scrollbox działa prawie tak jak bym sobie tego życzył. To co robię, to taki jakby oscyloskop. Zbieram dane, a następnie rysuję wykres czasowy.Odbywa się to w czasie rzeczywistym. Działa fajnie, ale jak przesuwam Scrollbarem w lewo/prawo, to odświeżanie bitmapy "zastyga" i tak długo jak mam wciśnięty lewy klawisz myszy, mogę przeglądać wyniki poprzedniej akwizycji danych. Dopiero jak puszczę lewy klawisz, to odświeżanie bitmapy ponownie rusza. Da się temu jakoś zaradzić?
Re: Scrollowanie bitmapy - c.d.
Author: danielmarcinmazur
Date: Tue, 08 May 2018 07:28
Date: Tue, 08 May 2018 07:28
1 lines
1417 bytes
1417 bytes
W jakim evencie rysujesz na canvasie?
Re: Scrollowanie bitmapy - c.d.
Author: stchebel
Date: Tue, 08 May 2018 09:23
Date: Tue, 08 May 2018 09:23
48 lines
3033 bytes
3033 bytes
W dniu wtorek, 8 maja 2018 09:28:17 UTC+2 użytkownik danielma...@gmail.com napisał: > W jakim evencie rysujesz na canvasie? ButtonxClick. Kod wygląda tak: procedure TForm1.Button10Click(Sender: TObject); var k,ftresult,Write_Result,Read_Result,Marker:integer; EchoL,Wynik:TablicaEcho; Found:boolean; begin CT_START:=not CT_START; if CT_START then begin Button10.Caption:='CT_STOP'; // UstawBit(Port_8,3); end; if (not CT_START) then begin Button10.Caption:='CT_START'; // ZerujBit(Port_8,3); end; //ZapiszPort(8,Port_8); repeat UstawBit(Port_8,3); ZapiszPort(8,Port_8); ZerujBit(Port_8,3); ZapiszPort(8,Port_8); // Prezentacja 1D k:=16384; ftresult:=FT_Read(FT_HANDLE,@EchoL,k,@Read_Result); ZnajdzMarker(EchoL,Marker,Found); if Found then Label27.Caption:=IntToStr(Marker) else Label27.Caption:='Not Found'; RysujPrzebieg(ObrazGorny,Marker,8000,EchoL,Wykres); Image6.Canvas.Draw(0,0,Wykres); Application.ProcessMessages; until (not CT_START); end; Po kliknięciu guzika Button10 zmienna globalna CT_START zmienia wartość na true i wszystko zaczyna się kręcić w pętli repeat... until. W procedurze RysujPrzebieg zmienna ObrazGorny to bitmapa z "siatką" ekranu oscyloskopu, EchoL to tablica danych do namalowania, a wykres to gotowa bitmapa do wyświetlania. Procedury UstawBit, ZerujBit, ZapiszPort służą do wyzwalania akwizycji. Ot, taki trigger. FT_Read służy do odczytu danych z urządzenia zewnętrznego. Kolejne kliknięcie na ten guzik powoduje zmianę zmiennej CT_START na false i pętla przestaje się kręcić.
Re: Scrollowanie bitmapy - c.d.
Author: J-23
Date: Tue, 08 May 2018 14:13
Date: Tue, 08 May 2018 14:13
59 lines
3280 bytes
3280 bytes
W dniu 08.05.2018 o 11:23, stchebel@gmail.com pisze: > W dniu wtorek, 8 maja 2018 09:28:17 UTC+2 użytkownik danielma...@gmail.com napisał: >> W jakim evencie rysujesz na canvasie? > > ButtonxClick. Kod wygląda tak: > > procedure TForm1.Button10Click(Sender: TObject); > var > k,ftresult,Write_Result,Read_Result,Marker:integer; > EchoL,Wynik:TablicaEcho; > Found:boolean; > begin > CT_START:=not CT_START; > if CT_START then begin > Button10.Caption:='CT_STOP'; > // UstawBit(Port_8,3); > end; > if (not CT_START) then begin > Button10.Caption:='CT_START'; > // ZerujBit(Port_8,3); > end; > //ZapiszPort(8,Port_8); > > repeat > UstawBit(Port_8,3); > ZapiszPort(8,Port_8); > ZerujBit(Port_8,3); > ZapiszPort(8,Port_8); > > > > // Prezentacja 1D > > k:=16384; > ftresult:=FT_Read(FT_HANDLE,@EchoL,k,@Read_Result); > ZnajdzMarker(EchoL,Marker,Found); > if Found then Label27.Caption:=IntToStr(Marker) else Label27.Caption:='Not Found'; > RysujPrzebieg(ObrazGorny,Marker,8000,EchoL,Wykres); > Image6.Canvas.Draw(0,0,Wykres); > > Application.ProcessMessages; > until (not CT_START); > end; > > Po kliknięciu guzika Button10 zmienna globalna CT_START zmienia wartość na true i wszystko zaczyna się kręcić w pętli repeat... until. W procedurze RysujPrzebieg zmienna ObrazGorny to bitmapa z "siatką" ekranu oscyloskopu, EchoL to tablica danych do namalowania, a wykres to gotowa bitmapa do wyświetlania. > > Procedury UstawBit, ZerujBit, ZapiszPort służą do wyzwalania akwizycji. Ot, taki trigger. FT_Read służy do odczytu danych z urządzenia zewnętrznego. > > Kolejne kliknięcie na ten guzik powoduje zmianę zmiennej CT_START na false i pętla przestaje się kręcić. > Ja bym to podzielił na wątki, bo tak jak masz teraz to robisz wszystko w wątku głównym i dlatego staje to dęba przy przesuwaniu. Będziesz miał trochę pracy z odpowiednią synchronizacją ale to jest do ogarnięcia Pozdrawiam J-23
Re: Scrollowanie bitmapy - c.d.
Author: stchebel
Date: Wed, 09 May 2018 00:30
Date: Wed, 09 May 2018 00:30
62 lines
4025 bytes
4025 bytes
W dniu wtorek, 8 maja 2018 16:13:57 UTC+2 użytkownik J-23 napisał: > W dniu 08.05.2018 o 11:23, stchebel@gmail.com pisze: > > W dniu wtorek, 8 maja 2018 09:28:17 UTC+2 użytkownik danielma...@gmail.com napisał: > >> W jakim evencie rysujesz na canvasie? > > > > ButtonxClick. Kod wygląda tak: > > > > procedure TForm1.Button10Click(Sender: TObject); > > var > > k,ftresult,Write_Result,Read_Result,Marker:integer; > > EchoL,Wynik:TablicaEcho; > > Found:boolean; > > begin > > CT_START:=not CT_START; > > if CT_START then begin > > Button10.Caption:='CT_STOP'; > > // UstawBit(Port_8,3); > > end; > > if (not CT_START) then begin > > Button10.Caption:='CT_START'; > > // ZerujBit(Port_8,3); > > end; > > //ZapiszPort(8,Port_8); > > > > repeat > > UstawBit(Port_8,3); > > ZapiszPort(8,Port_8); > > ZerujBit(Port_8,3); > > ZapiszPort(8,Port_8); > > > > > > > > // Prezentacja 1D > > > > k:=16384; > > ftresult:=FT_Read(FT_HANDLE,@EchoL,k,@Read_Result); > > ZnajdzMarker(EchoL,Marker,Found); > > if Found then Label27.Caption:=IntToStr(Marker) else Label27.Caption:='Not Found'; > > RysujPrzebieg(ObrazGorny,Marker,8000,EchoL,Wykres); > > Image6.Canvas.Draw(0,0,Wykres); > > > > Application.ProcessMessages; > > until (not CT_START); > > end; > > > > Po kliknięciu guzika Button10 zmienna globalna CT_START zmienia wartość na true i wszystko zaczyna się kręcić w pętli repeat... until. W procedurze RysujPrzebieg zmienna ObrazGorny to bitmapa z "siatką" ekranu oscyloskopu, EchoL to tablica danych do namalowania, a wykres to gotowa bitmapa do wyświetlania. > > > > Procedury UstawBit, ZerujBit, ZapiszPort służą do wyzwalania akwizycji. Ot, taki trigger. FT_Read służy do odczytu danych z urządzenia zewnętrznego. > > > > Kolejne kliknięcie na ten guzik powoduje zmianę zmiennej CT_START na false i pętla przestaje się kręcić. > > > > Ja bym to podzielił na wątki, bo tak jak masz teraz to robisz wszystko w > wątku głównym i dlatego staje to dęba przy przesuwaniu. > > Będziesz miał trochę pracy z odpowiednią synchronizacją ale to jest do > ogarnięcia > > Pozdrawiam > J-23 Też tak podejrzewałem. Problem w tym, że nigdy nie pisałem programów wielowątkowych. Programuję w zasadzie w sytuacjach wyjątkowych, więc marny ze mnie programista. Jak na razie mam pilniejsze tematy związane z przetwarzaniem sygnału, więc ten temat zostawiam na deser bo nie jest to sprawa krytyczna. Nie mniej jednak, dzięki za podpowiedź.
Re: Scrollowanie bitmapy - c.d.
Author: mmm
Date: Thu, 10 May 2018 06:34
Date: Thu, 10 May 2018 06:34
10 lines
1737 bytes
1737 bytes
> Też tak podejrzewałem. Problem w tym, że nigdy nie pisałem programów wielowątkowych. Programuję w zasadzie w sytuacjach wyjątkowych, więc marny ze mnie programista. Jak na razie mam pilniejsze tematy związane z przetwarzaniem sygnału, więc ten temat zostawiam na deser bo nie jest to sprawa krytyczna. Nie mniej jednak, dzięki za podpowiedź. > Jak nie musiałeś używać wątków to tylko się cieszyć, zawsze możesz zaakceptować drobne niedociągnięcia swojej aplikacji ;) Wielowątkowość rozwiązuje problemy ale też dodaje nowe tematy do walki np. wspomniana synchronizacja. Przyjemnej nauki życzę. M
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads