![]() |
Wie kann ich das Registry mit API lesen und schreiben?
Hi leute,
sehr gut hab ihr hier. zuers aber danke an Luckie fuer den link in deiner page. ich habe eine "dumme" frage. wie kann ich einen string aus der registry lesen und in einem Edit-Text anzeigen und aus einer ComboBox denn string rein schreiben? ich weiss dass wenn ich luckies tutis noch mal durch arbeite und sehr viel denke das ich es dann auch hinkriege, aber ich hoffe das es hier schneller geht. mir der VCL ist das lesen und schreiben kein thema, aber ich weiss leider nich wie ich den string aus der registry dem Edit-Tex zuweisen und den string aus der ComboBox in die registry schreiben kann. wenn ihr mir weiter helfen koennt waehre net. danke |
Hallo toppDog ---> :cat:
fachlich kann ich Dir leider nicht weiterhelfen - aber ich kann Dir versichern, dass Deine Frage keineswegs "dumm" ist. Schliesslich ist ein Forum zum Fragen da! Grüße aus Hamburg, Daniel Delphi-PRAXiS Administrator |
Zitat:
|
@DanielB:
Schön, dass wir uns einig sind. Aber toppDog weiss immer noch nicht weiter :mrgreen: Grüße, Daniel |
Bevor ich mir jetzt das Leben schwer mache, wollte ich erst einmal fragen was das Problem genau ist.
:cat: |
Zieh dir mal das rein
![]() |
Hier ist mal meine Prozedur um Daten aus der Reg zu Lesen. Ich lade sie aber in eine Stringlist und weise sie dann der einen Combo zu. Du musst es halt noch anpassen. Vielleicht bringts dir ja was.
Code:
procedure TEinstellungen.FormShow(Sender: TObject);
//ComPorts ermitteln und in ComboBox Anzeigen var reg: TRegistry; st: TStrings; i: integer; ini: TIniFile; s: string; begin ShowMessage('Bei änderungen, kann gleich mit den neuen Werten weiter gearbeitet' + #13 + 'werden. Das Programm muss nicht neu gestartet werden!'); reg := TRegistry.Create; reg.RootKey := HKEY_LOCAL_MACHINE; reg.OpenKey('hardware\devicemap\serialcomm', False); st := TStringList.Create; reg.GetValueNames(st); ComboBoxPort.Items.Clear; for i := 0 to st.Count -1 do begin ComboBoxPort.Items.Add(reg.ReadString(st.Strings[i])); end; st.Free; reg.CloseKey; reg.free; if MainFormMC2004.ComPort.Port = 'COM1' then begin ComboBoxPort.ItemIndex := 0; end else if MainFormMC2004.ComPort.Port = 'COM2' then begin ComboBoxPort.ItemIndex := 1; end else if MainFormMC2004.ComPort.Port = 'COM3' then begin ComboBoxPort.ItemIndex := 2; end else if MainFormMC2004.ComPort.Port = 'COM4' then begin ComboBoxPort.ItemIndex := 3; end else if MainFormMC2004.ComPort.Port = 'COM5' then begin ComboBoxPort.ItemIndex := 4; end else if MainFormMC2004.ComPort.Port = 'COM6' then begin ComboBoxPort.ItemIndex := 5; end else if MainFormMC2004.ComPort.Port = 'COM7' then begin ComboBoxPort.ItemIndex := 6; end else if MainFormMC2004.ComPort.Port = 'COM8' then begin ComboBoxPort.ItemIndex := 7; end; ini:=TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini')); try s := ini.ReadString('Einstellungen', 'Baud', ''); finally ini.Free; end; if s = '2400' then begin ComboBoxBaud.ItemIndex := 0; end else if s = '4800' then begin ComboBoxBaud.ItemIndex := 1; end else if s = '9600' then begin ComboBoxBaud.ItemIndex := 2; end else if s = '14400' then begin ComboBoxBaud.ItemIndex := 3; end else if s = '19200' then begin ComboBoxBaud.ItemIndex := 4; end else if s = '28800' then begin ComboBoxBaud.ItemIndex := 5; end else if s = '38400' then begin ComboBoxBaud.ItemIndex := 6; end; end; |
Moin ToppDog,
hier hab' ich mal ein kleines Beispiel wie's gehen könnte. Bislang nur mit gültigen Werten getestet, aber eigentlich sollten auch fehlerhafte Werte nur für entsprechende Rückgabewerte der Funktionen sorgen.
Code:
Kommst Du damit klar?
function WriteStringToRegAPI(const p_sSubKey : string;const p_sValueName : string;const p_sValue : string) : integer;
var hResult : HKEY; begin // Es ginge auch RegOpenKeyEx, so wird ein nicht existenter Key aber angelegt. // Existiert der SubKey, wird er geöffnet Result := RegCreateKeyEx(HKEY_CURRENT_USER,PChar(p_sSubKey),0,nil,0,KEY_ALL_ACCESS,nil,hResult,nil); if Result <> ERROR_SUCCESS then begin exit; end; try Result := RegSetValueEx(hResult,PChar(p_sValueName),0,REG_SZ,@p_sValue[1],Length(p_sValue)+1); finally RegCloseKey(hResult); end; end; function ReadStringFromRegAPI(const p_sSubKey : string; const p_sValueName : string;var p_sResult : string) : integer; var hResult : HKEY; dwMaxValueLen : DWORD; szResult : PChar; begin Result := RegOpenKeyEx(HKEY_CURRENT_USER,PChar(p_sSubKey),0,KEY_ALL_ACCESS,hResult); if Result <> ERROR_SUCCESS then begin exit; end; try Result := RegQueryInfoKey(hResult,nil,nil,nil,nil,nil,nil,nil,nil,@dwMaxValueLen,nil,nil); if Result <> ERROR_SUCCESS then begin exit; end; inc(dwMaxValueLen); szResult := StrAlloc(dwMaxValueLen); try Result := RegQueryValueEx(hResult,PChar(p_sValueName),nil,nil,PByte(szResult),@dwMaxValueLen); if Result <> ERROR_SUCCESS then begin exit; end; p_sResult := trim(szResult); finally StrDispose(szResult); end; finally RegCloseKey(hResult); end; end; procedure TForm1.Button1Click(Sender: TObject); var iResult : integer; sResult : string; begin iResult := WriteStringToRegAPI('Software\CSE\TEST','TESTWERTNAME','TESTWERT'); if iResult <> ERROR_SUCCESS then begin ShowMessage(SysErrorMessage(iResult)); end; iResult := ReadStringFromRegAPI('Software\CSE\TEST','TESTWERTNAME',sResult); if iResult <> ERROR_SUCCESS then begin ShowMessage(SysErrorMessage(iResult)); end else begin ShowMessage(sResult); end; end; @Mathias Simmack Tut ist noch in Arbeit ;-) |
@daniel B:
Er will es aber NonVcl!!!!! |
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz