Bonjour tout le monde,
J'expose la partie concernée par le problème:
J'ai un composant TImage sur lequel je dessine des points aléatoires, ce dessin est effectué depuis un Thread créé par BeginThread. Afin de visualiser la création des points en temps réel, j'appelle donc TImage.Repaint dans la fonction qui dessine le point DrawAgent qui est elle même appelée depuis le Thread en question.
Le problème est que l'image ne se rafraichie pas (seulement quelques points qui s'affichent) et encore pire, si je survole l'image par une fenêtre, son contenue s'efface completement!
Bon, si j'effectue la génération des points depuis le Thread principal le problème ne se pose pas!
Je vous expose quelques bouts de code pour mieux voir :
Et une portion de la fonction Callback :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 procedure TCustomMonitor.DrawAgent; var ScanArray: PScanArray; begin with fPreviewImage.Picture.Bitmap do begin ScanArray:= ScanLine[Y]; with ScanArray[X] do begin rgbtRed:= GetRValue(AColor); rgbtBlue:= GetBValue(AColor); rgbtGreen:= GetGValue(AColor); end end; fPreviewImage.Repaint end;
Une idée ??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 function TSchedullerAgentCallbackProc; var Msg: TagMsg; Obj: TCustomMonitor; I: Integer; X, Y: Integer; begin Obj:= TCustomMonitor(AParam); with Obj do while GetMessage(Msg, 0, 0, 0) do case Msg.message of WM_SCHEDULLER_GEN_AGENTS: begin fActiveAgentCount:= 0; fCurrentAgentCursor:= -1; for I := 0 to AgentCount - 1 do begin X:= Random(fDataArrayWidth -1); Y:= Random(fDataArrayHeight -1); TAgent.Create(Obj, X, Y); DrawAgent(X, Y, fWaitingAgentColor); if Assigned(fAgentAddEvent) then fAgentAddEvent(Obj, fAgentList[Length(fAgentList)- 1]) end; PostThreadMessage(fSchedullerThreadId, WM_SCHEDULLER_START, 0, 0) end;
Partager