Утилиты для delphi / utilities for delphi

Статус
В этой теме нельзя размещать новые ответы.

emailx45

Местный
Регистрация
5 Май 2008
Сообщения
3,571
Реакции
2,438
Credits
573
IDE Fix Pack 6.0 released – dcc64 and 10.2 Update 1 support,
but there is many other IDE Fix for other Delphi versions ok


Posted on Для просмотра ссылки Войди или Зарегистрируйся by Для просмотра ссылки Войди или Зарегистрируйся

The new Для просмотра ссылки Войди или Зарегистрируйся version 6.0 is available. It supports Delphi 10.2 RTM and 10.2 Update 1. And after over a year of being in BETA testing without any bug reports, I also included all the Win64 compiler performance optimizations. Thus the jump to version 6.0 can finally be done as they make the Win64 compiler up to 50% faster.

Changelog:
  • Added: Win64 compile speed optimizations
  • Added: Delphi 10.2 Update 1 support
  • Added: Editor Block Completion UTF8 fix (Delphi 2009 only)

Для просмотра ссылки Войди или Зарегистрируйся
 

emailx45

Местный
Регистрация
5 Май 2008
Сообщения
3,571
Реакции
2,438
Credits
573
my manual quite simple to use of

ZEBEDEE and Firebird 3.0 or another, Windows 8.0 Pro 64bits

Tunneling your trafic

[HIDE="1"]
How to use ZeBeDee with Firebird 3.0 (or another) in Windows 8.0 Pro 64bit (or another)

One PC to Firebird Server and ZeBeDee Server
--------------------------------------------
1 - Install the Firebird 3.0 (do the changes needs)
2 - Install the ZeBeDee 2.4.1A or 2.53 (download from official site)
3 - Do the changes in file "SERVER.ZBD" or add the lines

verbosity 2 # Slightly more than basic messages
#
logfile ./server.log # all log will be registered
#
detached false # You will probably want this 'true' for normal
# use but I want to make sure that you see the
# preceding message if you haven't edited this.
server true # Yes, it's a server!
updmode false # we dont need UPD ports
compression zlib:9 # Allow maximum zlib compression
keylength 256 # Allow keys up to 256 bits
keylifetime 36000 # Shared keys last 10 hours
maxbufsize 16383 # Allow maximum possible buffer size
keygenlevel 2 # Generate maximum strength private keys
checksumlevel 3 # Allow maximum strength checksums
minchecksumlevel 0 # Allow no checksums if client requests
redirect none # Disable all redirect in all ports in server
redirect 3050 # Just 3050 port from Firebird its important
target localhost:3050/tcp # the Target is the same PC (IP 127.0.0.1) because the Firebird Server its installed in this machine

4 - Now, install the ZeBeDee and create one file (text) named (for example) "CLIENT.ZBD" and add this lines:

verbosity 1 # Basic messages only
#
logfile ./clientlog.log
#
server false # Client
detached true # Closes Console
#
# You should change the next line to your environment with this example, the connection string should be localhost/3051
# You can change port 3051 to another one
#
tunnel 3051:192.168.56.1:3050 #3050 is the port on the Firebird Server PC (192.168.56.1), and 3051 is the port in Client PC

#For server in another address or site, just change the IP/PORT

5 - Its ready! Now run the ZeBeDee:

PC Server:
zebedee.exe -f server.zbd

Pc Client:
zebedee.exe -f client.zbd

6 - In PC client, in your application change the STRING CONNECTION to:

127.0.0.1/3050:ALIAS_DB_OR_ABSOLUTE_PATH_FILE_FDB

look in your windows D.O.S. ZeBeDee or in file .LOG (Server or Client) to know what its happening
The file LOG its very important!

[/HIDE]
 

emailx45

Местный
Регистрация
5 Май 2008
Сообщения
3,571
Реакции
2,438
Credits
573
FIREBIRD 3 DEVELOPERS GUIDE (PRE-BETA) NOW AVAILABLE

The first pre-beta release of the English version of the Firebird 3 Develoepers Guide is now publicly available.

Please report any problems or mistakes.

The translation work, from Russian to English, was sponsored by a crowdfunding campaign.

Thanks to all who contributed!

Для просмотра ссылки Войди или Зарегистрируйся

thanks IB-Aid Team and others
 

emailx45

Местный
Регистрация
5 Май 2008
Сообщения
3,571
Реакции
2,438
Credits
573
Для просмотра ссылки Войди или Зарегистрируйся

Для просмотра ссылки Войди или Зарегистрируйся Для просмотра ссылки Войди или Зарегистрируйся Для просмотра ссылки Войди или Зарегистрируйся
News via Для просмотра ссылки Войди или Зарегистрируйся mailing list :
Для просмотра ссылки Войди или Зарегистрируйся

