Announcement

Collapse
No announcement yet.

Erstellen von TPanels mit Threads

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Erstellen von TPanels mit Threads

    Hallo zusammen,
    ich versuche gerade mit einem Thread Panels aufgund der Anzahl der Dateien in einer Filelistbox in einer Form darzustellen.
    Klappt auch, solange das ende der Dateien noch nicht erreicht ist.
    Ist das der Fall, werden die Panels nicht mehr angezeigt.
    Hat da jemand eine Ahnung.
    Ich habe nicht viel (Keine grosse) Erfahrung mit Threads
    Hier der Source.
    Thread Unit ...
    <PRE>
    type TCreateImages = class(TThread)
    private
    protected
    procedure execute; override;
    public
    constructor create(DIR: string);
    end;

    implementation
    uses unit1;
    constructor TCreateImages.create(DIR: string);
    begin
    inherited create(true);
    end;

    procedure TCreateImages.execute;
    var
    I : Integer;
    pan : TPanel;
    begin
    with form1 do begin
    for I := 0 to filelistbox1.Count - 1 do
    begin
    pan := TPanel.Create(Form1.ScrollBox1);
    pan.Name := 'PAN' + inttostr(I);
    pan.Parent := scrollbox1;
    pan.Height := 100;
    pan.Align := altop;
    application.ProcessMessages;
    end;
    end;
    end;
    </PRE>
    Hauptform
    <PRE>
    procedure TForm1.Button1Click(Sender: TObject);
    var
    TH : TThread;
    begin
    TH := TCreateImages.create(DirectoryListBox1.Directory + '\*.*');
    TH.Priority := tpLower;
    TH.FreeOnTerminate := true;
    TH.Resume;
    end;
    </PRE>

    Ich hoffe, mir kann jemand helfen.
    Danke im Voraus.
    John

  • #2
    Der Zugriff auf Form1 und damit den Hauptthread ist immer in die Methode <b>Synchronize</b> einzupacken. Während diese läuft, wird der Hauptthread angehalten, somit macht ein Thread hier keinen Sinn. Die Hilfe sollte das ganze noch ein wenig ausführlicher erklären.<p>
    Schöne Grüße, Mario Noac
    Schöne Grüße, Mario

    Comment


    • #3
      Ich möchte erreichen, dass ich in der Hauptform die Panels erstelle und durch das erstellen nicht die ganze Anwendung blockiert ist.
      Das funktioniert auch, dass die Anwendung nicht "stottert".
      Wie kann ich denn am besten sowas realisieren
      ausser mit Threads ?
      Gruß
      Joh

      Comment


      • #4
        Dann hast Du ein Problem. Die VCL ist einfach nicht threadfest, daran lässt sich nicht rütteln. Bei nicht synchronisierten Zugriffen auf die Oberfläche wird es also immer knallen
        Schöne Grüße, Mario

        Comment

        Working...
        X