vykreslení obrázků v poli-velice velké množství
Dobrý den,
Řeším problém s překreslením obrázků v poli.
Na uvod krátký popis problematiky. Jedná se jen o základní popis, nikoliv odborný, učelem je vysvětlení funkce.
Na železnici je spousta typů zabezpečovacího zařízení. To které popisuji se nazývá releové. Je tvořeno panelem s mnoha prvky, nejdůležitější jsou však žárovky a tlačítka, která jsou vidět. Svícení/nesvícení žároviček dává obsluze stanice informace o stavu v kolejišti a podobně. Na panelu je největší množství takzvaných průsvitek. Jsou tvořeny šedou usečkou, za kterou jsou dvě žárovky. Bílá a červená. Existují 3 základní stavy.
Šedá-zařízení v základním stavu, kolej je volná a v pořádku.
Bílá-Přes danou kolej je proveden závěr jízdní cesty. Tzn. pojede tam vlak.
Červená-Daná kolej je obsazena vlakem, nebo je v poruše.
Vedle těchto základních stavů, jsou i další, ale ty nejsou z hlediska dotazu důležité, protože se jedná o kombinace svícení/kmitání žárovek bílá/červená.
To by byl základní popis na pochopení jak to funguje.
Obsluha však potřebuje v případě potřeby znát polohu výhybek. Výhybky jsou tvořeny popsanými průsvitkami, sestavenými do podoby písmene Y. Mají tedy větve a rozlišujeme větve přímé a odbočující. Pokud však na panelu nesvítí průsvitky, neví obsluha do které větve směřuje která výhybka. Aby to bylo obsluze umožněno, má na panelu tlačítko s popisem Kontrola polohy výměn. Po jeho stlačení, dojde k prosvětlení průsvitek bílou barvou (pokud není některá obsazená) a obsluha tak vidí v jaké poloze je ta která výhybka.
Po stlačení se však tyto průsvitky rozsvítí všechny najednou, protože se jedná o sepnutí kontaktu a uzavření okruhu. Ono to není uplně seriové spojení, ale to bych zacházel až moc do detailu.
V jazyku Delphi, mám tedy nakreslený takový panel a jednotlivé průsvitky jsou tvořeny za běhu, jako jednorozměrné pole.
Problém je v tom, že je jich veliké množství, více než 1024, protože ten zdrojový kód je univerzální a není jen jeden panel.
Jde mi o to aby při tomto množství došlo k rozsvícení všech průsvitek najednou.
Zdrojový kod je navržen tak, že projde celé pole (smyčka FOR) a všechny obrázky změní a na konci je zobrazí. Jenže dochází tím prodlevě 1sec až 1,5sec od stlačení tlačítka do zobrazení, což je už moc dlouhá doba a simulátor se pak nechová jako ve skutečnosti.
Věděl by někdo jak upravit algoritmus, tak aby se průsvitky překreslily najednou? Nebo alespon tak rychle že se to bude chovat jako že najednou?
Na formuláři se pak nachází 3 tlačítka, jedno provede vykreslení a 2 zbývající pak překreslení na bílo nebo červeno.Dále 2 editboxy, do kterých se zadává počet řádků a sloupců a 3 obrázky image, které jsou ony průsvitky šedé, bílé a červené.
procedure TForm1.btn3Click(Sender: TObject); //kliknutí na tlačítko, přemění všechny na červené a ponechá
begin
for i:=1 to strtoint(Form1.Caption) do begin //délka smyčky je High(prusvitky), tedy největší index ze všech prvků
prusvitky[i].Picture:=img3.Picture; //překreslujeme obrázek, bereme si jej z hotového na formuláři.
end;
end;
Předem děkuji za případné rady a pomoc.