Button drücken geht zu langsam



  • Hi,

    Ich hab da mal ne verständnisfrage, und zwar folgendes:

    Ich habe 20 buttons. 18 davon sind im switch mode. einer ist zum speichern der letzte zum ausführen.
    während der Laufzeit setze ich alle 18 buttons als gecheckt. bei betätigen des speicher buttons werden die positionen der 18 buttons in einem Tinifile gespeichert. wenn ich jetzt alle 18 buttons in den ungecheckten zustand zurück setzte und den ausführen button drücke, wird die datei eingelesen und alle buttons in die position gesetzt die in der datei gespeichert wurde (quasi wieder alle gecheckt).

    So, jetzt zu meiner frage. Wie kanne es sein das die anweisung so langsam ausgeführt wird das ich sehen kann wie jeder einzelne button nacheinander gedrückt wird? Normalerweise sollte das ganze doch so schnell gehen, dass es so aussieht als ob alle gleichzeitig gegrückt werden.



  • Woher sollen wir das wissen, wenn du uns deine Anweisung nicht zeigst?



  • Also in dem ausführen button steht nur das drin:

    void __fastcall TForm1::SGButton1Click(TObject *Sender)
    {
            SAButton1->Checked= ini->ReadBool("Gruppe1", "scanner1" , false);
            SAButton2->Checked= ini->ReadBool("Gruppe1", "scanner2" , false);
            SAButton3->Checked= ini->ReadBool("Gruppe1", "scanner3" , false);
            SAButton4->Checked= ini->ReadBool("Gruppe1", "scanner4" , false);
            SAButton5->Checked= ini->ReadBool("Gruppe1", "scanner5" , false);
            SAButton6->Checked= ini->ReadBool("Gruppe1", "scanner6" , false);
            SAButton7->Checked= ini->ReadBool("Gruppe1", "scanner7" , false);
            SAButton8->Checked= ini->ReadBool("Gruppe1", "scanner8" , false);
            SAButton9->Checked= ini->ReadBool("Gruppe1", "scanner9" , false);
            SAButton10->Checked= ini->ReadBool("Gruppe1", "scanner10" , false);
            SAButton11->Checked= ini->ReadBool("Gruppe1", "scanner11" , false);
            SAButton12->Checked= ini->ReadBool("Gruppe1", "scanner12" , false);
            SAButton13->Checked= ini->ReadBool("Gruppe1", "scanner13" , false);
            SAButton14->Checked= ini->ReadBool("Gruppe1", "scanner14" , false);
            SAButton15->Checked= ini->ReadBool("Gruppe1", "scanner15" , false);
            SAButton16->Checked= ini->ReadBool("Gruppe1", "scanner16" , false);
            SAButton17->Checked= ini->ReadBool("Gruppe1", "scanner17" , false);
            SAButton18->Checked= ini->ReadBool("Gruppe1", "scanner18" , false);
    }
    


  • Evtl. ist deine Festplatte entwas langsam.
    Benutz statt TIniFile mal TMemIniFile. Es ist genauso zu benutzen, einzig wird die Datei im Ram gehalten...
    Wichtig hierbei ist aber, das du das TMemIniFile-Objekt löscht (delete ini;) wenn du fertig bist. Sonst kann das zu lustigen unerklärlichen Phänomenen führen....

    mfg
    xXx



  • Naja, auf diese idee bin ich auch schon gekommen. deshalb hab ich das ganze auch mal mit variablen probiert. also quasi ein paar felder angelegt und die daten dadrin gespeichert. dabei kam aber das selbe ergebnis raus.

    Das ganze kommt irgenwie so rüber als ob der wartet bis der befehl vollständig ausfeführt ist (also der button wirklich gedrückt ist), bis der mit der nächsten zeile weiter macht.



  • da musste wohl zuerst rausfinden wo die bremse ist, also diese zuweisung nach 'Checked' oder das 'ReadBool'. wenn ersteres, dann kannste vielleicht mit winapi (SendMessage, etc.) was machen...



  • Ich bin jetzt leicht verwirrt. ich hab jetzt mal deinen vorschlag mit dem TMemIniFile getestet. Das funktioniert. jetzt sieht es so aus als alle gleichzeitig gedrückt werden. Aber es ist doch das gleiche wenn ich das in felder speicher oder das Tmeminifile das im arbeitsspeicher hält, oder seh ich das flasch??

    P.S.:
    das delete ini; ist nicht nur wichtig, auch das UpdateFile();



  • Das UpdateFile ist nur dann wichtig, wenn du die Datei geändert hats 😉

    Das mit den Variablen müsstest du mal genauer erklären. Wenn du nämlich folgendes machst:

    bool bla = ini->ReadBool(...);
    Box->Checked=bla;
    bla = ini->ReadBool(...);
    Box2->Checked=bla;
    //[...]
    

    Bringt das gar nix 😉 Um dabei einen Effekt zu haben, müsstest du erst alle bools lesen und anschließend alle Checked setzen. Das sollte den selben Effekt haben, wie mit dem MemIniFile, nur mit dem Unterschied, das beim Klick auf den Button erst ein Augenblick verstreicht (die Zeit in der die booleans gesetzt werden) und dann werden die Checkboxen alle gleichzeitig gesetzt.

    mfg
    xXx


Anmelden zum Antworten