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 aufDann 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ührenin 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 registryIst 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