Repaint ve vlaknu – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Repaint ve vlaknu – Delphi – Fórum – Programujte.comRepaint ve vlaknu – Delphi – Fórum – Programujte.com

 

Borisek0
Stálý člen
13. 8. 2012   #1
-
0
-

Zdravim.

Když dam do vlakna Execute smyčku třeba 1 - 100 a v ni volam Synchronize(zapis), ve kterem neni nic jineho než StringGrid1.Repaint,  StringGrid nepřijemně problikava.

Zkusil jsem i toto a vysledek stejny

Form1.StringGrid1.enabled.false;

Form1.StringGrid1.Repaint;

Form1.StringGrid1.enabled.true;

Poradite

Nahlásit jako SPAM
IP: 213.195.237.–
liborb
~ Redaktor
+18
Guru
13. 8. 2012   #2
-
0
-

Problikávání je dáno tím, že máš nějakou hierarchii oken (formulář, panel, grid nebo tak něco) a když dáš překreslit grid, tak se provede nejenom překreslení, ale také erase background (WM_ERASEBKGND). Ta se v implicitní implementaci rovná vyplnění obdélníku okna barvou pozadí. Takže ve výsledku vidíš nejprve nic a pak zase grid - proto to bliknutí. Jednoduše se toho dá zbavit potlačení WM_ERASEBKGND v oblasti gridu ve všech rodičovských oknech a možná i v gridu, ale to je potřeba vyzkoušet :).

Nahlásit jako SPAM
IP: 78.80.52.–
Sniper
~ Anonymní uživatel
215 příspěvků
13. 8. 2012   #3
-
+1
-
Zajímavé

mno, já to řeším jednoduše,

StringGrid.DoubleBuffered := True;
Nahlásit jako SPAM
IP: 90.179.201.–
Borisek0
Stálý člen
13. 8. 2012   #4
-
0
-

#3 Sniper

Pomohlo.Děkují.

Měl bych ještě jeden dotaz k vlaknum a abych nespamoval a nezakladal nove tak to zkusim tady.

Mam v 1 unitě 2 vlakna.

ZkontrolujVlakno = class(TThread)
  private
    Kontrolovanaadresa: string;
    cisloradku: integer;
  protected
    procedure Execute; override;
    procedure Zapis;
    procedure pingni;
    procedure zkontroluj;
  end;


  ZkontrolujRychleVlakno = class(TThread)
  private
    Kontrolovanaadresa: string;
    cisloradku: integer;
  protected
  end;

Potřeboval bych s vlakna ZkontrolujRychle přistupovat k proceduram ktere jsou ve vlaknu ZkontrolujVlakno (Zapis,pingni,zkontroluj)

Nebo vysvětlim jinak.

2 vlakna

ZkontrolujVlakno.Execute;
ZkontrolujRychleVlakno.Execute;

Vžy běži jenom jedno.

Chci docilit aby procedury Zapis,pingni,zkontroluj využivali obě vlakna

Nahlásit jako SPAM
IP: 81.30.255.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý