<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.docs.clomosy.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Salih</id>
	<title>Clomosy Docs - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.docs.clomosy.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Salih"/>
	<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/Special:Contributions/Salih"/>
	<updated>2026-04-20T07:59:26Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.1</generator>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=TclScaledLayout&amp;diff=4094</id>
		<title>TclScaledLayout</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=TclScaledLayout&amp;diff=4094"/>
		<updated>2025-11-26T12:40:08Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;alert alert-ligth border border-3 border-primary-subtle rounded-5 p-4 shadow-sm&amp;quot; role=&amp;quot;alert&amp;quot;&amp;gt;&lt;br /&gt;
function AddNewScaledLayout(AComponent: TCLComponent; xName: string): TclScaledLayout;	&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&amp;lt;b&amp;gt;AComponent&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; : Specifies the parent of the object to be defined.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&amp;lt;b&amp;gt;xName&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; : The name of the defined ScaledLayout should be written.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is used to arrange and proportionally scale other components on the form. Simply put, it ensures that buttons, labels, and other visual elements maintain their relative size and position when the form is resized.  &lt;br /&gt;
&lt;br /&gt;
This layout automatically scales and adjusts its contents, making the interface consistent and visually balanced across different screen resolutions. TCLScaledLayout is particularly useful when designing responsive or resolution-independent user interfaces.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The features and usage are provided in the table below.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature  !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Definition &lt;br /&gt;
|-&lt;br /&gt;
|TclScaledLayout || ScaledLayout1 : TclScaledLayout; || A variable belonging to the TclScaledLayout class is created.&lt;br /&gt;
|-&lt;br /&gt;
|AddNewScaledLayout || ScaledLayout1 = Form1.AddNewScaledLayout(Form1,'ScaledLayout1'); || A new TclScaledLayout is added to the form.&lt;br /&gt;
|-&lt;br /&gt;
|OriginalWidth || ScaledLayout1.OriginalWidth = 150; ||Defines the reference (unscaled) width of the layout, used as the base for scaling its child components.&lt;br /&gt;
|-&lt;br /&gt;
|OriginalHeight || ScaledLayout1.OriginalHeight = 50; ||Defines the reference (unscaled) height of the layout, used as the base for scaling its child components.&lt;br /&gt;
|-&lt;br /&gt;
|Align  || ScaledLayout1.Align = alTop; ||With the Align parameter, you can specify where you want our component to be aligned in the form. This parameter has multiple positioning properties. See the [[Object_Properties#Align | page]] to learn about these features.&lt;br /&gt;
|-&lt;br /&gt;
|Margins || ScaledLayout1.Margins.Left = 50; // Right, Top, Bottom ||With the Margins parameter, you can give margins at any scale from the right, left, bottom, top.&amp;lt;br&amp;gt;[[File:PanelAppearance.png|frameless|200px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Example&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  var   &lt;br /&gt;
   MyForm:TclForm;&lt;br /&gt;
   ScaledLayout:TclScaledLayout;&lt;br /&gt;
   I:Integer;&lt;br /&gt;
   testButton:TCLButton;&lt;br /&gt;
 {&lt;br /&gt;
   MyForm=TclForm.Create(self);&lt;br /&gt;
    &lt;br /&gt;
   ScaledLayout = MyForm.AddNewScaledLayout(MyForm,'ScaledLayout');&lt;br /&gt;
   ScaledLayout.Align = alClient;&lt;br /&gt;
   &lt;br /&gt;
   ScaledLayout.OriginalHeight = 900; &lt;br /&gt;
   ScaledLayout.OriginalWidth = 400; //Approximately the aspect ratio of a phone screen&lt;br /&gt;
   &lt;br /&gt;
    for (I = 0 to 1) {&lt;br /&gt;
      testButton = MyForm.AddNewButton(ScaledLayout,'testButton'+IntToStr(I),'Button'+IntToStr(I));&lt;br /&gt;
      testButton.Align = alTop;&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
   MyForm.Run;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; See Also &amp;lt;/h2&amp;gt;&lt;br /&gt;
* [[Components]]&lt;br /&gt;
* [[Object Properties]]&lt;br /&gt;
* [[TclLayout]]&lt;br /&gt;
&lt;br /&gt;
{{#seo:|title=TclScaledLayout Using in Clomosy - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description= Learn how TclScaledLayout automatically scales and arranges visual components, keeping interface proportions consistent across different resolutions.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=Seminar_Demos&amp;diff=4093</id>
		<title>Seminar Demos</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=Seminar_Demos&amp;diff=4093"/>
		<updated>2025-11-07T07:31:16Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;alert alert-success&amp;quot; role=&amp;quot;alert&amp;quot; data-bs-theme=&amp;quot;light&amp;quot;&amp;gt;&lt;br /&gt;
The examples prepared during the Clomosy seminar event are provided below.&amp;lt;br&amp;gt;&lt;br /&gt;
These examples were created to demonstrate the features of the Clomosy platform. As Clomosy developers, you can enhance these examples and utilize the features in other applications.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; Hello World Example &amp;lt;/h2&amp;gt;&lt;br /&gt;
Let the first example you do in the Clomosy development environment be the Hello World example.&amp;lt;br&amp;gt;&lt;br /&gt;
That way, you get started with the easy step.&amp;lt;br&amp;gt;&lt;br /&gt;
In this application, a form and a button are created. When the button is clicked, it triggers a procedure. In this procedure, a loop iterates 6 times. Within this loop, a conditional statement (case) generates different outcomes for each value.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Code:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var&lt;br /&gt;
   MyForm:TclForm;&lt;br /&gt;
   I:integer;&lt;br /&gt;
   startBtn:TCLButton;&lt;br /&gt;
&lt;br /&gt;
void StartBtnOnClick;&lt;br /&gt;
{    &lt;br /&gt;
 for (I = 1 to 6)&lt;br /&gt;
 {&lt;br /&gt;
   case I of&lt;br /&gt;
   {&lt;br /&gt;
     1:ShowMessage('Hello World');&lt;br /&gt;
     2:ShowMessage('Number 2');&lt;br /&gt;
     else&lt;br /&gt;
     {&lt;br /&gt;
       ShowMessage('Others=&amp;gt; counter: '+IntToStr(I));&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
     &lt;br /&gt;
 }&lt;br /&gt;
}    &lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 MyForm = TclForm.Create(Self);&lt;br /&gt;
&lt;br /&gt;
 startBtn= MyForm.AddNewButton(MyForm,'startBtn','SHOW');&lt;br /&gt;
 startBtn.TextSettings.Font.Size=50;&lt;br /&gt;
 startBtn.Align = alCenter;&lt;br /&gt;
 startBtn.Height = 50;&lt;br /&gt;
 startBtn.Width = 100;&lt;br /&gt;
 MyForm.AddNewEvent(startBtn,tbeOnClick,'StartBtnOnClick');&lt;br /&gt;
&lt;br /&gt;
 MyForm.Run;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; Web Browser App &amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The programs used to access internet pages are called browser or web browser. Using Clomosy with the [[TclWebBrowser]] component, we can access any website we want.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Link:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: [https://github.com/Clomosy/WebBrowser Web Browser App]&lt;br /&gt;
&amp;lt;b&amp;gt;Output:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:WebBrowserExample.jpg|frameless|300px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; Clothing Selection App &amp;lt;/h2&amp;gt;&lt;br /&gt;
By using color palettes in the application, you can create a combination by selecting the color of the clothes you wear. You can also choose your gender in the application. As you click on the colors, the colors change. If you want to get the code of a color you like, just click on the area where the color code text is located.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Link:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: [https://github.com/Clomosy/ColorCombination Clothing Selection App]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Output:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:OutfitColorSelectionExample.png|frameless|350px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; Body Mass Index (BMI) Calculator App &amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this application, the body mass index is calculated by entering the weight, height and gender of the person and clicking the confirmation button. According to calculations, it gives messages such as weak, normal, overweight and obese. In addition, the picture below changes according to the weight.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Link:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: [https://github.com/Clomosy/BodyMassIndexApp Body Mass Index (BMI) Calculator App]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Output:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:BodyMassIndexCalculatorExample.png|frameless|300px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; QR Personnel Attendance Control System Application &amp;lt;/h2&amp;gt;&lt;br /&gt;
The purpose of this example is to keep track of the arrival and departure times of employees in businesses. Special devices and software are required for these operations. We have made all the work possible with a simple processing through clomosy.&amp;lt;br&amp;gt;&lt;br /&gt;
*A tablet produces a changing QR code, preventing any irregularities. We have also solved the problem of reading in different locations by changing the code every 10 seconds. An administrator in the project must be responsible for generating the QR code.&lt;br /&gt;
*The personnel can arrive and scan the QR code with their phones.&lt;br /&gt;
*The registration process and scanned time of the personnel are recorded on the administrator's screen. (The administrator must log in through Windows.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Link:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: [https://github.com/Clomosy/QR QR Personnel Attendance Control System Application]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; IOT App &amp;lt;/h2&amp;gt;&lt;br /&gt;
:'''&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;What is IOT?&amp;lt;/span&amp;gt;'''&lt;br /&gt;
The Internet of Things (IoT) describes the network of physical objects embedded with sensors, software, and other technologies for the purpose of connecting and sharing data with other devices and systems over the Internet. These devices range from ordinary household objects to advanced industrial tools.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We use the MQTT protocol to enable IoT devices to communicate with each other on Clomosy. So what is MQTT, see [[MQTT]] page for detailed information.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, we transmit the code embedded in Raspberry Pi technology to the server with the help of MQTT protocol over Clomosy. By providing communication in this way, we can connect to the Raspberry remotely and turn our led on and off.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Information: It is necessary to write the desired codes into the Raspberry Pi system. For this, we coded in Python and integrated the activation code of our Clomosy project. In this way, we established our connection.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Link:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: [https://github.com/Clomosy/iot-demo IOT App]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Output:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:IotMqttExample.png|frameless|300px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; Messaging App - MQTT &amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is an messaging application made for different devices to communicate with each other with MQTT.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Link:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: [https://github.com/Clomosy/Mqtt Messaging App]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Output:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:MessagingExample.jpg|frameless|300px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; Gyroscope Ufo Game &amp;lt;/h2&amp;gt;&lt;br /&gt;
Before we get into the game, let's understand what a gyroscope is.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt; What is Gyroscope? &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The gyroscope sensor is a system that can detect angular velocity. In other words, the rotation direction and speed of a stationary object are determined by comparing the angular ratios in three vertical axes. It processes the data it detects with the help of the processor and converts it into electrical signals. The gyroscope works on the principle of maintaining angular balance, which is used to measure or adjust direction. The basis of gyroscopic motion is based on the laws of physics and the principle of centrifugation. For these reasons, it allows us to perform instant movements faster.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cell phone, tablet etc. It is integrated in technological devices and is a system that we use a lot in applications, games and 3D software. It is used in applications such as car races, game consoles, camera sensitivity adjustment in photo shoots and navigation that we steer by turning left and right on mobile phones.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the game, we reach x, y location information by directing our device with the gyroscope method. Afterwards, when we bring the UFO to the desired area, the game is over. It is used in 2 different features in the game. These; Device vibration and device sound effect.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple game has been developed using the gyroscope feature. In this way, you can develop the games you want.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Link:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: [https://github.com/Clomosy/jireskop Gyroscope Ufo Game]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; Word Game &amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The game is started by pressing the &amp;quot;START&amp;quot; button. Then, questions with 5-letter answers are drawn from the database. In this way, it is tried to find the desired word in the game. There are 3 rights and 1 hint in a game. When these rights expire, you save and the game is reset.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Link:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: [https://github.com/Clomosy/WordGame Word Game]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Output:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:WordGameV1.1.png|frameless|350px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; Hangman Game&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The game starts by choosing the word length on the first page. After that, clicking the button at the bottom leads to the game page.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here, by clicking the &amp;quot;Start Game&amp;quot; button, our question appears on the screen. You have 11 rights in the game. In this way, if you find the word until you are full, you win the game.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Link:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: [https://github.com/Clomosy/Hangman Hangman Game]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Output:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;400px&amp;quot; heights=&amp;quot;550px&amp;quot; align=&amp;quot;center&amp;quot; mode=&amp;quot;nolines&amp;quot;&amp;gt;&lt;br /&gt;
File: HangmanGameMainPage.png | '' Main Page ''&lt;br /&gt;
File: HangmanGamePage.png | ''Game Page''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; Animation and Effects Game &amp;lt;/h2&amp;gt;&lt;br /&gt;
TclGameForm is used as the form structure in this game. Besides, TclTimer component is also used. Features such as adding animation and sound effects are used on TclGameForm. You can develop applications by looking at the definitions here.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Link:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: [https://github.com/Clomosy/GameAnimation Animation and Effects Game]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; Artificial Intelligence App &amp;lt;/h2&amp;gt;&lt;br /&gt;
A conversational AI chat engine specialized in dialogue using the OpenAI engine has been developed within the Clomosy infrastructure, and it has been utilized in this example.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Link:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: [https://github.com/Clomosy/AI Artificial Intelligence App]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Output:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ArtificalIntelligenceExample.png|frameless|350px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; Raffle Application &amp;lt;/h2&amp;gt;&lt;br /&gt;
This project includes a Raffle Application where users can participate and determine the winners. The application provides real-time communication and the ability to share the results of the draw via MQTT.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Link:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: [https://github.com/Clomosy/raffle-game Raffle Application]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; Clomosy Notification Sender &amp;lt;/h2&amp;gt;&lt;br /&gt;
This project includes the Clomosy Notification Sender application. Users or administrators can send a specific message or announcement to all users as notifications. The application provides customized user interfaces for different user profiles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Link:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: [https://github.com/Clomosy/Notif-Sender Clomosy Notification Sender]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; Find the Difference Game &amp;lt;/h2&amp;gt;&lt;br /&gt;
This project includes a find the difference game where users try to identify the differences between two images. The game consists of a total of 4 levels. The goal of the game is to detect the specified differences to advance to the next level.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Link:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: [https://github.com/Clomosy/spot-difference-game Find the Difference Game]&lt;br /&gt;
&amp;lt;b&amp;gt;Output:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:FindTheDifference.png|frameless|350px]]&lt;br /&gt;
&amp;lt;h2&amp;gt; Drawing Form Application &amp;lt;/h2&amp;gt;&lt;br /&gt;
This project includes a drawing form application where users can create and edit images using various drawing tools. The project provides a first-class drawing experience.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Link:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: [https://github.com/Clomosy/draw-form Drawing Form Application]&lt;br /&gt;
&amp;lt;b&amp;gt;Output:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:DrawForm.png|frameless|350px]]&lt;br /&gt;
&amp;lt;h2&amp;gt; Online Quiz Application &amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This project involves an online quiz application where users can answer questions and view results through graphs. The project is a dual-platform application designed for both mobile and desktop use.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Link:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: [https://github.com/Clomosy/question-sender Online Quiz Application]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; Toothpick Collection Game &amp;lt;/h2&amp;gt;&lt;br /&gt;
This project represents a fun game where you control an object using motion sensors.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Link:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: [https://github.com/Clomosy/stick-collector-game Toothpick Collection Game]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; &amp;quot;Explain It to Me&amp;quot; Application &amp;lt;/h2&amp;gt;&lt;br /&gt;
This project includes a lottery and word game application. The aim of the project is to enable users to participate in the raffle and other players try to explain the word to the person who won the raffle. The player who wins the draw collects points as he guesses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Link:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: [https://github.com/Clomosy/tellme-game Explain It to Me&amp;quot; Application]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; Balloon Popping &amp;lt;/h2&amp;gt;&lt;br /&gt;
This project includes a balloon popping game where computers and mobile devices work simultaneously. The draw is held and whoever won the draw tries to know the question without popping the balloon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Link:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: [https://github.com/Clomosy/balloon-game Balloon Popping]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; Asteroid Game &amp;lt;/h2&amp;gt;&lt;br /&gt;
This project involves an asteroid escape application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Link:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: [https://github.com/Clomosy/astroid-game Asteroid Game]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; Fruit Collect Game &amp;lt;/h2&amp;gt;&lt;br /&gt;
In this project, we are collecting food falling from the sky. If we collect healthy foods, our score increases, and if we collect unhealthy foods, our score decreases. Players are listed according to their scores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Link:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
: [https://github.com/Clomosy/fruit-collect Fruit Collect Game]&lt;br /&gt;
{{#seo:|title=Event and Seminar Demos - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description=Access hands-on examples and practical applications showcased in our workshops and events.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=File:DrawForm.png&amp;diff=4092</id>
		<title>File:DrawForm.png</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=File:DrawForm.png&amp;diff=4092"/>
		<updated>2025-11-07T07:27:20Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=File:FindTheDifference.png&amp;diff=4091</id>
		<title>File:FindTheDifference.png</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=File:FindTheDifference.png&amp;diff=4091"/>
		<updated>2025-11-07T07:04:25Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=TclMenuFrame&amp;diff=4090</id>
		<title>TclMenuFrame</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=TclMenuFrame&amp;diff=4090"/>
		<updated>2025-11-06T15:27:05Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;alert alert-ligth border border-3 border-primary-subtle rounded-5 p-4 shadow-sm&amp;quot; role=&amp;quot;alert&amp;quot;&amp;gt;&lt;br /&gt;
function AddNewMenuFrame(AComponent: TCLComponent; xName: string): TclMenuFrame;	&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&amp;lt;b&amp;gt;AComponent&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; :  Specifies the parent of the object to be defined.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&amp;lt;b&amp;gt;xName&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; : The name of the defined component should be written.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;TclMenuFrame&amp;quot; is a component frame type in Clomosy. This frame can be used as a menu component and helps create menu options in the application.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature  !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Definition &lt;br /&gt;
|-&lt;br /&gt;
|TClMenuFrame || MenuFrame1 : TClMenuFrame; || A variable belonging to the TclMenuFrame class is created.&lt;br /&gt;
|-&lt;br /&gt;
|AddNewMenuFrame ||MenuFrame1 = Form1.AddNewMenuFrame(Form1,'MenuFrame1'); ||A new Menu Frame is added to the form.&lt;br /&gt;
|-&lt;br /&gt;
|Align ||MenuFrame1.Align = alContents; ||Alignment adjustment is made.&lt;br /&gt;
|-&lt;br /&gt;
|MenuBar ||MenuFrame1.MenuBar.Width = 250; MenuFrame1.MenuBar.Height = 250; || It defines the main menu of the application and provides users with access to application functions. With this, adjustments such as height and width can be made.&lt;br /&gt;
|-&lt;br /&gt;
|Visible ||MenuFrame1.Visible = False; ||Visibility settings can be adjusted. If it is true it is visible, if it is false it is not visible.&lt;br /&gt;
|-&lt;br /&gt;
|ClMenuPosition ||MenuFrame1.ClMenuPosition = clLeft;||Menu Frame position is set.(Default =&amp;gt; clRight)&lt;br /&gt;
|-&lt;br /&gt;
|VertScrollBox ||MenuFrame1.VertScrollBox || The MenuFrame provides an area with a vertical scrollbar within. This allows objects placed inside it to be created and displayed vertically one below the other.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Example&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Var&lt;br /&gt;
  MyForm : TclForm;&lt;br /&gt;
  TstSideMenu : TClMenuFrame;&lt;br /&gt;
  ShowBtn,menuBtn: TClProButton;&lt;br /&gt;
  MenuItem1, MenuItem2: TClProButton;&lt;br /&gt;
&lt;br /&gt;
void showMenuFrame;&lt;br /&gt;
{&lt;br /&gt;
  TstSideMenu.Visible = True;&lt;br /&gt;
  clRTMethod(TstSideMenu, 'BringTofront');&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void showShowBtn;&lt;br /&gt;
{&lt;br /&gt;
  TstSideMenu.Visible = False;&lt;br /&gt;
  clRTMethod(menuBtn, 'BringTofront');&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  MyForm = TclForm.Create(Self);&lt;br /&gt;
  TstSideMenu = MyForm.AddNewMenuFrame(MyForm,'TstSideMenu');&lt;br /&gt;
  TstSideMenu.Align = alContents;&lt;br /&gt;
  TstSideMenu.MenuBar.Width = 250;&lt;br /&gt;
  TstSideMenu.Visible = False;&lt;br /&gt;
  TstSideMenu.ClMenuPosition = clLeft;  &lt;br /&gt;
&lt;br /&gt;
  menuBtn= MyForm.AddNewProButton(MyForm,'menuBtn','menu');&lt;br /&gt;
  menuBtn.Align = AlLeft;&lt;br /&gt;
  menuBtn.Width = 60;&lt;br /&gt;
  menuBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#A5C9CA'); &lt;br /&gt;
  menuBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#2E4F4F');&lt;br /&gt;
  menuBtn.clProSettings.TextSettings.Font.Style = [fsBold];&lt;br /&gt;
  menuBtn.clProSettings.IsRound = True;&lt;br /&gt;
  menuBtn.clProSettings.RoundHeight = 10;&lt;br /&gt;
  menuBtn.clProSettings.RoundWidth = 10;&lt;br /&gt;
  menuBtn.clProSettings.BorderColor = clAlphaColor.clHexToColor('#C7D8D8');&lt;br /&gt;
  menuBtn.clProSettings.BorderWidth = 2;&lt;br /&gt;
  menuBtn.SetclProSettings(menuBtn.clProSettings);&lt;br /&gt;
  MyForm.AddNewEvent(menuBtn,tbeOnClick,'showMenuFrame');&lt;br /&gt;
&lt;br /&gt;
  ShowBtn= MyForm.AddNewProButton(TstSideMenu.VertScrollBox,'ShowBtn','Close');&lt;br /&gt;
  ShowBtn.Align = AlTop;&lt;br /&gt;
  ShowBtn.Height = 40;&lt;br /&gt;
  ShowBtn.Margins.Top = 10;&lt;br /&gt;
  ShowBtn.clProSettings.FontHorzAlign = palCenter;&lt;br /&gt;
  ShowBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#E7D4B5'); &lt;br /&gt;
  ShowBtn.clProSettings.BorderColor = clAlphaColor.clHexToColor('#FFFFFF');&lt;br /&gt;
  ShowBtn.clProSettings.TextSettings.Font.Style = [fsBold];&lt;br /&gt;
  ShowBtn.clProSettings.IsRound = True;&lt;br /&gt;
  ShowBtn.clProSettings.RoundHeight = 10;&lt;br /&gt;
  ShowBtn.clProSettings.RoundWidth = 10;&lt;br /&gt;
  ShowBtn.clProSettings.BorderWidth = 2;&lt;br /&gt;
  ShowBtn.SetclProSettings(ShowBtn.clProSettings);&lt;br /&gt;
  MyForm.AddNewEvent(ShowBtn,tbeOnClick,'showShowBtn');&lt;br /&gt;
&lt;br /&gt;
  MenuItem1 = MyForm.AddNewProButton(TstSideMenu.VertScrollBox,'MenuItem1','Main Page');&lt;br /&gt;
  MenuItem1.Align = AlTop;&lt;br /&gt;
  MenuItem1.Height = 40;&lt;br /&gt;
  MenuItem1.Margins.Top = 15;&lt;br /&gt;
  MenuItem1.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#D2E9E9');&lt;br /&gt;
  MenuItem1.clProSettings.FontColor = clAlphaColor.clHexToColor('#2E4F4F');&lt;br /&gt;
  MenuItem1.clProSettings.IsRound = True;&lt;br /&gt;
  MenuItem1.clProSettings.RoundHeight = 8;&lt;br /&gt;
  MenuItem1.clProSettings.RoundWidth = 8;&lt;br /&gt;
  MenuItem1.clProSettings.BorderColor = clAlphaColor.clHexToColor('#C7D8D8');&lt;br /&gt;
  MenuItem1.SetclProSettings(MenuItem1.clProSettings);&lt;br /&gt;
&lt;br /&gt;
  MenuItem2 = MyForm.AddNewProButton(TstSideMenu.VertScrollBox,'MenuItem2','Settings');&lt;br /&gt;
  MenuItem2.Align = AlTop;&lt;br /&gt;
  MenuItem2.Height = 40;&lt;br /&gt;
  MenuItem2.Margins.Top = 10;&lt;br /&gt;
  MenuItem2.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F6EACB'); &lt;br /&gt;
  MenuItem2.clProSettings.FontColor = clAlphaColor.clHexToColor('#2E4F4F');&lt;br /&gt;
  MenuItem2.clProSettings.IsRound = True;&lt;br /&gt;
  MenuItem2.clProSettings.RoundHeight = 8;&lt;br /&gt;
  MenuItem2.clProSettings.RoundWidth = 8;&lt;br /&gt;
  MenuItem2.clProSettings.BorderColor = clAlphaColor.clHexToColor('#EAD7BB');&lt;br /&gt;
  MenuItem2.SetclProSettings(MenuItem2.clProSettings);&lt;br /&gt;
&lt;br /&gt;
  MyForm.Run;  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Output&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:TclMenuFrame.gif|frameless|thumb|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; See Also &amp;lt;/h2&amp;gt;&lt;br /&gt;
* [[Components]]&lt;br /&gt;
* [[Object Properties]]&lt;br /&gt;
* [[AddNewEvent]]&lt;br /&gt;
{{#seo:|title=TclMenuFrame Using - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description=Explore TclMenuFrame on Clomosy. Learn about its structure, functionality, and integration for building efficient menu-driven applications.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=File:TclMenuFrame.gif&amp;diff=4089</id>
		<title>File:TclMenuFrame.gif</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=File:TclMenuFrame.gif&amp;diff=4089"/>
		<updated>2025-11-06T15:26:31Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=TclArray&amp;diff=4088</id>
		<title>TclArray</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=TclArray&amp;diff=4088"/>
		<updated>2025-11-06T15:05:03Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Array means many variables of the same data type. Array variables are like a list with a sequence number. Items belonging to this list are also accessed by their sequence number. Another structure that enables the use of Array on Clomosy is the TclArray structure.&lt;br /&gt;
There are different definitions according to the data type. These;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Definition&lt;br /&gt;
|-&lt;br /&gt;
| TclArrayInteger || arrayInteger : TclArrayInteger; || Array definition indexed by integers.&lt;br /&gt;
|-&lt;br /&gt;
| TclArrayString || arrayString  : TclArrayString; || Array definition indexed by string.&lt;br /&gt;
|-&lt;br /&gt;
| TclArrayDouble || arrayDouble : TclArrayDouble; || Array definition indexed by double.&lt;br /&gt;
|-&lt;br /&gt;
| TclArrayBoolean || arrayBoolean : TclArrayBoolean; || Array definition indexed by boolean.&lt;br /&gt;
|-&lt;br /&gt;
| TclArraySingle || arraySingle : TclArraySingle; || Array definition indexed by single.&lt;br /&gt;
|-&lt;br /&gt;
| TclArrayWord || arrayWord : TclArrayWord; || Array definition indexed by words.&lt;br /&gt;
|-&lt;br /&gt;
| TClArrayExtended || arrayExtended : TClArrayExtended; || Array definition indexed by extanded.&lt;br /&gt;
|-&lt;br /&gt;
| Create || array1 = TClArrayInteger.Create; || An object is created in the form.&lt;br /&gt;
|-&lt;br /&gt;
| Count || array1.Count; || The size of the array is taken.&lt;br /&gt;
|-&lt;br /&gt;
| Add || array1.Add(50); || The value 50 is added to the array.&lt;br /&gt;
|-&lt;br /&gt;
| GetItem || array1 (50 , 100, 70, 12, 3) array1.GetItem(1) || Used to access the items of the array. This will return the requested item one by one, no matter how many items are in the array. I want to get the data in the 2nd element of the sample array.&lt;br /&gt;
|-&lt;br /&gt;
| SetItem || array1.SetItem(1,25) //array1:TclArrayInteger || Value assignment is performed to the array element in the array used. The first parameter represents the index number, the second parameter represents the value assigned to the selected index number.&lt;br /&gt;
|-&lt;br /&gt;
| RemoveAll || array1.RemoveAll; || It is used to delete the entire directory.&lt;br /&gt;
|-&lt;br /&gt;
| RemoveAt || array1.RemoveAt(5); || &amp;quot;RemoveAt&amp;quot; is used if you want to delete data in an index of the array. The return value of this operation is returned as boolean. The return value is &amp;quot;True&amp;quot; if data deletion has been performed. If this index does not exist in the array and cannot be deleted, it returns &amp;quot;False&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
|Destroy || array1.Destroy; || It is used to delete an object from memory and free the memory.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Example&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var&lt;br /&gt;
 Form1: TclForm;&lt;br /&gt;
 Edit1: TclProEdit;&lt;br /&gt;
 Button1: TclProButton;&lt;br /&gt;
 BtnTemizle: TclProButton;&lt;br /&gt;
 gOgrenciListesi: TclArrayString;&lt;br /&gt;
 gGuncelIndex: Integer;&lt;br /&gt;
&lt;br /&gt;
void GetFirstIndex&lt;br /&gt;
{&lt;br /&gt;
   if (gOgrenciListesi.Count &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
    Edit1.Text = gOgrenciListesi.GetItem(gGuncelIndex);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Button1OnClick;&lt;br /&gt;
{&lt;br /&gt;
  if (gOgrenciListesi.Count == 0)&lt;br /&gt;
   {&lt;br /&gt;
    ShowMessage('Liste boş. Önce bir eleman ekleyin.');&lt;br /&gt;
   }&lt;br /&gt;
  &lt;br /&gt;
  gOgrenciListesi.SetItem(gGuncelIndex, Edit1.Text);&lt;br /&gt;
  gGuncelIndex = gGuncelIndex + 1;&lt;br /&gt;
  &lt;br /&gt;
   if (gGuncelIndex &amp;gt;= gOgrenciListesi.Count)&lt;br /&gt;
    {&lt;br /&gt;
     gGuncelIndex = 0;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  Edit1.Text = gOgrenciListesi.GetItem(gGuncelIndex);&lt;br /&gt;
  ShowMessage('Kayıt güncellendi. Şimdi ' + IntToStr(gGuncelIndex) + '. index gösteriliyor.');&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void BtnTemizleOnClick;&lt;br /&gt;
{&lt;br /&gt;
  if (gOgrenciListesi.Count &amp;gt; 0)&lt;br /&gt;
   {&lt;br /&gt;
    gOgrenciListesi.RemoveAll; &lt;br /&gt;
    gGuncelIndex = 0;&lt;br /&gt;
    Edit1.Text = 'Liste Temizlendi';&lt;br /&gt;
    ShowMessage('Tüm öğrenciler listeden silindi (RemoveAll).');&lt;br /&gt;
   }&lt;br /&gt;
  else&lt;br /&gt;
   {&lt;br /&gt;
    ShowMessage('Liste zaten boş.');&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  Form1 = TclForm.Create(Self);&lt;br /&gt;
&lt;br /&gt;
  Edit1 = Form1.AddNewProEdit(Form1, 'Edit1', 'Öğrenci Adı');&lt;br /&gt;
  Edit1.Align = alTop;&lt;br /&gt;
  Edit1.Margins.Top = 20;&lt;br /&gt;
  Edit1.Margins.Left = 20;&lt;br /&gt;
  Edit1.Margins.Right = 20;&lt;br /&gt;
&lt;br /&gt;
  Button1 = Form1.AddNewProButton(Form1, 'Button1', 'Güncelle ve Sonrakini Göster');&lt;br /&gt;
  Button1.Align = alTop;&lt;br /&gt;
  Button1.Margins.Top = 10;&lt;br /&gt;
  Button1.Margins.Left = 20;&lt;br /&gt;
  Button1.Margins.Right = 20;&lt;br /&gt;
  Button1.OnClick = 'Button1OnClick';&lt;br /&gt;
  &lt;br /&gt;
  BtnTemizle = Form1.AddNewProButton(Form1, 'BtnTemizle', 'Tüm Listeyi SİL (RemoveAll)');&lt;br /&gt;
  BtnTemizle.Align = alTop;&lt;br /&gt;
  BtnTemizle.Margins.Top = 10;&lt;br /&gt;
  BtnTemizle.Margins.Left = 20;&lt;br /&gt;
  BtnTemizle.Margins.Right = 20;&lt;br /&gt;
  BtnTemizle.OnClick = 'BtnTemizleOnClick';&lt;br /&gt;
  BtnTemizle.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#dc3545'); &lt;br /&gt;
  BtnTemizle.clProSettings.FontColor = clAlphaColor.clHexToColor('#FFFFFF'); &lt;br /&gt;
  BtnTemizle.SetclProSettings(BtnTemizle.clProSettings);&lt;br /&gt;
&lt;br /&gt;
  gGuncelIndex = 0;&lt;br /&gt;
  gOgrenciListesi = TclArrayString.Create;&lt;br /&gt;
  &lt;br /&gt;
  gOgrenciListesi.Add('Ahmet Yılmaz');&lt;br /&gt;
  gOgrenciListesi.Add('Ayşe Kaya');&lt;br /&gt;
  gOgrenciListesi.Add('Mehmet Demir');&lt;br /&gt;
&lt;br /&gt;
  GetFirstIndex;&lt;br /&gt;
  Form1.Run;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; See Also &amp;lt;/h2&amp;gt;&lt;br /&gt;
* [[TRObject_Language#Arrays | Arrays]]&lt;br /&gt;
* [[Sorting Algorithms]]&lt;br /&gt;
* [[System Library]]&lt;br /&gt;
&lt;br /&gt;
{{#seo:|title=TclArray Documentation - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description=Learn how to manage arrays effectively with TclArray! Comprehensive examples and detailed documentation for developers.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=TclProWebBrowser&amp;diff=4087</id>
		<title>TclProWebBrowser</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=TclProWebBrowser&amp;diff=4087"/>
		<updated>2025-11-05T12:34:22Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &amp;lt;b&amp;gt;TCLProWebBrowser&amp;lt;/b&amp;gt; class provides a fully integrated web rendering component for displaying and interacting with web content directly inside Clomosy forms.  &lt;br /&gt;
It supports standard web navigation, HTML rendering, JavaScript execution, caching control, and developer debugging tools.  &lt;br /&gt;
TCLProWebBrowser allows you to embed modern web experiences within your Clomosy applications while maintaining control through the native component interface.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #007bff; background-color: #e6f7ff; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #007bff; padding-bottom: 5px;&amp;quot; | Information: Integrated Web Rendering&lt;br /&gt;
|-&lt;br /&gt;
| The TclProWebBrowser component enables loading of remote or local HTML content, executing JavaScript code, and managing browser history within Clomosy UI forms.&lt;br /&gt;
|-&lt;br /&gt;
| Example:  &amp;lt;code&amp;gt;ProWebBrowser.Navigate('https://cms.clomosy.com')&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot; style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0; width:100%&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Definition&lt;br /&gt;
|-&lt;br /&gt;
| '''TclProWebBrowser''' || ProWebBrowser : TclProWebBrowser;|| A variable belonging to the TclProWebBrowser class is created.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddNewProWebBrowser''' ||ProWebBrowser = MyForm.AddNewProWebBrowser(MyForm, 'ProWebBrowser');|| A new Pro Web Browser component is added to the form.&lt;br /&gt;
|-&lt;br /&gt;
| '''Navigate''' || ProWebBrowser.Navigate('https://cms.clomosy.com'); || Loads a web page from the specified URL into the browser.&lt;br /&gt;
|-&lt;br /&gt;
| '''LoadHTML''' || ProWebBrowser.LoadHTML('&amp;amp;lt;h1&amp;amp;gt;Hello World&amp;amp;lt;/h1&amp;amp;gt;'); || Loads and renders raw HTML content directly without requiring a remote source.&lt;br /&gt;
|-&lt;br /&gt;
| '''LoadFile''' || ProWebBrowser.LoadFile('path/to/localfile.html'); || Opens and displays a local HTML file from the device storage.&lt;br /&gt;
|-&lt;br /&gt;
| '''ExecuteJavaScriptSync''' ||ProWebBrowser.ExecuteJavaScriptSync('document.title;');|| Executes a JavaScript command synchronously within the loaded page context.&lt;br /&gt;
|-&lt;br /&gt;
| '''Reload''' || ProWebBrowser.Reload; || Reloads the current web page content.&lt;br /&gt;
|-&lt;br /&gt;
| '''GoBack''' || ProWebBrowser.GoBack; || Navigates to the previous page in the browser history.&lt;br /&gt;
|-&lt;br /&gt;
| '''GoForward''' || ProWebBrowser.GoForward; || Navigates to the next page in the browser history.&lt;br /&gt;
|-&lt;br /&gt;
| '''ClearCache''' || ProWebBrowser.ClearCache; || Clears the browser cache to ensure fresh content loading.&lt;br /&gt;
|-&lt;br /&gt;
| '''ShowDebugConsole''' || ProWebBrowser.ShowDebugConsole; || Opens the browser’s built-in developer tools console for debugging.&lt;br /&gt;
|-&lt;br /&gt;
| '''UserAgent''' || ProWebBrowser.UserAgent = 'Mozilla/5.0...'; || Allows customizing the browser’s user-agent string for compatibility testing.&lt;br /&gt;
|-&lt;br /&gt;
| '''AutoClearCache''' || ProWebBrowser.AutoClearCache = True; || Automatically clears cache on new page loads.&lt;br /&gt;
|-&lt;br /&gt;
| '''Url''' || ProWebBrowser.Url = 'https://example.com'; || Specifies or retrieves the currently loaded URL.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #28a745; background-color: #d4edda; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #28a745; padding-bottom: 5px;&amp;quot; | Important: JavaScript Execution Context&lt;br /&gt;
|-&lt;br /&gt;
| Use &amp;lt;code&amp;gt;ExecuteJavaScriptSync&amp;lt;/code&amp;gt; for immediate script evaluation and UI updates.  &lt;br /&gt;
For non-blocking operations, asynchronous execution may be preferred in performance-critical workflows.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-info shadow-sm rounded-4 p-3&amp;quot; style=&amp;quot;border-left:6px solid #0d6efd;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h4 class=&amp;quot;mb-2&amp;quot;&amp;gt;Important Notes&amp;lt;/h4&amp;gt;&lt;br /&gt;
  &amp;lt;ul style=&amp;quot;margin-left:10px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;&amp;lt;code&amp;gt;TCLProWebBrowser&amp;lt;/code&amp;gt; supports both local and remote HTML sources.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;&amp;lt;code&amp;gt;ExecuteJavaScriptSync&amp;lt;/code&amp;gt; blocks until the command is executed; avoid heavy scripts in UI threads.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;When debugging, use &amp;lt;code&amp;gt;ShowDebugConsole&amp;lt;/code&amp;gt; to inspect DOM and JavaScript logs.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;For performance, enable &amp;lt;code&amp;gt;AutoClearCache&amp;lt;/code&amp;gt; only when necessary.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Always ensure valid HTTPS URLs for secure web content.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example: TCLProWebBrowser in Use ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var&lt;br /&gt;
  MyForm: TCLForm;&lt;br /&gt;
  ConnectBtn,ReloadBtn: TCLButton;&lt;br /&gt;
  ProWebBrowser: TCLProWebBrowser;&lt;br /&gt;
&lt;br /&gt;
void ConnectBtnOnClick;&lt;br /&gt;
{&lt;br /&gt;
  ProWebBrowser.Url = 'https://docs.clomosy.com';&lt;br /&gt;
&lt;br /&gt;
  //load custom HTML dynamically&lt;br /&gt;
  //ProWebBrowser.LoadHTML('&amp;lt;h1 style=&amp;quot;color:#ff00ff&amp;quot;&amp;gt;Hello World&amp;lt;/h1&amp;gt;');&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
  // You can also use:&lt;br /&gt;
  // ProWebBrowser.GoBack;&lt;br /&gt;
  // ProWebBrowser.ClearCache;&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void ReloadBtnOnClick;&lt;br /&gt;
{&lt;br /&gt;
  ProWebBrowser.Reload;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  MyForm = TCLForm.Create(Self);&lt;br /&gt;
&lt;br /&gt;
  // Add a test button&lt;br /&gt;
  ConnectBtn = MyForm.AddNewButton(MyForm, 'ConnectBtn', 'Connect');&lt;br /&gt;
  ConnectBtn.Align = alTop;&lt;br /&gt;
  MyForm.AddNewEvent(ConnectBtn, tbeOnClick, 'ConnectBtnOnClick');&lt;br /&gt;
&lt;br /&gt;
  ReloadBtn = MyForm.AddNewButton(MyForm, 'ReloadBtn', 'Reload');&lt;br /&gt;
  ReloadBtn.Align = alTop;&lt;br /&gt;
  MyForm.AddNewEvent(ReloadBtn, tbeOnClick, 'ReloadBtnOnClick');&lt;br /&gt;
  &lt;br /&gt;
  // Add a web browser&lt;br /&gt;
  ProWebBrowser = MyForm.AddNewProWebBrowser(MyForm, 'ProWebBrowser');&lt;br /&gt;
  ProWebBrowser.Align = alClient;&lt;br /&gt;
  ProWebBrowser.Margins.Top = 25;&lt;br /&gt;
  ProWebBrowser.Margins.Left = 25;&lt;br /&gt;
  ProWebBrowser.Margins.Right = 25;&lt;br /&gt;
  ProWebBrowser.Margins.Bottom = 25;&lt;br /&gt;
&lt;br /&gt;
  MyForm.Run;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Output:&lt;br /&gt;
&lt;br /&gt;
[[File:ProWebBrowser.png|frameless|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; See Also &amp;lt;/h2&amp;gt;&lt;br /&gt;
* [[TclWebBrowser]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{#seo:|title=TCLProWebBrowser Class - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description=Documentation of TCLProWebBrowser class, including navigation, JavaScript execution, caching, and UI embedding features for web rendering within Clomosy applications.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=TclProWebBrowser&amp;diff=4086</id>
		<title>TclProWebBrowser</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=TclProWebBrowser&amp;diff=4086"/>
		<updated>2025-11-04T06:19:07Z</updated>

		<summary type="html">&lt;p&gt;Salih: Created page with &amp;quot;The &amp;lt;b&amp;gt;TCLProWebBrowser&amp;lt;/b&amp;gt; class provides a fully integrated web rendering component for displaying and interacting with web content directly inside Clomosy forms.   It supports standard web navigation, HTML rendering, JavaScript execution, caching control, and developer debugging tools.   TCLProWebBrowser allows you to embed modern web experiences within your Clomosy applications while maintaining control through the native component interface.  &amp;lt;div style=&amp;quot;margin-bott...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &amp;lt;b&amp;gt;TCLProWebBrowser&amp;lt;/b&amp;gt; class provides a fully integrated web rendering component for displaying and interacting with web content directly inside Clomosy forms.  &lt;br /&gt;
It supports standard web navigation, HTML rendering, JavaScript execution, caching control, and developer debugging tools.  &lt;br /&gt;
TCLProWebBrowser allows you to embed modern web experiences within your Clomosy applications while maintaining control through the native component interface.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #007bff; background-color: #e6f7ff; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #007bff; padding-bottom: 5px;&amp;quot; | Information: Integrated Web Rendering&lt;br /&gt;
|-&lt;br /&gt;
| The TclProWebBrowser component enables loading of remote or local HTML content, executing JavaScript code, and managing browser history within Clomosy UI forms.&lt;br /&gt;
|-&lt;br /&gt;
| Example:  &amp;lt;code&amp;gt;ProWebBrowser.Navigate('https://cms.clomosy.com')&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot; style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0; width:100%&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Definition&lt;br /&gt;
|-&lt;br /&gt;
| '''TclProWebBrowser''' || ProWebBrowser : TclProWebBrowser;|| A variable belonging to the TclProWebBrowser class is created.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddNewProWebBrowser''' ||ProWebBrowser = MyForm.AddNewProWebBrowser(MyForm, 'ProWebBrowser');|| A new Pro Web Browser component is added to the form.&lt;br /&gt;
|-&lt;br /&gt;
| '''Navigate''' || ProWebBrowser.Navigate('https://cms.clomosy.com'); || Loads a web page from the specified URL into the browser.&lt;br /&gt;
|-&lt;br /&gt;
| '''LoadHTML''' || ProWebBrowser.LoadHTML('&amp;amp;lt;h1&amp;amp;gt;Hello World&amp;amp;lt;/h1&amp;amp;gt;'); || Loads and renders raw HTML content directly without requiring a remote source.&lt;br /&gt;
|-&lt;br /&gt;
| '''LoadFile''' || ProWebBrowser.LoadFile('path/to/localfile.html'); || Opens and displays a local HTML file from the device storage.&lt;br /&gt;
|-&lt;br /&gt;
| '''ExecuteJavaScriptSync''' || ProWebBrowser.ExecuteJavaScriptSync('alert(''Hi!'')'); || Executes a JavaScript command synchronously within the loaded page context.&lt;br /&gt;
|-&lt;br /&gt;
| '''Reload''' || ProWebBrowser.Reload; || Reloads the current web page content.&lt;br /&gt;
|-&lt;br /&gt;
| '''GoBack''' || ProWebBrowser.GoBack; || Navigates to the previous page in the browser history.&lt;br /&gt;
|-&lt;br /&gt;
| '''GoForward''' || ProWebBrowser.GoForward; || Navigates to the next page in the browser history.&lt;br /&gt;
|-&lt;br /&gt;
| '''ClearCache''' || ProWebBrowser.ClearCache; || Clears the browser cache to ensure fresh content loading.&lt;br /&gt;
|-&lt;br /&gt;
| '''ShowDebugConsole''' || ProWebBrowser.ShowDebugConsole; || Opens the browser’s built-in developer tools console for debugging.&lt;br /&gt;
|-&lt;br /&gt;
| '''UserAgent''' || ProWebBrowser.UserAgent = 'Mozilla/5.0...'; || Allows customizing the browser’s user-agent string for compatibility testing.&lt;br /&gt;
|-&lt;br /&gt;
| '''AutoClearCache''' || ProWebBrowser.AutoClearCache = True; || Automatically clears cache on new page loads.&lt;br /&gt;
|-&lt;br /&gt;
| '''Url''' || ProWebBrowser.Url = 'https://example.com'; || Specifies or retrieves the currently loaded URL.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #28a745; background-color: #d4edda; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #28a745; padding-bottom: 5px;&amp;quot; | Important: JavaScript Execution Context&lt;br /&gt;
|-&lt;br /&gt;
| Use &amp;lt;code&amp;gt;ExecuteJavaScriptSync&amp;lt;/code&amp;gt; for immediate script evaluation and UI updates.  &lt;br /&gt;
For non-blocking operations, asynchronous execution may be preferred in performance-critical workflows.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-info shadow-sm rounded-4 p-3&amp;quot; style=&amp;quot;border-left:6px solid #0d6efd;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h4 class=&amp;quot;mb-2&amp;quot;&amp;gt;Important Notes&amp;lt;/h4&amp;gt;&lt;br /&gt;
  &amp;lt;ul style=&amp;quot;margin-left:10px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;&amp;lt;code&amp;gt;TCLProWebBrowser&amp;lt;/code&amp;gt; supports both local and remote HTML sources.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;&amp;lt;code&amp;gt;ExecuteJavaScriptSync&amp;lt;/code&amp;gt; blocks until the command is executed; avoid heavy scripts in UI threads.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;When debugging, use &amp;lt;code&amp;gt;ShowDebugConsole&amp;lt;/code&amp;gt; to inspect DOM and JavaScript logs.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;For performance, enable &amp;lt;code&amp;gt;AutoClearCache&amp;lt;/code&amp;gt; only when necessary.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Always ensure valid HTTPS URLs for secure web content.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example: TCLProWebBrowser in Use ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var&lt;br /&gt;
  MyForm: TCLForm;&lt;br /&gt;
  ConnectBtn,ReloadBtn: TCLButton;&lt;br /&gt;
  ProWebBrowser: TCLProWebBrowser;&lt;br /&gt;
&lt;br /&gt;
void ConnectBtnOnClick;&lt;br /&gt;
{&lt;br /&gt;
  ProWebBrowser.Url = 'https://docs.clomosy.com';&lt;br /&gt;
&lt;br /&gt;
  //load custom HTML dynamically&lt;br /&gt;
  //ProWebBrowser.LoadHTML('&amp;lt;h1 style=&amp;quot;color:#ff00ff&amp;quot;&amp;gt;Hello World&amp;lt;/h1&amp;gt;');&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
  // You can also use:&lt;br /&gt;
  // ProWebBrowser.GoBack;&lt;br /&gt;
  // ProWebBrowser.ClearCache;&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void ReloadBtnOnClick;&lt;br /&gt;
{&lt;br /&gt;
  ProWebBrowser.Reload;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  MyForm = TCLForm.Create(Self);&lt;br /&gt;
&lt;br /&gt;
  // Add a test button&lt;br /&gt;
  ConnectBtn = MyForm.AddNewButton(MyForm, 'ConnectBtn', 'Connect');&lt;br /&gt;
  ConnectBtn.Align = alTop;&lt;br /&gt;
  MyForm.AddNewEvent(ConnectBtn, tbeOnClick, 'ConnectBtnOnClick');&lt;br /&gt;
&lt;br /&gt;
  ReloadBtn = MyForm.AddNewButton(MyForm, 'ReloadBtn', 'Reload');&lt;br /&gt;
  ReloadBtn.Align = alTop;&lt;br /&gt;
  MyForm.AddNewEvent(ReloadBtn, tbeOnClick, 'ReloadBtnOnClick');&lt;br /&gt;
  &lt;br /&gt;
  // Add a web browser&lt;br /&gt;
  ProWebBrowser = MyForm.AddNewProWebBrowser(MyForm, 'ProWebBrowser');&lt;br /&gt;
  ProWebBrowser.Align = alClient;&lt;br /&gt;
  ProWebBrowser.Margins.Top = 25;&lt;br /&gt;
  ProWebBrowser.Margins.Left = 25;&lt;br /&gt;
  ProWebBrowser.Margins.Right = 25;&lt;br /&gt;
  ProWebBrowser.Margins.Bottom = 25;&lt;br /&gt;
&lt;br /&gt;
  MyForm.Run;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Output:&lt;br /&gt;
&lt;br /&gt;
[[File:ProWebBrowser.png|frameless|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; See Also &amp;lt;/h2&amp;gt;&lt;br /&gt;
* [[TclWebBrowser]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{#seo:|title=TCLProWebBrowser Class - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description=Documentation of TCLProWebBrowser class, including navigation, JavaScript execution, caching, and UI embedding features for web rendering within Clomosy applications.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=File:ProWebBrowser.png&amp;diff=4085</id>
		<title>File:ProWebBrowser.png</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=File:ProWebBrowser.png&amp;diff=4085"/>
		<updated>2025-11-04T06:16:23Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=With_Do&amp;diff=4082</id>
		<title>With Do</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=With_Do&amp;diff=4082"/>
		<updated>2025-11-03T12:41:53Z</updated>

		<summary type="html">&lt;p&gt;Salih: Salih moved page With&amp;amp;Do to With Do&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &amp;lt;b&amp;gt;with &amp;amp; do&amp;lt;/b&amp;gt; statement in Clomosy is used to simplify object member access by allowing multiple property or method assignments to be made within a single context block.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This structure is particularly useful when working with complex objects, as it eliminates the need to repeatedly specify the object name.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Statement !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Description&lt;br /&gt;
|-&lt;br /&gt;
|with ... do || Creates a scoped block that allows direct access to the specified object’s members without repeating its reference name. &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var&lt;br /&gt;
  MyForm : TclForm;&lt;br /&gt;
  ProPanelTop: TCLProPanel;&lt;br /&gt;
  TitleLabel: TCLProLabel;&lt;br /&gt;
{&lt;br /&gt;
  MyForm = TclForm.Create(Self);&lt;br /&gt;
&lt;br /&gt;
  ProPanelTop = MyForm.AddNewProPanel(MyForm, 'ProPanelTop');&lt;br /&gt;
&lt;br /&gt;
  with ProPanelTop do&lt;br /&gt;
  {&lt;br /&gt;
    Align = alMostTop;&lt;br /&gt;
    Height = 80;&lt;br /&gt;
    clProSettings.BorderColor = clAlphaColor.clHexToColor('#890410');&lt;br /&gt;
    clProSettings.RoundHeight = 10;&lt;br /&gt;
    clProSettings.RoundWidth = 10;&lt;br /&gt;
    clProSettings.BorderWidth = 2;&lt;br /&gt;
    clProSettings.IsFill = True;&lt;br /&gt;
    clProSettings.IsRound = True;&lt;br /&gt;
    SetclProSettings(clProSettings);&lt;br /&gt;
&lt;br /&gt;
    TitleLabel = MyForm.AddNewProLabel(ProPanelTop, 'TitleLabel', 'Welcome to Clomosy!');&lt;br /&gt;
    with TitleLabel do&lt;br /&gt;
    {&lt;br /&gt;
      Align = alCenter;&lt;br /&gt;
      Width = 200;&lt;br /&gt;
      clProSettings.FontSize = 16;&lt;br /&gt;
      clProSettings.TextSettings.Font.Style = [fsBold];&lt;br /&gt;
      SetclProSettings(clProSettings);&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  MyForm.Run;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-warning&amp;quot; role=&amp;quot;alert&amp;quot; data-bs-theme=&amp;quot;light&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Avoid using multiple nested &amp;lt;b&amp;gt;with &amp;amp; do&amp;lt;/b&amp;gt; blocks whenever possible, as they can reduce readability and complicate debugging.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#seo:|title=With &amp;amp; Do Statement in Clomosy - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description=Learn how to use the with &amp;amp; do statement in Clomosy to simplify object property access and improve code readability.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=With_Do&amp;diff=4081</id>
		<title>With Do</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=With_Do&amp;diff=4081"/>
		<updated>2025-11-03T12:38:43Z</updated>

		<summary type="html">&lt;p&gt;Salih: Created page with &amp;quot;The &amp;lt;b&amp;gt;with &amp;amp; do&amp;lt;/b&amp;gt; statement in Clomosy is used to simplify object member access by allowing multiple property or method assignments to be made within a single context block.&amp;lt;br&amp;gt;  This structure is particularly useful when working with complex objects, as it eliminates the need to repeatedly specify the object name.&amp;lt;br&amp;gt;  &amp;lt;div class=&amp;quot;table-responsive&amp;quot;&amp;gt; {| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0&amp;quot; ! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Statement !!style=&amp;quot;backgrou...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &amp;lt;b&amp;gt;with &amp;amp; do&amp;lt;/b&amp;gt; statement in Clomosy is used to simplify object member access by allowing multiple property or method assignments to be made within a single context block.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This structure is particularly useful when working with complex objects, as it eliminates the need to repeatedly specify the object name.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Statement !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Description&lt;br /&gt;
|-&lt;br /&gt;
|with ... do || Creates a scoped block that allows direct access to the specified object’s members without repeating its reference name. &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var&lt;br /&gt;
  MyForm : TclForm;&lt;br /&gt;
  ProPanelTop: TCLProPanel;&lt;br /&gt;
  TitleLabel: TCLProLabel;&lt;br /&gt;
{&lt;br /&gt;
  MyForm = TclForm.Create(Self);&lt;br /&gt;
&lt;br /&gt;
  ProPanelTop = MyForm.AddNewProPanel(MyForm, 'ProPanelTop');&lt;br /&gt;
&lt;br /&gt;
  with ProPanelTop do&lt;br /&gt;
  {&lt;br /&gt;
    Align = alMostTop;&lt;br /&gt;
    Height = 80;&lt;br /&gt;
    clProSettings.BorderColor = clAlphaColor.clHexToColor('#890410');&lt;br /&gt;
    clProSettings.RoundHeight = 10;&lt;br /&gt;
    clProSettings.RoundWidth = 10;&lt;br /&gt;
    clProSettings.BorderWidth = 2;&lt;br /&gt;
    clProSettings.IsFill = True;&lt;br /&gt;
    clProSettings.IsRound = True;&lt;br /&gt;
    SetclProSettings(clProSettings);&lt;br /&gt;
&lt;br /&gt;
    TitleLabel = MyForm.AddNewProLabel(ProPanelTop, 'TitleLabel', 'Welcome to Clomosy!');&lt;br /&gt;
    with TitleLabel do&lt;br /&gt;
    {&lt;br /&gt;
      Align = alCenter;&lt;br /&gt;
      Width = 200;&lt;br /&gt;
      clProSettings.FontSize = 16;&lt;br /&gt;
      clProSettings.TextSettings.Font.Style = [fsBold];&lt;br /&gt;
      SetclProSettings(clProSettings);&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  MyForm.Run;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-warning&amp;quot; role=&amp;quot;alert&amp;quot; data-bs-theme=&amp;quot;light&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Avoid using multiple nested &amp;lt;b&amp;gt;with &amp;amp; do&amp;lt;/b&amp;gt; blocks whenever possible, as they can reduce readability and complicate debugging.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#seo:|title=With &amp;amp; Do Statement in Clomosy - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description=Learn how to use the with &amp;amp; do statement in Clomosy to simplify object property access and improve code readability.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=TclShareService&amp;diff=4080</id>
		<title>TclShareService</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=TclShareService&amp;diff=4080"/>
		<updated>2025-11-03T11:44:42Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;TclShareService&amp;lt;/b&amp;gt; class allows you to share files, images, or text content directly using the native sharing features of the device.  &lt;br /&gt;
It provides a simple way to integrate content sharing functions (such as sharing a document, CSV file, or text) in Clomosy applications with full Android and iOS support. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&amp;lt;b&amp;gt;TclShareService&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; : A component that enables sharing of files, images, or text through the system's default share dialog.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-info&amp;quot; role=&amp;quot;alert&amp;quot; data-bs-theme=&amp;quot;light&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; TclShareService is available on &amp;lt;b&amp;gt;Android&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;iOS&amp;lt;/b&amp;gt; platforms.  &lt;br /&gt;
On both systems, it uses the native share dialog to ensure a seamless user experience.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature  !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Definition &lt;br /&gt;
|-&lt;br /&gt;
|TclShareService ||ShareService : TclShareService; ||A variable belonging to the TclShareService class is created.&lt;br /&gt;
|-&lt;br /&gt;
|Create ||ShareService = TclShareService.Create; ||Creates a new instance of the share service.&lt;br /&gt;
|-&lt;br /&gt;
|Destroy ||ShareService.Destroy; ||Releases the share service object from memory.&lt;br /&gt;
|-&lt;br /&gt;
|AddFile ||ShareService.AddFile(Clomosy.AppFilesPath + DocName);||Adds a file to the sharing queue.&lt;br /&gt;
|-&lt;br /&gt;
|AddImage ||ShareService.AddImage(Image1.Bitmap);&lt;br /&gt;
 ||Adds an image to be shared.&lt;br /&gt;
|-&lt;br /&gt;
|AddText ||ShareService.AddText('This is a shared message'); ||Adds plain text content to be shared.&lt;br /&gt;
|-&lt;br /&gt;
|Share ||ShareService.Share; ||Opens the native device share dialog to perform the sharing action.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;b&amp;gt;TclShareService&amp;lt;/b&amp;gt; is typically used after generating or downloading a file (such as a PDF or CSV), or when you want to share text or images with other applications.  &lt;br /&gt;
You can add multiple items (files, images, or text) before calling the &amp;lt;code&amp;gt;Share&amp;lt;/code&amp;gt; method. Once &amp;lt;code&amp;gt;Share()&amp;lt;/code&amp;gt; is executed, the system’s default share interface appears, allowing the user to select how to share the content.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-danger&amp;quot; role=&amp;quot;alert&amp;quot; data-bs-theme=&amp;quot;light&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; When using the &amp;lt;b&amp;gt;AddImage&amp;lt;/b&amp;gt; property, you must provide a &amp;lt;b&amp;gt;Bitmap&amp;lt;/b&amp;gt; instance instead of a file path or URL.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Example&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var   &lt;br /&gt;
  Form1 : TclForm;&lt;br /&gt;
  BtnShare : TclProButton;&lt;br /&gt;
  ShareService : TclShareService;&lt;br /&gt;
&lt;br /&gt;
void OnShareBtnClick;&lt;br /&gt;
  var filePath, CSVText: string;&lt;br /&gt;
{&lt;br /&gt;
  filePath = Clomosy.AppFilesPath + 'demo_export.csv';&lt;br /&gt;
&lt;br /&gt;
  // Example CSV content&lt;br /&gt;
  CSVText = 'Name;Age;City' + #13#10 + &lt;br /&gt;
            'Alice;24;London' + #13#10 + &lt;br /&gt;
            'Bob;29;Paris';&lt;br /&gt;
&lt;br /&gt;
  // Save file to app directory&lt;br /&gt;
  clSaveToFile(filePath, CSVText);&lt;br /&gt;
&lt;br /&gt;
  // Initialize share service and share the file&lt;br /&gt;
  ShareService = TclShareService.Create;&lt;br /&gt;
  ShareService.AddFile(filePath);&lt;br /&gt;
  ShareService.Share;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void SetFormComponents;&lt;br /&gt;
{&lt;br /&gt;
  BtnShare = Form1.AddNewProButton(Form1, 'BtnShare', 'Share File');&lt;br /&gt;
  BtnShare.Align = alCenter;&lt;br /&gt;
  BtnShare.Width = 160;&lt;br /&gt;
  BtnShare.Height = 50;&lt;br /&gt;
  BtnShare.clProSettings.FontSize = 14;&lt;br /&gt;
  BtnShare.clProSettings.IsRound = True;&lt;br /&gt;
  BtnShare.clProSettings.RoundHeight = 15;&lt;br /&gt;
  BtnShare.clProSettings.RoundWidth = 15;&lt;br /&gt;
  BtnShare.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#565bad');&lt;br /&gt;
  BtnShare.clProSettings.FontColor = clAlphaColor.clHexToColor('#FFFFFF');&lt;br /&gt;
  BtnShare.SetclProSettings(BtnShare.clProSettings);&lt;br /&gt;
  BtnShare.OnClick = 'OnShareBtnClick';&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  Form1 = TclForm.Create(Self);&lt;br /&gt;
  SetFormComponents;&lt;br /&gt;
  Form1.Run;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{#seo:|title=TclShareService Usage in Clomosy - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description=Learn how to use the TclShareService class in Clomosy to share files, text, or images through native device sharing options.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=TclShareService&amp;diff=4079</id>
		<title>TclShareService</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=TclShareService&amp;diff=4079"/>
		<updated>2025-11-03T11:21:54Z</updated>

		<summary type="html">&lt;p&gt;Salih: Created page with &amp;quot; The &amp;lt;b&amp;gt;TclShareService&amp;lt;/b&amp;gt; class allows you to share files, images, or text content directly using the native sharing features of the device.   It provides a simple way to integrate content sharing functions (such as sharing a document, CSV file, or text) in Clomosy applications with full Android and iOS support. &amp;lt;br&amp;gt;  &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&amp;lt;b&amp;gt;TclShareService&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; : A component that enables sharing of files, images, or text through the system's default share di...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;TclShareService&amp;lt;/b&amp;gt; class allows you to share files, images, or text content directly using the native sharing features of the device.  &lt;br /&gt;
It provides a simple way to integrate content sharing functions (such as sharing a document, CSV file, or text) in Clomosy applications with full Android and iOS support. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&amp;lt;b&amp;gt;TclShareService&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; : A component that enables sharing of files, images, or text through the system's default share dialog.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature  !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Definition &lt;br /&gt;
|-&lt;br /&gt;
|TclShareService ||ShareService : TclShareService; ||A variable belonging to the TclShareService class is created.&lt;br /&gt;
|-&lt;br /&gt;
|Create ||ShareService = TclShareService.Create; ||Creates a new instance of the share service.&lt;br /&gt;
|-&lt;br /&gt;
|Destroy ||ShareService.Destroy; ||Releases the share service object from memory.&lt;br /&gt;
|-&lt;br /&gt;
|AddFile ||ShareService.AddFile(Clomosy.AppFilesPath + DocName);||Adds a file to the sharing queue.&lt;br /&gt;
|-&lt;br /&gt;
|AddImage ||ShareService.AddImage(Clomosy.AppFilesPath + 'image.png'); ||Adds an image to be shared.&lt;br /&gt;
|-&lt;br /&gt;
|AddText ||ShareService.AddText('This is a shared message'); ||Adds plain text content to be shared.&lt;br /&gt;
|-&lt;br /&gt;
|Share ||ShareService.Share; ||Opens the native device share dialog to perform the sharing action.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;b&amp;gt;TclShareService&amp;lt;/b&amp;gt; is typically used after generating or downloading a file (such as a PDF or CSV), or when you want to share text or images with other applications.  &lt;br /&gt;
You can add multiple items (files, images, or text) before calling the &amp;lt;code&amp;gt;Share&amp;lt;/code&amp;gt; method. Once &amp;lt;code&amp;gt;Share()&amp;lt;/code&amp;gt; is executed, the system’s default share interface appears, allowing the user to select how to share the content.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-warning&amp;quot; role=&amp;quot;alert&amp;quot; data-bs-theme=&amp;quot;light&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; TclShareService is available on &amp;lt;b&amp;gt;Android&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;iOS&amp;lt;/b&amp;gt; platforms.  &lt;br /&gt;
On both systems, it uses the native share dialog to ensure a seamless user experience.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Example&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var   &lt;br /&gt;
  Form1 : TclForm;&lt;br /&gt;
  BtnShare : TclProButton;&lt;br /&gt;
  ShareService : TclShareService;&lt;br /&gt;
&lt;br /&gt;
void OnShareBtnClick;&lt;br /&gt;
  var filePath, CSVText: string;&lt;br /&gt;
{&lt;br /&gt;
  filePath = Clomosy.AppFilesPath + 'demo_export.csv';&lt;br /&gt;
&lt;br /&gt;
  // Example CSV content&lt;br /&gt;
  CSVText = 'Name;Age;City' + #13#10 + &lt;br /&gt;
            'Alice;24;London' + #13#10 + &lt;br /&gt;
            'Bob;29;Paris';&lt;br /&gt;
&lt;br /&gt;
  // Save file to app directory&lt;br /&gt;
  clSaveToFile(filePath, CSVText);&lt;br /&gt;
&lt;br /&gt;
  // Initialize share service and share the file&lt;br /&gt;
  ShareService = TclShareService.Create;&lt;br /&gt;
  ShareService.AddFile(filePath);&lt;br /&gt;
  ShareService.Share;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void SetFormComponents;&lt;br /&gt;
{&lt;br /&gt;
  BtnShare = Form1.AddNewProButton(Form1, 'BtnShare', 'Share File');&lt;br /&gt;
  BtnShare.Align = alCenter;&lt;br /&gt;
  BtnShare.Width = 160;&lt;br /&gt;
  BtnShare.Height = 50;&lt;br /&gt;
  BtnShare.clProSettings.FontSize = 14;&lt;br /&gt;
  BtnShare.clProSettings.IsRound = True;&lt;br /&gt;
  BtnShare.clProSettings.RoundHeight = 15;&lt;br /&gt;
  BtnShare.clProSettings.RoundWidth = 15;&lt;br /&gt;
  BtnShare.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#565bad');&lt;br /&gt;
  BtnShare.clProSettings.FontColor = clAlphaColor.clHexToColor('#FFFFFF');&lt;br /&gt;
  BtnShare.SetclProSettings(BtnShare.clProSettings);&lt;br /&gt;
  BtnShare.OnClick = 'OnShareBtnClick';&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  Form1 = TclForm.Create(Self);&lt;br /&gt;
  SetFormComponents;&lt;br /&gt;
  Form1.Run;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{#seo:|title=TclShareService Usage in Clomosy - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description=Learn how to use the TclShareService class in Clomosy to share files, text, or images through native device sharing options.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=TclJSONPair&amp;diff=4078</id>
		<title>TclJSONPair</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=TclJSONPair&amp;diff=4078"/>
		<updated>2025-10-23T07:37:26Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;b&amp;gt;TCLJSONPair&amp;lt;/b&amp;gt; represents a single key–value association within a JSON object.&lt;br /&gt;
It functions as the fundamental element of TCLJSONObject, encapsulating both the property name &amp;lt;b&amp;gt;(key)&amp;lt;/b&amp;gt; and its corresponding &amp;lt;b&amp;gt;TCLJSONValue&amp;lt;/b&amp;gt; (value).&lt;br /&gt;
&lt;br /&gt;
This class provides a structured interface for examining, modifying, and transferring key/value pairs.&lt;br /&gt;
It is primarily utilized when accessing individual object members, iterating through object data, or transferring property definitions between JSON structures.&lt;br /&gt;
&lt;br /&gt;
'''TCLJSONPair''' ensures that each key and its associated value maintain valid JSON syntax and data type integrity.&lt;br /&gt;
It forms the basis for key/value management within the '''TCLJSON''' framework, supporting consistent and predictable JSON object manipulation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot; style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0; width:100%&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Definition&lt;br /&gt;
|-&lt;br /&gt;
| '''AddJsonPair''' || obj.AddJsonPair(pair); || Allows manual insertion of a predefined key/value pair into a TCLJSONObject. Useful when dynamically constructing or reusing pairs.&lt;br /&gt;
|-&lt;br /&gt;
| '''GetValueAsPair''' || pair = obj.GetValueAsPair(0); || Returns a TCLJSONPair reference representing both the key and value of a JSON property. Can be used to inspect or modify elements sequentially.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #28a745; background-color: #d4edda; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #28a745; padding-bottom: 5px;&amp;quot; | Important!&lt;br /&gt;
|-&lt;br /&gt;
|Modifying a '''TCLJSONPair''' directly does not automatically update the parent '''TCLJSONObject''' unless you reassign the modified pair back.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example: TCLJSONPair in Use ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var&lt;br /&gt;
  Form1: TClForm;&lt;br /&gt;
  ShowPairsBtn: TClProButton;&lt;br /&gt;
  OutputMemo: TClMemo;&lt;br /&gt;
  Obj: TCLJSONObject;&lt;br /&gt;
  Pair: TCLJSONPair;&lt;br /&gt;
  i: Integer;&lt;br /&gt;
&lt;br /&gt;
void CreateJSONObject;&lt;br /&gt;
{&lt;br /&gt;
  Obj = TCLJSONObject.Create;&lt;br /&gt;
&lt;br /&gt;
  Obj.AddPair('Username', TCLJSONValue.Str('ClomosyUser'));&lt;br /&gt;
  Obj.AddPair('Age', TCLJSONValue.Int(26));&lt;br /&gt;
  Obj.AddPair('Active', TCLJSONValue.Bool(True));&lt;br /&gt;
  Obj.AddPair('Role', TCLJSONValue.Str('Editor'));&lt;br /&gt;
&lt;br /&gt;
  OutputMemo.Lines.Text = 'Object created with 4 pairs.';&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void ShowPairs;&lt;br /&gt;
var&lt;br /&gt;
  valStr: string;&lt;br /&gt;
{&lt;br /&gt;
  OutputMemo.Lines.Clear;&lt;br /&gt;
&lt;br /&gt;
  for (i = 0 to Obj.Count - 1)&lt;br /&gt;
  {&lt;br /&gt;
    Pair = Obj.GetValueAsPair(i);&lt;br /&gt;
&lt;br /&gt;
    if (Pair.Value.IsString)&lt;br /&gt;
      valStr = Pair.Value.AsString;&lt;br /&gt;
    else if (Pair.Value.IsNumber)&lt;br /&gt;
      valStr = FloatToStr(Pair.Value.AsFloat);&lt;br /&gt;
    else if (Pair.Value.IsBoolean)&lt;br /&gt;
    {&lt;br /&gt;
      if (Pair.Value.AsBoolean)&lt;br /&gt;
        valStr = 'True';&lt;br /&gt;
      else&lt;br /&gt;
        valStr = 'False';&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
      valStr = '(Unknown Type)';&lt;br /&gt;
&lt;br /&gt;
    OutputMemo.Lines.Add(Pair.Key + ' = ' + valStr);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  Form1 = TClForm.Create(Self);&lt;br /&gt;
&lt;br /&gt;
  OutputMemo = Form1.AddNewMemo(Form1, 'OutputMemo', 'Pairs Output');&lt;br /&gt;
  OutputMemo.Align = alClient;&lt;br /&gt;
  OutputMemo.Margins.Top = 10;&lt;br /&gt;
  OutputMemo.Margins.Right = 10;&lt;br /&gt;
  OutputMemo.Margins.Left = 10;&lt;br /&gt;
  OutputMemo.Margins.Bottom = 10;&lt;br /&gt;
&lt;br /&gt;
  ShowPairsBtn = Form1.AddNewProButton(Form1, 'ShowPairsBtn', 'Show Pairs');&lt;br /&gt;
  ShowPairsBtn.Align = alBottom;&lt;br /&gt;
  ShowPairsBtn.Margins.Top = 10;&lt;br /&gt;
  ShowPairsBtn.Margins.Left = 10;&lt;br /&gt;
  ShowPairsBtn.Margins.Right = 10;&lt;br /&gt;
  ShowPairsBtn.Margins.Bottom = 10;&lt;br /&gt;
  ShowPairsBtn.OnClick = 'ShowPairs';&lt;br /&gt;
&lt;br /&gt;
  CreateJSONObject;&lt;br /&gt;
  Form1.Run;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Output:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:TclJSONPair.png|frameless|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; See Also &amp;lt;/h2&amp;gt;&lt;br /&gt;
* [[TclJSONValue]]&lt;br /&gt;
* [[TclJSONObject]]&lt;br /&gt;
* [[TclJSONArray]]&lt;br /&gt;
* [[TclJSON]]&lt;br /&gt;
&lt;br /&gt;
{{#seo:|title=TCLJSONPair Class - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description=Comprehensive documentation of the TCLJSONPair class, detailing its structure, purpose, and methods for managing key-value pairs within JSON objects in the TCLJSON framework.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=TclJSONPair&amp;diff=4077</id>
		<title>TclJSONPair</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=TclJSONPair&amp;diff=4077"/>
		<updated>2025-10-23T07:36:03Z</updated>

		<summary type="html">&lt;p&gt;Salih: Created page with &amp;quot;'''TCLJSONPair''' represents a single key–value association within a JSON object. It functions as the fundamental element of TCLJSONObject, encapsulating both the property name '''(key)''' and its corresponding '''TCLJSONValue''' (value).  This class provides a structured interface for examining, modifying, and transferring key/value pairs. It is primarily utilized when accessing individual object members, iterating through object data, or transferring property definit...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''TCLJSONPair''' represents a single key–value association within a JSON object.&lt;br /&gt;
It functions as the fundamental element of TCLJSONObject, encapsulating both the property name '''(key)''' and its corresponding '''TCLJSONValue''' (value).&lt;br /&gt;
&lt;br /&gt;
This class provides a structured interface for examining, modifying, and transferring key/value pairs.&lt;br /&gt;
It is primarily utilized when accessing individual object members, iterating through object data, or transferring property definitions between JSON structures.&lt;br /&gt;
&lt;br /&gt;
'''TCLJSONPair''' ensures that each key and its associated value maintain valid JSON syntax and data type integrity.&lt;br /&gt;
It forms the basis for key/value management within the '''TCLJSON''' framework, supporting consistent and predictable JSON object manipulation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot; style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0; width:100%&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Definition&lt;br /&gt;
|-&lt;br /&gt;
| '''AddJsonPair''' || obj.AddJsonPair(pair); || Allows manual insertion of a predefined key/value pair into a TCLJSONObject. Useful when dynamically constructing or reusing pairs.&lt;br /&gt;
|-&lt;br /&gt;
| '''GetValueAsPair''' || pair = obj.GetValueAsPair(0); || Returns a TCLJSONPair reference representing both the key and value of a JSON property. Can be used to inspect or modify elements sequentially.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #28a745; background-color: #d4edda; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #28a745; padding-bottom: 5px;&amp;quot; | Important!&lt;br /&gt;
|-&lt;br /&gt;
|Modifying a '''TCLJSONPair''' directly does not automatically update the parent '''TCLJSONObject''' unless you reassign the modified pair back.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example: TCLJSONPair in Use ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var&lt;br /&gt;
  Form1: TClForm;&lt;br /&gt;
  ShowPairsBtn: TClProButton;&lt;br /&gt;
  OutputMemo: TClMemo;&lt;br /&gt;
  Obj: TCLJSONObject;&lt;br /&gt;
  Pair: TCLJSONPair;&lt;br /&gt;
  i: Integer;&lt;br /&gt;
&lt;br /&gt;
void CreateJSONObject;&lt;br /&gt;
{&lt;br /&gt;
  Obj = TCLJSONObject.Create;&lt;br /&gt;
&lt;br /&gt;
  Obj.AddPair('Username', TCLJSONValue.Str('ClomosyUser'));&lt;br /&gt;
  Obj.AddPair('Age', TCLJSONValue.Int(26));&lt;br /&gt;
  Obj.AddPair('Active', TCLJSONValue.Bool(True));&lt;br /&gt;
  Obj.AddPair('Role', TCLJSONValue.Str('Editor'));&lt;br /&gt;
&lt;br /&gt;
  OutputMemo.Lines.Text = 'Object created with 4 pairs.';&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void ShowPairs;&lt;br /&gt;
var&lt;br /&gt;
  valStr: string;&lt;br /&gt;
{&lt;br /&gt;
  OutputMemo.Lines.Clear;&lt;br /&gt;
&lt;br /&gt;
  for (i = 0 to Obj.Count - 1)&lt;br /&gt;
  {&lt;br /&gt;
    Pair = Obj.GetValueAsPair(i);&lt;br /&gt;
&lt;br /&gt;
    if (Pair.Value.IsString)&lt;br /&gt;
      valStr = Pair.Value.AsString;&lt;br /&gt;
    else if (Pair.Value.IsNumber)&lt;br /&gt;
      valStr = FloatToStr(Pair.Value.AsFloat);&lt;br /&gt;
    else if (Pair.Value.IsBoolean)&lt;br /&gt;
    {&lt;br /&gt;
      if (Pair.Value.AsBoolean)&lt;br /&gt;
        valStr = 'True';&lt;br /&gt;
      else&lt;br /&gt;
        valStr = 'False';&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
      valStr = '(Unknown Type)';&lt;br /&gt;
&lt;br /&gt;
    OutputMemo.Lines.Add(Pair.Key + ' = ' + valStr);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  Form1 = TClForm.Create(Self);&lt;br /&gt;
&lt;br /&gt;
  OutputMemo = Form1.AddNewMemo(Form1, 'OutputMemo', 'Pairs Output');&lt;br /&gt;
  OutputMemo.Align = alClient;&lt;br /&gt;
  OutputMemo.Margins.Top = 10;&lt;br /&gt;
  OutputMemo.Margins.Right = 10;&lt;br /&gt;
  OutputMemo.Margins.Left = 10;&lt;br /&gt;
  OutputMemo.Margins.Bottom = 10;&lt;br /&gt;
&lt;br /&gt;
  ShowPairsBtn = Form1.AddNewProButton(Form1, 'ShowPairsBtn', 'Show Pairs');&lt;br /&gt;
  ShowPairsBtn.Align = alBottom;&lt;br /&gt;
  ShowPairsBtn.Margins.Top = 10;&lt;br /&gt;
  ShowPairsBtn.Margins.Left = 10;&lt;br /&gt;
  ShowPairsBtn.Margins.Right = 10;&lt;br /&gt;
  ShowPairsBtn.Margins.Bottom = 10;&lt;br /&gt;
  ShowPairsBtn.OnClick = 'ShowPairs';&lt;br /&gt;
&lt;br /&gt;
  CreateJSONObject;&lt;br /&gt;
  Form1.Run;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Output:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:TclJSONPair.png|frameless|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; See Also &amp;lt;/h2&amp;gt;&lt;br /&gt;
* [[TclJSONValue]]&lt;br /&gt;
* [[TclJSONObject]]&lt;br /&gt;
* [[TclJSONArray]]&lt;br /&gt;
* [[TclJSON]]&lt;br /&gt;
&lt;br /&gt;
{{#seo:|title=TCLJSONPair Class - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description=Comprehensive documentation of the TCLJSONPair class, detailing its structure, purpose, and methods for managing key-value pairs within JSON objects in the TCLJSON framework.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=File:TclJSONPair.png&amp;diff=4076</id>
		<title>File:TclJSONPair.png</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=File:TclJSONPair.png&amp;diff=4076"/>
		<updated>2025-10-23T07:03:07Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=TclJSONArray&amp;diff=4075</id>
		<title>TclJSONArray</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=TclJSONArray&amp;diff=4075"/>
		<updated>2025-10-22T15:17:04Z</updated>

		<summary type="html">&lt;p&gt;Salih: Created page with &amp;quot;The &amp;lt;b&amp;gt;TCLJSONArray&amp;lt;/b&amp;gt; represents a JSON array within the &amp;lt;b&amp;gt;TCLJSON&amp;lt;/b&amp;gt; library. It is a strongly typed container that can hold multiple JSON values, objects, or even other arrays, allowing developers to build hierarchical and complex JSON structures.   &amp;lt;div class=&amp;quot;table-responsive&amp;quot; style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt; {| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0; width:100%&amp;quot; ! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature ! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of ! s...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &amp;lt;b&amp;gt;TCLJSONArray&amp;lt;/b&amp;gt; represents a JSON array within the &amp;lt;b&amp;gt;TCLJSON&amp;lt;/b&amp;gt; library.&lt;br /&gt;
It is a strongly typed container that can hold multiple JSON values, objects, or even other arrays, allowing developers to build hierarchical and complex JSON structures.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot; style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0; width:100%&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Definition&lt;br /&gt;
|-&lt;br /&gt;
| '''Create''' || Arr = TCLJSONArray.Create; || Creates a new, empty JSON array instance.&lt;br /&gt;
|-&lt;br /&gt;
| '''CreateFromJSON(const AJSON: string)''' || Arr = TCLJSONArray.CreateFromJSON('[{&amp;quot;Name&amp;quot;:&amp;quot;Item1&amp;quot;}]'); || Parses a JSON string and initializes the array with its content.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddValue''' || Arr.AddValue(TCLJSONValue.Str('Hello')); || Adds a single JSON value to the end of the array.&lt;br /&gt;
|-&lt;br /&gt;
| '''GetItem''' || val = Arr.GetItem(0); || Retrieves the value at the specified index in the array.&lt;br /&gt;
|-&lt;br /&gt;
| '''Count''' || n = Arr.Count; || Returns the number of elements in the array.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddObject''' || Arr.AddObject(obj); || Adds a JSON object to the array as a new element.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddArray''' || Arr.AddArray(subArray); || Adds another JSON array as an element within this array.&lt;br /&gt;
|-&lt;br /&gt;
| '''Remove''' || Arr.Remove(Arr.Count - 1); || Removes the element at the specified index from the array.&lt;br /&gt;
|-&lt;br /&gt;
| '''RemoveValue''' || Arr.RemoveValue(val); || Removes the first occurrence of the specified JSON value from the array.&lt;br /&gt;
|-&lt;br /&gt;
| '''Clone''' || copyArr = Arr.Clone; || Creates a deep copy of the array and all its elements.&lt;br /&gt;
|-&lt;br /&gt;
| '''Merge''' || Arr.Merge(otherArr); || Appends all elements from another array into this array.&lt;br /&gt;
|-&lt;br /&gt;
| '''ToJSONString''' || jsonText = Arr.ToJSONString; || Returns the JSON-formatted string representation of the array.&lt;br /&gt;
|-&lt;br /&gt;
| '''Clear''' || Arr.Clear; || Removes all elements from the array, leaving it empty.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #28a745; background-color: #d4edda; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #28a745; padding-bottom: 5px;&amp;quot; | Hint!&lt;br /&gt;
|-&lt;br /&gt;
| Use '''GetItem''' and '''Count''' to safely iterate over the array without causing out-of-bounds errors.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example: TCLJSONArray in Use ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var&lt;br /&gt;
  Form1: TClForm;&lt;br /&gt;
  AddBtn, RemoveBtn, ShowBtn: TClProButton;&lt;br /&gt;
  InputEdt: TClProEdit;&lt;br /&gt;
  ItemsMemo: TClMemo;&lt;br /&gt;
  Arr: TCLJSONArray;&lt;br /&gt;
&lt;br /&gt;
void CreateControls;&lt;br /&gt;
{&lt;br /&gt;
  InputEdt = Form1.AddNewProEdit(Form1, 'InputEdt', 'Enter item name...');&lt;br /&gt;
  InputEdt.Align = alTop;&lt;br /&gt;
  InputEdt.Height = 35;&lt;br /&gt;
  InputEdt.Margins.Top = 10;&lt;br /&gt;
&lt;br /&gt;
  AddBtn = Form1.AddNewProButton(Form1, 'AddBtn', 'Add Item');&lt;br /&gt;
  AddBtn.Align = alTop;&lt;br /&gt;
  AddBtn.Margins.Top = 10;&lt;br /&gt;
  AddBtn.OnClick = 'AddItem';&lt;br /&gt;
&lt;br /&gt;
  RemoveBtn = Form1.AddNewProButton(Form1, 'RemoveBtn', 'Remove Last');&lt;br /&gt;
  RemoveBtn.Align = alTop;&lt;br /&gt;
  RemoveBtn.Margins.Top = 10;&lt;br /&gt;
  RemoveBtn.OnClick = 'RemoveItem';&lt;br /&gt;
&lt;br /&gt;
  ShowBtn = Form1.AddNewProButton(Form1, 'ShowBtn', 'Show JSON');&lt;br /&gt;
  ShowBtn.Align = alTop;&lt;br /&gt;
  ShowBtn.Margins.Top = 10;&lt;br /&gt;
  ShowBtn.OnClick = 'ShowJSON';&lt;br /&gt;
&lt;br /&gt;
  ItemsMemo = Form1.AddNewMemo(Form1, 'ItemsMemo','');&lt;br /&gt;
  ItemsMemo.Align = alClient;&lt;br /&gt;
  ItemsMemo.Margins.Top = 10;&lt;br /&gt;
  ItemsMemo.ReadOnly = True;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void RefreshMemo;&lt;br /&gt;
var&lt;br /&gt;
  i: Integer;&lt;br /&gt;
  item: TCLJSONObject;&lt;br /&gt;
  lineStr: string;&lt;br /&gt;
{&lt;br /&gt;
  ItemsMemo.Lines.Clear;&lt;br /&gt;
&lt;br /&gt;
  for (i = 0 to Arr.Count - 1) &lt;br /&gt;
  {&lt;br /&gt;
    item = Arr.GetItem(i); &lt;br /&gt;
    lineStr = item.GetValueByPath('Name').AsString + ' (' + item.GetValueByPath('CreatedAt').AsString + ')';&lt;br /&gt;
    ItemsMemo.Lines.Add(lineStr);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void AddItem;&lt;br /&gt;
var&lt;br /&gt;
  nameStr: string;&lt;br /&gt;
  ItemObj: TCLJSONObject;&lt;br /&gt;
{&lt;br /&gt;
  nameStr = InputEdt.Text;&lt;br /&gt;
&lt;br /&gt;
  if (nameStr == '') &lt;br /&gt;
  {&lt;br /&gt;
    ShowMessage('Please enter an item name.');&lt;br /&gt;
    exit;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  ItemObj = TCLJSONObject.Create;&lt;br /&gt;
  ItemObj.AddPair('Name', TCLJSONValue.Str(nameStr));&lt;br /&gt;
  ItemObj.AddPair('CreatedAt', TCLJSONValue.Str(DateTimeToStr(Now)));&lt;br /&gt;
&lt;br /&gt;
  Arr.AddObject(ItemObj);&lt;br /&gt;
  RefreshMemo;&lt;br /&gt;
&lt;br /&gt;
  InputEdt.Text = '';&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void RemoveItem;&lt;br /&gt;
{&lt;br /&gt;
  if (Arr.Count &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
    Arr.Remove(Arr.Count - 1);&lt;br /&gt;
    RefreshMemo;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
    ShowMessage('Array is empty.');&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void ShowJSON;&lt;br /&gt;
{&lt;br /&gt;
  ShowMessage('Current JSON:' + #13#10 + Arr.ToJSONString);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  Form1 = TClForm.Create(Self);&lt;br /&gt;
  Arr = TCLJSONArray.Create;&lt;br /&gt;
&lt;br /&gt;
  CreateControls;&lt;br /&gt;
  Form1.Run;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Output:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:TclJSONArray.gif|frameless|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; See Also &amp;lt;/h2&amp;gt;&lt;br /&gt;
* [[TclJSONValue]]&lt;br /&gt;
* [[TclJSONObject]]&lt;br /&gt;
* [[TclJSONPair]]&lt;br /&gt;
* [[TclJSON]]&lt;br /&gt;
&lt;br /&gt;
{{#seo:|title=TCLJSONArray Class - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description=Detailed documentation of TCLJSONArray class, including features, methods, Types, and practical examples for JSON Array's.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=File:TclJSONArray.gif&amp;diff=4074</id>
		<title>File:TclJSONArray.gif</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=File:TclJSONArray.gif&amp;diff=4074"/>
		<updated>2025-10-22T15:04:18Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=TclJSONValue&amp;diff=4073</id>
		<title>TclJSONValue</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=TclJSONValue&amp;diff=4073"/>
		<updated>2025-10-22T14:40:38Z</updated>

		<summary type="html">&lt;p&gt;Salih: Created page with &amp;quot; The &amp;lt;b&amp;gt;TCLJSONValue&amp;lt;/b&amp;gt; represents the fundamental data element within the TCLJSON library. It serves as a strongly typed container for all supported JSON data types, including &amp;lt;b&amp;gt;string, number, boolean, null, and datetime.&amp;lt;/b&amp;gt;   &amp;lt;div class=&amp;quot;table-responsive&amp;quot; style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt; {| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0; width:100%&amp;quot; ! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature ! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of ! style=&amp;quot;background-color:...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;TCLJSONValue&amp;lt;/b&amp;gt; represents the fundamental data element within the TCLJSON library.&lt;br /&gt;
It serves as a strongly typed container for all supported JSON data types, including &amp;lt;b&amp;gt;string, number, boolean, null, and datetime.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot; style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0; width:100%&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Definition&lt;br /&gt;
|-&lt;br /&gt;
| '''Create(AValue: TJSONValue)''' || val = TCLJSONValue.Create(SomeJSONValue); || Initializes a TCLJSONValue instance by wrapping an existing TJSONValue reference.&lt;br /&gt;
|-&lt;br /&gt;
| '''AsString''' || text = val.AsString; || Returns the stored value as a string if its type is string-compatible.&lt;br /&gt;
|-&lt;br /&gt;
| '''AsInteger''' || num = val.AsInteger; || Converts and retrieves the value as an integer type.&lt;br /&gt;
|-&lt;br /&gt;
| '''AsFloat''' || fnum = val.AsFloat; || Retrieves the numeric value as a floating-point number.&lt;br /&gt;
|-&lt;br /&gt;
| '''AsBoolean''' || flag = val.AsBoolean; || Returns the stored value as a boolean (True or False).&lt;br /&gt;
|-&lt;br /&gt;
| '''AsDateTime''' || dt = val.AsDateTime; || Retrieves the stored value as a TDateTime object if it represents a date/time.&lt;br /&gt;
|-&lt;br /&gt;
| '''IsNull''' || val.IsNull || Checks whether the current value is null.&lt;br /&gt;
|-&lt;br /&gt;
| '''IsString''' || val.IsString || Returns True if the value is a string type.&lt;br /&gt;
|-&lt;br /&gt;
| '''IsNumber''' ||val.IsNumber|| Returns True if the value is numeric (integer or float).&lt;br /&gt;
|-&lt;br /&gt;
| '''IsBoolean''' || val.IsBoolean  || Returns True if the value represents a boolean type.&lt;br /&gt;
|-&lt;br /&gt;
| '''IsDateTime''' || val.IsDateTime || Returns True if the stored value is a date/time type.&lt;br /&gt;
|-&lt;br /&gt;
| '''ToString''' || jsonText = val.ToString; || Converts the internal value to its JSON-compatible string representation.&lt;br /&gt;
|-&lt;br /&gt;
| '''GetValueByPath''' || childVal = val.GetValueByPath('data.user.name'); || Retrieves a nested JSON value using dot notation within a hierarchical structure.&lt;br /&gt;
|-&lt;br /&gt;
| '''Str''' || val = TCLJSONValue.Str('Hello'); || Creates a TCLJSONValue instance representing a string type.&lt;br /&gt;
|-&lt;br /&gt;
| '''Num''' || val = TCLJSONValue.Num(25.75); || Creates a TCLJSONValue instance containing a floating-point number.&lt;br /&gt;
|-&lt;br /&gt;
| '''Int''' || val = TCLJSONValue.Int(100); || Creates a TCLJSONValue instance representing an integer number.&lt;br /&gt;
|-&lt;br /&gt;
| '''Bool''' || val = TCLJSONValue.Bool(True); || Creates a TCLJSONValue instance representing a boolean value.&lt;br /&gt;
|-&lt;br /&gt;
| '''DT''' || val = TCLJSONValue.DT(Now); || Creates a TCLJSONValue instance containing a TDateTime value.&lt;br /&gt;
|-&lt;br /&gt;
| '''Null''' || val = TCLJSONValue.Null; || Creates a TCLJSONValue instance representing a null JSON value.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #28a745; background-color: #d4edda; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #28a745; padding-bottom: 5px;&amp;quot; | Important: Data Type&lt;br /&gt;
|-&lt;br /&gt;
| Avoid mixing data types when reading or writing JSON values; each accessor ('''AsString''', '''AsFloat''') must correspond to the original type.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example: TCLJSONValue in Use ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var&lt;br /&gt;
  MyForm: TClForm;&lt;br /&gt;
  InputEdt: TClProEdit;&lt;br /&gt;
  StrBtn, NumBtn, BoolBtn, CheckBtn, ClearBtn: TClProButton;&lt;br /&gt;
  OutputMemo: TClMemo;&lt;br /&gt;
  JVal: TCLJSONValue;&lt;br /&gt;
&lt;br /&gt;
void CreateStringValue&lt;br /&gt;
{&lt;br /&gt;
  JVal = TCLJSONValue.Str(InputEdt.Text);&lt;br /&gt;
  OutputMemo.Lines.Text = 'String Value: ' + JVal.AsString;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void CreateNumberValue&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  JVal = TCLJSONValue.Num(StrToFloat(InputEdt.Text));&lt;br /&gt;
  OutputMemo.Lines.Text = 'Number Value: ' + FloatToStr(JVal.AsFloat);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void CreateBooleanValue&lt;br /&gt;
var&lt;br /&gt;
  inputLower: string;&lt;br /&gt;
{&lt;br /&gt;
  inputLower = LowerCase(Trim(InputEdt.Text));&lt;br /&gt;
  if ((inputLower == 'true') || (inputLower == '1') || (inputLower == 'yes'))&lt;br /&gt;
    JVal = TCLJSONValue.Bool(True)&lt;br /&gt;
  else&lt;br /&gt;
    JVal = TCLJSONValue.Bool(False);&lt;br /&gt;
&lt;br /&gt;
  if (JVal.AsBoolean)&lt;br /&gt;
    OutputMemo.Lines.Text = 'Boolean Value: True'&lt;br /&gt;
  else&lt;br /&gt;
    OutputMemo.Lines.Text = 'Boolean Value: False';&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void CheckValueType&lt;br /&gt;
var&lt;br /&gt;
  info: string;&lt;br /&gt;
{&lt;br /&gt;
  if (JVal.IsNull)&lt;br /&gt;
    info = 'Type: Null'&lt;br /&gt;
  else if (JVal.IsNumber)&lt;br /&gt;
    info = 'Type: Number'&lt;br /&gt;
  else if (JVal.IsString)&lt;br /&gt;
    info = 'Type: String'&lt;br /&gt;
  else if (JVal.IsBoolean)&lt;br /&gt;
    info = 'Type: Boolean'&lt;br /&gt;
  else if (JVal.IsDateTime)&lt;br /&gt;
    info = 'Type: DateTime'&lt;br /&gt;
  else&lt;br /&gt;
    info = 'Unknown type';&lt;br /&gt;
&lt;br /&gt;
  ShowMessage(info);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void ClearValue&lt;br /&gt;
{&lt;br /&gt;
  JVal = TCLJSONValue.Null;&lt;br /&gt;
  OutputMemo.Lines.Text = 'Value cleared (Null)';&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  MyForm = TClForm.Create(Self);&lt;br /&gt;
&lt;br /&gt;
  InputEdt = MyForm.AddNewProEdit(MyForm, 'InputEdt', 'Enter a value...');&lt;br /&gt;
  InputEdt.Align = alTop;&lt;br /&gt;
  InputEdt.Height = 35;&lt;br /&gt;
  InputEdt.Margins.Left = 10;&lt;br /&gt;
  InputEdt.Margins.Right = 10;&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
  OutputMemo = MyForm.AddNewMemo(MyForm, 'OutputMemo', 'Output');&lt;br /&gt;
  OutputMemo.Align = alClient;&lt;br /&gt;
  OutputMemo.Height = 150;&lt;br /&gt;
  OutputMemo.Margins.Left = 10;&lt;br /&gt;
  OutputMemo.Margins.Right = 10;&lt;br /&gt;
  OutputMemo.TextSettings.WordWrap = True;&lt;br /&gt;
&lt;br /&gt;
  StrBtn = MyForm.AddNewProButton(MyForm, 'StrBtn', 'Create String Value');&lt;br /&gt;
  StrBtn.Align = alBottom;&lt;br /&gt;
  StrBtn.OnClick = 'CreateStringValue';&lt;br /&gt;
&lt;br /&gt;
  NumBtn = MyForm.AddNewProButton(MyForm, 'NumBtn', 'Create Number Value');&lt;br /&gt;
  NumBtn.Align = alBottom;&lt;br /&gt;
  NumBtn.OnClick = 'CreateNumberValue';&lt;br /&gt;
&lt;br /&gt;
  BoolBtn = MyForm.AddNewProButton(MyForm, 'BoolBtn', 'Create Boolean Value');&lt;br /&gt;
  BoolBtn.Align = alBottom;&lt;br /&gt;
  BoolBtn.OnClick = 'CreateBooleanValue';&lt;br /&gt;
&lt;br /&gt;
  CheckBtn = MyForm.AddNewProButton(MyForm, 'CheckBtn', 'Check Value Type');&lt;br /&gt;
  CheckBtn.Align = alBottom;&lt;br /&gt;
  CheckBtn.OnClick = 'CheckValueType';&lt;br /&gt;
&lt;br /&gt;
  ClearBtn = MyForm.AddNewProButton(MyForm, 'ClearBtn', 'Clear Value');&lt;br /&gt;
  ClearBtn.Align = alBottom;&lt;br /&gt;
  ClearBtn.OnClick = 'ClearValue';&lt;br /&gt;
&lt;br /&gt;
  MyForm.Run;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Output:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:TclJSONValue.png|frameless|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; See Also &amp;lt;/h2&amp;gt;&lt;br /&gt;
* [[TclJSONArray]]&lt;br /&gt;
* [[TclJSONObject]]&lt;br /&gt;
* [[TclJSONPair]]&lt;br /&gt;
* [[TclJSON]]&lt;br /&gt;
&lt;br /&gt;
{{#seo:|title=TCLJSONValue Class - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description=Detailed documentation of TCLJSONValue class, including features, methods, Types, and practical examples for JSON Value control.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=File:TclJSONValue.png&amp;diff=4072</id>
		<title>File:TclJSONValue.png</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=File:TclJSONValue.png&amp;diff=4072"/>
		<updated>2025-10-22T13:59:28Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=TclJSONObject&amp;diff=4071</id>
		<title>TclJSONObject</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=TclJSONObject&amp;diff=4071"/>
		<updated>2025-10-22T13:01:27Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;TCLJSONObject&amp;lt;/b&amp;gt; class represents a JSON object composed of key–value pairs.  &lt;br /&gt;
It provides structured methods to add, remove, clone, merge, and retrieve data.  &lt;br /&gt;
Objects can contain nested objects or arrays, allowing hierarchical and deeply structured JSON representations.  &lt;br /&gt;
TCLJSONObject ensures type safety by operating with &amp;lt;b&amp;gt;TCLJSONValue&amp;lt;/b&amp;gt;, preventing data inconsistency during serialization and deserialization.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #007bff; background-color: #e6f7ff; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #007bff; padding-bottom: 5px;&amp;quot; | Information: JSON Object Structure&lt;br /&gt;
|-&lt;br /&gt;
| A JSON object is an unordered collection of name–value pairs, where each name is a string and the value may be a string, number, boolean, array, or another object.&lt;br /&gt;
|-&lt;br /&gt;
| Example:  {&amp;quot;name&amp;quot;:&amp;quot;Alice&amp;quot;,&amp;quot;age&amp;quot;:25,&amp;quot;active&amp;quot;:true}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot; style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0; width:100%&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Definition&lt;br /&gt;
|-&lt;br /&gt;
| '''AddPair''' || obj.AddPair('name', TCLJSONValue.Str('John')); || Adds a new key–value pair to the JSON object. Updates the value if the key already exists.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddObject''' || obj.AddObject('address', childObj); || Adds a new JSON object under the specified key, enabling nested structures.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddArray''' || obj.AddArray('items', arr); || Stores a JSON array under the specified key, supporting complex data structures.&lt;br /&gt;
|-&lt;br /&gt;
| '''RemovePair''' || obj.RemovePair('age'); || Removes the key–value pair with the specified key name from the JSON object.&lt;br /&gt;
|-&lt;br /&gt;
| '''GetValue''' || val = obj.GetValue('name'); || Returns the value for the specified key. Returns nil if the key does not exist.&lt;br /&gt;
|-&lt;br /&gt;
| '''SetValue''' || obj.SetValue('active', TCLJSONValue.Bool(False)); || Updates the value of an existing key or adds the key if it doesn’t exist.&lt;br /&gt;
|-&lt;br /&gt;
| '''GetValueByPath''' || val = obj.GetValueByPath('address.city'); || Provides direct access to nested values using dot notation, e.g., &amp;quot;address.city&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| '''GetValueAsPair''' || pair = obj.GetValueAsPair(0); || Returns the key–value pair at the specified index. Useful for iteration.&lt;br /&gt;
|-&lt;br /&gt;
| '''HasKey''' || obj.HasKey('status'); || Checks whether the specified key exists in the JSON object.&lt;br /&gt;
|-&lt;br /&gt;
| '''Clone''' || copyObj = obj.Clone; || Creates a deep copy of the JSON object, completely independent of the original.&lt;br /&gt;
|-&lt;br /&gt;
| '''Merge''' || obj.Merge(extraObj); || Merges all key–value pairs from another JSON object into the current one. Overwrites existing keys.&lt;br /&gt;
|-&lt;br /&gt;
| '''ToJSONString''' || jsonStr = obj.ToJSONString; || Converts the object to a formatted JSON string for file saving or data transmission.&lt;br /&gt;
|-&lt;br /&gt;
| '''Count''' || count = obj.Count; || Returns the total number of key–value pairs in the JSON object.&lt;br /&gt;
|-&lt;br /&gt;
| '''Clear''' || obj.Clear; || Completely clears the object, removing all stored data.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #28a745; background-color: #d4edda; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #28a745; padding-bottom: 5px;&amp;quot; | Important: Nested Object Access&lt;br /&gt;
|-&lt;br /&gt;
| Use &amp;lt;code&amp;gt;GetValueByPath&amp;lt;/code&amp;gt; to access deeply nested elements.  &lt;br /&gt;
Example: &amp;lt;code&amp;gt;user.GetValueByPath('account.details.email')&amp;lt;/code&amp;gt; returns the email value from a nested JSON structure.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-info shadow-sm rounded-4 p-3&amp;quot; style=&amp;quot;border-left:6px solid #0d6efd;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h4 class=&amp;quot;mb-2&amp;quot;&amp;gt;Important Notes&amp;lt;/h4&amp;gt;&lt;br /&gt;
  &amp;lt;ul style=&amp;quot;margin-left:10px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;All key names in &amp;lt;code&amp;gt;TCLJSONObject&amp;lt;/code&amp;gt; are case-sensitive.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Nested paths must use dot notation.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;When merging objects, existing keys are overwritten by the new object’s values.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Use &amp;lt;code&amp;gt;Clone&amp;lt;/code&amp;gt; for duplication instead of manual re-construction to preserve data integrity.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Always free JSON objects after use to avoid memory leaks.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example: TCLJSONObject in Use ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var&lt;br /&gt;
  MyForm: TClForm;&lt;br /&gt;
  NameEdt, AgeEdt, CityEdt: TClProEdit;&lt;br /&gt;
  ActiveChk: TClCheckBox;&lt;br /&gt;
  CreateBtn, MergeBtn, ShowBtn: TClProButton;&lt;br /&gt;
  OutputMemo: TClMemo;&lt;br /&gt;
  Obj, Child, Extra: TCLJSONObject;&lt;br /&gt;
  Val: TCLJSONValue;&lt;br /&gt;
&lt;br /&gt;
void CreateJSONObject&lt;br /&gt;
{&lt;br /&gt;
  Obj = TCLJSONObject.Create;&lt;br /&gt;
  Child = TCLJSONObject.Create;&lt;br /&gt;
  Extra = TCLJSONObject.Create;&lt;br /&gt;
&lt;br /&gt;
  // User input values&lt;br /&gt;
  Obj.AddPair('name', TCLJSONValue.Str(NameEdt.Text));&lt;br /&gt;
  Obj.AddPair('age', TCLJSONValue.Int(StrToIntDef(AgeEdt.Text, 0)));&lt;br /&gt;
  Obj.AddPair('active', TCLJSONValue.Bool(ActiveChk.IsChecked));&lt;br /&gt;
&lt;br /&gt;
  // Nested object (address)&lt;br /&gt;
  Child.AddPair('city', TCLJSONValue.Str(CityEdt.Text));&lt;br /&gt;
  Obj.AddObject('address', Child);&lt;br /&gt;
&lt;br /&gt;
  // Merge with extra info&lt;br /&gt;
  Extra.AddPair('status', TCLJSONValue.Str('OK'));&lt;br /&gt;
  Obj.Merge(Extra);&lt;br /&gt;
&lt;br /&gt;
  // Show final JSON&lt;br /&gt;
  OutputMemo.Lines.Text = Obj.ToJSONString;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void ShowNestedValue&lt;br /&gt;
{&lt;br /&gt;
  Val = Obj.GetValueByPath('address.city');&lt;br /&gt;
  ShowMessage('City: ' + Val.AsString);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void MergeExample&lt;br /&gt;
var&lt;br /&gt;
  NewObj: TCLJSONObject;&lt;br /&gt;
{&lt;br /&gt;
  NewObj = TCLJSONObject.Create;&lt;br /&gt;
  NewObj.AddPair('role', TCLJSONValue.Str('Admin'));&lt;br /&gt;
  Obj.Merge(NewObj);&lt;br /&gt;
  OutputMemo.Lines.Text = Obj.ToJSONString;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  MyForm = TClForm.Create(Self);&lt;br /&gt;
&lt;br /&gt;
  // Input fields&lt;br /&gt;
  NameEdt = MyForm.AddNewProEdit(MyForm, 'NameEdt', 'Enter name...');&lt;br /&gt;
  NameEdt.Align = alTop;&lt;br /&gt;
  NameEdt.Height = 35;&lt;br /&gt;
  NameEdt.Margins.Top = 10;&lt;br /&gt;
  NameEdt.Margins.Left = 10;&lt;br /&gt;
  NameEdt.Margins.Bottom = 10;&lt;br /&gt;
  NameEdt.Margins.Right = 10;&lt;br /&gt;
&lt;br /&gt;
  AgeEdt = MyForm.AddNewProEdit(MyForm, 'AgeEdt', 'Enter age...');&lt;br /&gt;
  AgeEdt.Align = alTop;&lt;br /&gt;
  AgeEdt.Height = 35;&lt;br /&gt;
  AgeEdt.Margins.Top = 10;&lt;br /&gt;
  AgeEdt.Margins.Right = 10;&lt;br /&gt;
  AgeEdt.Margins.Left = 10;&lt;br /&gt;
  AgeEdt.Margins.Bottom = 10;&lt;br /&gt;
&lt;br /&gt;
  CityEdt = MyForm.AddNewProEdit(MyForm, 'CityEdt', 'Enter city...');&lt;br /&gt;
  CityEdt.Align = alTop;&lt;br /&gt;
  CityEdt.Height = 35;&lt;br /&gt;
  CityEdt.Margins.Top = 10;&lt;br /&gt;
  CityEdt.Margins.Right = 10;&lt;br /&gt;
  CityEdt.Margins.Left = 10;&lt;br /&gt;
  CityEdt.Margins.Bottom = 10;&lt;br /&gt;
&lt;br /&gt;
  ActiveChk = MyForm.AddNewCheckBox(MyForm, 'ActiveChk', 'Is Active?');&lt;br /&gt;
  ActiveChk.Align = alTop;&lt;br /&gt;
  ActiveChk.Margins.Left = 10;&lt;br /&gt;
&lt;br /&gt;
  // Output area&lt;br /&gt;
  OutputMemo = MyForm.AddNewMemo(MyForm, 'OutputMemo', 'JSON Output');&lt;br /&gt;
  OutputMemo.Align = alClient;&lt;br /&gt;
  OutputMemo.Height = 180;&lt;br /&gt;
  OutputMemo.Margins.Left = 10;&lt;br /&gt;
  OutputMemo.Margins.Right = 10;&lt;br /&gt;
  OutputMemo.TextSettings.WordWrap = True;&lt;br /&gt;
&lt;br /&gt;
  // Buttons&lt;br /&gt;
  CreateBtn = MyForm.AddNewProButton(MyForm, 'CreateBtn', 'Create JSON Object');&lt;br /&gt;
  CreateBtn.Align = alBottom;&lt;br /&gt;
  CreateBtn.OnClick = 'CreateJSONObject';&lt;br /&gt;
&lt;br /&gt;
  ShowBtn = MyForm.AddNewProButton(MyForm, 'ShowBtn', 'Show Nested Value');&lt;br /&gt;
  ShowBtn.Align = alBottom;&lt;br /&gt;
  ShowBtn.OnClick = 'ShowNestedValue';&lt;br /&gt;
&lt;br /&gt;
  MergeBtn = MyForm.AddNewProButton(MyForm, 'MergeBtn', 'Merge Extra Object');&lt;br /&gt;
  MergeBtn.Align = alBottom;&lt;br /&gt;
  MergeBtn.OnClick = 'MergeExample';&lt;br /&gt;
&lt;br /&gt;
  MyForm.Run;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Output:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:TCLJSONObject.png|frameless|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; See Also &amp;lt;/h2&amp;gt;&lt;br /&gt;
* [[TclJSONArray]]&lt;br /&gt;
* [[TclJSONValue]]&lt;br /&gt;
* [[TclJSONPair]]&lt;br /&gt;
* [[TclJSON]]&lt;br /&gt;
&lt;br /&gt;
{{#seo:|title=TCLJSONObject Class - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description=Detailed documentation of TCLJSONObject class, including features, methods, nested path access, and practical examples for JSON object manipulation.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=File:TCLJSONObject.png&amp;diff=4070</id>
		<title>File:TCLJSONObject.png</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=File:TCLJSONObject.png&amp;diff=4070"/>
		<updated>2025-10-22T12:57:57Z</updated>

		<summary type="html">&lt;p&gt;Salih: Salih uploaded a new version of File:TCLJSONObject.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=File:TCLJSONExample2.png&amp;diff=4069</id>
		<title>File:TCLJSONExample2.png</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=File:TCLJSONExample2.png&amp;diff=4069"/>
		<updated>2025-10-22T12:33:50Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=TclJSON&amp;diff=4068</id>
		<title>TclJSON</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=TclJSON&amp;diff=4068"/>
		<updated>2025-10-22T12:31:29Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TCLJSON is a structured and type-safe JSON processing library designed to facilitate the creation, manipulation, and validation of JSON data. It enables the definition of objects, arrays, and values representing standard JSON types, including strings, numbers, booleans, and null elements.&lt;br /&gt;
&lt;br /&gt;
The library provides mechanisms for constructing hierarchical data models, performing key-value pair operations, merging multiple JSON structures, and retrieving nested elements through deep path access. TCLJSON ensures strict compliance with JSON syntax rules, offering validation methods to verify data integrity during parsing and serialization.&lt;br /&gt;
&lt;br /&gt;
In addition to in-memory operations, TCLJSON supports persistent data handling through file-based loading and saving of JSON content. Its strongly typed architecture promotes reliability, consistency, and maintainability in applications that require structured data representation, configuration management, or data exchange using the JSON format.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #007bff; background-color: #e6f7ff; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #007bff; padding-bottom: 5px;&amp;quot; | Information: What is TCLJSON?&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding-top: 5px;&amp;quot; | TCLJSON allows you to create, manipulate, and serialize JSON data structures. It supports nested objects, arrays, type-safe values, deep path access, merging, cloning, and file operations.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot; style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
! Class !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[TclJSONArray]] || Represents a JSON array with ordered values. Supports adding/removing values or objects, merging, cloning, and enumeration.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclJSONObject]] || Represents a JSON object with key-value pairs. Provides methods for adding, removing, merging, cloning, and deep path access.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclJSONPair]] || Represents a single key-value pair inside a JSON object.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclJSONValue]] || Encapsulates a JSON value (string, integer, number, boolean, datetime, or null) and provides type-safe methods.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #28a745; background-color: #d4edda; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #28a745; padding-bottom: 5px;&amp;quot; | Dont Forget!&lt;br /&gt;
|-&lt;br /&gt;
| When working with nested objects or arrays, always free created JSON instances ('''Obj.Free;''', '''Arr.Free;''') after use to prevent memory leaks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Also, ensure all JSON strings are '''UTF-8''' encoded before parsing to avoid character mismatches during validation.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot; style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0; width:100%&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Definition&lt;br /&gt;
|-&lt;br /&gt;
| '''ParseToJSONObject''' || obj = TCLJSON.ParseToJSONObject(jsonStr); || Parses a JSON string into a TCLJSONObject.&lt;br /&gt;
|-&lt;br /&gt;
| '''ParseObjectToString''' || jsonStr = TCLJSON.ParseObjectToString(obj); || Converts a TCLJSONObject to a JSON string.&lt;br /&gt;
|-&lt;br /&gt;
| '''ParseToJSONArray''' || arr = TCLJSON.ParseToJSONArray(jsonStr); || Parses a JSON string into a TCLJSONArray.&lt;br /&gt;
|-&lt;br /&gt;
| '''ParseArrayToString''' || jsonStr = TCLJSON.ParseArrayToString(arr); || Converts a TCLJSONArray to a JSON string.&lt;br /&gt;
|-&lt;br /&gt;
| '''LoadObjectFromFile''' || obj = TCLJSON.LoadObjectFromFile('data.json'); || Loads a JSON object from a file.&lt;br /&gt;
|-&lt;br /&gt;
| '''SaveObjectToFile''' || TCLJSON.SaveObjectToFile(obj, 'data.json'); || Saves a TCLJSONObject to a file.&lt;br /&gt;
|-&lt;br /&gt;
| '''IsValidJSON''' || valid = TCLJSON.IsValidJSON(jsonStr); || Checks whether a string is valid JSON.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example: TCLJSON in Action ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var&lt;br /&gt;
  MyForm: TClForm;&lt;br /&gt;
  LoadBtn, SaveBtn, ParseBtn: TClProButton;&lt;br /&gt;
  InputMemo, OutputMemo: TClMemo;&lt;br /&gt;
  Obj: TCLJSONObject;&lt;br /&gt;
  Arr: TCLJSONArray;&lt;br /&gt;
  JsonStr: string;&lt;br /&gt;
  Valid: Boolean;&lt;br /&gt;
&lt;br /&gt;
void LoadJSONFromFile&lt;br /&gt;
{&lt;br /&gt;
  Obj = TCLJSON.LoadObjectFromFile('data.json');&lt;br /&gt;
  OutputMemo.Lines.Text = Obj.ToJSONString;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void SaveJSONToFile&lt;br /&gt;
{&lt;br /&gt;
  if Obj &amp;lt;&amp;gt; nil&lt;br /&gt;
  {&lt;br /&gt;
    TCLJSON.SaveObjectToFile(Obj, 'output.json');&lt;br /&gt;
    ShowMessage('JSON saved to output.json');&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
    ShowMessage('No JSON object to save.');&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void ParseJSON&lt;br /&gt;
{&lt;br /&gt;
  try&lt;br /&gt;
    JsonStr = InputMemo.Text;&lt;br /&gt;
    Valid = TCLJSON.IsValidJSON(JsonStr);&lt;br /&gt;
&lt;br /&gt;
    if not Valid&lt;br /&gt;
    {&lt;br /&gt;
      ShowMessage('Invalid JSON format!');&lt;br /&gt;
      exit;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Parse string to object&lt;br /&gt;
    Obj = TCLJSON.ParseToJSONObject(JsonStr);&lt;br /&gt;
    ShowMessage('Parsed Object Key Count: ' + IntToStr(Obj.Count));&lt;br /&gt;
&lt;br /&gt;
    // Convert object back to string&lt;br /&gt;
    JsonStr = TCLJSON.ParseObjectToString(Obj);&lt;br /&gt;
    OutputMemo.Lines.Text = JsonStr;&lt;br /&gt;
&lt;br /&gt;
    // Create sample array and show conversion&lt;br /&gt;
    Arr = TCLJSONArray.Create;&lt;br /&gt;
    Arr.AddValue(TCLJSONValue.Str('Item1'));&lt;br /&gt;
    Arr.AddValue(TCLJSONValue.Str('Item2'));&lt;br /&gt;
    OutputMemo.Lines.Add('');&lt;br /&gt;
    OutputMemo.Lines.Add('Array JSON:');&lt;br /&gt;
    OutputMemo.Lines.Add(TCLJSON.ParseArrayToString(Arr));&lt;br /&gt;
&lt;br /&gt;
  except&lt;br /&gt;
    ShowMessage('Error: ' + LastExceptionMessage);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  MyForm = TClForm.Create(Self);&lt;br /&gt;
&lt;br /&gt;
  InputMemo = MyForm.AddNewMemo(MyForm, 'InputMemo', 'Enter JSON Text');&lt;br /&gt;
  InputMemo.Align = alTop;&lt;br /&gt;
  InputMemo.Height = 150;&lt;br /&gt;
&lt;br /&gt;
  OutputMemo = MyForm.AddNewMemo(MyForm, 'OutputMemo', 'Output');&lt;br /&gt;
  OutputMemo.Align = alClient;&lt;br /&gt;
&lt;br /&gt;
  ParseBtn = MyForm.AddNewProButton(MyForm, 'ParseBtn', 'Parse JSON');&lt;br /&gt;
  ParseBtn.Align = alBottom;&lt;br /&gt;
  ParseBtn.OnClick = 'ParseJSON';&lt;br /&gt;
&lt;br /&gt;
  LoadBtn = MyForm.AddNewProButton(MyForm, 'LoadBtn', 'Load from File');&lt;br /&gt;
  LoadBtn.Align = alBottom;&lt;br /&gt;
  LoadBtn.OnClick = 'LoadJSONFromFile';&lt;br /&gt;
&lt;br /&gt;
  SaveBtn = MyForm.AddNewProButton(MyForm, 'SaveBtn', 'Save to File');&lt;br /&gt;
  SaveBtn.Align = alBottom;&lt;br /&gt;
  SaveBtn.OnClick = 'SaveJSONToFile';&lt;br /&gt;
&lt;br /&gt;
  MyForm.Run;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Output:&lt;br /&gt;
&lt;br /&gt;
[[File:TCLJSONExample2.png|frameless|700px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; See Also &amp;lt;/h2&amp;gt;&lt;br /&gt;
* [[TclJSONArray]]&lt;br /&gt;
* [[TclJSONObject]]&lt;br /&gt;
* [[TclJSONPair]]&lt;br /&gt;
* [[TclJSONValue]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{#seo:|title=TCLJSON Library Overview - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description=Learn how to create, manipulate, validate, and save JSON objects and arrays using TCLJSON, with examples and type-safe value handling.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=File:TCLJSONExample.png&amp;diff=4067</id>
		<title>File:TCLJSONExample.png</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=File:TCLJSONExample.png&amp;diff=4067"/>
		<updated>2025-10-22T12:30:03Z</updated>

		<summary type="html">&lt;p&gt;Salih: Salih uploaded a new version of File:TCLJSONExample.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=TclJSON&amp;diff=4066</id>
		<title>TclJSON</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=TclJSON&amp;diff=4066"/>
		<updated>2025-10-22T12:29:30Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TCLJSON is a structured and type-safe JSON processing library designed to facilitate the creation, manipulation, and validation of JSON data. It enables the definition of objects, arrays, and values representing standard JSON types, including strings, numbers, booleans, and null elements.&lt;br /&gt;
&lt;br /&gt;
The library provides mechanisms for constructing hierarchical data models, performing key-value pair operations, merging multiple JSON structures, and retrieving nested elements through deep path access. TCLJSON ensures strict compliance with JSON syntax rules, offering validation methods to verify data integrity during parsing and serialization.&lt;br /&gt;
&lt;br /&gt;
In addition to in-memory operations, TCLJSON supports persistent data handling through file-based loading and saving of JSON content. Its strongly typed architecture promotes reliability, consistency, and maintainability in applications that require structured data representation, configuration management, or data exchange using the JSON format.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #007bff; background-color: #e6f7ff; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #007bff; padding-bottom: 5px;&amp;quot; | Information: What is TCLJSON?&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding-top: 5px;&amp;quot; | TCLJSON allows you to create, manipulate, and serialize JSON data structures. It supports nested objects, arrays, type-safe values, deep path access, merging, cloning, and file operations.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot; style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
! Class !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[TclJSONArray]] || Represents a JSON array with ordered values. Supports adding/removing values or objects, merging, cloning, and enumeration.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclJSONObject]] || Represents a JSON object with key-value pairs. Provides methods for adding, removing, merging, cloning, and deep path access.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclJSONPair]] || Represents a single key-value pair inside a JSON object.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclJSONValue]] || Encapsulates a JSON value (string, integer, number, boolean, datetime, or null) and provides type-safe methods.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #28a745; background-color: #d4edda; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #28a745; padding-bottom: 5px;&amp;quot; | Dont Forget!&lt;br /&gt;
|-&lt;br /&gt;
| When working with nested objects or arrays, always free created JSON instances ('''Obj.Free;''', '''Arr.Free;''') after use to prevent memory leaks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Also, ensure all JSON strings are '''UTF-8''' encoded before parsing to avoid character mismatches during validation.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot; style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0; width:100%&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Definition&lt;br /&gt;
|-&lt;br /&gt;
| '''ParseToJSONObject''' || obj = TCLJSON.ParseToJSONObject(jsonStr); || Parses a JSON string into a TCLJSONObject.&lt;br /&gt;
|-&lt;br /&gt;
| '''ParseObjectToString''' || jsonStr = TCLJSON.ParseObjectToString(obj); || Converts a TCLJSONObject to a JSON string.&lt;br /&gt;
|-&lt;br /&gt;
| '''ParseToJSONArray''' || arr = TCLJSON.ParseToJSONArray(jsonStr); || Parses a JSON string into a TCLJSONArray.&lt;br /&gt;
|-&lt;br /&gt;
| '''ParseArrayToString''' || jsonStr = TCLJSON.ParseArrayToString(arr); || Converts a TCLJSONArray to a JSON string.&lt;br /&gt;
|-&lt;br /&gt;
| '''LoadObjectFromFile''' || obj = TCLJSON.LoadObjectFromFile('data.json'); || Loads a JSON object from a file.&lt;br /&gt;
|-&lt;br /&gt;
| '''SaveObjectToFile''' || TCLJSON.SaveObjectToFile(obj, 'data.json'); || Saves a TCLJSONObject to a file.&lt;br /&gt;
|-&lt;br /&gt;
| '''IsValidJSON''' || valid = TCLJSON.IsValidJSON(jsonStr); || Checks whether a string is valid JSON.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example: TCLJSON in Action ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var&lt;br /&gt;
  MyForm: TClForm;&lt;br /&gt;
  LoadBtn, SaveBtn, ParseBtn: TClProButton;&lt;br /&gt;
  InputMemo, OutputMemo: TClMemo;&lt;br /&gt;
  Obj: TCLJSONObject;&lt;br /&gt;
  Arr: TCLJSONArray;&lt;br /&gt;
  JsonStr: string;&lt;br /&gt;
  Valid: Boolean;&lt;br /&gt;
&lt;br /&gt;
void LoadJSONFromFile&lt;br /&gt;
{&lt;br /&gt;
  Obj = TCLJSON.LoadObjectFromFile('data.json');&lt;br /&gt;
  OutputMemo.Lines.Text = Obj.ToJSONString;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void SaveJSONToFile&lt;br /&gt;
{&lt;br /&gt;
  if Obj &amp;lt;&amp;gt; nil&lt;br /&gt;
  {&lt;br /&gt;
    TCLJSON.SaveObjectToFile(Obj, 'output.json');&lt;br /&gt;
    ShowMessage('JSON saved to output.json');&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
    ShowMessage('No JSON object to save.');&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void ParseJSON&lt;br /&gt;
{&lt;br /&gt;
  try&lt;br /&gt;
    JsonStr = InputMemo.Text;&lt;br /&gt;
    Valid = TCLJSON.IsValidJSON(JsonStr);&lt;br /&gt;
&lt;br /&gt;
    if not Valid&lt;br /&gt;
    {&lt;br /&gt;
      ShowMessage('Invalid JSON format!');&lt;br /&gt;
      exit;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Parse string to object&lt;br /&gt;
    Obj = TCLJSON.ParseToJSONObject(JsonStr);&lt;br /&gt;
    ShowMessage('Parsed Object Key Count: ' + IntToStr(Obj.Count));&lt;br /&gt;
&lt;br /&gt;
    // Convert object back to string&lt;br /&gt;
    JsonStr = TCLJSON.ParseObjectToString(Obj);&lt;br /&gt;
    OutputMemo.Lines.Text = JsonStr;&lt;br /&gt;
&lt;br /&gt;
    // Create sample array and show conversion&lt;br /&gt;
    Arr = TCLJSONArray.Create;&lt;br /&gt;
    Arr.AddValue(TCLJSONValue.Str('Item1'));&lt;br /&gt;
    Arr.AddValue(TCLJSONValue.Str('Item2'));&lt;br /&gt;
    OutputMemo.Lines.Add('');&lt;br /&gt;
    OutputMemo.Lines.Add('Array JSON:');&lt;br /&gt;
    OutputMemo.Lines.Add(TCLJSON.ParseArrayToString(Arr));&lt;br /&gt;
&lt;br /&gt;
  except&lt;br /&gt;
    ShowMessage('Error: ' + LastExceptionMessage);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  MyForm = TClForm.Create(Self);&lt;br /&gt;
&lt;br /&gt;
  InputMemo = MyForm.AddNewMemo(MyForm, 'InputMemo', 'Enter JSON Text');&lt;br /&gt;
  InputMemo.Align = alTop;&lt;br /&gt;
  InputMemo.Height = 150;&lt;br /&gt;
&lt;br /&gt;
  OutputMemo = MyForm.AddNewMemo(MyForm, 'OutputMemo', 'Output');&lt;br /&gt;
  OutputMemo.Align = alClient;&lt;br /&gt;
&lt;br /&gt;
  ParseBtn = MyForm.AddNewProButton(MyForm, 'ParseBtn', 'Parse JSON');&lt;br /&gt;
  ParseBtn.Align = alBottom;&lt;br /&gt;
  ParseBtn.OnClick = 'ParseJSON';&lt;br /&gt;
&lt;br /&gt;
  LoadBtn = MyForm.AddNewProButton(MyForm, 'LoadBtn', 'Load from File');&lt;br /&gt;
  LoadBtn.Align = alBottom;&lt;br /&gt;
  LoadBtn.OnClick = 'LoadJSONFromFile';&lt;br /&gt;
&lt;br /&gt;
  SaveBtn = MyForm.AddNewProButton(MyForm, 'SaveBtn', 'Save to File');&lt;br /&gt;
  SaveBtn.Align = alBottom;&lt;br /&gt;
  SaveBtn.OnClick = 'SaveJSONToFile';&lt;br /&gt;
&lt;br /&gt;
  MyForm.Run;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Output:&lt;br /&gt;
&lt;br /&gt;
[[File:TCLJSONExample.png|frameless|700px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; See Also &amp;lt;/h2&amp;gt;&lt;br /&gt;
* [[TclJSONArray]]&lt;br /&gt;
* [[TclJSONObject]]&lt;br /&gt;
* [[TclJSONPair]]&lt;br /&gt;
* [[TclJSONValue]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{#seo:|title=TCLJSON Library Overview - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description=Learn how to create, manipulate, validate, and save JSON objects and arrays using TCLJSON, with examples and type-safe value handling.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=TclJSONObject&amp;diff=4065</id>
		<title>TclJSONObject</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=TclJSONObject&amp;diff=4065"/>
		<updated>2025-10-22T11:18:02Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;TCLJSONObject&amp;lt;/b&amp;gt; class represents a JSON object composed of key–value pairs.  &lt;br /&gt;
It provides structured methods to add, remove, clone, merge, and retrieve data.  &lt;br /&gt;
Objects can contain nested objects or arrays, allowing hierarchical and deeply structured JSON representations.  &lt;br /&gt;
TCLJSONObject ensures type safety by operating with &amp;lt;b&amp;gt;TCLJSONValue&amp;lt;/b&amp;gt;, preventing data inconsistency during serialization and deserialization.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #007bff; background-color: #e6f7ff; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #007bff; padding-bottom: 5px;&amp;quot; | Information: JSON Object Structure&lt;br /&gt;
|-&lt;br /&gt;
| A JSON object is an unordered collection of name–value pairs, where each name is a string and the value may be a string, number, boolean, array, or another object.&lt;br /&gt;
|-&lt;br /&gt;
| Example:  {&amp;quot;name&amp;quot;:&amp;quot;Alice&amp;quot;,&amp;quot;age&amp;quot;:25,&amp;quot;active&amp;quot;:true}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot; style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0; width:100%&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Definition&lt;br /&gt;
|-&lt;br /&gt;
| '''TCLJSONObject''' || obj : TCLJSONObject; || Creates a variable for JSON object.&lt;br /&gt;
|-&lt;br /&gt;
| '''Create''' || obj = TCLJSONObject.Create; || Initializes a new empty JSON object instance.&lt;br /&gt;
|-&lt;br /&gt;
| '''CreateFromJSON''' || obj = TCLJSONObject.CreateFromJSON(jsonStr); || Creates a JSON object from a JSON string.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddPair''' || obj.AddPair('name', TCLJSONValue.Str('Alice')); || Adds a key–value pair to the object.&lt;br /&gt;
|-&lt;br /&gt;
| '''SetValue''' || obj.SetValue('age', TCLJSONValue.Int(25)); || Updates an existing key’s value or adds it if not present.&lt;br /&gt;
|-&lt;br /&gt;
| '''RemovePair''' || obj.RemovePair('age'); || Removes a key and its corresponding value.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddObject''' || obj.AddObject('address', ChildObj); || Adds a nested JSON object as a child.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddArray''' || obj.AddArray('scores', Arr); || Adds a JSON array under a key.&lt;br /&gt;
|-&lt;br /&gt;
| '''HasKey''' || obj.HasKey('active'); || Checks whether the specified key exists.&lt;br /&gt;
|-&lt;br /&gt;
| '''GetValue''' || val = obj.GetValue('name'); || Retrieves the value of a given key as a TCLJSONValue.&lt;br /&gt;
|-&lt;br /&gt;
| '''GetValueByPath''' || val = obj.GetValueByPath('user.profile.name'); || Retrieves a value using dot notation for nested structures.&lt;br /&gt;
|-&lt;br /&gt;
| '''Merge''' || obj.Merge(ExtraObj); || Merges another object’s pairs into the current object.&lt;br /&gt;
|-&lt;br /&gt;
| '''Clone''' || copy = obj.Clone; || Creates a deep copy of the object, including all nested items.&lt;br /&gt;
|-&lt;br /&gt;
| '''ToJSONString''' || obj.ToJSONString; || Serializes the object into a JSON string format.&lt;br /&gt;
|-&lt;br /&gt;
| '''Clear''' || obj.Clear; || Removes all key–value pairs from the object.&lt;br /&gt;
|-&lt;br /&gt;
| '''Count''' || obj.Count; || Returns the number of key–value pairs within the object.&lt;br /&gt;
|-&lt;br /&gt;
| '''IsEmpty''' || obj.IsEmpty; || Returns True if the object contains no pairs.&lt;br /&gt;
|-&lt;br /&gt;
| '''SaveToFile''' || TCLJSON.SaveObjectToFile(obj, 'data.json'); || Saves the current object to a file.&lt;br /&gt;
|-&lt;br /&gt;
| '''LoadFromFile''' || obj = TCLJSON.LoadObjectFromFile('data.json'); || Loads a JSON object from a file.&lt;br /&gt;
|-&lt;br /&gt;
| '''IsValidJSON''' || TCLJSON.IsValidJSON(jsonStr); || Checks if the string is a valid JSON format.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #28a745; background-color: #d4edda; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #28a745; padding-bottom: 5px;&amp;quot; | Important: Nested Object Access&lt;br /&gt;
|-&lt;br /&gt;
| Use &amp;lt;code&amp;gt;GetValueByPath&amp;lt;/code&amp;gt; to access deeply nested elements.  &lt;br /&gt;
Example: &amp;lt;code&amp;gt;user.GetValueByPath('account.details.email')&amp;lt;/code&amp;gt; returns the email value from a nested JSON structure.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-info shadow-sm rounded-4 p-3&amp;quot; style=&amp;quot;border-left:6px solid #0d6efd;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h4 class=&amp;quot;mb-2&amp;quot;&amp;gt;Important Notes&amp;lt;/h4&amp;gt;&lt;br /&gt;
  &amp;lt;ul style=&amp;quot;margin-left:10px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;All key names in &amp;lt;code&amp;gt;TCLJSONObject&amp;lt;/code&amp;gt; are case-sensitive.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Nested paths must use dot notation.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;When merging objects, existing keys are overwritten by the new object’s values.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Use &amp;lt;code&amp;gt;Clone&amp;lt;/code&amp;gt; for duplication instead of manual re-construction to preserve data integrity.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Always free JSON objects after use to avoid memory leaks.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example: TCLJSONObject in Use ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var&lt;br /&gt;
  MyForm: TClForm;&lt;br /&gt;
  NameEdt, AgeEdt, CityEdt: TClProEdit;&lt;br /&gt;
  ActiveChk: TClCheckBox;&lt;br /&gt;
  CreateBtn: TClProButton;&lt;br /&gt;
  ResultMemo: TClMemo;&lt;br /&gt;
&lt;br /&gt;
void GenerateJSONObject&lt;br /&gt;
var&lt;br /&gt;
  Obj, Child, Extra: TCLJSONObject;&lt;br /&gt;
  Val: TCLJSONValue;&lt;br /&gt;
{&lt;br /&gt;
  try&lt;br /&gt;
    Obj = TCLJSONObject.Create;&lt;br /&gt;
    Child = TCLJSONObject.Create;&lt;br /&gt;
    Extra = TCLJSONObject.Create;&lt;br /&gt;
    try&lt;br /&gt;
      // Key-value pairs&lt;br /&gt;
      Obj.AddPair('name', TCLJSONValue.Str(NameEdt.Text));&lt;br /&gt;
      Obj.AddPair('age', TCLJSONValue.Int(StrToIntDef(AgeEdt.Text, 0)));&lt;br /&gt;
      Obj.AddPair('active', TCLJSONValue.Bool(ActiveChk.IsChecked));&lt;br /&gt;
&lt;br /&gt;
      // Nested object&lt;br /&gt;
      Child.AddPair('city', TCLJSONValue.Str(CityEdt.Text));&lt;br /&gt;
      Obj.AddObject('address', Child);&lt;br /&gt;
&lt;br /&gt;
      // Additional info (merge)&lt;br /&gt;
      Extra.AddPair('status', TCLJSONValue.Str('OK'));&lt;br /&gt;
      Obj.Merge(Extra);&lt;br /&gt;
&lt;br /&gt;
      // Retrieve deep value&lt;br /&gt;
      Val = Obj.GetValueByPath('address.city');&lt;br /&gt;
      ShowMessage('City: ' + Val.AsString);&lt;br /&gt;
&lt;br /&gt;
      // Show JSON output&lt;br /&gt;
      ResultMemo.Lines.Text = Obj.ToJSONString;&lt;br /&gt;
&lt;br /&gt;
    except&lt;br /&gt;
      ShowMessage('An error occurred while creating JSON: ' + LastExceptionMessage);&lt;br /&gt;
    }&lt;br /&gt;
  finally&lt;br /&gt;
    Obj.Free;&lt;br /&gt;
    Child.Free;&lt;br /&gt;
    Extra.Free;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  MyForm = TClForm.Create(Self);&lt;br /&gt;
&lt;br /&gt;
  NameEdt = MyForm.AddNewProEdit(MyForm, 'NameEdt', 'Name');&lt;br /&gt;
  NameEdt.Align = alTop;&lt;br /&gt;
  NameEdt.Height = 35;&lt;br /&gt;
  NameEdt.Margins.Left = 25;&lt;br /&gt;
  NameEdt.Margins.Bottom = 25;&lt;br /&gt;
  NameEdt.Margins.Right = 25;&lt;br /&gt;
&lt;br /&gt;
  AgeEdt = MyForm.AddNewProEdit(MyForm, 'AgeEdt', 'Age');&lt;br /&gt;
  AgeEdt.Align = alTop;&lt;br /&gt;
  AgeEdt.Height = 35;&lt;br /&gt;
  AgeEdt.Margins.Left = 25;&lt;br /&gt;
  AgeEdt.Margins.Bottom = 25;&lt;br /&gt;
  AgeEdt.Margins.Right = 25;&lt;br /&gt;
&lt;br /&gt;
  CityEdt = MyForm.AddNewProEdit(MyForm, 'CityEdt', 'City');&lt;br /&gt;
  CityEdt.Align = alTop;&lt;br /&gt;
  CityEdt.Height = 35;&lt;br /&gt;
  CityEdt.Margins.Left = 25;&lt;br /&gt;
  CityEdt.Margins.Bottom = 25;&lt;br /&gt;
  CityEdt.Margins.Right = 25;&lt;br /&gt;
&lt;br /&gt;
  ActiveChk = MyForm.AddNewCheckBox(MyForm, 'ActiveChk', 'Is Active?');&lt;br /&gt;
  ActiveChk.Align = alTop;&lt;br /&gt;
  ActiveChk.Margins.Left = 15;&lt;br /&gt;
  ActiveChk.Margins.Top = 10;&lt;br /&gt;
&lt;br /&gt;
  ResultMemo = MyForm.AddNewMemo(MyForm, 'ResultMemo', 'JSON Output');&lt;br /&gt;
  ResultMemo.Align = alClient;&lt;br /&gt;
  ResultMemo.Height = 200;&lt;br /&gt;
  ResultMemo.TextSettings.WordWrap = True;&lt;br /&gt;
&lt;br /&gt;
  CreateBtn = MyForm.AddNewProButton(MyForm, 'CreateBtn', 'Generate JSON');&lt;br /&gt;
  CreateBtn.Align = alBottom;&lt;br /&gt;
  CreateBtn.Margins.Left = 15;&lt;br /&gt;
  CreateBtn.Margins.Right = 15;&lt;br /&gt;
  CreateBtn.Margins.Bottom = 10;&lt;br /&gt;
  CreateBtn.OnClick = 'GenerateJSONObject';&lt;br /&gt;
&lt;br /&gt;
  MyForm.Run;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Output:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:TCLJSONObject.png|frameless|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; See Also &amp;lt;/h2&amp;gt;&lt;br /&gt;
* [[TclJSONArray]]&lt;br /&gt;
* [[TclJSONValue]]&lt;br /&gt;
* [[TclJSONPair]]&lt;br /&gt;
* [[TclJSON]]&lt;br /&gt;
&lt;br /&gt;
{{#seo:|title=TCLJSONObject Class - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description=Detailed documentation of TCLJSONObject class, including features, methods, nested path access, and practical examples for JSON object manipulation.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=TclJSON&amp;diff=4064</id>
		<title>TclJSON</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=TclJSON&amp;diff=4064"/>
		<updated>2025-10-22T06:25:31Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TCLJSON is a structured and type-safe JSON processing library designed to facilitate the creation, manipulation, and validation of JSON data. It enables the definition of objects, arrays, and values representing standard JSON types, including strings, numbers, booleans, and null elements.&lt;br /&gt;
&lt;br /&gt;
The library provides mechanisms for constructing hierarchical data models, performing key-value pair operations, merging multiple JSON structures, and retrieving nested elements through deep path access. TCLJSON ensures strict compliance with JSON syntax rules, offering validation methods to verify data integrity during parsing and serialization.&lt;br /&gt;
&lt;br /&gt;
In addition to in-memory operations, TCLJSON supports persistent data handling through file-based loading and saving of JSON content. Its strongly typed architecture promotes reliability, consistency, and maintainability in applications that require structured data representation, configuration management, or data exchange using the JSON format.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #007bff; background-color: #e6f7ff; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #007bff; padding-bottom: 5px;&amp;quot; | Information: What is TCLJSON?&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding-top: 5px;&amp;quot; | TCLJSON allows you to create, manipulate, and serialize JSON data structures. It supports nested objects, arrays, type-safe values, deep path access, merging, cloning, and file operations.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot; style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
! Class !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[TclJSONArray]] || Represents a JSON array with ordered values. Supports adding/removing values or objects, merging, cloning, and enumeration.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclJSONObject]] || Represents a JSON object with key-value pairs. Provides methods for adding, removing, merging, cloning, and deep path access.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclJSONPair]] || Represents a single key-value pair inside a JSON object.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclJSONValue]] || Encapsulates a JSON value (string, integer, number, boolean, datetime, or null) and provides type-safe methods.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #28a745; background-color: #d4edda; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #28a745; padding-bottom: 5px;&amp;quot; | Important: Type-Safe JSON Values&lt;br /&gt;
|-&lt;br /&gt;
| TCLJSONValue provides class functions like '''Str''', '''Int''', '''Bool''', '''Num''', '''DT''', and '''Null''' to safely create JSON values without manual conversion.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot; style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0; width:100%&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Definition&lt;br /&gt;
|-&lt;br /&gt;
| '''TCLJSONObject''' || obj : TCLJSONObject; || Creates a variable for JSON object.&lt;br /&gt;
|-&lt;br /&gt;
| '''TCLJSONArray''' || arr : TCLJSONArray; || Creates a variable for JSON array.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddPair''' || obj.AddPair('key', TCLJSONValue.Str('value')); || Adds a key-value pair to JSON object.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddObject''' || obj.AddObject('child', ChildObj); || Adds a nested JSON object.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddArray''' || obj.AddArray('letters', Arr); || Adds a JSON array inside object.&lt;br /&gt;
|-&lt;br /&gt;
| '''Merge''' || obj.Merge(ExtraObj); || Merges another object into current.&lt;br /&gt;
|-&lt;br /&gt;
| '''GetValueByPath''' || val = obj.GetValueByPath('level1.level2'); || Retrieves a value from nested path.&lt;br /&gt;
|-&lt;br /&gt;
| '''ToJSONString''' || obj.ToJSONString; || Converts object/array to JSON string.&lt;br /&gt;
|-&lt;br /&gt;
| '''IsValidJSON''' || TCLJSON.IsValidJSON(str); || Checks if string is valid JSON.&lt;br /&gt;
|-&lt;br /&gt;
| '''SaveObjectToFile''' || TCLJSON.SaveObjectToFile(obj, 'file.json'); || Saves JSON object to file.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example: TCLJSON in Action ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var&lt;br /&gt;
  MyForm: TClForm;&lt;br /&gt;
  NameEdt, AgeEdt: TClProEdit;&lt;br /&gt;
  ActiveChk: TClCheckBox;&lt;br /&gt;
  ShowBtn: TClProButton;&lt;br /&gt;
  ResultMemo: TClMemo;&lt;br /&gt;
&lt;br /&gt;
void GenerateJSON&lt;br /&gt;
var&lt;br /&gt;
  Obj, Child, Extra: TCLJSONObject;&lt;br /&gt;
  Arr: TCLJSONArray;&lt;br /&gt;
  Val: TCLJSONValue;&lt;br /&gt;
{&lt;br /&gt;
  try&lt;br /&gt;
    // Main JSON object&lt;br /&gt;
    Obj = TCLJSONObject.Create;&lt;br /&gt;
    try&lt;br /&gt;
      Obj.AddPair('name', TCLJSONValue.Str(NameEdt.Text));&lt;br /&gt;
      Obj.AddPair('age', TCLJSONValue.Int(StrToInt(AgeEdt.Text)));&lt;br /&gt;
      Obj.AddPair('active', TCLJSONValue.Bool(ActiveChk.isChecked));&lt;br /&gt;
&lt;br /&gt;
      // Nested object&lt;br /&gt;
      Child = TCLJSONObject.Create;&lt;br /&gt;
      Child.AddPair('ChildLevel', TCLJSONValue.Str('This is a deep value'));&lt;br /&gt;
      Obj.AddObject('ParentLevel', Child);&lt;br /&gt;
&lt;br /&gt;
      // Array&lt;br /&gt;
      Arr = TCLJSONArray.Create;&lt;br /&gt;
      Arr.AddValue(TCLJSONValue.Str('X'));&lt;br /&gt;
      Arr.AddValue(TCLJSONValue.Str('Y'));&lt;br /&gt;
      Arr.AddValue(TCLJSONValue.Str('Z'));&lt;br /&gt;
      Obj.AddArray('letters', Arr);&lt;br /&gt;
&lt;br /&gt;
      // Merge object&lt;br /&gt;
      Extra = TCLJSONObject.Create;&lt;br /&gt;
      Extra.AddPair('status', TCLJSONValue.Str('ok'));&lt;br /&gt;
      Obj.Merge(Extra);&lt;br /&gt;
&lt;br /&gt;
      // Deep value access (Optional)&lt;br /&gt;
      Val = Obj.GetValueByPath('ParentLevel.ChildLevel');&lt;br /&gt;
&lt;br /&gt;
      // Add JSON to Memo&lt;br /&gt;
      ResultMemo.Lines.Text = Obj.ToJSONString;&lt;br /&gt;
&lt;br /&gt;
      // Deep value shown (Optional)&lt;br /&gt;
      ShowMessage('Deep value: ' + Val.AsString);&lt;br /&gt;
&lt;br /&gt;
    except&lt;br /&gt;
      ShowMessage('Error: ' + LastExceptionMessage);&lt;br /&gt;
    }&lt;br /&gt;
  except&lt;br /&gt;
    ShowMessage('Unexpected Error: ' + LastExceptionMessage);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  MyForm = TClForm.Create(Self);&lt;br /&gt;
&lt;br /&gt;
  NameEdt = MyForm.AddNewProEdit(MyForm,'NameEdt','Name');&lt;br /&gt;
  NameEdt.Align = alTop;&lt;br /&gt;
  NameEdt.Height = 35;&lt;br /&gt;
  NameEdt.Margins.Left = 25;&lt;br /&gt;
  NameEdt.Margins.Bottom = 25;&lt;br /&gt;
  NameEdt.Margins.Right = 25;&lt;br /&gt;
&lt;br /&gt;
  AgeEdt = MyForm.AddNewProEdit(MyForm,'AgeEdt','Age');&lt;br /&gt;
  AgeEdt.Align = alTop;&lt;br /&gt;
  AgeEdt.Height = 35;&lt;br /&gt;
  AgeEdt.Margins.Left = 25;&lt;br /&gt;
  AgeEdt.Margins.Bottom = 25;&lt;br /&gt;
  AgeEdt.Margins.Right = 25;&lt;br /&gt;
&lt;br /&gt;
  ActiveChk = MyForm.AddNewCheckBox(MyForm,'ActiveChk','Active');&lt;br /&gt;
  ActiveChk.Align = alTop;&lt;br /&gt;
  ActiveChk.Margins.Left = 15;&lt;br /&gt;
  ActiveChk.Margins.Top = 10;&lt;br /&gt;
&lt;br /&gt;
  ResultMemo = MyForm.AddNewMemo(MyForm,'ResultMemo','JSON Output');&lt;br /&gt;
  ResultMemo.Align = alClient;&lt;br /&gt;
  ResultMemo.Height = 200;&lt;br /&gt;
  ResultMemo.StyledSettings = ssFamily;&lt;br /&gt;
  ResultMemo.TextSettings.WordWrap = True;&lt;br /&gt;
&lt;br /&gt;
  ShowBtn = MyForm.AddNewProButton(MyForm,'ShowBtn','Show JSON');&lt;br /&gt;
  ShowBtn.Align = alBottom;&lt;br /&gt;
  ShowBtn.Margins.Left = 15;&lt;br /&gt;
  ShowBtn.Margins.Right = 15;&lt;br /&gt;
  ShowBtn.Margins.Bottom = 10;&lt;br /&gt;
  ShowBtn.OnClick = 'GenerateJSON';&lt;br /&gt;
&lt;br /&gt;
  MyForm.Run;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Output:&lt;br /&gt;
&lt;br /&gt;
[[File:TCLJSONExample.png|frameless|700px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; See Also &amp;lt;/h2&amp;gt;&lt;br /&gt;
* [[TclJSONObject]]&lt;br /&gt;
* [[TclJSONArray]]&lt;br /&gt;
* [[TclJSONValue]]&lt;br /&gt;
* [[TclJSONPair]]&lt;br /&gt;
&lt;br /&gt;
{{#seo:|title=TCLJSON Library Overview - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description=Learn how to create, manipulate, validate, and save JSON objects and arrays using TCLJSON, with examples and type-safe value handling.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=TclJSONObject&amp;diff=4063</id>
		<title>TclJSONObject</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=TclJSONObject&amp;diff=4063"/>
		<updated>2025-10-22T06:24:07Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;TCLJSONObject&amp;lt;/b&amp;gt; class represents a JSON object composed of key–value pairs.  &lt;br /&gt;
It provides structured methods to add, remove, clone, merge, and retrieve data.  &lt;br /&gt;
Objects can contain nested objects or arrays, allowing hierarchical and deeply structured JSON representations.  &lt;br /&gt;
TCLJSONObject ensures type safety by operating with &amp;lt;b&amp;gt;TCLJSONValue&amp;lt;/b&amp;gt;, preventing data inconsistency during serialization and deserialization.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #007bff; background-color: #e6f7ff; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #007bff; padding-bottom: 5px;&amp;quot; | Information: JSON Object Structure&lt;br /&gt;
|-&lt;br /&gt;
| A JSON object is an unordered collection of name–value pairs, where each name is a string and the value may be a string, number, boolean, array, or another object.&lt;br /&gt;
|-&lt;br /&gt;
| Example:  {&amp;quot;name&amp;quot;:&amp;quot;Alice&amp;quot;,&amp;quot;age&amp;quot;:25,&amp;quot;active&amp;quot;:true}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot; style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0; width:100%&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Definition&lt;br /&gt;
|-&lt;br /&gt;
| '''TCLJSONObject''' || obj : TCLJSONObject; || Creates a variable for JSON object.&lt;br /&gt;
|-&lt;br /&gt;
| '''Create''' || obj = TCLJSONObject.Create; || Initializes a new empty JSON object instance.&lt;br /&gt;
|-&lt;br /&gt;
| '''CreateFromJSON''' || obj = TCLJSONObject.CreateFromJSON(jsonStr); || Creates a JSON object from a JSON string.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddPair''' || obj.AddPair('name', TCLJSONValue.Str('Alice')); || Adds a key–value pair to the object.&lt;br /&gt;
|-&lt;br /&gt;
| '''SetValue''' || obj.SetValue('age', TCLJSONValue.Int(25)); || Updates an existing key’s value or adds it if not present.&lt;br /&gt;
|-&lt;br /&gt;
| '''RemovePair''' || obj.RemovePair('age'); || Removes a key and its corresponding value.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddObject''' || obj.AddObject('address', ChildObj); || Adds a nested JSON object as a child.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddArray''' || obj.AddArray('scores', Arr); || Adds a JSON array under a key.&lt;br /&gt;
|-&lt;br /&gt;
| '''HasKey''' || obj.HasKey('active'); || Checks whether the specified key exists.&lt;br /&gt;
|-&lt;br /&gt;
| '''GetValue''' || val = obj.GetValue('name'); || Retrieves the value of a given key as a TCLJSONValue.&lt;br /&gt;
|-&lt;br /&gt;
| '''GetValueByPath''' || val = obj.GetValueByPath('user.profile.name'); || Retrieves a value using dot notation for nested structures.&lt;br /&gt;
|-&lt;br /&gt;
| '''Merge''' || obj.Merge(ExtraObj); || Merges another object’s pairs into the current object.&lt;br /&gt;
|-&lt;br /&gt;
| '''Clone''' || copy = obj.Clone; || Creates a deep copy of the object, including all nested items.&lt;br /&gt;
|-&lt;br /&gt;
| '''ToJSONString''' || obj.ToJSONString; || Serializes the object into a JSON string format.&lt;br /&gt;
|-&lt;br /&gt;
| '''FromJSONString''' || obj.FromJSONString(jsonStr); || Replaces current data with the content of a JSON string.&lt;br /&gt;
|-&lt;br /&gt;
| '''Clear''' || obj.Clear; || Removes all key–value pairs from the object.&lt;br /&gt;
|-&lt;br /&gt;
| '''Count''' || obj.Count; || Returns the number of key–value pairs within the object.&lt;br /&gt;
|-&lt;br /&gt;
| '''IsEmpty''' || obj.IsEmpty; || Returns True if the object contains no pairs.&lt;br /&gt;
|-&lt;br /&gt;
| '''SaveToFile''' || TCLJSON.SaveObjectToFile(obj, 'data.json'); || Saves the current object to a file.&lt;br /&gt;
|-&lt;br /&gt;
| '''LoadFromFile''' || obj = TCLJSON.LoadObjectFromFile('data.json'); || Loads a JSON object from a file.&lt;br /&gt;
|-&lt;br /&gt;
| '''IsValidJSON''' || TCLJSON.IsValidJSON(jsonStr); || Checks if the string is a valid JSON format.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #28a745; background-color: #d4edda; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #28a745; padding-bottom: 5px;&amp;quot; | Important: Nested Object Access&lt;br /&gt;
|-&lt;br /&gt;
| Use &amp;lt;code&amp;gt;GetValueByPath&amp;lt;/code&amp;gt; to access deeply nested elements.  &lt;br /&gt;
Example: &amp;lt;code&amp;gt;user.GetValueByPath('account.details.email')&amp;lt;/code&amp;gt; returns the email value from a nested JSON structure.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-info shadow-sm rounded-4 p-3&amp;quot; style=&amp;quot;border-left:6px solid #0d6efd;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h4 class=&amp;quot;mb-2&amp;quot;&amp;gt;Important Notes&amp;lt;/h4&amp;gt;&lt;br /&gt;
  &amp;lt;ul style=&amp;quot;margin-left:10px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;All key names in &amp;lt;code&amp;gt;TCLJSONObject&amp;lt;/code&amp;gt; are case-sensitive.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Nested paths must use dot notation.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;When merging objects, existing keys are overwritten by the new object’s values.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Use &amp;lt;code&amp;gt;Clone&amp;lt;/code&amp;gt; for duplication instead of manual re-construction to preserve data integrity.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Always free JSON objects after use to avoid memory leaks.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example: TCLJSONObject in Use ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var&lt;br /&gt;
  MyForm: TClForm;&lt;br /&gt;
  NameEdt, AgeEdt, CityEdt: TClProEdit;&lt;br /&gt;
  ActiveChk: TClCheckBox;&lt;br /&gt;
  CreateBtn: TClProButton;&lt;br /&gt;
  ResultMemo: TClMemo;&lt;br /&gt;
&lt;br /&gt;
void GenerateJSONObject&lt;br /&gt;
var&lt;br /&gt;
  Obj, Child, Extra: TCLJSONObject;&lt;br /&gt;
  Val: TCLJSONValue;&lt;br /&gt;
{&lt;br /&gt;
  try&lt;br /&gt;
    Obj = TCLJSONObject.Create;&lt;br /&gt;
    Child = TCLJSONObject.Create;&lt;br /&gt;
    Extra = TCLJSONObject.Create;&lt;br /&gt;
    try&lt;br /&gt;
      // Key-value pairs&lt;br /&gt;
      Obj.AddPair('name', TCLJSONValue.Str(NameEdt.Text));&lt;br /&gt;
      Obj.AddPair('age', TCLJSONValue.Int(StrToIntDef(AgeEdt.Text, 0)));&lt;br /&gt;
      Obj.AddPair('active', TCLJSONValue.Bool(ActiveChk.IsChecked));&lt;br /&gt;
&lt;br /&gt;
      // Nested object&lt;br /&gt;
      Child.AddPair('city', TCLJSONValue.Str(CityEdt.Text));&lt;br /&gt;
      Obj.AddObject('address', Child);&lt;br /&gt;
&lt;br /&gt;
      // Additional info (merge)&lt;br /&gt;
      Extra.AddPair('status', TCLJSONValue.Str('OK'));&lt;br /&gt;
      Obj.Merge(Extra);&lt;br /&gt;
&lt;br /&gt;
      // Retrieve deep value&lt;br /&gt;
      Val = Obj.GetValueByPath('address.city');&lt;br /&gt;
      ShowMessage('City: ' + Val.AsString);&lt;br /&gt;
&lt;br /&gt;
      // Show JSON output&lt;br /&gt;
      ResultMemo.Lines.Text = Obj.ToJSONString;&lt;br /&gt;
&lt;br /&gt;
    except&lt;br /&gt;
      ShowMessage('An error occurred while creating JSON: ' + LastExceptionMessage);&lt;br /&gt;
    }&lt;br /&gt;
  finally&lt;br /&gt;
    Obj.Free;&lt;br /&gt;
    Child.Free;&lt;br /&gt;
    Extra.Free;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  MyForm = TClForm.Create(Self);&lt;br /&gt;
&lt;br /&gt;
  NameEdt = MyForm.AddNewProEdit(MyForm, 'NameEdt', 'Name');&lt;br /&gt;
  NameEdt.Align = alTop;&lt;br /&gt;
  NameEdt.Height = 35;&lt;br /&gt;
  NameEdt.Margins.Left = 25;&lt;br /&gt;
  NameEdt.Margins.Bottom = 25;&lt;br /&gt;
  NameEdt.Margins.Right = 25;&lt;br /&gt;
&lt;br /&gt;
  AgeEdt = MyForm.AddNewProEdit(MyForm, 'AgeEdt', 'Age');&lt;br /&gt;
  AgeEdt.Align = alTop;&lt;br /&gt;
  AgeEdt.Height = 35;&lt;br /&gt;
  AgeEdt.Margins.Left = 25;&lt;br /&gt;
  AgeEdt.Margins.Bottom = 25;&lt;br /&gt;
  AgeEdt.Margins.Right = 25;&lt;br /&gt;
&lt;br /&gt;
  CityEdt = MyForm.AddNewProEdit(MyForm, 'CityEdt', 'City');&lt;br /&gt;
  CityEdt.Align = alTop;&lt;br /&gt;
  CityEdt.Height = 35;&lt;br /&gt;
  CityEdt.Margins.Left = 25;&lt;br /&gt;
  CityEdt.Margins.Bottom = 25;&lt;br /&gt;
  CityEdt.Margins.Right = 25;&lt;br /&gt;
&lt;br /&gt;
  ActiveChk = MyForm.AddNewCheckBox(MyForm, 'ActiveChk', 'Is Active?');&lt;br /&gt;
  ActiveChk.Align = alTop;&lt;br /&gt;
  ActiveChk.Margins.Left = 15;&lt;br /&gt;
  ActiveChk.Margins.Top = 10;&lt;br /&gt;
&lt;br /&gt;
  ResultMemo = MyForm.AddNewMemo(MyForm, 'ResultMemo', 'JSON Output');&lt;br /&gt;
  ResultMemo.Align = alClient;&lt;br /&gt;
  ResultMemo.Height = 200;&lt;br /&gt;
  ResultMemo.TextSettings.WordWrap = True;&lt;br /&gt;
&lt;br /&gt;
  CreateBtn = MyForm.AddNewProButton(MyForm, 'CreateBtn', 'Generate JSON');&lt;br /&gt;
  CreateBtn.Align = alBottom;&lt;br /&gt;
  CreateBtn.Margins.Left = 15;&lt;br /&gt;
  CreateBtn.Margins.Right = 15;&lt;br /&gt;
  CreateBtn.Margins.Bottom = 10;&lt;br /&gt;
  CreateBtn.OnClick = 'GenerateJSONObject';&lt;br /&gt;
&lt;br /&gt;
  MyForm.Run;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Output:&lt;br /&gt;
[[File:TCLJSONObject.png|frameless|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; See Also &amp;lt;/h2&amp;gt;&lt;br /&gt;
* [[TclJSONArray]]&lt;br /&gt;
* [[TclJSONValue]]&lt;br /&gt;
* [[TclJSONPair]]&lt;br /&gt;
* [[TclJSON]]&lt;br /&gt;
&lt;br /&gt;
{{#seo:|title=TCLJSONObject Class - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description=Detailed documentation of TCLJSONObject class, including features, methods, nested path access, and practical examples for JSON object manipulation.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=File:TCLJSONObject.png&amp;diff=4062</id>
		<title>File:TCLJSONObject.png</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=File:TCLJSONObject.png&amp;diff=4062"/>
		<updated>2025-10-22T06:20:20Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=TclJSON&amp;diff=4061</id>
		<title>TclJSON</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=TclJSON&amp;diff=4061"/>
		<updated>2025-10-21T12:59:28Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TCLJSON is a structured and type-safe JSON processing library designed to facilitate the creation, manipulation, and validation of JSON data. It enables the definition of objects, arrays, and values representing standard JSON types, including strings, numbers, booleans, and null elements.&lt;br /&gt;
&lt;br /&gt;
The library provides mechanisms for constructing hierarchical data models, performing key-value pair operations, merging multiple JSON structures, and retrieving nested elements through deep path access. TCLJSON ensures strict compliance with JSON syntax rules, offering validation methods to verify data integrity during parsing and serialization.&lt;br /&gt;
&lt;br /&gt;
In addition to in-memory operations, TCLJSON supports persistent data handling through file-based loading and saving of JSON content. Its strongly typed architecture promotes reliability, consistency, and maintainability in applications that require structured data representation, configuration management, or data exchange using the JSON format.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #007bff; background-color: #e6f7ff; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #007bff; padding-bottom: 5px;&amp;quot; | Information: What is TCLJSON?&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding-top: 5px;&amp;quot; | TCLJSON allows you to create, manipulate, and serialize JSON data structures. It supports nested objects, arrays, type-safe values, deep path access, merging, cloning, and file operations.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot; style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
! Class !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[TclJSONArray]] || Represents a JSON array with ordered values. Supports adding/removing values or objects, merging, cloning, and enumeration.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclJSONObject]] || Represents a JSON object with key-value pairs. Provides methods for adding, removing, merging, cloning, and deep path access.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclJSONPair]] || Represents a single key-value pair inside a JSON object.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclJSONValue]] || Encapsulates a JSON value (string, integer, number, boolean, datetime, or null) and provides type-safe methods.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #28a745; background-color: #d4edda; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #28a745; padding-bottom: 5px;&amp;quot; | Important: Type-Safe JSON Values&lt;br /&gt;
|-&lt;br /&gt;
| TCLJSONValue provides class functions like '''Str''', '''Int''', '''Bool''', '''Num''', '''DT''', and '''Null''' to safely create JSON values without manual conversion.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot; style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0; width:100%&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Definition&lt;br /&gt;
|-&lt;br /&gt;
| '''TCLJSONObject''' || obj : TCLJSONObject; || Creates a variable for JSON object.&lt;br /&gt;
|-&lt;br /&gt;
| '''TCLJSONArray''' || arr : TCLJSONArray; || Creates a variable for JSON array.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddPair''' || obj.AddPair('key', TCLJSONValue.Str('value')); || Adds a key-value pair to JSON object.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddObject''' || obj.AddObject('child', ChildObj); || Adds a nested JSON object.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddArray''' || obj.AddArray('letters', Arr); || Adds a JSON array inside object.&lt;br /&gt;
|-&lt;br /&gt;
| '''Merge''' || obj.Merge(ExtraObj); || Merges another object into current.&lt;br /&gt;
|-&lt;br /&gt;
| '''GetValueByPath''' || val = obj.GetValueByPath('level1.level2'); || Retrieves a value from nested path.&lt;br /&gt;
|-&lt;br /&gt;
| '''ToJSONString''' || obj.ToJSONString; || Converts object/array to JSON string.&lt;br /&gt;
|-&lt;br /&gt;
| '''IsValidJSON''' || TCLJSON.IsValidJSON(str); || Checks if string is valid JSON.&lt;br /&gt;
|-&lt;br /&gt;
| '''SaveObjectToFile''' || TCLJSON.SaveObjectToFile(obj, 'file.json'); || Saves JSON object to file.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example: TCLJSON in Action ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var&lt;br /&gt;
  MyForm: TClForm;&lt;br /&gt;
  NameEdt, AgeEdt: TClProEdit;&lt;br /&gt;
  ActiveChk: TClCheckBox;&lt;br /&gt;
  ShowBtn: TClProButton;&lt;br /&gt;
  ResultMemo: TClMemo;&lt;br /&gt;
&lt;br /&gt;
void GenerateJSON&lt;br /&gt;
var&lt;br /&gt;
  Obj, Child, Extra: TCLJSONObject;&lt;br /&gt;
  Arr: TCLJSONArray;&lt;br /&gt;
  Val: TCLJSONValue;&lt;br /&gt;
{&lt;br /&gt;
  try&lt;br /&gt;
    // Main JSON object&lt;br /&gt;
    Obj = TCLJSONObject.Create;&lt;br /&gt;
    try&lt;br /&gt;
      Obj.AddPair('name', TCLJSONValue.Str(NameEdt.Text));&lt;br /&gt;
      Obj.AddPair('age', TCLJSONValue.Int(StrToInt(AgeEdt.Text)));&lt;br /&gt;
      Obj.AddPair('active', TCLJSONValue.Bool(ActiveChk.isChecked));&lt;br /&gt;
&lt;br /&gt;
      // Nested object&lt;br /&gt;
      Child = TCLJSONObject.Create;&lt;br /&gt;
      Child.AddPair('ChildLevel', TCLJSONValue.Str('This is a deep value'));&lt;br /&gt;
      Obj.AddObject('ParentLevel', Child);&lt;br /&gt;
&lt;br /&gt;
      // Array&lt;br /&gt;
      Arr = TCLJSONArray.Create;&lt;br /&gt;
      Arr.AddValue(TCLJSONValue.Str('X'));&lt;br /&gt;
      Arr.AddValue(TCLJSONValue.Str('Y'));&lt;br /&gt;
      Arr.AddValue(TCLJSONValue.Str('Z'));&lt;br /&gt;
      Obj.AddArray('letters', Arr);&lt;br /&gt;
&lt;br /&gt;
      // Merge object&lt;br /&gt;
      Extra = TCLJSONObject.Create;&lt;br /&gt;
      Extra.AddPair('status', TCLJSONValue.Str('ok'));&lt;br /&gt;
      Obj.Merge(Extra);&lt;br /&gt;
&lt;br /&gt;
      // Deep value access (Optional)&lt;br /&gt;
      Val = Obj.GetValueByPath('ParentLevel.ChildLevel');&lt;br /&gt;
&lt;br /&gt;
      // Add JSON to Memo&lt;br /&gt;
      ResultMemo.Lines.Text = Obj.ToJSONString;&lt;br /&gt;
&lt;br /&gt;
      // Deep value shown (Optional)&lt;br /&gt;
      ShowMessage('Deep value: ' + Val.AsString);&lt;br /&gt;
&lt;br /&gt;
    except&lt;br /&gt;
      ShowMessage('Error: ' + LastExceptionMessage);&lt;br /&gt;
    }&lt;br /&gt;
  except&lt;br /&gt;
    ShowMessage('Unexpected Error: ' + LastExceptionMessage);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  MyForm = TClForm.Create(Self);&lt;br /&gt;
&lt;br /&gt;
  NameEdt = MyForm.AddNewProEdit(MyForm,'NameEdt','Name');&lt;br /&gt;
  NameEdt.Align = alTop;&lt;br /&gt;
  NameEdt.Height = 35;&lt;br /&gt;
  NameEdt.Margins.Left = 25;&lt;br /&gt;
  NameEdt.Margins.Bottom = 25;&lt;br /&gt;
  NameEdt.Margins.Right = 25;&lt;br /&gt;
&lt;br /&gt;
  AgeEdt = MyForm.AddNewProEdit(MyForm,'AgeEdt','Age');&lt;br /&gt;
  AgeEdt.Align = alTop;&lt;br /&gt;
  AgeEdt.Height = 35;&lt;br /&gt;
  AgeEdt.Margins.Left = 25;&lt;br /&gt;
  AgeEdt.Margins.Bottom = 25;&lt;br /&gt;
  AgeEdt.Margins.Right = 25;&lt;br /&gt;
&lt;br /&gt;
  ActiveChk = MyForm.AddNewCheckBox(MyForm,'ActiveChk','Active');&lt;br /&gt;
  ActiveChk.Align = alTop;&lt;br /&gt;
  ActiveChk.Margins.Left = 15;&lt;br /&gt;
  ActiveChk.Margins.Top = 10;&lt;br /&gt;
&lt;br /&gt;
  ResultMemo = MyForm.AddNewMemo(MyForm,'ResultMemo','JSON Output');&lt;br /&gt;
  ResultMemo.Align = alClient;&lt;br /&gt;
  ResultMemo.Height = 200;&lt;br /&gt;
  ResultMemo.StyledSettings = ssFamily;&lt;br /&gt;
  ResultMemo.TextSettings.WordWrap = True;&lt;br /&gt;
&lt;br /&gt;
  ShowBtn = MyForm.AddNewProButton(MyForm,'ShowBtn','Show JSON');&lt;br /&gt;
  ShowBtn.Align = alBottom;&lt;br /&gt;
  ShowBtn.Margins.Left = 15;&lt;br /&gt;
  ShowBtn.Margins.Right = 15;&lt;br /&gt;
  ShowBtn.Margins.Bottom = 10;&lt;br /&gt;
  ShowBtn.OnClick = 'GenerateJSON';&lt;br /&gt;
&lt;br /&gt;
  MyForm.Run;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Output:&lt;br /&gt;
&lt;br /&gt;
[[File:TCLJSONExample.png|frameless|700px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; See Also &amp;lt;/h2&amp;gt;&lt;br /&gt;
* [[TCLJSONObject]]&lt;br /&gt;
* [[TCLJSONArray]]&lt;br /&gt;
* [[TCLJSONValue]]&lt;br /&gt;
* [[TCLJSONPair]]&lt;br /&gt;
&lt;br /&gt;
{{#seo:|title=TCLJSON Library Overview - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description=Learn how to create, manipulate, validate, and save JSON objects and arrays using TCLJSON, with examples and type-safe value handling.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=TclJSONObject&amp;diff=4060</id>
		<title>TclJSONObject</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=TclJSONObject&amp;diff=4060"/>
		<updated>2025-10-21T12:58:07Z</updated>

		<summary type="html">&lt;p&gt;Salih: Created page with &amp;quot;&amp;lt;div class=&amp;quot;alert alert-light border border-3 border-primary-subtle rounded-5 p-4 shadow-sm&amp;quot; role=&amp;quot;alert&amp;quot;&amp;gt; class &amp;lt;b&amp;gt;TCLJSONObject&amp;lt;/b&amp;gt; &amp;lt;/div&amp;gt;  The &amp;lt;b&amp;gt;TCLJSONObject&amp;lt;/b&amp;gt; class represents a JSON object composed of key–value pairs.   It provides structured methods to add, remove, clone, merge, and retrieve data.   Objects can contain nested objects or arrays, allowing hierarchical and deeply structured JSON representations.   TCLJSONObject ensures type safety by operating w...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;alert alert-light border border-3 border-primary-subtle rounded-5 p-4 shadow-sm&amp;quot; role=&amp;quot;alert&amp;quot;&amp;gt;&lt;br /&gt;
class &amp;lt;b&amp;gt;TCLJSONObject&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;b&amp;gt;TCLJSONObject&amp;lt;/b&amp;gt; class represents a JSON object composed of key–value pairs.  &lt;br /&gt;
It provides structured methods to add, remove, clone, merge, and retrieve data.  &lt;br /&gt;
Objects can contain nested objects or arrays, allowing hierarchical and deeply structured JSON representations.  &lt;br /&gt;
TCLJSONObject ensures type safety by operating with &amp;lt;b&amp;gt;TCLJSONValue&amp;lt;/b&amp;gt;, preventing data inconsistency during serialization and deserialization.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #007bff; background-color: #e6f7ff; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #007bff; padding-bottom: 5px;&amp;quot; | Information: JSON Object Structure&lt;br /&gt;
|-&lt;br /&gt;
| A JSON object is an unordered collection of name–value pairs, where each name is a string and the value may be a string, number, boolean, array, or another object.&lt;br /&gt;
|-&lt;br /&gt;
| Example:  {&amp;quot;name&amp;quot;:&amp;quot;Alice&amp;quot;,&amp;quot;age&amp;quot;:25,&amp;quot;active&amp;quot;:true}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot; style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0; width:100%&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Definition&lt;br /&gt;
|-&lt;br /&gt;
| '''TCLJSONObject''' || obj : TCLJSONObject; || Creates a variable for JSON object.&lt;br /&gt;
|-&lt;br /&gt;
| '''Create''' || obj = TCLJSONObject.Create; || Initializes a new empty JSON object instance.&lt;br /&gt;
|-&lt;br /&gt;
| '''CreateFromJSON''' || obj = TCLJSONObject.CreateFromJSON(jsonStr); || Creates a JSON object from a JSON string.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddPair''' || obj.AddPair('name', TCLJSONValue.Str('Alice')); || Adds a key–value pair to the object.&lt;br /&gt;
|-&lt;br /&gt;
| '''SetValue''' || obj.SetValue('age', TCLJSONValue.Int(25)); || Updates an existing key’s value or adds it if not present.&lt;br /&gt;
|-&lt;br /&gt;
| '''RemovePair''' || obj.RemovePair('age'); || Removes a key and its corresponding value.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddObject''' || obj.AddObject('address', ChildObj); || Adds a nested JSON object as a child.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddArray''' || obj.AddArray('scores', Arr); || Adds a JSON array under a key.&lt;br /&gt;
|-&lt;br /&gt;
| '''HasKey''' || obj.HasKey('active'); || Checks whether the specified key exists.&lt;br /&gt;
|-&lt;br /&gt;
| '''GetValue''' || val = obj.GetValue('name'); || Retrieves the value of a given key as a TCLJSONValue.&lt;br /&gt;
|-&lt;br /&gt;
| '''GetValueByPath''' || val = obj.GetValueByPath('user.profile.name'); || Retrieves a value using dot notation for nested structures.&lt;br /&gt;
|-&lt;br /&gt;
| '''Merge''' || obj.Merge(ExtraObj); || Merges another object’s pairs into the current object.&lt;br /&gt;
|-&lt;br /&gt;
| '''Clone''' || copy = obj.Clone; || Creates a deep copy of the object, including all nested items.&lt;br /&gt;
|-&lt;br /&gt;
| '''ToJSONString''' || obj.ToJSONString; || Serializes the object into a JSON string format.&lt;br /&gt;
|-&lt;br /&gt;
| '''FromJSONString''' || obj.FromJSONString(jsonStr); || Replaces current data with the content of a JSON string.&lt;br /&gt;
|-&lt;br /&gt;
| '''Clear''' || obj.Clear; || Removes all key–value pairs from the object.&lt;br /&gt;
|-&lt;br /&gt;
| '''Count''' || obj.Count; || Returns the number of key–value pairs within the object.&lt;br /&gt;
|-&lt;br /&gt;
| '''IsEmpty''' || obj.IsEmpty; || Returns True if the object contains no pairs.&lt;br /&gt;
|-&lt;br /&gt;
| '''SaveToFile''' || TCLJSON.SaveObjectToFile(obj, 'data.json'); || Saves the current object to a file.&lt;br /&gt;
|-&lt;br /&gt;
| '''LoadFromFile''' || obj = TCLJSON.LoadObjectFromFile('data.json'); || Loads a JSON object from a file.&lt;br /&gt;
|-&lt;br /&gt;
| '''IsValidJSON''' || TCLJSON.IsValidJSON(jsonStr); || Checks if the string is a valid JSON format.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #28a745; background-color: #d4edda; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #28a745; padding-bottom: 5px;&amp;quot; | Important: Nested Object Access&lt;br /&gt;
|-&lt;br /&gt;
| Use &amp;lt;code&amp;gt;GetValueByPath&amp;lt;/code&amp;gt; to access deeply nested elements.  &lt;br /&gt;
Example: &amp;lt;code&amp;gt;user.GetValueByPath('account.details.email')&amp;lt;/code&amp;gt; returns the email value from a nested JSON structure.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example: TCLJSONObject in Use ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var&lt;br /&gt;
  MyForm: TClForm;&lt;br /&gt;
  NameEdt, AgeEdt, CityEdt: TClProEdit;&lt;br /&gt;
  ActiveChk: TClCheckBox;&lt;br /&gt;
  CreateBtn: TClProButton;&lt;br /&gt;
  ResultMemo: TClMemo;&lt;br /&gt;
&lt;br /&gt;
void GenerateJSONObject&lt;br /&gt;
var&lt;br /&gt;
  Obj, Child, Extra: TCLJSONObject;&lt;br /&gt;
  Val: TCLJSONValue;&lt;br /&gt;
{&lt;br /&gt;
  try&lt;br /&gt;
    Obj = TCLJSONObject.Create;&lt;br /&gt;
    Child = TCLJSONObject.Create;&lt;br /&gt;
    Extra = TCLJSONObject.Create;&lt;br /&gt;
    try&lt;br /&gt;
      // Key-value pairs&lt;br /&gt;
      Obj.AddPair('name', TCLJSONValue.Str(NameEdt.Text));&lt;br /&gt;
      Obj.AddPair('age', TCLJSONValue.Int(StrToIntDef(AgeEdt.Text, 0)));&lt;br /&gt;
      Obj.AddPair('active', TCLJSONValue.Bool(ActiveChk.IsChecked));&lt;br /&gt;
&lt;br /&gt;
      // Nested object&lt;br /&gt;
      Child.AddPair('city', TCLJSONValue.Str(CityEdt.Text));&lt;br /&gt;
      Obj.AddObject('address', Child);&lt;br /&gt;
&lt;br /&gt;
      // Additional info (merge)&lt;br /&gt;
      Extra.AddPair('status', TCLJSONValue.Str('OK'));&lt;br /&gt;
      Obj.Merge(Extra);&lt;br /&gt;
&lt;br /&gt;
      // Retrieve deep value&lt;br /&gt;
      Val = Obj.GetValueByPath('address.city');&lt;br /&gt;
      ShowMessage('City: ' + Val.AsString);&lt;br /&gt;
&lt;br /&gt;
      // Show JSON output&lt;br /&gt;
      ResultMemo.Lines.Text = Obj.ToJSONString;&lt;br /&gt;
&lt;br /&gt;
    except&lt;br /&gt;
      ShowMessage('An error occurred while creating JSON: ' + LastExceptionMessage);&lt;br /&gt;
    }&lt;br /&gt;
  finally&lt;br /&gt;
    Obj.Free;&lt;br /&gt;
    Child.Free;&lt;br /&gt;
    Extra.Free;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  MyForm = TClForm.Create(Self);&lt;br /&gt;
&lt;br /&gt;
  NameEdt = MyForm.AddNewProEdit(MyForm, 'NameEdt', 'Name');&lt;br /&gt;
  NameEdt.Align = alTop;&lt;br /&gt;
  NameEdt.Height = 35;&lt;br /&gt;
  NameEdt.Margins.Left = 25;&lt;br /&gt;
  NameEdt.Margins.Bottom = 25;&lt;br /&gt;
  NameEdt.Margins.Right = 25;&lt;br /&gt;
&lt;br /&gt;
  AgeEdt = MyForm.AddNewProEdit(MyForm, 'AgeEdt', 'Age');&lt;br /&gt;
  AgeEdt.Align = alTop;&lt;br /&gt;
  AgeEdt.Height = 35;&lt;br /&gt;
  AgeEdt.Margins.Left = 25;&lt;br /&gt;
  AgeEdt.Margins.Bottom = 25;&lt;br /&gt;
  AgeEdt.Margins.Right = 25;&lt;br /&gt;
&lt;br /&gt;
  CityEdt = MyForm.AddNewProEdit(MyForm, 'CityEdt', 'City');&lt;br /&gt;
  CityEdt.Align = alTop;&lt;br /&gt;
  CityEdt.Height = 35;&lt;br /&gt;
  CityEdt.Margins.Left = 25;&lt;br /&gt;
  CityEdt.Margins.Bottom = 25;&lt;br /&gt;
  CityEdt.Margins.Right = 25;&lt;br /&gt;
&lt;br /&gt;
  ActiveChk = MyForm.AddNewCheckBox(MyForm, 'ActiveChk', 'Is Active?');&lt;br /&gt;
  ActiveChk.Align = alTop;&lt;br /&gt;
  ActiveChk.Margins.Left = 15;&lt;br /&gt;
  ActiveChk.Margins.Top = 10;&lt;br /&gt;
&lt;br /&gt;
  ResultMemo = MyForm.AddNewMemo(MyForm, 'ResultMemo', 'JSON Output');&lt;br /&gt;
  ResultMemo.Align = alClient;&lt;br /&gt;
  ResultMemo.Height = 200;&lt;br /&gt;
  ResultMemo.TextSettings.WordWrap = True;&lt;br /&gt;
&lt;br /&gt;
  CreateBtn = MyForm.AddNewProButton(MyForm, 'CreateBtn', 'Generate JSON');&lt;br /&gt;
  CreateBtn.Align = alBottom;&lt;br /&gt;
  CreateBtn.Margins.Left = 15;&lt;br /&gt;
  CreateBtn.Margins.Right = 15;&lt;br /&gt;
  CreateBtn.Margins.Bottom = 10;&lt;br /&gt;
  CreateBtn.OnClick = 'GenerateJSONObject';&lt;br /&gt;
&lt;br /&gt;
  MyForm.Run;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Output:&lt;br /&gt;
[[File:TCLJSONObjectExample.png|frameless|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
* All key names in TCLJSONObject are case-sensitive.  &lt;br /&gt;
* Nested paths must use dot notation.  &lt;br /&gt;
* When merging objects, existing keys are overwritten by the new object’s values.  &lt;br /&gt;
* Use &amp;lt;code&amp;gt;Clone&amp;lt;/code&amp;gt; for duplication instead of manual re-construction to preserve data integrity.  &lt;br /&gt;
* Always free JSON objects after use to avoid memory leaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; See Also &amp;lt;/h2&amp;gt;&lt;br /&gt;
* [[TCLJSONArray]]&lt;br /&gt;
* [[TCLJSONValue]]&lt;br /&gt;
* [[TCLJSONPair]]&lt;br /&gt;
* [[TCLJSON]]&lt;br /&gt;
&lt;br /&gt;
{{#seo:|title=TCLJSONObject Class - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description=Detailed documentation of TCLJSONObject class, including features, methods, nested path access, and practical examples for JSON object manipulation.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=TclJSON&amp;diff=4059</id>
		<title>TclJSON</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=TclJSON&amp;diff=4059"/>
		<updated>2025-10-21T12:43:11Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TCLJSON is a structured and type-safe JSON processing library designed to facilitate the creation, manipulation, and validation of JSON data. It enables the definition of objects, arrays, and values representing standard JSON types, including strings, numbers, booleans, and null elements.&lt;br /&gt;
&lt;br /&gt;
The library provides mechanisms for constructing hierarchical data models, performing key-value pair operations, merging multiple JSON structures, and retrieving nested elements through deep path access. TCLJSON ensures strict compliance with JSON syntax rules, offering validation methods to verify data integrity during parsing and serialization.&lt;br /&gt;
&lt;br /&gt;
In addition to in-memory operations, TCLJSON supports persistent data handling through file-based loading and saving of JSON content. Its strongly typed architecture promotes reliability, consistency, and maintainability in applications that require structured data representation, configuration management, or data exchange using the JSON format.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #007bff; background-color: #e6f7ff; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #007bff; padding-bottom: 5px;&amp;quot; | Information: What is TCLJSON?&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding-top: 5px;&amp;quot; | TCLJSON allows you to create, manipulate, and serialize JSON data structures. It supports nested objects, arrays, type-safe values, deep path access, merging, cloning, and file operations.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot; style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
! Class !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[TCLJSONArray]] || Represents a JSON array with ordered values. Supports adding/removing values or objects, merging, cloning, and enumeration.&lt;br /&gt;
|-&lt;br /&gt;
| [[TCLJSONObject]] || Represents a JSON object with key-value pairs. Provides methods for adding, removing, merging, cloning, and deep path access.&lt;br /&gt;
|-&lt;br /&gt;
| [[TCLJSONPair]] || Represents a single key-value pair inside a JSON object.&lt;br /&gt;
|-&lt;br /&gt;
| [[TCLJSONValue]] || Encapsulates a JSON value (string, integer, number, boolean, datetime, or null) and provides type-safe methods.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #28a745; background-color: #d4edda; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #28a745; padding-bottom: 5px;&amp;quot; | Important: Type-Safe JSON Values&lt;br /&gt;
|-&lt;br /&gt;
| TCLJSONValue provides class functions like '''Str''', '''Int''', '''Bool''', '''Num''', '''DT''', and '''Null''' to safely create JSON values without manual conversion.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot; style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0; width:100%&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Definition&lt;br /&gt;
|-&lt;br /&gt;
| '''TCLJSONObject''' || obj : TCLJSONObject; || Creates a variable for JSON object.&lt;br /&gt;
|-&lt;br /&gt;
| '''TCLJSONArray''' || arr : TCLJSONArray; || Creates a variable for JSON array.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddPair''' || obj.AddPair('key', TCLJSONValue.Str('value')); || Adds a key-value pair to JSON object.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddObject''' || obj.AddObject('child', ChildObj); || Adds a nested JSON object.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddArray''' || obj.AddArray('letters', Arr); || Adds a JSON array inside object.&lt;br /&gt;
|-&lt;br /&gt;
| '''Merge''' || obj.Merge(ExtraObj); || Merges another object into current.&lt;br /&gt;
|-&lt;br /&gt;
| '''GetValueByPath''' || val = obj.GetValueByPath('level1.level2'); || Retrieves a value from nested path.&lt;br /&gt;
|-&lt;br /&gt;
| '''ToJSONString''' || obj.ToJSONString; || Converts object/array to JSON string.&lt;br /&gt;
|-&lt;br /&gt;
| '''IsValidJSON''' || TCLJSON.IsValidJSON(str); || Checks if string is valid JSON.&lt;br /&gt;
|-&lt;br /&gt;
| '''SaveObjectToFile''' || TCLJSON.SaveObjectToFile(obj, 'file.json'); || Saves JSON object to file.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example: TCLJSON in Action ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var&lt;br /&gt;
  MyForm: TClForm;&lt;br /&gt;
  NameEdt, AgeEdt: TClProEdit;&lt;br /&gt;
  ActiveChk: TClCheckBox;&lt;br /&gt;
  ShowBtn: TClProButton;&lt;br /&gt;
  ResultMemo: TClMemo;&lt;br /&gt;
&lt;br /&gt;
void GenerateJSON&lt;br /&gt;
var&lt;br /&gt;
  Obj, Child, Extra: TCLJSONObject;&lt;br /&gt;
  Arr: TCLJSONArray;&lt;br /&gt;
  Val: TCLJSONValue;&lt;br /&gt;
{&lt;br /&gt;
  try&lt;br /&gt;
    // Main JSON object&lt;br /&gt;
    Obj = TCLJSONObject.Create;&lt;br /&gt;
    try&lt;br /&gt;
      Obj.AddPair('name', TCLJSONValue.Str(NameEdt.Text));&lt;br /&gt;
      Obj.AddPair('age', TCLJSONValue.Int(StrToInt(AgeEdt.Text)));&lt;br /&gt;
      Obj.AddPair('active', TCLJSONValue.Bool(ActiveChk.isChecked));&lt;br /&gt;
&lt;br /&gt;
      // Nested object&lt;br /&gt;
      Child = TCLJSONObject.Create;&lt;br /&gt;
      Child.AddPair('ChildLevel', TCLJSONValue.Str('This is a deep value'));&lt;br /&gt;
      Obj.AddObject('ParentLevel', Child);&lt;br /&gt;
&lt;br /&gt;
      // Array&lt;br /&gt;
      Arr = TCLJSONArray.Create;&lt;br /&gt;
      Arr.AddValue(TCLJSONValue.Str('X'));&lt;br /&gt;
      Arr.AddValue(TCLJSONValue.Str('Y'));&lt;br /&gt;
      Arr.AddValue(TCLJSONValue.Str('Z'));&lt;br /&gt;
      Obj.AddArray('letters', Arr);&lt;br /&gt;
&lt;br /&gt;
      // Merge object&lt;br /&gt;
      Extra = TCLJSONObject.Create;&lt;br /&gt;
      Extra.AddPair('status', TCLJSONValue.Str('ok'));&lt;br /&gt;
      Obj.Merge(Extra);&lt;br /&gt;
&lt;br /&gt;
      // Deep value access (Optional)&lt;br /&gt;
      Val = Obj.GetValueByPath('ParentLevel.ChildLevel');&lt;br /&gt;
&lt;br /&gt;
      // Add JSON to Memo&lt;br /&gt;
      ResultMemo.Lines.Text = Obj.ToJSONString;&lt;br /&gt;
&lt;br /&gt;
      // Deep value shown (Optional)&lt;br /&gt;
      ShowMessage('Deep value: ' + Val.AsString);&lt;br /&gt;
&lt;br /&gt;
    except&lt;br /&gt;
      ShowMessage('Error: ' + LastExceptionMessage);&lt;br /&gt;
    }&lt;br /&gt;
  except&lt;br /&gt;
    ShowMessage('Unexpected Error: ' + LastExceptionMessage);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  MyForm = TClForm.Create(Self);&lt;br /&gt;
&lt;br /&gt;
  NameEdt = MyForm.AddNewProEdit(MyForm,'NameEdt','Name');&lt;br /&gt;
  NameEdt.Align = alTop;&lt;br /&gt;
  NameEdt.Height = 35;&lt;br /&gt;
  NameEdt.Margins.Left = 25;&lt;br /&gt;
  NameEdt.Margins.Bottom = 25;&lt;br /&gt;
  NameEdt.Margins.Right = 25;&lt;br /&gt;
&lt;br /&gt;
  AgeEdt = MyForm.AddNewProEdit(MyForm,'AgeEdt','Age');&lt;br /&gt;
  AgeEdt.Align = alTop;&lt;br /&gt;
  AgeEdt.Height = 35;&lt;br /&gt;
  AgeEdt.Margins.Left = 25;&lt;br /&gt;
  AgeEdt.Margins.Bottom = 25;&lt;br /&gt;
  AgeEdt.Margins.Right = 25;&lt;br /&gt;
&lt;br /&gt;
  ActiveChk = MyForm.AddNewCheckBox(MyForm,'ActiveChk','Active');&lt;br /&gt;
  ActiveChk.Align = alTop;&lt;br /&gt;
  ActiveChk.Margins.Left = 15;&lt;br /&gt;
  ActiveChk.Margins.Top = 10;&lt;br /&gt;
&lt;br /&gt;
  ResultMemo = MyForm.AddNewMemo(MyForm,'ResultMemo','JSON Output');&lt;br /&gt;
  ResultMemo.Align = alClient;&lt;br /&gt;
  ResultMemo.Height = 200;&lt;br /&gt;
  ResultMemo.StyledSettings = ssFamily;&lt;br /&gt;
  ResultMemo.TextSettings.WordWrap = True;&lt;br /&gt;
&lt;br /&gt;
  ShowBtn = MyForm.AddNewProButton(MyForm,'ShowBtn','Show JSON');&lt;br /&gt;
  ShowBtn.Align = alBottom;&lt;br /&gt;
  ShowBtn.Margins.Left = 15;&lt;br /&gt;
  ShowBtn.Margins.Right = 15;&lt;br /&gt;
  ShowBtn.Margins.Bottom = 10;&lt;br /&gt;
  ShowBtn.OnClick = 'GenerateJSON';&lt;br /&gt;
&lt;br /&gt;
  MyForm.Run;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Output:&lt;br /&gt;
&lt;br /&gt;
[[File:TCLJSONExample.png|frameless|700px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; See Also &amp;lt;/h2&amp;gt;&lt;br /&gt;
* [[TCLJSONObject]]&lt;br /&gt;
* [[TCLJSONArray]]&lt;br /&gt;
* [[TCLJSONValue]]&lt;br /&gt;
* [[TCLJSONPair]]&lt;br /&gt;
&lt;br /&gt;
{{#seo:|title=TCLJSON Library Overview - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description=Learn how to create, manipulate, validate, and save JSON objects and arrays using TCLJSON, with examples and type-safe value handling.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=TclJSON&amp;diff=4058</id>
		<title>TclJSON</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=TclJSON&amp;diff=4058"/>
		<updated>2025-10-21T12:36:05Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TCLJSON is a structured and type-safe JSON processing library designed to facilitate the creation, manipulation, and validation of JSON data. It enables the definition of objects, arrays, and values representing standard JSON types, including strings, numbers, booleans, and null elements.&lt;br /&gt;
&lt;br /&gt;
The library provides mechanisms for constructing hierarchical data models, performing key-value pair operations, merging multiple JSON structures, and retrieving nested elements through deep path access. TCLJSON ensures strict compliance with JSON syntax rules, offering validation methods to verify data integrity during parsing and serialization.&lt;br /&gt;
&lt;br /&gt;
In addition to in-memory operations, TCLJSON supports persistent data handling through file-based loading and saving of JSON content. Its strongly typed architecture promotes reliability, consistency, and maintainability in applications that require structured data representation, configuration management, or data exchange using the JSON format.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #007bff; background-color: #e6f7ff; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #007bff; padding-bottom: 5px;&amp;quot; | Information: What is TCLJSON?&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding-top: 5px;&amp;quot; | TCLJSON allows you to create, manipulate, and serialize JSON data structures. It supports nested objects, arrays, type-safe values, deep path access, merging, cloning, and file operations.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot; style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
! Class !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[TCLJSONObject]] || Represents a JSON object with key-value pairs. Provides methods for adding, removing, merging, cloning, and deep path access.&lt;br /&gt;
|-&lt;br /&gt;
| [[TCLJSONArray]] || Represents a JSON array with ordered values. Supports adding/removing values or objects, merging, cloning, and enumeration.&lt;br /&gt;
|-&lt;br /&gt;
| [[TCLJSONValue]] || Encapsulates a JSON value (string, integer, number, boolean, datetime, or null) and provides type-safe methods.&lt;br /&gt;
|-&lt;br /&gt;
| [[TCLJSONPair]] || Represents a single key-value pair inside a JSON object.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #28a745; background-color: #d4edda; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #28a745; padding-bottom: 5px;&amp;quot; | Important: Type-Safe JSON Values&lt;br /&gt;
|-&lt;br /&gt;
| TCLJSONValue provides class functions like '''Str''', '''Int''', '''Bool''', '''Num''', '''DT''', and '''Null''' to safely create JSON values without manual conversion.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot; style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0; width:100%&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Definition&lt;br /&gt;
|-&lt;br /&gt;
| '''TCLJSONObject''' || obj : TCLJSONObject; || Creates a variable for JSON object.&lt;br /&gt;
|-&lt;br /&gt;
| '''TCLJSONArray''' || arr : TCLJSONArray; || Creates a variable for JSON array.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddPair''' || obj.AddPair('key', TCLJSONValue.Str('value')); || Adds a key-value pair to JSON object.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddObject''' || obj.AddObject('child', ChildObj); || Adds a nested JSON object.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddArray''' || obj.AddArray('letters', Arr); || Adds a JSON array inside object.&lt;br /&gt;
|-&lt;br /&gt;
| '''Merge''' || obj.Merge(ExtraObj); || Merges another object into current.&lt;br /&gt;
|-&lt;br /&gt;
| '''GetValueByPath''' || val = obj.GetValueByPath('level1.level2'); || Retrieves a value from nested path.&lt;br /&gt;
|-&lt;br /&gt;
| '''ToJSONString''' || obj.ToJSONString; || Converts object/array to JSON string.&lt;br /&gt;
|-&lt;br /&gt;
| '''IsValidJSON''' || TCLJSON.IsValidJSON(str); || Checks if string is valid JSON.&lt;br /&gt;
|-&lt;br /&gt;
| '''SaveObjectToFile''' || TCLJSON.SaveObjectToFile(obj, 'file.json'); || Saves JSON object to file.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example: TCLJSON in Action ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var&lt;br /&gt;
  MyForm: TClForm;&lt;br /&gt;
  NameEdt, AgeEdt: TClProEdit;&lt;br /&gt;
  ActiveChk: TClCheckBox;&lt;br /&gt;
  ShowBtn: TClProButton;&lt;br /&gt;
  ResultMemo: TClMemo;&lt;br /&gt;
&lt;br /&gt;
void GenerateJSON&lt;br /&gt;
var&lt;br /&gt;
  Obj, Child, Extra: TCLJSONObject;&lt;br /&gt;
  Arr: TCLJSONArray;&lt;br /&gt;
  Val: TCLJSONValue;&lt;br /&gt;
{&lt;br /&gt;
  try&lt;br /&gt;
    // Main JSON object&lt;br /&gt;
    Obj = TCLJSONObject.Create;&lt;br /&gt;
    try&lt;br /&gt;
      Obj.AddPair('name', TCLJSONValue.Str(NameEdt.Text));&lt;br /&gt;
      Obj.AddPair('age', TCLJSONValue.Int(StrToInt(AgeEdt.Text)));&lt;br /&gt;
      Obj.AddPair('active', TCLJSONValue.Bool(ActiveChk.isChecked));&lt;br /&gt;
&lt;br /&gt;
      // Nested object&lt;br /&gt;
      Child = TCLJSONObject.Create;&lt;br /&gt;
      Child.AddPair('ChildLevel', TCLJSONValue.Str('This is a deep value'));&lt;br /&gt;
      Obj.AddObject('ParentLevel', Child);&lt;br /&gt;
&lt;br /&gt;
      // Array&lt;br /&gt;
      Arr = TCLJSONArray.Create;&lt;br /&gt;
      Arr.AddValue(TCLJSONValue.Str('X'));&lt;br /&gt;
      Arr.AddValue(TCLJSONValue.Str('Y'));&lt;br /&gt;
      Arr.AddValue(TCLJSONValue.Str('Z'));&lt;br /&gt;
      Obj.AddArray('letters', Arr);&lt;br /&gt;
&lt;br /&gt;
      // Merge object&lt;br /&gt;
      Extra = TCLJSONObject.Create;&lt;br /&gt;
      Extra.AddPair('status', TCLJSONValue.Str('ok'));&lt;br /&gt;
      Obj.Merge(Extra);&lt;br /&gt;
&lt;br /&gt;
      // Deep value access (Optional)&lt;br /&gt;
      Val = Obj.GetValueByPath('ParentLevel.ChildLevel');&lt;br /&gt;
&lt;br /&gt;
      // Add JSON to Memo&lt;br /&gt;
      ResultMemo.Lines.Text = Obj.ToJSONString;&lt;br /&gt;
&lt;br /&gt;
      // Deep value shown (Optional)&lt;br /&gt;
      ShowMessage('Deep value: ' + Val.AsString);&lt;br /&gt;
&lt;br /&gt;
    except&lt;br /&gt;
      ShowMessage('Error: ' + LastExceptionMessage);&lt;br /&gt;
    }&lt;br /&gt;
  except&lt;br /&gt;
    ShowMessage('Unexpected Error: ' + LastExceptionMessage);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  MyForm = TClForm.Create(Self);&lt;br /&gt;
&lt;br /&gt;
  NameEdt = MyForm.AddNewProEdit(MyForm,'NameEdt','Name');&lt;br /&gt;
  NameEdt.Align = alTop;&lt;br /&gt;
  NameEdt.Height = 35;&lt;br /&gt;
  NameEdt.Margins.Left = 25;&lt;br /&gt;
  NameEdt.Margins.Bottom = 25;&lt;br /&gt;
  NameEdt.Margins.Right = 25;&lt;br /&gt;
&lt;br /&gt;
  AgeEdt = MyForm.AddNewProEdit(MyForm,'AgeEdt','Age');&lt;br /&gt;
  AgeEdt.Align = alTop;&lt;br /&gt;
  AgeEdt.Height = 35;&lt;br /&gt;
  AgeEdt.Margins.Left = 25;&lt;br /&gt;
  AgeEdt.Margins.Bottom = 25;&lt;br /&gt;
  AgeEdt.Margins.Right = 25;&lt;br /&gt;
&lt;br /&gt;
  ActiveChk = MyForm.AddNewCheckBox(MyForm,'ActiveChk','Active');&lt;br /&gt;
  ActiveChk.Align = alTop;&lt;br /&gt;
  ActiveChk.Margins.Left = 15;&lt;br /&gt;
  ActiveChk.Margins.Top = 10;&lt;br /&gt;
&lt;br /&gt;
  ResultMemo = MyForm.AddNewMemo(MyForm,'ResultMemo','JSON Output');&lt;br /&gt;
  ResultMemo.Align = alClient;&lt;br /&gt;
  ResultMemo.Height = 200;&lt;br /&gt;
  ResultMemo.StyledSettings = ssFamily;&lt;br /&gt;
  ResultMemo.TextSettings.WordWrap = True;&lt;br /&gt;
&lt;br /&gt;
  ShowBtn = MyForm.AddNewProButton(MyForm,'ShowBtn','Show JSON');&lt;br /&gt;
  ShowBtn.Align = alBottom;&lt;br /&gt;
  ShowBtn.Margins.Left = 15;&lt;br /&gt;
  ShowBtn.Margins.Right = 15;&lt;br /&gt;
  ShowBtn.Margins.Bottom = 10;&lt;br /&gt;
  ShowBtn.OnClick = 'GenerateJSON';&lt;br /&gt;
&lt;br /&gt;
  MyForm.Run;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Output:&lt;br /&gt;
&lt;br /&gt;
[[File:TCLJSONExample.png|frameless|700px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; See Also &amp;lt;/h2&amp;gt;&lt;br /&gt;
* [[TCLJSONObject]]&lt;br /&gt;
* [[TCLJSONArray]]&lt;br /&gt;
* [[TCLJSONValue]]&lt;br /&gt;
* [[TCLJSONPair]]&lt;br /&gt;
&lt;br /&gt;
{{#seo:|title=TCLJSON Library Overview - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description=Learn how to create, manipulate, validate, and save JSON objects and arrays using TCLJSON, with examples and type-safe value handling.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=File:TCLJSONExample.png&amp;diff=4057</id>
		<title>File:TCLJSONExample.png</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=File:TCLJSONExample.png&amp;diff=4057"/>
		<updated>2025-10-21T12:34:36Z</updated>

		<summary type="html">&lt;p&gt;Salih: Salih uploaded a new version of File:TCLJSONExample.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=TclJSON&amp;diff=4056</id>
		<title>TclJSON</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=TclJSON&amp;diff=4056"/>
		<updated>2025-10-21T11:30:21Z</updated>

		<summary type="html">&lt;p&gt;Salih: Created page with &amp;quot;TCLJSON is a structured and type-safe JSON processing library designed to facilitate the creation, manipulation, and validation of JSON data. It enables the definition of objects, arrays, and values representing standard JSON types, including strings, numbers, booleans, and null elements.  The library provides mechanisms for constructing hierarchical data models, performing key-value pair operations, merging multiple JSON structures, and retrieving nested elements throug...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TCLJSON is a structured and type-safe JSON processing library designed to facilitate the creation, manipulation, and validation of JSON data. It enables the definition of objects, arrays, and values representing standard JSON types, including strings, numbers, booleans, and null elements.&lt;br /&gt;
&lt;br /&gt;
The library provides mechanisms for constructing hierarchical data models, performing key-value pair operations, merging multiple JSON structures, and retrieving nested elements through deep path access. TCLJSON ensures strict compliance with JSON syntax rules, offering validation methods to verify data integrity during parsing and serialization.&lt;br /&gt;
&lt;br /&gt;
In addition to in-memory operations, TCLJSON supports persistent data handling through file-based loading and saving of JSON content. Its strongly typed architecture promotes reliability, consistency, and maintainability in applications that require structured data representation, configuration management, or data exchange using the JSON format.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #007bff; background-color: #e6f7ff; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #007bff; padding-bottom: 5px;&amp;quot; | Information: What is TCLJSON?&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding-top: 5px;&amp;quot; | TCLJSON allows you to create, manipulate, and serialize JSON data structures. It supports nested objects, arrays, type-safe values, deep path access, merging, cloning, and file operations.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot; style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
! Class !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[TCLJSONObject]] || Represents a JSON object with key-value pairs. Provides methods for adding, removing, merging, cloning, and deep path access.&lt;br /&gt;
|-&lt;br /&gt;
| [[TCLJSONArray]] || Represents a JSON array with ordered values. Supports adding/removing values or objects, merging, cloning, and enumeration.&lt;br /&gt;
|-&lt;br /&gt;
| [[TCLJSONValue]] || Encapsulates a JSON value (string, integer, number, boolean, datetime, or null) and provides type-safe methods.&lt;br /&gt;
|-&lt;br /&gt;
| [[TCLJSONPair]] || Represents a single key-value pair inside a JSON object.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 100%; border: 1px solid #28a745; background-color: #d4edda; border-radius: 5px; padding: 15px; border-collapse: separate;&amp;quot;&lt;br /&gt;
| style=&amp;quot;font-weight: bold; color: #28a745; padding-bottom: 5px;&amp;quot; | Important: Type-Safe JSON Values&lt;br /&gt;
|-&lt;br /&gt;
| TCLJSONValue provides class functions like '''Str''', '''Int''', '''Bool''', '''Num''', '''DT''', and '''Null''' to safely create JSON values without manual conversion.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot; style=&amp;quot;margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0; width:100%&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Definition&lt;br /&gt;
|-&lt;br /&gt;
| '''TCLJSONObject''' || obj : TCLJSONObject; || Creates a variable for JSON object.&lt;br /&gt;
|-&lt;br /&gt;
| '''TCLJSONArray''' || arr : TCLJSONArray; || Creates a variable for JSON array.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddPair''' || obj.AddPair('key', TCLJSONValue.Str('value')); || Adds a key-value pair to JSON object.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddObject''' || obj.AddObject('child', ChildObj); || Adds a nested JSON object.&lt;br /&gt;
|-&lt;br /&gt;
| '''AddArray''' || obj.AddArray('letters', Arr); || Adds a JSON array inside object.&lt;br /&gt;
|-&lt;br /&gt;
| '''Merge''' || obj.Merge(ExtraObj); || Merges another object into current.&lt;br /&gt;
|-&lt;br /&gt;
| '''GetValueByPath''' || val = obj.GetValueByPath('level1.level2'); || Retrieves a value from nested path.&lt;br /&gt;
|-&lt;br /&gt;
| '''ToJSONString''' || obj.ToJSONString; || Converts object/array to JSON string.&lt;br /&gt;
|-&lt;br /&gt;
| '''IsValidJSON''' || TCLJSON.IsValidJSON(str); || Checks if string is valid JSON.&lt;br /&gt;
|-&lt;br /&gt;
| '''SaveObjectToFile''' || TCLJSON.SaveObjectToFile(obj, 'file.json'); || Saves JSON object to file.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example: TCLJSON in Action ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var&lt;br /&gt;
  MyForm: TClForm;&lt;br /&gt;
  NameEdt, AgeEdt: TClProEdit;&lt;br /&gt;
  ActiveChk: TClCheckBox;&lt;br /&gt;
  ShowBtn: TClProButton;&lt;br /&gt;
  ResultMemo: TClMemo;&lt;br /&gt;
&lt;br /&gt;
void GenerateJSON&lt;br /&gt;
var&lt;br /&gt;
  Obj, Child, Extra: TCLJSONObject;&lt;br /&gt;
  Arr: TCLJSONArray;&lt;br /&gt;
  Val: TCLJSONValue;&lt;br /&gt;
{&lt;br /&gt;
  try&lt;br /&gt;
    // Main JSON object&lt;br /&gt;
    Obj = TCLJSONObject.Create;&lt;br /&gt;
    try&lt;br /&gt;
      Obj.AddPair('name', TCLJSONValue.Str(NameEdt.Text));&lt;br /&gt;
      Obj.AddPair('age', TCLJSONValue.Int(StrToInt(AgeEdt.Text)));&lt;br /&gt;
      Obj.AddPair('active', TCLJSONValue.Bool(ActiveChk.isChecked));&lt;br /&gt;
&lt;br /&gt;
      // Nested object&lt;br /&gt;
      Child = TCLJSONObject.Create;&lt;br /&gt;
      Child.AddPair('ChildLevel', TCLJSONValue.Str('This is a deep value'));&lt;br /&gt;
      Obj.AddObject('ParentLevel', Child);&lt;br /&gt;
&lt;br /&gt;
      // Array&lt;br /&gt;
      Arr = TCLJSONArray.Create;&lt;br /&gt;
      Arr.AddValue(TCLJSONValue.Str('X'));&lt;br /&gt;
      Arr.AddValue(TCLJSONValue.Str('Y'));&lt;br /&gt;
      Arr.AddValue(TCLJSONValue.Str('Z'));&lt;br /&gt;
      Obj.AddArray('letters', Arr);&lt;br /&gt;
&lt;br /&gt;
      // Merge object&lt;br /&gt;
      Extra = TCLJSONObject.Create;&lt;br /&gt;
      Extra.AddPair('status', TCLJSONValue.Str('ok'));&lt;br /&gt;
      Obj.Merge(Extra);&lt;br /&gt;
&lt;br /&gt;
      // Deep value access (Optional)&lt;br /&gt;
      Val = Obj.GetValueByPath('ParentLevel.ChildLevel');&lt;br /&gt;
&lt;br /&gt;
      // Add JSON to Memo&lt;br /&gt;
      ResultMemo.Lines.Text = Obj.ToJSONString;&lt;br /&gt;
&lt;br /&gt;
      // Deep value shown (Optional)&lt;br /&gt;
      ShowMessage('Deep value: ' + Val.AsString);&lt;br /&gt;
&lt;br /&gt;
    except&lt;br /&gt;
      ShowMessage('Error: ' + LastExceptionMessage);&lt;br /&gt;
    }&lt;br /&gt;
  except&lt;br /&gt;
    ShowMessage('Unexpected Error: ' + LastExceptionMessage);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  MyForm = TClForm.Create(Self);&lt;br /&gt;
&lt;br /&gt;
  NameEdt = MyForm.AddNewProEdit(MyForm,'NameEdt','Name');&lt;br /&gt;
  NameEdt.Align = alTop;&lt;br /&gt;
  NameEdt.Height = 35;&lt;br /&gt;
  NameEdt.Margins.Left = 25;&lt;br /&gt;
  NameEdt.Margins.Bottom = 25;&lt;br /&gt;
  NameEdt.Margins.Right = 25;&lt;br /&gt;
&lt;br /&gt;
  AgeEdt = MyForm.AddNewProEdit(MyForm,'AgeEdt','Age');&lt;br /&gt;
  AgeEdt.Align = alTop;&lt;br /&gt;
  AgeEdt.Height = 35;&lt;br /&gt;
  AgeEdt.Margins.Left = 25;&lt;br /&gt;
  AgeEdt.Margins.Bottom = 25;&lt;br /&gt;
  AgeEdt.Margins.Right = 25;&lt;br /&gt;
&lt;br /&gt;
  ActiveChk = MyForm.AddNewCheckBox(MyForm,'ActiveChk','Active');&lt;br /&gt;
  ActiveChk.Align = alTop;&lt;br /&gt;
  ActiveChk.Margins.Left = 15;&lt;br /&gt;
  ActiveChk.Margins.Top = 10;&lt;br /&gt;
&lt;br /&gt;
  ResultMemo = MyForm.AddNewMemo(MyForm,'ResultMemo','JSON Output');&lt;br /&gt;
  ResultMemo.Align = alClient;&lt;br /&gt;
  ResultMemo.Height = 200;&lt;br /&gt;
  ResultMemo.StyledSettings = ssFamily;&lt;br /&gt;
  ResultMemo.TextSettings.WordWrap = True;&lt;br /&gt;
&lt;br /&gt;
  ShowBtn = MyForm.AddNewProButton(MyForm,'ShowBtn','Show JSON');&lt;br /&gt;
  ShowBtn.Align = alBottom;&lt;br /&gt;
  ShowBtn.Margins.Left = 15;&lt;br /&gt;
  ShowBtn.Margins.Right = 15;&lt;br /&gt;
  ShowBtn.Margins.Bottom = 10;&lt;br /&gt;
  ShowBtn.OnClick = 'GenerateJSON';&lt;br /&gt;
&lt;br /&gt;
  MyForm.Run;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Output:&lt;br /&gt;
&lt;br /&gt;
[[File:TCLJSONExample.png|frameless|600px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; See Also &amp;lt;/h2&amp;gt;&lt;br /&gt;
* [[TCLJSONObject]]&lt;br /&gt;
* [[TCLJSONArray]]&lt;br /&gt;
* [[TCLJSONValue]]&lt;br /&gt;
* [[TCLJSONPair]]&lt;br /&gt;
&lt;br /&gt;
{{#seo:|title=TCLJSON Library Overview - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description=Learn how to create, manipulate, validate, and save JSON objects and arrays using TCLJSON, with examples and type-safe value handling.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=File:TCLJSONExample.png&amp;diff=4055</id>
		<title>File:TCLJSONExample.png</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=File:TCLJSONExample.png&amp;diff=4055"/>
		<updated>2025-10-21T11:28:41Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=TclGridLayout&amp;diff=4054</id>
		<title>TclGridLayout</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=TclGridLayout&amp;diff=4054"/>
		<updated>2025-10-21T09:02:30Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;alert alert-ligth border border-3 border-primary-subtle rounded-5 p-4 shadow-sm&amp;quot; role=&amp;quot;alert&amp;quot;&amp;gt;&lt;br /&gt;
function AddNewGridLayout(AComponent: TCLComponent; xName: string): TclGridLayout;	&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&amp;lt;b&amp;gt;AComponent&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; : Specifies the parent of the object to be defined.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&amp;lt;b&amp;gt;xName&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; : The name of the defined GridLayout should be written.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is used to arrange components on the form within a fixed grid structure. Simply put, it automatically places buttons, labels, and other visual elements into rows and columns based on predefined item width and height values. When the current row or column becomes full, the layout automatically continues placing elements in the next one.&lt;br /&gt;
&lt;br /&gt;
This layout ensures that all components are aligned and sized uniformly, creating a clean and balanced interface. TCLGridLayout is particularly useful when you need a consistent, grid-like arrangement of elements — for example, in dashboards, icon views, or uniform control layouts that must maintain equal spacing and proportions.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The features and usage are provided in the table below.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature  !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of  !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Definition &lt;br /&gt;
|-&lt;br /&gt;
|TclGridLayout || GridLayout1 : TclGridLayout; || A variable belonging to the TclGridLayout class is created.&lt;br /&gt;
|-&lt;br /&gt;
|AddNewGridLayout || GridLayout1 = Form1.AddNewGridLayout(Form1,'GridLayout1'); || A new TclGridLayout is added to the form.&lt;br /&gt;
|-&lt;br /&gt;
|Align || GridLayout1.Align = alTop; || Specifies how the GridLayout is aligned within its parent container. Multiple alignment options are available. See the [[Object_Properties#Align | page]] for more details.&lt;br /&gt;
|-&lt;br /&gt;
|ItemHeight || GridLayout1.ItemHeight = 50; || Defines the height of each item (child control) within the grid layout.&lt;br /&gt;
|-&lt;br /&gt;
|ItemWidth || GridLayout1.ItemWidth = 100; || Defines the width of each item (child control) within the grid layout.&lt;br /&gt;
|-&lt;br /&gt;
|Margins || GridLayout1.Margins.Left = 50; // Right, Top, Bottom || Allows setting margins around the GridLayout container.&amp;lt;br&amp;gt;[[File:PanelAppearance.png|frameless|200px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Example&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   var   &lt;br /&gt;
   MyForm:TclForm;&lt;br /&gt;
   GridLayout:TCLGridLayout;&lt;br /&gt;
   testButton : TclButton;&lt;br /&gt;
   I:integer;&lt;br /&gt;
   NewHeightEdit,NewWidthEdit : TCLLabel;&lt;br /&gt;
   ChangeSizeButton : TclButton;&lt;br /&gt;
   &lt;br /&gt;
   void ChangeSize{&lt;br /&gt;
   &lt;br /&gt;
     GridLayout.ItemHeight = NewHeightEdit.Text;&lt;br /&gt;
     GridLayout.ItemWidth = NewWidthEdit.Text;&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
 {&lt;br /&gt;
   MyForm=TclForm.Create(self);&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
    GridLayout = MyForm.AddNewGridLayout(MyForm,'GridLayout');&lt;br /&gt;
    GridLayout.Align = alClient;&lt;br /&gt;
    GridLayout.ItemHeight = 50;&lt;br /&gt;
    GridLayout.ItemWidth = 50;&lt;br /&gt;
&lt;br /&gt;
    for (I = 0 to 10) {&lt;br /&gt;
      testButton = MyForm.AddNewButton(GridLayout,'testButton'+IntToStr(I),'Button'+IntToStr(I));&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    NewWidthEdit = MyForm.AddNewEdit(MyForm,'NewWidthEdit', 'New Width');&lt;br /&gt;
    NewWidthEdit.Align = alTop;&lt;br /&gt;
    &lt;br /&gt;
    NewHeightEdit = MyForm.AddNewEdit(MyForm,'NewHeightEdit', 'New Height');&lt;br /&gt;
    NewHeightEdit.Align = alTop;&lt;br /&gt;
   &lt;br /&gt;
    ChangeSizeButton = MyForm.AddNewButton(MyForm,'ChangeSizeButton','Change');&lt;br /&gt;
    ChangeSizeButton.Align = alTop;&lt;br /&gt;
    ChangeSizeButton.Margins.Top = 20;&lt;br /&gt;
    ChangeSizeButton.Margins.Bottom = 20;&lt;br /&gt;
    MyForm.AddNewEvent(ChangeSizeButton,tbeOnClick,'ChangeSize');&lt;br /&gt;
    MyForm.Run;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Output:&lt;br /&gt;
&lt;br /&gt;
[[File:GridLayout.gif|frameless|thumb|600px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; See Also &amp;lt;/h2&amp;gt;&lt;br /&gt;
* [[Components]]&lt;br /&gt;
* [[Object Properties]]&lt;br /&gt;
* [[TclLayout]]&lt;br /&gt;
&lt;br /&gt;
{{#seo:|title=TclScaledLayout Using in Clomosy - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description= Learn how TclScaledLayout automatically scales and arranges visual components, keeping interface proportions consistent across different resolutions.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=Components&amp;diff=4053</id>
		<title>Components</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=Components&amp;diff=4053"/>
		<updated>2025-10-21T08:36:02Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In software development, components are reusable objects used to perform specific functions. Components can serve a wide range of tasks, from user interface elements to more technical functions like data access or network communication.&amp;lt;br&amp;gt;&lt;br /&gt;
Clomosy components are object-oriented and derived from the TCLComponent class, which allows them to be categorized as either visual (interacting with the user interface) or non-visual (working in the background) elements.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-warning&amp;quot; role=&amp;quot;alert&amp;quot; data-bs-theme=&amp;quot;light&amp;quot;&amp;gt;&lt;br /&gt;
To use component properties, please visit the &amp;lt;b&amp;gt;[[Object Properties]]&amp;lt;/b&amp;gt; page.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; Visual Components &amp;lt;/h2&amp;gt;&lt;br /&gt;
Visual components are elements that appear in the user interface and interact directly with users. These components allow users to easily access specific functions within the screens provided by the software.&amp;lt;br&amp;gt;&lt;br /&gt;
Examples of visual components include buttons, text boxes, lists, and image boxes. Users can interact with these components by clicking, entering data, or making selections to engage with the program.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt; Standard Components &amp;lt;/h3&amp;gt; &lt;br /&gt;
Standard components are commonly used to provide basic user interface and application functionality. These components form the foundation of an application's core functions and are typically available by default in most development environments.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Component Name !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Explanation &lt;br /&gt;
|-&lt;br /&gt;
| [[TclPanel]] || A basic panel component that acts as a container for organizing other components.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclLayout]] || A layout component used to arrange, group, and maintain a specific order for control elements.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclScaledLayout]] || A layout component used to arrange, group, and maintain a specific order of control elements while preserving their original aspect ratios.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclFlowLayout]] || A layout component that arranges controls in a flow, moving items to the next line when space runs out.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclGridLayout]] || A layout component that arranges controls in a uniform grid based on fixed item Width and Heigth, moving items to the next row when space runs out.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclLabel]] || A label component used to display fixed text.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclEdit]] || An input box that allows the user to enter short text.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclMemo]] || A text box providing multi-line text entry and display.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclButton]] || A button component used to initiate actions when clicked by the user.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclImage]] || An image component used to display visual elements on the screen.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclChart]] || A chart component used to visualize data in the form of graphs.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclVertScrollBox]] || A box that displays content within a vertically scrollable area.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclHorzScrollBox]] || A box that displays content within a horizontally scrollable area.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclFramedScrollBox]] || A box that displays content within a scrollable framed area.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclRadioButton]] || A component used to allow the user to select only one option within a group of choices.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclCheckBox]] || A checkbox that allows selection among multiple options.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclComboBox]] || A drop-down menu component that allows the user to choose one of the options.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclExpander]] || An expander component used to create areas that can be opened or closed when clicked.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclQRCodeGenerator]] || A component used to generate QR codes.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclListView]] || A listing component used to display data in list format. &lt;br /&gt;
|-&lt;br /&gt;
| [[TclMenuFrame]] || A frame component used for organizing menu structures.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclStringGrid]] || A grid component displaying data in a tabular format with cells.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclWebBrowser]] || A browser component for displaying web pages within the application.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclSearchBox]] || A search box used to enable users to perform search actions.&lt;br /&gt;
|-&lt;br /&gt;
| [[TClNumberBox]] || A component used exclusively for numeric data entry.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclPageControl]] || A tabbed interface component that allows displaying content on different pages.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclSwitch]] || A toggle component that allows switching between on and off states.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclBitmapListAnimation]] || It is a component used to create animations.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclCircle]] || TclCircle represents a graphic element in the shape of a circle or ellipse.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclRectangle]] || The TclRectangle component represents a rectangle and is commonly used in interface designs as a background or region.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclRadioGroup]] || A RadioGroup is a component used to allow the selection of only one option from multiple choices.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt; Advanced Technology Components &amp;lt;/h4&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Component Name !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Explanation &lt;br /&gt;
|-&lt;br /&gt;
| [[Camera Access]] || A component that provides access to the device's camera for capturing photos or videos.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt; Professional Components &amp;lt;/h3&amp;gt;&lt;br /&gt;
Pro components offer more advanced features and functionality, going beyond standard components. Pro components are used for more complex user interactions or special requirements and often provide additional features.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, a TclProListViewDesignerPanel enables advanced list editing or data display. These components are especially preferred in professional and specialized applications where more functionality and customizability are needed.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-warning&amp;quot; role=&amp;quot;alert&amp;quot; data-bs-theme=&amp;quot;light&amp;quot;&amp;gt;&lt;br /&gt;
You can use these features over the json structure. Visit the [[Pro Object Properties]] page to learn about the available parameters and how to use them.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Component Name !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Explanation &lt;br /&gt;
|-&lt;br /&gt;
| [[TclProPanel]] || A professional panel component used to organize advanced components.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclProLabel]] || A professional label component with enhanced features for displaying fixed text.&lt;br /&gt;
|-&lt;br /&gt;
| [[TClProEdit]] || A professional input box that allows short text entry.&lt;br /&gt;
|-&lt;br /&gt;
| [[TClProDateEdit]] || A professional date picker component that facilitates date entry.&lt;br /&gt;
|-&lt;br /&gt;
| [[TClProSearchEdit]] || A professional component with search functionality, allowing text input.&lt;br /&gt;
|-&lt;br /&gt;
| [[TClProButton]] || A professional button component used to initiate advanced actions.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclProImage]] || A professional image component offering enhanced image display features.&lt;br /&gt;
|-&lt;br /&gt;
| [[TClProListView]] || A professional list component that displays data in list format with advanced features.&lt;br /&gt;
|-&lt;br /&gt;
| [[TClProListViewDesignerPanel]] || A professional list design panel used for organizing and customizing lists.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclProGrid]] || A professional grid component for displaying data in tabular format with advanced editing and viewing features.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; Non-Visual Components &amp;lt;/h2&amp;gt; &lt;br /&gt;
Non-visual components are components that are not visible in the user interface but perform specific functions in the background. These components are used for tasks such as data processing, timers, database connections, or file operations, and they do not interact directly with the user.&amp;lt;br&amp;gt;&lt;br /&gt;
For example, a TclTimer component can perform specific actions at set intervals.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Component Name !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Explanation &lt;br /&gt;
|-&lt;br /&gt;
| [[TClTimer]] || A timer component used to trigger processes at specified intervals.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclOpenAIEngine]] || A component used to integrate OpenAI's artificial intelligence services.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclDeviceManager]] || A component used for device management and accessing device features.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclMediaPlayer]] || A media player component that supports audio playback functions.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclHttp]] || A component used for data communication over the HTTP protocol.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclRest]] || A component that facilitates data exchange with RESTful services.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclMQTT]] || A component enabling messaging and data communication between devices using the MQTT protocol.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclMQTTClient]] || A Component for connecting to an MQTT Broker, used for publishing and subscribing to real-time topics.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclBlobField]] || A BLOB field used to store and manage large data pieces (images, videos, files).&lt;br /&gt;
|-&lt;br /&gt;
| [[TclFileStream]] || A component used to manage file streams and access files.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclMemoryStream]] || A component used to manage data streams within memory.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclGameEngine]] || It is a game engine component used to develop word-based games.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-success&amp;quot; role=&amp;quot;alert&amp;quot; data-bs-theme=&amp;quot;light&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 class=&amp;quot;alert-heading&amp;quot;&amp;gt;Events&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;It is a function or action triggered when a specific event occurs, such as user interaction (e.g., clicking a button, mouse movement) or system status (e.g., completion of a file or network connection loss).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div class =&amp;quot;green-learn-more&amp;quot; &amp;gt;&lt;br /&gt;
[[Events|Learn More]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; See Also &amp;lt;/h2&amp;gt;&lt;br /&gt;
* [[TRObject Language]]&lt;br /&gt;
* [[Object Properties]]&lt;br /&gt;
* [[Pro Object Properties]]&lt;br /&gt;
* [[Sensor Structures]]&lt;br /&gt;
{{#seo:|title=Components in Clomosy - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description=Learn about Components in Clomosy. A guide to understanding and using various components to build powerful mobile apps with ease.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=TclGridLayout&amp;diff=4052</id>
		<title>TclGridLayout</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=TclGridLayout&amp;diff=4052"/>
		<updated>2025-10-21T08:31:10Z</updated>

		<summary type="html">&lt;p&gt;Salih: Created page with &amp;quot;&amp;lt;div class=&amp;quot;alert alert-ligth border border-3 border-primary-subtle rounded-5 p-4 shadow-sm&amp;quot; role=&amp;quot;alert&amp;quot;&amp;gt; function AddNewGridLayout(AComponent: TCLComponent; xName: string): TclFlowLayout;	 &amp;lt;/div&amp;gt; &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&amp;lt;b&amp;gt;AComponent&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; : Specifies the parent of the object to be defined.&amp;lt;br&amp;gt;  &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&amp;lt;b&amp;gt;xName&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; : The name of the defined GridLayout should be written.&amp;lt;br&amp;gt;   It is used to arrange components on the form within a fixed gri...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;alert alert-ligth border border-3 border-primary-subtle rounded-5 p-4 shadow-sm&amp;quot; role=&amp;quot;alert&amp;quot;&amp;gt;&lt;br /&gt;
function AddNewGridLayout(AComponent: TCLComponent; xName: string): TclFlowLayout;	&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&amp;lt;b&amp;gt;AComponent&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; : Specifies the parent of the object to be defined.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&amp;lt;b&amp;gt;xName&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; : The name of the defined GridLayout should be written.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is used to arrange components on the form within a fixed grid structure. Simply put, it automatically places buttons, labels, and other visual elements into rows and columns based on predefined item width and height values. When the current row or column becomes full, the layout automatically continues placing elements in the next one.&lt;br /&gt;
&lt;br /&gt;
This layout ensures that all components are aligned and sized uniformly, creating a clean and balanced interface. TCLGridLayout is particularly useful when you need a consistent, grid-like arrangement of elements — for example, in dashboards, icon views, or uniform control layouts that must maintain equal spacing and proportions.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The features and usage are provided in the table below.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature  !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of  !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Definition &lt;br /&gt;
|-&lt;br /&gt;
|TclGridLayout || GridLayout1 : TclGridLayout; || A variable belonging to the TclGridLayout class is created.&lt;br /&gt;
|-&lt;br /&gt;
|AddNewGridLayout || GridLayout1 = Form1.AddNewGridLayout(Form1,'GridLayout1'); || A new TclGridLayout is added to the form.&lt;br /&gt;
|-&lt;br /&gt;
|Align || GridLayout1.Align = alTop; || Specifies how the GridLayout is aligned within its parent container. Multiple alignment options are available. See the [[Object_Properties#Align | page]] for more details.&lt;br /&gt;
|-&lt;br /&gt;
|ItemHeight || GridLayout1.ItemHeight = 50; || Defines the height of each item (child control) within the grid layout.&lt;br /&gt;
|-&lt;br /&gt;
|ItemWidth || GridLayout1.ItemWidth = 100; || Defines the width of each item (child control) within the grid layout.&lt;br /&gt;
|-&lt;br /&gt;
|Margins || GridLayout1.Margins.Left = 50; // Right, Top, Bottom || Allows setting margins around the GridLayout container.&amp;lt;br&amp;gt;[[File:PanelAppearance.png|frameless|200px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Example&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   var   &lt;br /&gt;
   MyForm:TclForm;&lt;br /&gt;
   GridLayout:TCLGridLayout;&lt;br /&gt;
   testButton : TclButton;&lt;br /&gt;
   I:integer;&lt;br /&gt;
   NewHeightEdit,NewWidthEdit : TCLLabel;&lt;br /&gt;
   ChangeSizeButton : TclButton;&lt;br /&gt;
   &lt;br /&gt;
   void ChangeSize{&lt;br /&gt;
   &lt;br /&gt;
     GridLayout.ItemHeight = NewHeightEdit.Text;&lt;br /&gt;
     GridLayout.ItemWidth = NewWidthEdit.Text;&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
 {&lt;br /&gt;
   MyForm=TclForm.Create(self);&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
    GridLayout = MyForm.AddNewGridLayout(MyForm,'GridLayout');&lt;br /&gt;
    GridLayout.Align = alClient;&lt;br /&gt;
    GridLayout.ItemHeight = 50;&lt;br /&gt;
    GridLayout.ItemWidth = 50;&lt;br /&gt;
&lt;br /&gt;
    for (I = 0 to 10) {&lt;br /&gt;
      testButton = MyForm.AddNewButton(GridLayout,'testButton'+IntToStr(I),'Button'+IntToStr(I));&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    NewWidthEdit = MyForm.AddNewEdit(MyForm,'NewWidthEdit', 'New Width');&lt;br /&gt;
    NewWidthEdit.Align = alTop;&lt;br /&gt;
    &lt;br /&gt;
    NewHeightEdit = MyForm.AddNewEdit(MyForm,'NewHeightEdit', 'New Height');&lt;br /&gt;
    NewHeightEdit.Align = alTop;&lt;br /&gt;
   &lt;br /&gt;
    ChangeSizeButton = MyForm.AddNewButton(MyForm,'ChangeSizeButton','Change');&lt;br /&gt;
    ChangeSizeButton.Align = alTop;&lt;br /&gt;
    ChangeSizeButton.Margins.Top = 20;&lt;br /&gt;
    ChangeSizeButton.Margins.Bottom = 20;&lt;br /&gt;
    MyForm.AddNewEvent(ChangeSizeButton,tbeOnClick,'ChangeSize');&lt;br /&gt;
    MyForm.Run;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Output:&lt;br /&gt;
&lt;br /&gt;
[[File:GridLayout.gif|frameless|thumb|600px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; See Also &amp;lt;/h2&amp;gt;&lt;br /&gt;
* [[Components]]&lt;br /&gt;
* [[Object Properties]]&lt;br /&gt;
* [[TclLayout]]&lt;br /&gt;
&lt;br /&gt;
{{#seo:|title=TclScaledLayout Using in Clomosy - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description= Learn how TclScaledLayout automatically scales and arranges visual components, keeping interface proportions consistent across different resolutions.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=File:GridLayout.gif&amp;diff=4051</id>
		<title>File:GridLayout.gif</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=File:GridLayout.gif&amp;diff=4051"/>
		<updated>2025-10-21T08:26:35Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=TclFramedScrollBox&amp;diff=4050</id>
		<title>TclFramedScrollBox</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=TclFramedScrollBox&amp;diff=4050"/>
		<updated>2025-10-21T07:35:20Z</updated>

		<summary type="html">&lt;p&gt;Salih: Created page with &amp;quot;&amp;lt;div class=&amp;quot;alert alert-ligth border border-3 border-primary-subtle rounded-5 p-4 shadow-sm&amp;quot; role=&amp;quot;alert&amp;quot;&amp;gt; function AddNewFramedScrollBox(AComponent: TCLComponent; xName: string): TclFramedScrollBox;	 &amp;lt;/div&amp;gt;  &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&amp;lt;b&amp;gt;AComponent&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; : Specifies the parent of the object to be defined.&amp;lt;br&amp;gt;  &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&amp;lt;b&amp;gt;xName&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; : The name of the defined framedscrollbox should be written.&amp;lt;br&amp;gt;  AddNewFramedScrollBox (TClFramedScrollBox) creat...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;alert alert-ligth border border-3 border-primary-subtle rounded-5 p-4 shadow-sm&amp;quot; role=&amp;quot;alert&amp;quot;&amp;gt;&lt;br /&gt;
function AddNewFramedScrollBox(AComponent: TCLComponent; xName: string): TclFramedScrollBox;	&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&amp;lt;b&amp;gt;AComponent&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; : Specifies the parent of the object to be defined.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&amp;lt;b&amp;gt;xName&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; : The name of the defined framedscrollbox should be written.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
AddNewFramedScrollBox (TClFramedScrollBox) creates scrollable areas within a framed and styled container. It functions similarly to a standard scroll box but includes additional visual framing and design enhancements, making it suitable for organized and visually distinct content sections. Applications can use TclFramedScrollBox to display scrollable information while maintaining a clean, bordered layout that separates it from other interface elements.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature  !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Definition &lt;br /&gt;
|-&lt;br /&gt;
|TclFramedScrollBox || FramedScrollBox1: TclFramedScrollBox;   || A variable belonging to the TclFramedScrollBox class is created.&lt;br /&gt;
|-&lt;br /&gt;
|AddNewFramedScrollBox || FramedScrollBox1 = Form1.AddNewFramedScrollBox(Form1,'FramedScrollBox1'); || A new TclFramedScrollBox is added to the form.&lt;br /&gt;
|-&lt;br /&gt;
|ScrollBy(DeltaX,DeltaY: Integer); || FramedScrollBox1.ScrollBy(0,-100); || To scroll the contents within the control, call ScrollBy.&amp;lt;br&amp;gt;&lt;br /&gt;
The DeltaX parameter is the change in pixels along the X-axis.&amp;lt;br&amp;gt;&lt;br /&gt;
A positive DeltaX value scrolls the content to the left; a negative value scrolls the content to the right.&amp;lt;br&amp;gt;&lt;br /&gt;
The DeltaY parameter is the change in pixels along the Y-axis.&amp;lt;br&amp;gt;&lt;br /&gt;
A positive DeltaY value scrolls the content upward; a negative value scrolls the content downward.&lt;br /&gt;
|-&lt;br /&gt;
|ScrollTo(X,Y: Integer); || FramedScrollBox1.ScrollTo(0,-100); || To scroll the contents within the control, call ScrollTo.&amp;lt;br&amp;gt;&lt;br /&gt;
The X parameter is the change in pixels along the X-axis.&amp;lt;br&amp;gt;&lt;br /&gt;
A positive X value scrolls the content to the left; a negative value scrolls the content to the right.&amp;lt;br&amp;gt;&lt;br /&gt;
The Y parameter is the change in pixels along the Y-axis.&amp;lt;br&amp;gt;&lt;br /&gt;
A positive Y value scrolls the content upward; a negative value scrolls the content downward.&lt;br /&gt;
|-&lt;br /&gt;
|Width || FramedScrollBox1.Width = 150; ||Allows adjusting the width of the scrollBox.&lt;br /&gt;
|-&lt;br /&gt;
|Height || FramedScrollBox1.Height = 50; ||Allows adjusting the height of the scrollBox.&lt;br /&gt;
|-&lt;br /&gt;
|Align  || FramedScrollBox1.Align = alTop; ||With the Align parameter, you can specify where you want our component to be aligned in the form. This parameter has multiple positioning properties. See the [[Object_Properties#Align | page]] to learn about these features.&lt;br /&gt;
|-&lt;br /&gt;
|Margins || FramedScrollBox1.Margins.Left = 50; // Right, Top, Bottom ||With the Margins parameter, you can give margins at any scale from the right, left, bottom, top.&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Example&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var   &lt;br /&gt;
 MyForm:TclForm;&lt;br /&gt;
 FramedScrollBox:TClFramedScrollBox;&lt;br /&gt;
 ScrollButton : TclButton;&lt;br /&gt;
 I:integer;&lt;br /&gt;
 testLabel,testLabel2 : TclLabel;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 void ScrollDown{&lt;br /&gt;
   FramedScrollBox.ScrollBy(0,-150);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 {&lt;br /&gt;
   MyForm=TclForm.Create(self);&lt;br /&gt;
    &lt;br /&gt;
   FramedScrollBox = MyForm.AddNewFramedScrollBox(MyForm,'FramedScrollBox');&lt;br /&gt;
   FramedScrollBox.Align = alTop;&lt;br /&gt;
   FramedScrollBox.Width = 225;&lt;br /&gt;
   FramedScrollBox.Height = 250;&lt;br /&gt;
   &lt;br /&gt;
   testLabel= MyForm.AddNewLabel(FramedScrollBox,'testLabel','Hi ClomosyUser');&lt;br /&gt;
   testLabel.StyledSettings = ssFamily;&lt;br /&gt;
   testLabel.TextSettings.Font.Size=40;&lt;br /&gt;
   testLabel.Align = alTop;&lt;br /&gt;
   testLabel.Margins.Left= 50;&lt;br /&gt;
   testLabel.Margins.Top= 10; &lt;br /&gt;
   testLabel.Height = 100;&lt;br /&gt;
   testLabel.Width = 400;&lt;br /&gt;
   &lt;br /&gt;
   testLabel2= MyForm.AddNewLabel(FramedScrollBox,'testLabel2','You scrolled here');&lt;br /&gt;
   testLabel2.StyledSettings = ssFamily;&lt;br /&gt;
   testLabel2.TextSettings.Font.Size=40;&lt;br /&gt;
   testLabel2.Align = alTop;&lt;br /&gt;
   testLabel2.Margins.Left= 50;&lt;br /&gt;
   testLabel2.Margins.Top= 150; &lt;br /&gt;
   testLabel2.Height = 100;&lt;br /&gt;
   testLabel2.Width = 400;&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
   ScrollButton = MyForm.AddNewButton(MyForm,'ScrollButton','Scroll!');&lt;br /&gt;
   ScrollButton.Align = alTop;&lt;br /&gt;
   ScrollButton.Margins.Top = 20;&lt;br /&gt;
   ScrollButton.OnClick ='ScrollDown';&lt;br /&gt;
&lt;br /&gt;
   MyForm.Run;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Output:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:FramedScrollBox.gif|frameless|thumb|600px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; See Also &amp;lt;/h2&amp;gt;&lt;br /&gt;
* [[Components]]&lt;br /&gt;
* [[Object Properties]]&lt;br /&gt;
* [[AddNewEvent]]&lt;br /&gt;
{{#seo:|description=Explore TclFramedScrollBox in Clomosy! Implement seamless scrolling for efficient content navigation in mobile applications.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=File:FramedScrollBox.gif&amp;diff=4049</id>
		<title>File:FramedScrollBox.gif</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=File:FramedScrollBox.gif&amp;diff=4049"/>
		<updated>2025-10-21T07:33:12Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=Components&amp;diff=4048</id>
		<title>Components</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=Components&amp;diff=4048"/>
		<updated>2025-10-20T15:13:04Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In software development, components are reusable objects used to perform specific functions. Components can serve a wide range of tasks, from user interface elements to more technical functions like data access or network communication.&amp;lt;br&amp;gt;&lt;br /&gt;
Clomosy components are object-oriented and derived from the TCLComponent class, which allows them to be categorized as either visual (interacting with the user interface) or non-visual (working in the background) elements.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-warning&amp;quot; role=&amp;quot;alert&amp;quot; data-bs-theme=&amp;quot;light&amp;quot;&amp;gt;&lt;br /&gt;
To use component properties, please visit the &amp;lt;b&amp;gt;[[Object Properties]]&amp;lt;/b&amp;gt; page.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; Visual Components &amp;lt;/h2&amp;gt;&lt;br /&gt;
Visual components are elements that appear in the user interface and interact directly with users. These components allow users to easily access specific functions within the screens provided by the software.&amp;lt;br&amp;gt;&lt;br /&gt;
Examples of visual components include buttons, text boxes, lists, and image boxes. Users can interact with these components by clicking, entering data, or making selections to engage with the program.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt; Standard Components &amp;lt;/h3&amp;gt; &lt;br /&gt;
Standard components are commonly used to provide basic user interface and application functionality. These components form the foundation of an application's core functions and are typically available by default in most development environments.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Component Name !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Explanation &lt;br /&gt;
|-&lt;br /&gt;
| [[TclPanel]] || A basic panel component that acts as a container for organizing other components.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclLayout]] || A layout component used to arrange, group, and maintain a specific order for control elements.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclScaledLayout]] || A layout component used to arrange, group, and maintain a specific order of control elements while preserving their original aspect ratios.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclFlowLayout]] || A layout component that arranges controls in a flow, moving items to the next line when space runs out.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclLabel]] || A label component used to display fixed text.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclEdit]] || An input box that allows the user to enter short text.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclMemo]] || A text box providing multi-line text entry and display.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclButton]] || A button component used to initiate actions when clicked by the user.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclImage]] || An image component used to display visual elements on the screen.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclChart]] || A chart component used to visualize data in the form of graphs.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclVertScrollBox]] || A box that displays content within a vertically scrollable area.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclHorzScrollBox]] || A box that displays content within a horizontally scrollable area.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclRadioButton]] || A component used to allow the user to select only one option within a group of choices.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclCheckBox]] || A checkbox that allows selection among multiple options.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclComboBox]] || A drop-down menu component that allows the user to choose one of the options.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclExpander]] || An expander component used to create areas that can be opened or closed when clicked.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclQRCodeGenerator]] || A component used to generate QR codes.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclListView]] || A listing component used to display data in list format. &lt;br /&gt;
|-&lt;br /&gt;
| [[TclMenuFrame]] || A frame component used for organizing menu structures.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclStringGrid]] || A grid component displaying data in a tabular format with cells.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclWebBrowser]] || A browser component for displaying web pages within the application.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclSearchBox]] || A search box used to enable users to perform search actions.&lt;br /&gt;
|-&lt;br /&gt;
| [[TClNumberBox]] || A component used exclusively for numeric data entry.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclPageControl]] || A tabbed interface component that allows displaying content on different pages.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclSwitch]] || A toggle component that allows switching between on and off states.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclBitmapListAnimation]] || It is a component used to create animations.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclCircle]] || TclCircle represents a graphic element in the shape of a circle or ellipse.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclRectangle]] || The TclRectangle component represents a rectangle and is commonly used in interface designs as a background or region.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclRadioGroup]] || A RadioGroup is a component used to allow the selection of only one option from multiple choices.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt; Advanced Technology Components &amp;lt;/h4&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Component Name !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Explanation &lt;br /&gt;
|-&lt;br /&gt;
| [[Camera Access]] || A component that provides access to the device's camera for capturing photos or videos.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt; Professional Components &amp;lt;/h3&amp;gt;&lt;br /&gt;
Pro components offer more advanced features and functionality, going beyond standard components. Pro components are used for more complex user interactions or special requirements and often provide additional features.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, a TclProListViewDesignerPanel enables advanced list editing or data display. These components are especially preferred in professional and specialized applications where more functionality and customizability are needed.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-warning&amp;quot; role=&amp;quot;alert&amp;quot; data-bs-theme=&amp;quot;light&amp;quot;&amp;gt;&lt;br /&gt;
You can use these features over the json structure. Visit the [[Pro Object Properties]] page to learn about the available parameters and how to use them.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Component Name !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Explanation &lt;br /&gt;
|-&lt;br /&gt;
| [[TclProPanel]] || A professional panel component used to organize advanced components.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclProLabel]] || A professional label component with enhanced features for displaying fixed text.&lt;br /&gt;
|-&lt;br /&gt;
| [[TClProEdit]] || A professional input box that allows short text entry.&lt;br /&gt;
|-&lt;br /&gt;
| [[TClProDateEdit]] || A professional date picker component that facilitates date entry.&lt;br /&gt;
|-&lt;br /&gt;
| [[TClProSearchEdit]] || A professional component with search functionality, allowing text input.&lt;br /&gt;
|-&lt;br /&gt;
| [[TClProButton]] || A professional button component used to initiate advanced actions.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclProImage]] || A professional image component offering enhanced image display features.&lt;br /&gt;
|-&lt;br /&gt;
| [[TClProListView]] || A professional list component that displays data in list format with advanced features.&lt;br /&gt;
|-&lt;br /&gt;
| [[TClProListViewDesignerPanel]] || A professional list design panel used for organizing and customizing lists.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclProGrid]] || A professional grid component for displaying data in tabular format with advanced editing and viewing features.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; Non-Visual Components &amp;lt;/h2&amp;gt; &lt;br /&gt;
Non-visual components are components that are not visible in the user interface but perform specific functions in the background. These components are used for tasks such as data processing, timers, database connections, or file operations, and they do not interact directly with the user.&amp;lt;br&amp;gt;&lt;br /&gt;
For example, a TclTimer component can perform specific actions at set intervals.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Component Name !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Explanation &lt;br /&gt;
|-&lt;br /&gt;
| [[TClTimer]] || A timer component used to trigger processes at specified intervals.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclOpenAIEngine]] || A component used to integrate OpenAI's artificial intelligence services.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclDeviceManager]] || A component used for device management and accessing device features.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclMediaPlayer]] || A media player component that supports audio playback functions.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclHttp]] || A component used for data communication over the HTTP protocol.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclRest]] || A component that facilitates data exchange with RESTful services.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclMQTT]] || A component enabling messaging and data communication between devices using the MQTT protocol.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclMQTTClient]] || A Component for connecting to an MQTT Broker, used for publishing and subscribing to real-time topics.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclBlobField]] || A BLOB field used to store and manage large data pieces (images, videos, files).&lt;br /&gt;
|-&lt;br /&gt;
| [[TclFileStream]] || A component used to manage file streams and access files.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclMemoryStream]] || A component used to manage data streams within memory.&lt;br /&gt;
|-&lt;br /&gt;
| [[TclGameEngine]] || It is a game engine component used to develop word-based games.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert alert-success&amp;quot; role=&amp;quot;alert&amp;quot; data-bs-theme=&amp;quot;light&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 class=&amp;quot;alert-heading&amp;quot;&amp;gt;Events&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;It is a function or action triggered when a specific event occurs, such as user interaction (e.g., clicking a button, mouse movement) or system status (e.g., completion of a file or network connection loss).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div class =&amp;quot;green-learn-more&amp;quot; &amp;gt;&lt;br /&gt;
[[Events|Learn More]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; See Also &amp;lt;/h2&amp;gt;&lt;br /&gt;
* [[TRObject Language]]&lt;br /&gt;
* [[Object Properties]]&lt;br /&gt;
* [[Pro Object Properties]]&lt;br /&gt;
* [[Sensor Structures]]&lt;br /&gt;
{{#seo:|title=Components in Clomosy - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description=Learn about Components in Clomosy. A guide to understanding and using various components to build powerful mobile apps with ease.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=TclFlowLayout&amp;diff=4047</id>
		<title>TclFlowLayout</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=TclFlowLayout&amp;diff=4047"/>
		<updated>2025-10-20T15:08:34Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;alert alert-ligth border border-3 border-primary-subtle rounded-5 p-4 shadow-sm&amp;quot; role=&amp;quot;alert&amp;quot;&amp;gt;&lt;br /&gt;
function AddNewFlowLayout(AComponent: TCLComponent; xName: string): TclFlowLayout;	&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&amp;lt;b&amp;gt;AComponent&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; : Specifies the parent of the object to be defined.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&amp;lt;b&amp;gt;xName&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; : The name of the defined FlowLayout should be written.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is used to arrange components on the form in a sequential flow. Simply put, it automatically places buttons, labels, and other visual elements in a row or column, and moves them to the next line or column when space runs out.&lt;br /&gt;
&lt;br /&gt;
This layout ensures that the interface elements are organized neatly, maintaining proper spacing and order even when the container is resized. TCLFlowLayout is particularly useful when creating dynamic user interfaces with variable numbers of controls or when the layout needs to adapt fluidly to different screen sizes.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The features and usage are provided in the table below.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature  !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Definition &lt;br /&gt;
|-&lt;br /&gt;
|TclFlowLayout || FlowLayout1 : TclFlowLayout; || A variable belonging to the TclFlowLayout class is created.&lt;br /&gt;
|-&lt;br /&gt;
|AddNewFlowLayout || FlowLayout1 = Form1.AddNewFlowLayout(Form1,'FlowLayout1'); || A new TclFlowLayout is added to the form.&lt;br /&gt;
|-&lt;br /&gt;
|Align  || FlowLayout1.Align = alTop; || Specifies how the FlowLayout is aligned within its parent container. Multiple alignment options are available. See the [[Object_Properties#Align | page]] for more details.&lt;br /&gt;
|-&lt;br /&gt;
|FlowDirectionText || FlowLayout1.FlowDirectionText = 'RightToLeft'; || Determines the direction in which child controls flow: LeftToRight or RightToLeft (aliases: LTR/RTL).&lt;br /&gt;
|-&lt;br /&gt;
|JustifyText || FlowLayout1.JustifyText = 'Justify'; || Specifies the horizontal alignment of controls within each line: Left, Right, Center, or Justify (aliases: L/R/C, Full/Justified).&lt;br /&gt;
|-&lt;br /&gt;
|JustifyLastLineText || FlowLayout1.JustifyLastLineText = 'Center'; || Specifies the alignment of controls in the last line: Left, Right, Center, or Justify.&lt;br /&gt;
|-&lt;br /&gt;
|HorizontalGap || FlowLayout1.HorizontalGap = 7; || Sets the horizontal spacing (gap) between controls.&lt;br /&gt;
|-&lt;br /&gt;
|VerticalGap || FlowLayout1.VerticalGap = 5; || Sets the vertical spacing (gap) between lines of controls.&lt;br /&gt;
|-&lt;br /&gt;
|Margins || FlowLayout1.Margins.Left = 50; // Right, Top, Bottom || Allows setting margins around the FlowLayout container.&amp;lt;br&amp;gt;[[File:PanelAppearance.png|frameless|200px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Example&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  var   &lt;br /&gt;
   MyForm:TclForm;&lt;br /&gt;
   FlowLayout:TclFlowLayout;&lt;br /&gt;
   testButton:TCLButton;&lt;br /&gt;
   I:Integer;&lt;br /&gt;
 {&lt;br /&gt;
   MyForm=TclForm.Create(self);&lt;br /&gt;
    &lt;br /&gt;
   FlowLayout = MyForm.AddNewFlowLayout(MyForm,'FlowLayout');&lt;br /&gt;
   FlowLayout.Align = alClient;&lt;br /&gt;
   FlowLayout.JustifyText='Justify';// Left, Right, Center, or Justify (aliases: L/R/C, Full/Justified)&lt;br /&gt;
   FlowLayout.JustifyLastLineText='center';// Left, Right, Center, or Justify (aliases: L/R/C, Full/Justified)&lt;br /&gt;
   FlowLayout.FlowDirectionText='RightToLeft';//LeftToRight or RightToLeft (aliases: LTR/RTL)&lt;br /&gt;
   FlowLayout.HorizontalGap = 7;&lt;br /&gt;
   FlowLayout.VerticalGap = 5;&lt;br /&gt;
   &lt;br /&gt;
    for (I = 0 to 10) {&lt;br /&gt;
     testButton = MyForm.AddNewButton(FlowLayout,'testButton'+IntToStr(I),'Button'+IntToStr(I));&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
   MyForm.Run;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Output:&lt;br /&gt;
&lt;br /&gt;
[[File:FlowLayout.gif|frameless|thumb|600px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; See Also &amp;lt;/h2&amp;gt;&lt;br /&gt;
* [[Components]]&lt;br /&gt;
* [[Object Properties]]&lt;br /&gt;
* [[TclLayout]]&lt;br /&gt;
&lt;br /&gt;
{{#seo:|title=TclScaledLayout Using in Clomosy - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description= Learn how TclScaledLayout automatically scales and arranges visual components, keeping interface proportions consistent across different resolutions.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=File:FlowLayout.gif&amp;diff=4046</id>
		<title>File:FlowLayout.gif</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=File:FlowLayout.gif&amp;diff=4046"/>
		<updated>2025-10-20T15:06:58Z</updated>

		<summary type="html">&lt;p&gt;Salih: Salih uploaded a new version of File:FlowLayout.gif&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=TclFlowLayout&amp;diff=4045</id>
		<title>TclFlowLayout</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=TclFlowLayout&amp;diff=4045"/>
		<updated>2025-10-20T15:01:32Z</updated>

		<summary type="html">&lt;p&gt;Salih: Created page with &amp;quot;&amp;lt;div class=&amp;quot;alert alert-ligth border border-3 border-primary-subtle rounded-5 p-4 shadow-sm&amp;quot; role=&amp;quot;alert&amp;quot;&amp;gt; function AddNewFlowLayout(AComponent: TCLComponent; xName: string): TclFlowLayout;	 &amp;lt;/div&amp;gt; &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&amp;lt;b&amp;gt;AComponent&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; : Specifies the parent of the object to be defined.&amp;lt;br&amp;gt;  &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&amp;lt;b&amp;gt;xName&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; : The name of the defined FlowLayout should be written.&amp;lt;br&amp;gt;   It is used to arrange components on the form in a sequential fl...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;alert alert-ligth border border-3 border-primary-subtle rounded-5 p-4 shadow-sm&amp;quot; role=&amp;quot;alert&amp;quot;&amp;gt;&lt;br /&gt;
function AddNewFlowLayout(AComponent: TCLComponent; xName: string): TclFlowLayout;	&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&amp;lt;b&amp;gt;AComponent&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; : Specifies the parent of the object to be defined.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&amp;lt;b&amp;gt;xName&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; : The name of the defined FlowLayout should be written.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is used to arrange components on the form in a sequential flow. Simply put, it automatically places buttons, labels, and other visual elements in a row or column, and moves them to the next line or column when space runs out.&lt;br /&gt;
&lt;br /&gt;
This layout ensures that the interface elements are organized neatly, maintaining proper spacing and order even when the container is resized. TCLFlowLayout is particularly useful when creating dynamic user interfaces with variable numbers of controls or when the layout needs to adapt fluidly to different screen sizes.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The features and usage are provided in the table below.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature  !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Definition &lt;br /&gt;
|-&lt;br /&gt;
|TclFlowLayout || FlowLayout1 : TclFlowLayout; || A variable belonging to the TclFlowLayout class is created.&lt;br /&gt;
|-&lt;br /&gt;
|AddNewFlowLayout || FlowLayout1 = Form1.AddNewFlowLayout(Form1,'FlowLayout1'); || A new TclFlowLayout is added to the form.&lt;br /&gt;
|-&lt;br /&gt;
|Align  || FlowLayout1.Align = alTop; || Specifies how the FlowLayout is aligned within its parent container. Multiple alignment options are available. See the [[Object_Properties#Align | page]] for more details.&lt;br /&gt;
|-&lt;br /&gt;
|FlowDirectionText || FlowLayout1.FlowDirectionText = 'RightToLeft'; || Determines the direction in which child controls flow: LeftToRight or RightToLeft (aliases: LTR/RTL).&lt;br /&gt;
|-&lt;br /&gt;
|JustifyText || FlowLayout1.JustifyText = 'Justify'; || Specifies the horizontal alignment of controls within each line: Left, Right, Center, or Justify (aliases: L/R/C, Full/Justified).&lt;br /&gt;
|-&lt;br /&gt;
|JustifyLastLineText || FlowLayout1.JustifyLastLineText = 'Center'; || Specifies the alignment of controls in the last line: Left, Right, Center, or Justify.&lt;br /&gt;
|-&lt;br /&gt;
|HorizontalGap || FlowLayout1.HorizontalGap = 7; || Sets the horizontal spacing (gap) between controls.&lt;br /&gt;
|-&lt;br /&gt;
|VerticalGap || FlowLayout1.VerticalGap = 5; || Sets the vertical spacing (gap) between lines of controls.&lt;br /&gt;
|-&lt;br /&gt;
|Margins || FlowLayout1.Margins.Left = 50; // Right, Top, Bottom || Allows setting margins around the FlowLayout container.&amp;lt;br&amp;gt;[[File:PanelAppearance.png|frameless|200px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Example&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  var   &lt;br /&gt;
   MyForm:TclForm;&lt;br /&gt;
   FlowLayout:TclFlowLayout;&lt;br /&gt;
   testButton:TCLButton;&lt;br /&gt;
   I:Integer;&lt;br /&gt;
 {&lt;br /&gt;
   MyForm=TclForm.Create(self);&lt;br /&gt;
    &lt;br /&gt;
   FlowLayout = MyForm.AddNewFlowLayout(MyForm,'FlowLayout');&lt;br /&gt;
   FlowLayout.Align = alClient;&lt;br /&gt;
   FlowLayout.JustifyText='Justify';// Left, Right, Center, or Justify (aliases: L/R/C, Full/Justified)&lt;br /&gt;
   FlowLayout.JustifyLastLineText='center';// Left, Right, Center, or Justify (aliases: L/R/C, Full/Justified)&lt;br /&gt;
   FlowLayout.FlowDirectionText='RightToLeft';//LeftToRight or RightToLeft (aliases: LTR/RTL)&lt;br /&gt;
   FlowLayout.HorizontalGap = 7;&lt;br /&gt;
   FlowLayout.VerticalGap = 5;&lt;br /&gt;
   &lt;br /&gt;
    for (I = 0 to 10) {&lt;br /&gt;
     testButton = MyForm.AddNewButton(FlowLayout,'testButton'+IntToStr(I),'Button'+IntToStr(I));&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
   MyForm.Run;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Output:&lt;br /&gt;
&lt;br /&gt;
[[File:FlowLayout.gif|frameless|200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; See Also &amp;lt;/h2&amp;gt;&lt;br /&gt;
* [[Components]]&lt;br /&gt;
* [[Object Properties]]&lt;br /&gt;
* [[TclLayout]]&lt;br /&gt;
&lt;br /&gt;
{{#seo:|title=TclScaledLayout Using in Clomosy - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description= Learn how TclScaledLayout automatically scales and arranges visual components, keeping interface proportions consistent across different resolutions.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=File:FlowLayout.gif&amp;diff=4044</id>
		<title>File:FlowLayout.gif</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=File:FlowLayout.gif&amp;diff=4044"/>
		<updated>2025-10-20T14:59:52Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
	<entry>
		<id>https://www.docs.clomosy.com/index.php?title=TclScaledLayout&amp;diff=4043</id>
		<title>TclScaledLayout</title>
		<link rel="alternate" type="text/html" href="https://www.docs.clomosy.com/index.php?title=TclScaledLayout&amp;diff=4043"/>
		<updated>2025-10-20T13:30:54Z</updated>

		<summary type="html">&lt;p&gt;Salih: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;alert alert-ligth border border-3 border-primary-subtle rounded-5 p-4 shadow-sm&amp;quot; role=&amp;quot;alert&amp;quot;&amp;gt;&lt;br /&gt;
function AddNewScaledLayout(AComponent: TCLComponent; xName: string): TclScaledLayout;	&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&amp;lt;b&amp;gt;AComponent&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; : Specifies the parent of the object to be defined.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&amp;lt;b&amp;gt;xName&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; : The name of the defined ScaledLayout should be written.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is used to arrange and proportionally scale other components on the form. Simply put, it ensures that buttons, labels, and other visual elements maintain their relative size and position when the form is resized.  &lt;br /&gt;
&lt;br /&gt;
This layout automatically scales and adjusts its contents, making the interface consistent and visually balanced across different screen resolutions. TCLScaledLayout is particularly useful when designing responsive or resolution-independent user interfaces.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The features and usage are provided in the table below.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;table-responsive&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border: 2px solid #c3d7e0&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color: #c3d7e0&amp;quot;| Feature  !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Use of !!style=&amp;quot;background-color: #c3d7e0&amp;quot;| Definition &lt;br /&gt;
|-&lt;br /&gt;
|TclScaledLayout || ScaledLayout1 : TclScaledLayout; || A variable belonging to the TclScaledLayout class is created.&lt;br /&gt;
|-&lt;br /&gt;
|AddNewScaledLayout || ScaledLayout1 = Form1.AddNewScaledLayout(Form1,'ScaledLayout1'); || A new TclScaledLayout is added to the form.&lt;br /&gt;
|-&lt;br /&gt;
|OriginalWidth || ScaledLayout1.OriginalWidth = 150; ||Defines the reference (unscaled) width of the layout, used as the base for scaling its child components.&lt;br /&gt;
|-&lt;br /&gt;
|OriginalHeight || ScaledLayout1.OriginalHeight = 50; ||Defines the reference (unscaled) height of the layout, used as the base for scaling its child components.&lt;br /&gt;
|-&lt;br /&gt;
|Align  || ScaledLayout1.Align = alTop; ||With the Align parameter, you can specify where you want our component to be aligned in the form. This parameter has multiple positioning properties. See the [[Object_Properties#Align | page]] to learn about these features.&lt;br /&gt;
|-&lt;br /&gt;
|Margins || ScaledLayout1.Margins.Left = 50; // Right, Top, Bottom ||With the Margins parameter, you can give margins at any scale from the right, left, bottom, top.&amp;lt;br&amp;gt;[[File:PanelAppearance.png|frameless|200px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Example&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  var   &lt;br /&gt;
   MyForm:TclForm;&lt;br /&gt;
   ScaledLayout:TclScaledLayout;&lt;br /&gt;
   Edit1:TclEdit;&lt;br /&gt;
   I:Integer;&lt;br /&gt;
   testButton:TCLButton;&lt;br /&gt;
 {&lt;br /&gt;
   MyForm=TclForm.Create(self);&lt;br /&gt;
    &lt;br /&gt;
   ScaledLayout = MyForm.AddNewScaledLayout(MyForm,'ScaledLayout');&lt;br /&gt;
   ScaledLayout.Align = alClient;&lt;br /&gt;
   &lt;br /&gt;
   ScaledLayout.OriginalHeight = 900; &lt;br /&gt;
   ScaledLayout.OriginalWidth = 400; //Approximately the aspect ratio of a phone screen&lt;br /&gt;
   &lt;br /&gt;
    for (I = 0 to 1) {&lt;br /&gt;
      testButton = MyForm.AddNewButton(ScaledLayout,'testButton'+IntToStr(I),'Button'+IntToStr(I));&lt;br /&gt;
      testButton.Align = alTop;&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
   MyForm.Run;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt; See Also &amp;lt;/h2&amp;gt;&lt;br /&gt;
* [[Components]]&lt;br /&gt;
* [[Object Properties]]&lt;br /&gt;
* [[TclLayout]]&lt;br /&gt;
&lt;br /&gt;
{{#seo:|title=TclScaledLayout Using in Clomosy - Clomosy Docs}}&lt;br /&gt;
{{#seo:|description= Learn how TclScaledLayout automatically scales and arranges visual components, keeping interface proportions consistent across different resolutions.}}&lt;/div&gt;</summary>
		<author><name>Salih</name></author>
	</entry>
</feed>