Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi TColor in reg schreiben (https://www.delphipraxis.net/151587-tcolor-reg-schreiben.html)

Chris92 .A 24. Mai 2010 10:41


TColor in reg schreiben
 
Hallo ich wollte fragen ob jemand zufällig weiß wie man den Wert den man bekommt wenn man eine Farbe aus dem Dialog.Color nimmt in die reg schreiben kann
es gibt ja reg.writestring, reg.writeinteger etc... aber keinen reg.writecolor

mkinzler 24. Mai 2010 10:43

Re: TColor in reg schreiben
 
TColor ist ein Integer

Chris92 .A 24. Mai 2010 10:52

Re: TColor in reg schreiben
 
Hmm irgendwie funktioniert das aber nicht. Hier ist mein Code. In einer Unit3 die für die Einstellungen des Pong Spiel gedacht ist wollte ich die Farbe der Schläger verändern. Die Unit2 ist das eigentliche Spiel wo sich die Schläger befinden.

Delphi-Quellcode:
unit Unit3;

interface

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

type
  TfrmOption = class(TForm)
    Label1: TLabel;
    btnSpeichern: TButton;
    dlgColor: TColorDialog;
    Label2: TLabel;
    Label3: TLabel;
    btn1Color: TButton;
    btn2Color: TButton;
    Edit1: TEdit;
    procedure btn1ColorClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmOption: TfrmOption;
  reg: TRegistry;

implementation
uses unit2;

{$R *.DFM}
procedure TfrmOption.FormCreate(Sender: TObject);
begin
reg := TRegistry.Create;

end;
procedure TfrmOption.FormDestroy(Sender: TObject);
begin
        reg.Free;
end;

procedure TfrmOption.btn1ColorClick(Sender: TObject);
begin
        if dlgColor.execute then
                Leftcolor := dlgColor.color;

        if reg.OpenKey('Software\FDAC\Pong', true) then
        begin
                reg.WriteInteger('Leftcolor', Leftcolor);
                reg.CloseKey;
        end;
end;

end.
---------------------------------------

Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls, Menus, MPlayer, ExtDlgs, jpeg,Unit3,Registry;

type
  TfrmPong = class(TForm)
    tmBall: TTimer;
    pnlLeft: TPanel;
    pnlLine: TPanel;
    lblLeftPoint: TLabel;
    lblRightPoint: TLabel;
    pnlRight: TPanel;
    mmMenu2: TMainMenu;
    mmiPause: TMenuItem;
    mmiSound: TMenuItem;
    dlgOpen: TOpenDialog;
    mpWM: TMediaPlayer;
    mmiWMLied: TMenuItem;
    dlgPicture: TOpenPictureDialog;
    imgBall: TImage;
    pnlBottom: TPanel;
    pnlTop: TPanel;
    mmicolor: TMenuItem;
    dlgcolor2: TColorDialog;
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormCreate(Sender: TObject);
    procedure FormClick(Sender: TObject);
    procedure tmBallTimer(Sender: TObject);
    procedure mmiPauseClick(Sender: TObject);
    procedure mmiWMLiedClick(Sender: TObject);
    procedure mmicolorClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmPong: TfrmPong;
  var X,Y,VX,VY:integer;
  var Test:Boolean;
  var FWidth,FHeight:Integer;
  var Leftcolor:integer;


implementation

{$R *.DFM}


procedure TfrmPong.FormCreate(Sender: TObject);
var
  reg: TRegistry;
begin
        reg := TRegistry.Create;
        if reg.OpenKey('Software\FDAC\Pong', false) then
        begin
                if reg.ValueExists('Leftcolor') then
                begin
                        pnlLeft.Color := reg.ReadInteger('Leftcolor');
                end;
        reg.CloseKey
        end;
        reg.Free;
end;

daywalker9 24. Mai 2010 10:54

Re: TColor in reg schreiben
 
Was funktioniert nicht? Mit irgendwas können wir nicht viel anfangen

Chris92 .A 24. Mai 2010 10:57

Re: TColor in reg schreiben
 
sry vergessen die Fehlermeldung hinzuzufügen:
Error:
Project Project1.exe raised execption class ERegistryExecption with message "Failed to get data for 'Leftcolor'. Process stopped.Use Step or Run to Continue.

Diese Fehlermeldung kommt wenn ich Pong starten will.

Matze 24. Mai 2010 11:02

Re: TColor in reg schreiben
 
Hallo,

Du solltest schon angeben, wo sich der Schlüssel in der Registry befindet (HKLM, HKCU, ...). Diese Angabe fehlt bei dir komplett, wenn ich das richtig sehe.
Ob das dein Problem löst, weiß ich nicht, aber mir kommt es aktuell falsch vor.

PS: Das mit den globalen Variablen ist sehr unsauber, aber das ist eine andere Geschichte.

Chris92 .A 24. Mai 2010 11:10

Re: TColor in reg schreiben
 
Also ich hab den Code mit eine Zahl getestet z.b um die Breite zuverändern und da funktioniert der Code. Also am Code selbst glaube ich liegt es nicht. Es liegt meiner Meinung nach dabei den dlgColor.Color in die reg.WriteInteger zuschreiben.

Luckie 24. Mai 2010 11:13

Re: TColor in reg schreiben
 
Zitat:

Zitat von Matze
Du solltest schon angeben, wo sich der Schlüssel in der Registry befindet (HKLM, HKCU, ...). Diese Angabe fehlt bei dir komplett, wenn ich das richtig sehe.

Wird kein Hive angegeben, nimmt Delphi automatisch HKCU.

Chris92 .A 24. Mai 2010 11:15

Re: TColor in reg schreiben
 
ok dann liegt es ja daran nicht ...wisst ihr denn vieleicht eine Lösung wie ich das angehen soll?

daywalker9 24. Mai 2010 11:15

Re: TColor in reg schreiben
 
Hast du denn schon mal per RegEdit geguckt, ob der Wert auch in der Registry steht?

Chris92 .A 24. Mai 2010 11:17

Re: TColor in reg schreiben
 
Nein aber vorher hab ich den den wert von dlgcolor.color mit ColortoString umgewandelt und dann mit reg.writestring reingeschrieben und dann in der anderen Unit in einen Label geschrieben und da kam auch der Farbcode heraus doch beim panel.color wurde der code irgendwie nicht angenommen.

daywalker9 24. Mai 2010 11:19

Re: TColor in reg schreiben
 
Dann guck doch mal ob der Integer Wert auch dort in der Registry steht. Nicht das noch der String dort drin steht

Chris92 .A 24. Mai 2010 11:26

Re: TColor in reg schreiben
 
ok hab ich kontrolliert lag daran dass noch ein string drin stand. Dies hab ich jetzt gelöst trotzdem übernimmt der panel die Farbe immer nocht nicht.

himitsu 24. Mai 2010 11:53

Re: TColor in reg schreiben
 
Zitat:

Zitat von Chris92 .A
Dies hab ich jetzt gelöst trotzdem übernimmt der panel die Farbe immer nocht nicht.

Dann solltest du erstmalprüfen, ob man überhaupt eine Farbe zuweisen kann.

TPanel + aktives XP-Theming = nein

Andreas L. 24. Mai 2010 12:56

Re: TColor in reg schreiben
 
Zitat:

Zitat von himitsu
Zitat:

Zitat von Chris92 .A
Dies hab ich jetzt gelöst trotzdem übernimmt der panel die Farbe immer nocht nicht.

Dann solltest du erstmalprüfen, ob man überhaupt eine Farbe zuweisen kann.

TPanel + aktives XP-Theming = nein

Stimmt nicht ganz. Wenn man ParentBackground auf False setzt wird das Panel trotzdem gefärbt.

Chris92 .A 24. Mai 2010 14:35

Re: TColor in reg schreiben
 
Steht schon auf False. Und geht trotzdem nicht

Luckie 24. Mai 2010 14:39

Re: TColor in reg schreiben
 
Dann zeige uns doch mak den Code zum Auslesen aus der Registry und wie du die Farbe zuweist. Immer nur "geht nicht", bringt uns nicht weiter.

Chris92 .A 24. Mai 2010 14:40

Re: TColor in reg schreiben
 
Wenn du auf die erste hochscrollst da steht der Code

Chris92 .A 24. Mai 2010 14:41

Re: TColor in reg schreiben
 
erste seite*

Luckie 24. Mai 2010 14:46

Re: TColor in reg schreiben
 
OK. Ich dachte, du hättest da noch was geändert. Hast du denn den Code schon mal debuggt und geguckt, ob er in die Verzweigungen überhaupt rein geht? Und wenn nicht, mal den fehler ausgewertet?

Chris92 .A 24. Mai 2010 14:49

Re: TColor in reg schreiben
 
Er geht in die Verzweigung rein da ich sofort darunter eine Kontrolle mache ob der Farbcode überhaupt ausgelesen wird.
Ich schreibe einfach darunter was in reg.ReadInter('LC') steht in ein Label und dort kommt dann der richtige Code heraus.
Denn wenn ich mir den Code kopiere und dann per Hand die Farbe des Panels wechsele geht es.
Es liegt meiner Meinung an der Zeile

pnlLeft.Color := reg.ReadInteger('LC');

Chris92 .A 24. Mai 2010 14:55

Re: TColor in reg schreiben
 
SRY SRY ist meine Schuld ich hatte darunter noch eine Zeile Code stehen die vergessen hatte zu löschen :oops: . Jetzt funktioniert es.


Vielen Dank für die Hilfe

Und nochmals SRY!


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:09 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