The migration from SourceForge CVS to GitHub has been completed. The repository is at Для просмотра ссылки Войди или Зарегистрируйся (with clone URL [email protected]:FirebirdSQL/fiebird-documentation.git or Для просмотра ссылки Войди или Зарегистрируйся )
Для просмотра ссылки Войди или Зарегистрируйся


Members of the firebird-documentation team have write access to the repository, and in addition to me and Helen, I have given Paul rights to add (or remove) members from this team.

Be aware that FirebirdSQL organization members that are marked as ‘owner’ also have write access and can manage the team.

I have disabled the issues and projects features, but left the Wiki enabled.
If there are any problems or questions, let me know.

Mark

Mark Rotteveel
 

emailx45

Местный
Регистрация
5 Май 2008
Сообщения
3,571
Реакции
2,438
Credits
573
Generate Cross Platform Dynamic Forms At Runtime From JSON In Delphi 10.2.1 Tokyo

32xFC5U.png


The Hospitality Survey Client project is part of the Hospitality Survey App template for Delphi 10.2.1 Tokyo that Embarcadero has released through their GetIt platform. The Hospitality Survey App consists of four different projects. In this blog post I will cover the dynamic form generator that is built into the Hospitality Survey Client project. Also keep in mind that the client can be deployed to Android, iOS, macOS, and Windows with a single code base and a single responsive UI.
Basically how it works is on the server there is a database table which contains the list of survey questions to be asked to patrons from each tenant (in this case restaurant). The /survey/ end point in RAD Server is called from TBackendEndpoint (which is basically a TRESTClient) in the Survey App Client. The RAD Server end point returns the contents of the Questions table as the FireDAC JSON format. You can customize the questions using the Hospitality Survey Editor. The Client saves out the FireDAC JSON to a surveys.json file which is then loaded into an TFDMemTable. The GenerateSurvey() function (see below) loops through the records in the TFDMemTable and creates a TFrame for each record. Each record corresponds to a question in the database and you can see the different fields in a record below:
ID - An ID for the question.
name - A short name for the question with no spaces.
title - The text of the question as it will appear in the survey.
type - The type of question controls which question template is loaded on the client. The existing types are: rating, yesno, edit, options
options - If the type of the question is set to options this field is used to populate the options. It's value is a JSON array of options.
value - The value is where the user submitted data is stored. It can be left blank but could be used to provide a default answer.
category - The category of the question. This field is provided for expandability.
tenant_id - The tenant ID of the question. If the tenant_id field is blank all tenants will get the question. If it is set to a tenant only that tenant will get the question.
The Type column determines which TFrame is loaded for that record. The built in types are: rating, yesno, edit, options. You can add your own row types as well by modifying the GenerateSurvey() procedure. You can see the units below for each of the dynamic TFrames including a header frame and a complete button frame for submitting the form.
uSurveyHeaderFrame.pas - Contains the header for the top of the survey.
uRatingBarFrame.pas - Contains the star rating track bar survey question type.
uYesNoFrame.pas - Contains the Yes/No survey question type.
uEditFrame.pas - Contains the edit survey question type.
uComboBoxFrame.pas - Contains the combo box survey question type.
uCompleteFrame.pas - Contains the complete button for the survey.
The GenerateSurvey() procedure itself is pretty simple. It loops through the TFDMemTable dataset and checks the type field to see which TFrame to load and populate for that record. The options field is a JSON array that is used to populate the values for the yesno type and options type. The ID field is used to mark the TFrame with the specific question it was created from (FrameItem.Tag := BindSourceDBForm.DataSet.FieldByName('ID').AsInteger;) so that the value field can be filled out with the answer from the user.

procedure TMainForm.GenerateSurvey(Sender: TObject);
var
FrameItem: TFrame;
FieldType: String;
FieldCategory: Integer;
JSONArray: TJSONArray;
I: Integer;
begin
FrameItem := TSurveyHeaderFrame.Create(TFMXObject(Sender));
FrameItem.Parent := TFMXObject(Sender);
FrameItem.Name := 'FSurveyHeader';
FrameItem.Align := TAlignLayout.Top;
FrameItem.Position.Y := 0;

BindSourceDBForm.DataSet.First;
while not BindSourceDBForm.DataSet.Eof do
begin
FieldCategory := BindSourceDBForm.DataSet.FieldByName('category').AsInteger;

