Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Shapes "rund" machen


judomichi - So 27.02.11 11:09
Titel: Shapes "rund" machen
Hallo,

ich habe mich heute hier angemeldet, weil ich denke, das ich hier viele Informationen und Antworten auf meine Fragen bekomme. Wir habe gerade in der Schule mit Delphi (6) Programmierung begonnen. Um zu Hause zu üben habe ich eine alte 6er Version installiert und auch noch auf dem Flohmarkt ein Buch "Delphi 5 lernen" für 1 Euro gekauft.
Die Basiskenntnisse habe ich eigentlich ganz gut drauf, aber jetzt komme ich nicht weiter:

Wir sollen eine Ampelschaltung simulieren. Das habe ich auch fertig. Nur jetzt stören die quadratischen (Edit) Objekte, die ich genommen habe. Würde lieber Kreise nutzen. Die kann ich als Objekt genauso wenig finden, wie z.B. Quadrate, Linien u.s.w.
Ich will statische Objekte in meiner Form haben, denen ich lediglich andere Farben im Programm zuordnen möchte.

Die Sache mit Canvas ist mir (noch) ein wenig zu hoch. Aber wenn es gar nicht anders geht muss ich da wohl ran. Gibt es keine Komponenten "Kreis", die ich wie einen Button in die Form ziehen kann???


Moderiert von user profile iconKha: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am So 27.02.2011 um 11:20
Moderiert von user profile iconNarses: Titel geändert, war: "Vorstellung und gleich eine Frage".


haentschman - So 27.02.11 11:16

Hallo und willkommen...

schau dir mal Shape an.


F34r0fTh3D4rk - So 27.02.11 11:16

Hallo und :welcome:

