Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Combobox Einstellungen Speichern (https://www.delphipraxis.net/32241-combobox-einstellungen-speichern.html)

Gast 20. Okt 2004 16:41


Combobox Einstellungen Speichern
 
Hallo,
bin auf dem Gebiet Delphi relativer Anfänger. Habe jetzt 2 Stunden in google gesucht und bin auch fündig geworden aber irgendetwas mache ich Falsch. Brauche dringend Hilfe.

Meine Lage:
Habe eine Combobox erstellt und diese Funktioniert auch soweit. Diese Combobox ändert die Hintergrundfarbe eines Memo Fensters. Jetzt möchte ich es aber machen, dass ich auf Speichern klicken kann und der das dann speichert und auf laden und er die letzte Hintergrundfarbe lädt. Dies möchte ich sehr gerne mit einer ini Datei machen.

Meine Probleme:
- Weiss nicht was besser ist zu speichern: Entweder den Wert der Combobox oder den Wert des Hintergrundes des Memo-Feldes.
- Auch wenn ich mich für eins entscheide habe ich Probleme.

Mein Versuch:
Hier die Procedure zum Speichern:
Code:
procedure TForm1.Button1Click(Sender: TObject);
var ini: TIniFile;

begin
ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+
    'einstellungen.ini');
  Ini.WriteInteger('Hintergrund', 'Farbe', Memo1.Color);
end;
Und hier zum Laden:
Code:
procedure TForm1.Button2Click(Sender: TObject);
var ini: TIniFile;
begin
  ini:=TIniFile.Create('einstellungen.ini');
  try
   memo1.color := ini.ReadInteger('Hintergrund', 'Farbe', clwhite);
  finally
   ini.free;
  end;
end;

Kann sein, dass ich einen ganz dummen Fehler mache. Aber bitte nicht auslachen. Würde mich über eine Antwort sehr freuen :)

Gr33tz!
Tigerhead

PS: Da ich neu in dieser Community bin, hoffe ich, dass mein Beitrag gegen keine Regeln verstößt.

Christian Seehase 20. Okt 2004 16:57

Re: Combobox Einstellungen Speichern
 
Moin Tigerhead,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

Als erstes möchte ich Dich mal beruhigen:
Ich kann keinen Regelverstoss ausmachen ;-)

Nun aber mal zu Deinem Problem.

Ich halte es für sinnvoll nicht die Farbe des Memo, sondern den gewählten Wert der ComboBox zu speichern, da dies ja auch dem Programmablauf entspricht.
Hier bedingt eine Auswahl aus der ComboBox eine Änderung der Farbe des Memofeldes.

Leider hast Du nicht geschrieben, wie Du die Werte in der ComboBox speicherst.
Solltest Du es so machen (Style der ComboBox auf csDropDownList)

Delphi-Quellcode:
  ComboBox1.Items.AddObject('Blau',TObject(clBlue));
könntest Du einfach direkt ComboBox1.ItemIndex in der Ini speichern, und auch wieder auslesen.
Dann fehlt nur noch das Zuweisen der Farbe im OnChange Ereignis der ComboBox.

BTW:
Beim Speichern fehlt der Try/Finally Block, und bei Laden der Pfad.

malo 20. Okt 2004 16:58

Re: Combobox Einstellungen Speichern
 
Erstmal willkommen in der DP :hi:

1. Was für Probleme treten denn genau auf? Dass du dich nicht entscheiden kannst, was besser ist?

2. Beim Speichervorgang hast du die Variable ini nicht freigegeben(bin ja selbst Anfänger, kenn mich damit nicht so gut aus, ist mir aber mal aufgefallen ;) ) ;)

patti 20. Okt 2004 18:06

Re: Combobox Einstellungen Speichern
 
Hey alle da drausen!

Ich bin auch neu hier, aber ich programmiere schon etwas länger mit
Delphi! Delphi ist einfach sau geil.*g*

Ich hatte mal das gleiche Problem und ich hoffe, dass ich helfen kann.

Ich weiß leider nicht genau was du haben willst aber ich glaub ich habe eine
Lösung. :thumb:

Es gibt die Möglichkeit, den Text der ComboBox1 zu speichern bzw. zu laden. :gruebel:
Ist ganz einfach: Ich erklär mal ganz kurz:

einal für das Speichern:

Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject);
var inidat : TInifile;
begin
      IniDat := TIniFile.Create('.\Farbeneinstellungen.Ini');
      with inidat do begin
           WriteString('Einstellungen','Farbe',ComboBox1.Text);
      end;

end;

und natürlich zum Laden:


Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var inidat : TInifile;
begin
      IniDat := TIniFile.Create('.\Farbeneinstellungen.Ini');
      with inidat do begin
           ComboBox1.Text := ReadString('Einstellungen','Farbe',ComboBox1.Text);
      end;

