Fensterposition wieder herstellen



  • Hallo zusammen,

    ich möchte ein Formular nach dem schließen und neustarten der Anwendung immer an der gleichen Stelle erstellen, wie es der Anwender geschlossen hat. In der TForm Klasse gibt es die Eigenschaft Position, aber etwas mit Koordinaten finde ich in der tollen Hilfe zu Turbo C++ 2006 leider nicht.

    Kann mir jemand ein Tip geben?

    VG Pixfreak



  • Hallo

    Du must eben die Position (Left, Top) und die Größe (Width, Height) in einer Datei speichern und beim Starten wieder auslesen.

    bis bald
    akari



  • Hi,

    genau so hatte ich es vor. Nur gibt die Auflistung in der Hilfe keine Namen an... Dort tauchen diese Eigenschaften nicht auf 😡

    Probiert hatte ich es noch nicht.

    Vielen Dank für den Tip

    VG Pixfreak



  • Man kann es noch besser machen durch Eiträge in der Registry.....
    Aber am Anfang ist eine einfache datei das Beste.

    Kannst dir mal TiniFile in der Hilfe angucken.....



  • Hallo

    pixfreak schrieb:

    Hi,
    Nur gibt die Auflistung in der Hilfe keine Namen an... Dort tauchen diese Eigenschaften nicht auf

    Dann schau zur Entwurfszeit im Objektinspektor nach, oder las dir von der Codevervollständigung die vorhandenen Eigenschaften anzeigen (wenn sowas im Turbo C++ vorhanden ist)

    bis bald
    akari



  • Hi,
    ich benutze immer noch den Borland Builder 5
    Folgender Code funktioniert bei mir, alles für die Registry von XP
    Bei mir funktioniert das so..... 😃

    in der Header TForm1.h :

    void regstart(); //Funktion ausführen wenn Programm gestartet wird ---> FormCreat oder so
    bool regkeyda(AnsiString key);
    bool regkeyneu(AnsiString key);
    bool StringValueLesen(AnsiString key, AnsiString Value, AnsiString &wert);
    bool StringValueSchreiben(AnsiString key, AnsiString Value, AnsiString wert);
    bool IntValueLesen(AnsiString key, AnsiString Value, int &wert);
    bool IntValueSchreiben(AnsiString key, AnsiString Value, int wert);
    bool FloatValueLesen(AnsiString key, AnsiString Value, float &wert);
    bool FloatValueSchreiben(AnsiString key, AnsiString Value, float wert);
    void regende(); //Wenn das Programm beendet wird ...... ausführen
    

    in der Unit TForm1.cpp :

    //registry registry registry registry registry registry
    #include <Registry.hpp>
    //Funktion ausführen wenn Programm gestartet wird ---> FormCreat oder so
    void TForm1::regstart() 
    {if(false==regkeyda("FipsTec"))                 regkeyneu("FipsTec");
     if(false==regkeyda("FipsTec\\ESIM-IDE"))       regkeyneu("FipsTec\\ESIM-IDE");
     StringValueSchreiben("FipsTec\\ESIM-IDE", "Arbeitsverz", installpfad);
    
     if(false==regkeyda("FipsTec\\ESIM-IDE\\main")) regkeyneu("FipsTec\\ESIM-IDE\\main");
     int wert;
     //Hauptfenster pos Top
     if(true==IntValueLesen("FipsTec\\ESIM-IDE\\main", "Top", wert))    Top=wert;
     else IntValueSchreiben("FipsTec\\ESIM-IDE\\main", "Top", Top);
     //Hauptfenster pos Left
     if(true==IntValueLesen("FipsTec\\ESIM-IDE\\main", "Left", wert))   Left=wert;
     else IntValueSchreiben("FipsTec\\ESIM-IDE\\main", "Left", Left);
     //Hauptfenster pos Width
     if(true==IntValueLesen("FipsTec\\ESIM-IDE\\main", "Width", wert))  Width=wert;
     else IntValueSchreiben("FipsTec\\ESIM-IDE\\main", "Width", Width);
     //Hauptfenster pos Height
     if(true==IntValueLesen("FipsTec\\ESIM-IDE\\main", "Height", wert)) Height=wert;
     else IntValueSchreiben("FipsTec\\ESIM-IDE\\main", "Height", Height);
     //Hauptfenster pos WindowState
     if(true==IntValueLesen("FipsTec\\ESIM-IDE\\main", "WindowState", wert))WindowState=wert;
     else IntValueSchreiben("FipsTec\\ESIM-IDE\\main", "WindowState", WindowState);
     //weiter parameter
     //Programm counter
     if(true==IntValueLesen("FipsTec\\ESIM-IDE\\main", "pzaehler", wert)){wert=wert+1; IntValueSchreiben("FipsTec\\ESIM-IDE\\main", "pzaehler", wert);}
     else IntValueSchreiben("FipsTec\\ESIM-IDE\\main", "pzaehler", 1);
    }//---------------------------------------------------------------------------
    void TForm1::regende() //Wenn das Programm beendet wird ...... ausführen
    {if(false==regkeyda("FipsTec"))                 regkeyneu("FipsTec");
     if(false==regkeyda("FipsTec\\ESIM-IDE"))       regkeyneu("FipsTec\\ESIM-IDE");
     if(false==regkeyda("FipsTec\\ESIM-IDE\\main")) regkeyneu("FipsTec\\ESIM-IDE\\main");
     IntValueSchreiben("FipsTec\\ESIM-IDE\\main", "Top", Top);
     IntValueSchreiben("FipsTec\\ESIM-IDE\\main", "Left", Left);
     IntValueSchreiben("FipsTec\\ESIM-IDE\\main", "Width", Width);
     IntValueSchreiben("FipsTec\\ESIM-IDE\\main", "Height", Height);
     IntValueSchreiben("FipsTec\\ESIM-IDE\\main", "WindowState", WindowState);
    }//---------------------------------------------------------------------------
    bool TForm1::regkeyda(AnsiString key) //schaut nach ob der schlüssel 'key' da ist
    {bool isda=false;
     TRegistry *Registry = new TRegistry;
     try
      {Registry->RootKey = HKEY_CURRENT_USER;
       key="Software\\"+key;
       if(true==Registry->OpenKeyReadOnly(key)) isda=true;
      } __finally{delete Registry;}     return isda;
    }//---------------------------------------------------------------------------
    bool TForm1::regkeyneu(AnsiString key) //erzeugt einen schlüssel
    {bool keygeht=false;
     TRegistry *Registry = new TRegistry;
     try
      {Registry->RootKey = HKEY_CURRENT_USER;
       key="Software\\"+key;
       if(true==Registry->CreateKey(key)) keygeht=true;
      } __finally{delete Registry;}     return keygeht;
    }//---------------------------------------------------------------------------
    bool TForm1::StringValueLesen(AnsiString key, AnsiString Value, AnsiString &wert)
    {bool valugeht=false;
     TRegistry *Registry = new TRegistry;
     try
      {Registry->RootKey = HKEY_CURRENT_USER;
       AnsiString keyy="Software\\"+key;
       if(true==Registry->OpenKey(keyy,false))  //Es muss der Schlüssel erst damit geöffnet werden
        {valugeht=true;
         try{wert = Registry->ReadString(Value);if(wert=="")valugeht=false;} //value ist leer oder nicht da!!
         catch(...){valugeht=false;}  //Problem mit registry ursache angemeldet mit eingeschränktem user konto
         Registry->CloseKey();
      } } __finally{delete Registry;}   return valugeht;
    }//---------------------------------------------------------------------------
    bool TForm1::StringValueSchreiben(AnsiString key, AnsiString Value, AnsiString wert)
    {bool valugeht=false;
     TRegistry *Registry = new TRegistry;
     try
      {Registry->RootKey = HKEY_CURRENT_USER;
       AnsiString keyy="Software\\"+key;
       if(true==Registry->OpenKey(keyy,false)) //Es muss der Schlüssel erst damit geöffnet werden
        {Registry->WriteString(Value, wert);
         Registry->CloseKey();
         valugeht=true;
      } } __finally{delete Registry;}   return valugeht;
    }//---------------------------------------------------------------------------
    bool TForm1::IntValueLesen(AnsiString key, AnsiString Value, int &wert)
    {bool valugeht=false;
     TRegistry *Registry = new TRegistry;
     try
      {Registry->RootKey = HKEY_CURRENT_USER;
       AnsiString keyy="Software\\"+key;
       if(true==Registry->OpenKey(keyy,false)) //Es muss der Schlüssel erst damit geöffnet werden
        {valugeht=true;
         try{wert = Registry->ReadInteger(Value);}
         catch(...){valugeht=false;}  //der Value existiert nicht
         Registry->CloseKey();
      } } __finally{delete Registry;}   return valugeht;
    }//---------------------------------------------------------------------------
    bool TForm1::IntValueSchreiben(AnsiString key, AnsiString Value, int wert)
    {bool valugeht=false;
     TRegistry *Registry = new TRegistry;
     try
      {Registry->RootKey = HKEY_CURRENT_USER;
       AnsiString keyy="Software\\"+key;
       if(true==Registry->OpenKey(keyy,false)) //Es muss der Schlüssel erst damit geöffnet werden
        {Registry->WriteInteger(Value, wert);
         Registry->CloseKey();
         valugeht=true;
      } } __finally{delete Registry;}   return valugeht;
    }//---------------------------------------------------------------------------
    bool TForm1::FloatValueLesen(AnsiString key, AnsiString Value, float &wert)
    {bool valugeht=false;
     TRegistry *Registry = new TRegistry;
     try
      {Registry->RootKey = HKEY_CURRENT_USER;
       AnsiString keyy="Software\\"+key;
       if(true==Registry->OpenKey(keyy,false))  //Es muss der Schlüssel erst damit geöffnet werden
        {valugeht=true;
         try{wert = Registry->ReadFloat(Value);}
         catch(...){valugeht=false;}  //der Value existiert nicht
         Registry->CloseKey();
      } } __finally{delete Registry;}   return valugeht;
    }//---------------------------------------------------------------------------
    bool TForm1::FloatValueSchreiben(AnsiString key, AnsiString Value, float wert)
    {bool valugeht=false;
     TRegistry *Registry = new TRegistry;
     try
      {Registry->RootKey = HKEY_CURRENT_USER;
       AnsiString keyy="Software\\"+key;
       if(true==Registry->OpenKey(keyy,false)) //Es muss der Schlüssel erst damit geöffnet werden
        {Registry->WriteFloat(Value, wert);
         Registry->CloseKey();
         valugeht=true;
      } } __finally{delete Registry;}   return valugeht;
    }//---------------------------------------------------------------------------
    //registry registry registry registry registry registry
    

    Ist mein Geschenk für euch zu Weihnachten.
    Ich wünsch Euch alle Gute fürs neue Jahr und schöne Feiertage :xmas1:

    arnold



  • Dann schau zur Entwurfszeit im Objektinspektor nach, oder las dir von der Codevervollständigung die vorhandenen Eigenschaften anzeigen (wenn sowas im Turbo C++ vorhanden ist)

    Jau, die Idee mit dem Objektinspektor ist mir leider nicht gekommen aber klar, da sehe ich sie ja alle.... Die andere Variante habe ich nicht, glaube ich zumindest. Bin aber grade auch nicht an meinem Rechner.

    Speichern werde ich die Daten zu den anderen in die Registry. Das klappt schon.

    Vielen Dank!

    VG Pixfreak


Anmelden zum Antworten