Bitte wähle das nächste Mal einen aussagekräftigen Titel [http://www.delphi-forum.de/help_schreiben_titel.html&sub=,19,27&popup=1] für deine Frage.
Weiterhin gehört diese Frage vermutlich eher in diese Sparte [http://www.delphi-forum.de/forum_VCL+Visual+Component+Library_6.html], aber das kann ja mal vorkommen. :wink:

Zu deiner Frage: Schau dir mal die Komponente Suche in: Delphi-Forum, Delphi-Library TSHAPE an. Bei dieser lassen sich Farbe und Form einstellen.


judomichi - So 27.02.11 12:00

{ Kommando zurück! Ich habe in den Objekteigenschaften von TShape gefunden das man Shape als stCircle definieren kann. Und damit ist mein problem gelöst!
Vielen Dank für Eure Antworten!}

Ok, danke für den Hinweis! Wenn ich nach Shape suche finde ich da einen Thread der sich mit einer Ampelsteuerung befasst. Das muss ich mir mal genauer ansehen.
Meine Ampelschaltung (nicht mit Timer sondern mit "Schalten" Button funktioniert schon einwandfrei. Für die Ampeln habe ich Shapes genutzt. Nur das die halt quadratisch (20x20) sind und nicht rund. Jetzt nuss ich mal sehen wie ich ein Shape rund bekomme.

Hier mein Source, vielleicht umstendlich, aber wir sollten mit eigenen Prozeduren arbeiten:


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:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Shape1: TShape;
    Shape2: TShape;
    Button2: TButton;
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Edit11: TEdit;
    Edit12: TEdit;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure v_rot();
    procedure v_gruen();
    procedure v_gelb();
    procedure v_rot_del();
    procedure v_gruen_del();
    procedure v_gelb_del();
    procedure h_rot();
    procedure h_gruen();
    procedure h_gelb();
    procedure h_rot_del();
    procedure h_gruen_del();
    procedure h_gelb_del();

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    flag : integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
begin
// flag
// 1= rot
// 3 = gelb
// 4 = rot/gelb
// 5 = grueb


case flag of
   1:    begin;
            v_rot();
            v_gelb();
            v_gruen_del();
            h_rot_del();
            h_gelb();
            h_gruen_del();
            flag := 4;
         end;
   3:    begin;
            v_rot();
            v_gelb_del();
            v_gruen_del();
            h_rot_del();
            h_gelb_del();
            h_gruen();
            flag := 1;
         end;
   4:    begin;
            v_rot_del();
            v_gelb_del();
            v_gruen();
            h_rot();
            h_gelb_del();
            h_gruen_del();
            flag := 5;
         end;
   5:    begin;
            v_rot_del();
            v_gelb();
            v_gruen_del();
            h_rot();
            h_gelb();
            h_gruen_del();
            flag := 3;
         end;
   else  begin
            v_rot();
            v_gelb_del();
            v_gruen_del();
            h_gruen();
            h_rot_del();
            h_gelb_del();
            flag := 1;
         end;
end;

end;

// vertical
procedure tform1.v_rot();
begin;
   edit1.color := clred;
   edit4.color := clred;
end;

procedure tform1.v_gelb();
begin;
   edit2.color := clyellow;
   edit5.color := clyellow;
end;

procedure tform1.v_gruen();
begin;
   edit3.color := cllime;
   edit6.color := cllime;
end;

procedure tform1.v_rot_del();
begin;
   edit1.color := clmenu;
   edit4.color := clmenu;
end;

procedure tform1.v_gelb_del();
begin;
   edit2.color := clmenu;
   edit5.color := clmenu;
end;

procedure tform1.v_gruen_del();
begin;
   edit3.color := clmenu;
   edit6.color := clmenu;
end;

//horizontal
procedure tform1.h_rot();
begin;
   edit7.color := clred;
   edit10.color := clred;
end;

procedure tform1.h_gelb();
begin;
   edit8.color := clyellow;
   edit11.color := clyellow;
end;

procedure tform1.h_gruen();
begin;
   edit9.color := cllime;
   edit12.color := cllime;
end;

procedure tform1.h_rot_del();
begin;
   edit7.color := clmenu;
   edit10.color := clmenu;
end;

procedure tform1.h_gelb_del();
begin;
   edit8.color := clmenu;
   edit11.color := clmenu;
end;

procedure tform1.h_gruen_del();
begin;
   edit9.color := clmenu;
   edit12.color := clmenu;
end;


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

end.


Moderiert von user profile iconKha: Delphi-Tags hinzugefügt


jaenicke - So 27.02.11 12:06

user profile iconjudomichi hat folgendes geschrieben Zum zitierten Posting springen:
Jetzt nuss ich mal sehen wie ich ein Shape rund bekomme.
So viele Eigenschaften hat TShape ja nicht: ;-)
http://docwiki.embarcadero.com/VCL/de/ExtCtrls.TShape_Properties


Narses - So 27.02.11 13:33

Moin und :welcome: im Forum!

user profile iconjudomichi hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich nach Shape suche finde ich da einen Thread der sich mit einer Ampelsteuerung befasst. Das muss ich mir mal genauer ansehen.
Wenn es der Thread ist, von dem ich befürchte, dass er es ist, solltest du besser nochmal suchen... :?

user profile iconjudomichi hat folgendes geschrieben Zum zitierten Posting springen:
Meine Ampelschaltung (nicht mit Timer sondern mit "Schalten" Button funktioniert schon einwandfrei.
Sofern du deinen Code mit einer fertigen Lösung vergleichen möchtest, kannst du ja mal hier reinsehen [http://www.delphi-forum.de/viewtopic.php?p=386112#386112]. :les: :think: ;)

Generell ist eine Ampelschaltung das Paradebeispiel für eine Zustandsmaschine. Hier gibt´s noch ein paar Infos zu der Umsetzung in einer ereignisorientierten Anwendung [http://www.delphi-library.de/topic_auf+Ereignisse+in+FormAnwendungen+warten+AppState+T1_67969.html].

cu
Narses