Autor Téma: Vytvorenie TPanel zabehu  (Přečteno 457 krát)

Offline František

  • Guru
  • *****
  • Příspěvků: 500
  • Karma: 6
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Vytvorenie TPanel zabehu
« kdy: 05-08-2019, 22:53:51 »
Kód: Delphi [Vybrat]
  1. var      panImporterX: Tpanel;
  2. begin
  3.      panImporterX := Tpanel.Create(nil);
  4.      panImporterX.Parent := mc2.panel1;

mc2 je hlavny formular
panel1 je Tpanel na nom

na tom poslednom prikaze mi to rachá, kde mám chybu?

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2329
  • Karma: 102
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:Vytvorenie TPanel zabehu
« Odpověď #1 kdy: 05-08-2019, 23:07:05 »
racha je Access Violation?

Není mc2 nebo mc2.panel1 = nil?
Dej místo nil jako parametr konstruktoru mc2.
Embarcadero MVP - Czech republic

Offline František

  • Guru
  • *****
  • Příspěvků: 500
  • Karma: 6
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:Vytvorenie TPanel zabehu
« Odpověď #2 kdy: 05-08-2019, 23:38:47 »
aby som to upresnil:
vytváram to v konštruktore ktory volam v AnonymousThread

v podstate mám triedu ktorá sťahuje súbor z netu (funkčnú) a chcel by som zobraziť progressbar so stavom sťahovania ..
beží ich naraz 8 vo vláknach

ps. mc2 nepomohlo
« Poslední změna: 05-08-2019, 23:40:42 od František »

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2588
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Vytvorenie TPanel zabehu
« Odpověď #3 kdy: 06-08-2019, 08:18:08 »
Excellent
Rated 1 time
vytváram to v konštruktore ktory volam v AnonymousThread
Ty nesmis ze threadu sahat v podstate po cemkoli v UI, jedine pres Synchronize(), ktere ta volani deleguje na hlavni thread a nebo to delegovat sam asynchronnim PostMessage

Offline František

  • Guru
  • *****
  • Příspěvků: 500
  • Karma: 6
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:Vytvorenie TPanel zabehu
« Odpověď #4 kdy: 06-08-2019, 08:53:55 »
takže by bolo asi správnejšie vytvoriť panel ešte pred spustením threadu, či?

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2588
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Vytvorenie TPanel zabehu
« Odpověď #5 kdy: 06-08-2019, 12:04:57 »
takže by bolo asi správnejšie vytvoriť panel ešte pred spustením threadu, či?
Kdy ho vytvoris je jedna vec = to muzes dost pravdepodobne udelat tesne pred tim, nez ten thread vytvoris a spustits. Ale druha vec je, ze na tom panelu budes chtit asi prubezne neco zobrazovat a to taky nesmis delat primo. Bud pres metodu Synchronize nebo Queue (nebude cekat na UI) nebo si nadefinovat nejakou windows message a tu plivat spolus s wParam+lParam treba na Application.MainForm.Handle (ma top vyhodu, ze je to anonymni - nemusis vedet, kde je MainForm, jak se jmenuji jeho metody, widgety na nem apod. a cele zobrazeni je jen v rezii MainForm.
« Poslední změna: 06-08-2019, 12:06:29 od pf1957 »

Offline František

  • Guru
  • *****
  • Příspěvků: 500
  • Karma: 6
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:Vytvorenie TPanel zabehu
« Odpověď #6 kdy: 09-08-2019, 10:45:04 »
vyriešil som to takto:

1. vytvoril som si formulár s komponentami (to čo som potrebovan na TPanel)
2. vytvoril som si potomka z toho formu a doplnil potrebne metody, injektol podľa https://delphi.cz/post/Nahrazeni-frames-za-vlozene-formulare.aspx a vytvoril zoznam do TDictionary
3. v hlavnom vlákne ovládam vlastnosti komponent cez zoznam vytvorených objektov/formulárov v TDictionary
4. časovacom kontrolujem či vlákno dokončilo prácu  - ak áno, tak ten formulár uvoľním

šlape to, ale je to košer?
« Poslední změna: 09-08-2019, 10:48:51 od František »