Entwickler-Ecke
Open Source Projekte - Erdkugel
Mathematiker - Mi 08.07.15 10:40
Titel: Erdkugel
Hallo,
die Darstellung der Erdkugel ist eigentlich sehr, sehr einfach. Hat man die entsprechenden Daten, ist der Rest nur noch die Transformation der Kugelkoordinaten auf die Ebene.
Ich zeige das Beispiel nur, da es vielleicht doch den einen oder anderen gibt, der mal schnell eine Erdkugeldarstellung braucht und ich in der EE nichts gefunden habe oder natürlich falsch gesucht habe.
Im
Matheprogramm [
http://www.entwickler-ecke.de/viewtopic.php?t=114237] nutze ich diese Routine mehrmals.
Evtl. interessiert es auch einen "Anfänger". Es ist aber kein Beispiel für "gute Programmierung". :wink:
Außer der Exe benötigt man die Dateien erde.000 bzw. erde2.000. In denen befinden sich die Koordinaten der Landgrenzen der Erde. Die zweite Datei ergibt einer genauere Darstellung.
Schaltet man auf "transparente Erde" wird auch die verdeckte Halbkugel gezeichnet. Dann kommt es wieder zu einer optischen Täuschung. Dreht sich die Erde dann links herum oder rechts herum?
Beste Grüße
Mathematiker
Revision 1: Mit Äquator, Nullmeridian, Breiten- und Längenkreise.
Revision 2: Mit wahlweiser Neigung der Erdachse.
Ergänzung: Dank der Superhilfe von
Nersgatt und
ub60 gibt es jetzt auch eine Komponente zur Erdkugeldarstellung. In dem Zip-File ist auch ein Demoprogramm.
Komponente:
Revision 1: Mit eigenem Breitenkreis und einstellbaren Abständen zwischen den Breiten- und Längenkreisen.
Revision 2: Im Demoprogramm kann der eigene Breitenkreis gewählt werden. Außerdem sind erste Farben einstellbar.
Revision 3: Weitere Eigenschaften der Komponente und wesentlich erweiterte Demo.
Revision 4: Zeitanzeige in die Komponente eingefügt. Zusätzlich Polarkreise. Demoprogramm überarbeitet.
Delete - Mi 08.07.15 10:58
- Nachträglich durch die Entwickler-Ecke gelöscht -
Delete - Mi 08.07.15 11:05
Lieber Mathematiker,
zeichne doch bitte noch den Greenwich-Meridian (Nullmeridian) und den Äquator dazu.
https://de.wikipedia.org/wiki/Referenzellipsoid
Farben wären auch ganz toll: Wasser blau, Land ocker o.ä.
VIELEN, VIELEN DANK FÜR ALLE DEINE BEITRÄGE !!!
Mathematiker - Mi 08.07.15 15:12
Hallo,
hathor hat folgendes geschrieben : |
... zeichne doch bitte noch den Greenwich-Meridian (Nullmeridian) und den Äquator dazu. |
Danke für den Hinweis. In der Revision 1 kann man nun Nullmeridian, Äquator sowie Breiten- und Längenkreise einzeichnen lassen.
hathor hat folgendes geschrieben : |
Farben wären auch ganz toll: Wasser blau, Land ocker o.ä. |
Hmm, das dauert aber wesentlich länger. Die Idee ist gut, nur werden die Grenzen zwischen Land und Wasser im Moment nicht als Polygone gezeichnet, sondern als Folge von Einzelstrecken. Für das Färben der Wasserflächen muss ich mir etwas einfallen lassen.
Beste Grüße
Mathematiker
Mathematiker - Mi 08.07.15 17:18
Hallo,
hathor hat folgendes geschrieben : |
Die Erdachsenneigung von ca. 23,4° könnte man noch einarbeiten... |
Kein Problem.
In der Revision 2 kannst du jetzt auch die Erdachse um die 23,4° neigen.
Beste Grüße
Mathematiker
Delete - Mi 08.07.15 17:37
- Nachträglich durch die Entwickler-Ecke gelöscht -
Mathematiker - Mi 08.07.15 19:51
Hallo,
Frühlingsrolle hat folgendes geschrieben : |
Der Globus als Komponente wäre sehr interessant.
Würdest du es umsetzen wollen? |
Würde ich schon.
Da ich aber mich aber noch nie mit der Komponentenerstellung beschäftigt habe, muss ich wohl passen.
Wenn sich jemand in der EE "opfert" :wink: , könnte ich noch etwas lernen.
Beste Grüße
Mathematiker
Delete - Mi 08.07.15 20:05
- Nachträglich durch die Entwickler-Ecke gelöscht -
Nersgatt - Do 09.07.15 07:47
In der Anlage mal Deine Erde als Komponente. Ist alles quick and dirty.
Was habe ich gemacht?
Ich habe eine TPaintBox abgeleitet und die Paint-Methode überschrieben. Hier hab ich Deine Berechnungen und die Zeichnroutinen hinein gepackt.
Dann habe ich alles, was Zugriffe auf Steuerelemente des Formulars waren, in Properties umgewandelt. Die können jetzt im Objektinspektor oder im Code gesetzt werden.
Außerdem habe ich den Pfad zur Koordinatendatei zur Property gemacht. Damit kann auch das von außen gesetzt werden.
Dann habe ich ein Beispielprojekt gemacht. Hier hab ich dein Formular genommen und setzt nur noch die Properties der Komponente.
Warum heißt die Komponente "spErde"? Den Präfix "sp" habe ich in Anlehnung Deines Namens verwendet. Wenn Du mehr Komponenten machst, ist es hilfreich, wenn die eigenen Komponenten einen einheitlichen Präfix haben. Das machen die meisten Komponentenhersteller auch (DevExpress heißt z.B. immer Tcx... oder Tdx...).
Erstellt hab ich das mit Delphi XE7, hab leider grade kein Delphi 7 zur Hand. Von daher muss evtl. das dfm-File angepasst werden, damit man das Testprojekt in Delphi 7 öffnen kann.
Mathematiker - Do 09.07.15 08:13
ICH BIN SAUBLÖD!!!! :autsch: :autsch: :autsch: :autsch: Gerade habe ich diesen Beitrag gelöscht! Deshalb noch mal.
Hallo Nersgatt,
Vielen Dank für die Umsetzung als Komponente. Es funktioniert hervorragend. :zustimm: :zustimm: Ich konnte unter D7 die Komponente problemlos installieren.
Jetzt werde ich mir dies genauer ansehen und habe wieder etwas zum Lernen. :dance2:
Beste Grüße
Mathematiker
Mathematiker - Do 09.07.15 14:11
Hallo,
ich habe mir jetzt die Komponente von
Nersgatt angesehen und glaube, das Prinzip verstanden zu haben.
Natürlich musste ich sofort experimentieren.
Deshalb habe ich die Datei erde2.000 erst einmal mit Zlib gepackt und das Ergebnis in Create der Komponente in einer Tstringlist geladen. Das spart das ständige Nachladen der Daten. Wahrscheinlich ist ein Array mit den 32000 Koordinaten noch besser.
Schöner Nebeneffekt: Zieht man die Komponente auf ein Formular, so wird sofort die Erde angezeigt und man kann gezielter die Starteinstellungen festlegen. (veränderte Komponente im Anhang)
Ich hoffe, dass mein Versuch von constructor und destructor richtig sind. Aber die Stringliste muss ja erzeugt und wieder gelöscht werden.
Und nun mein Problem: Es ist immer noch die Datei erde2.c00 notwendig.
In meinem "jugendlichen" :wink: Wahn dachte ich, machst du daraus eine RCDATA-Ressource und fügst sie mit
{$R erde.res}
ein. Dann wird zu Beginn des Programms, wie ich es immer mache, die Ressource in einen Stream geladen und entpackt.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure listedll(liste:tstringlist); var ms1: TResourcestream; ms2: TMemoryStream; begin ms1 := TResourceStream.Create(hinstance,'erde2',RT_RCDATA); try ms2 := TMemoryStream.Create; try DecompressStream(ms1, ms2); liste.LoadFromStream(ms2); finally ms2.Free; end; finally ms1.Free; end; end; |
Und das funktioniert nicht. Die res-Datei wird einfach ignoriert und ist gar nicht in der dcu der Komponente enthalten.
Was mache ich schon wieder falsch?
Beste Grüße
Mathematiker
Nachtrag: Ich habe noch ein paar Starteinstellungen festgelegt und die Eigenschaften Farbe der Landgrenze und Farbe der Kreise ergänzt. Das macht Spaß.
Nachtrag 2: Ich habe noch die Stringliste entfernt und ein Koordinatenfeld eingebaut.
Hinweis: Die korrekte Komponente findet ihr im 1.Beitrag.
Delete - Do 09.07.15 15:41
Hast Du das so o.ä. in das DPR-File eingebunden?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| ... {$R *.RES}
{$R erde2.RES}
begin Application.Initialize; ... |
Mathematiker - Do 09.07.15 17:28
Hallo,
hathor hat folgendes geschrieben : |
Hast Du das so o.ä. in das DPR-File eingebunden? |
Nein, das geht ja nicht.
Die Komponente hat ja kein Projektfile sondern nur eine Unit.
Beste Grüße
Mathematiker
ub60 - Do 09.07.15 18:47
Was spricht denn gegen das Array?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| const Daten : array[0..31386, 0..2] of single= ((5.67, 0.192, 0), (5.36, -0.392, 1), (5.151, -0.887, 1), (5.008, -1.417, 1), (4.776, -1.737, 1), (4.788, -2.199, 1), (4.931, -2.596, 1), (4.952, -2.772, 1), (4.975, -3.004, 1), ... (80.492, 19.763, 1), (80.466, 19.96, 1), (80.417, 19.95, 1), (80.403, 19.96, 1)); |
Habe es eben probiert. Funktioniert gut und schnell.
ub60
Mathematiker - Do 09.07.15 19:28
Hallo,
ub60 hat folgendes geschrieben : |
Was spricht denn gegen das Array? |
Nichts!
Genau das ist es. Die Idee ist super. Vielen Dank! :dance2: :dance2:
Und damit kann die Erdkugel-Komponente ohne zusätzliche Datei auskommen.
Ich werde den ersten Beitrag jetzt um die Komponenten-Dateien und ein Demoprogramm mit der Komponente ergänzen.
Danke Eurer Superhilfe bin ich jetzt doch etwas stolz. "Meine" erste Komponente. :D
Wer sagt eigentlich, dass es in der EE sehr ruhig geworden ist? :P So schnelle Hilfe bekommt man nur hier. :!:
Jetzt kann der Urlaub beginnen! :beer:
Beste Grüße und nochmals vielen Dank
Mathematiker
Mathematiker - Do 09.07.15 19:57
hathor hat folgendes geschrieben : |
Aber ZLIB ändern dauert etwas länger... |
Eigentlich müsste ich mich schämen. :oops: :oops:
Aber heute nicht!
Jetzt ist Party angesagt! :party: :beer: :party: :dunce:
Beste Grüße
Mathematiker
Delete - Do 09.07.15 20:37
Ich habe die Start-Procedure etwas erweitert, weil die Änderung der CheckButtons VOR dem Drehen nicht übernommen wird.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.BDrehungClick(Sender: TObject); begin spERDE3.aequator:=checkequa.checked; spERDE3.Transparent:=checktran.checked; spERDE3.nullmeridian:=checknull.checked; spERDE3.breitenkreise:=checkbkreis.checked; spERDE3.laengenkreise:=checklkreis.checked; spERDE3.erdachse:=checkachse.checked;
timer1.enabled:=not timer1.enabled; if timer1.enabled then BDrehung.caption:='Stopp' else BDrehung.caption:='Drehung'; end; |
ub60 - Do 09.07.15 21:41
Nur mal noch so als Idee:
- Der Greenwich-Meridian und der Äquator könnten eine eigene Farbe erhalten.
- Der eigene Breitenkreis wäre auch ganz interessant (natürlich nur, wenn man nicht vertikal dreht - ansonsten ergibt sich auch ein interessanter Effekt :) ).
ub60
jfheins - Do 09.07.15 22:12
Wenn das jetzt eh schon eine Komponente ist, könntest du auch noch etwas Anti-Aliasing 'reinbringen :D
Konkret hier:
Delphi-Quelltext
1: 2: 3:
| bitmap:=tbitmap.create; bitmap.width:=Self.width; bitmap.height:=Self.height; |
Das Bitmap viermal so groß dimensionieren:
Delphi-Quelltext
1: 2: 3:
| bitmap := Tbitmap.create(); bitmap.width := 2 * Self.width; bitmap.height := 2 * Self.height; |
Und die Ellipse für den Umriss füllen.
Dann zeichnen und am Ende bei
Self.canvas.draw(0,0,bitmap); wieder auf die halbe Größe skalieren. (Wie weiß ich leider gerade auch nicht)
Es könnte sein, dass es dann ruckelt, aber es sollte auch schöner aussehen. Gerade wenn man keine Animation macht, ist das vielleicht schon ein Argument - ggf. einstellbar gestalten.
Das Bitmap solltest du übrigens auch nur einmal erstellen und in einer Property speichern zur Wiederverwendung. Bei jedem Paint Speicher zu allozieren verschwendet ein wenig Performance.
(Wenn das Anti-Aliasing zur Property wird, muss man natürlich bei jeder Änderung ein neues Bitmap erzeugen)
Mathematiker - Do 09.07.15 22:15
Hallo,
ub60 hat folgendes geschrieben : |
Der Greenwich-Meridian und der Äquator könnten eine eigene Farbe erhalten. ... |
Gute Vorschläge.
Ich habe auch schon überlegt und da kam mir so in den Sinn:
Es gibt also noch genug zu tun. :wink:
jfheins hat folgendes geschrieben : |
... könntest du auch noch etwas Anti-Aliasing 'reinbringen :D |
Danke für den Hinweis. Wie gesagt, es gibt noch viel zu tun. :wink:
Beste Grüße
Mathematiker
Nachtrag: In der Revision 1 der Komponente kann man den eigenen Breitenkreis zeichnen und die geografische Breite eingeben. Außerdem sind die Abstände zwischen den Längen- und Breitenkreisen einstellbar.
Mehr wird heute Abend leider nicht mehr.
Delete - Fr 10.07.15 09:04
Erweiterung:
2 Label:
Lokale Zeit (Deutschland bzw. MEZ)
View (ungefähre Zeit des sichtbaren Globusausschnitts)
Weil 1 Stunde ein vierundzwanzigstel einer 360°-Umdrehung ist, wird Timer1.Tag hochgezählt bis 15 und dann eine Stunde addiert.
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:
| procedure TForm1.Timer1Timer(Sender: TObject); var z:integer; myDate1, myDate2 : TDateTime; begin if checkhori.checked then begin z:=spinvert.value; inc(z); Timer1.Tag:= Timer1.Tag+1; if Timer1.Tag=15 then BEGIN inc(H); if H>23 then H:=0; myDate1 := EncodeTime(H,0,0,0); myDate2 := myDate1 + now; Label4.caption:= 'View: '+FormatDateTime('t', myDate2); END; if Timer1.Tag>15 then Timer1.Tag:= 1;
if z>360 then BEGIN z:=0; Label3.caption:= 'Lokal: '+FormatDateTime('t', now); END;
spinvert.value:=z; spERDE3.vertikal:=spinvert.Value; end; if checkvert.checked then begin z:=spinhori.value; inc(z); if z>180 then z:=-180; spinhori.value:=z; spERDE3.horizontal:=spinhori.Value; end; end; |
Mathematiker - Fr 10.07.15 10:18
Hallo,
hathor hat folgendes geschrieben : |
Lokale Zeit (Deutschland bzw. MEZ)
View (ungefähre Zeit des sichtbaren Globusausschnitts) |
Danke für den Hinweis. Ich habe es sofort in die Demo eingebaut. Außerdem kann man nun mehr einstellen.
Ergänzungen der Komponente sind die Wendekreise und die Anzeige des eigenen Ortes.
Beste Grüße
Mathematiker
Delete - Fr 10.07.15 11:02
Ich bin jetzt völlig verwirrt mit den unterschiedlichen Komponenten + Demos.
Kann es sein, dass Du falsche Versionen hochgeladen hast?
SORRY - alles ok.
Der Irrtum wurde durch eine falsche Nummerierung durch Firefox-DL verursacht.
Vorschlag:
Statt Nummern Datum und Zeit anhängen: Beispiel : ErdeKomponente(20150710-11.30)
Mathematiker - Fr 10.07.15 17:38
Hallo,
ich habe noch einmal die Komponente verändert. Zum einen werden auch die Polarkreise gezeichnet, zum anderen habe ich die Zeitanzeige in die Komponente eingefügt.
Die Lokalzeit ist die aktuelle Computerzeit. Die Viewzeit ist die Ortszeit(!) des Ortes, der sich gerade in der Mitte der Darstellung befindet. Allerdings funktioniert dies nur korrekt, wenn die Eigenschaft EigeneZeitzone in der Komponente korrekt eingestellt ist.
Außerdem habe ich noch einmal das Demoprogramm verändert.
So, das war's im Moment. Ich melde mich für ein paar Tage ab.
Beste Grüße
Mathematiker
Delete - Fr 10.07.15 18:46
Schönen Urlaub !!!
....Komm zurück mit vielen, neuen, guten Ideen... :D
Wer die Komponente nicht installieren will, muss nicht viel ändern - es geht auch ohne Installation.
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: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237:
| unit uerde;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, ComCtrls, StdCtrls, Spin, spErde;
type TForm1 = class(TForm) Panel1: TPanel; Timer1: TTimer; BDrehung: TButton; CheckHori: TCheckBox; CheckVert: TCheckBox; Spinhori: TSpinEdit; Label1: TLabel; Label2: TLabel; SpinVert: TSpinEdit; CheckTran: TCheckBox; CheckEqua: TCheckBox; CheckNull: TCheckBox; CheckBkreis: TCheckBox; CheckLKreis: TCheckBox; CheckAchse: TCheckBox; CheckEKreis: TCheckBox; SpinEigen: TSpinEdit; ColorDialog1: TColorDialog; BFarbeL: TButton; BFarbeB: TButton; CheckWende: TCheckBox; Label3: TLabel; Label4: TLabel; SpinELaenge: TSpinEdit; CheckOrt: TCheckBox; Label5: TLabel; SpinBreiteAbstand: TSpinEdit; Label6: TLabel; SpinLaengeAbstand: TSpinEdit; CheckLZeit: TCheckBox; CheckVZeit: TCheckBox; Shape1: TShape; Label7: TLabel; Shape2: TShape; CheckPolar: TCheckBox; procedure BDrehungClick(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure SpinhoriChange(Sender: TObject); procedure FormShow(Sender: TObject); procedure CheckTranClick(Sender: TObject); procedure CheckEquaClick(Sender: TObject); procedure CheckNullClick(Sender: TObject); procedure CheckBkreisClick(Sender: TObject); procedure CheckLKreisClick(Sender: TObject); procedure CheckAchseClick(Sender: TObject); procedure SpinVertChange(Sender: TObject); procedure CheckEKreisClick(Sender: TObject); procedure SpinEigenChange(Sender: TObject); procedure BFarbeLClick(Sender: TObject); procedure BFarbeBClick(Sender: TObject); procedure CheckWendeClick(Sender: TObject); procedure CheckOrtClick(Sender: TObject); procedure SpinELaengeChange(Sender: TObject); procedure SpinBreiteAbstandChange(Sender: TObject); procedure SpinLaengeAbstandChange(Sender: TObject); procedure CheckLZeitClick(Sender: TObject); procedure CheckVZeitClick(Sender: TObject); procedure CheckPolarClick(Sender: TObject); procedure FormCreate(Sender: TObject); private public end;
var Form1: TForm1; spErde1: TspErde; implementation
{$R *.DFM}
procedure TForm1.BDrehungClick(Sender: TObject); begin timer1.enabled:=not timer1.enabled; if timer1.enabled then BDrehung.caption:='Stopp' else BDrehung.caption:='Drehung'; end;
procedure TForm1.Timer1Timer(Sender: TObject); var z:integer; begin if checkhori.checked then begin z:=spinvert.value; inc(z); if z>180 then z:=-180; spinvert.value:=z; sperde1.vertikal:=spinvert.Value; end; if checkvert.checked then begin z:=spinhori.value; inc(z); if z>180 then z:=-180; spinhori.value:=z; sperde1.horizontal:=spinhori.Value; end; end;
procedure TForm1.SpinhoriChange(Sender: TObject); begin if timer1.Enabled and checkvert.checked then exit; sperde1.Horizontal:=spinhori.Value; end;
procedure TForm1.FormCreate(Sender: TObject); begin sperde1:= TspErde.Create(self); sperde1.Parent := Self; sperde1.Align:= alClient; end;
procedure TForm1.FormShow(Sender: TObject); begin form1.DoubleBuffered:=true; sperde1.vertikal:=0; sperde1.horizontal:=15; shape1.Brush.color:=sperde1.LandColor; shape2.Brush.color:=sperde1.KreiseColor; end;
procedure TForm1.CheckTranClick(Sender: TObject); begin sperde1.Transparent:=checktran.checked; end;
procedure TForm1.CheckEquaClick(Sender: TObject); begin sperde1.aequator:=checkequa.checked; end;
procedure TForm1.CheckNullClick(Sender: TObject); begin sperde1.nullmeridian:=checknull.checked; end;
procedure TForm1.CheckBkreisClick(Sender: TObject); begin sperde1.breitenkreise:=checkbkreis.checked; end;
procedure TForm1.CheckLKreisClick(Sender: TObject); begin sperde1.laengenkreise:=checklkreis.checked; end;
procedure TForm1.CheckAchseClick(Sender: TObject); begin sperde1.erdachse:=checkachse.checked; end;
procedure TForm1.SpinVertChange(Sender: TObject); begin if timer1.Enabled and checkhori.checked then exit; sperde1.Vertikal:=spinvert.Value; end;
procedure TForm1.CheckEKreisClick(Sender: TObject); begin sperde1.eigenerkreis:=checkekreis.checked; end;
procedure TForm1.SpinEigenChange(Sender: TObject); begin sperde1.eigenebreite:=spineigen.value; end;
procedure TForm1.BFarbeLClick(Sender: TObject); begin colordialog1.Color:=sperde1.LandColor; if colordialog1.execute then begin sperde1.LandColor:=colordialog1.color; shape1.Brush.Color:=colordialog1.Color; end; end;
procedure TForm1.BFarbeBClick(Sender: TObject); begin colordialog1.Color:=sperde1.KreiseColor; if colordialog1.execute then begin sperde1.KreiseColor:=colordialog1.color; shape2.Brush.Color:=colordialog1.Color; end; end;
procedure TForm1.CheckWendeClick(Sender: TObject); begin sperde1.wendekreise:=checkwende.checked; end;
procedure TForm1.CheckOrtClick(Sender: TObject); begin sperde1.eigenerort:=checkort.checked; end;
procedure TForm1.SpinELaengeChange(Sender: TObject); begin sperde1.eigenelaenge:=spinelaenge.value; end;
procedure TForm1.SpinBreiteAbstandChange(Sender: TObject); begin sperde1.breitenabstand:=spinbreiteabstand.value; end;
procedure TForm1.SpinLaengeAbstandChange(Sender: TObject); begin sperde1.laengenabstand:=spinlaengeabstand.value; end;
procedure TForm1.CheckLZeitClick(Sender: TObject); begin sperde1.Zeitlokal:=checklzeit.checked; end;
procedure TForm1.CheckVZeitClick(Sender: TObject); begin sperde1.Zeitview:=checkvzeit.checked; end;
procedure TForm1.CheckPolarClick(Sender: TObject); begin sperde1.polarkreise:=checkpolar.checked; end;
end. |
Delete - Sa 11.07.15 07:28
Wer die Rotationsgeschwindigkeit ändern will, fügt eine Trackbar hinzu.
Ändert das Timer.Interval von 10 msec bis 240000 = 1 Umdrehung/ 24 Std.
USER_TIMER_MINIMUM (0x0000000A)
USER_TIMER_MAXIMUM (0x7FFFFFFF)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TForm1.TrackBar1Change(Sender: TObject); begin Timer1.Interval:= ABS(TrackBar1.Position); TrackBar1.SelEnd:= TrackBar1.Position; Label8.Caption:= INTTOSTR(Timer1.Interval); end;
procedure TForm1.FormCreate(Sender: TObject); begin sperde1:= TspErde.Create(self); sperde1.Parent := Self; sperde1.Align:= alClient; TrackBar1.Min:= -240000; TrackBar1.Max:= -10; TrackBar1.Position:= -20; TrackBar1.SelEnd:= -10; TrackBar1.SelStart:= -200; Timer1.Interval:= ABS(TrackBar1.Position); TrackBar1.SelEnd:= TrackBar1.Position; Label8.Caption:= INTTOSTR(Timer1.Interval); end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!