end;
Jetzt brauchst du nur noch eine Prozedur zum Auswerten.

Es gibt auch noch eine andere, wahrscheinlich bessere Lösung:

Durch Ordinaltypen!!!

Ich stelle einfach mal den kompletten Quelltext rein.
Den hab ich extra schnell entworfen. Extra für dich! :-D

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Inifiles;

type TFarben = (TF_blau, TF_gelb, TF_rot, TF_gruen);

type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    Farbe : TFarben;
    procedure setzeFarbe;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.setzeFarbe;
begin
     case Farbe of
     TF_blau: Memo1.Color := clblue;
     TF_gelb: Memo1.Color := clYellow;
     TF_gruen: Memo1.Color := cllime;
     TF_rot:  Memo1.Color := clred;
     end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var inidat : TInifile;
begin
     inidat := TInifile.Create('.\Test.Ini');
     with inidat do begin
          WriteInteger('SpTest','SpTest', Ord(Farbe));
     end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var inidat : TInifile;
var auswahl : integer;
begin
     inidat := TInifile.Create('.\Test.Ini');
     with inidat do begin
     auswahl := ReadInteger('SpTest','SpTest', Ord(Farbe));
     end;
     case auswahl of
     0: begin   Farbe := TF_blau;
                 ComboBox1.Text := 'BLAU';
                 end;
     1: begin   Farbe := TF_gelb;
                 ComboBox1.Text := 'GELB';
                 end;
     2: begin   Farbe := TF_rot;
                 ComboBox1.Text := 'ROT';
                 end;
     3: begin   Farbe := TF_gruen;
                 ComboBox1.Text := 'GRÜN';
                 end;
     end;
     setzeFarbe;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
     if ComboBox1.Text = 'BLAU' then Farbe := TF_blau;
     if ComboBox1.Text = 'GELB' then Farbe := TF_gelb;
     if ComboBox1.Text = 'ROT' then Farbe := TF_rot;
     if ComboBox1.Text = 'GRÜN' then Farbe := TF_gruen;
     setzeFarbe;
end;

end.
Hier habe ich einfach einen Typ dekleriert.
Nicht vergessen: Die Ordinaltypen fangen immer bei 0 an!

Ich kann das jetzt leider nicht ganz erklären. Wenn jemand
Hilfe braucht, soll er mir einfach eine E-Mail schreiben : ich@patti-k.de!
Viel Spaß!
Ich hoffe ich habe keine Fehler gemacht! Schreibt mir halt einfach, ob es hinhaut
oder nicht. :stupid:

Gast 20. Okt 2004 18:30

Re: Combobox Einstellungen Speichern
 
Hallo,
habe mir alle Antworten durchgelesen und erstmal ein GANZ DICKES Dankeschön an euch alle. Am meisten geholfen hat mir Patty. Danke, dass du mir das geschrieben hast :) Es funktioniert jetzt alles Wunderbar *freu*. Das mache ich jetzt mit 10 Farben und für jeweils 6 Combobox´s ;) Also eine Menge Arbeit für einen Anfänger wie mich. Wenn ich Probleme haben werde ich mich nicht scheuen euch diese mit zu teilen.

Klasse Community :thumb:

Gr33tz!
Tigerhead

Christian Seehase 20. Okt 2004 18:57

Re: Combobox Einstellungen Speichern
 
Moin Patti,

auch Dir erst einmal ein herzliches Willkommen hier in der Delphi-PRAXiS.

Schau Dir doch noch einmal meine Lösung zu dem Problem an.
Es lassen sich die Farbe und der Text in den ComboBox Items zusammenfassen, ohne noch einen weiteren Typ deklarieren zu müssen.

Gast 20. Okt 2004 19:05

Re: Combobox Einstellungen Speichern
 
