You are not logged in.
Pages: 1
J'utilise devexpress pour mes composants visuels, et j'essaye d'afficher un gif animé (pour une "wait form") pendant un traitement lourd.
Le pb est que devexpress s'execute dans le thread principal et qu'il peut faire des modifications visuelles (mettre à jour une grid par exemple).
Or si j'execute ma form avec le gif animé dans un autre thread, il y a un conflit d'affichage entre mon thread et devexpress ; devexpress n'utilisant pas Synchronize.
Y a t il un moyen de "resynchroniser" les messages windows d'affichage entre ces 2 traitements ?
je sais, ce n'est pas très clair.
c'était juste un exemple !
je l'utilise dans une HashTable quand je parcours toute la table:
procedure Essai;
procedure Proc1(AItem:TItem);
begin
/////traitement pour chaque item
end;
begin
HashTable.TraverseLocal(@Proc1);
end;
c'est très pratique!
est ce que tu connais cette technique pour appeler une fonction locale par l'intermediaire d'un pointeur ?
function MagicCaseOf(ABasePointer:Pointer; const AIndex:Integer; const AProcTab:array of TProcedure):Integer;overload;
begin
if (AIndex >= Low(AProcTab)) and (AIndex <= High(AProcTab)) then
begin
Result := AIndex;
asm push ABasePointer end;
AProcTab[Result]();
asm pop ABasePointer end;
end
else Result := -1;
end;
function MagicCaseOf(const AIndex:Integer; const AProcTab:array of TProcedure):Integer;
var
BasePointer: Pointer;
begin
asm push [ebp] end; // BasePointer
asm pop BasePointer end;
Result := MagicCaseOf(BasePointer, AIndex, AProcTab);
end;
procedure TMainForm.Button1Click(Sender: TObject);
var
Val0, Val1:Integer;
value:Integer;
procedure ExecProc0();
begin
ShowMessage('ExecProc0 ' + IntToStr(Val0));
end;
procedure ExecProc1();
begin
ShowMessage('ExecProc1 ' + IntToStr(Val1));
end;
begin
Val0 := 111;
Val1 := 222;
value := 1;
if MagicCaseOf(value , [@ExecProc0,@ExecProc1]) = -1 then
ShowMessage('else');
end;
Pages: 1