https://wiki.freepascal.org/api.php?action=feedcontributions&user=Olaf&feedformat=atom
Lazarus wiki - User contributions [en]
2024-03-29T05:12:49Z
User contributions
MediaWiki 1.35.6
https://wiki.freepascal.org/index.php?title=Template:SizeInt&diff=146811
Template:SizeInt
2021-09-16T10:42:17Z
<p>Olaf: Created page with "{{LanguageBar}}<includeonly>{{CategoriesBySuffixForPage|Data types|Processors}}</includeonly>"</p>
<hr />
<div>{{LanguageBar}}<includeonly>{{CategoriesBySuffixForPage|Data types|Processors}}</includeonly></div>
Olaf
https://wiki.freepascal.org/index.php?title=SizeInt/de&diff=146810
SizeInt/de
2021-09-16T10:40:12Z
<p>Olaf: </p>
<hr />
<div>{{SizeInt}}<br />
<br><br />
Zurück zu den [[Data type/de|Datentypen]].<br><br />
<br><br />
Der [[Data type/de|Datentyp]] '''SizeInt''' ist ein vorzeichenbehafteter ganzzahliger Datentyp.<br><br />
Der Wertebereich des Datentyps ist abhängig von der Plattform für die er kompiliert wird.<br><br />
SizeInt hat immer die Göße, des maximale adressierbaren Speichers der jeweiligen Arcitektur:<br><br />
* 64 Bit auf 64 Bit Plattformen<br />
* 32 Bit auf 32 Bit Plattformen<br />
* 16 Bit auf 16 Bit Plattformen<br />
<br><br />
<br><br />
{{Data_types/de}}</div>
Olaf
https://wiki.freepascal.org/index.php?title=SizeInt/de&diff=146809
SizeInt/de
2021-09-16T10:37:49Z
<p>Olaf: </p>
<hr />
<div>{{Integer}}<br />
<br><br />
Zurück zu den [[Data type/de|Datentypen]].<br><br />
<br><br />
Der [[Data type/de|Datentyp]] '''SizeInt''' ist ein vorzeichenbehafteter ganzzahliger Datentyp.<br><br />
Der Wertebereich des Datentyps ist abhängig von der Plattform für die er kompiliert wird.<br><br />
SizeInt hat immer die Göße, des maximale adressierbaren Speichers der jeweiligen Arcitektur:<br><br />
* 64 Bit auf 64 Bit Plattformen<br />
* 32 Bit auf 32 Bit Plattformen<br />
* 16 Bit auf 16 Bit Plattformen<br />
<br><br />
<br><br />
{{Data_types/de}}</div>
Olaf
https://wiki.freepascal.org/index.php?title=SizeInt/de&diff=146808
SizeInt/de
2021-09-16T10:35:16Z
<p>Olaf: Created page with "{{SizeInt}} <br> Zurück zu den Datentypen.<br> <br> Der Datentyp '''SizeInt''' ist ein vorzeichenbehafteter ganzzahliger Datentyp.<br> Der W..."</p>
<hr />
<div>{{SizeInt}}<br />
<br><br />
Zurück zu den [[Data type/de|Datentypen]].<br><br />
<br><br />
Der [[Data type/de|Datentyp]] '''SizeInt''' ist ein vorzeichenbehafteter ganzzahliger Datentyp.<br><br />
Der Wertebereich des Datentyps ist abhängig von der Plattform für die er kompiliert wird.<br><br />
SizeInt hat immer die Göße, des maximale adressierbaren Speichers der jeweiligen Arcitektur:<br><br />
* 64 Bit auf 64 Bit Plattformen<br />
* 32 Bit auf 32 Bit Plattformen<br />
* 16 Bit auf 16 Bit Plattformen<br />
<br><br />
<br><br />
{{Data_types/de}}</div>
Olaf
https://wiki.freepascal.org/index.php?title=Data_type/de&diff=146807
Data type/de
2021-09-16T04:52:50Z
<p>Olaf: </p>
<hr />
<div>{{Data type}}<br />
<br><br />
Zurück zu den [[Pascal basics/de|Pascal Grundlagen]].<br><br />
<br><br />
=Allgemeines zu Datentypen=<br />
Diese Seite bietet eine Auswahl der Free Pascal Datentypen.<br><br />
Ein '''Datentyp''' ist eine Vorlage für ein [[Data field/de|Datenfeld]].<br><br />
Der Datentyp eines Datenfeldes bestimmt, wie der Inhalt eines Datenfeldes von Compiler und Prozessor zu interpretieren sind.<br><br />
Die [[datatype visibility/de|Sichtbarkeit]] von [[Data field/de|Datenfeldern]] hängt vom Ort Ihrer Bekanntmachung (Deklaration) ab.<br />
<br><br />
<br><br />
<br />
=Ganzzahlige Datentypen=<br />
==Vorzeichenlose Typen==<br />
[[Data field/de|Datenfelder]] vom vorzeichenlosen ganzzahligen Datentyp können nur '''positive''' Ganzzahlen speichern.<br />
* [[UInt8/de|UInt8]] - Wertebereich: (0 .. 255)<br />
* [[Byte/de|Byte]] - Wertebereich: (0 .. 255)<br />
* [[UInt16/de|UInt16]] - Wertebereich: (0 .. 65535)<br />
* [[Word/de|Word]] - Wertebereich: (0 .. 65535)<br />
* [[NativeUInt/de|NativeUInt]] - Wertebereich: prozessorabhängig<br />
* [[DWord/de|DWord]] - entspricht dem Datentyp Longword<br />
* [[Cardinal/de|Cardinal]] - entspricht dem Datentyp Longword<br />
* [[UInt32/de|UInt32]] - Wertebereich: (0 .. 4294967295)<br />
* [[Longword/de|Longword]] - Wertebereich: (0 .. 4294967295)<br />
* [[UInt64/de|UInt64]] - Wertebereich: (0 .. 18446744073709551615)<br />
* [[QWord/de|QWord]] - Wertebereich: (0 .. 18446744073709551615)<br />
<br><br />
<br />
==Vorzeichenbehaftete Typen==<br />
[[Data field/de|Datenfelder]] vom vorzeichenbehafteten ganzzahligen Datentyp können positive '''und''' negative Ganzzahlen speichern.<br />
* [[Int8/de|Int8]] - Wertebereich: (-128 .. 127)<br />
* [[Shortint/de|Shortint]] - Wertebereich: (-128 .. 127)<br />
* [[Int16/de|Int16]] - Wertebereich: (-32768 .. 32767)<br />
* [[Smallint/de|Smallint]] - Wertebereich: (-32768 .. 32767) <br />
* [[Integer/de|Integer]] - Wertebereich: entspricht entweder Smallint oder Longint (kommt auf den eingestellten Compilermodus an)<br />
* [[SizeInt/de|SizeInt]] - Wertebereich: entspricht entweder Smallint, Longint oder Int64 (kommt auf die Plattform an)<br />
* [[Int32/de|Int32]] - Wertebereich: (-2147483648 .. 2147483647)<br />
* [[NativeInt/de|NativeInt]] - Wertebereich: prozessorabhängig<br />
* [[Longint/de|Longint]] - Wertebereich: (-2147483648 .. 2147483647)<br />
* [[Int64/de|Int64]] - Wertebereich: (-9223372036854775808 .. 9223372036854775807)<br />
<br><br />
<br />
=Fliesskommatypen / Fliesspunkttypen=<br />
[[Data field/de|Datenfelder]] die vom Datentyp Fliesskomma sind können:<br />
# positive '''und''' negative Ganzzahlen speichern, wobei es Rundungsfehler geben kann.<br />
# positive '''und''' negative Fliesskommazahlen speichern<br />
<br><br />
* [[Single/de|Single]] - Wertebereich: (1.5E-45 .. 3.4E38)<br />
* [[Real/de|Real]] - Wertebereich: Plattform abhängig<br />
* [[Real48/de|Real48]] - Wertebereich: 2.9E-39 .. 1.7E38<br />
* [[Double/de|Double]] - Wertebereich: (5.0E-324 .. 1.7E308)<br />
* [[Extended/de|Extended]] - Wertebereich: Plattform abhängig<br />
* [[Comp/de|Comp]] - Wertebereich: (-2E64+1 .. 2E63-1)<br />
* [[Currency/de|Currency]] - Wertebereich: (-922337203685477.5808 .. 922337203685477.5807)<br />
<br><br />
<br />
=Boolesche Datentypen=<br />
[[Data field/de|Datenfelder]] vom Datentyp Boolean speichern Wahrheitswerte.<br />
* [[Boolean/de|Boolean]] - Wertebereich: (Wahr, Falsch)<br />
* [[Bytebool/de|Bytebool]] - Wertebereich: (Wahr, Falsch)<br />
* [[Wordbool/de|Wordbool]] - Wertebereich: (Wahr, Falsch)<br />
* [[Longbool/de|Longbool]] - Wertebereich: (Wahr, Falsch)<br />
<br><br />
=Aufzählungstypen (Enumeration Types)=<br />
[[Data field/de|Datenfelder]] vom Datentyp 'Enumeration Type' sind eine Aufzählung ganzzahliger vorzeichenloser Konstanten.<br />
* [[Enum Type/de|Enum Type]] - Wertebereich: (ganzzahlige Datentypen)<br />
<br><br />
=Zeichentypen=<br />
==Zeichentypen, bei denen ein Zeichen durch ein Byte codiert wird==<br />
* [[Char/de|Char]] - feste Länge: 1 Zeichen, Darstellung: 1 Zeichen<br />
* [[Shortstring/de|ShortString]] - maximale Länge: 255 Zeichen<br />
* [[String/de|String]] - maximale Länge: Shortstring oder Ansistring (kommt auf den verwendeten Compilerswitch an)<br />
* [[PChar/de|PChar]] - Zeiger auf einen Nullterminierten String ohne Längenbegrenzung<br />
* [[Ansistring/de|AnsiString]] - keine Längenbegrenzung<br />
* [[PAnsiChar/de|PAnsiChar]] - Zeiger auf einen Nullterminierten String ohne Längenbegrenzung<br />
* Übersicht über die verschiedenen [[Character and string types/de|Character und String Typen]]<br />
<br><br />
<br />
== Zeichentypen, bei denen ein Zeichen durch zwei oder vier Byte codiert wird.==<br />
(Die [[String Encoding/de|Kodierung]] des dargestellten Zeichens durch 2 oder 4 Zeichen ist vom verwendeten Betriebssystem abhängig)<br><br />
* [[Widechar/de|WideChar]] - feste Länge: 2 oder 4 Zeichen, Darstellung: 1 Zeichen<br />
* [[Widestring/de|WideString]] - keine Längenbegrenzung<br />
* [[Pwidechar/de|PWideChar]] - Zeiger auf einen Nullterminierten WideString ohne Längenbegrenzung<br />
* [[Unicodechar/de|UnicodeChar]] - feste Länge: 2 oder 4 Zeichen, Darstellung: 1 Zeichen<br />
* [[Unicodestring/de|UnicodeString]] - keine Längenbegrenzung<br />
* [[Punicodechar/de|PUnicodeChar]] - Zeiger auf einen Nullterminierten UnicodeString ohne Längenbegrenzung<br />
* Übersicht über die verschiedenen [[Character and string types/de|Character und String Typen]]<br />
<br><br />
<br />
=Varianttypen=<br />
*[[Variant/de|Variant]]<br />
*[[Olevariant/de|OleVariant]]<br />
<br><br />
=Konstanten=<br />
*Untypisierte Konstanten<br />
**[[Const/de|Const]] - es können nur einfache Datentypen verwendet werden.<br />
*Typisierte Konstanten<br />
**[[Const/de|Const]] - es können einfache Datentypen sowie Records und Arrays verwendet werden<br />
*Resource Strings<br />
**[[Resourcestring|Resourcestring]] - dient der sprachspezifischen Beschriftung von Menüs (steht nicht in allen Compilermodi zur Verfügung)<br />
<br><br />
<br />
=Strukturtypen=<br />
* [[Array/de|Array]] - die Größe des Array hängt von der Art und der Anzahl der verwendeten Elemente ab<br />
* [[Record/de|Record]] - eine Kombination der obigen Datentypen (zusammengefasst)<br />
* [[Set/de|Set]] - eine Menge von Elementen des Datentyps Char; die Größe des Set hängt von der Anzahl der Elemente ab<br />
<br><br />
<br />
=Teilbereichstypen=<br />
* [[subrange types/de|Teilbereichstypen]] sind eine Untermenge eines Basisdatentyps<br />
<br><br />
<br />
=Zeiger / Pointer=<br />
* [[Pointer/de|Pointer]] - Größe: Longint oder Int64<br />
<br><br />
=Klassen und Objekte=<br />
* [[Object/de|Object]] - unter Turbo Pascal 5.5 für DOS entwickelt und ein Vorläufer des Typs Class<br />
* [[Class/de|Class]] - unter Delphi 1.0 für Windows entwickelt und ist ein Nachfolger des Typs Object<br />
<br><br />
<br><br />
--[[User:Olaf|Olaf]] 17:58, 20 October 2012 (UTC)<br />
{{AutoCategory}}[[Category:Data types/de]]</div>
Olaf
https://wiki.freepascal.org/index.php?title=Lazarus_Documentation/de&diff=118903
Lazarus Documentation/de
2018-08-27T16:24:34Z
<p>Olaf: </p>
<hr />
<div>{{Lazarus Documentation}}<br />
<br />
==Lazarus und Pascal Tutorials==<br />
<br />
*[[Object Pascal Tutorial/de|Object Pascal Tutorial (deutsch)]]<br />
*[[:Category:Tutorials/de|Tutorials (deutsch)]] - Eine Sammlung ausgewählter Tutorials mit einem Schwierigkeitsgrad vom Anfänger- bis zum Expertenniveau<br />
*Es gibt außerdem noch andere Tutorials, nicht hier, sondern in [[Lazarus_Documentation/de#Lazarus_bezogene_Blogs.2C_Websites.2C_Videos.2C_Magazine_und_B.C3.BCcher|Lazarus bezogene Blogs, Websites, Videos, Magazine und Bücher]]<br />
*[http://www.schoolfreeware.com/Free_Pascal_Tutorials.html SchoolFreeware's FreePascal Tutorials] - Von der Befehlszeile (CLI) zur graphischen Benutzeroberfläche (GUI) mit der Lazarus IDE<br />
*[http://wiki.zum.de/Lazarus-Buch Lazarus-Buch auf dem ZUM-Wiki] Der Versuch eines Lehrbuchs für Lazarus, das sich vor allem (aber nicht nur) an Schüler richtet. Es befindet sich auf dem Wiki der Zentrale für Unterrichtsmedien. <br />
<br />
(Siehe auch "Websites", weiter unten auf dieser Seite)<br />
<br />
=== Lazarus/FPC ===<br />
<br />
*[[Overview of Free Pascal and Lazarus/de|Überblick über Free Pascal und Lazarus (deutsch)]] - Eine kurze Diskussion über die Dinge, die Sie mit diesen Werkzeugen entwickeln können<br />
*[[Lazarus Tutorial/de|Lazarus Tutorial (deutsch)]] - Ein Tutorial für Anfänger und eine detaillierte Beschreibung der Lazarus IDE<br />
*[[Form Tutorial/de|Form Tutorial (deutsch)]] - Ein Tutorial für Anfänger für dem Umgang mit Formularen<br />
*[[Lazarus IDE Tools/de|Lazarus IDE Tools (deutsch)]] - Ein Tutorial für Fortgeschrittene über Codevervollständigung und andere IDE-Werkzeuge<br />
*[[Developing with Graphics/de|Grafikprogrammierung (deutsch)]] - Einige einfache Beispiele zur 2D- und 3D-Grafikprogrammierung<br />
*[[OpenGL Tutorial|OpenGL Tutorial (englisch)]] - Wie man OpenGL in Lazarus-Applikationen verwendet<br />
*[[Multimedia Programming|Multimedia Programmierung (englisch)]] - Wie man Videos und Sounds wiedergibt<br />
*[[Office Automation/de|Office Automation (deutsch)]] - Zeigt, wie man Office-Software steuert und Tabellenkalkulationen, Textdokumente, Präsentationen usw. erstellt<br />
*[[Lazarus/FPC Libraries|Lazarus/FPC-Bibliotheken anlegen (englisch)]] - Wie man dynamische Bibliotheken (.so, .dll, .dynlib) erzeugt und wie man sie verwendet<br />
*[[Creating bindings for C libraries|Creating bindings for C libraries (englisch)]] - Wie man C-Headerdateien (.h) in Pascal-Units umwandelt<br />
*[[Console Mode Pascal|Console Mode Pascal (englisch)]] - Benutzung der Lazarus-IDE um Pascal-Programme für Textmodus-Operationen zu schreiben<br />
*[[Lazarus Inline Assembler|Lazarus Inline Assembler (englisch)]] - eine Kurzanleitung<br />
*[[Databases/de|Datenbanken (deutsch)]] - Eine Einführung in die Verwendung von Datenbanken in Lazarus und Links zu anderen Datenbank-Artikeln<br />
*[[SQLdb Tutorial0]] - Set up instructions for sample data for the following database tutorials<br />
*[[SQLdb Tutorial1/de|SQLdb Tutorial 1 (deutsch)]] - Dieses Tutorial hat das Ziel, die Verwendung des SQLdb Packages anhand praktischer Beispiele zu demonstrieren<br />
*[[SQLdb Tutorial1]] - A tutorial that teaches you to get up and running with Lazarus visual components and databases<br />
*[[SQLdb Tutorial2]] - Second part of the DB tutorial series, showing editing, inserting etc. <br />
*[[SQLdb Tutorial3]] - Third part of the DB tutorial series, showing how to program for multiple databases and use a login form <br />
*[[SQLdb Tutorial4]]: Fourth part of the DB tutorial series, showing how to use data modules<br />
*[[SqlDBHowto/de|SqlDBHowto (deutsch)]] - Erläuterungen zur Anwendung von SQLdb zum lesen und schreiben von Daten in relationalen Datenbanken<br />
*[[Lazarus Database Tutorial/de|Lazarus Datenbank Tutorial (deutsch)]] - Eine Einführung zur Verwendung von Lazarus mit Datenbanken und Links zu weiteren Datenbankartikeln<br />
*[[Working With TSQLQuery|Working With TSQLQuery (englisch)]] - An in depth description of using TSQLQuery, having details about using parameters in queries and non-SELECT-queries<br />
*[[Translations / i18n / localizations for programs/de|Übersetzungen / i18n / Lokalisierung von Programmen (deutsch)]] - Wie man lokalisierte Versionen Ihrer Programme und Packages erstellt<br />
*[[Daemons and Services|Daemons and Services (englisch)]] - How to write windows services and/or linux daemons<br />
*[[VirtualTreeview Example for Lazarus|VirtualTreeview Example for Lazarus (englisch)]] - Using VirtualTreeview on Lazarus<br />
<br />
=== Hardware, Threads und Prozesse ===<br />
<br />
*[[Using the printer/de|Using the printer (deutsch)]] - Die Druckerunterstützung in Lazarus<br />
*[[Hardware Access/de|Hardwarezugriff (deutsch)]] - Wie man auf Hardwaregeräte zugreift, wie ISA Karten, PCI Karten, parallele und serielle Schnittstellen und USB Geräte.<br />
*[[Multithreaded Application Tutorial/de|Multithreaded Application Tutorial (deutsch)]] - Wie man Multithreaded-Anwendungen schreibt unter Verwendung von Free Pascal und Lazarus<br />
*[[Executing External Programs/de|Aufruf externer Programme (deutsch)]] - Ein kurzes Tutorial um zu zeigen, wie externe Programme aus Ihrem Programm heraus aufgerufen werden können.<br />
*[[LazDeviceAPIs|LazDeviceAPIs (englisch)]] - Eine LCL-Unit die eine Schnittstelle zu verschiedenen Hardwaregeräten (wie z. B. dem Accelerometer, Senden von SMS, GPS Positionierung, etc.) anbietet.<br />
<br />
=== Dateien ===<br />
<br />
*[[File Handling In Pascal|File Handling In Pascal (englisch)]] - Basic explanations on the use of files, for beginners in pascal<br />
*[[TXMLPropStorage/de|TXMLPropStorage (deutsch)]] - Verwendung von TXMLPropStorage zum Speichern von Benutzereinstellungen<br />
*[[XML Tutorial/de|XML Tutorial (deutsch)]] - lesen und schreiben von XML Dateien<br />
*[[Using INI Files/de|INI-Dateien verwenden (deutsch)]] - Wie Sie unter Pascal mit INI-Dateien arbeiten können<br />
<br />
=== Web ===<br />
<br />
*[[Portal:Web_Development|Web Development Portal]] - How to develop web applications with Lazarus and Free Pascal.<br />
**[[Webbrowser|Webbrowser (englisch)]] - Webbrowser controls<br />
**[[Networking/de|Webprogrammierung und Netzwerkdienste (deutsch)]] - Tutorials über das TCP/IP-Protokoll, WebServices und Links zu Artikel über die Webentwicklung.<br />
<br />
=== Embedded AVR / Arduino ===<br />
* [[AVR Embedded Tutorial/de|AVR Embedded Tutorial (deutsch)]] - Tutorial von der Erstellung des Crosscompilers bis hin zur Ansteuerung der Peripherie (AVR allgemein und Arduino)<br />
* [[AVR|AVR (englisch)]] - Hauptseite zum Target AVR<br />
=== Embedded ARM ===<br />
* [[TARGET Embedded|TARGET Embedded (english)]] - ARM-Embedded<br />
<br />
=== Raspberry Pi ===<br />
<br />
*[[Raspberry Pi - SPI/de|Raspberry Pi - SPI (deutsch)]] - Eine einfache SPI-Unit für den Raspberry Pi<br />
<br />
=== MS-DOS ===<br />
<br />
*[[MS-DOS/de|MS-DOS-Crosscompiler unter Windows (deutsch)]] - Wie richte ich einen MS-DOS Crosscompiler unter Windows ein<br />
<br />
===Plattform-spezifische Tipps===<br />
<br />
*[[Portal:Windows|Windows Portal (englisch)]] - Programmiertipps und Referenzinformationen für Windows Desktop und Windows mobile. <br />
**[[WinCE Programming Tips|WinCE Programming Tips (englisch)]] - Benutzung des Telefon-APIs, Senden von SMS und mehr...<br />
*[[Portal:Linux|Linux Portal (englisch)]] - Programmiertipps und Referenzinformationen für Linux Desktop.<br />
**[[Lazarus on Raspberry Pi/de|Lazarus auf dem Raspberry Pi (deutsch)]] - Installation und Verwendung von Lazarus auf dem Raspberry Pi..<br />
*[[Portal:Android|Android Portal (englisch)]] - Programmiertipps und Referenzinformationen für Android.<br />
**[[Android Programming|Android Programming (englisch)]] - Für Android Smartphones und Tablets.<br />
*[[Portal:Mac|Mac Portal (englisch)]] - Programmiertipps und Referenzinformationen für Mac OS.<br />
**[[OS X Programming Tips|OS X Programming Tips (englisch)]] - Lazarus-Installation, nützliche Tools, Unix-Befehle und mehr...<br />
*[[Portal:iOS|iOS Portal (englisch)]] - Programmiertipps und Referenzinformationen für iOS.<br />
**[[iPhone/iPod development|iPhone/iPod development (englisch)]] - Verwendung von Objekt-Pascal, um iOS-Anwendungen zu entwickeln.<br />
<br />
==Die Lazarus-Benutzerhandbücher==<br />
<br />
*[[Lazarus Faq/de|Lazarus FAQ (deutsch)]] - Allgemeine Informationen über Lazarus und Besonderheiten für Linux- und Windows-Benutzer.<br />
*[[Lazarus DB Faq/de|Lazarus DB FAQ (deutsch)]] - FAQ über Datenbanken in Lazarus.<br />
*[[Feature_Ideas|Wishlist/Wanted Features (englisch)]] - Features, die Sie gern in Lazarus sehen möchten<br />
*[[How do I create a bug report/de|Wie erstelle ich einen Fehlerbericht (deutsch)]] - Sie denken, Sie haben einen Bug in Lazarus gefunden, aber wie melden Sie ihn?<br />
<br />
=== Installation ===<br />
<br />
*[[Getting Lazarus/de|Getting Lazarus (deutsch)]] - Kurze Anleitungen für den Download und die Installation von freigegebenen und SVN-Versionen von Lazarus<br />
*[[Installing Lazarus/de|Installation von Lazarus (deutsch)]] - Ein detailliertes Installationshandbuch<br />
*[[Multiple Lazarus/de|Multiple Lazarus (deutsch)]] - Wie Sie mehrere Lazarus Versionen auf einem Computer installieren<br />
<br />
===IDE===<br />
<br />
*[[IDE tricks/de|IDE Tricks (deutsch)]] - Tips, Tricks und verborgene Features<br />
*[[Lazarus IDE/de|Lazarus IDE (deutsch)]] - Die IDE-Fenster (Onlinehilfe für die IDE)<br />
*[[Lazarus IDE Shortcuts|Lazarus IDE Shortcuts (englisch)]] - The key mapping and shortcuts<br />
*[[Lazarus Packages/de|Lazarus-Packages (deutsch)]] - Ein Handbuch zum Erstellen eines Packages unter Lazarus<br />
*[[Install Packages/de|Installieren von Packages (deutsch)]] - Ein kleines Handbuch zum Installieren von Packages<br />
*[[Extending the IDE/de|Die IDE erweitern (deutsch)]] - Wie man Funktionalität zur Lazarus IDE hinzufügt<br />
*[[Installing Help in the IDE|Installing Help in the IDE (englisch)]] - How to install help for the RTL, FCL and LCL in the IDE, as well as installing the Kylix help files in it and also adding help for user packages<br />
*[[Using Lazarus for other computer languages|Using Lazarus for other computer languages (englisch)]] - How to use the IDE for C, Java, etc.<br />
*[[IDE Development|IDE Development (englisch)]] - Various pages about current development of the IDE<br />
*[[Lazarus for education|Lazarus for education (englisch)]] - How to setup the IDE for courses and beginners<br />
*[[startlazarus|startlazarus (englisch)]] - How the IDE is started.<br />
*[[Unit not found - How to find units/de|Fehlermeldung: Unit not found (deutsch)]] - Der Artikel zeigt, wie man eine Lösung dafür findet<br />
<br />
===LCL===<br />
<br />
*[[doc:lcl/|LCL documentation (englisch)]] - Onlinehilfe für die [[Glossary/de#LCL|LCL]] (in Arbeit)<br />
*[[LazActiveX|LazActiveX (englisch)]] - ActiveX/LazActiveX documentation<br />
*[[TAChart documentation|TAChart documentation (englisch)]] - Standard component for drawing graphs and charts<br />
*[[LCL Components|LCL Components (englisch)]] - Tutorials about the standard LCL components such as TMainMenu, TButton, TComboBox, TTimer, etc. Complements and links to the reference docs<br />
*[[The LCL in various platforms|The LCL in various platforms (englisch)]] - A brief discussion about LCL features which behave differently in different platforms<br />
*[[Autosize / Layout|Autosize / Layout (englisch)]] - How to design forms that work on all platforms<br />
*[[Main Loop Hooks|Main Loop Hooks (englisch)]] - Behandlung von Quellen multipler Ereignisse<br />
*[[Asynchronous Calls|Asynchronous Calls (englisch)]] - Einreihung von Methoden für die spätere Ausführung<br />
*[[File size and smartlinking/de|File size and smartlinking (englisch)]] - Das "Smartlinken" von Programmen und die Erstellung kleinerer Programme.<br />
*[[Accessing the Interfaces directly/de|Accessing the Interfaces directly (englisch)]] - Beispiel für den direkten Zugriff auf die LCL-Widgetsets<br />
*[[Add Help to Your Application/de|Hilfe für eigene Anwendungen erstellen (deutsch)]] - Wie man eine Online-Hilfe für eigene Anwendungen erstellt<br />
*[[Colors/de|Colors (deutsch)]] - Wie eigene Farben und Systemfarben in Lazarus verwendet werden können (zum Beispiel clDefault, clWindow und FPColor aus fpImage)<br />
*[[LCL Tips/de|LCL Tipps (deutsch)]] - Tipps und Tricks für die Lazarus Component Library<br />
*[[LCL Defines|LCL Defines (englisch)]] - Choosing the right options to recompile LCL<br />
*[[Components and Code examples/de|LCL Code Beispiele (deutsch)]] - Code-Beispiele für Lazarus.<br />
*[[Lazarus Custom Drawn Controls|Lazarus Custom Drawn Controls (englisch)]] - A set of custom drawn controls in Lazarus<br />
*[[LCL Accessibility|LCL Accessibility (englisch)]] - Documentation about using making LCL applications accessible<br />
<br />
===Entwicklung===<br />
<br />
*[[The Power of Proper Planning and Practices|The Power of Proper Planning and Practices (englisch)]] - Allgemeine und erprobte Verfahren für den Free-Pascal- und Lazarus-Entwickler<br />
*[[Multiplatform Programming Guide/de|Multiplatform Programming Guide (deutsch)]] - Wie man Cross-Platform-Anwendungen entwickelt und wie man von einer Plattform zu einer anderen portiert<br />
*[[Deploying Your Application|Deploying Your Application (englisch)]] - Wie Sie einen Installer für Ihre Anwendung erzeugen<br />
*[[Cross compiling/de|Cross compiling (deutsch)]] - Erzeugung von ausführbaren Anwendungen für eine Plattform auf einer anderen<br />
*[[GDB Debugger Tips|GDB Debugger Tips (englisch)]] - Known Issues / Tips for debugging Pascal using GDB<br />
*[[Remote Debugging|Remote Debugging (englisch)]] - Wie Sie Ihre Lazarus Anwendung von einer anderen Maschine debuggen<br />
*[[Application Icon/de|Programmicon (deutsch)]] - Ein Icon für Ihr Programm <br />
*[[Using Pascal Libraries with .NET and Mono|Using Pascal Libraries with .NET and Mono (englisch)]] - Ja, Sie können ihren Free Pascal Code mit .NET und Mono verwenden<br />
*[[Pascal and PHP|Pascal and PHP (englisch)]] - the Pascal connection to PHP<br />
*[[Developing Python Modules with Pascal|Developing Python Modules with Pascal (englisch)]] - extending Python with Pascal<br />
*[[Developing Web Apps with Pascal|Developing Web Apps with Pascal (englisch)]] - yes, you can write Rich Internet Applications (RIA) with Pascal<br />
*[[Smartphone Development|Smartphone Development (englisch)]] - About using FPC and Lazarus to target various smartphones<br />
*[[Lazarus Components Directory|Lazarus Components Directory (englisch)]] - A description of extra packages which are shipped with Lazarus, such as support for printers, fpWeb, daemons, etc<br />
<br />
=== Werkzeuge ===<br />
<br />
*[[Lazarus Documentation Editor/de| Lazarus Documentation Editor (deutsch)]] - Benutzung von "lazde" um eine Dokumentation (für Komponenten) zu erstellen.<br />
*[[FPDoc Editor/de|FPDoc Editor (deutsch)]] - Ein integrierter Editor für Dokumentationsdateien<br />
*[[FPDoc Updater|FPDoc Updater (englisch)]] - A GUI tool for updating FPDoc files<br />
*[[lazbuild/de|lazbuild (deutsch)]] - Kompilierung von Projekten und Packages ohne die IDE<br />
*[[LazSVNPkg|LazSVNPkg (englisch)]] - Lazarus Subversion IDE Plugin<br />
*[[InstantFPC|InstantFPC (englisch)]] - run pascal programs as normal unix scripts<br />
<br />
===Wenn Sie von Delphi kommen===<br />
*[[Lazarus Components|Lazarus Components (englisch)]] - Comparison between Lazarus and Turbo Delphi components<br />
*[[Lazarus For Delphi Users/de|Lazarus für Delphi-Benutzer (deutsch)]] - Für Delphi-Benutzer, die gerade mit Lazarus begonnen haben<br />
*[[Code Conversion Guide/de|Code Conversion Guide (deutsch)]] - Wie Sie existierenden Code und Komponenten von Delphi und Kylix konvertieren<br />
*[[Delphi Converter in Lazarus|Delphi Converter in Lazarus (englisch)]] - Convert a Delphi unit, project or package almost automatically<br />
<br />
== Die Lazarus Entwickler-Handbücher ==<br />
*[[Lazarus Development Process|Lazarus Development Process (englisch)]] - Roadmaps, ToDos, current development and what needs to be done for Lazarus 1.0<br />
*[[How To Help Developing Lazarus/de|How To Help Developing Lazarus (deutsch)]] - Ein Handbuch, um Neulingen zu helfen, mit der Verbesserung von Lazarus zu beginnen<br />
*[[Version Numbering/de| Versionsnummerierung (deutsch)]] - Beschreibung der verschiedenen Versionsnummern von Lazarus <br />
*[[Creating A Patch/de| Erstellen eines Patchs (deutsch)]] - Ein Handbuch wie man einen Patch erstellt, der die eigenen Änderungen an Lazarus enthält<br />
*[[Creating a Backtrace with GDB/de| Erstellen einer Ablaufverfolgung mit GDB (deutsch)]] - Ein Handbuch, um eine Ablaufverfolgung zu erstellen, als Hilfe zum Debuggen eines Programms<br />
*[[Nomenclature/de|Nomenklatur (deutsch)]] - Leitfaden für die Auswahl eines Namens für einen Bezeichner, eine neue Methode oder Eigenschaft<br />
*[[DesignGuidelines/de|Design-Richtlinien (deutsch)]] - Programmierungsrichtlinien für Lazarus.<br />
*[[GUI design/de|GUI Design (deutsch)]] - Notizen über die Richtlinien beim Entwerfen des Lazarus [[Glossary#GUI|GUI]]<br />
*[[Roadmap|Roadmap (englisch)]] - An idea of the current status of the various parts of Lazarus<br />
*[[Moderating the bug tracker/de|Moderieren des Bugtrackers (deutsch)]] - Richtlinien für Lazarus Entwickler und Moderatoren für den Gebrauch des [http://www.freepascal.org/mantis/ bug tracker].<br />
*[[Codetools/de|Codetools (deutsch)]] - Wie die Codetools in die IDE integriert sind<br />
*[[Creating IDE Help/de|Creating IDE Help (deutsch)]] - Wie man die IDE Hilfe erweitert<br />
*[[How_To_Make_Lazarus_Docs/de|How To Make Lazarus Docs (deutsch)]] - Wie man Hilfe für die IDE erzeugt<br />
*[[Distributing Lazarus - Installers|Distributing Lazarus - Installers (englisch)]] - Hints and notes for packagers who want to write an installer for Lazarus<br />
*[[Bounties/de|Bounties (deutsch in Übersetzung)]] - Brauchen Sie eine bestimmte neue Funktion?<br />
<br />
===LCL - Lazarus Component Library===<br />
Die folgenden Artikel tauchen tiefer in die Entwicklung für die/mit der LCL ein. Siehe auch den Abschnitt "LCL" für Benutzer oben.<br />
*[[How To Write Lazarus Component|How To Write Lazarus Component (englisch)]] - a helpful guide to creating your first LCL component.<br />
*[[LCL Messages|LCL Messages (englisch)]] - Handbuch über LCL-Meldungen.<br />
*[[LCL Internals|LCL Internals (englisch)]] - Informationsdetails und Erstellung eines neuen Widgetsets<br />
*[[LCL Key Handling|LCL Key Handling (englisch)]] - Hilfe! Ein Tastendruck, was jetzt?<br />
*[[LCL Internals - Resizing, Moving|LCL Internals - Resizing, Moving (englisch)]] - How the LCL communicates with the LCL interface to resize, move controls<br />
*[[LCL Drag Drop|LCL Drag Drop (englisch)]] - Managing dragging, dropping and docking<br />
*[[LCL Unicode Support/de|LCL Unicode Support (deutsch)]] - Ein Weg zum Unicode fähigen Lazarus<br />
*[[LCL Documentation Roadmap|LCL Documentation Roadmap (englisch)]] - Welche Units noch dokumentiert werden müssen<br />
*[[LCL Bindings|LCL Bindings (englisch)]] - Bindings to use LCL on other languages<br />
<br />
===Schnittstellen===<br />
{{Interfaces}}<br />
<br />
===Übersetzung/Internationalisierung===<br />
Diese Artikel beschreiben, wie Sie die IDE, LCL und Ihre eigenen Programme mit übersetzten/lokalisierten Zeichenketten einrichten und wie Sie diese internationalisieren (z.B. mit Datumsformaten, Dezimaltrennzeichen etc.):<br />
* [[Translations_/_i18n_/_localizations_for_programs|Translations / i18n / localizations for programs]] How to translate your application and how to load translated resourcestrings of projects and packages in your application.<br />
* [[Getting translation strings right/de|Wie man Übersetzungsstrings richtig hinbekommt]] Einige Notizen für Programmierer, wie Sie übersetzbare Zeichenketten in Ihrer Anwendung erstellen und benutzen. Kurz werden generelle Dinge über das Erstellen von Zeichenketten diskutiert, es werden einige Tipps angeboten zu Implementierungsproblemen und einige Dinge aufgezeigt, die berücksichtigt werden müssen, wenn Englisch als Basissprache im besonderen verwendet wird.<br />
* '''Lokalisierungsnotizen:'''<br />
:* [[German localization notes|Deutsch]] - Notizen und Richtlinien zum Übersetzen der Lazarus IDE ins Deutsche, inklusive eines kleinen Wörterbuches zum Nachschlagen häufig benutzter Übersetzungen.<br />
:* [[Portuguese-Brazilian Localization Notes|Portugiesisch-Brasilianisch]] - Ein kleines Wörterbuch mit gebräuchlichen Übersetzungen von Ausdrücken, die in der Lazarus IDE für die Portugiesisch-Brasilianische Übersetzung verwendet werden.<br />
:* [[Russian localization notes|Russisch]] - Notizen und Richtlinien zum Übersetzen der Lazarus IDE ins Russische.<br />
<!-- *[[TO-DO]] Verbleibende Aufgaben --><br />
* [[Help:Add language bar/de]] beschreibt, wie Sie die Sprachenauswahlzeile mit den verfügbaren Sprachen am Kopf einer Wiki-Seite erzeugen können.<br />
*[[Translations_/_i18n_/_localizations_for_programs/de#Übersetzen_der_IDE|Übersetzen der IDE ]]<br />
<br />
==Zusätzliche Komponenten==<br />
*[[Project Templates]] - the package projtemplates<br />
*[[Pascal Script]] and [[Pascal Script Examples]] - How to use the pascal script components in Lazarus<br />
*[[OpenGL]] - How to use OpenGL in Lazarus<br />
*[[KOL-CE]] - Free Pascal/Lazarus port of KOL&MCK library. How to create very compact applications for Win32/WinCE in Lazarus.<br />
*[[How To Write Lazarus Component]] for more component info<br />
<br />
==Free Pascal Compiler Dokumentation==<br />
Im Nachgang zu [http://lazarus-ccr.sourceforge.net/fpcdoc/ fpcdoc], ist die neueste Version der Dokumentation auch online zu finden in einer Auswahl von downloadbaren Formaten auf der Haupt- [http://www.freepascal.org/docs.html Free Pascal Compiler Seite].<br />
<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/user/user.html Benutzerhandbuch]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/prog/prog.html Programmer's guide]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/ref/ref.html Reference guide für die System-Unit und unterstützte Pascal-Konstrukte]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/rtl/index.html Run-Time Library Referenzhandbuch]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/fcl/index.html Free Component Library Referenzhandbuch]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/fpdoc/fpdoc.html Free Pascal documentation tool Handbuch]<br />
*[[Build messages]]<br />
<br />
==Besondere Themen==<br />
*[[Databases]]<br />
*[[Portal:SciTech|SciTech Portal]] - Lazarus and Free Pascal for Science, medicine and technology.<br />
<br />
==Lazarus bezogene Blogs, Websites, Videos, Magazine und Bücher==<br />
<br />
===Blogs===<br />
<br />
*[http://lazarus-dev.blogspot.com/ Lazarus Development] - A blog of Lazarus developers regards development process.<br />
*[[Adventures of a Newbie]] - A blog of a newbie getting started with some tutorial information in a running log.<br />
*[http://lazarusroad.blogspot.com/ On the road with Lazarus/Free Pascal] - A blog dedicated to register my experiences while programming with Lazarus and Free Pascal (by Luiz Américo)<br />
*[http://port2laz.blogspot.com/ Porting to Lazarus] - This blog describes the porting of a medium-sized application (~100 kloc) from D7 with CLX to Lazarus (by Alexsander da Rosa)<br />
*[http://living-lazarus.blogspot.com/ Living Lazarus] - One man's exploration into the possibilities of an open source RAD (by [[User:Wibblytim|Wibblytim]]).<br />
*[http://beeography.wordpress.com/tag/object-pascal/ Bee.ography] just (another) Bee’s buzz!<br />
*[http://donaldshimoda.blogspot.com/ Parallel Pascal Worlds] Donald Shimoda.<br />
*[http://devblog.brahmancreations.com/content/observations-on-freepascal-and-lazarus-development Observations on FreePascal and Lazarus Development] <br />
*[http://www.lazarussupport.com/lazarus/weblog Lazarussupport] - A blog about Lazarus and Free Pascal in general - Joost van der Sluis<br />
<br />
===Websites===<br />
Diese Websites behandeln FreePascal, Lazarus oder beides - oder sie behandeln Konzepte von Delphi, die auch auf Lazarus/FPC anwendbar sind:<br />
*[pp4s.co.uk] Lazarus (and Delphi) getting started information, tutorials. Useful for beginners.<br />
*[http://mercury.it.swin.edu.au/swinbrain/index.php/Pascal#Pascal_Development_Tools Pascal - SwinBrain] - Unique free pascal tutorial and documentation at Swinburne University<br />
*[http://sheepdogguides.com/lut/ Lazarus Programming] A series of tutorials to get beginners started. Limited "how to install" material. From SheepdogSoftware.co.uk<br />
*[[Object Pascal Tutorial]] ''Wiki version'' - [http://www.taoyue.com/ Tao Yue's] [http://www.taoyue.com/tutorials/pascal/ Pascal Tutorial] (reposted with permission).<br />
*[http://sheepdogguides.com/tut.htm Delphi Tutorials Arranged in Groups, by Difficulty] An accumulation of material from many years. Topics range from "Hello World" to using Dallas 1-Wire to TCP/IP. The ones I've tried port to Lazarus without hassle.<br />
<br />
<br />
Chinese:<br />
*[http://www.fpccn.com/ Community for Free Pascal and Lazarus in Chinese.] - Community, forums, source code and demos in Chinese.<br />
<br />
Dutch:<br />
*[http://www.econ.kuleuven.ac.be/tew/academic/infosys/MEMBERS/VTHIENEN/] - Homepage of professor teaching programming courses with Pascal. See his links to Pascal exercises/solutions (e.g. [http://www.econ.kuleuven.ac.be/tew/academic/infosys/MEMBERS/VTHIENEN/pasoef.htm])<br />
<br />
French:<br />
*[http://pascal.developpez.com/ Pascal - Club d'entraide des développeurs francophones] - Francophone community about Pascal.<br />
<br />
Spanish:<br />
*[http://aprendepascal.wikidot.com Programando en Pascal] - Spanish tutorial focused on FPC/Lazarus, hosted in Wikidot.<br />
*[http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Indice.html Pascal con FreePascal] - Spanish tutorial focused only FPC (Linux & Windows).<br />
*[http://www.conoce3000.com/html/espaniol/Apuntes/2012-07-17-EditorSimpleLazarus01/EditorSimpleLazarus01.html Simple Editor UTF8] How to make a UTF8 editor on Linux with Lazarus? (Spanish)<br />
<br />
Deutsch:<br />
*[http://anieden.blogspot.com/search/label/Free%20Pascal Axels Fundgrube] – Kurze Artikel zu Free Pascal von Axel Niedenhoff.<br />
*[http://www.delphipraxis.net/forum.php Delphi Praxis] - Hier findet man Hilfe für Delphi und Lazarus / Free Pascal<br />
<br />
===Videos===<br />
* Siehe [[Lazarus videos|Lazarus videos]]<br />
<br />
===Books===<br />
* Siehe [[Pascal and Lazarus Books and Magazines]]<br />
<br />
==Konferenzen über Lazarus und Free Pascal==<br />
* Siehe [[Conferences and Events]]<br />
<br />
==Fehlende Dokumentation?==<br />
Falls Sie eine bestimmte Dokumentation für Lazarus oder FreePascal vermissen, können Sie diese auch selbst schreiben und an den Lazarus/FPC Bugtracker übermitteln.<br />
Werfen Sie einen Blick in:<br />
*[[FPDoc Editor]] Der eingebaute Dokumentationseditor von Lazarus. Diese Seite erklärt, wie Sie die Quellen der fpdoc-Hilfe erhalten und wie Sie Ihre eigene Hilfe schreiben.<br />
<br />
{{AutoCategory}}<br />
[[Category:Main/de]]<br />
[[Category:Lazarus/de]]</div>
Olaf
https://wiki.freepascal.org/index.php?title=TMemo/de&diff=111671
TMemo/de
2017-08-27T14:42:39Z
<p>Olaf: </p>
<hr />
<div>{{TMemo}}<br />
<br />
Diese Seite erklärt, wie man die [[doc:lcl/stdctrls/tmemo.html|TMemo]] Komponente verwendet. Auf etwas klicken bedeutet immer ein Linksklick, ein Rechtsklick wird explizit erwähnt.<br />
<br />
==Beschreibung==<br />
<br />
Ein Steuerelement um mehrzeilige Texte zu editieren.<br />
<br />
[[image:Comp_Standard_TMemo.png]]<br />
<br />
==Verwendung==<br />
<br />
Um ein [[doc:lcl/stdctrls/tmemo.html|TMemo]] auf einem [[TForm/de|Formular]] zu nutzen, kann man es einfach auf der Komponentenpalette ''Standard'' auswählen und, mit einem Klick auf das Formular, platzieren. In diesem Textfeld können Sie nun zur Laufzeit einen mehrzeiligen Text bearbeiten.<br><br />
<br><br />
Haben Sie zum Beispiel zu Ihrem Formular ''Form1'' ein TMemo ''Memo1'' hinzugefügt, können Sie mit '''<code>Memo1.Text:='Das ist ein einzeiliger Text';</code>''' dem Textfeld einen [[String/de|String]] zuweisen.<br><br />
Ebenso können Sie überall im Quelltext auf den hinterlegten Text mit '''<code>myString:=Memo1.Text;</code>''' zugreifen.<br />
<br><br />
Möglich ist es auch, einen mehrzeiligen Text ''Memo1'' zuzuweisen mit '''<code>Memo1.Text:='Das'+LineEnding+'ist'+LineEnding+'ein'+LineEnding+'mehrzeiliger'+LineEnding+'Text';<br />
</code>'''.<br><br />
<br />
===Zuweisung eines TStrings oder TStringList===<br />
<br />
Üblich, um einem TMemo einen Text zuzuweisen, ist die Verwendung einer [[TStringList-TStrings Tutorial/de|TStringList]] oder ihres Vorfahrens [[TStringList-TStrings Tutorial/de|TStrings]]. Folgendes kleines Beispiel zeigt dies (im Eventhandler eines in ''Form1'' eingefügten TButtons ''Button1'' und einem TMemo ''Memo1''):<br />
<syntaxhighlight><br />
procedure TForm1.Button1Click(Sender: TObject);<br />
var<br />
myStringList: TStringList;<br />
begin<br />
myStringList:=TStringList.Create; //Meine StringList erstellen<br />
myStringList.Add('Das ist die erste Zeile.'); //dieser eine Zeile zufügen<br />
myStringList.Add('Das ist die zweite Zeile.');<br />
myStringList.Add('Das ist die dritte Zeile.');<br />
myStringList.Add('usw.');<br />
Memo1.Lines.Assign(myStringList); //dem Memo1 den Textinhalt meine StringList zuweisen<br />
myStringList.Free; //Meine StringList im Speicher wieder freigeben<br />
end;<br />
</syntaxhighlight><br />
<br />
===Zeilen direkt einfügen===<br />
<br />
Sie können dem Memo den Inhalt auch direkt zufügen z.B.:<br />
<syntaxhighlight><br />
procedure TForm1.Button1Click(Sender: TObject);<br />
begin<br />
Memo1.Lines.Clear; //alle Zeilen von Memo1 löschen<br />
Memo1.Lines.Add('Das ist die erste Zeile.'); //Zeile hinzufügen<br />
Memo1.Lines.Add('Das ist die zweite Zeile.');<br />
Memo1.Lines.Add('Das ist die dritte Zeile.');<br />
Memo1.Lines.Add('usw.');<br />
end;<br />
</syntaxhighlight><br />
<br />
===Eine Zeile auslesen===<br />
<br />
Wollen Sie wissen, was in einer bestimmten Zeile steht, können Sie diese direkt auslesen mit '''<code>myString:=Memo1.Lines[Index];</code>'''. Achtung: der Index von ''TMemo.Lines'' ist nullbasiert, d.h. die erste Zeile wäre: '''<code>myString:=Memo1.Lines[0];</code>'''<br />
<br />
Fügen Sie dem vorhergehenden Beispiel noch einen TButton ''Button2'' hinzu, können Sie sich die dritte Zeile wie folgt ausgeben lassen: <br />
<syntaxhighlight><br />
procedure TForm1.Button2Click(Sender: TObject);<br />
begin<br />
ShowMessage(Memo1.Lines[2]);<br />
end;<br />
</syntaxhighlight><br />
<br />
===Bestimmte Zeile(n) löschen===<br />
<br />
Sie können im Memo Zeilen mit einem bestimmten Inhalt direkt löschen: <br />
<syntaxhighlight><br />
procedure subZeileLoeschen(AMemo: TMemo; AString: String);<br />
var intIndex: Integer;<br />
begin<br />
<br />
intIndex := 0;<br />
<br />
while intIndex < AMemo.Lines.Count do<br />
begin<br />
// Enthält die aktuelle Zeile den gesuchten Text,<br />
// dann lösch die Zeile und erhöhe nicht den Index<br />
if (AnsiContainsStr(AMemo.Lines[intIndex], AString)) then<br />
AMemo.Lines.Delete(intIndex)<br />
else<br />
Inc(intIndex); // erhöhe den Index<br />
end;<br />
<br />
end;<br />
</syntaxhighlight><br />
<br />
===Textmarkierung===<br />
<br />
Sie können zur Laufzeit Textteile markieren, indem Sie die linke Maustaste gedrückt halten oder die [Shift]-Taste gedrückt halten und mit der Maus oder Tastatur den Text selektieren. Diesen Text ([[String/de|String]]) können Sie dann zum Beispiel so ausgeben:<br />
<syntaxhighlight><br />
procedure TForm1.Button2Click(Sender: TObject);<br />
begin<br />
ShowMessage(Memo1.SelText); <br />
end;<br />
</syntaxhighlight><br />
<br />
===Text suchen===<br />
<br />
Entgegen dem vorherigen Beispiel können Sie auch einen Text ([[String/de|String]]) in einem TMemo suchen und sich die Stelle, wo sich der Text befindet mit '''<code>Stelle:=Memo1.SelStart;</code>''' zurückgeben lassen.<br />
<br />
Folgendes kleines Beispiel zeigt, wie Sie einen Text in einem Memo suchen und weitersuchen können:<br />
* Erstellen Sie eine neue Anwendung, mit einem [[TEdit/de|TEdit]] ''Edit1'', einem TMemo ''Memo1'' und zwei [[TButton/de|TButtons]] ''Button1'' und ''Button2''.<br />
* Ergänzen Sie die Uses-Klausel um die [[Unit/de|Units]] ''LCLProc'' und ''strutils''.<br />
* Füllen Sie im Eventhandler ''OnClick'' von ''Button1'' das Memo mit einem beliebigen Text, wie im Beispiel [[TMemo/de#Zeilen direkt einfügen|Zeilen direkt einfügen]].<br />
* Fügen Sie im Quelltexteditor folgende Funktion zu (angelehnt an das [http://www.lazarusforum.de/viewtopic.php?p=39260#p39260 Beispiel] aus dem deutschen Lazarusforum):<br />
<syntaxhighlight><br />
// FindInMemo: gibt die Stelle zurück, wo der zu suchende String gefunden wurde<br />
function FindInMemo(AMemo: TMemo; AString: String; StartPos: Integer): Integer;<br />
begin<br />
Result := PosEx(AString, AMemo.Text, StartPos);<br />
if Result > 0 then<br />
begin<br />
AMemo.SelStart := UTF8Length(PChar(AMemo.Text), Result - 1);<br />
AMemo.SelLength := Length(AString);<br />
AMemo.SetFocus;<br />
end;<br />
end;<br />
</syntaxhighlight><br />
* Ergänzen Sie nun noch im Eventhandler ''OnClick'' von ''Button2'' folgenden Code:<br />
<syntaxhighlight><br />
procedure TForm1.Button2Click(Sender: TObject);<br />
const<br />
SuchStr: String = ''; // Der zu suchende String<br />
SuchStart: Integer = 0; // Letzte Fundstelle des zu suchenden Strings<br />
begin<br />
if SuchStr <> Edit1.Text then begin // Falls sich der zu suchende String geändert hat<br />
SuchStart := 0;<br />
SuchStr := Edit1.Text;<br />
end;<br />
SuchStart := FindInMemo(Memo1, SuchStr, SuchStart + 1);<br />
<br />
if SuchStart > 0 then<br />
Caption := 'Bei Memo1.SelStart['+IntToStr(SuchStart)+'] gefunden!'<br />
else<br />
Caption := 'Keine weiteren Funde!';<br />
end;<br />
</syntaxhighlight><br />
* Nun können Sie zur Laufzeit mit ''Button1'' das Memo mit einem Text füllen, den zu suchenden Text in ''Edit1'' einfügen und mit ''Button2'' diesen im Memo suchen bzw. weitersuchen.<br />
<br />
===Speichern und Laden===<br />
<br />
Sie können den Inhalt eines Memos recht einfach Speichern und Laden, indem Sie die Methoden ''SaveToFile'' und ''LoadFromFile'' der Klasse [[TStringList-TStrings Tutorial/de|TStrings]] nutzen.<br />
<br />
Folgendes Beispiel zeigt Ihnen wie:<br />
* Erstellen Sie eine neue Anwendung, mit einem TMemo ''Memo1'' und drei [[TButton/de|TButtons]] ''Button1'', ''Button2'' und ''Button3''.<br />
* Legen Sie zusätzlich noch ein [[TSaveDialog]] und einen [[TOpenDialog]] von der Komponentenpalette ''Dialogs'' auf dem Formular ab.<br />
* Caption von ''Button1'' ändern Sie zu ''Memo füllen''.<br />
* Im Eventhandler ''OnClick'' von ''Button1'' befüllen Sie das Memo mit einem beliebigen Text, wie im Beispiel [[TMemo/de#Zeilen direkt einfügen|Zeilen direkt einfügen]].<br />
* Caption von ''Button2'' ändern Sie zu ''Memo speichern''.<br />
* Caption von ''Button3'' ändern Sie zu ''Memo laden''.<br />
* nun ändern Sie noch die Eventhandler ''OnClick'' der Buttons: <br />
<syntaxhighlight><br />
procedure TForm1.Button2Click(Sender: TObject);<br />
begin<br />
if SaveDialog1.Execute then<br />
Memo1.Lines.SaveToFile(SaveDialog1.FileName);<br />
end;<br />
<br />
procedure TForm1.Button3Click(Sender: TObject);<br />
begin<br />
if OpenDialog1.Execute then<br />
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);<br />
end; <br />
</syntaxhighlight><br />
<br />
==Siehe auch==<br />
<br />
[[RichMemo|TRichMemo]] - Entspricht Delphi TRichEdit Komponente: formatierte Texte (farbig, Größe etc.)<br><br />
[[TListBox/de|TListBox]] - Eine scrollbare Liste von Strings<br />
<br />
<br />
{{LCL Components/de Footer |TEdit/de|TToggleBox/de}}<br />
{{LCL Components/de}}<br />
<br />
[[Category:LCL/de]]<br />
[[Category:Components/de]]<br />
{{AutoCategory}}<br />
--[[User:Michl|Michl]] 10:22, 19 May 2014 (CEST)</div>
Olaf
https://wiki.freepascal.org/index.php?title=Pi/de&diff=105310
Pi/de
2016-11-20T19:17:04Z
<p>Olaf: </p>
<hr />
<div>{{Pi}}<br />
<br><br />
&#960; ist das Verhältnis des Umfangs eines Kreises zu seinem Durchmesser.<br><br />
Der Wert von &#960; ist in etwa 3,14159265358979.<br><br />
Der Umfang eines Kreises wird enweder mit<br><br />
U = &#960; (2 * r)<br><br />
oder mit<br><br />
U = &#960; * d<br><br />
berechnet.<br><br />
<br><br />
In Pascal ist pi eine Funktion, die den Wert von &#960; zurückgibt.<br><br />
<br><br />
&#960;/4 ist das gleiche wie arctan(1).<br><br />
<br><br />
<br><br />
[[User:Olaf|Olaf]] 20:06, 20 November 2016 (CET)<br />
[[Category:Pascal/de]]</div>
Olaf
https://wiki.freepascal.org/index.php?title=Pi/de&diff=105309
Pi/de
2016-11-20T19:07:02Z
<p>Olaf: </p>
<hr />
<div>{{Pi}}<br />
<br><br />
&#960; ist das Verhältnis des Umfangs eines Kreises zu seinem Durchmesser.<br><br />
Der Wert von &#960; ist in etwa 3,14159265358979.<br><br />
Der Umfang eines Kreises wird enweder mit<br><br />
U = 2 * &#960; * r<br><br />
oder mit<br><br />
U = &#960; * d<br><br />
berechnet.<br><br />
<br><br />
In Pascal ist pi eine Funktion, die den Wert von &#960; zurückgibt.<br><br />
<br><br />
&#960;/4 ist das gleiche wie arctan(1).<br><br />
<br><br />
<br><br />
[[User:Olaf|Olaf]] 20:06, 20 November 2016 (CET)<br />
[[Category:Pascal/de]]</div>
Olaf
https://wiki.freepascal.org/index.php?title=Pi/de&diff=105308
Pi/de
2016-11-20T19:06:09Z
<p>Olaf: </p>
<hr />
<div>{{Pi}}<br />
<br><br />
&#960; ist das Verhältnis des Umfangs eines Kreises zu seinem Durchmesser.<br><br />
Der Wert von &#960; ist in etwa 3,14159265358979.<br><br />
Der Umfang eines Kreises wird enweder mit<br><br />
U = 2 * &#960; * r<br><br />
oder mit<br><br />
U = &#960; * d<br><br />
berechnet.<br><br />
<br><br />
In Pascal ist pi eine Funktion, die den Wert von &#960; zurückgibt.<br><br />
<br><br />
&#960;/4 ist das gleiche wie arctan(1).<br><br />
<br><br />
<br><br />
[[User:Olaf|Olaf]] ([[User talk:Olaf|talk]]) 20:06, 20 November 2016 (CET)<br />
[[Category:Pascal/de]]</div>
Olaf
https://wiki.freepascal.org/index.php?title=Pi/de&diff=105307
Pi/de
2016-11-20T18:58:22Z
<p>Olaf: Created page with "{{Pi}} <br> &#960; ist das Verhältnis des Umfangs eines Kreises zu seinem Durchmesser.<br> Der Wert von &#960; ist in etwa 3,14159265358979.<br> Der Umfang eines Kreises wird..."</p>
<hr />
<div>{{Pi}}<br />
<br><br />
&#960; ist das Verhältnis des Umfangs eines Kreises zu seinem Durchmesser.<br><br />
Der Wert von &#960; ist in etwa 3,14159265358979.<br><br />
Der Umfang eines Kreises wird enweder mit<br><br />
U = 2 * &#960; * r<br><br />
oder mit<br><br />
U = &#960; * d<br><br />
berechnet.<br><br />
<br><br />
In Pascal ist pi eine Funktion, die den Wert von &#960; zurückgibt.<br><br />
<br><br />
&#960;/4 ist das gleiche wie arctan(1).<br><br />
<br><br />
<br><br />
[[Category:Pascal/de]]</div>
Olaf
https://wiki.freepascal.org/index.php?title=Install_on_Ubuntu_from_.deb_files/de&diff=104341
Install on Ubuntu from .deb files/de
2016-10-03T11:23:36Z
<p>Olaf: /* Warum Lazarus und Free pascal von .deb-Dateien installieren? */</p>
<hr />
<div>{{Install on Ubuntu from .deb files}}<br />
<br><br />
Zurück zu den [[Additional information/de|Zusätzlichen Informationen]].<br><br />
<br><br />
__TOC__<br />
=Allgemein=<br />
==Warum Lazarus und Free pascal von .deb-Dateien installieren?==<br />
Der einfachste Weg, Lazarus auf Ubuntu und auf Linux Mint zu installieren, ist über das Software-Center. Wenn Ihnen die im Software-Center vorhandenen Versionen von Lazarus und Free Pascal zu alt sind und Sie neuere Programmversionen wollen, dann können Sie Lazarus und Free Pascal manuell von den deb-Dateien installieren.<br><br />
Die manuelle Installation von Lazarus und Free Pascal erfolgt in diesem Fall über das Terminal.<br><br />
<br><br />
<br />
=Vorbereiten der Installation=<br />
==Herunterladen der deb-Dateien==<br />
Für einen Installation müssen Sie die deb-Dateien für Lazarus und Free Pascal herunterladen.<br><br />
Auf der [http://www.lazarus.freepascal.org/index.php?page=downloads Download-Seite] von Lazarus und Free Pascal finden sie die deb-Dateien für die Installation.<br><br />
Folgen Sie dem Link auf der Seite und laden Sie alle drei deb-Dateien herunter.<br><br />
<br><br />
==Bereinigen von evtl. schon vorhandenen Lazarus und Free Pascal Installationen==<br />
Damit eine Installation sauber ist, das heisst Sie ist frei von Resten alter Installationen, ist eine Deinstallation alter Lazarus und Free Pascal Paktete nötig.<br><br />
Wechseln Sie in die Konsole / Terminal.<br><br />
Mit den Befehlen:<br />
<syntaxhighlight lang="bash"><br />
sudo apt-get purge --auto-remove lazarus*<br />
sudo apt-get purge --auto-remove fpc<br />
</syntaxhighlight><br />
deinstallieren Sie alte Installationen von Lazarus und Free Pascal und löschen alte Konfigurationsdateien.<br><br />
<br><br />
<br />
=Die Installation von Lazarus und Free Pascal=<br />
Stellen Sie sicher, dass Ihr Rechner mit dem Internet verbunden ist. Evtl. benötigt die Installation noch einige Software-Pakete. Diese Software-Pakete werden bei einer Internetverbindung im Hintergrund und ohne Ihr Zutun installiert.<br><br />
Wechseln Sie in der Konsole / im Terminal in das Verzeichnis, in das Sie die deb-Dateien gespeichert haben.<br><br />
Führen Sie in der Konsole die Installation in genau der untenstehenden Reihenfolge aus.<br><br />
Wenn sie eine andere Reihenfolge für die Installation wählen, dann haben Sie am Ende eine Defekte Installation.<br><br />
<syntaxhighlight lang="bash"><br />
sudo dpkg -i fpc_*.deb<br />
sudo dpkg -i fpc-*.deb<br />
sudo dpkg -i l*.deb<br />
# Um sicher zugehen, dass auch alle abhängigen Software-Pakete installiert sind,<br />
# wird am Ende der Installation noch folgendes Kommando ausgeführt:<br />
sudo apt-get install -f<br />
</syntaxhighlight><br />
Das war es. (Diese Installation funktioniert auch unter Debian und Linux Mint)<br><br />
<br />
=Die Deinstallation von Lazarus und Free Pascal=<br />
Ein deinstallieren von Lazarus und Free Pascal geht an der Konsole ganz einfach:<br />
<syntaxhighlight lang="bash"><br />
sudo apt-get purge --auto-remove lazarus*<br />
sudo apt-get purge --auto-remove fpc<br />
</syntaxhighlight><br />
<br><br />
<br><br />
--[[User:Olaf|Olaf]] 22:21, 21 April 2014 (CEST)<br />
{{AutoCategory}}[[Category:Lazarus/de]][[Category:Tutorials/de]]</div>
Olaf
https://wiki.freepascal.org/index.php?title=Install_on_Ubuntu_from_.deb_files/de&diff=104339
Install on Ubuntu from .deb files/de
2016-10-03T11:19:58Z
<p>Olaf: /* Bereinigen von evtl. schon vorhandenen Lazarus und Free Pascal Installationen */</p>
<hr />
<div>{{Install on Ubuntu from .deb files}}<br />
<br><br />
Zurück zu den [[Additional information/de|Zusätzlichen Informationen]].<br><br />
<br><br />
__TOC__<br />
=Allgemein=<br />
==Warum Lazarus und Free pascal von .deb-Dateien installieren?==<br />
Der einfachste Weg, Lazarus auf Ubuntu und auf Linux Mint zu installieren, ist über das Software-Center. Doch wenn die Version von Lazarus und Free Pascal im Repository Ihnen zu alt sind und Sie eine neuere Programm Version wollen, dann können Sie Lazarus und Free Pascal manuell von den deb-Dateien installieren.<br><br />
Die manuelle Installation von Lazarus und Free Pascal erfolgt in diesem Fall über das Terminal.<br><br />
<br><br />
<br />
=Vorbereiten der Installation=<br />
==Herunterladen der deb-Dateien==<br />
Für einen Installation müssen Sie die deb-Dateien für Lazarus und Free Pascal herunterladen.<br><br />
Auf der [http://www.lazarus.freepascal.org/index.php?page=downloads Download-Seite] von Lazarus und Free Pascal finden sie die deb-Dateien für die Installation.<br><br />
Folgen Sie dem Link auf der Seite und laden Sie alle drei deb-Dateien herunter.<br><br />
<br><br />
==Bereinigen von evtl. schon vorhandenen Lazarus und Free Pascal Installationen==<br />
Damit eine Installation sauber ist, das heisst Sie ist frei von Resten alter Installationen, ist eine Deinstallation alter Lazarus und Free Pascal Paktete nötig.<br><br />
Wechseln Sie in die Konsole / Terminal.<br><br />
Mit den Befehlen:<br />
<syntaxhighlight lang="bash"><br />
sudo apt-get purge --auto-remove lazarus*<br />
sudo apt-get purge --auto-remove fpc<br />
</syntaxhighlight><br />
deinstallieren Sie alte Installationen von Lazarus und Free Pascal und löschen alte Konfigurationsdateien.<br><br />
<br><br />
<br />
=Die Installation von Lazarus und Free Pascal=<br />
Stellen Sie sicher, dass Ihr Rechner mit dem Internet verbunden ist. Evtl. benötigt die Installation noch einige Software-Pakete. Diese Software-Pakete werden bei einer Internetverbindung im Hintergrund und ohne Ihr Zutun installiert.<br><br />
Wechseln Sie in der Konsole / im Terminal in das Verzeichnis, in das Sie die deb-Dateien gespeichert haben.<br><br />
Führen Sie in der Konsole die Installation in genau der untenstehenden Reihenfolge aus.<br><br />
Wenn sie eine andere Reihenfolge für die Installation wählen, dann haben Sie am Ende eine Defekte Installation.<br><br />
<syntaxhighlight lang="bash"><br />
sudo dpkg -i fpc_*.deb<br />
sudo dpkg -i fpc-*.deb<br />
sudo dpkg -i l*.deb<br />
# Um sicher zugehen, dass auch alle abhängigen Software-Pakete installiert sind,<br />
# wird am Ende der Installation noch folgendes Kommando ausgeführt:<br />
sudo apt-get install -f<br />
</syntaxhighlight><br />
Das war es. (Diese Installation funktioniert auch unter Debian und Linux Mint)<br><br />
<br />
=Die Deinstallation von Lazarus und Free Pascal=<br />
Ein deinstallieren von Lazarus und Free Pascal geht an der Konsole ganz einfach:<br />
<syntaxhighlight lang="bash"><br />
sudo apt-get purge --auto-remove lazarus*<br />
sudo apt-get purge --auto-remove fpc<br />
</syntaxhighlight><br />
<br><br />
<br><br />
--[[User:Olaf|Olaf]] 22:21, 21 April 2014 (CEST)<br />
{{AutoCategory}}[[Category:Lazarus/de]][[Category:Tutorials/de]]</div>
Olaf
https://wiki.freepascal.org/index.php?title=Palindrome/de&diff=96062
Palindrome/de
2015-09-30T16:27:20Z
<p>Olaf: Created page with "right {{Palindrome}} <br> <br> __TOC__ = Palindrom = <br> Definition:<br> Ein Palindrom ist eine Zeichenkette, die von vorn und von hinten gelesen..."</p>
<hr />
<div>[[File:fpc source logo.png|right]]<br />
{{Palindrome}}<br />
<br><br />
<br><br />
__TOC__<br />
= Palindrom =<br />
<br><br />
Definition:<br><br />
Ein Palindrom ist eine Zeichenkette, die von vorn und von hinten gelesen dasselbe ergibt.<br />
<br><br />
<br><br />
= Beispiele =<br />
<br><br />
== Deutsch ==<br />
* aha<br />
* Ebbe<br />
* Elle<br />
* Esse<br />
* Neffen<br />
* Otto<br />
* Rentner<br />
* Uhu<br />
<br><br />
== Englisch ==<br />
* racecar<br />
* A man, a plan, a canal: Panama<br />
* Madam I'm Adam<br />
<br><br />
<br><br />
= Die Funktion IsPalindome =<br />
Diese Funktion passt für die ASCII und UTF-8 String-Codierung.<br />
<br><br />
<syntaxhighlight><br />
<br />
function IsPalindome(const a_text: string): boolean;<br />
var<br />
i, j :longint;<br />
s1, s2, s3 :string;<br />
begin<br />
s1 := UTF8LowerCase( a_text );<br />
j := length( s1 );<br />
i := 1;<br />
s2 := '';<br />
s3 := '';<br />
while ( i <= j ) do<br />
begin<br />
if s1[i] < #$C0 then // ASCII<br />
begin<br />
if (s1[i] >= #$30) and (s1[i] < #$7B)then<br />
begin<br />
if (s1[i] > #$60) or (s1[i] < #$3A) then<br />
begin<br />
s2 := s1[i] + s2;<br />
s3 := s3 + s1[i];<br />
end;<br />
end;<br />
inc( i );<br />
end<br />
else<br />
begin<br />
begin<br />
if s1[i] < #$E0 then // two byte<br />
begin<br />
if ((s1[i] > #$C2) and ( not<br />
// Armenian punctuation<br />
((s1[i] = #$D5) and ((s1[i+1] >= #$99) and (s1[i+1] < #$A0)))<br />
)) then<br />
begin<br />
s2 := s1[i]+ s1[i+1] + s2;<br />
s3 := s3 + s1[i] + s1[i+1];<br />
end;<br />
inc( i ,2);<br />
end<br />
else<br />
begin<br />
if s1[i] < #$F0 then // three byte<br />
begin<br />
if not (<br />
// General punctuation<br />
(s1[i] = #$E2) and ((s1[i+1]= #$80)<br />
or ((s1[i+1]= #$81) and (s1[i+2]< #$B0)))<br />
) then<br />
begin<br />
s2 := s1[i]+ s1[i+1] + s1[i+2]+ s2;<br />
s3 := s3 + s1[i] + s1[i+1] + s1[i+2];<br />
end;<br />
inc( i ,3);<br />
end<br />
else<br />
begin<br />
s2 := s1[i]+ s1[i+1] + s1[i+2]+ s1[i+3] + s2;<br />
s3 := s3 + s1[i] + s1[i+1] + s1[i+2] + s1[i+3];<br />
inc( i ,4);<br />
end<br />
end;<br />
end;<br />
end;<br />
end;<br />
if s2 <> '' then result := s2=s3 else result := false;<br />
end;<br />
</syntaxhighlight><br />
<br><br />
<br><br />
{{AutoCategory}}<br />
[[Category:Tutorials/de]]<br />
[[Category:Code/de]]</div>
Olaf
https://wiki.freepascal.org/index.php?title=Colors/de&diff=95628
Colors/de
2015-09-19T11:16:39Z
<p>Olaf: /* Zeichnen von Themaelementen auf Ihren benutzerdefinierten Steuerelementen */</p>
<hr />
<div>{{Colors}}<br />
<br><br><br />
__TOC__<br />
<br><br />
=Überblick=<br />
Die Standardfarben sind in der LCL (Komponentenbibliothek) TColor festgelegt. Diese Standardfarben sind mit der VCL (Komponentenbibliothek) TColor von Delphi kompatibel. Der Typ TColor kann eine RGB Farbe (3x8bit), oder eine Systemfarbe wie clDefault anzeigen. Die Komponentenbibliothek arbeitet auch mit dem Typ TFPColor des fpImage Farbsystems zusammen. Der Typ TFPColor stellt die Farben nach RGBA (4x16bit) dar und nicht wie der Typ TColor nach RGB (3x8bit) dar.<br><br />
<br><br />
==Umwandlung der Werte zwischen TColor und RGB==<br />
Die Unit '''Graphics''' bietet folgende Funktionen:<br><br />
<br><br />
<syntaxhighlight><br />
function Blue(rgb: TColor): BYTE; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function Green(rgb: TColor): BYTE; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function Red(rgb: TColor): BYTE; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function RGBToColor(R, G, B: Byte): TColor;<br />
procedure RedGreenBlue(rgb: TColor; out Red, Green, Blue: Byte); // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function FPColorToTColor(const FPColor: TFPColor): TColor;<br />
function TColorToFPColor(const c: TColor): TFPColor; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function IsSysColor(AColor: TColorRef): Boolean;<br />
</syntaxhighlight><br />
<br><br />
==umwandeln des Typs TColor von/in den Typ String==<br />
Funktionen die Strings wie "25500 oder "$AA0088" oder "clNavy" nach TColor umwandeln:<br><br />
* StringToColor<br><br />
* StringToColorDef<br><br />
<br><br />
Wandelt den Typ TColor in den Typ String um:<br><br />
* ColorToString<br><br />
<br><br />
<br />
=Tabelle der Standardfarben=<br />
Diese vordefinierten Farbkonstanten sind mit den Farbkonstanten in Delphi kompatibel:<br />
{| class="wikitable"<br />
|-<br />
! Farbkonstante<br />
! Farbe<br />
! Hexadezimalwert für die Verwendung mit TColor<br />
! Beispiel<br />
|-<br />
| clBlack<br />
| Black<br />
| TColor($000000);<br />
| style="background: #000000" |<br />
|-<br />
| clMaroon<br />
| Maroon<br />
| TColor($000080);<br />
| style="background: #800000" |<br />
|-<br />
| clGreen <br />
| Green<br />
| TColor($008000);<br />
| style="background: #008000" |<br />
|-<br />
| clOlive <br />
| Olive Green<br />
| TColor($008080);<br />
| style="background: #808000" |<br />
|-<br />
| clNavy <br />
| Navy Blue<br />
| TColor($800000);<br />
| style="background: #000080" |<br />
|-<br />
| clPurple <br />
| Purple<br />
| TColor($800080);<br />
| style="background: #800080" |<br />
|-<br />
| clTeal <br />
| Teal<br />
| TColor($808000);<br />
| style="background: #008080" |<br />
|-<br />
| clGray <br />
| Grey<br />
| TColor($808080);<br />
| style="background: #808080" |<br />
|-<br />
| clSilver <br />
| Silver<br />
| TColor($C0C0C0);<br />
| style="background: #C0C0C0" |<br />
|-<br />
| clRed <br />
| Red<br />
| TColor($0000FF);<br />
| style="background: #FF0000" |<br />
|-<br />
| clLime <br />
| Lime Green<br />
| TColor($00FF00);<br />
| style="background: #00FF00" |<br />
|-<br />
| clYellow <br />
| Yellow<br />
| TColor($00FFFF);<br />
| style="background: #FFFF00" |<br />
|-<br />
| clBlue <br />
| Blue<br />
| TColor($FF0000);<br />
| style="background: #0000FF" |<br />
|-<br />
| clFuchsia<br />
| Fuchsia<br />
| TColor($FF00FF);<br />
| style="background: #FF00FF" |<br />
|-<br />
| clAqua <br />
| Aqua<br />
| TColor($FFFF00);<br />
| style="background: #00FFFF" |<br />
|-<br />
| clLtGray <br />
| Light Grey<br />
| TColor($C0C0C0);<br />
| style="background: #D3D3D3" | alias: clSilver<br />
|-<br />
| clDkGray <br />
| Dark Grey<br />
| TColor($808080);<br />
| style="background: #808080; color: white;" | alias: clGray<br />
|-<br />
| clWhite <br />
| White<br />
| TColor($FFFFFF);<br />
| style="background: #FFFFFF" |<br />
|-<br />
| clCream <br />
| Cream<br />
| TColor($F0FBFF);<br />
| style="background: #FFFBF0;" | Version: Lazarus 1.2 und höher<br />
|-<br />
| clMedGray <br />
| Medium Grey<br />
| TColor($A4A0A0);<br />
| style="background: #A0A0A4;" | Version: Lazarus 1.2 und höher<br />
|-<br />
| clMoneyGreen <br />
| Mint Green<br />
| TColor($C0DCC0);<br />
| style="background: #C0DCC0;" | Version: Lazarus 1.2 und höher<br />
|-<br />
| clSkyBlue <br />
| Sky Blue<br />
| TColor($F0CAA6);<br />
| style="background: #A6CAF0;" | Version: Lazarus 1.2 und höher<br />
|}<br />
<br><br />
<br />
=Systemfarben=<br />
==Beispiel: clInfoBk, clInfoText==<br />
Systemfarben sind Farbkonstanten mit einer besonderen Bedeutung. Ihr wirklicher Wert hängt vom Kontext und dem Windowsthema ab. Sie sind keine einfachen Farben.<br><br />
'''clInfoBk''' zum Beispiel:<br><br />
<syntaxhighlight><br />
Form1.Canvas.Brush.Color:=clInfoBk; // verwende den Standardhintergrund Pinsel für ein Hinweisfenster<br />
Form1.Canvas.FillRect(10,10,50,50);<br />
</syntaxhighlight><br />
<br><br />
Ein Hinweisfenster unter MS-Windows könnte einen weißen Hintergrund haben. Unter Linux/GTK2 könnte das Hinweisfenster eine metallische Beschaffenheit haben. Wenn Sie nun einen Text in diese Fläche schreiben möchten, dann müssen Sie, wenn Sie den Text lesen möchten die Farbe auf einen Wert wie clInfoText ändern.<br />
Zum Beispiel:<br><br />
<syntaxhighlight><br />
Form1.Canvas.Brush.Color:=clInfoBk; // verwende den Pinsel für die Standardhintergrundfarbe für ein Hinweisfenster<br />
Form1.Canvas.FillRect(10,10,50,50);<br />
Form1.Canvas.Font.Color:=clInfoText; // verwende den Pinsel für die Standardtextfarbe für ein Hinweisfenster<br />
Form1.Canvas.TextOut(10,10,'Hint');<br />
</syntaxhighlight><br />
<br><br />
Die Systemfarbe '''clInfoBk''' kann nicht für Pen.Color und nicht für Font.Color verwendet werden. Wenn Sie dies tun, dann ist das Ergebnis nicht definiert und hängt vom verwendeten widgetset (= Sammlung von Grafik Bibliotheken) und dem vom Benutzer gewählten Thema (= grafische Darstellung der Betriebssystemoberfläche) ab.<br />
Das gleiche gilt für '''clInfoText'''. Es kann nur als Font.Color verwendet werden. eine Verwendung mit Brush.Color wird nicht funktionieren. Im Moment erlauben alle widgetsets die Verwendung mit Pen.Color.<br />
<br><br />
==Ändern des Fensterthemas des Betriebssystems==<br />
Wenn z. B. der Benutzer das Thema (= grafische Darstellung der Betriebssystemoberfläche) wechselt dann kann das Betriebssystem seine Farben ändern.<br />
'''clInfoBk''' kann sich z. B. von weiß nach blau ändern oder von einer Farbe zu einer Textur. Das kann dem Programmierer Probleme bereiten. <br />
Das liegt daran, das sich der Farbwert der vordefinierten Systemfarben im eigenen Programm nicht automatisch anpasst. Der Programmierer muss dafür sorgen, das die Systemfarben den aktuellen Wert erhalten.<br><br />
Dazu ist ein Zwischenschritt nötig.<br><br />
Beispiel:<br><br />
<syntaxhighlight><br />
Form1.Canvas.Brush.Color:=clInfoBk; // der Pinsel erhält die aktuellen Systemfarben<br />
Form1.Canvas.FillRect(10,10,50,50); // dies erstellt einen Pinsel mit dem Farbwert<br />
// des Hinweisfensters des aktiven Fensterthemas<br />
...<br />
// Wenn das Thema (= grafische Darstellung der Betriebssystemoberfläche) vom Anwender<br />
// zwischenzeitlich geändert wird, dann hat der Pinsel noch die vorhergehenden Farbwerte<br />
...<br />
Form1.Canvas.FillRect(10,10,50,50); // mit dem Pinsel wird der Farbwert des vorhergehenden Themas gezeichnet<br />
Form1.Canvas.Brush.Color:=clInfoBk; // durch eine erneute Zuweisung wird der<br />
// vorhergehenden Farbwert nicht aktualisiert<br />
Form1.Canvas.FillRect(10,10,50,50); // mit dem Pinsel wird der Farbwert des alten Themas gezeichnet<br />
Form1.Canvas.Brush.Color:=clRed; // eine Zuweisung mit einem neuen Farbwert macht den<br />
// vorhergehenden Farbwert ungültig<br />
Form1.Canvas.Brush.Color:=clInfoBk; // eine Zuweisung mit einem neuen Farbwert macht den<br />
// vorhergehenden Farbwert ungültig<br />
Form1.Canvas.FillRect(10,10,50,50); // jetzt, wird der Farbwert des aktuellen Themas verwendet<br />
</syntaxhighlight><br />
<br />
==Tabelle der Systemfarben==<br />
In der folgenden Tabelle werden die Systemfarben und ihre Bedeutung aufgelistet. Werden die Systemfarben ausserhalb des definierten Geltungsbereiches verwendet, dann ist das Ergebnis unvorhersehbar. Die Systemfarben sind immer vom aktuell verwendeten Widget-Set (eine Sammlung von grafischen Bedienelementen) und dem aktuell verwendeten Thema (grafische Darstellung der Betriebssystemoberfläche) abhängig.<br />
<br />
{| class="wikitable"<br />
! Konstante !! LCL Definition !! Unterstützte Widgetsets<br />
|-<br />
|clNone|| Der Farbwert ist nicht definiert. D. h. er hat keine Auswirkungen bzw. er kann im Einzelfall einen weißen Farbwert haben.|| alle<br />
|-<br />
|clDefault|| Verwendet die vorgesehene Standardfarbe || alle<br />
|-<br />
|clScrollBar|| Scrollbar Körper || alle<br />
|-<br />
|clBackground|| ? || alle<br />
|-<br />
|clActiveCaption|| Titelleiste des aktiven Fensters || kein<br />
|-<br />
|clInactiveCaption|| Titelleiste des inaktiven Fensters || kein<br />
|-<br />
|clMenu|| Regular menu item background color || kein<br />
|-<br />
|clWindow|| The normal background brush of unselected text. Defined for controls like TEdit, TComboBox, TMemo, TListBox, TTreeView.|| kein<br />
|-<br />
|clWindowFrame|| Farbe der Rahmen um das Fenster || kein<br />
|-<br />
|clMenuText|| Die Schriftfarbe ist zusammen mit clMenu zu verwenden || kein<br />
|-<br />
|clWindowText|| Die Schriftfarbe ist zusammen mit clWindow zu verwenden || kein<br />
|-<br />
|clCaptionText|| Textfarbe das aktiven Fensters || kein<br />
|-<br />
|clActiveBorder|| ? || kein<br />
|-<br />
|clInactiveBorder|| ? || kein<br />
|-<br />
|clAppWorkspace|| MDIMain form background || kein<br />
|-<br />
|clHighlight|| Die Pinselfarbe des ausgewählten Elements || kein<br />
|-<br />
|clHighlightText|| Schriftfarbe vom ausgewählten Text (zusammen mit clHighligh). || kein<br />
|-<br />
|clBtnFace|| Button Hintergrund || kein<br />
|-<br />
|clBtnShadow|| Farbe des Button Schattens wird verwendet, um 3D-Effekt zu erzielen || kein<br />
|-<br />
|clGrayText|| Die Schriftfarbe von einem deaktiverten Element || kein<br />
|-<br />
|clBtnText|| Button Schriftfarbe zu verwenden mit clBtnFace || kein<br />
|-<br />
|clInactiveCaptionText|| Textfarbe der inaktiven Fenstertitelleiste || kein<br />
|-<br />
|clBtnHighlight|| Button Farbhervorhebung wird verwendet, um 3D-Effekt zu erzielen || kein<br />
|-<br />
|cl3DDkShadow|| ? || kein<br />
|-<br />
|cl3DLight|| ? || kein<br />
|-<br />
|clInfoText|| Schriftfarbe für Hinweise. Ist zu verwenden mit clInfoBk || alle<br />
|-<br />
|clInfoBk|| Pinselfarbe für Hinweisse. Ist zu verwenden mit clInfoText || alle<br />
|-<br />
|clHotLight|| ? || kein<br />
|-<br />
|clGradientActiveCaption|| Die zweit Farbe um die aktive Fenstertitelleiste mit verlaufenden Farben darzustellen || kein<br />
|-<br />
|clGradientInactiveCaption|| Die zweit Farbe um die inaktive Fenstertitelleiste mit verlaufenden Farben darzustellen || kein<br />
|-<br />
|clMenuHighlight|| Die Hintergrundfarbe des ausgewählten Menüpunkts || kein<br />
|-<br />
|clMenuBar|| Die Hintergrundfarbe der Menüleiste || kein<br />
|-<br />
|clForm|| ? || kein<br />
|-<br />
|clColorDesktop|| ? || kein<br />
|-<br />
|cl3DFace|| ? || kein<br />
|-<br />
|cl3DShadow|| ? || kein<br />
|-<br />
|cl3DHiLight|| ? || kein<br />
|-<br />
|clBtnHiLight|| Das Gleiche wie clBtnHighlight || kein<br />
|}<br />
<br />
=Zeichnen von Elementen der Unit Themes auf Ihre benutzerdefinierte Steuerelemente=<br />
Die Unit <b>Themes</b> bietet Funktionen, um einzelne Elemente der Standard-Controls zu erweitern. Um zum Beispiel ein Contol wie ein TTreeView zu erweitern verwenden Sie folgenden Code:<br><br />
<syntaxhighlight><br />
uses Themes;<br />
<br />
...<br />
<br />
procedure TYourCustomControl.Paint;<br />
const<br />
PlusMinusDetail: array[Boolean {Hot}, Boolean {Expanded}] of TThemedTreeview =<br />
(<br />
(ttGlyphClosed, ttGlyphOpened),<br />
(ttHotGlyphClosed, ttHotGlyphOpened)<br />
);<br />
var<br />
Details: TThemedElementDetails;<br />
R: TRect;<br />
Collapse: boolean;<br />
begin<br />
...<br />
// zeichnet eine Erweiterung<br />
Details := ThemeServices.GetElementDetails(PlusMinusDetail[False, Collapse]);<br />
R := Rect(ALeft, ATop, ARight + 1, ABottom + 1);<br />
ThemeServices.DrawElement(Canvas.Handle, Details, R, nil);<br />
...<br />
end;<br />
</syntaxhighlight><br />
<br />
--[[User:Olaf|Olaf]] 12:20, 6 August 2013 (CEST)<br />
[[Category:Graphics/de]]{{AutoCategory}}</div>
Olaf
https://wiki.freepascal.org/index.php?title=Colors/de&diff=95194
Colors/de
2015-09-05T07:28:51Z
<p>Olaf: /* umwandeln des Typs TColor von/in den Typ String */</p>
<hr />
<div>{{Colors}}<br />
<br><br><br />
__TOC__<br />
<br><br />
=Überblick=<br />
Die Standardfarben sind in der LCL (Komponentenbibliothek) TColor festgelegt. Diese Standardfarben sind mit der VCL (Komponentenbibliothek) TColor von Delphi kompatibel. Der Typ TColor kann eine RGB Farbe (3x8bit), oder eine Systemfarbe wie clDefault anzeigen. Die Komponentenbibliothek arbeitet auch mit dem Typ TFPColor des fpImage Farbsystems zusammen. Der Typ TFPColor stellt die Farben nach RGBA (4x16bit) dar und nicht wie der Typ TColor nach RGB (3x8bit) dar.<br><br />
<br><br />
==Umwandlung der Werte zwischen TColor und RGB==<br />
Die Unit '''Graphics''' bietet folgende Funktionen:<br><br />
<br><br />
<syntaxhighlight><br />
function Blue(rgb: TColor): BYTE; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function Green(rgb: TColor): BYTE; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function Red(rgb: TColor): BYTE; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function RGBToColor(R, G, B: Byte): TColor;<br />
procedure RedGreenBlue(rgb: TColor; out Red, Green, Blue: Byte); // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function FPColorToTColor(const FPColor: TFPColor): TColor;<br />
function TColorToFPColor(const c: TColor): TFPColor; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function IsSysColor(AColor: TColorRef): Boolean;<br />
</syntaxhighlight><br />
<br><br />
==umwandeln des Typs TColor von/in den Typ String==<br />
Funktionen die Strings wie "25500 oder "$AA0088" oder "clNavy" nach TColor umwandeln:<br><br />
* StringToColor<br><br />
* StringToColorDef<br><br />
<br><br />
Wandelt den Typ TColor in den Typ String um:<br><br />
* ColorToString<br><br />
<br><br />
<br />
=Tabelle der Standardfarben=<br />
Diese vordefinierten Farbkonstanten sind mit den Farbkonstanten in Delphi kompatibel:<br />
{| class="wikitable"<br />
|-<br />
! Farbkonstante<br />
! Farbe<br />
! Hexadezimalwert für die Verwendung mit TColor<br />
! Beispiel<br />
|-<br />
| clBlack<br />
| Black<br />
| TColor($000000);<br />
| style="background: #000000" |<br />
|-<br />
| clMaroon<br />
| Maroon<br />
| TColor($000080);<br />
| style="background: #800000" |<br />
|-<br />
| clGreen <br />
| Green<br />
| TColor($008000);<br />
| style="background: #008000" |<br />
|-<br />
| clOlive <br />
| Olive Green<br />
| TColor($008080);<br />
| style="background: #808000" |<br />
|-<br />
| clNavy <br />
| Navy Blue<br />
| TColor($800000);<br />
| style="background: #000080" |<br />
|-<br />
| clPurple <br />
| Purple<br />
| TColor($800080);<br />
| style="background: #800080" |<br />
|-<br />
| clTeal <br />
| Teal<br />
| TColor($808000);<br />
| style="background: #008080" |<br />
|-<br />
| clGray <br />
| Grey<br />
| TColor($808080);<br />
| style="background: #808080" |<br />
|-<br />
| clSilver <br />
| Silver<br />
| TColor($C0C0C0);<br />
| style="background: #C0C0C0" |<br />
|-<br />
| clRed <br />
| Red<br />
| TColor($0000FF);<br />
| style="background: #FF0000" |<br />
|-<br />
| clLime <br />
| Lime Green<br />
| TColor($00FF00);<br />
| style="background: #00FF00" |<br />
|-<br />
| clYellow <br />
| Yellow<br />
| TColor($00FFFF);<br />
| style="background: #FFFF00" |<br />
|-<br />
| clBlue <br />
| Blue<br />
| TColor($FF0000);<br />
| style="background: #0000FF" |<br />
|-<br />
| clFuchsia<br />
| Fuchsia<br />
| TColor($FF00FF);<br />
| style="background: #FF00FF" |<br />
|-<br />
| clAqua <br />
| Aqua<br />
| TColor($FFFF00);<br />
| style="background: #00FFFF" |<br />
|-<br />
| clLtGray <br />
| Light Grey<br />
| TColor($C0C0C0);<br />
| style="background: #D3D3D3" | alias: clSilver<br />
|-<br />
| clDkGray <br />
| Dark Grey<br />
| TColor($808080);<br />
| style="background: #808080; color: white;" | alias: clGray<br />
|-<br />
| clWhite <br />
| White<br />
| TColor($FFFFFF);<br />
| style="background: #FFFFFF" |<br />
|-<br />
| clCream <br />
| Cream<br />
| TColor($F0FBFF);<br />
| style="background: #FFFBF0;" | Version: Lazarus 1.2 und höher<br />
|-<br />
| clMedGray <br />
| Medium Grey<br />
| TColor($A4A0A0);<br />
| style="background: #A0A0A4;" | Version: Lazarus 1.2 und höher<br />
|-<br />
| clMoneyGreen <br />
| Mint Green<br />
| TColor($C0DCC0);<br />
| style="background: #C0DCC0;" | Version: Lazarus 1.2 und höher<br />
|-<br />
| clSkyBlue <br />
| Sky Blue<br />
| TColor($F0CAA6);<br />
| style="background: #A6CAF0;" | Version: Lazarus 1.2 und höher<br />
|}<br />
<br><br />
<br />
=Systemfarben=<br />
==Beispiel: clInfoBk, clInfoText==<br />
Systemfarben sind Farbkonstanten mit einer besonderen Bedeutung. Ihr wirklicher Wert hängt vom Kontext und dem Windowsthema ab. Sie sind keine einfachen Farben.<br><br />
'''clInfoBk''' zum Beispiel:<br><br />
<syntaxhighlight><br />
Form1.Canvas.Brush.Color:=clInfoBk; // verwende den Standardhintergrund Pinsel für ein Hinweisfenster<br />
Form1.Canvas.FillRect(10,10,50,50);<br />
</syntaxhighlight><br />
<br><br />
Ein Hinweisfenster unter MS-Windows könnte einen weißen Hintergrund haben. Unter Linux/GTK2 könnte das Hinweisfenster eine metallische Beschaffenheit haben. Wenn Sie nun einen Text in diese Fläche schreiben möchten, dann müssen Sie, wenn Sie den Text lesen möchten die Farbe auf einen Wert wie clInfoText ändern.<br />
Zum Beispiel:<br><br />
<syntaxhighlight><br />
Form1.Canvas.Brush.Color:=clInfoBk; // verwende den Pinsel für die Standardhintergrundfarbe für ein Hinweisfenster<br />
Form1.Canvas.FillRect(10,10,50,50);<br />
Form1.Canvas.Font.Color:=clInfoText; // verwende den Pinsel für die Standardtextfarbe für ein Hinweisfenster<br />
Form1.Canvas.TextOut(10,10,'Hint');<br />
</syntaxhighlight><br />
<br><br />
Die Systemfarbe '''clInfoBk''' kann nicht für Pen.Color und nicht für Font.Color verwendet werden. Wenn Sie dies tun, dann ist das Ergebnis nicht definiert und hängt vom verwendeten widgetset (= Sammlung von Grafik Bibliotheken) und dem vom Benutzer gewählten Thema (= grafische Darstellung der Betriebssystemoberfläche) ab.<br />
Das gleiche gilt für '''clInfoText'''. Es kann nur als Font.Color verwendet werden. eine Verwendung mit Brush.Color wird nicht funktionieren. Im Moment erlauben alle widgetsets die Verwendung mit Pen.Color.<br />
<br><br />
==Ändern des Fensterthemas des Betriebssystems==<br />
Wenn z. B. der Benutzer das Thema (= grafische Darstellung der Betriebssystemoberfläche) wechselt dann kann das Betriebssystem seine Farben ändern.<br />
'''clInfoBk''' kann sich z. B. von weiß nach blau ändern oder von einer Farbe zu einer Textur. Das kann dem Programmierer Probleme bereiten. <br />
Das liegt daran, das sich der Farbwert der vordefinierten Systemfarben im eigenen Programm nicht automatisch anpasst. Der Programmierer muss dafür sorgen, das die Systemfarben den aktuellen Wert erhalten.<br><br />
Dazu ist ein Zwischenschritt nötig.<br><br />
Beispiel:<br><br />
<syntaxhighlight><br />
Form1.Canvas.Brush.Color:=clInfoBk; // der Pinsel erhält die aktuellen Systemfarben<br />
Form1.Canvas.FillRect(10,10,50,50); // dies erstellt einen Pinsel mit dem Farbwert<br />
// des Hinweisfensters des aktiven Fensterthemas<br />
...<br />
// Wenn das Thema (= grafische Darstellung der Betriebssystemoberfläche) vom Anwender<br />
// zwischenzeitlich geändert wird, dann hat der Pinsel noch die vorhergehenden Farbwerte<br />
...<br />
Form1.Canvas.FillRect(10,10,50,50); // mit dem Pinsel wird der Farbwert des vorhergehenden Themas gezeichnet<br />
Form1.Canvas.Brush.Color:=clInfoBk; // durch eine erneute Zuweisung wird der<br />
// vorhergehenden Farbwert nicht aktualisiert<br />
Form1.Canvas.FillRect(10,10,50,50); // mit dem Pinsel wird der Farbwert des alten Themas gezeichnet<br />
Form1.Canvas.Brush.Color:=clRed; // eine Zuweisung mit einem neuen Farbwert macht den<br />
// vorhergehenden Farbwert ungültig<br />
Form1.Canvas.Brush.Color:=clInfoBk; // eine Zuweisung mit einem neuen Farbwert macht den<br />
// vorhergehenden Farbwert ungültig<br />
Form1.Canvas.FillRect(10,10,50,50); // jetzt, wird der Farbwert des aktuellen Themas verwendet<br />
</syntaxhighlight><br />
<br />
==Tabelle der Systemfarben==<br />
In der folgenden Tabelle werden die Systemfarben und ihre Bedeutung aufgelistet. Werden die Systemfarben ausserhalb des definierten Geltungsbereiches verwendet, dann ist das Ergebnis unvorhersehbar. Die Systemfarben sind immer vom aktuell verwendeten Widget-Set (eine Sammlung von grafischen Bedienelementen) und dem aktuell verwendeten Thema (grafische Darstellung der Betriebssystemoberfläche) abhängig.<br />
<br />
{| class="wikitable"<br />
! Konstante !! LCL Definition !! Unterstützte Widgetsets<br />
|-<br />
|clNone|| Der Farbwert ist nicht definiert. D. h. er hat keine Auswirkungen bzw. er kann im Einzelfall einen weißen Farbwert haben.|| alle<br />
|-<br />
|clDefault|| Verwendet die vorgesehene Standardfarbe || alle<br />
|-<br />
|clScrollBar|| Scrollbar Körper || alle<br />
|-<br />
|clBackground|| ? || alle<br />
|-<br />
|clActiveCaption|| Titelleiste des aktiven Fensters || kein<br />
|-<br />
|clInactiveCaption|| Titelleiste des inaktiven Fensters || kein<br />
|-<br />
|clMenu|| Regular menu item background color || kein<br />
|-<br />
|clWindow|| The normal background brush of unselected text. Defined for controls like TEdit, TComboBox, TMemo, TListBox, TTreeView.|| kein<br />
|-<br />
|clWindowFrame|| Farbe der Rahmen um das Fenster || kein<br />
|-<br />
|clMenuText|| Die Schriftfarbe ist zusammen mit clMenu zu verwenden || kein<br />
|-<br />
|clWindowText|| Die Schriftfarbe ist zusammen mit clWindow zu verwenden || kein<br />
|-<br />
|clCaptionText|| Textfarbe das aktiven Fensters || kein<br />
|-<br />
|clActiveBorder|| ? || kein<br />
|-<br />
|clInactiveBorder|| ? || kein<br />
|-<br />
|clAppWorkspace|| MDIMain form background || kein<br />
|-<br />
|clHighlight|| Die Pinselfarbe des ausgewählten Elements || kein<br />
|-<br />
|clHighlightText|| Schriftfarbe vom ausgewählten Text (zusammen mit clHighligh). || kein<br />
|-<br />
|clBtnFace|| Button Hintergrund || kein<br />
|-<br />
|clBtnShadow|| Farbe des Button Schattens wird verwendet, um 3D-Effekt zu erzielen || kein<br />
|-<br />
|clGrayText|| Die Schriftfarbe von einem deaktiverten Element || kein<br />
|-<br />
|clBtnText|| Button Schriftfarbe zu verwenden mit clBtnFace || kein<br />
|-<br />
|clInactiveCaptionText|| Textfarbe der inaktiven Fenstertitelleiste || kein<br />
|-<br />
|clBtnHighlight|| Button Farbhervorhebung wird verwendet, um 3D-Effekt zu erzielen || kein<br />
|-<br />
|cl3DDkShadow|| ? || kein<br />
|-<br />
|cl3DLight|| ? || kein<br />
|-<br />
|clInfoText|| Schriftfarbe für Hinweise. Ist zu verwenden mit clInfoBk || alle<br />
|-<br />
|clInfoBk|| Pinselfarbe für Hinweisse. Ist zu verwenden mit clInfoText || alle<br />
|-<br />
|clHotLight|| ? || kein<br />
|-<br />
|clGradientActiveCaption|| Die zweit Farbe um die aktive Fenstertitelleiste mit verlaufenden Farben darzustellen || kein<br />
|-<br />
|clGradientInactiveCaption|| Die zweit Farbe um die inaktive Fenstertitelleiste mit verlaufenden Farben darzustellen || kein<br />
|-<br />
|clMenuHighlight|| Die Hintergrundfarbe des ausgewählten Menüpunkts || kein<br />
|-<br />
|clMenuBar|| Die Hintergrundfarbe der Menüleiste || kein<br />
|-<br />
|clForm|| ? || kein<br />
|-<br />
|clColorDesktop|| ? || kein<br />
|-<br />
|cl3DFace|| ? || kein<br />
|-<br />
|cl3DShadow|| ? || kein<br />
|-<br />
|cl3DHiLight|| ? || kein<br />
|-<br />
|clBtnHiLight|| Das Gleiche wie clBtnHighlight || kein<br />
|}<br />
<br />
==Zeichnen von Themaelementen auf Ihren benutzerdefinierten Steuerelementen==<br />
Die Unit Themes bietet Funktionen, um einzelne Elemente der Standard-Controls zu erweitern. Zum Beispiel um ein Contol wie ein TTreeView zu erweitern verwenden Sie folgenden Code:<br><br />
<syntaxhighlight><br />
uses Themes;<br />
<br />
...<br />
<br />
procedure TYourCustomControl.Paint;<br />
const<br />
PlusMinusDetail: array[Boolean {Hot}, Boolean {Expanded}] of TThemedTreeview =<br />
(<br />
(ttGlyphClosed, ttGlyphOpened),<br />
(ttHotGlyphClosed, ttHotGlyphOpened)<br />
);<br />
var<br />
Details: TThemedElementDetails;<br />
R: TRect;<br />
Collapse: boolean;<br />
begin<br />
...<br />
// zeichnet eine Erweiterung<br />
Details := ThemeServices.GetElementDetails(PlusMinusDetail[False, Collapse]);<br />
R := Rect(ALeft, ATop, ARight + 1, ABottom + 1);<br />
ThemeServices.DrawElement(Canvas.Handle, Details, R, nil);<br />
...<br />
end;<br />
</syntaxhighlight><br />
<br />
--[[User:Olaf|Olaf]] 12:20, 6 August 2013 (CEST)<br />
[[Category:Graphics/de]]{{AutoCategory}}</div>
Olaf
https://wiki.freepascal.org/index.php?title=Colors/de&diff=95193
Colors/de
2015-09-05T07:28:35Z
<p>Olaf: /* Überblick */</p>
<hr />
<div>{{Colors}}<br />
<br><br><br />
__TOC__<br />
<br><br />
=Überblick=<br />
Die Standardfarben sind in der LCL (Komponentenbibliothek) TColor festgelegt. Diese Standardfarben sind mit der VCL (Komponentenbibliothek) TColor von Delphi kompatibel. Der Typ TColor kann eine RGB Farbe (3x8bit), oder eine Systemfarbe wie clDefault anzeigen. Die Komponentenbibliothek arbeitet auch mit dem Typ TFPColor des fpImage Farbsystems zusammen. Der Typ TFPColor stellt die Farben nach RGBA (4x16bit) dar und nicht wie der Typ TColor nach RGB (3x8bit) dar.<br><br />
<br><br />
==Umwandlung der Werte zwischen TColor und RGB==<br />
Die Unit '''Graphics''' bietet folgende Funktionen:<br><br />
<br><br />
<syntaxhighlight><br />
function Blue(rgb: TColor): BYTE; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function Green(rgb: TColor): BYTE; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function Red(rgb: TColor): BYTE; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function RGBToColor(R, G, B: Byte): TColor;<br />
procedure RedGreenBlue(rgb: TColor; out Red, Green, Blue: Byte); // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function FPColorToTColor(const FPColor: TFPColor): TColor;<br />
function TColorToFPColor(const c: TColor): TFPColor; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function IsSysColor(AColor: TColorRef): Boolean;<br />
</syntaxhighlight><br />
<br><br />
==umwandeln des Typs TColor von/in den Typ String==<br />
Funktionen die Strings wie "25500 oder "$AA0088" oder "clNavy" nach TColor umwandeln:<br><br />
* StringToColor<br><br />
* StringToColorDef<br><br />
<br><br />
Wandelt den Typ TColor in den Typ String um:<br><br />
* ColorToString<br><br />
<br />
=Tabelle der Standardfarben=<br />
Diese vordefinierten Farbkonstanten sind mit den Farbkonstanten in Delphi kompatibel:<br />
{| class="wikitable"<br />
|-<br />
! Farbkonstante<br />
! Farbe<br />
! Hexadezimalwert für die Verwendung mit TColor<br />
! Beispiel<br />
|-<br />
| clBlack<br />
| Black<br />
| TColor($000000);<br />
| style="background: #000000" |<br />
|-<br />
| clMaroon<br />
| Maroon<br />
| TColor($000080);<br />
| style="background: #800000" |<br />
|-<br />
| clGreen <br />
| Green<br />
| TColor($008000);<br />
| style="background: #008000" |<br />
|-<br />
| clOlive <br />
| Olive Green<br />
| TColor($008080);<br />
| style="background: #808000" |<br />
|-<br />
| clNavy <br />
| Navy Blue<br />
| TColor($800000);<br />
| style="background: #000080" |<br />
|-<br />
| clPurple <br />
| Purple<br />
| TColor($800080);<br />
| style="background: #800080" |<br />
|-<br />
| clTeal <br />
| Teal<br />
| TColor($808000);<br />
| style="background: #008080" |<br />
|-<br />
| clGray <br />
| Grey<br />
| TColor($808080);<br />
| style="background: #808080" |<br />
|-<br />
| clSilver <br />
| Silver<br />
| TColor($C0C0C0);<br />
| style="background: #C0C0C0" |<br />
|-<br />
| clRed <br />
| Red<br />
| TColor($0000FF);<br />
| style="background: #FF0000" |<br />
|-<br />
| clLime <br />
| Lime Green<br />
| TColor($00FF00);<br />
| style="background: #00FF00" |<br />
|-<br />
| clYellow <br />
| Yellow<br />
| TColor($00FFFF);<br />
| style="background: #FFFF00" |<br />
|-<br />
| clBlue <br />
| Blue<br />
| TColor($FF0000);<br />
| style="background: #0000FF" |<br />
|-<br />
| clFuchsia<br />
| Fuchsia<br />
| TColor($FF00FF);<br />
| style="background: #FF00FF" |<br />
|-<br />
| clAqua <br />
| Aqua<br />
| TColor($FFFF00);<br />
| style="background: #00FFFF" |<br />
|-<br />
| clLtGray <br />
| Light Grey<br />
| TColor($C0C0C0);<br />
| style="background: #D3D3D3" | alias: clSilver<br />
|-<br />
| clDkGray <br />
| Dark Grey<br />
| TColor($808080);<br />
| style="background: #808080; color: white;" | alias: clGray<br />
|-<br />
| clWhite <br />
| White<br />
| TColor($FFFFFF);<br />
| style="background: #FFFFFF" |<br />
|-<br />
| clCream <br />
| Cream<br />
| TColor($F0FBFF);<br />
| style="background: #FFFBF0;" | Version: Lazarus 1.2 und höher<br />
|-<br />
| clMedGray <br />
| Medium Grey<br />
| TColor($A4A0A0);<br />
| style="background: #A0A0A4;" | Version: Lazarus 1.2 und höher<br />
|-<br />
| clMoneyGreen <br />
| Mint Green<br />
| TColor($C0DCC0);<br />
| style="background: #C0DCC0;" | Version: Lazarus 1.2 und höher<br />
|-<br />
| clSkyBlue <br />
| Sky Blue<br />
| TColor($F0CAA6);<br />
| style="background: #A6CAF0;" | Version: Lazarus 1.2 und höher<br />
|}<br />
<br><br />
<br />
=Systemfarben=<br />
==Beispiel: clInfoBk, clInfoText==<br />
Systemfarben sind Farbkonstanten mit einer besonderen Bedeutung. Ihr wirklicher Wert hängt vom Kontext und dem Windowsthema ab. Sie sind keine einfachen Farben.<br><br />
'''clInfoBk''' zum Beispiel:<br><br />
<syntaxhighlight><br />
Form1.Canvas.Brush.Color:=clInfoBk; // verwende den Standardhintergrund Pinsel für ein Hinweisfenster<br />
Form1.Canvas.FillRect(10,10,50,50);<br />
</syntaxhighlight><br />
<br><br />
Ein Hinweisfenster unter MS-Windows könnte einen weißen Hintergrund haben. Unter Linux/GTK2 könnte das Hinweisfenster eine metallische Beschaffenheit haben. Wenn Sie nun einen Text in diese Fläche schreiben möchten, dann müssen Sie, wenn Sie den Text lesen möchten die Farbe auf einen Wert wie clInfoText ändern.<br />
Zum Beispiel:<br><br />
<syntaxhighlight><br />
Form1.Canvas.Brush.Color:=clInfoBk; // verwende den Pinsel für die Standardhintergrundfarbe für ein Hinweisfenster<br />
Form1.Canvas.FillRect(10,10,50,50);<br />
Form1.Canvas.Font.Color:=clInfoText; // verwende den Pinsel für die Standardtextfarbe für ein Hinweisfenster<br />
Form1.Canvas.TextOut(10,10,'Hint');<br />
</syntaxhighlight><br />
<br><br />
Die Systemfarbe '''clInfoBk''' kann nicht für Pen.Color und nicht für Font.Color verwendet werden. Wenn Sie dies tun, dann ist das Ergebnis nicht definiert und hängt vom verwendeten widgetset (= Sammlung von Grafik Bibliotheken) und dem vom Benutzer gewählten Thema (= grafische Darstellung der Betriebssystemoberfläche) ab.<br />
Das gleiche gilt für '''clInfoText'''. Es kann nur als Font.Color verwendet werden. eine Verwendung mit Brush.Color wird nicht funktionieren. Im Moment erlauben alle widgetsets die Verwendung mit Pen.Color.<br />
<br><br />
==Ändern des Fensterthemas des Betriebssystems==<br />
Wenn z. B. der Benutzer das Thema (= grafische Darstellung der Betriebssystemoberfläche) wechselt dann kann das Betriebssystem seine Farben ändern.<br />
'''clInfoBk''' kann sich z. B. von weiß nach blau ändern oder von einer Farbe zu einer Textur. Das kann dem Programmierer Probleme bereiten. <br />
Das liegt daran, das sich der Farbwert der vordefinierten Systemfarben im eigenen Programm nicht automatisch anpasst. Der Programmierer muss dafür sorgen, das die Systemfarben den aktuellen Wert erhalten.<br><br />
Dazu ist ein Zwischenschritt nötig.<br><br />
Beispiel:<br><br />
<syntaxhighlight><br />
Form1.Canvas.Brush.Color:=clInfoBk; // der Pinsel erhält die aktuellen Systemfarben<br />
Form1.Canvas.FillRect(10,10,50,50); // dies erstellt einen Pinsel mit dem Farbwert<br />
// des Hinweisfensters des aktiven Fensterthemas<br />
...<br />
// Wenn das Thema (= grafische Darstellung der Betriebssystemoberfläche) vom Anwender<br />
// zwischenzeitlich geändert wird, dann hat der Pinsel noch die vorhergehenden Farbwerte<br />
...<br />
Form1.Canvas.FillRect(10,10,50,50); // mit dem Pinsel wird der Farbwert des vorhergehenden Themas gezeichnet<br />
Form1.Canvas.Brush.Color:=clInfoBk; // durch eine erneute Zuweisung wird der<br />
// vorhergehenden Farbwert nicht aktualisiert<br />
Form1.Canvas.FillRect(10,10,50,50); // mit dem Pinsel wird der Farbwert des alten Themas gezeichnet<br />
Form1.Canvas.Brush.Color:=clRed; // eine Zuweisung mit einem neuen Farbwert macht den<br />
// vorhergehenden Farbwert ungültig<br />
Form1.Canvas.Brush.Color:=clInfoBk; // eine Zuweisung mit einem neuen Farbwert macht den<br />
// vorhergehenden Farbwert ungültig<br />
Form1.Canvas.FillRect(10,10,50,50); // jetzt, wird der Farbwert des aktuellen Themas verwendet<br />
</syntaxhighlight><br />
<br />
==Tabelle der Systemfarben==<br />
In der folgenden Tabelle werden die Systemfarben und ihre Bedeutung aufgelistet. Werden die Systemfarben ausserhalb des definierten Geltungsbereiches verwendet, dann ist das Ergebnis unvorhersehbar. Die Systemfarben sind immer vom aktuell verwendeten Widget-Set (eine Sammlung von grafischen Bedienelementen) und dem aktuell verwendeten Thema (grafische Darstellung der Betriebssystemoberfläche) abhängig.<br />
<br />
{| class="wikitable"<br />
! Konstante !! LCL Definition !! Unterstützte Widgetsets<br />
|-<br />
|clNone|| Der Farbwert ist nicht definiert. D. h. er hat keine Auswirkungen bzw. er kann im Einzelfall einen weißen Farbwert haben.|| alle<br />
|-<br />
|clDefault|| Verwendet die vorgesehene Standardfarbe || alle<br />
|-<br />
|clScrollBar|| Scrollbar Körper || alle<br />
|-<br />
|clBackground|| ? || alle<br />
|-<br />
|clActiveCaption|| Titelleiste des aktiven Fensters || kein<br />
|-<br />
|clInactiveCaption|| Titelleiste des inaktiven Fensters || kein<br />
|-<br />
|clMenu|| Regular menu item background color || kein<br />
|-<br />
|clWindow|| The normal background brush of unselected text. Defined for controls like TEdit, TComboBox, TMemo, TListBox, TTreeView.|| kein<br />
|-<br />
|clWindowFrame|| Farbe der Rahmen um das Fenster || kein<br />
|-<br />
|clMenuText|| Die Schriftfarbe ist zusammen mit clMenu zu verwenden || kein<br />
|-<br />
|clWindowText|| Die Schriftfarbe ist zusammen mit clWindow zu verwenden || kein<br />
|-<br />
|clCaptionText|| Textfarbe das aktiven Fensters || kein<br />
|-<br />
|clActiveBorder|| ? || kein<br />
|-<br />
|clInactiveBorder|| ? || kein<br />
|-<br />
|clAppWorkspace|| MDIMain form background || kein<br />
|-<br />
|clHighlight|| Die Pinselfarbe des ausgewählten Elements || kein<br />
|-<br />
|clHighlightText|| Schriftfarbe vom ausgewählten Text (zusammen mit clHighligh). || kein<br />
|-<br />
|clBtnFace|| Button Hintergrund || kein<br />
|-<br />
|clBtnShadow|| Farbe des Button Schattens wird verwendet, um 3D-Effekt zu erzielen || kein<br />
|-<br />
|clGrayText|| Die Schriftfarbe von einem deaktiverten Element || kein<br />
|-<br />
|clBtnText|| Button Schriftfarbe zu verwenden mit clBtnFace || kein<br />
|-<br />
|clInactiveCaptionText|| Textfarbe der inaktiven Fenstertitelleiste || kein<br />
|-<br />
|clBtnHighlight|| Button Farbhervorhebung wird verwendet, um 3D-Effekt zu erzielen || kein<br />
|-<br />
|cl3DDkShadow|| ? || kein<br />
|-<br />
|cl3DLight|| ? || kein<br />
|-<br />
|clInfoText|| Schriftfarbe für Hinweise. Ist zu verwenden mit clInfoBk || alle<br />
|-<br />
|clInfoBk|| Pinselfarbe für Hinweisse. Ist zu verwenden mit clInfoText || alle<br />
|-<br />
|clHotLight|| ? || kein<br />
|-<br />
|clGradientActiveCaption|| Die zweit Farbe um die aktive Fenstertitelleiste mit verlaufenden Farben darzustellen || kein<br />
|-<br />
|clGradientInactiveCaption|| Die zweit Farbe um die inaktive Fenstertitelleiste mit verlaufenden Farben darzustellen || kein<br />
|-<br />
|clMenuHighlight|| Die Hintergrundfarbe des ausgewählten Menüpunkts || kein<br />
|-<br />
|clMenuBar|| Die Hintergrundfarbe der Menüleiste || kein<br />
|-<br />
|clForm|| ? || kein<br />
|-<br />
|clColorDesktop|| ? || kein<br />
|-<br />
|cl3DFace|| ? || kein<br />
|-<br />
|cl3DShadow|| ? || kein<br />
|-<br />
|cl3DHiLight|| ? || kein<br />
|-<br />
|clBtnHiLight|| Das Gleiche wie clBtnHighlight || kein<br />
|}<br />
<br />
==Zeichnen von Themaelementen auf Ihren benutzerdefinierten Steuerelementen==<br />
Die Unit Themes bietet Funktionen, um einzelne Elemente der Standard-Controls zu erweitern. Zum Beispiel um ein Contol wie ein TTreeView zu erweitern verwenden Sie folgenden Code:<br><br />
<syntaxhighlight><br />
uses Themes;<br />
<br />
...<br />
<br />
procedure TYourCustomControl.Paint;<br />
const<br />
PlusMinusDetail: array[Boolean {Hot}, Boolean {Expanded}] of TThemedTreeview =<br />
(<br />
(ttGlyphClosed, ttGlyphOpened),<br />
(ttHotGlyphClosed, ttHotGlyphOpened)<br />
);<br />
var<br />
Details: TThemedElementDetails;<br />
R: TRect;<br />
Collapse: boolean;<br />
begin<br />
...<br />
// zeichnet eine Erweiterung<br />
Details := ThemeServices.GetElementDetails(PlusMinusDetail[False, Collapse]);<br />
R := Rect(ALeft, ATop, ARight + 1, ABottom + 1);<br />
ThemeServices.DrawElement(Canvas.Handle, Details, R, nil);<br />
...<br />
end;<br />
</syntaxhighlight><br />
<br />
--[[User:Olaf|Olaf]] 12:20, 6 August 2013 (CEST)<br />
[[Category:Graphics/de]]{{AutoCategory}}</div>
Olaf
https://wiki.freepascal.org/index.php?title=Colors/de&diff=95192
Colors/de
2015-09-05T07:19:33Z
<p>Olaf: /* Tabelle der Standardfarben */</p>
<hr />
<div>{{Colors}}<br />
<br><br><br />
__TOC__<br />
<br><br />
=Überblick=<br />
Die Standardfarben sind in der LCL (Komponentenbibliothek) TColor festgelegt. Diese Farben sind mit der Komponentenbibliothek TColor von Delphi kompatibel. TColor kann eine RGB Farbe (3x8bit), oder eine Systemfarbe wie clDefault anzeigen. Die Komponentenbibliothek arbeitet auch mit dem Typ TFPColor des fpImage Farbsystems zusammen. TFPColor stellt die Farben nach RGBA (4x16bit) dar und nicht wie TColor nach RGB (3x8bit) dar.<br><br />
<br><br />
==Umwandlung der Werte zwischen TColor und RGB==<br />
Die Unit '''Graphics''' bietet folgende Funktionen:<br><br />
<br><br />
<syntaxhighlight><br />
function Blue(rgb: TColor): BYTE; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function Green(rgb: TColor): BYTE; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function Red(rgb: TColor): BYTE; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function RGBToColor(R, G, B: Byte): TColor;<br />
procedure RedGreenBlue(rgb: TColor; out Red, Green, Blue: Byte); // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function FPColorToTColor(const FPColor: TFPColor): TColor;<br />
function TColorToFPColor(const c: TColor): TFPColor; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function IsSysColor(AColor: TColorRef): Boolean;<br />
</syntaxhighlight><br />
<br><br />
==umwandeln des Typs TColor von/in den Typ String==<br />
Funktionen die Strings wie "25500 oder "$AA0088" oder "clNavy" nach TColor umwandeln:<br><br />
* StringToColor<br><br />
* StringToColorDef<br><br />
<br><br />
Wandelt den Typ TColor in den Typ String um:<br><br />
* ColorToString<br><br />
<br />
=Tabelle der Standardfarben=<br />
Diese vordefinierten Farbkonstanten sind mit den Farbkonstanten in Delphi kompatibel:<br />
{| class="wikitable"<br />
|-<br />
! Farbkonstante<br />
! Farbe<br />
! Hexadezimalwert für die Verwendung mit TColor<br />
! Beispiel<br />
|-<br />
| clBlack<br />
| Black<br />
| TColor($000000);<br />
| style="background: #000000" |<br />
|-<br />
| clMaroon<br />
| Maroon<br />
| TColor($000080);<br />
| style="background: #800000" |<br />
|-<br />
| clGreen <br />
| Green<br />
| TColor($008000);<br />
| style="background: #008000" |<br />
|-<br />
| clOlive <br />
| Olive Green<br />
| TColor($008080);<br />
| style="background: #808000" |<br />
|-<br />
| clNavy <br />
| Navy Blue<br />
| TColor($800000);<br />
| style="background: #000080" |<br />
|-<br />
| clPurple <br />
| Purple<br />
| TColor($800080);<br />
| style="background: #800080" |<br />
|-<br />
| clTeal <br />
| Teal<br />
| TColor($808000);<br />
| style="background: #008080" |<br />
|-<br />
| clGray <br />
| Grey<br />
| TColor($808080);<br />
| style="background: #808080" |<br />
|-<br />
| clSilver <br />
| Silver<br />
| TColor($C0C0C0);<br />
| style="background: #C0C0C0" |<br />
|-<br />
| clRed <br />
| Red<br />
| TColor($0000FF);<br />
| style="background: #FF0000" |<br />
|-<br />
| clLime <br />
| Lime Green<br />
| TColor($00FF00);<br />
| style="background: #00FF00" |<br />
|-<br />
| clYellow <br />
| Yellow<br />
| TColor($00FFFF);<br />
| style="background: #FFFF00" |<br />
|-<br />
| clBlue <br />
| Blue<br />
| TColor($FF0000);<br />
| style="background: #0000FF" |<br />
|-<br />
| clFuchsia<br />
| Fuchsia<br />
| TColor($FF00FF);<br />
| style="background: #FF00FF" |<br />
|-<br />
| clAqua <br />
| Aqua<br />
| TColor($FFFF00);<br />
| style="background: #00FFFF" |<br />
|-<br />
| clLtGray <br />
| Light Grey<br />
| TColor($C0C0C0);<br />
| style="background: #D3D3D3" | alias: clSilver<br />
|-<br />
| clDkGray <br />
| Dark Grey<br />
| TColor($808080);<br />
| style="background: #808080; color: white;" | alias: clGray<br />
|-<br />
| clWhite <br />
| White<br />
| TColor($FFFFFF);<br />
| style="background: #FFFFFF" |<br />
|-<br />
| clCream <br />
| Cream<br />
| TColor($F0FBFF);<br />
| style="background: #FFFBF0;" | Version: Lazarus 1.2 und höher<br />
|-<br />
| clMedGray <br />
| Medium Grey<br />
| TColor($A4A0A0);<br />
| style="background: #A0A0A4;" | Version: Lazarus 1.2 und höher<br />
|-<br />
| clMoneyGreen <br />
| Mint Green<br />
| TColor($C0DCC0);<br />
| style="background: #C0DCC0;" | Version: Lazarus 1.2 und höher<br />
|-<br />
| clSkyBlue <br />
| Sky Blue<br />
| TColor($F0CAA6);<br />
| style="background: #A6CAF0;" | Version: Lazarus 1.2 und höher<br />
|}<br />
<br><br />
<br />
=Systemfarben=<br />
==Beispiel: clInfoBk, clInfoText==<br />
Systemfarben sind Farbkonstanten mit einer besonderen Bedeutung. Ihr wirklicher Wert hängt vom Kontext und dem Windowsthema ab. Sie sind keine einfachen Farben.<br><br />
'''clInfoBk''' zum Beispiel:<br><br />
<syntaxhighlight><br />
Form1.Canvas.Brush.Color:=clInfoBk; // verwende den Standardhintergrund Pinsel für ein Hinweisfenster<br />
Form1.Canvas.FillRect(10,10,50,50);<br />
</syntaxhighlight><br />
<br><br />
Ein Hinweisfenster unter MS-Windows könnte einen weißen Hintergrund haben. Unter Linux/GTK2 könnte das Hinweisfenster eine metallische Beschaffenheit haben. Wenn Sie nun einen Text in diese Fläche schreiben möchten, dann müssen Sie, wenn Sie den Text lesen möchten die Farbe auf einen Wert wie clInfoText ändern.<br />
Zum Beispiel:<br><br />
<syntaxhighlight><br />
Form1.Canvas.Brush.Color:=clInfoBk; // verwende den Pinsel für die Standardhintergrundfarbe für ein Hinweisfenster<br />
Form1.Canvas.FillRect(10,10,50,50);<br />
Form1.Canvas.Font.Color:=clInfoText; // verwende den Pinsel für die Standardtextfarbe für ein Hinweisfenster<br />
Form1.Canvas.TextOut(10,10,'Hint');<br />
</syntaxhighlight><br />
<br><br />
Die Systemfarbe '''clInfoBk''' kann nicht für Pen.Color und nicht für Font.Color verwendet werden. Wenn Sie dies tun, dann ist das Ergebnis nicht definiert und hängt vom verwendeten widgetset (= Sammlung von Grafik Bibliotheken) und dem vom Benutzer gewählten Thema (= grafische Darstellung der Betriebssystemoberfläche) ab.<br />
Das gleiche gilt für '''clInfoText'''. Es kann nur als Font.Color verwendet werden. eine Verwendung mit Brush.Color wird nicht funktionieren. Im Moment erlauben alle widgetsets die Verwendung mit Pen.Color.<br />
<br><br />
==Ändern des Fensterthemas des Betriebssystems==<br />
Wenn z. B. der Benutzer das Thema (= grafische Darstellung der Betriebssystemoberfläche) wechselt dann kann das Betriebssystem seine Farben ändern.<br />
'''clInfoBk''' kann sich z. B. von weiß nach blau ändern oder von einer Farbe zu einer Textur. Das kann dem Programmierer Probleme bereiten. <br />
Das liegt daran, das sich der Farbwert der vordefinierten Systemfarben im eigenen Programm nicht automatisch anpasst. Der Programmierer muss dafür sorgen, das die Systemfarben den aktuellen Wert erhalten.<br><br />
Dazu ist ein Zwischenschritt nötig.<br><br />
Beispiel:<br><br />
<syntaxhighlight><br />
Form1.Canvas.Brush.Color:=clInfoBk; // der Pinsel erhält die aktuellen Systemfarben<br />
Form1.Canvas.FillRect(10,10,50,50); // dies erstellt einen Pinsel mit dem Farbwert<br />
// des Hinweisfensters des aktiven Fensterthemas<br />
...<br />
// Wenn das Thema (= grafische Darstellung der Betriebssystemoberfläche) vom Anwender<br />
// zwischenzeitlich geändert wird, dann hat der Pinsel noch die vorhergehenden Farbwerte<br />
...<br />
Form1.Canvas.FillRect(10,10,50,50); // mit dem Pinsel wird der Farbwert des vorhergehenden Themas gezeichnet<br />
Form1.Canvas.Brush.Color:=clInfoBk; // durch eine erneute Zuweisung wird der<br />
// vorhergehenden Farbwert nicht aktualisiert<br />
Form1.Canvas.FillRect(10,10,50,50); // mit dem Pinsel wird der Farbwert des alten Themas gezeichnet<br />
Form1.Canvas.Brush.Color:=clRed; // eine Zuweisung mit einem neuen Farbwert macht den<br />
// vorhergehenden Farbwert ungültig<br />
Form1.Canvas.Brush.Color:=clInfoBk; // eine Zuweisung mit einem neuen Farbwert macht den<br />
// vorhergehenden Farbwert ungültig<br />
Form1.Canvas.FillRect(10,10,50,50); // jetzt, wird der Farbwert des aktuellen Themas verwendet<br />
</syntaxhighlight><br />
<br />
==Tabelle der Systemfarben==<br />
In der folgenden Tabelle werden die Systemfarben und ihre Bedeutung aufgelistet. Werden die Systemfarben ausserhalb des definierten Geltungsbereiches verwendet, dann ist das Ergebnis unvorhersehbar. Die Systemfarben sind immer vom aktuell verwendeten Widget-Set (eine Sammlung von grafischen Bedienelementen) und dem aktuell verwendeten Thema (grafische Darstellung der Betriebssystemoberfläche) abhängig.<br />
<br />
{| class="wikitable"<br />
! Konstante !! LCL Definition !! Unterstützte Widgetsets<br />
|-<br />
|clNone|| Der Farbwert ist nicht definiert. D. h. er hat keine Auswirkungen bzw. er kann im Einzelfall einen weißen Farbwert haben.|| alle<br />
|-<br />
|clDefault|| Verwendet die vorgesehene Standardfarbe || alle<br />
|-<br />
|clScrollBar|| Scrollbar Körper || alle<br />
|-<br />
|clBackground|| ? || alle<br />
|-<br />
|clActiveCaption|| Titelleiste des aktiven Fensters || kein<br />
|-<br />
|clInactiveCaption|| Titelleiste des inaktiven Fensters || kein<br />
|-<br />
|clMenu|| Regular menu item background color || kein<br />
|-<br />
|clWindow|| The normal background brush of unselected text. Defined for controls like TEdit, TComboBox, TMemo, TListBox, TTreeView.|| kein<br />
|-<br />
|clWindowFrame|| Farbe der Rahmen um das Fenster || kein<br />
|-<br />
|clMenuText|| Die Schriftfarbe ist zusammen mit clMenu zu verwenden || kein<br />
|-<br />
|clWindowText|| Die Schriftfarbe ist zusammen mit clWindow zu verwenden || kein<br />
|-<br />
|clCaptionText|| Textfarbe das aktiven Fensters || kein<br />
|-<br />
|clActiveBorder|| ? || kein<br />
|-<br />
|clInactiveBorder|| ? || kein<br />
|-<br />
|clAppWorkspace|| MDIMain form background || kein<br />
|-<br />
|clHighlight|| Die Pinselfarbe des ausgewählten Elements || kein<br />
|-<br />
|clHighlightText|| Schriftfarbe vom ausgewählten Text (zusammen mit clHighligh). || kein<br />
|-<br />
|clBtnFace|| Button Hintergrund || kein<br />
|-<br />
|clBtnShadow|| Farbe des Button Schattens wird verwendet, um 3D-Effekt zu erzielen || kein<br />
|-<br />
|clGrayText|| Die Schriftfarbe von einem deaktiverten Element || kein<br />
|-<br />
|clBtnText|| Button Schriftfarbe zu verwenden mit clBtnFace || kein<br />
|-<br />
|clInactiveCaptionText|| Textfarbe der inaktiven Fenstertitelleiste || kein<br />
|-<br />
|clBtnHighlight|| Button Farbhervorhebung wird verwendet, um 3D-Effekt zu erzielen || kein<br />
|-<br />
|cl3DDkShadow|| ? || kein<br />
|-<br />
|cl3DLight|| ? || kein<br />
|-<br />
|clInfoText|| Schriftfarbe für Hinweise. Ist zu verwenden mit clInfoBk || alle<br />
|-<br />
|clInfoBk|| Pinselfarbe für Hinweisse. Ist zu verwenden mit clInfoText || alle<br />
|-<br />
|clHotLight|| ? || kein<br />
|-<br />
|clGradientActiveCaption|| Die zweit Farbe um die aktive Fenstertitelleiste mit verlaufenden Farben darzustellen || kein<br />
|-<br />
|clGradientInactiveCaption|| Die zweit Farbe um die inaktive Fenstertitelleiste mit verlaufenden Farben darzustellen || kein<br />
|-<br />
|clMenuHighlight|| Die Hintergrundfarbe des ausgewählten Menüpunkts || kein<br />
|-<br />
|clMenuBar|| Die Hintergrundfarbe der Menüleiste || kein<br />
|-<br />
|clForm|| ? || kein<br />
|-<br />
|clColorDesktop|| ? || kein<br />
|-<br />
|cl3DFace|| ? || kein<br />
|-<br />
|cl3DShadow|| ? || kein<br />
|-<br />
|cl3DHiLight|| ? || kein<br />
|-<br />
|clBtnHiLight|| Das Gleiche wie clBtnHighlight || kein<br />
|}<br />
<br />
==Zeichnen von Themaelementen auf Ihren benutzerdefinierten Steuerelementen==<br />
Die Unit Themes bietet Funktionen, um einzelne Elemente der Standard-Controls zu erweitern. Zum Beispiel um ein Contol wie ein TTreeView zu erweitern verwenden Sie folgenden Code:<br><br />
<syntaxhighlight><br />
uses Themes;<br />
<br />
...<br />
<br />
procedure TYourCustomControl.Paint;<br />
const<br />
PlusMinusDetail: array[Boolean {Hot}, Boolean {Expanded}] of TThemedTreeview =<br />
(<br />
(ttGlyphClosed, ttGlyphOpened),<br />
(ttHotGlyphClosed, ttHotGlyphOpened)<br />
);<br />
var<br />
Details: TThemedElementDetails;<br />
R: TRect;<br />
Collapse: boolean;<br />
begin<br />
...<br />
// zeichnet eine Erweiterung<br />
Details := ThemeServices.GetElementDetails(PlusMinusDetail[False, Collapse]);<br />
R := Rect(ALeft, ATop, ARight + 1, ABottom + 1);<br />
ThemeServices.DrawElement(Canvas.Handle, Details, R, nil);<br />
...<br />
end;<br />
</syntaxhighlight><br />
<br />
--[[User:Olaf|Olaf]] 12:20, 6 August 2013 (CEST)<br />
[[Category:Graphics/de]]{{AutoCategory}}</div>
Olaf
https://wiki.freepascal.org/index.php?title=Colors/de&diff=95191
Colors/de
2015-09-05T07:18:22Z
<p>Olaf: /* Vordefinierte Farbkonstanten */</p>
<hr />
<div>{{Colors}}<br />
<br><br><br />
__TOC__<br />
<br><br />
=Überblick=<br />
Die Standardfarben sind in der LCL (Komponentenbibliothek) TColor festgelegt. Diese Farben sind mit der Komponentenbibliothek TColor von Delphi kompatibel. TColor kann eine RGB Farbe (3x8bit), oder eine Systemfarbe wie clDefault anzeigen. Die Komponentenbibliothek arbeitet auch mit dem Typ TFPColor des fpImage Farbsystems zusammen. TFPColor stellt die Farben nach RGBA (4x16bit) dar und nicht wie TColor nach RGB (3x8bit) dar.<br><br />
<br><br />
==Umwandlung der Werte zwischen TColor und RGB==<br />
Die Unit '''Graphics''' bietet folgende Funktionen:<br><br />
<br><br />
<syntaxhighlight><br />
function Blue(rgb: TColor): BYTE; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function Green(rgb: TColor): BYTE; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function Red(rgb: TColor): BYTE; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function RGBToColor(R, G, B: Byte): TColor;<br />
procedure RedGreenBlue(rgb: TColor; out Red, Green, Blue: Byte); // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function FPColorToTColor(const FPColor: TFPColor): TColor;<br />
function TColorToFPColor(const c: TColor): TFPColor; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function IsSysColor(AColor: TColorRef): Boolean;<br />
</syntaxhighlight><br />
<br><br />
==umwandeln des Typs TColor von/in den Typ String==<br />
Funktionen die Strings wie "25500 oder "$AA0088" oder "clNavy" nach TColor umwandeln:<br><br />
* StringToColor<br><br />
* StringToColorDef<br><br />
<br><br />
Wandelt den Typ TColor in den Typ String um:<br><br />
* ColorToString<br><br />
<br />
=Tabelle der Standardfarben=<br />
Diese vordefinierten Farbkonstanten sind mit den Farbkonstanten in Delphi kompatibel:<br />
{| class="wikitable"<br />
|-<br />
! Farbkonstante<br />
! Farbe<br />
! Hexadezimalwert für die Verwendung mit TColor<br />
! Beispiel<br />
|-<br />
| clBlack<br />
| Black<br />
| TColor($000000);<br />
| style="background: #000000" |<br />
|-<br />
| clMaroon<br />
| Maroon<br />
| TColor($000080);<br />
| style="background: #800000" |<br />
|-<br />
| clGreen <br />
| Green<br />
| TColor($008000);<br />
| style="background: #008000" |<br />
|-<br />
| clOlive <br />
| Olive Green<br />
| TColor($008080);<br />
| style="background: #808000" |<br />
|-<br />
| clNavy <br />
| Navy Blue<br />
| TColor($800000);<br />
| style="background: #000080" |<br />
|-<br />
| clPurple <br />
| Purple<br />
| TColor($800080);<br />
| style="background: #800080" |<br />
|-<br />
| clTeal <br />
| Teal<br />
| TColor($808000);<br />
| style="background: #008080" |<br />
|-<br />
| clGray <br />
| Grey<br />
| TColor($808080);<br />
| style="background: #808080" |<br />
|-<br />
| clSilver <br />
| Silver<br />
| TColor($C0C0C0);<br />
| style="background: #C0C0C0" |<br />
|-<br />
| clRed <br />
| Red<br />
| TColor($0000FF);<br />
| style="background: #FF0000" |<br />
|-<br />
| clLime <br />
| Lime Green<br />
| TColor($00FF00);<br />
| style="background: #00FF00" |<br />
|-<br />
| clYellow <br />
| Yellow<br />
| TColor($00FFFF);<br />
| style="background: #FFFF00" |<br />
|-<br />
| clBlue <br />
| Blue<br />
| TColor($FF0000);<br />
| style="background: #0000FF" |<br />
|-<br />
| clFuchsia<br />
| Fuchsia<br />
| TColor($FF00FF);<br />
| style="background: #FF00FF" |<br />
|-<br />
| clAqua <br />
| Aqua<br />
| TColor($FFFF00);<br />
| style="background: #00FFFF" |<br />
|-<br />
| clLtGray <br />
| Light Grey<br />
| TColor($C0C0C0);<br />
| style="background: #D3D3D3" | früher: clSilver<br />
|-<br />
| clDkGray <br />
| Dark Grey<br />
| TColor($808080);<br />
| style="background: #808080; color: white;" | früher: clGray<br />
|-<br />
| clWhite <br />
| White<br />
| TColor($FFFFFF);<br />
| style="background: #FFFFFF" |<br />
|-<br />
| clCream <br />
| Cream<br />
| TColor($F0FBFF);<br />
| style="background: #FFFBF0;" | Version: Lazarus 1.2 und höher<br />
|-<br />
| clMedGray <br />
| Medium Grey<br />
| TColor($A4A0A0);<br />
| style="background: #A0A0A4;" | Version: Lazarus 1.2 und höher<br />
|-<br />
| clMoneyGreen <br />
| Mint Green<br />
| TColor($C0DCC0);<br />
| style="background: #C0DCC0;" | Version: Lazarus 1.2 und höher<br />
|-<br />
| clSkyBlue <br />
| Sky Blue<br />
| TColor($F0CAA6);<br />
| style="background: #A6CAF0;" | Version: Lazarus 1.2 und höher<br />
|}<br />
<br><br />
<br />
=Systemfarben=<br />
==Beispiel: clInfoBk, clInfoText==<br />
Systemfarben sind Farbkonstanten mit einer besonderen Bedeutung. Ihr wirklicher Wert hängt vom Kontext und dem Windowsthema ab. Sie sind keine einfachen Farben.<br><br />
'''clInfoBk''' zum Beispiel:<br><br />
<syntaxhighlight><br />
Form1.Canvas.Brush.Color:=clInfoBk; // verwende den Standardhintergrund Pinsel für ein Hinweisfenster<br />
Form1.Canvas.FillRect(10,10,50,50);<br />
</syntaxhighlight><br />
<br><br />
Ein Hinweisfenster unter MS-Windows könnte einen weißen Hintergrund haben. Unter Linux/GTK2 könnte das Hinweisfenster eine metallische Beschaffenheit haben. Wenn Sie nun einen Text in diese Fläche schreiben möchten, dann müssen Sie, wenn Sie den Text lesen möchten die Farbe auf einen Wert wie clInfoText ändern.<br />
Zum Beispiel:<br><br />
<syntaxhighlight><br />
Form1.Canvas.Brush.Color:=clInfoBk; // verwende den Pinsel für die Standardhintergrundfarbe für ein Hinweisfenster<br />
Form1.Canvas.FillRect(10,10,50,50);<br />
Form1.Canvas.Font.Color:=clInfoText; // verwende den Pinsel für die Standardtextfarbe für ein Hinweisfenster<br />
Form1.Canvas.TextOut(10,10,'Hint');<br />
</syntaxhighlight><br />
<br><br />
Die Systemfarbe '''clInfoBk''' kann nicht für Pen.Color und nicht für Font.Color verwendet werden. Wenn Sie dies tun, dann ist das Ergebnis nicht definiert und hängt vom verwendeten widgetset (= Sammlung von Grafik Bibliotheken) und dem vom Benutzer gewählten Thema (= grafische Darstellung der Betriebssystemoberfläche) ab.<br />
Das gleiche gilt für '''clInfoText'''. Es kann nur als Font.Color verwendet werden. eine Verwendung mit Brush.Color wird nicht funktionieren. Im Moment erlauben alle widgetsets die Verwendung mit Pen.Color.<br />
<br><br />
==Ändern des Fensterthemas des Betriebssystems==<br />
Wenn z. B. der Benutzer das Thema (= grafische Darstellung der Betriebssystemoberfläche) wechselt dann kann das Betriebssystem seine Farben ändern.<br />
'''clInfoBk''' kann sich z. B. von weiß nach blau ändern oder von einer Farbe zu einer Textur. Das kann dem Programmierer Probleme bereiten. <br />
Das liegt daran, das sich der Farbwert der vordefinierten Systemfarben im eigenen Programm nicht automatisch anpasst. Der Programmierer muss dafür sorgen, das die Systemfarben den aktuellen Wert erhalten.<br><br />
Dazu ist ein Zwischenschritt nötig.<br><br />
Beispiel:<br><br />
<syntaxhighlight><br />
Form1.Canvas.Brush.Color:=clInfoBk; // der Pinsel erhält die aktuellen Systemfarben<br />
Form1.Canvas.FillRect(10,10,50,50); // dies erstellt einen Pinsel mit dem Farbwert<br />
// des Hinweisfensters des aktiven Fensterthemas<br />
...<br />
// Wenn das Thema (= grafische Darstellung der Betriebssystemoberfläche) vom Anwender<br />
// zwischenzeitlich geändert wird, dann hat der Pinsel noch die vorhergehenden Farbwerte<br />
...<br />
Form1.Canvas.FillRect(10,10,50,50); // mit dem Pinsel wird der Farbwert des vorhergehenden Themas gezeichnet<br />
Form1.Canvas.Brush.Color:=clInfoBk; // durch eine erneute Zuweisung wird der<br />
// vorhergehenden Farbwert nicht aktualisiert<br />
Form1.Canvas.FillRect(10,10,50,50); // mit dem Pinsel wird der Farbwert des alten Themas gezeichnet<br />
Form1.Canvas.Brush.Color:=clRed; // eine Zuweisung mit einem neuen Farbwert macht den<br />
// vorhergehenden Farbwert ungültig<br />
Form1.Canvas.Brush.Color:=clInfoBk; // eine Zuweisung mit einem neuen Farbwert macht den<br />
// vorhergehenden Farbwert ungültig<br />
Form1.Canvas.FillRect(10,10,50,50); // jetzt, wird der Farbwert des aktuellen Themas verwendet<br />
</syntaxhighlight><br />
<br />
==Tabelle der Systemfarben==<br />
In der folgenden Tabelle werden die Systemfarben und ihre Bedeutung aufgelistet. Werden die Systemfarben ausserhalb des definierten Geltungsbereiches verwendet, dann ist das Ergebnis unvorhersehbar. Die Systemfarben sind immer vom aktuell verwendeten Widget-Set (eine Sammlung von grafischen Bedienelementen) und dem aktuell verwendeten Thema (grafische Darstellung der Betriebssystemoberfläche) abhängig.<br />
<br />
{| class="wikitable"<br />
! Konstante !! LCL Definition !! Unterstützte Widgetsets<br />
|-<br />
|clNone|| Der Farbwert ist nicht definiert. D. h. er hat keine Auswirkungen bzw. er kann im Einzelfall einen weißen Farbwert haben.|| alle<br />
|-<br />
|clDefault|| Verwendet die vorgesehene Standardfarbe || alle<br />
|-<br />
|clScrollBar|| Scrollbar Körper || alle<br />
|-<br />
|clBackground|| ? || alle<br />
|-<br />
|clActiveCaption|| Titelleiste des aktiven Fensters || kein<br />
|-<br />
|clInactiveCaption|| Titelleiste des inaktiven Fensters || kein<br />
|-<br />
|clMenu|| Regular menu item background color || kein<br />
|-<br />
|clWindow|| The normal background brush of unselected text. Defined for controls like TEdit, TComboBox, TMemo, TListBox, TTreeView.|| kein<br />
|-<br />
|clWindowFrame|| Farbe der Rahmen um das Fenster || kein<br />
|-<br />
|clMenuText|| Die Schriftfarbe ist zusammen mit clMenu zu verwenden || kein<br />
|-<br />
|clWindowText|| Die Schriftfarbe ist zusammen mit clWindow zu verwenden || kein<br />
|-<br />
|clCaptionText|| Textfarbe das aktiven Fensters || kein<br />
|-<br />
|clActiveBorder|| ? || kein<br />
|-<br />
|clInactiveBorder|| ? || kein<br />
|-<br />
|clAppWorkspace|| MDIMain form background || kein<br />
|-<br />
|clHighlight|| Die Pinselfarbe des ausgewählten Elements || kein<br />
|-<br />
|clHighlightText|| Schriftfarbe vom ausgewählten Text (zusammen mit clHighligh). || kein<br />
|-<br />
|clBtnFace|| Button Hintergrund || kein<br />
|-<br />
|clBtnShadow|| Farbe des Button Schattens wird verwendet, um 3D-Effekt zu erzielen || kein<br />
|-<br />
|clGrayText|| Die Schriftfarbe von einem deaktiverten Element || kein<br />
|-<br />
|clBtnText|| Button Schriftfarbe zu verwenden mit clBtnFace || kein<br />
|-<br />
|clInactiveCaptionText|| Textfarbe der inaktiven Fenstertitelleiste || kein<br />
|-<br />
|clBtnHighlight|| Button Farbhervorhebung wird verwendet, um 3D-Effekt zu erzielen || kein<br />
|-<br />
|cl3DDkShadow|| ? || kein<br />
|-<br />
|cl3DLight|| ? || kein<br />
|-<br />
|clInfoText|| Schriftfarbe für Hinweise. Ist zu verwenden mit clInfoBk || alle<br />
|-<br />
|clInfoBk|| Pinselfarbe für Hinweisse. Ist zu verwenden mit clInfoText || alle<br />
|-<br />
|clHotLight|| ? || kein<br />
|-<br />
|clGradientActiveCaption|| Die zweit Farbe um die aktive Fenstertitelleiste mit verlaufenden Farben darzustellen || kein<br />
|-<br />
|clGradientInactiveCaption|| Die zweit Farbe um die inaktive Fenstertitelleiste mit verlaufenden Farben darzustellen || kein<br />
|-<br />
|clMenuHighlight|| Die Hintergrundfarbe des ausgewählten Menüpunkts || kein<br />
|-<br />
|clMenuBar|| Die Hintergrundfarbe der Menüleiste || kein<br />
|-<br />
|clForm|| ? || kein<br />
|-<br />
|clColorDesktop|| ? || kein<br />
|-<br />
|cl3DFace|| ? || kein<br />
|-<br />
|cl3DShadow|| ? || kein<br />
|-<br />
|cl3DHiLight|| ? || kein<br />
|-<br />
|clBtnHiLight|| Das Gleiche wie clBtnHighlight || kein<br />
|}<br />
<br />
==Zeichnen von Themaelementen auf Ihren benutzerdefinierten Steuerelementen==<br />
Die Unit Themes bietet Funktionen, um einzelne Elemente der Standard-Controls zu erweitern. Zum Beispiel um ein Contol wie ein TTreeView zu erweitern verwenden Sie folgenden Code:<br><br />
<syntaxhighlight><br />
uses Themes;<br />
<br />
...<br />
<br />
procedure TYourCustomControl.Paint;<br />
const<br />
PlusMinusDetail: array[Boolean {Hot}, Boolean {Expanded}] of TThemedTreeview =<br />
(<br />
(ttGlyphClosed, ttGlyphOpened),<br />
(ttHotGlyphClosed, ttHotGlyphOpened)<br />
);<br />
var<br />
Details: TThemedElementDetails;<br />
R: TRect;<br />
Collapse: boolean;<br />
begin<br />
...<br />
// zeichnet eine Erweiterung<br />
Details := ThemeServices.GetElementDetails(PlusMinusDetail[False, Collapse]);<br />
R := Rect(ALeft, ATop, ARight + 1, ABottom + 1);<br />
ThemeServices.DrawElement(Canvas.Handle, Details, R, nil);<br />
...<br />
end;<br />
</syntaxhighlight><br />
<br />
--[[User:Olaf|Olaf]] 12:20, 6 August 2013 (CEST)<br />
[[Category:Graphics/de]]{{AutoCategory}}</div>
Olaf
https://wiki.freepascal.org/index.php?title=Colors/de&diff=95190
Colors/de
2015-09-05T07:10:27Z
<p>Olaf: /* Vordefinierte Farbkonstanten */</p>
<hr />
<div>{{Colors}}<br />
<br><br><br />
__TOC__<br />
<br><br />
=Überblick=<br />
Die Standardfarben sind in der LCL (Komponentenbibliothek) TColor festgelegt. Diese Farben sind mit der Komponentenbibliothek TColor von Delphi kompatibel. TColor kann eine RGB Farbe (3x8bit), oder eine Systemfarbe wie clDefault anzeigen. Die Komponentenbibliothek arbeitet auch mit dem Typ TFPColor des fpImage Farbsystems zusammen. TFPColor stellt die Farben nach RGBA (4x16bit) dar und nicht wie TColor nach RGB (3x8bit) dar.<br><br />
<br><br />
==Umwandlung der Werte zwischen TColor und RGB==<br />
Die Unit '''Graphics''' bietet folgende Funktionen:<br><br />
<br><br />
<syntaxhighlight><br />
function Blue(rgb: TColor): BYTE; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function Green(rgb: TColor): BYTE; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function Red(rgb: TColor): BYTE; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function RGBToColor(R, G, B: Byte): TColor;<br />
procedure RedGreenBlue(rgb: TColor; out Red, Green, Blue: Byte); // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function FPColorToTColor(const FPColor: TFPColor): TColor;<br />
function TColorToFPColor(const c: TColor): TFPColor; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function IsSysColor(AColor: TColorRef): Boolean;<br />
</syntaxhighlight><br />
<br><br />
==umwandeln des Typs TColor von/in den Typ String==<br />
Funktionen die Strings wie "25500 oder "$AA0088" oder "clNavy" nach TColor umwandeln:<br><br />
* StringToColor<br><br />
* StringToColorDef<br><br />
<br><br />
Wandelt den Typ TColor in den Typ String um:<br><br />
* ColorToString<br><br />
<br />
= Vordefinierte Farbkonstanten =<br />
<syntaxhighlight><br />
// Standardfarben<br />
clBlack = TColor($000000);<br />
clMaroon = TColor($000080);<br />
clGreen = TColor($008000);<br />
clOlive = TColor($008080);<br />
clNavy = TColor($800000);<br />
clPurple = TColor($800080);<br />
clTeal = TColor($808000);<br />
clGray = TColor($808080);<br />
clSilver = TColor($C0C0C0);<br />
clRed = TColor($0000FF);<br />
clLime = TColor($00FF00);<br />
clYellow = TColor($00FFFF);<br />
clBlue = TColor($FF0000);<br />
clFuchsia = TColor($FF00FF);<br />
clAqua = TColor($FFFF00);<br />
clLtGray = TColor($C0C0C0); // Alias: clSilver<br />
clDkGray = TColor($808080); // Alias: clGray<br />
clWhite = TColor($FFFFFF);<br />
</syntaxhighlight><br />
<br />
=Systemfarben=<br />
==Beispiel: clInfoBk, clInfoText==<br />
Systemfarben sind Farbkonstanten mit einer besonderen Bedeutung. Ihr wirklicher Wert hängt vom Kontext und dem Windowsthema ab. Sie sind keine einfachen Farben.<br><br />
'''clInfoBk''' zum Beispiel:<br><br />
<syntaxhighlight><br />
Form1.Canvas.Brush.Color:=clInfoBk; // verwende den Standardhintergrund Pinsel für ein Hinweisfenster<br />
Form1.Canvas.FillRect(10,10,50,50);<br />
</syntaxhighlight><br />
<br><br />
Ein Hinweisfenster unter MS-Windows könnte einen weißen Hintergrund haben. Unter Linux/GTK2 könnte das Hinweisfenster eine metallische Beschaffenheit haben. Wenn Sie nun einen Text in diese Fläche schreiben möchten, dann müssen Sie, wenn Sie den Text lesen möchten die Farbe auf einen Wert wie clInfoText ändern.<br />
Zum Beispiel:<br><br />
<syntaxhighlight><br />
Form1.Canvas.Brush.Color:=clInfoBk; // verwende den Pinsel für die Standardhintergrundfarbe für ein Hinweisfenster<br />
Form1.Canvas.FillRect(10,10,50,50);<br />
Form1.Canvas.Font.Color:=clInfoText; // verwende den Pinsel für die Standardtextfarbe für ein Hinweisfenster<br />
Form1.Canvas.TextOut(10,10,'Hint');<br />
</syntaxhighlight><br />
<br><br />
Die Systemfarbe '''clInfoBk''' kann nicht für Pen.Color und nicht für Font.Color verwendet werden. Wenn Sie dies tun, dann ist das Ergebnis nicht definiert und hängt vom verwendeten widgetset (= Sammlung von Grafik Bibliotheken) und dem vom Benutzer gewählten Thema (= grafische Darstellung der Betriebssystemoberfläche) ab.<br />
Das gleiche gilt für '''clInfoText'''. Es kann nur als Font.Color verwendet werden. eine Verwendung mit Brush.Color wird nicht funktionieren. Im Moment erlauben alle widgetsets die Verwendung mit Pen.Color.<br />
<br><br />
==Ändern des Fensterthemas des Betriebssystems==<br />
Wenn z. B. der Benutzer das Thema (= grafische Darstellung der Betriebssystemoberfläche) wechselt dann kann das Betriebssystem seine Farben ändern.<br />
'''clInfoBk''' kann sich z. B. von weiß nach blau ändern oder von einer Farbe zu einer Textur. Das kann dem Programmierer Probleme bereiten. <br />
Das liegt daran, das sich der Farbwert der vordefinierten Systemfarben im eigenen Programm nicht automatisch anpasst. Der Programmierer muss dafür sorgen, das die Systemfarben den aktuellen Wert erhalten.<br><br />
Dazu ist ein Zwischenschritt nötig.<br><br />
Beispiel:<br><br />
<syntaxhighlight><br />
Form1.Canvas.Brush.Color:=clInfoBk; // der Pinsel erhält die aktuellen Systemfarben<br />
Form1.Canvas.FillRect(10,10,50,50); // dies erstellt einen Pinsel mit dem Farbwert<br />
// des Hinweisfensters des aktiven Fensterthemas<br />
...<br />
// Wenn das Thema (= grafische Darstellung der Betriebssystemoberfläche) vom Anwender<br />
// zwischenzeitlich geändert wird, dann hat der Pinsel noch die vorhergehenden Farbwerte<br />
...<br />
Form1.Canvas.FillRect(10,10,50,50); // mit dem Pinsel wird der Farbwert des vorhergehenden Themas gezeichnet<br />
Form1.Canvas.Brush.Color:=clInfoBk; // durch eine erneute Zuweisung wird der<br />
// vorhergehenden Farbwert nicht aktualisiert<br />
Form1.Canvas.FillRect(10,10,50,50); // mit dem Pinsel wird der Farbwert des alten Themas gezeichnet<br />
Form1.Canvas.Brush.Color:=clRed; // eine Zuweisung mit einem neuen Farbwert macht den<br />
// vorhergehenden Farbwert ungültig<br />
Form1.Canvas.Brush.Color:=clInfoBk; // eine Zuweisung mit einem neuen Farbwert macht den<br />
// vorhergehenden Farbwert ungültig<br />
Form1.Canvas.FillRect(10,10,50,50); // jetzt, wird der Farbwert des aktuellen Themas verwendet<br />
</syntaxhighlight><br />
<br />
==Tabelle der Systemfarben==<br />
In der folgenden Tabelle werden die Systemfarben und ihre Bedeutung aufgelistet. Werden die Systemfarben ausserhalb des definierten Geltungsbereiches verwendet, dann ist das Ergebnis unvorhersehbar. Die Systemfarben sind immer vom aktuell verwendeten Widget-Set (eine Sammlung von grafischen Bedienelementen) und dem aktuell verwendeten Thema (grafische Darstellung der Betriebssystemoberfläche) abhängig.<br />
<br />
{| class="wikitable"<br />
! Konstante !! LCL Definition !! Unterstützte Widgetsets<br />
|-<br />
|clNone|| Der Farbwert ist nicht definiert. D. h. er hat keine Auswirkungen bzw. er kann im Einzelfall einen weißen Farbwert haben.|| alle<br />
|-<br />
|clDefault|| Verwendet die vorgesehene Standardfarbe || alle<br />
|-<br />
|clScrollBar|| Scrollbar Körper || alle<br />
|-<br />
|clBackground|| ? || alle<br />
|-<br />
|clActiveCaption|| Titelleiste des aktiven Fensters || kein<br />
|-<br />
|clInactiveCaption|| Titelleiste des inaktiven Fensters || kein<br />
|-<br />
|clMenu|| Regular menu item background color || kein<br />
|-<br />
|clWindow|| The normal background brush of unselected text. Defined for controls like TEdit, TComboBox, TMemo, TListBox, TTreeView.|| kein<br />
|-<br />
|clWindowFrame|| Farbe der Rahmen um das Fenster || kein<br />
|-<br />
|clMenuText|| Die Schriftfarbe ist zusammen mit clMenu zu verwenden || kein<br />
|-<br />
|clWindowText|| Die Schriftfarbe ist zusammen mit clWindow zu verwenden || kein<br />
|-<br />
|clCaptionText|| Textfarbe das aktiven Fensters || kein<br />
|-<br />
|clActiveBorder|| ? || kein<br />
|-<br />
|clInactiveBorder|| ? || kein<br />
|-<br />
|clAppWorkspace|| MDIMain form background || kein<br />
|-<br />
|clHighlight|| Die Pinselfarbe des ausgewählten Elements || kein<br />
|-<br />
|clHighlightText|| Schriftfarbe vom ausgewählten Text (zusammen mit clHighligh). || kein<br />
|-<br />
|clBtnFace|| Button Hintergrund || kein<br />
|-<br />
|clBtnShadow|| Farbe des Button Schattens wird verwendet, um 3D-Effekt zu erzielen || kein<br />
|-<br />
|clGrayText|| Die Schriftfarbe von einem deaktiverten Element || kein<br />
|-<br />
|clBtnText|| Button Schriftfarbe zu verwenden mit clBtnFace || kein<br />
|-<br />
|clInactiveCaptionText|| Textfarbe der inaktiven Fenstertitelleiste || kein<br />
|-<br />
|clBtnHighlight|| Button Farbhervorhebung wird verwendet, um 3D-Effekt zu erzielen || kein<br />
|-<br />
|cl3DDkShadow|| ? || kein<br />
|-<br />
|cl3DLight|| ? || kein<br />
|-<br />
|clInfoText|| Schriftfarbe für Hinweise. Ist zu verwenden mit clInfoBk || alle<br />
|-<br />
|clInfoBk|| Pinselfarbe für Hinweisse. Ist zu verwenden mit clInfoText || alle<br />
|-<br />
|clHotLight|| ? || kein<br />
|-<br />
|clGradientActiveCaption|| Die zweit Farbe um die aktive Fenstertitelleiste mit verlaufenden Farben darzustellen || kein<br />
|-<br />
|clGradientInactiveCaption|| Die zweit Farbe um die inaktive Fenstertitelleiste mit verlaufenden Farben darzustellen || kein<br />
|-<br />
|clMenuHighlight|| Die Hintergrundfarbe des ausgewählten Menüpunkts || kein<br />
|-<br />
|clMenuBar|| Die Hintergrundfarbe der Menüleiste || kein<br />
|-<br />
|clForm|| ? || kein<br />
|-<br />
|clColorDesktop|| ? || kein<br />
|-<br />
|cl3DFace|| ? || kein<br />
|-<br />
|cl3DShadow|| ? || kein<br />
|-<br />
|cl3DHiLight|| ? || kein<br />
|-<br />
|clBtnHiLight|| Das Gleiche wie clBtnHighlight || kein<br />
|}<br />
<br />
==Zeichnen von Themaelementen auf Ihren benutzerdefinierten Steuerelementen==<br />
Die Unit Themes bietet Funktionen, um einzelne Elemente der Standard-Controls zu erweitern. Zum Beispiel um ein Contol wie ein TTreeView zu erweitern verwenden Sie folgenden Code:<br><br />
<syntaxhighlight><br />
uses Themes;<br />
<br />
...<br />
<br />
procedure TYourCustomControl.Paint;<br />
const<br />
PlusMinusDetail: array[Boolean {Hot}, Boolean {Expanded}] of TThemedTreeview =<br />
(<br />
(ttGlyphClosed, ttGlyphOpened),<br />
(ttHotGlyphClosed, ttHotGlyphOpened)<br />
);<br />
var<br />
Details: TThemedElementDetails;<br />
R: TRect;<br />
Collapse: boolean;<br />
begin<br />
...<br />
// zeichnet eine Erweiterung<br />
Details := ThemeServices.GetElementDetails(PlusMinusDetail[False, Collapse]);<br />
R := Rect(ALeft, ATop, ARight + 1, ABottom + 1);<br />
ThemeServices.DrawElement(Canvas.Handle, Details, R, nil);<br />
...<br />
end;<br />
</syntaxhighlight><br />
<br />
--[[User:Olaf|Olaf]] 12:20, 6 August 2013 (CEST)<br />
[[Category:Graphics/de]]{{AutoCategory}}</div>
Olaf
https://wiki.freepascal.org/index.php?title=Colors/de&diff=95189
Colors/de
2015-09-05T07:09:06Z
<p>Olaf: /* Umwandlung der Werte zwischen TColor und RGB */</p>
<hr />
<div>{{Colors}}<br />
<br><br><br />
__TOC__<br />
<br><br />
=Überblick=<br />
Die Standardfarben sind in der LCL (Komponentenbibliothek) TColor festgelegt. Diese Farben sind mit der Komponentenbibliothek TColor von Delphi kompatibel. TColor kann eine RGB Farbe (3x8bit), oder eine Systemfarbe wie clDefault anzeigen. Die Komponentenbibliothek arbeitet auch mit dem Typ TFPColor des fpImage Farbsystems zusammen. TFPColor stellt die Farben nach RGBA (4x16bit) dar und nicht wie TColor nach RGB (3x8bit) dar.<br><br />
<br><br />
==Umwandlung der Werte zwischen TColor und RGB==<br />
Die Unit '''Graphics''' bietet folgende Funktionen:<br><br />
<br><br />
<syntaxhighlight><br />
function Blue(rgb: TColor): BYTE; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function Green(rgb: TColor): BYTE; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function Red(rgb: TColor): BYTE; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function RGBToColor(R, G, B: Byte): TColor;<br />
procedure RedGreenBlue(rgb: TColor; out Red, Green, Blue: Byte); // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function FPColorToTColor(const FPColor: TFPColor): TColor;<br />
function TColorToFPColor(const c: TColor): TFPColor; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function IsSysColor(AColor: TColorRef): Boolean;<br />
</syntaxhighlight><br />
<br><br />
==umwandeln des Typs TColor von/in den Typ String==<br />
Funktionen die Strings wie "25500 oder "$AA0088" oder "clNavy" nach TColor umwandeln:<br><br />
* StringToColor<br><br />
* StringToColorDef<br><br />
<br><br />
Wandelt den Typ TColor in den Typ String um:<br><br />
* ColorToString<br><br />
<br />
= Vordefinierte Farbkonstanten =<br />
<syntaxhighlight><br />
// standard colors<br />
clBlack = TColor($000000);<br />
clMaroon = TColor($000080);<br />
clGreen = TColor($008000);<br />
clOlive = TColor($008080);<br />
clNavy = TColor($800000);<br />
clPurple = TColor($800080);<br />
clTeal = TColor($808000);<br />
clGray = TColor($808080);<br />
clSilver = TColor($C0C0C0);<br />
clRed = TColor($0000FF);<br />
clLime = TColor($00FF00);<br />
clYellow = TColor($00FFFF);<br />
clBlue = TColor($FF0000);<br />
clFuchsia = TColor($FF00FF);<br />
clAqua = TColor($FFFF00);<br />
clLtGray = TColor($C0C0C0); // Alias: clSilver<br />
clDkGray = TColor($808080); // Alias: clGray<br />
clWhite = TColor($FFFFFF);<br />
</syntaxhighlight><br />
<br />
=Systemfarben=<br />
==Beispiel: clInfoBk, clInfoText==<br />
Systemfarben sind Farbkonstanten mit einer besonderen Bedeutung. Ihr wirklicher Wert hängt vom Kontext und dem Windowsthema ab. Sie sind keine einfachen Farben.<br><br />
'''clInfoBk''' zum Beispiel:<br><br />
<syntaxhighlight><br />
Form1.Canvas.Brush.Color:=clInfoBk; // verwende den Standardhintergrund Pinsel für ein Hinweisfenster<br />
Form1.Canvas.FillRect(10,10,50,50);<br />
</syntaxhighlight><br />
<br><br />
Ein Hinweisfenster unter MS-Windows könnte einen weißen Hintergrund haben. Unter Linux/GTK2 könnte das Hinweisfenster eine metallische Beschaffenheit haben. Wenn Sie nun einen Text in diese Fläche schreiben möchten, dann müssen Sie, wenn Sie den Text lesen möchten die Farbe auf einen Wert wie clInfoText ändern.<br />
Zum Beispiel:<br><br />
<syntaxhighlight><br />
Form1.Canvas.Brush.Color:=clInfoBk; // verwende den Pinsel für die Standardhintergrundfarbe für ein Hinweisfenster<br />
Form1.Canvas.FillRect(10,10,50,50);<br />
Form1.Canvas.Font.Color:=clInfoText; // verwende den Pinsel für die Standardtextfarbe für ein Hinweisfenster<br />
Form1.Canvas.TextOut(10,10,'Hint');<br />
</syntaxhighlight><br />
<br><br />
Die Systemfarbe '''clInfoBk''' kann nicht für Pen.Color und nicht für Font.Color verwendet werden. Wenn Sie dies tun, dann ist das Ergebnis nicht definiert und hängt vom verwendeten widgetset (= Sammlung von Grafik Bibliotheken) und dem vom Benutzer gewählten Thema (= grafische Darstellung der Betriebssystemoberfläche) ab.<br />
Das gleiche gilt für '''clInfoText'''. Es kann nur als Font.Color verwendet werden. eine Verwendung mit Brush.Color wird nicht funktionieren. Im Moment erlauben alle widgetsets die Verwendung mit Pen.Color.<br />
<br><br />
==Ändern des Fensterthemas des Betriebssystems==<br />
Wenn z. B. der Benutzer das Thema (= grafische Darstellung der Betriebssystemoberfläche) wechselt dann kann das Betriebssystem seine Farben ändern.<br />
'''clInfoBk''' kann sich z. B. von weiß nach blau ändern oder von einer Farbe zu einer Textur. Das kann dem Programmierer Probleme bereiten. <br />
Das liegt daran, das sich der Farbwert der vordefinierten Systemfarben im eigenen Programm nicht automatisch anpasst. Der Programmierer muss dafür sorgen, das die Systemfarben den aktuellen Wert erhalten.<br><br />
Dazu ist ein Zwischenschritt nötig.<br><br />
Beispiel:<br><br />
<syntaxhighlight><br />
Form1.Canvas.Brush.Color:=clInfoBk; // der Pinsel erhält die aktuellen Systemfarben<br />
Form1.Canvas.FillRect(10,10,50,50); // dies erstellt einen Pinsel mit dem Farbwert<br />
// des Hinweisfensters des aktiven Fensterthemas<br />
...<br />
// Wenn das Thema (= grafische Darstellung der Betriebssystemoberfläche) vom Anwender<br />
// zwischenzeitlich geändert wird, dann hat der Pinsel noch die vorhergehenden Farbwerte<br />
...<br />
Form1.Canvas.FillRect(10,10,50,50); // mit dem Pinsel wird der Farbwert des vorhergehenden Themas gezeichnet<br />
Form1.Canvas.Brush.Color:=clInfoBk; // durch eine erneute Zuweisung wird der<br />
// vorhergehenden Farbwert nicht aktualisiert<br />
Form1.Canvas.FillRect(10,10,50,50); // mit dem Pinsel wird der Farbwert des alten Themas gezeichnet<br />
Form1.Canvas.Brush.Color:=clRed; // eine Zuweisung mit einem neuen Farbwert macht den<br />
// vorhergehenden Farbwert ungültig<br />
Form1.Canvas.Brush.Color:=clInfoBk; // eine Zuweisung mit einem neuen Farbwert macht den<br />
// vorhergehenden Farbwert ungültig<br />
Form1.Canvas.FillRect(10,10,50,50); // jetzt, wird der Farbwert des aktuellen Themas verwendet<br />
</syntaxhighlight><br />
<br />
==Tabelle der Systemfarben==<br />
In der folgenden Tabelle werden die Systemfarben und ihre Bedeutung aufgelistet. Werden die Systemfarben ausserhalb des definierten Geltungsbereiches verwendet, dann ist das Ergebnis unvorhersehbar. Die Systemfarben sind immer vom aktuell verwendeten Widget-Set (eine Sammlung von grafischen Bedienelementen) und dem aktuell verwendeten Thema (grafische Darstellung der Betriebssystemoberfläche) abhängig.<br />
<br />
{| class="wikitable"<br />
! Konstante !! LCL Definition !! Unterstützte Widgetsets<br />
|-<br />
|clNone|| Der Farbwert ist nicht definiert. D. h. er hat keine Auswirkungen bzw. er kann im Einzelfall einen weißen Farbwert haben.|| alle<br />
|-<br />
|clDefault|| Verwendet die vorgesehene Standardfarbe || alle<br />
|-<br />
|clScrollBar|| Scrollbar Körper || alle<br />
|-<br />
|clBackground|| ? || alle<br />
|-<br />
|clActiveCaption|| Titelleiste des aktiven Fensters || kein<br />
|-<br />
|clInactiveCaption|| Titelleiste des inaktiven Fensters || kein<br />
|-<br />
|clMenu|| Regular menu item background color || kein<br />
|-<br />
|clWindow|| The normal background brush of unselected text. Defined for controls like TEdit, TComboBox, TMemo, TListBox, TTreeView.|| kein<br />
|-<br />
|clWindowFrame|| Farbe der Rahmen um das Fenster || kein<br />
|-<br />
|clMenuText|| Die Schriftfarbe ist zusammen mit clMenu zu verwenden || kein<br />
|-<br />
|clWindowText|| Die Schriftfarbe ist zusammen mit clWindow zu verwenden || kein<br />
|-<br />
|clCaptionText|| Textfarbe das aktiven Fensters || kein<br />
|-<br />
|clActiveBorder|| ? || kein<br />
|-<br />
|clInactiveBorder|| ? || kein<br />
|-<br />
|clAppWorkspace|| MDIMain form background || kein<br />
|-<br />
|clHighlight|| Die Pinselfarbe des ausgewählten Elements || kein<br />
|-<br />
|clHighlightText|| Schriftfarbe vom ausgewählten Text (zusammen mit clHighligh). || kein<br />
|-<br />
|clBtnFace|| Button Hintergrund || kein<br />
|-<br />
|clBtnShadow|| Farbe des Button Schattens wird verwendet, um 3D-Effekt zu erzielen || kein<br />
|-<br />
|clGrayText|| Die Schriftfarbe von einem deaktiverten Element || kein<br />
|-<br />
|clBtnText|| Button Schriftfarbe zu verwenden mit clBtnFace || kein<br />
|-<br />
|clInactiveCaptionText|| Textfarbe der inaktiven Fenstertitelleiste || kein<br />
|-<br />
|clBtnHighlight|| Button Farbhervorhebung wird verwendet, um 3D-Effekt zu erzielen || kein<br />
|-<br />
|cl3DDkShadow|| ? || kein<br />
|-<br />
|cl3DLight|| ? || kein<br />
|-<br />
|clInfoText|| Schriftfarbe für Hinweise. Ist zu verwenden mit clInfoBk || alle<br />
|-<br />
|clInfoBk|| Pinselfarbe für Hinweisse. Ist zu verwenden mit clInfoText || alle<br />
|-<br />
|clHotLight|| ? || kein<br />
|-<br />
|clGradientActiveCaption|| Die zweit Farbe um die aktive Fenstertitelleiste mit verlaufenden Farben darzustellen || kein<br />
|-<br />
|clGradientInactiveCaption|| Die zweit Farbe um die inaktive Fenstertitelleiste mit verlaufenden Farben darzustellen || kein<br />
|-<br />
|clMenuHighlight|| Die Hintergrundfarbe des ausgewählten Menüpunkts || kein<br />
|-<br />
|clMenuBar|| Die Hintergrundfarbe der Menüleiste || kein<br />
|-<br />
|clForm|| ? || kein<br />
|-<br />
|clColorDesktop|| ? || kein<br />
|-<br />
|cl3DFace|| ? || kein<br />
|-<br />
|cl3DShadow|| ? || kein<br />
|-<br />
|cl3DHiLight|| ? || kein<br />
|-<br />
|clBtnHiLight|| Das Gleiche wie clBtnHighlight || kein<br />
|}<br />
<br />
==Zeichnen von Themaelementen auf Ihren benutzerdefinierten Steuerelementen==<br />
Die Unit Themes bietet Funktionen, um einzelne Elemente der Standard-Controls zu erweitern. Zum Beispiel um ein Contol wie ein TTreeView zu erweitern verwenden Sie folgenden Code:<br><br />
<syntaxhighlight><br />
uses Themes;<br />
<br />
...<br />
<br />
procedure TYourCustomControl.Paint;<br />
const<br />
PlusMinusDetail: array[Boolean {Hot}, Boolean {Expanded}] of TThemedTreeview =<br />
(<br />
(ttGlyphClosed, ttGlyphOpened),<br />
(ttHotGlyphClosed, ttHotGlyphOpened)<br />
);<br />
var<br />
Details: TThemedElementDetails;<br />
R: TRect;<br />
Collapse: boolean;<br />
begin<br />
...<br />
// zeichnet eine Erweiterung<br />
Details := ThemeServices.GetElementDetails(PlusMinusDetail[False, Collapse]);<br />
R := Rect(ALeft, ATop, ARight + 1, ABottom + 1);<br />
ThemeServices.DrawElement(Canvas.Handle, Details, R, nil);<br />
...<br />
end;<br />
</syntaxhighlight><br />
<br />
--[[User:Olaf|Olaf]] 12:20, 6 August 2013 (CEST)<br />
[[Category:Graphics/de]]{{AutoCategory}}</div>
Olaf
https://wiki.freepascal.org/index.php?title=Colors/de&diff=95188
Colors/de
2015-09-05T07:07:39Z
<p>Olaf: </p>
<hr />
<div>{{Colors}}<br />
<br><br><br />
__TOC__<br />
<br><br />
=Überblick=<br />
Die Standardfarben sind in der LCL (Komponentenbibliothek) TColor festgelegt. Diese Farben sind mit der Komponentenbibliothek TColor von Delphi kompatibel. TColor kann eine RGB Farbe (3x8bit), oder eine Systemfarbe wie clDefault anzeigen. Die Komponentenbibliothek arbeitet auch mit dem Typ TFPColor des fpImage Farbsystems zusammen. TFPColor stellt die Farben nach RGBA (4x16bit) dar und nicht wie TColor nach RGB (3x8bit) dar.<br><br />
<br><br />
==Umwandlung der Werte zwischen TColor und RGB==<br />
Die Unit '''Graphics''' bietet folgende Funktionen:<br><br />
<br><br />
<syntaxhighlight><br />
function Blue(rgb: TColor): BYTE; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function Green(rgb: TColor): BYTE; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function Red(rgb: TColor): BYTE; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function RGBToColor(R, G, B: Byte): TColor;<br />
procedure RedGreenBlue(rgb: TColor; out Red, Green, Blue: Byte); // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function FPColorToTColor(const FPColor: TFPColor): TColor;<br />
function TColorToFPColor(const c: TColor): TFPColor; // arbeitet nicht mit den vordefinierten Systemfarben zusammen<br />
function IsSysColor(AColor: TColorRef): Boolean;<br />
</syntaxhighlight><br />
<br><br />
= Vordefinierte Farbkonstanten =<br />
<syntaxhighlight><br />
// standard colors<br />
clBlack = TColor($000000);<br />
clMaroon = TColor($000080);<br />
clGreen = TColor($008000);<br />
clOlive = TColor($008080);<br />
clNavy = TColor($800000);<br />
clPurple = TColor($800080);<br />
clTeal = TColor($808000);<br />
clGray = TColor($808080);<br />
clSilver = TColor($C0C0C0);<br />
clRed = TColor($0000FF);<br />
clLime = TColor($00FF00);<br />
clYellow = TColor($00FFFF);<br />
clBlue = TColor($FF0000);<br />
clFuchsia = TColor($FF00FF);<br />
clAqua = TColor($FFFF00);<br />
clLtGray = TColor($C0C0C0); // Alias: clSilver<br />
clDkGray = TColor($808080); // Alias: clGray<br />
clWhite = TColor($FFFFFF);<br />
</syntaxhighlight><br />
<br />
=Systemfarben=<br />
==Beispiel: clInfoBk, clInfoText==<br />
Systemfarben sind Farbkonstanten mit einer besonderen Bedeutung. Ihr wirklicher Wert hängt vom Kontext und dem Windowsthema ab. Sie sind keine einfachen Farben.<br><br />
'''clInfoBk''' zum Beispiel:<br><br />
<syntaxhighlight><br />
Form1.Canvas.Brush.Color:=clInfoBk; // verwende den Standardhintergrund Pinsel für ein Hinweisfenster<br />
Form1.Canvas.FillRect(10,10,50,50);<br />
</syntaxhighlight><br />
<br><br />
Ein Hinweisfenster unter MS-Windows könnte einen weißen Hintergrund haben. Unter Linux/GTK2 könnte das Hinweisfenster eine metallische Beschaffenheit haben. Wenn Sie nun einen Text in diese Fläche schreiben möchten, dann müssen Sie, wenn Sie den Text lesen möchten die Farbe auf einen Wert wie clInfoText ändern.<br />
Zum Beispiel:<br><br />
<syntaxhighlight><br />
Form1.Canvas.Brush.Color:=clInfoBk; // verwende den Pinsel für die Standardhintergrundfarbe für ein Hinweisfenster<br />
Form1.Canvas.FillRect(10,10,50,50);<br />
Form1.Canvas.Font.Color:=clInfoText; // verwende den Pinsel für die Standardtextfarbe für ein Hinweisfenster<br />
Form1.Canvas.TextOut(10,10,'Hint');<br />
</syntaxhighlight><br />
<br><br />
Die Systemfarbe '''clInfoBk''' kann nicht für Pen.Color und nicht für Font.Color verwendet werden. Wenn Sie dies tun, dann ist das Ergebnis nicht definiert und hängt vom verwendeten widgetset (= Sammlung von Grafik Bibliotheken) und dem vom Benutzer gewählten Thema (= grafische Darstellung der Betriebssystemoberfläche) ab.<br />
Das gleiche gilt für '''clInfoText'''. Es kann nur als Font.Color verwendet werden. eine Verwendung mit Brush.Color wird nicht funktionieren. Im Moment erlauben alle widgetsets die Verwendung mit Pen.Color.<br />
<br><br />
==Ändern des Fensterthemas des Betriebssystems==<br />
Wenn z. B. der Benutzer das Thema (= grafische Darstellung der Betriebssystemoberfläche) wechselt dann kann das Betriebssystem seine Farben ändern.<br />
'''clInfoBk''' kann sich z. B. von weiß nach blau ändern oder von einer Farbe zu einer Textur. Das kann dem Programmierer Probleme bereiten. <br />
Das liegt daran, das sich der Farbwert der vordefinierten Systemfarben im eigenen Programm nicht automatisch anpasst. Der Programmierer muss dafür sorgen, das die Systemfarben den aktuellen Wert erhalten.<br><br />
Dazu ist ein Zwischenschritt nötig.<br><br />
Beispiel:<br><br />
<syntaxhighlight><br />
Form1.Canvas.Brush.Color:=clInfoBk; // der Pinsel erhält die aktuellen Systemfarben<br />
Form1.Canvas.FillRect(10,10,50,50); // dies erstellt einen Pinsel mit dem Farbwert<br />
// des Hinweisfensters des aktiven Fensterthemas<br />
...<br />
// Wenn das Thema (= grafische Darstellung der Betriebssystemoberfläche) vom Anwender<br />
// zwischenzeitlich geändert wird, dann hat der Pinsel noch die vorhergehenden Farbwerte<br />
...<br />
Form1.Canvas.FillRect(10,10,50,50); // mit dem Pinsel wird der Farbwert des vorhergehenden Themas gezeichnet<br />
Form1.Canvas.Brush.Color:=clInfoBk; // durch eine erneute Zuweisung wird der<br />
// vorhergehenden Farbwert nicht aktualisiert<br />
Form1.Canvas.FillRect(10,10,50,50); // mit dem Pinsel wird der Farbwert des alten Themas gezeichnet<br />
Form1.Canvas.Brush.Color:=clRed; // eine Zuweisung mit einem neuen Farbwert macht den<br />
// vorhergehenden Farbwert ungültig<br />
Form1.Canvas.Brush.Color:=clInfoBk; // eine Zuweisung mit einem neuen Farbwert macht den<br />
// vorhergehenden Farbwert ungültig<br />
Form1.Canvas.FillRect(10,10,50,50); // jetzt, wird der Farbwert des aktuellen Themas verwendet<br />
</syntaxhighlight><br />
<br />
==Tabelle der Systemfarben==<br />
In der folgenden Tabelle werden die Systemfarben und ihre Bedeutung aufgelistet. Werden die Systemfarben ausserhalb des definierten Geltungsbereiches verwendet, dann ist das Ergebnis unvorhersehbar. Die Systemfarben sind immer vom aktuell verwendeten Widget-Set (eine Sammlung von grafischen Bedienelementen) und dem aktuell verwendeten Thema (grafische Darstellung der Betriebssystemoberfläche) abhängig.<br />
<br />
{| class="wikitable"<br />
! Konstante !! LCL Definition !! Unterstützte Widgetsets<br />
|-<br />
|clNone|| Der Farbwert ist nicht definiert. D. h. er hat keine Auswirkungen bzw. er kann im Einzelfall einen weißen Farbwert haben.|| alle<br />
|-<br />
|clDefault|| Verwendet die vorgesehene Standardfarbe || alle<br />
|-<br />
|clScrollBar|| Scrollbar Körper || alle<br />
|-<br />
|clBackground|| ? || alle<br />
|-<br />
|clActiveCaption|| Titelleiste des aktiven Fensters || kein<br />
|-<br />
|clInactiveCaption|| Titelleiste des inaktiven Fensters || kein<br />
|-<br />
|clMenu|| Regular menu item background color || kein<br />
|-<br />
|clWindow|| The normal background brush of unselected text. Defined for controls like TEdit, TComboBox, TMemo, TListBox, TTreeView.|| kein<br />
|-<br />
|clWindowFrame|| Farbe der Rahmen um das Fenster || kein<br />
|-<br />
|clMenuText|| Die Schriftfarbe ist zusammen mit clMenu zu verwenden || kein<br />
|-<br />
|clWindowText|| Die Schriftfarbe ist zusammen mit clWindow zu verwenden || kein<br />
|-<br />
|clCaptionText|| Textfarbe das aktiven Fensters || kein<br />
|-<br />
|clActiveBorder|| ? || kein<br />
|-<br />
|clInactiveBorder|| ? || kein<br />
|-<br />
|clAppWorkspace|| MDIMain form background || kein<br />
|-<br />
|clHighlight|| Die Pinselfarbe des ausgewählten Elements || kein<br />
|-<br />
|clHighlightText|| Schriftfarbe vom ausgewählten Text (zusammen mit clHighligh). || kein<br />
|-<br />
|clBtnFace|| Button Hintergrund || kein<br />
|-<br />
|clBtnShadow|| Farbe des Button Schattens wird verwendet, um 3D-Effekt zu erzielen || kein<br />
|-<br />
|clGrayText|| Die Schriftfarbe von einem deaktiverten Element || kein<br />
|-<br />
|clBtnText|| Button Schriftfarbe zu verwenden mit clBtnFace || kein<br />
|-<br />
|clInactiveCaptionText|| Textfarbe der inaktiven Fenstertitelleiste || kein<br />
|-<br />
|clBtnHighlight|| Button Farbhervorhebung wird verwendet, um 3D-Effekt zu erzielen || kein<br />
|-<br />
|cl3DDkShadow|| ? || kein<br />
|-<br />
|cl3DLight|| ? || kein<br />
|-<br />
|clInfoText|| Schriftfarbe für Hinweise. Ist zu verwenden mit clInfoBk || alle<br />
|-<br />
|clInfoBk|| Pinselfarbe für Hinweisse. Ist zu verwenden mit clInfoText || alle<br />
|-<br />
|clHotLight|| ? || kein<br />
|-<br />
|clGradientActiveCaption|| Die zweit Farbe um die aktive Fenstertitelleiste mit verlaufenden Farben darzustellen || kein<br />
|-<br />
|clGradientInactiveCaption|| Die zweit Farbe um die inaktive Fenstertitelleiste mit verlaufenden Farben darzustellen || kein<br />
|-<br />
|clMenuHighlight|| Die Hintergrundfarbe des ausgewählten Menüpunkts || kein<br />
|-<br />
|clMenuBar|| Die Hintergrundfarbe der Menüleiste || kein<br />
|-<br />
|clForm|| ? || kein<br />
|-<br />
|clColorDesktop|| ? || kein<br />
|-<br />
|cl3DFace|| ? || kein<br />
|-<br />
|cl3DShadow|| ? || kein<br />
|-<br />
|cl3DHiLight|| ? || kein<br />
|-<br />
|clBtnHiLight|| Das Gleiche wie clBtnHighlight || kein<br />
|}<br />
<br />
==Zeichnen von Themaelementen auf Ihren benutzerdefinierten Steuerelementen==<br />
Die Unit Themes bietet Funktionen, um einzelne Elemente der Standard-Controls zu erweitern. Zum Beispiel um ein Contol wie ein TTreeView zu erweitern verwenden Sie folgenden Code:<br><br />
<syntaxhighlight><br />
uses Themes;<br />
<br />
...<br />
<br />
procedure TYourCustomControl.Paint;<br />
const<br />
PlusMinusDetail: array[Boolean {Hot}, Boolean {Expanded}] of TThemedTreeview =<br />
(<br />
(ttGlyphClosed, ttGlyphOpened),<br />
(ttHotGlyphClosed, ttHotGlyphOpened)<br />
);<br />
var<br />
Details: TThemedElementDetails;<br />
R: TRect;<br />
Collapse: boolean;<br />
begin<br />
...<br />
// zeichnet eine Erweiterung<br />
Details := ThemeServices.GetElementDetails(PlusMinusDetail[False, Collapse]);<br />
R := Rect(ALeft, ATop, ARight + 1, ABottom + 1);<br />
ThemeServices.DrawElement(Canvas.Handle, Details, R, nil);<br />
...<br />
end;<br />
</syntaxhighlight><br />
<br />
--[[User:Olaf|Olaf]] 12:20, 6 August 2013 (CEST)<br />
[[Category:Graphics/de]]{{AutoCategory}}</div>
Olaf
https://wiki.freepascal.org/index.php?title=Dec&diff=94942
Dec
2015-08-23T06:34:27Z
<p>Olaf: </p>
<hr />
<div>{{Dec}}<br><br />
<br><br />
= Dec =<br />
<br />
<br />
Dec (decrement) [[Procedure|procedure]] in Pascal programming let you easily subtract 1 (or some other value) from, a [[Variable|variable]]. <br />
<br />
For example, using (decrement) procedure, you can reduce 1 to a variable named a like this:<br />
<br />
<syntaxhighlight><br />
dec( a );<br />
</syntaxhighlight><br />
<br />
If you want to reduce by two (or some other value):<br />
<br />
<syntaxhighlight><br />
dec( a, 2 );<br />
</syntaxhighlight><br />
<br />
Dec procedure included [[System]] [[Unit]].<br />
<br />
<br />
== See also ==<br />
<br />
* Link to RTL documentation: [[doc:rtl/system/dec.html |dec]]<br />
* [[Inc]] - Increase value of integer variable.<br />
* Link to RTL documentation: [[doc:/rtl/system/pred.html |pred]] - Return previous element for an ordinal type.<br />
* [[For]] control_variable := start_point [[Downto]] end_point [[Do]] statement.<br />
<br />
[[Category:Pascal]]</div>
Olaf
https://wiki.freepascal.org/index.php?title=Template:Dec&diff=94941
Template:Dec
2015-08-23T06:33:33Z
<p>Olaf: Created page with "<small> '''{{#language:de}} (de)''' | '''{{#language:en}} (en)''' </small>"</p>
<hr />
<div><small> <br />
[[Dec/de|'''{{#language:de}} (de)''']] |<br />
[[Dec|'''{{#language:en}} (en)''']] <br />
</small></div>
Olaf
https://wiki.freepascal.org/index.php?title=Dec/de&diff=94940
Dec/de
2015-08-23T06:32:38Z
<p>Olaf: Created page with "{{Dec}} <br> <br> <b>DEC</b><br> <br> Die Prozedur <b>Dec</b> zieht von folgenden Datentypen einen ganzahligen Wert ab: * Zeichen * Ganzzahlige Datentypen * Aufzählungstypen ..."</p>
<hr />
<div>{{Dec}}<br />
<br><br />
<br><br />
<b>DEC</b><br><br />
<br><br />
Die Prozedur <b>Dec</b> zieht von folgenden Datentypen einen ganzahligen Wert ab:<br />
* Zeichen<br />
* Ganzzahlige Datentypen<br />
* Aufzählungstypen<br />
* Zeiger (Pointer)<br />
<br><br />
Mit der Prozedur <b>Dec</b> (Dekrement) können Sie in Pascal vom Inhalt einer Variablen einen ganzzahligen Wert abziehen (subtrahieren) z. B. 1 (oder einen anderen Wert).<br><br />
<br><br />
Beispiel um vom Inhalt der Variablen den Wert 1 zum subtrahieren:<br><br />
dec (a);<br><br />
<br><br />
Wollen Sie einen anderen Wert wie z.B. 2 subtrahieren, dann müssen Sie diesen Wert angeben:<br><br />
dec (a, 2);<br><br />
<br><br />
Die Prozedur <b>Dec</b> befindet sich in der Unit System.<br />
<br><br />
<br><br />
[[User:Olaf|Olaf]]<br />
{{AutoCategory}}</div>
Olaf
https://wiki.freepascal.org/index.php?title=Office_Automation/de&diff=91488
Office Automation/de
2015-06-30T15:02:33Z
<p>Olaf: </p>
<hr />
<div>{{Office Automation}}<br />
<br><br />
Zurück zur [[Lazarus_Documentation/de|Lazarus Dokumentation]].<br><br />
Zurück zu den [[Additional information/de|Zusätzlichen Informationen]].<br><br />
<br><br />
=Office Automation=<br />
Alle Möglichkeiten der Softwareautomation aufzuzeigen ist nicht möglich man kann immer nur Anregungen geben.<br />
<br><br />
==Allgemeines==<br />
Die Möglichkeit Office Software von aussen zu steuern schafft Vorteile:<br />
* Automatisiertes Erstellen von Office-Dokumenten ohne eine Zeile Code in den Office-Dokumenten.<br />
* Weitergabe der automatisiert erstellen Office-Dokumente ohne eine Zeile Code im Office-Dokument.<br />
* Daten, Formeln und Formatierungen können zwischen den Dokumenten der verschiedenen Office-Pakte automatisiert ausgetauscht werden.<br />
* Kompillierter Code kann vom Benutzer nicht verändert werden.<br />
* Die automatisierte Massenverarbeitung und -erstellung von Office-Dokumenten ist möglich.<br />
<br><br />
==Grundsätzliches==<br />
* Sie müssen im Besitz einer gültigen Office Lizenz sein.<br><br />
* Das zu automatisierende Office-Paket muss auf dem Rechner auf dem Ihre Automatisierungssoftware läuft installiert sein.<br><br />
* Der Compiller kann nicht kontrollieren, ob die Parameter des OleObjektes korrekt sind, da diese Parameter erst zur Laufzeit des Office Programms vom Office Programm selbst bereitgestellt werden.<br />
<br><br />
== Probleme ==<br />
* Kommt es bei der Verwendung von Umlauten usw. zu Problemen, dann sollte versucht werden, ob sich das Problem mit Stringcasting (UTF8ToUTF16) beheben lässt.<br />
* Teile der externen Softwareschnittstellen, die die Officepakete für die Softwareautomatisierung mitbringen sind:<br />
** vom Hersteller nicht sauber programmiert<br />
** nicht vorhanden<br />
* Die Funktionalität und das vorhandensein von Schnittstellen hängt von folgendem ab:<br />
** von der Version des Officepaketes<br />
** von der Art der Softwareinstallation<br />
** vom Update (ein Update kann auch negative Folgen haben)<br />
** vom Rechtesystem des Betriebssystems<br />
* Manche Fehler in der Office-Automatisierung treten erst unter extremen Bedingungen wie hoher Prozessorauslastung, hoher Netzwerkauslastung, hoher Auslastung des Arbeitsspeichers, hoher Auslastung der Festplatte usw. auf und sind vom Programmierer nur schwer zu beeinflussen.<br />
<br><br />
<br />
=Windows als Betriebssystem=<br />
==MS Office Automation bis MS Office 2003==<br />
[[AccessAutomation/de|MS Access]] als OleObjekt<br><br />
[[ExcelAutomation/de|MS Excel]] als OleObjekt<br><br />
[[PowerpointAutomation/de|MS Powerpoint]] als OleObjekt<br><br />
[[WordAutomation/de|MS Word]] als OleObjekt<br><br />
<br><br />
==MS Office Automation ab MS Office 2007==<br />
[[AccessAutomation2007plus/de|MS Access]] als OleObjekt<br><br />
[[ExcelAutomation2007plus/de|MS Excel]] als OleObjekt<br><br />
[[PowerpointAutomation2007plus/de|MS Powerpoint]] als OleObjekt<br><br />
[[WordAutomation2007plus/de|MS Word]] als OleObjekt<br><br />
<br><br />
==OpenOffice / LibreOffice Automation==<br />
<b>Hinweis:</b> Um OpenOffice / LibreOffice automatisieren zu können muss auf dem Computer Java installiert sein.<br /><br />
<br /><br />
[[BaseAutomation/de|Base]] als Oleobject<br><br />
[[CalcAutomation/de|Calc]] als OleObjekt<br><br />
[[ImpressAutomation/de|Impress]] als OleObjekt<br><br />
[[WriterAutomation/de|Writer]] als Oleobject<br><br />
<br><br />
<br><br />
--[[User:Olaf|Olaf]] 13:10, 7 October 2012 (UTC)<br />
[[Category:Tutorials/de]]{{AutoCategory}}</div>
Olaf
https://wiki.freepascal.org/index.php?title=ATTabs/de&diff=89409
ATTabs/de
2015-05-17T06:51:37Z
<p>Olaf: /* Verwendung */</p>
<hr />
<div><small> <br />
[[ATTabs/de|'''{{#language:de}} (de)''']] |<br />
[[ATTabs|'''{{#language:en}} (en)''']] <br />
</small><br />
<br/><br />
__TOC__<br />
<br/><br />
= Über ATTabs =<br />
''ATTabs'' ist ein tab-control Komponente für Delphi und Lazarus. Das Kontrol ersetz nicht das Standard tab-control, sondern es ist als Alternative dazu gedacht. ATTabs zeichnet die Tabs unabhängig vom Betriebssystem. ATTabs zeichnet unabhängig vom Betriebssystem benutzerdefinierte Registerkarten unter der verwendung von Canvas.<br/><br />
<br/><br />
= Screenshot =<br />
[[File:ATTabs_demo.png]]<br />
<br/><br/><br />
<br />
= Fehlermeldungen =<br />
Bitee fügen Sie Ihre Wünsche und Fehlermeldungen an [https://github.com/Alexey-T/ATTabs/issues Github issues page].<br/><br />
<br/><br />
= Author =<br />
Alexey Torgashin (Russland).<br/><br />
<br/><br />
= Lizens =<br />
MPL 2.0.<br/><br />
<br/><br />
= Download =<br />
Die aktuelste Version mit einer Demo finden Sie unter [https://github.com/Alexey-T/ATTabs Github page].<br/><br />
<br/><br />
= Systemanforderungen =<br />
* Lazarus: 1.2.0<br />
* Getestet unter: Windows 7, Linux (Ubuntu 14.04)<br />
<br/><br />
= Installation =<br />
* Herunterladen der Zip-Datei von Githup unter Verwendung des Buttons "Download ZIP".<br />
* unter Lazarus wird keine Installation benötigt. ATTabs muss nur in einem Ordner entpackt werden.<br />
<br/><br />
= Verwendung =<br />
* Die Komponente verwendet nicht den Lazarus Designer, Sie müssen das TATTabs-Objekt zur Laufzeit ausführen.<br />
* Siehe die API Documentation auf der "Wiki" Seite der Github Seite.<br />
<br/><br />
<br/><br />
<br />
{{AutoCategory}}[[Category:Komponenten]]</div>
Olaf
https://wiki.freepascal.org/index.php?title=ATTabs&diff=89407
ATTabs
2015-05-17T06:45:14Z
<p>Olaf: </p>
<hr />
<div><small> <br />
[[ATTabs/de|'''{{#language:de}} (de)''']] |<br />
[[ATTabs|'''{{#language:en}} (en)''']] <br />
</small><br />
<br/><br />
= About =<br />
<br />
''ATTabs'' is a tab-control component for Delphi and Lazarus. It's not replacement for standard tab control, but is alternative one, it has different API. It paints tabs OS-indenendant, using custom drawing on canvas.<br />
<br />
= Screenshot =<br />
<br />
[[File:ATTabs_demo.png]]<br />
<br />
= Bug reporting =<br />
<br />
Please add your wishes and bug reports to [https://github.com/Alexey-T/ATTabs/issues Github issues page].<br />
<br />
= Author =<br />
<br />
Alexey Torgashin (Russia).<br />
<br />
= License =<br />
<br />
MPL 2.0.<br />
<br />
= Download =<br />
<br />
Latest version, with demo app, is always at [https://github.com/Alexey-T/ATTabs Github page].<br />
<br />
= System requirements =<br />
<br />
* Lazarus: 1.2.0<br />
* Tested on: Windows 7, Linux (Ubuntu 14.04)<br />
<br />
= Installation =<br />
<br />
* Download the zip file from Github using "Download ZIP" button.<br />
* No installation into Lazarus needed, just unpack file ATTabs.pas to any folder.<br />
<br />
= Usage =<br />
<br />
* Component doesn't support Lazarus designer, you need to create TATTabs objects at runtime.<br />
* See API documentation at "Wiki" page of Github page.<br />
<br />
[[Category:Components]]</div>
Olaf
https://wiki.freepascal.org/index.php?title=ATTabs/de&diff=89406
ATTabs/de
2015-05-17T06:44:36Z
<p>Olaf: /* Verwendung */</p>
<hr />
<div><small> <br />
[[ATTabs/de|'''{{#language:de}} (de)''']] |<br />
[[ATTabs|'''{{#language:en}} (en)''']] <br />
</small><br />
<br/><br />
__TOC__<br />
<br/><br />
= Über ATTabs =<br />
''ATTabs'' ist ein tab-control Komponente für Delphi und Lazarus. Das Kontrol ersetz nicht das Standard tab-control, sondern es ist als Alternative dazu gedacht. ATTabs zeichnet die Tabs unabhängig vom Betriebssystem. ATTabs zeichnet unabhängig vom Betriebssystem benutzerdefinierte Registerkarten unter der verwendung von Canvas.<br/><br />
<br/><br />
= Screenshot =<br />
[[File:ATTabs_demo.png]]<br />
<br/><br/><br />
<br />
= Fehlermeldungen =<br />
Bitee fügen Sie Ihre Wünsche und Fehlermeldungen an [https://github.com/Alexey-T/ATTabs/issues Github issues page].<br/><br />
<br/><br />
= Author =<br />
Alexey Torgashin (Russland).<br/><br />
<br/><br />
= Lizens =<br />
MPL 2.0.<br/><br />
<br/><br />
= Download =<br />
Die aktuelste Version mit einer Demo finden Sie unter [https://github.com/Alexey-T/ATTabs Github page].<br/><br />
<br/><br />
= Systemanforderungen =<br />
* Lazarus: 1.2.0<br />
* Getestet unter: Windows 7, Linux (Ubuntu 14.04)<br />
<br/><br />
= Installation =<br />
* Herunterladen der Zip-Datei von Githup unter Verwendung des Buttons "Download ZIP".<br />
* unter Lazarus wird keine Installation benötigt. ATTabs muss nur in einem Ordner entpackt werden.<br />
<br/><br />
= Verwendung =<br />
* Die Komponente verwendet nicht den Lazarus Designer, Sie müssen das TATTabs-Objekt zur Laufzeit ausführen.<br />
* Siehe die API Documentation auf der "Wiki" Seite der Github Seite.<br />
<br/><br />
<br/><br />
<br />
[[Category:Komponenten]]</div>
Olaf
https://wiki.freepascal.org/index.php?title=ATTabs/de&diff=89405
ATTabs/de
2015-05-17T06:44:13Z
<p>Olaf: /* Screenshot */</p>
<hr />
<div><small> <br />
[[ATTabs/de|'''{{#language:de}} (de)''']] |<br />
[[ATTabs|'''{{#language:en}} (en)''']] <br />
</small><br />
<br/><br />
__TOC__<br />
<br/><br />
= Über ATTabs =<br />
''ATTabs'' ist ein tab-control Komponente für Delphi und Lazarus. Das Kontrol ersetz nicht das Standard tab-control, sondern es ist als Alternative dazu gedacht. ATTabs zeichnet die Tabs unabhängig vom Betriebssystem. ATTabs zeichnet unabhängig vom Betriebssystem benutzerdefinierte Registerkarten unter der verwendung von Canvas.<br/><br />
<br/><br />
= Screenshot =<br />
[[File:ATTabs_demo.png]]<br />
<br/><br/><br />
<br />
= Fehlermeldungen =<br />
Bitee fügen Sie Ihre Wünsche und Fehlermeldungen an [https://github.com/Alexey-T/ATTabs/issues Github issues page].<br/><br />
<br/><br />
= Author =<br />
Alexey Torgashin (Russland).<br/><br />
<br/><br />
= Lizens =<br />
MPL 2.0.<br/><br />
<br/><br />
= Download =<br />
Die aktuelste Version mit einer Demo finden Sie unter [https://github.com/Alexey-T/ATTabs Github page].<br/><br />
<br/><br />
= Systemanforderungen =<br />
* Lazarus: 1.2.0<br />
* Getestet unter: Windows 7, Linux (Ubuntu 14.04)<br />
<br/><br />
= Installation =<br />
* Herunterladen der Zip-Datei von Githup unter Verwendung des Buttons "Download ZIP".<br />
* unter Lazarus wird keine Installation benötigt. ATTabs muss nur in einem Ordner entpackt werden.<br />
<br/><br />
= Verwendung =<br />
* Die Komponente verwendet nicht den Lazarus Designer, Sie müssen das TATTabs-Objekt zur Laufzeit ausführen.<br />
* Siehe die API Documentation auf der "Wiki" Seite der Github Seite.<br />
<br/><br />
<br/><br />
<br />
[[Category:Components]]</div>
Olaf
https://wiki.freepascal.org/index.php?title=ATTabs/de&diff=89404
ATTabs/de
2015-05-17T06:43:55Z
<p>Olaf: Created page with "<small> '''{{#language:de}} (de)''' | '''{{#language:en}} (en)''' </small> <br/> __TOC__ <br/> = Über ATTabs = ''ATTabs'' ist ein tab-control Kompo..."</p>
<hr />
<div><small> <br />
[[ATTabs/de|'''{{#language:de}} (de)''']] |<br />
[[ATTabs|'''{{#language:en}} (en)''']] <br />
</small><br />
<br/><br />
__TOC__<br />
<br/><br />
= Über ATTabs =<br />
''ATTabs'' ist ein tab-control Komponente für Delphi und Lazarus. Das Kontrol ersetz nicht das Standard tab-control, sondern es ist als Alternative dazu gedacht. ATTabs zeichnet die Tabs unabhängig vom Betriebssystem. ATTabs zeichnet unabhängig vom Betriebssystem benutzerdefinierte Registerkarten unter der verwendung von Canvas.<br/><br />
<br/><br />
= Screenshot =<br />
[[File:ATTabs_demo.png]]<br />
<br/><br />
= Fehlermeldungen =<br />
Bitee fügen Sie Ihre Wünsche und Fehlermeldungen an [https://github.com/Alexey-T/ATTabs/issues Github issues page].<br/><br />
<br/><br />
= Author =<br />
Alexey Torgashin (Russland).<br/><br />
<br/><br />
= Lizens =<br />
MPL 2.0.<br/><br />
<br/><br />
= Download =<br />
Die aktuelste Version mit einer Demo finden Sie unter [https://github.com/Alexey-T/ATTabs Github page].<br/><br />
<br/><br />
= Systemanforderungen =<br />
* Lazarus: 1.2.0<br />
* Getestet unter: Windows 7, Linux (Ubuntu 14.04)<br />
<br/><br />
= Installation =<br />
* Herunterladen der Zip-Datei von Githup unter Verwendung des Buttons "Download ZIP".<br />
* unter Lazarus wird keine Installation benötigt. ATTabs muss nur in einem Ordner entpackt werden.<br />
<br/><br />
= Verwendung =<br />
* Die Komponente verwendet nicht den Lazarus Designer, Sie müssen das TATTabs-Objekt zur Laufzeit ausführen.<br />
* Siehe die API Documentation auf der "Wiki" Seite der Github Seite.<br />
<br/><br />
<br/><br />
<br />
[[Category:Components]]</div>
Olaf
https://wiki.freepascal.org/index.php?title=RegEx_packages/de&diff=88721
RegEx packages/de
2015-05-10T07:48:03Z
<p>Olaf: /* Einfaches Verwendungsbeispiel */</p>
<hr />
<div>{{Regexpr}}<br />
__TOC__<br />
<br /><br />
Das Package RegExpr enthält eine Anzahl von Werkzeugen für den Umgang mit Regulären Ausdrücken (regular expressions).<br /><br />
<br /><br />
Um sich in das Thema Reguläre Ausdrücke einzuarbeiten können Sie folgende Wikipedia-Seiten lesen:<br /><br />
[https://en.wikipedia.org/wiki/Regular_expression Wikipedia: Reguläre Ausdrücke (englisch)]<br /><br />
[https://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck Wikipedia: Reguläre Ausdrücke (deutsch)]<br /><br />
<br /><br />
==Regexpr von Sorokin==<br />
Dieses Package ist die vollständigste Umsetzung, das Package befindet sich im Unterverzeichnis packages/regexpr/src/regexpr.pas<br /><br />
<br /><br />
Dieses Package enthält eine Untermenge des Regulären Ausdrucks und dessen Syntax der Programmiersprache Perl.<br /><br />
Die Dokumentation finden Sie unter:<br /><br />
http://regexpstudio.com/DE/TRegExpr/Help/About.html<br /><br />
<br /><br />
===Einfaches Verwendungsbeispiel===<br />
Mit der RegExpr von Sorokin ist es sehr einfach zu üperprüfen, ob ein Ausdruck (expression) in einer Zeichenkette (string) vorkommt.<br /><br />
Dazu erstellen Sie eine Insanz von TRegExpr. Dann übergeben Sie Ihren regulären Ausdruck der Eigenschaft TRegExpr.Expression. Um den Regulären Ausdruck zu überprüfen führen Sie das Ganze mit der Methode Exec aus. Wenn der Reguläre Ausdruck in der Zeichenkette (String) vorkommt, dann gibt die Methode Exec den Wert True (Wahr) zurück.<br /><br />
<br /><br />
<syntaxhighlight><br />
var<br />
RegexObj: TRegExpr;<br />
<br />
begin<br />
RegexObj := TRegExpr.Create;<br />
RegexObj.Expression := '.*login.*';<br />
if RegexObj.Exec('Bitte finde das Wort login in diesem Satz.') then WriteLn('Das Wort login wurde im Satz gefunden!');<br />
RegexObj.Free;<br />
end;<br />
</syntaxhighlight><br />
<br /><br />
<br />
==Regexpr von Joost==<br />
Die Regexpr von Joost (das sind die Units oldregexpr.pp und regex.pp) sind Units für sehr einfache Reguläre Ausdrücke. Die Regexpr von Joost verwendet die meisten Regulären Ausdrücke der GNU regexpr. regex wird verwendet um Ausdrücke innerhalb einer Zeichenkette (string) zu suchen.<br /><br />
<br /><br />
Die gegenwärtige Unit ist weit davon entfernt vollständig zu sein. Sie vermisst die einfache Syntax Unterstützung von [http://www.opengroup.org/onlinepubs/007908799/xbd/re.html POSIX] oder die komplexere Syntax wie [http://www.pcre.org/ Perl regex], [http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html Java Regex], [http://www.jpsoft.com/help/index.htm?regularexpressionsyntax.htm Ruby Regex] etc ...<br /><br />
<br /><br />
Aktuell ent hält die Unit vier Funktionen:<br /><br />
* GenerateRegExprEngine – Fordert den Speicher an.<br />
* RegExprPos – Findet das Suchmuster in einer Zeichenkette (string).<br />
* DestroyRegExprEngine – Gibt den Speicher frei.<br />
* RegExprEscapeStr – Verlässt die Syntax des Regulären Ausdrucks und interpretiert den Ausdruck als Zeichenkette (string) der regex syntax.<br />
<br /><br />
Es gibt für diese Funktion ein Testprogram:<br /><br />
* Das Testprogramm '''testreg1''' (($LazarusDir)\fpc\2.2.6\source\packages\regexpr\examples) zeigt die unterstützten Regulären Ausdrücke.<br /><br />
<br /><br />
==Regexpr von Florian==<br />
Die ist die älteste Umsetzung. Diese Umsetzung befindet sich aktuell im Verzeichnis packages/regexpr/src/old und wird gegenwärtig nicht von makefiles kompiliert. Damit wird die Umsetzung in den aktuellen FPC/Lazarus Versionen nicht vorkompiliert ausgeliefert.<br /><br />
<br /><br />
==Siehe auch==<br />
* https://en.wikipedia.org/wiki/Comparison_of_regular_expression_engines<br />
<br /><br />
<br /><br />
<br />
{{AutoCategory}}[[Category:Packages/de]]</div>
Olaf
https://wiki.freepascal.org/index.php?title=RegEx_packages/de&diff=88720
RegEx packages/de
2015-05-10T07:35:35Z
<p>Olaf: Created page with "{{Regexpr}} __TOC__ <br /> Das Package RegExpr enthält eine Anzahl von Werkzeugen für den Umgang mit Regulären Ausdrücken (regular expressions).<br /> <br /> Um sich in da..."</p>
<hr />
<div>{{Regexpr}}<br />
__TOC__<br />
<br /><br />
Das Package RegExpr enthält eine Anzahl von Werkzeugen für den Umgang mit Regulären Ausdrücken (regular expressions).<br /><br />
<br /><br />
Um sich in das Thema Reguläre Ausdrücke einzuarbeiten können Sie folgende Wikipedia-Seiten lesen:<br /><br />
[https://en.wikipedia.org/wiki/Regular_expression Wikipedia: Reguläre Ausdrücke (englisch)]<br /><br />
[https://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck Wikipedia: Reguläre Ausdrücke (deutsch)]<br /><br />
<br /><br />
==Regexpr von Sorokin==<br />
Dieses Package ist die vollständigste Umsetzung, das Package befindet sich im Unterverzeichnis packages/regexpr/src/regexpr.pas<br /><br />
<br /><br />
Dieses Package enthält eine Untermenge des Regulären Ausdrucks und dessen Syntax der Programmiersprache Perl.<br /><br />
Die Dokumentation finden Sie unter:<br /><br />
http://regexpstudio.com/DE/TRegExpr/Help/About.html<br /><br />
<br /><br />
===Einfaches Verwendungsbeispiel===<br />
Mit der RegExpr von Sorokin ist es sehr einfach zu üperprüfen, ob ein Ausdruck (expression) in einer Zeichenkette (string) vorkommt.<br /><br />
Dazu erstellen Sie eine Insanz von TRegExpr. Dann übergeben Sie Ihren regulären Ausdruck der Eigenschaft TRegExpr.Expression. Um den Regulären Ausdruck zu überprüfen führen Sie das Ganze mit der Methode Exec aus. Wenn der Regulären Ausdruck in der Zeichenkette (String) vorkommt, dann gibt die Methode Exec den Wert True (Wahr) zurück.<br /><br />
<br /><br />
<syntaxhighlight><br />
var<br />
RegexObj: TRegExpr;<br />
<br />
begin<br />
RegexObj := TRegExpr.Create;<br />
RegexObj.Expression := '.*login.*';<br />
if RegexObj.Exec('Bitte finde das Wort login in diesem Satz.') then WriteLn('Das Wort login wurde im Satz gefunden!');<br />
RegexObj.Free;<br />
end;<br />
</syntaxhighlight><br />
<br /><br />
==Regexpr von Joost==<br />
Die Regexpr von Joost (das sind die Units oldregexpr.pp und regex.pp) sind Units für sehr einfache Reguläre Ausdrücke. Die Regexpr von Joost verwendet die meisten Regulären Ausdrücke der GNU regexpr. regex wird verwendet um Ausdrücke innerhalb einer Zeichenkette (string) zu suchen.<br /><br />
<br /><br />
Die gegenwärtige Unit ist weit davon entfernt vollständig zu sein. Sie vermisst die einfache Syntax Unterstützung von [http://www.opengroup.org/onlinepubs/007908799/xbd/re.html POSIX] oder die komplexere Syntax wie [http://www.pcre.org/ Perl regex], [http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html Java Regex], [http://www.jpsoft.com/help/index.htm?regularexpressionsyntax.htm Ruby Regex] etc ...<br /><br />
<br /><br />
Aktuell ent hält die Unit vier Funktionen:<br /><br />
* GenerateRegExprEngine – Fordert den Speicher an.<br />
* RegExprPos – Findet das Suchmuster in einer Zeichenkette (string).<br />
* DestroyRegExprEngine – Gibt den Speicher frei.<br />
* RegExprEscapeStr – Verlässt die Syntax des Regulären Ausdrucks und interpretiert den Ausdruck als Zeichenkette (string) der regex syntax.<br />
<br /><br />
Es gibt für diese Funktion ein Testprogram:<br /><br />
* Das Testprogramm '''testreg1''' (($LazarusDir)\fpc\2.2.6\source\packages\regexpr\examples) zeigt die unterstützten Regulären Ausdrücke.<br /><br />
<br /><br />
==Regexpr von Florian==<br />
Die ist die älteste Umsetzung. Diese Umsetzung befindet sich aktuell im Verzeichnis packages/regexpr/src/old und wird gegenwärtig nicht von makefiles kompiliert. Damit wird die Umsetzung in den aktuellen FPC/Lazarus Versionen nicht vorkompiliert ausgeliefert.<br /><br />
<br /><br />
==Siehe auch==<br />
* https://en.wikipedia.org/wiki/Comparison_of_regular_expression_engines<br />
<br /><br />
<br /><br />
<br />
{{AutoCategory}}[[Category:Packages/de]]</div>
Olaf
https://wiki.freepascal.org/index.php?title=Template:Database_Programming/de&diff=88410
Template:Database Programming/de
2015-05-01T11:14:10Z
<p>Olaf: /* Artikel über Datenbank-Programmierung */</p>
<hr />
<div>==Artikel über Datenbank-Programmierung==<br />
<br />
*[[Lazarus Database Tutorial/de|Lazarus-Datenbank-Tutorial]] - Eine Einführung über die Verwendung von Lazarus mit Datenbanken.<br />
*[[Databases/de|Datenbanken]] - Allgemeine Informationen über die Einsatzmöglichkeiten von Lazarus und FPC mit Datenbanken.<br />
*[[Databases in Lazarus/de|Datenbanken mit Lazarus]] - liefert einen allgemeinen Überblick über die Verwendung von Datenbanken mit Lazarus.<br />
*[[How to write in-memory database applications in Lazarus/FPC]] - Praktische Anweisungen zum programmieren mit MemDatasets<br />
*[[MySQLDatabases/de]] - erklärt, wie man auf eine einfachere Weise eine Verbindung mit einem MySQL Server herstellt.<br />
*[[Zeos_tutorial/de]] - Erzeugen von Datenbank-Anwendungen mit den Zeos-Komponenten.<br />
*[http://lazaruszeos.blogspot.com Zeos+SQLite Tutorial] - Gutes Tutorial mit Screenshots und Screencasts es wird auf spanisch erläutert, wie SQLite und Zeos, verwendet werden.<br />
*[http://pdo.sourceforge.net Pascal Data Objects] is a database API that worked for both FPC and Delphi and utilises native MySQL libraries for version 4.1 and 5.0 and Firebird SQL 1.5, and 2.0. It's inspired by PHP's PDO class.<br />
*[[Lazarus Tdbf Tutorial/de]] - Datenbank-Entwicklung unter Verwendung der [https://tdbf.sf.net TDbf]-Komponente (entwickelt von Micha Nelissen) mit Lazarus<br />
*[[Lazarus DB Faq/de|Lazarus DB FAQ (deutsch)]] - Häufig gestellte Fragen zur Datenbank-Programmierung mit Lazarus.<br />
*[[Firebird in action]] - Firebird zusamen mit FPC/Lazarus verwenden<br />
*[[ODBCConn]] - Verwendung von 'ODBCConn' unter FPC/Lazarus für Verbindungen zu ODBC-Datenquellen.<br />
*[[MS Access]] - Zugriff auf eine MS-Access Datenbank</div>
Olaf
https://wiki.freepascal.org/index.php?title=Template:Database_Programming/de&diff=88409
Template:Database Programming/de
2015-05-01T11:11:37Z
<p>Olaf: /* Artikel über Datenbank-Programmierung */</p>
<hr />
<div>==Artikel über Datenbank-Programmierung==<br />
<br />
*[[Lazarus Database Tutorial/de|Lazarus-Datenbank-Tutorial]] - Eine Einführung über die Verwendung von Lazarus mit Datenbanken.<br />
*[[Databases/de|Datenbanken]] - Allgemeine Informationen über die Einsatzmöglichkeiten von Lazarus und FPC mit Datenbanken.<br />
*[[Databases in Lazarus/de|Datenbanken mit Lazarus]] - liefert einen allgemeinen Überblick über die Verwendung von Datenbanken mit Lazarus.<br />
*[[How to write in-memory database applications in Lazarus/FPC]] - Praktische Anweisungen zum programmieren mit MemDatasets<br />
*[[MySQLDatabases/de]] - erklärt, wie man auf eine einfachere Weise eine Verbindung mit einem MySQL Server herstellt.<br />
*[[Zeos_tutorial/de]] - Erzeugen von Datenbank-Anwendungen mit den Zeos-Komponenten.<br />
*[http://lazaruszeos.blogspot.com Zeos+SQLite Tutorial] - Gutes Tutorial mit Screenshots und Screencasts es wird auf spanisch erläutert, wie SQLite und Zeos, verwendet werden.<br />
*[http://pdo.sourceforge.net Pascal Data Objects] is a database API that worked for both FPC and Delphi and utilises native MySQL libraries for version 4.1 and 5.0 and Firebird SQL 1.5, and 2.0. It's inspired by PHP's PDO class.<br />
*[[Lazarus Tdbf Tutorial/de]] - Datenbank-Entwicklung unter Verwendung der [https://tdbf.sf.net TDbf]-Komponente (entwickelt von Micha Nelissen) mit Lazarus<br />
*[[Lazarus DB Faq/de|Lazarus DB FAQ (deutsch)]] - Häufig gestellte Fragen zur Datenbank-Programmierung mit Lazarus.<br />
*[[Firebird in action]] - Using Firebird with FPC/Lazarus<br />
*[[ODBCConn]] - Verwendung von 'ODBCConn' unter FPC/Lazarus für Verbindungen zu ODBC-Datenquellen.<br />
*[[MS Access]] - How to access a MS Access database</div>
Olaf
https://wiki.freepascal.org/index.php?title=Template:Database_Programming/de&diff=88408
Template:Database Programming/de
2015-05-01T11:07:53Z
<p>Olaf: /* Artikel über Datenbank-Programmierung */</p>
<hr />
<div>==Artikel über Datenbank-Programmierung==<br />
<br />
*[[Lazarus Database Tutorial/de|Lazarus-Datenbank-Tutorial]] - Eine Einführung über die Verwendung von Lazarus mit Datenbanken.<br />
*[[Databases/de|Datenbanken]] - Allgemeine Informationen über die Einsatzmöglichkeiten von Lazarus und FPC mit Datenbanken.<br />
*[[Databases in Lazarus/de|Datenbanken mit Lazarus]] - liefert einen allgemeinen Überblick über die Verwendung von Datenbanken mit Lazarus.<br />
*[[How to write in-memory database applications in Lazarus/FPC]] - Praktische Anweisungen zum programmieren mit MemDatasets<br />
*[[MySQLDatabases/de]] - erklärt, wie man auf eine einfachere Weise eine Verbindung mit einem MySQL Server herstellt.<br />
*[[Zeos_tutorial/de]] - Erzeugen von Datenbank-Anwendungen mit den Zeos-Komponenten.<br />
*[http://lazaruszeos.blogspot.com Zeos+SQLite Tutorial] - Good tutorial using screenshots and screencasts it explains how to use SQLite and Zeos, spanish (google translate does a good work in translating it to english)<br />
*[http://pdo.sourceforge.net Pascal Data Objects] is a database API that worked for both FPC and Delphi and utilises native MySQL libraries for version 4.1 and 5.0 and Firebird SQL 1.5, and 2.0. It's inspired by PHP's PDO class.<br />
*[[Lazarus Tdbf Tutorial/de]] - Datenbank-Entwicklung unter Verwendung der [https://tdbf.sf.net TDbf]-Komponente (entwickelt von Micha Nelissen) mit Lazarus<br />
*[[Lazarus DB Faq/de|Lazarus DB FAQ (deutsch)]] - Häufig gestellte Fragen zur Datenbank-Programmierung mit Lazarus.<br />
*[[Firebird in action]] - Using Firebird with FPC/Lazarus<br />
*[[ODBCConn]] - Verwendung von 'ODBCConn' unter FPC/Lazarus für Verbindungen zu ODBC-Datenquellen.<br />
*[[MS Access]] - How to access a MS Access database</div>
Olaf
https://wiki.freepascal.org/index.php?title=Databases/de&diff=88407
Databases/de
2015-05-01T11:06:23Z
<p>Olaf: </p>
<hr />
<div>{{Databases}}<br />
<br />
Diese Seite ist noch unfertig ...<br />
<br />
{{Database Programming/de}}<br />
<br />
== Einleitung ==<br />
<br />
Wie bei anderen Entwicklungssystemen auch spielt die Zusammenarbeit mit verschiedenen Datenbanken bei Lazarus eine bedeutende Rolle. Während ein Teil der Funktionalität schon mit FPC zur Verfügung steht, kommen andere Teile (insbesondere die visuellen Komponenten) erst mit Lazarus selbst hinzu. Die bei Lazarus enthaltenen Komponenten decken schon ein gewisses Spektrum an Datenbanken ab. Da aber immer Verbesserungsbedarf besteht und es auch exotischere Datenbanken gibt, existieren externe Komponenten / Bibliotheken, die die Möglichkeiten von Lazarus erweitern. <br />
<br />
Diese Seite stellt einen Einstieg für das Thema 'Lazarus und Datenbanken' dar. Die folgende Tabelle bietet einen Überblick über die unterstützten Datenbanken. Da sie noch auf dem Stand von FPC 1.9.7 basiert, sollte sie schnellstens auf den aktuellen Stand gebracht werden. Ein Hinweis noch an alle Experimentierfreudigen: Installieren sie nur die Datenbank-Komponenten, deren Client-Bibliotheken (falls diese erforderlich sind) auf ihrem Computer installiert sind. Sonst kann es passieren, dass Lazarus den Start mit einer Fehlermeldung (wegen fehlender Dateien) verweigert. Da sie somit keine Möglichkeit mehr haben, die Komponenten zu deinstallieren, ist eine Neuinstallation von Lazarus erforderlich.<br />
<br />
=== Tabelle 1 ===<br />
{| class="wikitable sortable" BORDER="1" CELLSPACING="0"<br />
!STYLE="background:#ffdead;"|'''Datenbank'''<br />
!STYLE="background:#ffdead;"|'''Package Name'''<br />
!STYLE="background:#ffdead;"|'''Benötigt eine <br>Client Bibliothek?'''<br />
!STYLE="background:#ffdead;"|'''Benötigt Server?'''<br />
!STYLE="background:#ffdead;"|'''Unterstützte Versionen'''<br />
!STYLE="background:#ffdead;"|'''Unterstützte Plattformen'''<br />
|----<br />
|'''Textdateien'''||SDFLaz||Nein||Nein|| - || Alle<br />
|----<br />
|'''Im Speicher'''||MemDSLaz||Nein||Nein|| - || Alle<br />
|----<br />
|'''DBase'''||[[Lazarus_Tdbf_Tutorial/de | DBFLaz]]||Nein||Nein|| III+, IV, VII || Alle<br />
|----<br />
|'''FoxPro'''||[[Lazarus_Tdbf_Tutorial/de | DBFLaz]]||Nein||Nein|| 2.0, 2.5, 3.0 (nicht vollständig) || Alle<br />
|----<br />
|'''Paradox'''||[[TParadoxDataSet | TParadoxDataSet]]||Nein||Nein|| bis zu Version 7 (und höher ??) || Alle<br />
|----<br />
|[http://www.sqlite.org/ '''SQLite''']||SQLite||Ja||Nein|| 2.x, 3.x || Alle<br />
|----<br />
|[http://www.mysql.com/ '''MySQL''']||[[MySQLDatabases/de | SQLdb]]||Ja||Ja|| 3 - 5.5 || i386: Linux, Win32<br />
|----<br />
|[http://www.firebirdsql.org/ '''Firebird''']||IBase||Ja||Depends<sup>1)</sup>||1 - 2.5|| i386: Linux, Win32<br />
|----<br />
|[http://www.postgresql.org/ '''PostgreSQL''']||SQLdb||Ja||Ja|| 6.6 - 8 || i386: Linux, Win32<br />
|----<br />
|'''ODBC'''||[[ODBCConn|SQLdb]]||Ja||Depends|| 3.x <sup>2)</sup> || i386: Linux, Win32<br />
|----<br />
|[http://www.embarcadero.com/products/interbase-smp '''Interbase''']||IBase||Ja||Ja||4 - 6|| i386: Linux, Win32<br />
|----<br />
|[http://www.oracle.com/ '''Oracle''']||SQLdb||Ja||Ja|| - || - <br />
|----<br />
|[http://www.advantagedatabase.com/ '''Advantage''']||TAdsDataSet||Ja||Nein||10.1 und höher|| i386: Linux, Win32<br />
|}<br />
<br />
<sup>1)</sup> Sie können eine eingebettete Version von Firebird zumindest unter Windows benutzen (möglicherweise unter Linux/OSX mit einigen Verrenkungen), oder Sie nehmen eine Server-Version unter Windows/Unix/OSX/FreeBSD/anderen von Firebird unterstützen Plattformen<br />
<br />
<sup>2)</sup> Diese Versionsnummer bezieht sich auf den ODBC Standard, nicht auf die Versionsnummer eines Treibers oder Treibermanagers. Es gibt ODBC 3.x Treiber für die meisten DBMS.<br />
<br />
== Weitere Informationen zu Lazarus und Datenbanken ==<br />
<br />
* FAQ: [[Lazarus DB Faq/de|Lazarus Datenbank FAQ]]<br />
* Tutorial: [[Lazarus Database Tutorial/de|Lazarus Database Tutorial]]<br />
* MySQL: [[MySQLDatabases/de|MySQLDatabases]]<br />
* Firebird: [[Firebird in action]]<br />
* ODBC: [[ODBCConn]]<br />
<br />
== Unterschiede zu Delphi ==<br />
<br />
Der vielleicht wichtigste Vorteil von Lazarus gegenüber Delphi ist die Plattformunabhängigkeit. Das bedeutet auf der anderen Seite, dass es für die Windows-spezifischen Teile bei Delphi (z.B. die BDE) keine direkten Entsprechungen bei Lazarus gibt. Gleiches gilt für die meisten Reporting-Werkzeuge. Bei der Konvertierung eines Delphiprogramms nach Lazarus sollte man auf die verschiedenen Dateisysteme achten, wenn das Programm auf allen von Lazarus unterstützten Plattformen laufen soll. Als Beispiel möchte ich nur die unterschiedlichen Trennzeichen im Pfadnamen ( \ bzw. / ) nennen.<br />
<br />
== In Lazarus enthaltene Datenbank-Packages ==<br />
<br />
=== sqldblaz.lpk ===<br />
Dieses Package bietet Zugriff auf verschiedene Datenbanken (z.B. MySQL oder Interbase/Firebird). Das Package wird standardmäßig mit Lazarus installiert (unter Windows). Die Komponenten (TSQLQuery, TSQLTransaction, TIBConnection, TODBCConnection, TOracleConnection, TMySQL40Connection, TMySQL41Connection, TMySQL50Connection, TPQConnection) befinden sich auf der 'SQLdb' Seite in der Komponentenpalette.<br />
<br />
=== dbflaz.lpk ===<br />
Dieses Package bietet Zugriff auf dBase und FoxPro Datenbanken. Weitere Informationen bietet das [[Lazarus Tdbf Tutorial/de|Lazarus TDbf Tutorial]]. Das Package wird standardmäßig mit Lazarus installiert. Die Komponente TDbf befindet sich auf der 'Data Access' Seite in der Komponentenpalette.<br />
<br />
=== sqlitelaz.lpk ===<br />
Dieses Package bietet Zugriff auf SQLite Datenbanken. Weitere Informationen sind im [[Lazarus Database Tutorial/de|Lazarus Database Tutorial]] zu finden.<br />
<br />
=== sdflaz.lpk ===<br />
Das Package wird standardmäßig mit Lazarus installiert. Die Komponente TSdfDataSet befindet sich auf der 'Data Access' Seite in der Komponentenpalette.<br />
<br />
=== lazreport.lpk ===<br />
Mit LazReport enthält Lazarus auch einen Reportgenerator. Dieser basiert auf FreeReport 2.32. Zum Funktionieren von LazReport muss das Package Printer4Lazarus installiert sein.<br />
(Mit Revision 11950 wurde LazReport in das Lazarus SVN Repository übernommen.)<br />
<br />
==== lazreportpdfexport.lpk ====<br />
Dieses Package erweitert LazReport um die Möglichkeit, einen Report auch im PDF-Format exportieren zu können.<br />
<br />
== Externe Komponenten / Bibliotheken ==<br />
<br />
=== Zeos DataBase Objects ===<br />
Diese Komponenten bieten Zugriff auf verschiedene Datenbanken. Weitere Informationen finden sie [[ZeosDBO|hier]]. Es existiert auch ein [[Zeos tutorial/de|Zeos Tutorial]].<br />
<br />
=== Pascal Data Objects ===<br />
Die Pascal Data Objects sind von Zeoslib abgeleitet. Es werden die mit MySQL 4.1 und 5.0 eingeführten Funktionen wie prepared statements, binding, und stored procedures von der Datenbank-API namens Pascal Data Objects unterstützt, die durch die PHP Data Objects inspiriert wurde. Der für die Verwendung dieser neuen API notwendige Code und die Dokumentation sind bei Sourceforge zu finden:<br />
<br />
http://pdo.sourceforge.net<br />
<br />
Jan 30, 2007: PDO hat Treiber für Firebird 1.5 und Firebird 2.0 hinzugefügt<br />
<br />
--[[User:Jrmarino|Jrmarino]] 11:28, 13 Mar 2006 (CET)<br />
<br />
=== TPSQL ===<br />
Diese Komponenten bieten Zugriff mittels TCP/IP auf PostgreSQL Datenbanken. Weitere Informationen finden sie auf [[TPSQL/de|dieser Seite]].<br />
<br />
=== FIBL ===<br />
Diese Komponenten bieten Zugriff auf Interbase und Firebird Datenbanken. Die Homepage ist [http://sourceforge.net/projects/fibl http://sourceforge.net/projects/fibl].<br />
<br />
=== FBLib Firebird Library ===<br />
<br />
[http://fblib.altervista.org/ FBLib] ist eine Open Source Bibliothek (nicht datensensitiv) für direkten Zugriff auf die Firebird relationale Datenbank von Borland Delphi / Kylix, Free Pascal und Lazarus aus. Für die meisten Benutzer dürfte es gewöhnungsbedürftig sein, dass hier nicht die übliche Anbindung über TDatasource erfolgt.<br />
<br />
Gegenwärtig sind folgende Features enthalten:<br />
<br />
* Direkter Zugriff auf Firebird 1.0.x, 1.5.x und 2.x Classic oder SuperServer<br />
* Multiplattform [Win32,Gnu/Linux,FreeBSD)<br />
* Automatische Auswahl der Client Bibliothek 'fbclient' oder 'gds32'<br />
* Abfragen (Queries) mit Parametern<br />
* Unterstützt SQL Dialekt 1/3<br />
* LGPL Lizenzvertrag<br />
* Extrahieren von Metadaten<br />
* Simple Script Parser<br />
* Nur 100-150 KB werden zur finalen EXE hinzugefügt<br />
* Unterstützt BLOB Felder<br />
* Export von Daten als HTML SQL Script<br />
* Service manager (backup, restore, gfix...)<br />
* Events Alerter<br />
<br />
Sie können die Dokumentation von der [http://fblib.altervista.org/|FBLib Webseite] herunterladen.<br />
<br />
=== Unified Interbase ===<br />
<br />
UIB bietet Zugriff auf Interbase, Firebird und YAFFIL Datenbanken. Die Homepage ist [http://www.progdigy.com www.progdigy.com]. Ein SVN-Repository ist verfügbar unter https://uib.svn.sourceforge.net/svnroot/uib .<br />
<br />
=== TechInsite Object Persistence Framework (tiOPF) ===<br />
Nähere Informationen zu tiOPF sind auf dieser [[tiOPF/de|Seite]] zu finden.<br />
<br />
=== Advantage TDataSet Descendant ===<br />
Der Advantage TDataSet Descendant bietet ein Mittel für Verbindungen (und Öffnen von Tabellen) mit dem Advantage Database Server. Advantage ist eine flexible, administrations-freie eingebettete Datenbank, die den Zugriff als Client/Server oder als Peer-to-peer auf die Dateiformate Clipper, FoxPro und Visual FoxPro 9 ermöglicht. Ebenso wie auf das eigene Dateiformat, das einen Migrationpfad darstellt, der es erlaubt, neuere Features zu verwenden.<br />
<br />
Wichtigste Features:<br />
* Gebührenfreier Peer-to-peer - Datenbankzugriff mit Migrationspfad zu Client/Server<br />
* Multi-Platform (Clients unterstützt unter Windows und Linux, Server unterstützt unter Windows, Linux und NetWare)<br />
* Unterstützt sowohl navigationalen als auch relationalen SQL-Datenbankzugriff<br />
* Volltext-Suchmaschine<br />
* Tabellen-, Index-, Memo- und Kommunikationsverschlüsselung<br />
* Kompatibel mit den originalen TDataset-Komponenten<br />
* Online-Backup<br />
* Server unterstützt Replikation<br />
<br />
Für weitere Informationen, siehe die [http://www.advantagedatabase.com Advantage Database Server] Website.<br />
<br />
== Siehe auch ==<br />
<br />
* [[Lazarus DB Faq]]<br />
<br />
[[Category:Databases/de]]</div>
Olaf
https://wiki.freepascal.org/index.php?title=Easter_date/de&diff=87507
Easter date/de
2015-03-24T18:57:53Z
<p>Olaf: </p>
<hr />
<div>{{Easter date}}<br />
<br><br />
Zurück zur Seite [[code examples/de|Code Beispiele]].<br><br />
<br><br />
Dieses Beispiel berechnet das Osterdatum (Ostersonntag) der Westkirchen nach der Formel von Carl Friedrich Gauß für den Zeitraum von 1583 - 8702.<br><br />
<br><br />
<syntaxhighlight><br />
uses<br />
SysUtils, DateUtils, Dialogs;<br />
<br />
...<br />
<br />
function funOstersonntag(wrdJahr: word): TDate;<br />
// Osterfunktion nach Carl Friedrich Gauß (1800). Rückgabewert<br />
// ist das Datum des Ostersonntags im angegebenen Jahr<br />
// Gültigkeitsbereich: 1583 - 8702<br />
var<br />
a: integer;<br />
b: integer;<br />
c: integer;<br />
d: integer;<br />
e: integer;<br />
f: integer;<br />
wrdTage: word;<br />
wrdMonat: word;<br />
<br />
begin<br />
<br />
// Prüft, ob das Jahr korrekt ist<br />
if wrdJahr < 1583 then<br />
begin<br />
ShowMessage('Das Jahr ist zu klein und liegt vor dem Jahr 1583.');<br />
Exit;<br />
end;<br />
<br />
if wrdJahr > 8702 then<br />
begin<br />
ShowMessage('Das Jahr ist zu groß und liegt nach dem Jahr 8702.');<br />
Exit;<br />
end;<br />
<br />
// Die Gauss-Formel<br />
a := wrdJahr mod 19;<br />
b := wrdJahr div 100;<br />
c := (8 * b + 13) div 25 - 2;<br />
d := b - (wrdJahr div 400) - 2;<br />
e := (19 * (wrdJahr mod 19) + ((15 - c + d) mod 30)) mod 30;<br />
<br />
if e = 28 then<br />
if a > 10 then<br />
e := 27<br />
else if e = 29 then<br />
e := 28;<br />
<br />
f := (d + 6 * e + 2 * (wrdJahr mod 4) + 4 * (wrdJahr mod 7) + 6) mod 7;<br />
<br />
if (e + f + 22) > 31 then<br />
begin<br />
wrdMonat := 4;<br />
wrdTage := ((e + f + 22) - 31);<br />
end<br />
else<br />
begin<br />
wrdMonat := 3;<br />
wrdTage := (e + f + 22);<br />
end;<br />
<br />
// Rückgabewert als Datum bereitstellen<br />
Result := EncodeDate(wrdJahr, wrdMonat, wrdTage);<br />
<br />
end;<br />
</syntaxhighlight><br />
<br><br />
<br><br />
--[[User:Olaf|Olaf]] 05:45, 15 May 2013 (UTC)<br />
{{AutoCategory}}[[Category:Code Parts/de]][[Category:Mathe/de]]</div>
Olaf
https://wiki.freepascal.org/index.php?title=calculate_prime_number/de&diff=87506
calculate prime number/de
2015-03-24T18:55:59Z
<p>Olaf: </p>
<hr />
<div>{{calculate prime number}}<br />
<br><br />
Zurück zur Seite [[code examples/de|Code Beispiele]].<br><br />
<br><br />
Dieses Beispiel enthält zwei Unterprogramme. Eines prüft, ob es sich bei der übergebenen Zahl um eine Primzahl handelt.<br><br />
Das andere Unterprogramm ermittelt mit Hilfe des ersten Unterprogramms ein Array mit Primzahlen, dessen Start- und Endezahl der Prozedur nach Belieben übergeben werden können.<br><br />
Die Funktionen laufen nur unter 64 Bit. Damit die Funktionen auch unter 32 Bit laufen, muss der Datentyp QWord durch den Datentyp Cardinal ersetzt werden.<br><br />
<br><br />
<syntaxhighlight><br />
uses<br />
SysUtils, ...;<br />
<br />
...<br />
<br />
implementation<br />
<br />
...<br />
<br />
// Diese Funktion prüft, ob eine Zahl eine Primzahl ist<br />
function funIsPrim(qwdGanzzahl: QWord): boolean; inline;<br />
var<br />
qwdI: QWord;<br />
<br />
begin<br />
<br />
Result := False;<br />
<br />
for qwdI := 2 to Round(Sqrt(qwdGanzzahl)) do<br />
if qwdGanzzahl mod qwdI = 0 then<br />
exit;<br />
<br />
Result := True;<br />
<br />
end;<br />
<br />
// Diese Funktion ermittelt alle Primzahlen aus einem bestimmten Bereich<br />
procedure subPrimArray(qwdVon, qwdBis: QWord);<br />
var<br />
qwdI: QWord;<br />
arrPrim: array of Qword;<br />
<br />
begin<br />
<br />
// Legt die Anfangsgrösse des Arrays fest<br />
SetLength(arrPrim, 0);<br />
<br />
for qwdI := qwdVon to qwdBis do<br />
begin<br />
if funIsPrim(qwdI) = True then<br />
begin<br />
// ändert die Grösse des Arrays<br />
SetLength(arrPrim, High(arrPrim) + 2);<br />
arrPrim[High(arrPrim)] := qwdI;<br />
end;<br />
end;<br />
<br />
end;<br />
<br />
...<br />
<br />
</syntaxhighlight><br />
<br><br />
<br><br />
--[[User:Olaf|Olaf]] 05:14, 21 May 2013 (UTC)<br />
{{AutoCategory}}[[Category:Code Parts/de]][[Category:Mathe/de]]</div>
Olaf
https://wiki.freepascal.org/index.php?title=leap_year/de&diff=87505
leap year/de
2015-03-24T18:48:18Z
<p>Olaf: </p>
<hr />
<div>{{leap year}}<br />
<br><br />
Zurück zur Seite [[code examples/de|Code Beispiele]].<br><br />
<br><br />
Dieses Beispiel prüft, ob das Jahr ein (christliches) Schaltjahr ab dem Jahr 1582 ist.<br><br />
Alternativ gibt es dazu in der Unit Sysutils die Funktion leap year (leap year = Schaltjahr).<br><br />
<br><br />
<syntaxhighlight><br />
function funIstSchaltjahr(wrdJahr: word): integer;<br />
const<br />
conKalenderumstellung = 1583;<br />
conFehler = -1;<br />
conFalsch = 0;<br />
conWahr = 1;<br />
<br />
begin<br />
<br />
Result := conFehler;<br />
// Prüft auf die Richtigkeit des Kalenderjahres<br />
if wrdJahr < conKalenderumstellung then<br />
exit;<br />
<br />
Result := conFalsch;<br />
<br />
if (wrdJahr mod 4) = 0 then<br />
Result := conWahr;<br />
if (wrdJahr mod 100) = 0 then<br />
Result := 0;<br />
if (wrdJahr mod 400) = 0 then<br />
Result := conWahr;<br />
<br />
end;<br />
<br />
</syntaxhighlight><br />
<br><br />
<br><br />
--[[User:Olaf|Olaf]] 10:47, 23 April 2013 (UTC)<br />
{{AutoCategory}}[[Category:Code Parts/de]][[Category:Mathe/de]]</div>
Olaf
https://wiki.freepascal.org/index.php?title=Area_Calculations_Library/de&diff=87457
Area Calculations Library/de
2015-03-22T06:27:35Z
<p>Olaf: Created page with "<small> '''{{#language:de}} (de)''' </small> <br/> right <br/> Eine Bibliothek zur Flächenberechnung. <br/> <syntaxhighlight> un..."</p>
<hr />
<div><small> <br />
[[Flächen/de|'''{{#language:de}} (de)''']]<br />
</small><br />
<br/><br />
[[File:fpc source logo.png|right]]<br />
<br/><br />
Eine Bibliothek zur Flächenberechnung.<br />
<br/><br />
<syntaxhighlight><br />
unit uFlaeche;<br />
<br />
{$mode objfpc}{$H+}<br />
{$IMPLICITEXCEPTIONS OFF}<br />
<br />
interface<br />
<br />
uses<br />
SysUtils;<br />
<br />
function funFlaecheQuadrat(dblL: double): double;<br />
function funEckmassQuadrat(dblL: double): double;<br />
function funLaengeQuadrat(dblA: double): double;<br />
function funUmfangQuadrat(dblL: double): double;<br />
<br />
function funEckmassRechteck(dblL, dblB: double): double;<br />
function funUmfangRechteck(dblL, dblB: double): double;<br />
<br />
function funFlaecheRhomboid(dblL, dblB: double): double;<br />
function funUmfangRhomboid(dblL, dblB: double): double;<br />
<br />
function funFlaecheTrapez(dblL1, dblL2, dblB: double): double;<br />
function funMittlereLaengeTrapez(dblL1, dblL2: double): double;<br />
function funUmfangTrapez(dblL1, dblL2, dblL3, dblL4: double): double;<br />
<br />
function funFlaecheDreieck(dblL, dblB: double): double;<br />
function funUmfangDreieck(dblL1, dblL2, dblL3: double): double;<br />
<br />
function funHoeheGleichseitigesDreieck(dblL: double): double;<br />
<br />
function funFlaecheKreis(dblD: double): double;<br />
function funUmfangKreis(dblD: double): double;<br />
function funRadiusKreis(dblA: double): double;<br />
<br />
function funFlaecheKreisausschnitt(dblA, dblD: double): double;<br />
function funSehnenlaengeKreisausschnitt(dblR, dblA: double): double;<br />
<br />
function funSehnenlaengeKreisabschnitt(dblR, dblB: double): double;<br />
function funBreiteKreisabschnitt(dblR, dblL: double): double;<br />
<br />
function funFlaecheElipse(dblD1, dblD2: double): double;<br />
function funUmfangElipse(dblD1, dblD2: double): double;<br />
<br />
<br />
implementation<br />
<br />
function funFlaecheQuadrat(dblL: double): double;<br />
begin<br />
// dblL ist die Länge<br />
Result := dblL * dblL;<br />
end;<br />
<br />
function funEckmassQuadrat(dblL: double): double;<br />
begin<br />
// dblL ist die Länge<br />
Result := (sqrt(2)) * dblL;<br />
end;<br />
<br />
function funLaengeQuadrat(dblA: double): double;<br />
begin<br />
// dblA ist die Fläche<br />
Result := sqrt(dblA);<br />
end;<br />
<br />
function funUmfangQuadrat(dblL: double): double;<br />
begin<br />
// dblL ist die Länge<br />
Result := 4 * dblL;<br />
end;<br />
<br />
function funFlaecheRechteck(dblL, dblB: double): double;<br />
begin<br />
// dblL ist die Länge<br />
// dblB ist die Breite<br />
Result := dblL * dblB;<br />
end;<br />
<br />
function funEckmassRechteck(dblL, dblB: double): double;<br />
begin<br />
// dblL ist die Länge<br />
// dblB ist die Breite<br />
Result := sqrt(dblL + dblB);<br />
end;<br />
<br />
function funUmfangRechteck(dblL, dblB: double): double;<br />
begin<br />
// dblL ist die Länge<br />
// dblB ist die Breite<br />
Result := 2 * (dblL + dblB);<br />
end;<br />
<br />
function funFlaecheRhomboid(dblL, dblB: double): double;<br />
begin<br />
// Rhomboid = Parallelogramm<br />
// dblL ist die Länge<br />
// dblB ist die Breite<br />
Result := dblL * dblB;<br />
end;<br />
<br />
function funUmfangRhomboid(dblL, dblB: double): double;<br />
begin<br />
// Rhomboid = Parallelogramm<br />
// dblL ist die Länge<br />
// dblB ist die Breite<br />
Result := 2 * (dblL * +dblB);<br />
end;<br />
<br />
function funFlaecheTrapez(dblL1, dblL2, dblB: double): double;<br />
begin<br />
// dblL1 ist die große Länge<br />
// dblL2 ist die kleine Länge<br />
// dblB ist die Breite<br />
Result := ((dblL1 * dblL2) / 2) * dblB;<br />
end;<br />
<br />
function funMittlereLaengeTrapez(dblL1, dblL2: double): double;<br />
begin<br />
// dblL1 ist die große Länge<br />
// dblL2 ist die kleine Länge<br />
Result := (dblL1 * dblL2) / 2;<br />
end;<br />
<br />
function funUmfangTrapez(dblL1, dblL2, dblL3, dblL4: double): double;<br />
begin<br />
// dblL1 bis dblL4 sind die Längen des Trapezes<br />
Result := dblL1 + dblL2 + dblL3 + dblL4;<br />
end;<br />
<br />
function funFlaecheDreieck(dblL, dblB: double): double;<br />
begin<br />
// dblL ist die Länge<br />
// dblB ist die Breite<br />
Result := (dblL * dblB) / 2;<br />
end;<br />
<br />
function funUmfangDreieck(dblL1, dblL2, dblL3: double): double;<br />
begin<br />
// dblL1 bis dblL3 sind die Längen des Trapezes<br />
Result := dblL1 + dblL2 + dblL3;<br />
end;<br />
<br />
function funHoeheGleichseitigesDreieck(dblL: double): double;<br />
begin<br />
// dblL ist die Länge<br />
Result := 0.5 * sqrt(3) * dblL;<br />
end;<br />
<br />
function funFlaecheKreis(dblD: double): double;<br />
begin<br />
// dblD ist der Durchmesser<br />
Result := (PI * (dblD * dblD)) / 4;<br />
end;<br />
<br />
function funUmfangKreis(dblD: double): double;<br />
begin<br />
// dblD ist der Durchmesser<br />
Result := PI * dblD;<br />
end;<br />
<br />
function funRadiusKreis(dblA: double): double;<br />
begin<br />
// dblA ist die Fläche<br />
Result := sqrt(dblA / PI);<br />
end;<br />
<br />
function funFlaecheKreisausschnitt(dblA, dblD: double): double;<br />
begin<br />
// dblD ist der Kreisdurchmesser<br />
// dblA ist der Mittelpunktswinkel<br />
Result := (PI * (dblD * dblD) / 4) * (dblA / 360);<br />
end;<br />
<br />
function funSehnenlaengeKreisausschnitt(dblR, dblA: double): double;<br />
begin<br />
// dblR ist der Radius<br />
// dblA ist der Mittelpunktswinkel<br />
Result := 2 * (dblR * (sin(dblA / 2)));<br />
end;<br />
<br />
function funBogenlaengeKreisausschnitt(dblR, dblA: double): double;<br />
begin<br />
// dblR ist der Radius<br />
// dblA ist der Mittelpunktswinkel<br />
Result := ((PI * dblR) * dblA) / 180;<br />
end;<br />
<br />
function funSehnenlaengeKreisabschnitt(dblR, dblB: double): double;<br />
begin<br />
// dblR ist der Radius<br />
// dblB ist die Breite<br />
Result := 2 * sqrt(dblB * ((2 * dblR) - dblB));<br />
end;<br />
<br />
function funBreiteKreisabschnitt(dblR, dblL: double): double;<br />
begin<br />
// dblR ist der Radius<br />
// dblB ist die Sehnenlänge<br />
Result := dblR - (sqrt((dblR * dblR) - ((dblL * dblL) / 4)));<br />
end;<br />
<br />
function funBogenlaengeKreisabschnitt(dblR, dblA: double): double;<br />
begin<br />
// dblR ist der Radius<br />
// dblA ist der Mittelpunktswinkel<br />
Result := (pi * dblR * dblA) / 180;<br />
end;<br />
<br />
function funFlaecheElipse(dblD1, dblD2: double): double;<br />
begin<br />
// dblD1 ist der Grosse Durchmesser der Elipse<br />
// dblD2 ist der kleine Durchmesser der Elipse<br />
Result := (Pi * dblD1 * dblD2) / 4;<br />
end;<br />
<br />
function funUmfangElipse(dblD1, dblD2: double): double;<br />
begin<br />
// dblD1 ist der Grosse Durchmesser der Elipse<br />
// dblD2 ist der kleine Durchmesser der Elipse<br />
Result := (Pi / 2) * (dblD1 + dblD2);<br />
end;<br />
<br />
end.<br />
</syntaxhighlight><br />
<br/><br/><br />
{{AutoCategory}}[[Category:Mathe/de]]</div>
Olaf
https://wiki.freepascal.org/index.php?title=Generating_Random_Numbers/de&diff=87456
Generating Random Numbers/de
2015-03-22T06:18:03Z
<p>Olaf: </p>
<hr />
<div><small> <br />
[[Generating Random Numbers/de|'''{{#language:de}} (de)''']] |<br />
[[Generating Random Numbers|'''{{#language:en}} (en)''']] <br />
</small><br />
<br />
[[File:fpc source logo.png|right]]<br />
'''Zufallszahlen''' sind wichtige Quellen für wissenschaftliche Anwendungen, Bildung, Visualisierung und die Entwicklung von Spielen. Sie nehmen eine Schlüsselrolle in der Computersimulation ein.<br />
<br />
Algorithmisch erzeugte Zufallszahlen sind eigentlich Pseudozufallszahlen. Sie gehören zu einer (großen) Menge sich wiederholender Zahlen, deren Reihenfolge schwer und praktisch unmöglich vorhergesagt werden kann. Im Gegensatz zu Delphi verwendet Free Pascal einen MersenneTwister-Algorithmus für seine Standard-<code>[[doc:rtl/system/random.html|random]]</code>-Funktion der [[RTL/de|RTL]]. Vor der ersten Benutzung muss der Zufallszahlengenerator mit einem einmaligen Aufruf der Funktion <code>[[doc:rtl/system/randomize.html|randomize]]</code> initialisiert werden. Dies setzt den "Seed"-Werte des Generators. Vorzugsweise wird <code>randomize</code> zu Beginn der Programmausführung aufgerufen.<br />
<br />
Alternativ stehen auf Unix- und Linux-basierten Systemen die virtuellen Geräte <code>[[Dev random|/dev/random]]</code> und <code>/dev/urandom</code> zur Verfügung. Sie erzeugen Zufallszahlen auf Hardware-Basis.<br />
<br />
Eine dritte Möglichkeit besteht darin, Zufallszahlen aus externen Quellen zu verwenden, entweder von spezialisierter Hardware oder von öffentlichen Quellen, z. B. auf der Basis radioaktiver Zerfallsdaten.<br />
<br />
__TOC__<br />
<br />
== Gleichverteilung ==<br />
<br />
Die stetige Gleichverteilung (auch Rechteckverteilung oder Uniformverteilung) stellt eine Familie symmetrischer Wahrscheinlichkeitsverteilungen dar. Innerhalb eines definierten Intervalls hat sie eine konstante Wahrscheinlichkeitsdichte.<br />
<br />
Die Standardfunktion <code> [[doc:rtl/system/random.html|random]] </code> der [[RTL/de|RTL]] erzeugt Zufallszahlen, die eine Gleichverteilung zu erfüllen. Wenn sie ohne Parameter aufgerufen wird, dann liefert <code>random</code> Fließkomma-Zufallszahlen aus dem Intervall [0, 1), d. h. 0 <= Ergebnis < 1. Wenn <code>random</code> dagegen mit einem longint-Argument L aufgerufen wird. liefert sie eine longint-Zufallszahl des Intervalls [0, L).<br />
<br />
Gleichverteilte Zufallszahlen sind nicht für jede Anwendung sinnvoll. Um Zufallszahlen mit einer anderen Verteilung zu erstellen, sind spezielle Algorithmen notwendig:<br />
<br />
== Normalverteilung (Gaußsche Verteilung) ==<br />
<br />
Unter den verschiedenen Algorithmen zur Erzeugung normalverteilter Zufallszahlen ist das [http://en.wikipedia.org/wiki/Box–Muller_transform Box-Müller-Verfahren] das effizienteste. Die folgende Funktion berechnet damit Gauß-verteilte Zufallszahlen:<br />
<br />
<syntaxhighlight><br />
function rnorm (mean, sd: real): real;<br />
{Berechnet Gaußsche Zufallszahlen nach dem Box-Müller-Verfahren}<br />
var<br />
u1, u2: real;<br />
begin<br />
u1 := random;<br />
u2 := random;<br />
rnorm := mean * abs(1 + sqrt(-2 * (ln(u1))) * cos(2 * pi * u2) * sd);<br />
end;<br />
</syntaxhighlight><br />
Der gleiche Algorithmus wird von der Funktion [[doc:rtl/math/randg.html|randg]] aus der RTL unit [[doc:rtl/math/index.html|math]] verwendet:<br />
<br />
<syntaxhighlight><br />
function randg(mean,stddev: float): float;<br />
</syntaxhighlight><br />
<br />
== Exponentialverteilung ==<br />
<br />
Eine Exponentialverteilung tritt häufig bei praktischen Problemen auf. Ein klassisches Beispiel ist die Verteilung der Wartezeiten zwischen unabhängigen Poisson-Zufallsereignissen, wie z. B. der radioaktive Zerfall von Atomkernen [Press et al. 1989].<br />
<br />
Die folgende Funktion liefert eine einzige Zufallszahl aus einer Exponentialverteilung. Der zu übergebende Wert ''rate'' ist der Kehrwert des Mittelwertes, und die Konstante '' Auflösung '' bestimmt die Granularität der erzeugten Zufallszahlen.<br />
<br />
<syntaxhighlight><br />
function randomExp(a, rate: real): real;<br />
const<br />
RESOLUTION = 1000;<br />
var<br />
unif: real;<br />
begin<br />
if rate = 0 then<br />
randomExp := NaN<br />
else<br />
begin<br />
repeat<br />
unif := random(RESOLUTION) / RESOLUTION;<br />
until unif <> 0;<br />
randomExp := a - rate * ln(unif);<br />
end;<br />
end;<br />
</syntaxhighlight><br />
<br />
== Gamma-Verteilung ==<br />
<br />
Die Gammaverteilung ist eine kontinuierliche Wahrscheinlichkeitsverteilung über der Menge der positiven reellen Zahlen. Sie ist eine Verallgemeinerung sowohl der Exponentialverteilung als auch der Erlang-Verteilung. Sie wird zum Beispiel in der Warteschlangentheorie und in der Versicherungsmathematik verwendet.<br />
<br />
Die folgende Funktion liefert eine einzige echte Zufallszahl aus einer Gamma-Verteilung. Die Form der Verteilung wird durch die Parameter ''a'', ''b'' und ''c'' definiert. Die Funktion nutzt die oben definierte Funktion <code>[[#Exponentialverteilung|randomExp]]</code>.<br />
<br />
<syntaxhighlight><br />
function randomGamma(a, b, c: real): real;<br />
const<br />
RESOLUTION = 1000;<br />
T = 4.5;<br />
D = 1 + ln(T);<br />
var<br />
unif: real;<br />
A2, B2, C2, Q, p, y: real;<br />
p1, p2, v, w, z: real;<br />
found: boolean;<br />
begin<br />
A2 := 1 / sqrt(2 * c - 1);<br />
B2 := c - ln(4);<br />
Q := c + 1 / A2;<br />
C2 := 1 + c / exp(1);<br />
found := False;<br />
if c < 1 then<br />
begin<br />
repeat<br />
repeat<br />
unif := random(RESOLUTION) / RESOLUTION;<br />
until unif > 0;<br />
p := C2 * unif;<br />
if p > 1 then<br />
begin<br />
repeat<br />
unif := random(RESOLUTION) / RESOLUTION;<br />
until unif > 0;<br />
y := -ln((C2 - p) / c);<br />
if unif <= power(y, c - 1) then<br />
begin<br />
randomGamma := a + b * y;<br />
found := True;<br />
end;<br />
end<br />
else<br />
begin<br />
y := power(p, 1 / c);<br />
if unif <= exp(-y) then<br />
begin<br />
randomGamma := a + b * y;<br />
found := True;<br />
end;<br />
end;<br />
until found;<br />
end<br />
else if c = 1 then<br />
{ Die Gamma-Verteilung wird zur Exponentialverteilung, if c = 1 }<br />
begin<br />
randomGamma := randomExp(a, b);<br />
end<br />
else<br />
begin<br />
repeat<br />
repeat<br />
p1 := random(RESOLUTION) / RESOLUTION;<br />
until p1 > 0;<br />
repeat<br />
p2 := random(RESOLUTION) / RESOLUTION;<br />
until p2 > 0;<br />
v := A2 * ln(p1 / (1 - p1));<br />
y := c * exp(v);<br />
z := p1 * p1 * p2;<br />
w := B2 + Q * v - y;<br />
if (w + D - T * z >= 0) or (w >= ln(z)) then<br />
begin<br />
randomGamma := a + b * y;<br />
found := True;<br />
end;<br />
until found;<br />
end;<br />
end; <br />
</syntaxhighlight><br />
<br />
== Erlang-Verteilung ==<br />
<br />
Die Erlang-Verteilung ist eine stetige Wahrscheinlichkeitsverteilung, eine Verallgemeinerung der Exponentialverteilung und ein Spezialfall der Gamma-Verteilung. Sie wurde von Agner Krarup Erlang für die statistische Modellierung der Intervall-Längen zwischen Telefonanrufen entwickelt.<br />
<br />
Die Erlang Verteilung wird für die Warteschlangentheorie und zur Simulation von Wartezeiten verwendet.<br />
<br />
<syntaxhighlight><br />
function randomErlang(mean: real; k: integer): real;<br />
const<br />
RESOLUTION = 1000;<br />
var<br />
i: integer;<br />
unif, prod: real;<br />
begin<br />
if (mean <= 0) or (k < 1) then<br />
randomErlang := NaN<br />
else<br />
begin<br />
prod := 1;<br />
for i := 1 to k do<br />
begin<br />
repeat<br />
unif := random(RESOLUTION) / RESOLUTION;<br />
until unif <> 0;<br />
prod := prod * unif;<br />
end;<br />
randomErlang := -mean * ln(prod);<br />
end;<br />
end;<br />
</syntaxhighlight><br />
<br />
== Poisson-Verteilung ==<br />
Die Poisson-Verteilung umfasst ganzzahlige Werte. Sie spiegelt die Wahrscheinlichkeit für ''k'' Erfolge wieder, wenn die Wahrscheinlichkeit eines Erfolgs in jedem Versuch klein und die Auftretensrate (der Mittelwert) konstant ist.<br />
<br />
<syntaxhighlight><br />
function randomPoisson(mean: integer): integer;<br />
{ Generator for Poisson distribution (Donald Knuth's algorithm) }<br />
const<br />
RESOLUTION = 1000;<br />
var<br />
k: integer;<br />
b, l: real;<br />
begin<br />
assert(mean > 0, 'mean < 1');<br />
k := 0;<br />
b := 1;<br />
l := exp(-mean);<br />
while b > l do<br />
begin<br />
k := k + 1;<br />
b := b * random(RESOLUTION) / RESOLUTION;<br />
end;<br />
randomPoisson := k - 1;<br />
end;<br />
</syntaxhighlight><br />
<br />
== t-Verteilung ==<br />
Die t-Verteilung wird auch Student-t-Verteilung bezeichnet, da sie von William Sealy Gosset 1908 unter dem Pseudonym ''Student'' veröffentlicht wurde. Die t-Verteilung ist eine kontinuierliche Wahrscheinlichkeitsverteilung. Ihre Form ist definiert durch einen Parameter, die Anzahl der Freiheitsgrade (df).<br />
<br />
In der Statistik sind viele Schätzwerte t-verteilt. Die t-Verteilung spielt daher eine wichtige Rolle bei etlichen statistischen Analysen, beispielsweise für den t-Test zur Berechnung der statistischen Signifikanz des Unterschieds zwischen zwei empirischen Mittelwerten, die Konstruktion von Konfidenzintervallen für die Differenz zweier populationsbasierter Mittelwerte und in der linearen Regression. Die t-Verteilung kommt auch in der Bayesschen Analyse normalverteilter Daten vor.<br />
<br />
Der folgende Algorithmus basiert auf der [[RTL/de|RTL]] Funktion <code>[[doc:rtl/system/random.html|random]]</code> und der Funktion <code>[[#Chi-Quadrat-Verteilung|randomChisq]]</code>.<br />
<br />
<syntaxhighlight><br />
function randomT(df: integer): real;<br />
{ Generator für die studentsche t-Verteilung }<br />
begin<br />
if df < 1 then randomT := NaN<br />
else<br />
begin<br />
randomT := randg(0, 1) / sqrt(randomChisq(df) / df);<br />
end;<br />
end;<br />
</syntaxhighlight><br />
<br />
== Chi-Quadrat-Verteilung ==<br />
Die Chi-Quadrat-Verteilung ist eine stetige Wahrscheinlichkeitsverteilung über der Menge der positiven reellen Zahlen. Sie ist die Verteilung der Quadratsummen ''df'' unabhängiger standardnormalverteilter Variablen und hat daher ''df'' Freiheitsgrade. Die Chi-Quadrat-Verteilung wird vielfach in der schließenden Statistik verwendet, z. B. für die Schätzung von Varianzen und für Chi-Quadrat Tests. Sie besitzt eine spezielle Gammaverteilung mit ''c'' = ''df'' / 2 und ''b'' = 2. Daher ist die folgende Funktion abhängig von der Funktion <code>[[#Gamma-Verteilung|randomGamma]]</code>.<br />
<br />
<syntaxhighlight><br />
function randomChisq(df: integer): real;<br />
begin<br />
if df < 1 then randomChisq := NaN<br />
else<br />
randomChisq := randomGamma(0, 2, 0.5 * df);<br />
end;<br />
</syntaxhighlight><br />
<br />
== F-Verteilung oder Fisher-Verteilung ==<br />
Die F-Verteilung, die auch als Fisher-Snedecor Verteilung bezeichnet wird, ist eine kontinuierliche Wahrscheinlichkeitsverteilung. Sie wird für F-Tests und Varianzanalysne (ANOVA von englisch ''analysis of variance'') verwendet. Die F-Verteilung verfügt über zwei Freiheitsgrade, die als Parameter ''v'' und ''w'' bezeichnet werden. Diese Parameter sind positive ganze Zahlen. Die folgende Funktion '''randomF''' verwendet die Funktion <code>[[#Chi-Quadrat Verteilung|randomChisq]]</code>.<br />
<br />
<syntaxhighlight><br />
function randomF(v, w: integer): real;<br />
begin<br />
if (v < 1) or (w < 1) then<br />
randomF := NaN<br />
else<br />
randomF := randomChisq(v) / v / (randomChisq(w) / w);<br />
end;<br />
</syntaxhighlight><br />
<br />
== Siehe auch ==<br />
* [[Dev random/de|Dev random]]<br />
* [[Functions for descriptive statistics]]<br />
<br />
==Literatur==<br />
#[http://projecteuclid.org/DPubS/Repository/1.0/Disseminate?view=body&id=pdf_1&handle=euclid.aoms/1177706645 G. E. P. Box and Mervin E. Muller, ''A Note on the Generation of Random Normal Deviates'', The Annals of Mathematical Statistics (1958), Vol. 29, No. 2 pp. 610&ndash;611]<br />
#Dietrich, J. W. (2002). [http://openlibrary.org/books/OL24586469M/Der_Hypophysen-Schilddrüsen-Regelkreis Der Hypophysen-Schilddrüsen-Regelkreis]. Berlin, Germany: Logos-Verlag Berlin. ISBN 978-3-89722-850-4. OCLC 50451543.<br />
#Press, W. H., B. P. Flannery, S. A. Teukolsky, W. T. Vetterling (1989). [http://openlibrary.org/works/OL16807779W/ Numerical Recipes in Pascal]. The Art of Scientific Computing, Cambridge University Press, ISBN 0-521-37516-9.<br />
#Richard Saucier, [http://ftp.arl.mil/random/random.pdf Computer Generation of Statistical Distributions], ARL-TR-2168, US Army Research Laboratory, Aberdeen Proving Ground, MD, 21005-5068, March 2000.<br />
#R.U. Seydel, Generating Random Numbers with Specified Distributions. In: Tools for Computational Finance, Universitext, [http://dx.doi.org/10.1007/978-1-4471-2993-6_2 DOI 10.1007/978-1-4471-2993-6_2], © Springer-Verlag London Limited 2012<br />
#Christian Walck, Hand-book on STATISTICAL DISTRIBUTIONS for experimentalists, Internal Report SUF–PFY/96–01, University of Stockholm 2007<br />
<br />
<br />
{{AutoCategory}}[[Category:Unix/de]][[Category:Tutorials/de]][[Category:Mathe/de]]</div>
Olaf
https://wiki.freepascal.org/index.php?title=Category:Mathe/de&diff=87455
Category:Mathe/de
2015-03-22T06:17:55Z
<p>Olaf: Created page with "Category:Main/de"</p>
<hr />
<div>[[Category:Main/de]]</div>
Olaf
https://wiki.freepascal.org/index.php?title=Operators/de&diff=86062
Operators/de
2015-01-31T08:03:44Z
<p>Olaf: Undo revision 86061 by Olaf (talk)</p>
<hr />
<div>{{Operators}}<br />
<br><br />
Zurück zu den [[Pascal basics/de|Pascal Grundlagen]].<br><br />
<br><br />
__TOC__<br />
<br><br />
=FreePascal Operatoren=<br />
<br><br />
==Adressoperator==<br />
Der Adressoperator @ gibt die Anfangsadresse einer Variablen, einer Prozedur oder einer Funktion zurück.<br><br />
Ist der Compilerswitch {$T-}, dann ist der Rückgabewert ein untypisierter Pointer.<br><br />
Ist der Compilerswitch {$T+}, dann ist der Rückgabewert ein typisierter Pointer.<br><br />
Die Standardeinstellung für den Compiler ist {$T-}.<br><br />
<br><br />
==Zuweisungsoperator==<br />
Der Zuweisungsoperator, weist einem Datenfeld einen Wert zu.<br><br />
<syntaxhighlight><br />
a := b;<br />
</syntaxhighlight><br />
<br />
==Relationale Operatoren==<br />
Folgende Operationen sind möglich:<br />
# Ganzzahlige- und Fliesskommadatenfelder können auf beiden Seiten des Operators gemischt verwendet werden.<br />
# Short-, Ansi- und Widestringdatenfelder können auf beiden Seiten des Operators gemischt verwendet werden.<br />
<table><br />
<tr><br />
<td>=</td><br />
<td>gleich</td><br />
</tr><br />
<tr><br />
<td><></td><br />
<td>ungleich</td><br />
</tr><br />
<tr><br />
<td><</td><br />
<td>kleiner als</td><br />
</tr><br />
<tr><br />
<td>></td><br />
<td>grösser als</td><br />
</tr><br />
<tr><br />
<td><=</td><br />
<td>kleiner gleich</td><br />
</tr><br />
<tr><br />
<td><=</td><br />
<td>grösser gleich</td><br />
</tr><br />
<tr><br />
<td>in</td><br />
<td>Prüft, ob das Element in einem Set des gleichen Datentyps vorkommt.</td><br />
</tr><br />
</table><br />
<br><br />
<br />
==Binäre arithmetische Operatoren==<br />
<table><br />
<tr><br />
<td>+</td><br />
<td>Addition</td><br />
</tr><br />
<tr><br />
<td>-</td><br />
<td>Subtraktion</td><br />
</tr><br />
<tr><br />
<td>*</td><br />
<td>Multiplikation</td><br />
</tr><br />
<tr><br />
<td>/</td><br />
<td>Division</td><br />
</tr><br />
<tr><br />
<td>div</td><br />
<td>Ganzzahldivision (Berechnet den ganzzahligen Wert davon, wie oft eine Ganzzahl in einer anderen Ganzzahl vorhanden ist.)</td><br />
</tr><br />
<tr><br />
<td>mod</td><br />
<td>Modulodivision (Berechnet den ganzzahligen Rest einer Division zweier Ganzzahlen.)</td><br />
</tr><br />
</table><br />
<br><br />
<br />
==Unäre arithmetische Operatoren==<br />
+ legt als Vorzeichen fest, dass der Wert positiv ist<br><br />
- legt als Vorzeichen fest, dass der Wert negativ ist<br><br />
Beispiele:<br />
<syntaxhighlight><br />
a := +7;<br />
b := -3;<br />
</syntaxhighlight><br />
<br><br />
==Logische Operatoren==<br />
<table><br />
<tr><br />
<td>not</td><br />
<td>Bitweise unäre Negation</td><br />
</tr><br />
<tr><br />
<td>and</td><br />
<td>Bitweises und</td><br />
</tr><br />
<tr><br />
<td>or</td><br />
<td>Bitweises oder</td><br />
</tr><br />
<tr><br />
<td>xor</td><br />
<td>Bitweises exclusives oder</td><br />
</tr><br />
<tr><br />
<td>shl</td><br />
<td>Bitweises Shift (verschieben) nach links</td><br />
</tr><br />
<tr><br />
<td>shr</td><br />
<td>Bitweises Shift (verschieben) nach rechts</td><br />
</tr><br />
<tr><br />
<td><<</td><br />
<td>Bitweises Shift (verschieben) nach links (Entspricht dem Operator shl)</td><br />
</tr><br />
<tr><br />
<td>>></td><br />
<td>Bitweises Shift (verschieben) nach rechts (Entspricht dem Operator shr)</td><br />
</tr><br />
</table><br />
<br><br />
Beispiele:<br />
<syntaxhighlight><br />
A shr 1 // Entspricht Ganzzahl DIV 2 (nur dass es schneller geht)<br />
// (nur für ganzzahlige Datenfelder, das Ergebnis ist ganzzahlig abgerundet)<br />
Not 1 // Entspricht -2<br />
Not 0 // Entspricht -1<br />
Not -1 // Entspricht 0<br />
B shl 2 // Entspricht Ganzzahl * 4 (nur dass es schneller geht)<br />
// (nur für ganzzahlige Datenfelder, das Ergebnis ist ganzzahlig)<br />
1 or 2 // Entspricht 3<br />
3 xor 1 // Entspricht 2<br />
</syntaxhighlight><br />
<br><br />
<br />
==Wahrheitsoperatoren==<br />
<table><br />
<tr><br />
<td>not</td><br />
<td>logische Negation (unary)</td><br />
</tr><br />
<tr><br />
<td>and</td><br />
<td>logisches und</td><br />
</tr><br />
<tr><br />
<td>or</td><br />
<td>logisches oder</td><br />
</tr><br />
<tr><br />
<td>xor</td><br />
<td>logisches xor</td><br />
</tr><br />
</table><br />
<br><br />
<br />
==String-Operatoren==<br />
+ Stringaddition (fügt zwei Strings zusammen)<br><br />
<br><br />
==Set Operatoren==<br />
<table><br />
<tr><br />
<td>+</td><br />
<td>Vereinigungsmenge</td><br />
</tr><br />
<tr><br />
<td>-</td><br />
<td>Differenzmenge</td><br />
</tr><br />
<tr><br />
<td>*</td><br />
<td>Schnittmenge</td><br />
</tr><br />
<tr><br />
<td>><</td><br />
<td>Symmetrische Differenz</td><br />
</tr><br />
<tr><br />
<td><=</td><br />
<td>Enthält</td><br />
</tr><br />
<tr><br />
<td>include</td><br />
<td>Ein Element zum Set hinzufügen</td><br />
</tr><br />
<tr><br />
<td>exclude</td><br />
<td>Ein Element im Set löschen</td><br />
</tr><br />
<tr><br />
<td>in</td><br />
<td>Sieht nach, ob sich ein Element im Set befindet</td><br />
</tr><br />
</table><br />
<br><br />
<br />
==Klassenoperatoren==<br />
<table><br />
<tr><br />
<td>is</td><br />
<td>prüft, ob das Objekt von einer bestimmte Klasse ist</td><br />
</tr><br />
<tr><br />
<td>as</td><br />
<td>führt eine bedingte Typumwandlung (bedingtes Typecasting) durch</td><br />
</table><br />
<br><br />
==Zeiger-Operatoren==<br />
<table><br />
<tr><br />
<td>Operator</td><br />
<td>Operation</td><br />
<td>Operandtyp</td><br />
<td>Ergebnistyp</td><br />
<td>Beispiel</td><br />
</tr><br />
<tr><br />
<td>+</td><br />
<td>Zeigeraddition</td><br />
<td>Zeichenzeiger, Integer</td><br />
<td>Zeichenzeiger</td><br />
<td>P + I</td><br />
</tr><br />
<tr><br />
<td>-</td><br />
<td>Zeigersubtraktion</td><br />
<td>Zeichenzeiger, Integer</td><br />
<td>Zeichenzeiger</td><br />
<td>P - Q</td><br />
</tr><br />
<tr><br />
<td>^</td><br />
<td>Zeiger-Dereferenzierung</td><br />
<td>Zeiger</td><br />
<td>Basistyp von Zeiger</td><br />
<td>P^</td><br />
</tr><br />
<tr><br />
<td>=</td><br />
<td>Gleich</td><br />
<td>Zeiger</td><br />
<td>Boolean</td><br />
<td>P = Q</td><br />
</tr><br />
<tr><br />
<td><></td><br />
<td>Ungleich</td><br />
<td>Zeiger</td><br />
<td>Boolean</td><br />
<td>P <> Q</td><br />
</tr><br />
</table><br />
<br />
=Die Priorität der Operatoren=<br />
Für die Abarbeitung der Operatoren gibt es eine starre Reihenfolge.<br><br />
<table><br />
<tr><br />
<td>Operator</td><br />
<td>Priorität</td><br />
<td>Kategorie</td><br />
</tr><br />
<tr><br />
<td>Not, @</td><br />
<td>erste (höchste)</td><br />
<td>Unäre Operatoren</td><br />
</tr><br />
<tr><br />
<td>* / div mod and shl shr as << >></td><br />
<td>zweite</td><br />
<td>Multiplizierende Operatoren</td><br />
</tr><br />
<tr><br />
<td>+ - or xor</td><br />
<td>dritte</td><br />
<td>Addierende Operatoren</td><br />
</tr><br />
<tr><br />
<td>< <> < > <= >= in is</td><br />
<td>vierte (niedrigste)</td><br />
<td>Relationale Operatoren</td><br />
</tr><br />
</table><br />
<br><br />
<br><br />
--[[User:Olaf|Olaf]] 08:30, 4 November 2012 (UTC)<br />
[[Category:FreePascal/de]]{{AutoCategory}}</div>
Olaf
https://wiki.freepascal.org/index.php?title=Operators/de&diff=86061
Operators/de
2015-01-31T07:57:27Z
<p>Olaf: /* Die Priorität der Operatoren */</p>
<hr />
<div>{{Operators}}<br />
<br><br />
Zurück zu den [[Pascal basics/de|Pascal Grundlagen]].<br><br />
<br><br />
__TOC__<br />
<br><br />
=FreePascal Operatoren=<br />
<br><br />
==Adressoperator==<br />
Der Adressoperator @ gibt die Anfangsadresse einer Variablen, einer Prozedur oder einer Funktion zurück.<br><br />
Ist der Compilerswitch {$T-}, dann ist der Rückgabewert ein untypisierter Pointer.<br><br />
Ist der Compilerswitch {$T+}, dann ist der Rückgabewert ein typisierter Pointer.<br><br />
Die Standardeinstellung für den Compiler ist {$T-}.<br><br />
<br><br />
==Zuweisungsoperator==<br />
Der Zuweisungsoperator, weist einem Datenfeld einen Wert zu.<br><br />
<syntaxhighlight><br />
a := b;<br />
</syntaxhighlight><br />
<br />
==Relationale Operatoren==<br />
Folgende Operationen sind möglich:<br />
# Ganzzahlige- und Fliesskommadatenfelder können auf beiden Seiten des Operators gemischt verwendet werden.<br />
# Short-, Ansi- und Widestringdatenfelder können auf beiden Seiten des Operators gemischt verwendet werden.<br />
<table><br />
<tr><br />
<td>=</td><br />
<td>gleich</td><br />
</tr><br />
<tr><br />
<td><></td><br />
<td>ungleich</td><br />
</tr><br />
<tr><br />
<td><</td><br />
<td>kleiner als</td><br />
</tr><br />
<tr><br />
<td>></td><br />
<td>grösser als</td><br />
</tr><br />
<tr><br />
<td><=</td><br />
<td>kleiner gleich</td><br />
</tr><br />
<tr><br />
<td><=</td><br />
<td>grösser gleich</td><br />
</tr><br />
<tr><br />
<td>in</td><br />
<td>Prüft, ob das Element in einem Set des gleichen Datentyps vorkommt.</td><br />
</tr><br />
</table><br />
<br><br />
<br />
==Binäre arithmetische Operatoren==<br />
<table><br />
<tr><br />
<td>+</td><br />
<td>Addition</td><br />
</tr><br />
<tr><br />
<td>-</td><br />
<td>Subtraktion</td><br />
</tr><br />
<tr><br />
<td>*</td><br />
<td>Multiplikation</td><br />
</tr><br />
<tr><br />
<td>/</td><br />
<td>Division</td><br />
</tr><br />
<tr><br />
<td>div</td><br />
<td>Ganzzahldivision (Berechnet den ganzzahligen Wert davon, wie oft eine Ganzzahl in einer anderen Ganzzahl vorhanden ist.)</td><br />
</tr><br />
<tr><br />
<td>mod</td><br />
<td>Modulodivision (Berechnet den ganzzahligen Rest einer Division zweier Ganzzahlen.)</td><br />
</tr><br />
</table><br />
<br><br />
<br />
==Unäre arithmetische Operatoren==<br />
+ legt als Vorzeichen fest, dass der Wert positiv ist<br><br />
- legt als Vorzeichen fest, dass der Wert negativ ist<br><br />
Beispiele:<br />
<syntaxhighlight><br />
a := +7;<br />
b := -3;<br />
</syntaxhighlight><br />
<br><br />
==Logische Operatoren==<br />
<table><br />
<tr><br />
<td>not</td><br />
<td>Bitweise unäre Negation</td><br />
</tr><br />
<tr><br />
<td>and</td><br />
<td>Bitweises und</td><br />
</tr><br />
<tr><br />
<td>or</td><br />
<td>Bitweises oder</td><br />
</tr><br />
<tr><br />
<td>xor</td><br />
<td>Bitweises exclusives oder</td><br />
</tr><br />
<tr><br />
<td>shl</td><br />
<td>Bitweises Shift (verschieben) nach links</td><br />
</tr><br />
<tr><br />
<td>shr</td><br />
<td>Bitweises Shift (verschieben) nach rechts</td><br />
</tr><br />
<tr><br />
<td><<</td><br />
<td>Bitweises Shift (verschieben) nach links (Entspricht dem Operator shl)</td><br />
</tr><br />
<tr><br />
<td>>></td><br />
<td>Bitweises Shift (verschieben) nach rechts (Entspricht dem Operator shr)</td><br />
</tr><br />
</table><br />
<br><br />
Beispiele:<br />
<syntaxhighlight><br />
A shr 1 // Entspricht Ganzzahl DIV 2 (nur dass es schneller geht)<br />
// (nur für ganzzahlige Datenfelder, das Ergebnis ist ganzzahlig abgerundet)<br />
Not 1 // Entspricht -2<br />
Not 0 // Entspricht -1<br />
Not -1 // Entspricht 0<br />
B shl 2 // Entspricht Ganzzahl * 4 (nur dass es schneller geht)<br />
// (nur für ganzzahlige Datenfelder, das Ergebnis ist ganzzahlig)<br />
1 or 2 // Entspricht 3<br />
3 xor 1 // Entspricht 2<br />
</syntaxhighlight><br />
<br><br />
<br />
==Wahrheitsoperatoren==<br />
<table><br />
<tr><br />
<td>not</td><br />
<td>logische Negation (unary)</td><br />
</tr><br />
<tr><br />
<td>and</td><br />
<td>logisches und</td><br />
</tr><br />
<tr><br />
<td>or</td><br />
<td>logisches oder</td><br />
</tr><br />
<tr><br />
<td>xor</td><br />
<td>logisches xor</td><br />
</tr><br />
</table><br />
<br><br />
<br />
==String-Operatoren==<br />
+ Stringaddition (fügt zwei Strings zusammen)<br><br />
<br><br />
==Set Operatoren==<br />
<table><br />
<tr><br />
<td>+</td><br />
<td>Vereinigungsmenge</td><br />
</tr><br />
<tr><br />
<td>-</td><br />
<td>Differenzmenge</td><br />
</tr><br />
<tr><br />
<td>*</td><br />
<td>Schnittmenge</td><br />
</tr><br />
<tr><br />
<td>><</td><br />
<td>Symmetrische Differenz</td><br />
</tr><br />
<tr><br />
<td><=</td><br />
<td>Enthält</td><br />
</tr><br />
<tr><br />
<td>include</td><br />
<td>Ein Element zum Set hinzufügen</td><br />
</tr><br />
<tr><br />
<td>exclude</td><br />
<td>Ein Element im Set löschen</td><br />
</tr><br />
<tr><br />
<td>in</td><br />
<td>Sieht nach, ob sich ein Element im Set befindet</td><br />
</tr><br />
</table><br />
<br><br />
<br />
==Klassenoperatoren==<br />
<table><br />
<tr><br />
<td>is</td><br />
<td>prüft, ob das Objekt von einer bestimmte Klasse ist</td><br />
</tr><br />
<tr><br />
<td>as</td><br />
<td>führt eine bedingte Typumwandlung (bedingtes Typecasting) durch</td><br />
</table><br />
<br><br />
==Zeiger-Operatoren==<br />
<table><br />
<tr><br />
<td>Operator</td><br />
<td>Operation</td><br />
<td>Operandtyp</td><br />
<td>Ergebnistyp</td><br />
<td>Beispiel</td><br />
</tr><br />
<tr><br />
<td>+</td><br />
<td>Zeigeraddition</td><br />
<td>Zeichenzeiger, Integer</td><br />
<td>Zeichenzeiger</td><br />
<td>P + I</td><br />
</tr><br />
<tr><br />
<td>-</td><br />
<td>Zeigersubtraktion</td><br />
<td>Zeichenzeiger, Integer</td><br />
<td>Zeichenzeiger</td><br />
<td>P - Q</td><br />
</tr><br />
<tr><br />
<td>^</td><br />
<td>Zeiger-Dereferenzierung</td><br />
<td>Zeiger</td><br />
<td>Basistyp von Zeiger</td><br />
<td>P^</td><br />
</tr><br />
<tr><br />
<td>=</td><br />
<td>Gleich</td><br />
<td>Zeiger</td><br />
<td>Boolean</td><br />
<td>P = Q</td><br />
</tr><br />
<tr><br />
<td><></td><br />
<td>Ungleich</td><br />
<td>Zeiger</td><br />
<td>Boolean</td><br />
<td>P <> Q</td><br />
</tr><br />
</table><br />
<br />
=Die Priorität der Operatoren=<br />
Für die Abarbeitung der Operatoren gibt es eine starre Reihenfolge.<br><br />
<table><br />
<tr><br />
<td>Operator</td><br />
<td>Priorität</td><br />
<td>Kategorie</td><br />
</tr><br />
<tr><br />
<td>Not, @</td><br />
<td>erste (höchste)</td><br />
<td>Unäre Operatoren</td><br />
</tr><br />
<tr><br />
<td>* / div mod and shl shr as</td><br />
<td>zweite</td><br />
<td>Multiplizierende Operatoren</td><br />
</tr><br />
<tr><br />
<td>+ - or xor</td><br />
<td>dritte</td><br />
<td>Addierende Operatoren</td><br />
</tr><br />
<tr><br />
<td>< <> < > <= >= in is</td><br />
<td>vierte (niedrigste)</td><br />
<td>Relationale Operatoren</td><br />
</tr><br />
</table><br />
<br><br />
<br><br />
--[[User:Olaf|Olaf]] 08:30, 4 November 2012 (UTC)<br />
[[Category:FreePascal/de]]{{AutoCategory}}</div>
Olaf
https://wiki.freepascal.org/index.php?title=trivial/de&diff=85972
trivial/de
2015-01-25T07:48:26Z
<p>Olaf: </p>
<hr />
<div>{{trivial}}<br />
<br><br />
Zurück zur [[Console/de|Konsolenseite]].<br><br />
<br><br />
Dieses Spiel Trivial ist ein einfaches Spiel für die Konsole (Windows), das Terminal (Linux) oder auch für die Kommandozeile (DOS).<br><br />
Das Spiel soll die Möglichkeiten von Free Pascal demonstrieren.<br><br />
<br><br />
Dieses Spiel hat keine Hilfe.<br><br />
Das Programm wird durch das drücken einer der Tasten <ESC>, <Q> oder <E> beendet.<br><br />
<br><br />
Das Hauptprogramm trivial ruft die einzelnen Unterprogramme auf:<br><br />
<syntaxhighlight><br />
program trivial;<br />
<br />
{$mode objfpc}{$H+}<br />
{$IMPLICITEXCEPTIONS OFF}<br />
<br />
uses<br />
uDateiEinLesen,<br />
uSpielLogik,<br />
uAusgabe,<br />
Crt;<br />
<br />
{$R *.res}<br />
<br />
<br />
begin<br />
<br />
// Liest die Datei mit den Fragen ein<br />
subDateiEinlesen;<br />
repeat<br />
<br />
subFragenReihenfolge;<br />
subAusgabe;<br />
subEingabe;<br />
// Zwei Sekunden Pause<br />
Delay(2000);<br />
until 0 > 1;<br />
<br />
end.<br />
</syntaxhighlight><br />
<br><br />
<br><br />
Die Unit subDateiEinlesen.pas liest die Textdatei mit den Fragen ein.<br><br />
Die Datei mit den Fragen hat folgendes Format:<br><br />
* Die Datei mit den Fragen ist eine csv-Datei ohne Kopfzeile und ohne Größenbegrenzung.<br />
* Das Trennzeichen zwischen der Frage und den möglichen Antworten ist das Semikolon.<br />
* Die erste Antwort, die nach der Fage kommt ist die richtige Antwort.<br />
<syntaxhighlight><br />
unit uDateiEinLesen;<br />
<br />
{$mode objfpc}{$H+}<br />
{$IMPLICITEXCEPTIONS OFF}<br />
<br />
interface<br />
<br />
uses<br />
SysUtils, uSpielLogik;<br />
<br />
var<br />
intSemikolonZaehler: integer = 0;<br />
<br />
procedure subDateiEinlesen;<br />
<br />
implementation<br />
<br />
procedure subArrayZuWeisen(strDateiInhalt: string);<br />
var<br />
intI: integer = 0;<br />
//intSemikolonZaehler: integer = 0;<br />
intarrLaenge: integer = 0;<br />
<br />
begin<br />
<br />
// prüft, ob ein leerer String übergeben wurde<br />
if strDateiInhalt = '' then<br />
Exit;<br />
<br />
// setzt den Semikolonzähler wieder auf 0<br />
intSemikolonZaehler := 0;<br />
<br />
// Legt die neue Grösse des Arrays fest<br />
intarrLaenge := length(arrTrivial);<br />
SetLength(arrTrivial, intarrLaenge + 1);<br />
<br />
for intI := 0 to length(strDateiInhalt) do<br />
begin<br />
<br />
if strDateiInhalt[intI] = ';' then<br />
intSemikolonZaehler := intSemikolonZaehler + 1<br />
else<br />
begin<br />
<br />
case intSemikolonZaehler of<br />
0:<br />
arrTrivial[intarrLaenge].strFrage :=<br />
arrTrivial[intarrLaenge].strFrage + strDateiInhalt[intI];<br />
1:<br />
arrTrivial[intarrLaenge].strAntwort1 :=<br />
arrTrivial[intarrLaenge].strAntwort1 + strDateiInhalt[intI];<br />
2:<br />
arrTrivial[intarrLaenge].strAntwort2 :=<br />
arrTrivial[intarrLaenge].strAntwort2 + strDateiInhalt[intI];<br />
3:<br />
arrTrivial[intarrLaenge].strAntwort3 :=<br />
arrTrivial[intarrLaenge].strAntwort3 + strDateiInhalt[intI];<br />
end;<br />
<br />
end;<br />
<br />
end;<br />
<br />
end;<br />
<br />
<br />
procedure subDateiEinlesen;<br />
var<br />
datDatei: TextFile;<br />
strDateiInhalt: string;<br />
<br />
begin<br />
<br />
// öffnet die Datei<br />
AssignFile(datDatei, 'Trivial.txt');<br />
// setzt den Dateizeiger auf den Anfang der Datei<br />
Reset(datDatei);<br />
<br />
// liest die Datei bis zu ihrem Ende ein<br />
while not EOF(datDatei) do<br />
begin<br />
ReadLn(datDatei, strDateiInhalt);<br />
if strDateiInhalt <> '' then<br />
subArrayZuWeisen(strDateiInhalt);<br />
end;<br />
<br />
//Schliesst die Datei<br />
CloseFile(datDatei);<br />
<br />
end;<br />
<br />
end.<br />
</syntaxhighlight><br />
<br><br />
<br><br />
Die Unit uSpiellogik.pas enthält die Spielsteuerung.<br><br />
Hier befindet sich auch die Anweisung für den Programmabbruch.<br><br />
Die Tasten <ESC>, <Q> oder <E> beenden das Programm.<br><br />
<syntaxhighlight><br />
unit uSpielLogik;<br />
<br />
{$mode objfpc}{$H+}<br />
{$IMPLICITEXCEPTIONS OFF}<br />
<br />
interface<br />
<br />
uses<br />
SysUtils, crt;<br />
<br />
type<br />
TTrivial = record<br />
strFrage: string;<br />
strAntwort1: string;<br />
strAntwort2: string;<br />
strAntwort3: string;<br />
end;<br />
<br />
<br />
type<br />
TAntwort = record<br />
strAntwort1: string;<br />
strAntwort2: string;<br />
strAntwort3: string;<br />
end;<br />
<br />
<br />
var<br />
arrTrivial: array of TTrivial;<br />
typeAntwort: TAntwort;<br />
<br />
const<br />
// Die Konstanten sind typisierte Konstanten<br />
conintZufallszahlAntwort: integer = 0;<br />
conintZufallszahlArray: integer = 0;<br />
<br />
<br />
procedure subFragenReihenfolge;<br />
procedure subEingabe;<br />
<br />
implementation<br />
<br />
uses<br />
uAusgabe;<br />
<br />
procedure subZufallszahlArray;<br />
begin<br />
randomize;<br />
conintZufallszahlArray := random(length(arrTrivial));<br />
end;<br />
<br />
<br />
procedure subZufallszahlAntwort;<br />
begin<br />
randomize;<br />
<br />
// Da die Verteilung der Zufallszahlen bei random(2) + 1 zu ungenau ist,<br />
// wurde dieser Lösungsansatz gewählt:<br />
conintZufallszahlAntwort := random(29) + 1;<br />
<br />
if (conintZufallszahlAntwort mod 3) = 0 then<br />
conintZufallszahlAntwort := 3<br />
else if (conintZufallszahlAntwort mod 2) = 0 then<br />
conintZufallszahlAntwort := 2<br />
else<br />
conintZufallszahlAntwort := 1;<br />
<br />
// Alternativ zu obigen Weg geht auch dieser Weg:<br />
{case conintZufallszahlAntwort of<br />
3, 6, 9, 12, 15, 18, 21, 24, 27, 30:<br />
conintZufallszahlAntwort := 3;<br />
2, 4, 8, 10, 14, 16, 20, 22, 26, 28:<br />
conintZufallszahlAntwort := 2;<br />
else<br />
conintZufallszahlAntwort := 1;<br />
end;}<br />
<br />
end;<br />
<br />
<br />
procedure subFragenReihenfolge;<br />
begin<br />
// Wählt die Frage aus<br />
subZufallszahlArray;<br />
// Wählt aus, an welcher Stelle<br />
// die richtige Antwort erscheinen soll<br />
subZufallszahlAntwort;<br />
<br />
case conintZufallszahlAntwort of<br />
1:<br />
begin<br />
typeAntwort.strAntwort1 := arrTrivial[conintZufallszahlArray].strAntwort1;<br />
typeAntwort.strAntwort2 := arrTrivial[conintZufallszahlArray].strAntwort2;<br />
typeAntwort.strAntwort3 := arrTrivial[conintZufallszahlArray].strAntwort3;<br />
end;<br />
2:<br />
begin<br />
typeAntwort.strAntwort1 := arrTrivial[conintZufallszahlArray].strAntwort2;<br />
typeAntwort.strAntwort2 := arrTrivial[conintZufallszahlArray].strAntwort3;<br />
typeAntwort.strAntwort3 := arrTrivial[conintZufallszahlArray].strAntwort1;<br />
end;<br />
3:<br />
begin<br />
typeAntwort.strAntwort1 := arrTrivial[conintZufallszahlArray].strAntwort3;<br />
typeAntwort.strAntwort2 := arrTrivial[conintZufallszahlArray].strAntwort1;<br />
typeAntwort.strAntwort3 := arrTrivial[conintZufallszahlArray].strAntwort2;<br />
end;<br />
else<br />
begin<br />
typeAntwort.strAntwort1 := ' Fehler ' + IntToStr(conintZufallszahlAntwort);<br />
typeAntwort.strAntwort2 := ' Fehler ' + IntToStr(conintZufallszahlAntwort);<br />
typeAntwort.strAntwort3 := ' Fehler ' + IntToStr(conintZufallszahlAntwort);<br />
end;<br />
end;<br />
end;<br />
<br />
<br />
procedure subEingabe;<br />
var<br />
chrEingabe: char = ' ';<br />
<br />
begin<br />
<br />
// Wandelt Tastatureingabe in Kleinbuchstaben um<br />
chrEingabe := LowerCase(Readkey);<br />
<br />
// Überschreibt den Inhalt der Statuszeile und<br />
// setzt die Farbe für die Schrift wieder auf Hellgrau<br />
subStatuszeile(' ',<br />
LightGray);<br />
<br />
case chrEingabe of<br />
#27, 'q', 'e':<br />
begin<br />
// Gibt an der Statuszeile das Programmende aus und<br />
// setzt die Farbe für die Schrift auf Hellgrau<br />
subStatuszeile('Das Programm Trivial wurde beendet.', LightGray);<br />
halt;<br />
end;<br />
<br />
'a':<br />
begin<br />
begin<br />
if typeAntwort.strAntwort1 =<br />
arrTrivial[conintZufallszahlArray].strAntwort1 then<br />
subStatuszeile('Richtig', LightGreen)<br />
else<br />
subStatuszeile('Falsch', LightRed);<br />
end;<br />
end;<br />
<br />
'b':<br />
begin<br />
begin<br />
if typeAntwort.strAntwort2 =<br />
arrTrivial[conintZufallszahlArray].strAntwort1 then<br />
subStatuszeile('Richtig', LightGreen)<br />
else<br />
subStatuszeile('Falsch', LightRed);<br />
end;<br />
end;<br />
<br />
'c':<br />
begin<br />
if typeAntwort.strAntwort3 =<br />
arrTrivial[conintZufallszahlArray].strAntwort1 then<br />
subStatuszeile('Richtig', LightGreen)<br />
else<br />
subStatuszeile('Falsch', LightRed);<br />
end;<br />
end;<br />
<br />
end;<br />
<br />
end.<br />
</syntaxhighlight><br />
<br><br />
<br><br />
Die Unit uAusgabe.pas ist für die Anzeige des Spiels an der Konsole zuständig.<br><br />
<syntaxhighlight><br />
unit uAusgabe;<br />
<br />
{$mode objfpc}{$H+}<br />
{$IMPLICITEXCEPTIONS OFF}<br />
<br />
interface<br />
<br />
uses<br />
SysUtils, crt, uSpielLogik;<br />
<br />
const<br />
constrCopyright = '(c) 2015 by Olaf';<br />
constrVersion = 'Version: 0.4.0';<br />
conintStatuszeile = 14;<br />
<br />
procedure subAusgabe;<br />
procedure subStatuszeile(strUebergabe: string; intFarbe: integer);<br />
<br />
<br />
implementation<br />
<br />
<br />
function funTextZentrieren(strText: string): integer;<br />
begin<br />
Result := Trunc((80 - length(strText)) / 2);<br />
end;<br />
<br />
<br />
procedure subTitel;<br />
begin<br />
ClrScr;<br />
GOTOXY(funTextZentrieren('TRIVIAL'), 1);<br />
Write('TRIVIAL');<br />
GOTOXY(funTextZentrieren(constrVersion), 2);<br />
Write(constrVersion);<br />
GOTOXY(funTextZentrieren(constrCopyright), 3);<br />
Write(constrCopyright);<br />
end;<br />
<br />
<br />
procedure subKoerper;<br />
begin<br />
GOTOXY(1, 6);<br />
Write(arrTrivial[conintZufallszahlArray].strFrage);<br />
GOTOXY(1, 8);<br />
Write('a) ' + typeAntwort.strAntwort1);<br />
GOTOXY(1, 9);<br />
Write('b) ' + typeAntwort.strAntwort2);<br />
GOTOXY(1, 10);<br />
Write('c) ' + typeAntwort.strAntwort3);<br />
GOTOXY(1, 12);<br />
end;<br />
<br />
<br />
procedure subStatuszeile(strUebergabe: string; intFarbe: integer);<br />
begin<br />
TextColor(intFarbe);<br />
GOTOXY(1,conintStatuszeile);<br />
Write(strUebergabe);<br />
TextColor(LightGray);<br />
GOTOXY(1,conintStatuszeile + 2);<br />
end;<br />
<br />
<br />
procedure subInfo();<br />
begin<br />
GOTOXY(1,conintStatuszeile + 1);<br />
WriteLn('Die Tasten <ESC>, <q> oder <e> beenden das Programm.');<br />
end;<br />
<br />
procedure subAusgabe;<br />
begin<br />
subTitel;<br />
subKoerper;<br />
subInfo;<br />
end;<br />
<br />
end.<br />
</syntaxhighlight><br />
<br><br />
<br><br />
Beispiel für die Datei (Trivial.txt) die die Fragen und die Antworten enthält:<br><br />
Was ist der Pumukl?;ein Kobold;ein Klabautermann;ein Schreinermeister<br />
Was ist ein Gugelhupf?;ein Kuchen;eine Froschart;ein Schnaps<br />
Was sind Tapas?;kleine Appetithappen;Tiere;Gebäude<br />
Was sind Tapire?;Tiere;kleine Appetithappen;Wanddekorationen<br />
Was sind Tapeten?;Wanddekorationen;ein Kuchen;kleine Tiere<br />
Was ist ein Wolpertinger?;ein bayerisches Fabelwesen;eine seltene Tierart;ein Einwohner des Ortes Wolpert<br />
Was ist ein Tatzelwurm?;ein alpenländisches Fabeltier ählich einem Drachen;ein seltene Wurmart;eine Katze<br />
Was ist ein Lindwurm?;ein Fabeltier ähnlich einer Schlange;eine seltene Wurmart;eine Schlange<br />
Was ist Frau Holle?;eine Märchen- oder Sagengestalt;ein Hausmädchen;eine Putzfrau<br />
Was ist ein Wal?;ein Säugetier;ein Fisch;eine Amphibie<br />
Was ist ein Pinguin?;ein Vogel;ein Fisch;ein Säugetier<br />
Wer nascht mehr Süsses?;Frauen;Männer;beide naschen gleich viel<br />
Was ist eine Schnecke?;ein Weichtier;ein Primat;eine Pilzart<br />
Wann sind die Rauhnächte?;meist zwischen dem 24.12. und dem 06.01.;zu Ostern;zwischen dem 06.7. und dem 01.08.<br />
Was ist Freibier?;ein Bier das man selbst nicht zahlen mus;obergärig;untergärig<br />
Was ist ein Obazter?;ein angemachter Käse;ein Raufbold;ein Kuchen<br />
<br><br />
<br><br />
--[[User:Olaf|Olaf]] 08:39, 25 January 2015 (CET)<br />
{{AutoCategory}}[[Category:Console/de]][[Category:Example programs/de]]</div>
Olaf
https://wiki.freepascal.org/index.php?title=Template:trivial&diff=85971
Template:trivial
2015-01-25T07:42:13Z
<p>Olaf: Created page with "<small> '''{{#language:de}} (de)''' </small>"</p>
<hr />
<div><small> <br />
[[trivial/de|'''{{#language:de}} (de)''']]<br />
</small></div>
Olaf
https://wiki.freepascal.org/index.php?title=Console/de&diff=85970
Console/de
2015-01-25T07:40:51Z
<p>Olaf: /* Beispiele für Linux und Windows in der Konsole oder im Terminal */</p>
<hr />
<div>{{Console}}<br />
<br><br />
Zurück zur [[Main Page/de#Free Pascal und Lazarus Dokumentation für Programmierer|Hauptseite]].<br><br />
<br><br />
__TOC__<br />
<br><br />
=Beispiele für Linux und Windows in der Konsole oder im Terminal=<br />
* [[Console Mode Pascal/de|Kleine Einführung in die Konsolen- bzw. Terminalprogrammierung]]<br />
* [[write to the console/de|Zeigt, wie man mit dem eigenen Programm Text auf der Konsole bzw. dem Terminal ausgibt.]]<br />
* [[read from the console/de|Zeigt, wie man mit dem eigenen Programm Tastatureingaben an Konsole und Terminal einliest]]<br />
* [[Position the cursor in the console/de|Zeigt, wie man in der Konsole bzw. dem Terminal einen Cursor positionieren kann]]<br />
* [[colored console/de|Der Einsatz von Farbe in Konsole und Terminal]]<br />
* [[Console parameters/de|Die Auswertung von an der Konsole oder dem Terminal übergebenen Parametern]]<br />
* [[VierGewinnt/de|Das Spiel Viergewinnt für Konsole und Terminal zeigt einige Möglichkeiten von Free Pascal]]<br />
* [[Sprüche/de|Das Spiel Sprüche für Konsole und Terminal zeigt einige Möglichkeiten von Free Pascal]]<br />
* [[trivial/de|Das Spiel Trivial für Konsole und Terminal zeigt einige Möglichkeiten von Free Pascal]]<br />
* [[eType/de|Ein kleines Beispielprogramm zur Dateianzeige unter Linux/Windows]]<br />
<br><br />
Beispiele für den Einsatz von Pascal-Skript unter Linux und Windows in der Konsole oder im Terminal<br><br />
* [[InstantFPC/de|Der Einsatz von Pascal-Skript in Konsole und Terminal]]<br />
<br><br />
Beispiele für Linux und Windows an Konsole und Terminal<br><br />
* [[Command Line Calculator/de|Ein einfacher Taschenrechner für Konsole und Terminal.]]<br />
<br><br />
Beispiele nur für Windows an der Konsole<br><br />
* [[convert charset for console/de|Wandelt den Inhalt eines Ansi-Strings in den OEM-Zeichensatz der Konsole um.]]<br />
<br><br />
<br><br />
--[[User:Olaf|Olaf]] 17:57, 21 March 2014 (CET)<br />
[[Category:Console/de]]{{AutoCategory}}</div>
Olaf
https://wiki.freepascal.org/index.php?title=trivial/de&diff=85969
trivial/de
2015-01-25T07:39:48Z
<p>Olaf: </p>
<hr />
<div>{{trivial}}<br />
<br><br />
Zurück zur [[Console/de|Konsolenseite]].<br><br />
<br><br />
Dieses Spiel Trivial ist ein einfaches Spiel für die Konsole (Windows), das Terminal (Linux) oder auch für die Kommandozeile (DOS).<br><br />
Das Spiel soll die Möglichkeiten von Free Pascal demonstrieren.<br><br />
<br><br />
Dieses Spiel hat keine Hilfe.<br><br />
Das Programm wird durch das drücken einer der Tasten <ESC>, <Q> oder <E> beendet.<br><br />
<br><br />
Das Hauptprogramm trivial ruft die einzelnen Unterprogramme auf:<br><br />
<syntaxhighlight><br />
program trivial;<br />
<br />
{$mode objfpc}{$H+}<br />
{$IMPLICITEXCEPTIONS OFF}<br />
<br />
uses<br />
uDateiEinLesen,<br />
uSpielLogik,<br />
uAusgabe,<br />
Crt;<br />
<br />
{$R *.res}<br />
<br />
<br />
begin<br />
<br />
// Liest die Datei mit den Fragen ein<br />
subDateiEinlesen;<br />
repeat<br />
<br />
subFragenReihenfolge;<br />
subAusgabe;<br />
subEingabe;<br />
// Zwei Sekunden Pause<br />
Delay(2000);<br />
until 0 > 1;<br />
<br />
end.<br />
</syntaxhighlight><br />
<br><br />
<br><br />
Die Unit subDateiEinlesen.pas liest die Textdatei mit den Fragen ein.<br><br />
Die Datei mit den Fragen hat folgendes Format:<br><br />
* Die Datei mit den Fragen ist eine csv-Datei ohne Kopfzeile und ohne Größenbegrenzung.<br />
* Das Trennzeichen zwischen der Frage und den möglichen Antworten ist das Semikolon.<br />
* Die erste Antwort, die nach der Fage kommt ist die richtige Antwort.<br />
<syntaxhighlight><br />
unit uDateiEinLesen;<br />
<br />
{$mode objfpc}{$H+}<br />
{$IMPLICITEXCEPTIONS OFF}<br />
<br />
interface<br />
<br />
uses<br />
SysUtils, uSpielLogik;<br />
<br />
var<br />
intSemikolonZaehler: integer = 0;<br />
<br />
procedure subDateiEinlesen;<br />
<br />
implementation<br />
<br />
procedure subArrayZuWeisen(strDateiInhalt: string);<br />
var<br />
intI: integer = 0;<br />
//intSemikolonZaehler: integer = 0;<br />
intarrLaenge: integer = 0;<br />
<br />
begin<br />
<br />
// prüft, ob ein leerer String übergeben wurde<br />
if strDateiInhalt = '' then<br />
Exit;<br />
<br />
// setzt den Semikolonzähler wieder auf 0<br />
intSemikolonZaehler := 0;<br />
<br />
// Legt die neue Grösse des Arrays fest<br />
intarrLaenge := length(arrTrivial);<br />
SetLength(arrTrivial, intarrLaenge + 1);<br />
<br />
for intI := 0 to length(strDateiInhalt) do<br />
begin<br />
<br />
if strDateiInhalt[intI] = ';' then<br />
intSemikolonZaehler := intSemikolonZaehler + 1<br />
else<br />
begin<br />
<br />
case intSemikolonZaehler of<br />
0:<br />
arrTrivial[intarrLaenge].strFrage :=<br />
arrTrivial[intarrLaenge].strFrage + strDateiInhalt[intI];<br />
1:<br />
arrTrivial[intarrLaenge].strAntwort1 :=<br />
arrTrivial[intarrLaenge].strAntwort1 + strDateiInhalt[intI];<br />
2:<br />
arrTrivial[intarrLaenge].strAntwort2 :=<br />
arrTrivial[intarrLaenge].strAntwort2 + strDateiInhalt[intI];<br />
3:<br />
arrTrivial[intarrLaenge].strAntwort3 :=<br />
arrTrivial[intarrLaenge].strAntwort3 + strDateiInhalt[intI];<br />
end;<br />
<br />
end;<br />
<br />
end;<br />
<br />
end;<br />
<br />
<br />
procedure subDateiEinlesen;<br />
var<br />
datDatei: TextFile;<br />
strDateiInhalt: string;<br />
<br />
begin<br />
<br />
// öffnet die Datei<br />
AssignFile(datDatei, 'Trivial.txt');<br />
// setzt den Dateizeiger auf den Anfang der Datei<br />
Reset(datDatei);<br />
<br />
// liest die Datei bis zu ihrem Ende ein<br />
while not EOF(datDatei) do<br />
begin<br />
ReadLn(datDatei, strDateiInhalt);<br />
if strDateiInhalt <> '' then<br />
subArrayZuWeisen(strDateiInhalt);<br />
end;<br />
<br />
//Schliesst die Datei<br />
CloseFile(datDatei);<br />
<br />
end;<br />
<br />
end.<br />
</syntaxhighlight><br />
<br><br />
<br><br />
Die Unit uSpiellogik.pas enthält die Spielsteuerung.<br><br />
Hier befindet sich auch die Anweisung für den Programmabbruch.<br><br />
Die Tasten <ESC>, <Q> oder <E> beenden das Programm.<br><br />
<syntaxhighlight><br />
unit uSpielLogik;<br />
<br />
{$mode objfpc}{$H+}<br />
{$IMPLICITEXCEPTIONS OFF}<br />
<br />
interface<br />
<br />
uses<br />
SysUtils, crt;<br />
<br />
type<br />
TTrivial = record<br />
strFrage: string;<br />
strAntwort1: string;<br />
strAntwort2: string;<br />
strAntwort3: string;<br />
end;<br />
<br />
<br />
type<br />
TAntwort = record<br />
strAntwort1: string;<br />
strAntwort2: string;<br />
strAntwort3: string;<br />
end;<br />
<br />
<br />
var<br />
arrTrivial: array of TTrivial;<br />
typeAntwort: TAntwort;<br />
<br />
const<br />
// Die Konstanten sind typisierte Konstanten<br />
conintZufallszahlAntwort: integer = 0;<br />
conintZufallszahlArray: integer = 0;<br />
<br />
<br />
procedure subFragenReihenfolge;<br />
procedure subEingabe;<br />
<br />
implementation<br />
<br />
uses<br />
uAusgabe;<br />
<br />
procedure subZufallszahlArray;<br />
begin<br />
randomize;<br />
conintZufallszahlArray := random(length(arrTrivial));<br />
end;<br />
<br />
<br />
procedure subZufallszahlAntwort;<br />
begin<br />
randomize;<br />
<br />
// Da die Verteilung der Zufallszahlen bei random(2) + 1 zu ungenau ist,<br />
// wurde dieser Lösungsansatz gewählt:<br />
conintZufallszahlAntwort := random(29) + 1;<br />
<br />
if (conintZufallszahlAntwort mod 3) = 0 then<br />
conintZufallszahlAntwort := 3<br />
else if (conintZufallszahlAntwort mod 2) = 0 then<br />
conintZufallszahlAntwort := 2<br />
else<br />
conintZufallszahlAntwort := 1;<br />
<br />
// Alternativ zu obigen Weg geht auch dieser Weg:<br />
{case conintZufallszahlAntwort of<br />
3, 6, 9, 12, 15, 18, 21, 24, 27, 30:<br />
conintZufallszahlAntwort := 3;<br />
2, 4, 8, 10, 14, 16, 20, 22, 26, 28:<br />
conintZufallszahlAntwort := 2;<br />
else<br />
conintZufallszahlAntwort := 1;<br />
end;}<br />
<br />
end;<br />
<br />
<br />
procedure subFragenReihenfolge;<br />
begin<br />
// Wählt die Frage aus<br />
subZufallszahlArray;<br />
// Wählt aus, an welcher Stelle<br />
// die richtige Antwort erscheinen soll<br />
subZufallszahlAntwort;<br />
<br />
case conintZufallszahlAntwort of<br />
1:<br />
begin<br />
typeAntwort.strAntwort1 := arrTrivial[conintZufallszahlArray].strAntwort1;<br />
typeAntwort.strAntwort2 := arrTrivial[conintZufallszahlArray].strAntwort2;<br />
typeAntwort.strAntwort3 := arrTrivial[conintZufallszahlArray].strAntwort3;<br />
end;<br />
2:<br />
begin<br />
typeAntwort.strAntwort1 := arrTrivial[conintZufallszahlArray].strAntwort2;<br />
typeAntwort.strAntwort2 := arrTrivial[conintZufallszahlArray].strAntwort3;<br />
typeAntwort.strAntwort3 := arrTrivial[conintZufallszahlArray].strAntwort1;<br />
end;<br />
3:<br />
begin<br />
typeAntwort.strAntwort1 := arrTrivial[conintZufallszahlArray].strAntwort3;<br />
typeAntwort.strAntwort2 := arrTrivial[conintZufallszahlArray].strAntwort1;<br />
typeAntwort.strAntwort3 := arrTrivial[conintZufallszahlArray].strAntwort2;<br />
end;<br />
else<br />
begin<br />
typeAntwort.strAntwort1 := ' Fehler ' + IntToStr(conintZufallszahlAntwort);<br />
typeAntwort.strAntwort2 := ' Fehler ' + IntToStr(conintZufallszahlAntwort);<br />
typeAntwort.strAntwort3 := ' Fehler ' + IntToStr(conintZufallszahlAntwort);<br />
end;<br />
end;<br />
end;<br />
<br />
<br />
procedure subEingabe;<br />
var<br />
chrEingabe: char = ' ';<br />
<br />
begin<br />
<br />
// Wandelt Tastatureingabe in Kleinbuchstaben um<br />
chrEingabe := LowerCase(Readkey);<br />
<br />
// Überschreibt den Inhalt der Statuszeile und<br />
// setzt die Farbe für die Schrift wieder auf Hellgrau<br />
subStatuszeile(' ',<br />
LightGray);<br />
<br />
case chrEingabe of<br />
#27, 'q', 'e':<br />
begin<br />
// Gibt an der Statuszeile das Programmende aus und<br />
// setzt die Farbe für die Schrift auf Hellgrau<br />
subStatuszeile('Das Programm Trivial wurde beendet.', LightGray);<br />
halt;<br />
end;<br />
<br />
'a':<br />
begin<br />
begin<br />
if typeAntwort.strAntwort1 =<br />
arrTrivial[conintZufallszahlArray].strAntwort1 then<br />
subStatuszeile('Richtig', LightGreen)<br />
else<br />
subStatuszeile('Falsch', LightRed);<br />
end;<br />
end;<br />
<br />
'b':<br />
begin<br />
begin<br />
if typeAntwort.strAntwort2 =<br />
arrTrivial[conintZufallszahlArray].strAntwort1 then<br />
subStatuszeile('Richtig', LightGreen)<br />
else<br />
subStatuszeile('Falsch', LightRed);<br />
end;<br />
end;<br />
<br />
'c':<br />
begin<br />
if typeAntwort.strAntwort3 =<br />
arrTrivial[conintZufallszahlArray].strAntwort1 then<br />
subStatuszeile('Richtig', LightGreen)<br />
else<br />
subStatuszeile('Falsch', LightRed);<br />
end;<br />
end;<br />
<br />
end;<br />
<br />
end.<br />
</syntaxhighlight><br />
<br><br />
<br><br />
Die Unit uAusgabe.pas ist für die Anzeige des Spiels an der Konsole zuständig.<br><br />
<syntaxhighlight><br />
unit uAusgabe;<br />
<br />
{$mode objfpc}{$H+}<br />
{$IMPLICITEXCEPTIONS OFF}<br />
<br />
interface<br />
<br />
uses<br />
SysUtils, crt, uSpielLogik;<br />
<br />
const<br />
constrCopyright = '(c) 2015 by Olaf Schanz';<br />
constrVersion = 'Version: 0.4.0';<br />
conintStatuszeile = 14;<br />
<br />
procedure subAusgabe;<br />
procedure subStatuszeile(strUebergabe: string; intFarbe: integer);<br />
<br />
<br />
implementation<br />
<br />
<br />
function funTextZentrieren(strText: string): integer;<br />
begin<br />
Result := Trunc((80 - length(strText)) / 2);<br />
end;<br />
<br />
<br />
procedure subTitel;<br />
begin<br />
ClrScr;<br />
GOTOXY(funTextZentrieren('TRIVIAL'), 1);<br />
Write('TRIVIAL');<br />
GOTOXY(funTextZentrieren(constrVersion), 2);<br />
Write(constrVersion);<br />
GOTOXY(funTextZentrieren(constrCopyright), 3);<br />
Write(constrCopyright);<br />
end;<br />
<br />
<br />
procedure subKoerper;<br />
begin<br />
GOTOXY(1, 6);<br />
Write(arrTrivial[conintZufallszahlArray].strFrage);<br />
GOTOXY(1, 8);<br />
Write('a) ' + typeAntwort.strAntwort1);<br />
GOTOXY(1, 9);<br />
Write('b) ' + typeAntwort.strAntwort2);<br />
GOTOXY(1, 10);<br />
Write('c) ' + typeAntwort.strAntwort3);<br />
GOTOXY(1, 12);<br />
end;<br />
<br />
<br />
procedure subStatuszeile(strUebergabe: string; intFarbe: integer);<br />
begin<br />
TextColor(intFarbe);<br />
GOTOXY(1,conintStatuszeile);<br />
Write(strUebergabe);<br />
TextColor(LightGray);<br />
GOTOXY(1,conintStatuszeile + 2);<br />
end;<br />
<br />
<br />
procedure subInfo();<br />
begin<br />
GOTOXY(1,conintStatuszeile + 1);<br />
WriteLn('Die Tasten <ESC>, <q> oder <e> beenden das Programm.');<br />
end;<br />
<br />
procedure subAusgabe;<br />
begin<br />
subTitel;<br />
subKoerper;<br />
subInfo;<br />
end;<br />
<br />
end.<br />
</syntaxhighlight><br />
<br><br />
<br><br />
Beispiel für die Datei (Trivial.txt) die die Fragen und die Antworten enthält:<br><br />
Was ist der Pumukl?;ein Kobold;ein Klabautermann;ein Schreinermeister<br />
Was ist ein Gugelhupf?;ein Kuchen;eine Froschart;ein Schnaps<br />
Was sind Tapas?;kleine Appetithappen;Tiere;Gebäude<br />
Was sind Tapire?;Tiere;kleine Appetithappen;Wanddekorationen<br />
Was sind Tapeten?;Wanddekorationen;ein Kuchen;kleine Tiere<br />
Was ist ein Wolpertinger?;ein bayerisches Fabelwesen;eine seltene Tierart;ein Einwohner des Ortes Wolpert<br />
Was ist ein Tatzelwurm?;ein alpenländisches Fabeltier ählich einem Drachen;ein seltene Wurmart;eine Katze<br />
Was ist ein Lindwurm?;ein Fabeltier ähnlich einer Schlange;eine seltene Wurmart;eine Schlange<br />
Was ist Frau Holle?;eine Märchen- oder Sagengestalt;ein Hausmädchen;eine Putzfrau<br />
Was ist ein Wal?;ein Säugetier;ein Fisch;eine Amphibie<br />
Was ist ein Pinguin?;ein Vogel;ein Fisch;ein Säugetier<br />
Wer nascht mehr Süsses?;Frauen;Männer;beide naschen gleich viel<br />
Was ist eine Schnecke?;ein Weichtier;ein Primat;eine Pilzart<br />
Wann sind die Rauhnächte?;meist zwischen dem 24.12. und dem 06.01.;zu Ostern;zwischen dem 06.7. und dem 01.08.<br />
Was ist Freibier?;ein Bier das man selbst nicht zahlen mus;obergärig;untergärig<br />
Was ist ein Obazter?;ein angemachter Käse;ein Raufbold;ein Kuchen<br />
<br><br />
<br><br />
--[[User:Olaf|Olaf]] 08:39, 25 January 2015 (CET)<br />
{{AutoCategory}}[[Category:Console/de]][[Category:Example programs/de]]</div>
Olaf
https://wiki.freepascal.org/index.php?title=trivial/de&diff=85968
trivial/de
2015-01-25T07:39:13Z
<p>Olaf: Created page with "{{VierGewinnt}} <br> Zurück zur Konsolenseite.<br> <br> Dieses Spiel Trivial ist ein einfaches Spiel für die Konsole (Windows), das Terminal (Linux) oder auch..."</p>
<hr />
<div>{{VierGewinnt}}<br />
<br><br />
Zurück zur [[Console/de|Konsolenseite]].<br><br />
<br><br />
Dieses Spiel Trivial ist ein einfaches Spiel für die Konsole (Windows), das Terminal (Linux) oder auch für die Kommandozeile (DOS).<br><br />
Das Spiel soll die Möglichkeiten von Free Pascal demonstrieren.<br><br />
<br><br />
Dieses Spiel hat keine Hilfe.<br><br />
Das Programm wird durch das drücken einer der Tasten <ESC>, <Q> oder <E> beendet.<br><br />
<br><br />
Das Hauptprogramm trivial ruft die einzelnen Unterprogramme auf:<br><br />
<syntaxhighlight><br />
program trivial;<br />
<br />
{$mode objfpc}{$H+}<br />
{$IMPLICITEXCEPTIONS OFF}<br />
<br />
uses<br />
uDateiEinLesen,<br />
uSpielLogik,<br />
uAusgabe,<br />
Crt;<br />
<br />
{$R *.res}<br />
<br />
<br />
begin<br />
<br />
// Liest die Datei mit den Fragen ein<br />
subDateiEinlesen;<br />
repeat<br />
<br />
subFragenReihenfolge;<br />
subAusgabe;<br />
subEingabe;<br />
// Zwei Sekunden Pause<br />
Delay(2000);<br />
until 0 > 1;<br />
<br />
end.<br />
</syntaxhighlight><br />
<br><br />
<br><br />
Die Unit subDateiEinlesen.pas liest die Textdatei mit den Fragen ein.<br><br />
Die Datei mit den Fragen hat folgendes Format:<br><br />
* Die Datei mit den Fragen ist eine csv-Datei ohne Kopfzeile und ohne Größenbegrenzung.<br />
* Das Trennzeichen zwischen der Frage und den möglichen Antworten ist das Semikolon.<br />
* Die erste Antwort, die nach der Fage kommt ist die richtige Antwort.<br />
<syntaxhighlight><br />
unit uDateiEinLesen;<br />
<br />
{$mode objfpc}{$H+}<br />
{$IMPLICITEXCEPTIONS OFF}<br />
<br />
interface<br />
<br />
uses<br />
SysUtils, uSpielLogik;<br />
<br />
var<br />
intSemikolonZaehler: integer = 0;<br />
<br />
procedure subDateiEinlesen;<br />
<br />
implementation<br />
<br />
procedure subArrayZuWeisen(strDateiInhalt: string);<br />
var<br />
intI: integer = 0;<br />
//intSemikolonZaehler: integer = 0;<br />
intarrLaenge: integer = 0;<br />
<br />
begin<br />
<br />
// prüft, ob ein leerer String übergeben wurde<br />
if strDateiInhalt = '' then<br />
Exit;<br />
<br />
// setzt den Semikolonzähler wieder auf 0<br />
intSemikolonZaehler := 0;<br />
<br />
// Legt die neue Grösse des Arrays fest<br />
intarrLaenge := length(arrTrivial);<br />
SetLength(arrTrivial, intarrLaenge + 1);<br />
<br />
for intI := 0 to length(strDateiInhalt) do<br />
begin<br />
<br />
if strDateiInhalt[intI] = ';' then<br />
intSemikolonZaehler := intSemikolonZaehler + 1<br />
else<br />
begin<br />
<br />
case intSemikolonZaehler of<br />
0:<br />
arrTrivial[intarrLaenge].strFrage :=<br />
arrTrivial[intarrLaenge].strFrage + strDateiInhalt[intI];<br />
1:<br />
arrTrivial[intarrLaenge].strAntwort1 :=<br />
arrTrivial[intarrLaenge].strAntwort1 + strDateiInhalt[intI];<br />
2:<br />
arrTrivial[intarrLaenge].strAntwort2 :=<br />
arrTrivial[intarrLaenge].strAntwort2 + strDateiInhalt[intI];<br />
3:<br />
arrTrivial[intarrLaenge].strAntwort3 :=<br />
arrTrivial[intarrLaenge].strAntwort3 + strDateiInhalt[intI];<br />
end;<br />
<br />
end;<br />
<br />
end;<br />
<br />
end;<br />
<br />
<br />
procedure subDateiEinlesen;<br />
var<br />
datDatei: TextFile;<br />
strDateiInhalt: string;<br />
<br />
begin<br />
<br />
// öffnet die Datei<br />
AssignFile(datDatei, 'Trivial.txt');<br />
// setzt den Dateizeiger auf den Anfang der Datei<br />
Reset(datDatei);<br />
<br />
// liest die Datei bis zu ihrem Ende ein<br />
while not EOF(datDatei) do<br />
begin<br />
ReadLn(datDatei, strDateiInhalt);<br />
if strDateiInhalt <> '' then<br />
subArrayZuWeisen(strDateiInhalt);<br />
end;<br />
<br />
//Schliesst die Datei<br />
CloseFile(datDatei);<br />
<br />
end;<br />
<br />
end.<br />
</syntaxhighlight><br />
<br><br />
<br><br />
Die Unit uSpiellogik.pas enthält die Spielsteuerung.<br><br />
Hier befindet sich auch die Anweisung für den Programmabbruch.<br><br />
Die Tasten <ESC>, <Q> oder <E> beenden das Programm.<br><br />
<syntaxhighlight><br />
unit uSpielLogik;<br />
<br />
{$mode objfpc}{$H+}<br />
{$IMPLICITEXCEPTIONS OFF}<br />
<br />
interface<br />
<br />
uses<br />
SysUtils, crt;<br />
<br />
type<br />
TTrivial = record<br />
strFrage: string;<br />
strAntwort1: string;<br />
strAntwort2: string;<br />
strAntwort3: string;<br />
end;<br />
<br />
<br />
type<br />
TAntwort = record<br />
strAntwort1: string;<br />
strAntwort2: string;<br />
strAntwort3: string;<br />
end;<br />
<br />
<br />
var<br />
arrTrivial: array of TTrivial;<br />
typeAntwort: TAntwort;<br />
<br />
const<br />
// Die Konstanten sind typisierte Konstanten<br />
conintZufallszahlAntwort: integer = 0;<br />
conintZufallszahlArray: integer = 0;<br />
<br />
<br />
procedure subFragenReihenfolge;<br />
procedure subEingabe;<br />
<br />
implementation<br />
<br />
uses<br />
uAusgabe;<br />
<br />
procedure subZufallszahlArray;<br />
begin<br />
randomize;<br />
conintZufallszahlArray := random(length(arrTrivial));<br />
end;<br />
<br />
<br />
procedure subZufallszahlAntwort;<br />
begin<br />
randomize;<br />
<br />
// Da die Verteilung der Zufallszahlen bei random(2) + 1 zu ungenau ist,<br />
// wurde dieser Lösungsansatz gewählt:<br />
conintZufallszahlAntwort := random(29) + 1;<br />
<br />
if (conintZufallszahlAntwort mod 3) = 0 then<br />
conintZufallszahlAntwort := 3<br />
else if (conintZufallszahlAntwort mod 2) = 0 then<br />
conintZufallszahlAntwort := 2<br />
else<br />
conintZufallszahlAntwort := 1;<br />
<br />
// Alternativ zu obigen Weg geht auch dieser Weg:<br />
{case conintZufallszahlAntwort of<br />
3, 6, 9, 12, 15, 18, 21, 24, 27, 30:<br />
conintZufallszahlAntwort := 3;<br />
2, 4, 8, 10, 14, 16, 20, 22, 26, 28:<br />
conintZufallszahlAntwort := 2;<br />
else<br />
conintZufallszahlAntwort := 1;<br />
end;}<br />
<br />
end;<br />
<br />
<br />
procedure subFragenReihenfolge;<br />
begin<br />
// Wählt die Frage aus<br />
subZufallszahlArray;<br />
// Wählt aus, an welcher Stelle<br />
// die richtige Antwort erscheinen soll<br />
subZufallszahlAntwort;<br />
<br />
case conintZufallszahlAntwort of<br />
1:<br />
begin<br />
typeAntwort.strAntwort1 := arrTrivial[conintZufallszahlArray].strAntwort1;<br />
typeAntwort.strAntwort2 := arrTrivial[conintZufallszahlArray].strAntwort2;<br />
typeAntwort.strAntwort3 := arrTrivial[conintZufallszahlArray].strAntwort3;<br />
end;<br />
2:<br />
begin<br />
typeAntwort.strAntwort1 := arrTrivial[conintZufallszahlArray].strAntwort2;<br />
typeAntwort.strAntwort2 := arrTrivial[conintZufallszahlArray].strAntwort3;<br />
typeAntwort.strAntwort3 := arrTrivial[conintZufallszahlArray].strAntwort1;<br />
end;<br />
3:<br />
begin<br />
typeAntwort.strAntwort1 := arrTrivial[conintZufallszahlArray].strAntwort3;<br />
typeAntwort.strAntwort2 := arrTrivial[conintZufallszahlArray].strAntwort1;<br />
typeAntwort.strAntwort3 := arrTrivial[conintZufallszahlArray].strAntwort2;<br />
end;<br />
else<br />
begin<br />
typeAntwort.strAntwort1 := ' Fehler ' + IntToStr(conintZufallszahlAntwort);<br />
typeAntwort.strAntwort2 := ' Fehler ' + IntToStr(conintZufallszahlAntwort);<br />
typeAntwort.strAntwort3 := ' Fehler ' + IntToStr(conintZufallszahlAntwort);<br />
end;<br />
end;<br />
end;<br />
<br />
<br />
procedure subEingabe;<br />
var<br />
chrEingabe: char = ' ';<br />
<br />
begin<br />
<br />
// Wandelt Tastatureingabe in Kleinbuchstaben um<br />
chrEingabe := LowerCase(Readkey);<br />
<br />
// Überschreibt den Inhalt der Statuszeile und<br />
// setzt die Farbe für die Schrift wieder auf Hellgrau<br />
subStatuszeile(' ',<br />
LightGray);<br />
<br />
case chrEingabe of<br />
#27, 'q', 'e':<br />
begin<br />
// Gibt an der Statuszeile das Programmende aus und<br />
// setzt die Farbe für die Schrift auf Hellgrau<br />
subStatuszeile('Das Programm Trivial wurde beendet.', LightGray);<br />
halt;<br />
end;<br />
<br />
'a':<br />
begin<br />
begin<br />
if typeAntwort.strAntwort1 =<br />
arrTrivial[conintZufallszahlArray].strAntwort1 then<br />
subStatuszeile('Richtig', LightGreen)<br />
else<br />
subStatuszeile('Falsch', LightRed);<br />
end;<br />
end;<br />
<br />
'b':<br />
begin<br />
begin<br />
if typeAntwort.strAntwort2 =<br />
arrTrivial[conintZufallszahlArray].strAntwort1 then<br />
subStatuszeile('Richtig', LightGreen)<br />
else<br />
subStatuszeile('Falsch', LightRed);<br />
end;<br />
end;<br />
<br />
'c':<br />
begin<br />
if typeAntwort.strAntwort3 =<br />
arrTrivial[conintZufallszahlArray].strAntwort1 then<br />
subStatuszeile('Richtig', LightGreen)<br />
else<br />
subStatuszeile('Falsch', LightRed);<br />
end;<br />
end;<br />
<br />
end;<br />
<br />
end.<br />
</syntaxhighlight><br />
<br><br />
<br><br />
Die Unit uAusgabe.pas ist für die Anzeige des Spiels an der Konsole zuständig.<br><br />
<syntaxhighlight><br />
unit uAusgabe;<br />
<br />
{$mode objfpc}{$H+}<br />
{$IMPLICITEXCEPTIONS OFF}<br />
<br />
interface<br />
<br />
uses<br />
SysUtils, crt, uSpielLogik;<br />
<br />
const<br />
constrCopyright = '(c) 2015 by Olaf Schanz';<br />
constrVersion = 'Version: 0.4.0';<br />
conintStatuszeile = 14;<br />
<br />
procedure subAusgabe;<br />
procedure subStatuszeile(strUebergabe: string; intFarbe: integer);<br />
<br />
<br />
implementation<br />
<br />
<br />
function funTextZentrieren(strText: string): integer;<br />
begin<br />
Result := Trunc((80 - length(strText)) / 2);<br />
end;<br />
<br />
<br />
procedure subTitel;<br />
begin<br />
ClrScr;<br />
GOTOXY(funTextZentrieren('TRIVIAL'), 1);<br />
Write('TRIVIAL');<br />
GOTOXY(funTextZentrieren(constrVersion), 2);<br />
Write(constrVersion);<br />
GOTOXY(funTextZentrieren(constrCopyright), 3);<br />
Write(constrCopyright);<br />
end;<br />
<br />
<br />
procedure subKoerper;<br />
begin<br />
GOTOXY(1, 6);<br />
Write(arrTrivial[conintZufallszahlArray].strFrage);<br />
GOTOXY(1, 8);<br />
Write('a) ' + typeAntwort.strAntwort1);<br />
GOTOXY(1, 9);<br />
Write('b) ' + typeAntwort.strAntwort2);<br />
GOTOXY(1, 10);<br />
Write('c) ' + typeAntwort.strAntwort3);<br />
GOTOXY(1, 12);<br />
end;<br />
<br />
<br />
procedure subStatuszeile(strUebergabe: string; intFarbe: integer);<br />
begin<br />
TextColor(intFarbe);<br />
GOTOXY(1,conintStatuszeile);<br />
Write(strUebergabe);<br />
TextColor(LightGray);<br />
GOTOXY(1,conintStatuszeile + 2);<br />
end;<br />
<br />
<br />
procedure subInfo();<br />
begin<br />
GOTOXY(1,conintStatuszeile + 1);<br />
WriteLn('Die Tasten <ESC>, <q> oder <e> beenden das Programm.');<br />
end;<br />
<br />
procedure subAusgabe;<br />
begin<br />
subTitel;<br />
subKoerper;<br />
subInfo;<br />
end;<br />
<br />
end.<br />
</syntaxhighlight><br />
<br><br />
<br><br />
Beispiel für die Datei (Trivial.txt) die die Fragen und die Antworten enthält:<br><br />
Was ist der Pumukl?;ein Kobold;ein Klabautermann;ein Schreinermeister<br />
Was ist ein Gugelhupf?;ein Kuchen;eine Froschart;ein Schnaps<br />
Was sind Tapas?;kleine Appetithappen;Tiere;Gebäude<br />
Was sind Tapire?;Tiere;kleine Appetithappen;Wanddekorationen<br />
Was sind Tapeten?;Wanddekorationen;ein Kuchen;kleine Tiere<br />
Was ist ein Wolpertinger?;ein bayerisches Fabelwesen;eine seltene Tierart;ein Einwohner des Ortes Wolpert<br />
Was ist ein Tatzelwurm?;ein alpenländisches Fabeltier ählich einem Drachen;ein seltene Wurmart;eine Katze<br />
Was ist ein Lindwurm?;ein Fabeltier ähnlich einer Schlange;eine seltene Wurmart;eine Schlange<br />
Was ist Frau Holle?;eine Märchen- oder Sagengestalt;ein Hausmädchen;eine Putzfrau<br />
Was ist ein Wal?;ein Säugetier;ein Fisch;eine Amphibie<br />
Was ist ein Pinguin?;ein Vogel;ein Fisch;ein Säugetier<br />
Wer nascht mehr Süsses?;Frauen;Männer;beide naschen gleich viel<br />
Was ist eine Schnecke?;ein Weichtier;ein Primat;eine Pilzart<br />
Wann sind die Rauhnächte?;meist zwischen dem 24.12. und dem 06.01.;zu Ostern;zwischen dem 06.7. und dem 01.08.<br />
Was ist Freibier?;ein Bier das man selbst nicht zahlen mus;obergärig;untergärig<br />
Was ist ein Obazter?;ein angemachter Käse;ein Raufbold;ein Kuchen<br />
<br><br />
<br><br />
--[[User:Olaf|Olaf]] 08:39, 25 January 2015 (CET)<br />
{{AutoCategory}}[[Category:Console/de]][[Category:Example programs/de]]</div>
Olaf