Jump to content

mierlp

uniGUI Subscriber
  • Posts

    572
  • Joined

  • Last visited

  • Days Won

    35

Posts posted by mierlp

  1. Hi

    Dominique certainly has a good point and describes what is currently happening and what
    he, -and I certainly think others here on the forum, experience.

    New functionalities is nice, but more important is a stable platform and where bug fixing 
    should receive attention. Several signals have already been issued on the forum about the 
    long stay-out of fixes, up-to-date documentation and a roadmap, - the last update is from 
    February I think.

    In any case, I don't know what Farshad's ambition is with uniGui because he responds
    fairly rarely to this type of message. A shame because it is a signal that is being delivered
    by its users of the product and I think you should do something with it.

    I am uniGui user from the first hour and I still think it is a very nice product and a great 
    achievement that Farshad has achieved, we all agree with that. We have all developed 
    one or more applications in uniGui and maybe even sold them. That would not have been 
    possible without uniGui. But it does not stop there and the developments in the market,
    the demand of the users continues. Today's applications must be multi-device if you
    like it or not. The application must have the same look and feel on both mobile and
    desktop / tablet ... responsive

    But just like Dominique I am increasingly worried about the future / continuity of 
    uniGui .. why ... because there is insufficient communication, bug fixing is too slow, 
    you have to use work-arounds to realize things that you do not like structural solution. 
    Finally my biggest concern is that I think Farshad is still the only developer. 
    Points that have already been mentioned in previous post but have not provided clarity.

    A framework such as uniGui has a lot of potential, but then more development capacity 
    must become available, bug fixing must go faster and communication must be improved.

    It is not about which framework is better, that everyone must determine for themselves 
    and another cannot do for you. Also not with examples of what the one framework can 
    or cannot do. Every framework has its own specific characteristics and use, and also 
    everyone uses it in its own way and for its own application.

    What you do see is that there are new frameworks that will certainly develop faster
    and meet the current needs of our customers, yes they are still in their infancy, 
    but are quickly moving to a higher level with a growing number of users.

    Regards Peter

  2. Hi,

    I used it on Win32 applications which was running on a vps server. We stored the report which
    are created with Fastreport in the database so everyone could use them. One of the issues is the grow
    of you're database.

    When the use images in a report and don't limit the size of the image than a report becomes large and also the database.
    When they use a image which is 4 MB, then you're database is also growin with 4 MB. And with lot's of records...it grows hard.

    Then you also have to load the database records...which also cost performanance.
     

    Now with uniGui i also save  uploaded records on disk..it's cheap and fast..the same way Mohammed describes.

    But..if you would like to store files in a database...this is what i used. Store files in a database requires a blob field.
    When you use MySQL then use a LargeBlob field. The code below is used for the FastReport i used

     

       if dmDocument.Doc.State in [dsBrowse] then begin
            dmDocument.Doc.Edit;
       end;
         try
           MemStream := TMemoryStream.Create;
           Stream := dmDocument.Doc.CreateBlobStream(dmDocument.Doc.FieldByName('Report'), bmReadWrite);
           frxReport.SaveToStream(MemStream);
           MemStream.Position := 0;
           Stream.CopyFrom(MemStream, MemStream.Size);
           if dmDocument.Doc.State in [dsInsert,dsEdit] then begin
              dmDocument.Doc.Post;
           end;
         finally
           MemStream.Free;
           Stream.Free;
         end;


    A old example using a Win32 application with a DBISAM database. I save the file into a blob field and don;t forget to save the file+extension also in the database:

    procedure TFormMain.FileLoad;
    var
      fileInfo: _WIN32_FILE_ATTRIBUTE_DATA;
      TotalSize: int64;
    begin
      FormMain.OpenDialog.Title:='Select file';
      if FormMain.OpenDialog.Execute then begin
         GetFileAttributesEx(PChar(FormMain.OpenDialog.FileName), GetFileExInfoStandard, @fileInfo);
         TotalSize := fileInfo.nFileSizeHigh shl 32 or fileInfo.nFileSizeLow;
         if TotalSize>6000000 then begin
            Application.MessageBox('This file can't be saved into the database it's larger then 6MB.', 'Warning', MB_OK+MB_ICONASTERISK+MB_DEFBUTTON1+MB_APPLMODAL);
            Abort;
         end;
         if TotalSize<6000000 then begin
            if dmDocument.Doc.State in [dsBrowse] then begin
               dmDocument.Doc.Edit;
            end;
            Bstream := dmDocument.Doc.CreateBlobStream(dmTables.Document.FieldByName('FileContent'),bmWrite);
            try
               Bstream.Seek(0, soFromBeginning);
               Fstream := TFileStream.Create(FormMain.OpenDialog.FileName, fmOpenRead or fmShareDenyWrite);
               try
                  Bstream.CopyFrom(Fstream, Fstream.Size)
               finally
                  Fstream.Free
               end;
            finally
               Bstream.Free
            end;
            dmDocument.Doc.FieldByName('FileContent').Value:=ExtractFileName(FormMain.OpenDialog.FileName);
            
         end;
     end;

    Saving the file to disk

     if dmDocument.Doc.FieldByName('FileContent').Value='' then begin
        Application.MessageBox('There's no file available!.', 'Message', MB_OK+MB_ICONEXCLAMATION+MB_DEFBUTTON1+MB_APPLMODAL);
        Abort;
     end;
     if dmDocument.Doc.FieldByName('FileContent').Value<>'' then begin
        FormMain.SaveDialog.Title:='Save file';
        sFile:=dmDocument.Doc.FieldByName('FileName').AsString;
        SaveDialog.FileName:=cBestand;
        if FormMain.SaveDialog.Execute then begin
           Bstream := dmDocument.Doc.CreateBlobStream(dmDocument.Doc.FieldByName('FileContent'), bmRead);
           try
               Bstream.Seek(0, soFromBeginning);
               with TFileStream.Create(SaveDialog.FileName,fmCreate) do
                try
                       CopyFrom(Bstream,Bstream.Size)
                   finally
                       Free
                   end;
           finally
              Bstream.Free;
           end;
         end;
      end;

     

    • Like 1
  3. i


    Would be nice if this could be implemented as standard properties after 4 years:

    http://forums.unigui.com/index.php?/topic/6727-pagecontrol-properties/&tab=comments#comment-34202

    additional properties :

    • tabAlginment
    • TabHeight
    • TabMargin
    • TabPosition (top, left, right, bottom)
    • TabSpace (space between tabs)
    • TabWidth (set width of tabs)
       

    Nice to have :

    • Hottrack
    • Hottrack Color
    • HotTrackStyle (tab, tekst or current tab where the 'tab draws a nice colored line at the top of the tab)
    • Like 1
  4. Hi

    I don't think you can use my example because I save the designed reports in a database.

    When a label or wristband is printed, the report is looked up in the database and loaded and then printed.
    Printing is then done in the same way as you normally do when it is loaded from disk. The printer on which
    this report should be printed is also stored in the database because I often use 9 printers at the same time, each
    with its own color wristband.

    // Set options    
    FormMain.frxReport.PrintOptions.ShowDialog: = False;    
    FormMain.frxReport.PrintOptions.Copies: = 0;    

    // Set correct printer    
    FormMain.frxReport.PrintOptions.Printer: = dmMain.Scan.FieldByName ('showConfigIDPrinterName'). AsString;    

    // Prepaire report    
    FormMain.frxReport.PrepareReport;  

     // Print report    
    FormMain.frxReport.print;

  5. Hi,

    If you have installed the windows drivers for this printer you can just print like you normally do on a laserprinter with A4 paper.
    Just create you label design with fastreport (which i use) and you can print. I print on several therminal TSC label printers wristbands,
    labels or tickets. All based on a design with in fastreport.

    Regards Peter

     

     

  6. Hi

    I found a solution...what did i do :

    •  the field color contains the correct color for the bullet
    •  i created a calculated field called 'bullet'
    •  in the onCalcFields i added this code : dmStatus.StatusBooking.FieldByName('Bullet').value := '=';
    •  i added the field 'bullet' as a extra column to the uniDBgrid
    •  change the font.name for this column to 'webdings'        <== important because now you got a nice big bullet
    • change the font.size for this column to 20                           <== then you got a nice big button
    •  uniDBgrid.OnDrawColumnCell i added this code
      • if ACol=1 then begin
          Attribs.Font.Color  := uniDBgrid.Datasource.Dataset.FieldByName('Color').value;
        end;

     

    ApplicationFrameHost_fWLZsP4UiT.png

  7. Hi Sherzod

    Thank you for the examples but I prefer not to work with images. You should also always include this with the installation
    and you have to make translation for the selected color and which image it it.

    Is there no other way. I am thinking, for example, of the use of ALT codes.
    Every new record receives this ALT code, which then has a standard white color.
    In the dbgrid the font size and color are adjusted to the value in the 'Color' field

    But no idea if that's possible and i solution

    Or is there a solution to based on a separate table which contains colored images / color code
    from the bullets and showing them in a dblookupcombobox...which is not possible i think?

    Regards Peter

  8. hi

    I have a table called 'Status' with the following rows:

    - StatusID (autoinc)
    - Name (var)
    - Color (var)

    The user has to select a color for a certain status. Let say the follow status :

    - In progress = yellow
    - Done = green

    The selected color is saved in the field 'Color' and contains the color colde like '$0000B9FF'

    Now i would like to show in a DBgrid, see attachment:

    - the name
    - a big dot with the
    corresponding color from the field 'Color'

    How can i do this ?

     

     

     

    dgrid with bullet.jpg

  9. Hi

    I use mysql server with devart component. Easy to host and built mirroring.

    I have a out 30 customers using the application and every customers has own database environment.

    Every database environment has via own database backup/restore possibility which we manage.

    Using a SQL script it is easy to update or change tables. Yes hou have to do it several times but thats easy to automate. But restoring database for one customer can be tricky when eveything is in 1 environments. 

    See also

    https://digitalguardian.com/blog/saas-single-tenant-vs-multi-tenant-whats-difference

  10. Hi Dominique

    I had the same situation in a vcl desktop situation  years ago.  I started with different modules and functionality in .dlls. Based on the subscription the user get extra functionality. After a year a build all functionality in one .exe because sometimes functionality of a .DLL or  a part  was needed in a other part of the software. Not in the beginnen because the design was completed but after a year new functionality was needed.

    Sure it can be done but you have to design you program in small pièces. Now i put procedures or functions in datamodules so i  can call them when needed and linked to the forms or modules where user can have subsriptions for. This is the way i build my unigui programs. 

    I m also interestet how other members deal with this and learn from it.. so i hope more members will share there experiance 

     

    Regards peter 

  11. Hi Dominique

    I don't know if your Listsource contains only 1 field or 2 fields where the 2nd is unique.
    You could then show 2 fields instead of 1 field in your dblookupcombobox.
    You can enter multiple fields with your Listfield, separated by a ;

    Another alternative could be to create a calculated field and display it in your Listfield

  12. When you set LayoutConfig.width and a % that works, see attachement

    But what's not working is the fields next to each other and will

    be placed below each other.

    Maybe it's not possibel to put them next to each other ?

    explorer_jZSq8NIeJa.png

  13. Hi

    A very simple testcase attached. In the menu click 'Show frame2'.
    You see 2 uniFieldcontainers, both are resizing when the form is resized

    The next step is that the Edit fields also resizes in width, so they must
    be a percentage compared to the uniFieldContainer2

    uniEdit2 and 3 must be stay next to each other 

    Regards Peter

    TestCase.zip

  14. See the mockup for illustration for what i need.

    See attachment when I make the following adjustments:
    - set uniFieldContainer2.Layout = fit
    - place a uniFieldSet on unFieldContainder2  with the fields
    - Result = they will be resized BUT edit2 and edit3 wexplorer_Ov2YpDDvqk.thumb.png.8dee70a3caabf2b8dd67dbada02e9aa9.pngill be below each other instead of side by side

     

    Mockup.thumb.png.465309d366c3661a7f84ca52bf924429.png

  15. Hi

    First use the myConnection component. For testing click the right button and choose for  CONNECTION EDITOR.
    Now set server, port, username, password, database and click DIRECT. I put the myConnection on the MainModule.

    Then you can use a datamodules with TQuery components and set tMyQuery.Connection to the TMyConnection component.

    In code it's about the same:

    myConnection.Server :=''you're ip address''|;
    myConnection.port= 3306;
    myConnection.Username := 'username';
    myConnection.Password := 'password';
    myConnection.Database :='databasename';
    myConnection.Connect;

    • Like 1
  16. Hi

     

    Like Abaksoft i use many barcode readers without any problem.

    The Ctrl-J i think is a barcode reader setting. Reset you're barcode reader or

    set it to the correct country code.

    A simple test, enter manual the number in the edit field and hit the enter

    key to see what happens. If searching is going well, than it's a setting in you're barcode reader.

    Typing the value is the same as what you do with scanning without the extra characters
    If it has the same behavior maybe you  have some code in the onkeydown or something else

×
×
  • Create New...