Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Brauch Hilfe beim Color Dialog


moerf94 - Di 18.01.11 22:20
Titel: Brauch Hilfe beim Color Dialog
Also Ich muss ein HTML "Wandler" erstellen. Also man soll einen Text im Memofeld1 öffnen, Dann soll per oneclick der text ins HTML format gewandelt werden und im memofeld2 ausgegeben werde. Das klappt schon mal. So hier ist erstmal mein Code und Das Programm:

Code:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Memo2: TMemo;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    ColorDialog1: TColorDialog;
    Button10: TButton;
    procedure Button4Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  private
    { Private-Deklarationen }
       textfarbe:string;

  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button4Click(Sender: TObject);
begin
     form1.close;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
     if opendialog1.Execute then
     memo1.Lines.LoadFromFile(opendialog1.filename);
end;

procedure TForm1.Button9Click(Sender: TObject);
begin
     memo1.Clear;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
     memo2.clear;
     memo2.Lines.Add('<html>');
     memo2.Lines.Add('         <head>');
     memo2.Lines.Add('                  <title> </title>');
     memo2.Lines.Add('         </head>');
     memo2.Lines.Add('         <body text='+ textfarbe +' bgcolor="#FFFFFF">');
     memo2.Lines.Add(memo1.Text);
     memo2.Lines.Add('         </body>');
     memo2.Lines.Add('</html>');
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
     if savedialog1.Execute then
     memo2.Lines.LoadFromFile(opendialog1.filename);
end;

procedure TForm1.Button10Click(Sender: TObject);
begin
     memo2.clear;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
     textfarbe:='"#000000"';
end;


begin
 
end;

end.

So nun zu meinen Problemen ich möchte die rgb werte im body kopf der html seite ändern mit dem dialog colordialoge1. Ich habe für die werte bereits eine variable gesetzt und beim strart setzt er auch den Anfangswert den ich vorgegeben habe. Nun möchte ich das der dialog sich öffnet wenn man auf HTML Hintergrungfarbe drückt und die variable neu setzt. Ich hoffe auf euere hilfe. Danke schon mal im voraus.

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Moderiert von user profile iconMartok: Topic aus Sonstiges (Delphi) verschoben am Di 18.01.2011 um 23:24


Narses - Di 18.01.11 23:28

Moin und :welcome: im Forum!

Bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den Richtlinien [http://www.entwickler-ecke.de/richtlinien.html]:
1.2 Beiträge:
Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.[...]
Einfach oben bei Deinem ersten Beitrag auf user defined image oder user defined image klicken und den Titel ändern. Danke Dir!

cu
Narses


bummi - Mi 19.01.11 00:59


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm1.Button1Click(Sender: TObject);
type
  TColorRec=Record
      Red:Byte;
      Green:Byte;
      Blue:Byte;
      Alpha:Byte;
  end;
var
  textcolor:String;
begin
  if Colordialog1.Execute then
    begin
      textcolor :=  '"#' +IntToHex(TColorRec(Colordialog1.Color).Red,2)
                         + IntToHex(TColorRec(Colordialog1.Color).Green,2)
                         + IntToHex(TColorRec(Colordialog1.Color).Blue,2)
                    +'"';
    end;
end;


jaenicke - Mi 19.01.11 07:43

Oder ganz einfach:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.Button1Click(Sender: TObject);
var
  textcolor: String;
begin
  if Colordialog1.Execute then
  begin
    textcolor := '"#' + IntToHex(GetRValue(Colordialog1.Color), 2)
      + IntToHex(GetGValue(Colordialog1.Color), 2)
      + IntToHex(GetBValue(Colordialog1.Color), 2)
      + '"';
    ...
  end;
end;


moerf94 - Mi 19.01.11 18:07

So das klappt aber ich habe noch ein Problem. So erst mal der Code:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Memo2: TMemo;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    ColorDialog1: TColorDialog;
    Button10: TButton;
    procedure Button4Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
  private
    { Private-Deklarationen }
       textcolor:string;
       bgcolor:string;

  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button4Click(Sender: TObject);
begin
     form1.close;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
     if opendialog1.Execute then
     memo1.Lines.LoadFromFile(opendialog1.filename);
end;

procedure TForm1.Button9Click(Sender: TObject);
begin
     memo1.Clear;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
     memo2.clear;
     memo2.Lines.Add('<html>');
     memo2.Lines.Add('         <head>');
     memo2.Lines.Add('                  <title> </title>');
     memo2.Lines.Add('         </head>');
     memo2.Lines.Add('         <body text='+ textcolor +' bgcolor="#FFFFFF">');
     memo2.Lines.Add(memo1.Text);
     memo2.Lines.Add('         </body>');
     memo2.Lines.Add('</html>');
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
     if savedialog1.Execute then
     memo2.Lines.LoadFromFile(opendialog1.filename);
end;

procedure TForm1.Button10Click(Sender: TObject);
begin
     memo2.clear;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
     textcolor:='"#000000"';
     bgcolor:='"#FFFFFF"';
end;

procedure TForm1.Button5Click(Sender: TObject);
var
   textcolor:String;
begin
  if Colordialog1.Execute then
  begin
    textcolor := '"#' + IntToHex(GetRValue(Colordialog1.Color), 2)
      + IntToHex(GetGValue(Colordialog1.Color), 2)
      + IntToHex(GetBValue(Colordialog1.Color), 2)
      + '"';
      end;
     memo2.clear;
     memo2.Lines.Add('<html>');
     memo2.Lines.Add('         <head>');
     memo2.Lines.Add('                  <title> </title>');
     memo2.Lines.Add('         </head>');
     memo2.Lines.Add('         <body text='+ textcolor +' bgcolor="#FFFFFF">');
     memo2.Lines.Add(memo1.Text);
     memo2.Lines.Add('         </body>');
     memo2.Lines.Add('</html>');
end;

procedure TForm1.Button6Click(Sender: TObject);
var
   bgcolor:String;
begin
  if Colordialog1.Execute then
  begin
    bgcolor := '"#' + IntToHex(GetRValue(Colordialog1.Color), 2)
      + IntToHex(GetGValue(Colordialog1.Color), 2)
      + IntToHex(GetBValue(Colordialog1.Color), 2)
      + '"';
      end;
     memo2.clear;
     memo2.Lines.Add('<html>');
     memo2.Lines.Add('         <head>');
     memo2.Lines.Add('                  <title> </title>');
     memo2.Lines.Add('         </head>');
     memo2.Lines.Add('         <body text='+ textcolor +' bgcolor='+ bgcolor +'>');
     memo2.Lines.Add(memo1.Text);
     memo2.Lines.Add('         </body>');
     memo2.Lines.Add('</html>');

end;

end.


Wenn ich nun eine die Hintergrundfarbe änder möchte, dann setzt Delphi für textcolor wieder denn start wert ein sprich :"#000000".
Kann ich den wert der Variable denn so lange speichern bis er geändert wird oder das Programm geschlossen wird?


elundril - Mi 19.01.11 18:10

Das ist weil du einmal textcolor als lokale und einmal als globale variable definiert hast. Dadurch bevorzugt Delphi immer die lokale, die nach ende der Prozedur gelöscht wird. Lösung: Schmeiß die Lokale definition raus und fertig.

Falls du jetzt nicht weißt das lokale und globale variablen sind:
Christians Crashkurs [http://www.christian-stelzmann.de/index_tutorials_crashkurs.html]
Delphi-Wikibook [http://de.wikibooks.org/wiki/Programmierkurs:_Delphi]

lg elundril


moerf94 - Mi 19.01.11 18:24

Ja super hat geklappt.
Nun möchte ich mein Programm ein Bisschen verbessern dazu möchte ich das man den Code Für ein bild eingeben kann. Also so in etwas das man im memofeld 2 mit dem Cursor an eine stelle spring und dann auf einen Button drückt. Das dann ein Feld geöffnet wird wo man ein bild auswählen kann und wir an der stelle wo der Cursor ist der html code mit den link zur Datei angegeben ist. Geht das überhaupt oder mute ich mir da zuviel zu?


ALF - Do 20.01.11 13:44

user profile iconmoerf94 hat folgendes geschrieben Zum zitierten Posting springen:
Also Ich muss ein HTML "Wandler" erstellen. ....

Machbar ist alles, aber wer kommt auf solche Ideen? Eine Html Seite besteht aber nicht nur aus die paar Zeilen!
Oder jetzt, wie Du es möchtest, noch ein Bild einfügen. Irgendwann kommt text, position und und und, dazu!
Ist halt nur so ne Frage von mir!

Zurück zu Deiner Frage:
Entweder Du erstellst Dir ne neue Form und bastellst Dir einen eigenen Explorer, oder Du rufst in Deinem Prog den Winexplorer dafür auf und mit hilfe von DragDrop, Copy/Paste fügst Du den String an der Stelle ein!

Aber, wie hier und in anderen Foren gilt die Regel:
Neue Frage, neuer Thread :wink:

Gruss Alf