FieldType := BindSourceDBForm.DataSet.FieldByName('type').AsString;
if FieldType = 'edit' then
begin
FrameItem := TEditFrame.Create(TFMXObject(Sender));
FrameItem.Parent := TFMXObject(Sender);
TEditFrame(FrameItem).QuestionText.Text :=
BindSourceDBForm.DataSet.FieldByName('title').AsString;
end;
if FieldType = 'yesno' then
begin
FrameItem := TYesNoFrame.Create(TFMXObject(Sender));
FrameItem.Parent := TFMXObject(Sender);
TYesNoFrame(FrameItem).QuestionText.Text := BindSourceDBForm.DataSet.FieldByName('title').AsString;
JSONArray := TJSONObject.ParseJSONValue(BindSourceDBForm.DataSet.FieldByName('options').AsString) as TJSONArray;
for I := 0 to JSONArray.Count - 1 do
begin
case I of
0:
begin
TYesNoFrame(FrameItem).ValueSpeedButton1.Text := JSONArray.Items.Value;
TYesNoFrame(FrameItem).ValueSpeedButton1.GroupName := BindSourceDBForm.DataSet.FieldByName('name').AsString;
end;
1:
begin
TYesNoFrame(FrameItem).ValueSpeedButton2.Text := JSONArray.Items.Value;
TYesNoFrame(FrameItem).ValueSpeedButton2.GroupName := BindSourceDBForm.DataSet.FieldByName('name').AsString;
end;
end;
end;
JSONArray.Free;
end;
if FieldType = 'rating' then
begin
FrameItem := TRatingBarFrame.Create(TFMXObject(Sender));
FrameItem.Parent := TFMXObject(Sender);
TRatingBarFrame(FrameItem).QuestionText.Text := BindSourceDBForm.DataSet.FieldByName('title').AsString;
end;
if FieldType = 'options' then
begin
FrameItem := TOptionsFrame.Create(TFMXObject(Sender));
FrameItem.Parent := TFMXObject(Sender);
TOptionsFrame(FrameItem).QuestionText.Text := BindSourceDBForm.DataSet.FieldByName('title').AsString;
JSONArray := TJSONObject.ParseJSONValue(BindSourceDBForm.DataSet.FieldByName('options').AsString) as TJSONArray;
TOptionsFrame(FrameItem).ValueComboBox.Items.BeginUpdate;
for I := 0 to JSONArray.Count - 1 do
begin
TOptionsFrame(FrameItem).ValueComboBox.Items.Add(JSONArray.Items.Value);
end;
TOptionsFrame(FrameItem).ValueComboBox.Items.EndUpdate;
JSONArray.Free;
end;
FrameItem.Name := 'F' + BindSourceDBForm.DataSet.FieldByName('ID').AsString;
FrameItem.Align := TAlignLayout.Top;
FrameItem.Tag := BindSourceDBForm.DataSet.FieldByName('ID').AsInteger;
FrameItem.Position.Y := BindSourceDBForm.DataSet.FieldByName('ID').AsInteger * 100;

BindSourceDBForm.DataSet.Next;
Application.ProcessMessages;
end;

FrameItem := TCompleteFrame.Create(TFMXObject(Sender));
FrameItem.Parent := TFMXObject(Sender);
FrameItem.Name := 'FComplete';
FrameItem.Align := TAlignLayout.Top;
FrameItem.Position.Y := 1000000;
TCompleteFrame(FrameItem).CompleteButton.OnClick := CompleteClick;

end;
The selected option in each TFrame gets sent back to the TFDMemTable via the UpdateValueByID() procedure as you can see below. In the below code the Self.Tag field corresponds to the ID field of the question.

procedure TOptionsFrame.ValueComboBoxChange(Sender: TObject);
begin
MainForm.UpdateValueByID(Self.Tag,ValueComboBox.Items[ValueComboBox.ItemIndex]);
end;
The UpdateValueByID() procedure uses the Locate() procedure on the DataSet to find the correct record and then update the value field.

procedure TMainForm.UpdateValueByID(ID: Integer; const Value: string);
begin
if BindSourceDBForm.DataSet.Locate('ID', VarArrayOf([ID]), []) = True then
begin
BindSourceDBForm.DataSet.Edit;
BindSourceDBForm.DataSet.FieldByName('value').AsString := Value;
BindSourceDBForm.DataSet.Post;
end;
end;

Once the survey has been completed by the user then the entire contents of the TFDMemTable are saved out to the FireDAC JSON format and uploaded back to the server via a POST from a TBackendEndpoint component to the /survey/complete endpoint. In the case of the Hospitality Survey App all of the uploaded records are saved for each collected survey. This allows the survey questions to be created, removed, and changed without affecting any of the existing surveys that have already been collected.

tQHpaYC.jpg
 
Статус
В этой теме нельзя размещать новые ответы.