Mhh war wohl zu voreilig. So wie es mir der Patty geschrieben hat, kann mir das vllt jemand anderes auch schreiben ? Brauche es aber für 6 Comboboxen :(.

Combobox1 Memo1.color
Combobox2 ListBox1.color
Combobox3 Mitteilung.color
Combobox4 Memo1.Font.Color
Combobox5 ListBox1.Font.Color
Combobox6 Mitteilung.Font.Color

Hoffentlich kann man das irgendwie zusammen fassen, denn das ist ein riesen durcheinander so :( Es geht zwar von Patty aber macht alles unübersichtlich, sorry Patty. Wäre wirklich SUPER nett wenn mir das jmd machen könnte. Nicht weil ich zu Faul bin sondern zu dumm das zusamen zu fassen :oops:. Sorry für die Anfrage *heul*

Gast 21. Okt 2004 00:49

Re: Combobox Einstellungen Speichern
 
Habe bis jetzt das hier:

Code:
function GetColor(idx: Integer): TColor;
begin
    case idx of
      0 : result := clWhite;
      1 : result := clBlack;
      2 : result := clRed;
      3 : result := clYellow;
      4 : result := clBlue;
      5 : result := clGreen;
      6 : result := clGray;
      7 : result := clSilver;
      8 : result := clOlive;
      9 : result := clMaroon;
      10 : result := clNavy;
    end;
  end;

procedure TForm1.Combobox1Change(Sender: TObject);
begin
Memo1.color := getcolor(Combobox1.ItemIndex);
end;

procedure TForm1.ComboBox2Change(Sender: TObject);
begin
ListBox1.color := getcolor(Combobox2.ItemIndex);
end;

procedure TForm1.ComboBox3Change(Sender: TObject);
begin
Mitteilung.color := getcolor(Combobox3.ItemIndex);
end;

procedure TForm1.ComboBox4Change(Sender: TObject);
begin
Memo1.Font.Color := getcolor(Combobox4.ItemIndex);
end;

procedure TForm1.ComboBox5Change(Sender: TObject);
begin
ListBox1.Font.Color := getcolor(Combobox5.ItemIndex);
end;

procedure TForm1.ComboBox6Change(Sender: TObject);
begin
Mitteilung.Font.Color := getcolor(Combobox6.ItemIndex);
end;
Komme echt nicht weiter :( und wer auf die Uhrzeiten meines Posts guckt sieht auch, dass ich bereits Stunden da dran bin *heul* :wall: .. wäre sehr nice wenn mir einer helfen könnte.


Gr33tz!
Tigerhead

Sharky 21. Okt 2004 07:55

Re: Combobox Einstellungen Speichern
 
Hai,
ich habe mal schnell das hier getippelt. Die Zuordnung welche ComboBox bei was die Farbe ändert mache ich einfach über die TAG-Eigenschaft der Combobox. Bei mir ist:

Tag = 0 = Memo1
Tag = 1 = ListBox1

Das sollte sich leicht erweitern lassen ;-)

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  ini : TIniFile;
begin
  ComboBox1.Clear;
  ComboBox2.Clear;
  ComboBox1.Items.AddObject('blau',TObject(clblue));
  ComboBox1.Items.AddObject('rot',TObject(clred));
  ComboBox1.Items.AddObject('grün',TObject(clgreen));

  ComboBox2.Items.Assign(ComboBox1.Items); // Einträge in zweite CB kopieren

  ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'farben.ini');
  try
    ComboBox1.ItemIndex := ini.ReadInteger('farben','memo1',0);
    ComboBox2.ItemIndex := ini.ReadInteger('farben','listbox1',0);
  finally
    ini.Free;
  end;

  ComboBox1.OnChange(ComboBox1); // Das OnChange auslösen
  ComboBox1.OnChange(ComboBox2);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
  ini : TIniFile;
begin
  ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'farben.ini');
  try
    ini.WriteInteger('farben','memo1',ComboBox1.ItemIndex);
    ini.WriteInteger('farben','listbox1',ComboBox2.ItemIndex);
  finally
    ini.Free;
  end;
end;

procedure TForm1.AlleComboBoxChange(Sender: TObject);
var
 myCombo : TComboBox;
begin
  mycombo := Sender As TComboBox;
  Case (myCombo.Tag) of
    0: Memo1.Color := TColor (myCombo.Items.Objects[myCombo.ItemIndex]);
    1: ListBox1.Color := TColor (myCombo.Items.Objects[myCombo.ItemIndex]);
  end;
end;
P.S.: Allen Comboboxen ist das selbe OnChange-Ereigniss zugewiesen.

Gast 21. Okt 2004 13:02

Re: Combobox Einstellungen Speichern
 
Hallo,

Erst einmal wirklich ein GANZ FETTES THX an dich. Machst dir wirklich viel Arbeit mir zu helfen. < Danke :P

Habe jetzt nur ein paar Probleme:
- Ich möchte einen Button für Speichern und einen für Laden. Ich weiß aber nicht was alles aus dem FormCreate in den Laden Button rein muss. Wäre nett wenn du das auseinandere fetzen könntest. Denn ich glaube alles auf den Laden Button von FormCreate geht nicht.
- Und mein zweites Problem ist, dass ich nicht viel mit "AlleComboBoxChange" anfangen kann. Ich tippe mal ich muss die einzelnen Comboboxen dazu definieren oder so. weiss aber nicht wie das geht. Vielleicht kannste mir das ja schreiben :)

Wenn du das getan hast, dann gucke ich mal ob es dann funktioniert. Natürlich nur wenn du Zeit und Lust hast mir zu helfen..

Button zum Speichern = Button1
Button zum Laden = Button2

(Ich weiß keine Einfallsreichen Namen aber solange man den Überblick einiger Maßen hat ;) )


Gr33tz!
Tigerhead


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:59 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz