Jump to content

corneliusdavid

Members
  • Content Count

    409
  • Joined

  • Last visited

  • Days Won

    6

Posts posted by corneliusdavid


  1. 10 minutes ago, Uwe Raabe said:

    Can you explain what you see as the benefits of the aware mode while accepting to not being able to read the tiny forms?

    I'm just starting to use Delphi 11 (having been working on a big project in 10.4). This was what I saw at first and just re-read the blog about High-DPI mode and checked the option to use it in the VCL form designer--and now the forms are scaled properly in the IDE! Basically, I was using the unaware mode because of the tiny forms.

     

    But now, comparing both aware and unaware modes, I've noticed two things: 1) the bitmaps in the forms are smaller in the High-DPI aware version of Delphi which means I need to use a VirtualImageList and include various sizes of the bitmaps so the app will use the right version as the scale changes; and 2) the code is a little crisper and a few more lines show on the screen using the same font and size.

  2. date


    You didn't mention whether this is a date, string, or integer value, so I'm just going to assume using the Date function:

    FormatDateTime('yy', Date)

     

    • Like 1

  3. 16 hours ago, rihar said:

    Has anyone here an IOS App running compiled using
    delphi 11.0 and IOS SDK 15.4. and paserver 22 ??

    You might need to run xcode on your Mac and get it updated. I had problems until I did that and it needed to install some stuff. Then I refreshed the SDK in Delphi and it upgraded to SDK 15.5.

     

    I also got the patch for Delphi 11.1. With that combination I was able to compile/deploy a simple test app to my iPad via PAServer 22.0.

     

    Any reason you can't upgrade? There are always patches coming out for everything--it's a pain to keep everything up to date, I know.


  4. You should be able to download and execute them wherever you can write to files--a data directory under a user folder is just fine. Executable files are not restricted to running only from special "Program Files" type of folder.

     

    The only caveat is that an anti-virus program may catch it and block saving/launching it if it's not signed and/or well-known.

    • Like 1

  5. Just an additional tip... You can right+click on an object (or group of objects) and select Hide Element(s) to hide ones you're not interested in. You can also put groups of components into Layers to only show a limited set at a time to make working in the LiveBindings Designer easier to manage.


  6. 6 hours ago, PenelopeSkye said:

    Even when I would bring up the code behind for the dfm file I could not find anything from it using find in files, I had to search the page.

    I guess the idea is that since a DFM is a design tool, you can see and access the components directly without needing to search. 

     

    Delphi's "Find in Files" only searches the code files (.PAS) and project files (.DPR, .DPK, .DPKW) unless you change the "Where" selection to "Search in Directories." I seldom need to search .DFM files--and then I use an external search tool.


  7. 1 hour ago, PenelopeSkye said:

    When I went to the Live Bindings Designer there were just a lot of objects and I couldn't tell how they were connected to anything else.

    By default, the LiveBindings Designer will show all objects, allowing you to hook them up. When you hook them up, lines appear between the connected ones. If there are no connections, your app is not using LiveBindings.

     

    In this screenshot, only two components are connected:

    LiveBind-edit-label.thumb.png.7be0b2ffc543166ccf47733e818dfd6c.png

     

    Hope that helps!


  8. Delphi forms and data modules are comprised of two physical files: 1) .PAS, and 2) .DFM.  The .DFM contains all the components and properties set up at design-time in the Delphi IDE; the .PAS file is the "code-behind" or the logic that makes it all work. The queries are stored in the SQL property of query objects, just another text property of a component on the form; thus, they're stored in the .DFM.

     

    What you're (likely) seeing in the version control is a difference in the .DFM, not the .PAS file. Your code (.PAS) may not have changed but if a query does, then your .DFM would change.

    • Thanks 1

  9. 28 minutes ago, Tom F said:

    FYI: There's similar functionality built into the IDE.  Use CTRL-SHIFT-C to jump back and forth between the current method in the implementation and interface section. 

    That's not similar at all. Ctrl+Shift+C is Class Completion; use Alt+UpArrow or Alt+DownArrow to jump between implementation and interface of a method. Neither of those are what I was describing.


  10. 57 minutes ago, Incus J said:

    I'm guessing from your description that the Object Inspector will become aware of, and let me select actions I've defined in a separate data module - providing I add the data module to the main form's 'uses' section?

    Yes, it does. In one project I did a while back, I separated the functionality into three different data modules, each with a TActionList and the main form used all three data modules. When selecting an action on a control, all actions from all data modules were available, easily identified by <Unit>.<Action>.


  11. I use actions a lot. In fact, sometimes I group related sets of actions into data modules, then use the data modules in the forms.

     

    Instead of double-clicking event handlers and calling procedures to do the work (or Execute methods of actions), just hook the actions directly up to the controls. 

     

    The caption of the TAction becomes the caption of the menu or button; the Execute event of the TAction becomes the OnClick event handler of the Menu or Button. You can also provide icons for the associated controls right within a TActionList as well.

     

    Later, if you decide to change the user interface from using menus to using buttons (for example), you don't have to change the captions or event handlers but just assign the TAction!

     

    There are many other ways and probably some more "pure MVC or MVVM" but this has worked really well for me.

    • Like 1
    • Thanks 1

  12. There's probably an OnChange or OnExit event handler for that DBEdit that is doing the automatic save.

     

    DBEdits have a DataSource property so you can reference the underlying data source with that property.

    DBEdits also have a DataField property which points to the field in the database for which the value is read and written.

     

    Delphi's VCL provides DBEdits as a convenience and watches when the focus leaves the control to update the data set held in memory until the entire dataset is posted back to the database. So you could simply add one line to your ButtonClick event to change the focus after the text is set:

    DBEdit86.SetFocus;

    assuming there's a DBEdit called DBEdit86. Perhaps just switch focus to the OK button or some other control. (There's also a way to just switch focus to the next control in the window but that escapes me at the moment).

     

    But a better way would be to do this programmatically (instead of trying to mimic what the DBEdit has to do), something like this:

    procedure TfDesignMaster.NoUPCButtonClick(Sender: TObject);
    begin
      DBEdit85.DataSource.Edit;
      DBEdit85.DataSource.FieldByName(DBEdit85.DataField).AsString := 'NO UPC ON ITEM';
      DBEdit85.DataSource.Post;
    end;

    Now, assuming you know what the DataSource is, you can list it explicitly instead of referencing it with "DBEdit85.DataSource"; same with the FieldName--I just used the information I had here.

     

    For example:

    procedure TfDesignMaster.NoUPCButtonClick(Sender: TObject);
    begin
      InventoryTable.Edit;
      InventoryTable.UPC.AsString := 'NO UPC ON ITEM';
      InventoryTable.Post;
    end;

    There are a couple of gotchas you need to understand that only you will be able to answer by looking at the code in that form:

    • Is the DataSet already in Edit mode?  If so, you don't need to call .Edit.
    • Will other edit controls or application logic expect the DataSet to still be in Edit mode after that button is clicked?  If so you don't want to call .Post (or call .Edit again immediately after).

    There are probably several other considerations but this is a start.

     

    • Like 2
    • Thanks 1

  13. 3 hours ago, Pat Foley said:

    I wonder why Delphi needs the system path set, wouldn't the registry be more modern pathing?   

    It's not Delphi that needs the path set--it's Windows. Windows doesn't use the registry to find and launch the application--dcc32.exe in this case.

     

    The first instance of dcc32.exe that Windows finds in the PATH is the one that runs. And by default, the last version of Delphi installed will be the version of dcc32 that automatically launches because installing Delphi prepends the system path with bin folder of that version of Delphi.


  14. I think @Stompieis right. Even though you're running it from the Studio 17.0 (Delphi 10 Seattle) folder, it might be picking up the path for the newer version of Delphi instead.

     

    On my main development machine, I have only Delphi 10.4 and 11 installed. I ran dcc32 --version from both the "21.0" and "22.0" folders:

    image.thumb.png.9bf15a84f6d25504136914c90bc52b1a.png

     

    And it picked the same one, the Delphi 11 version, both times. It used to be that Windows would look in the current folder first to run an application but I think it now looks through the PATH environment variable first.

     

    A reference sheet I keep handy shows the relationship between the compiler version, the product name, the Delphi version, and the Studio version:

    • VER300 - Delphi 10 Seattle (Delphi 23, Studio 17.0)
    • VER310 - Delphi 10.1 Berlin (Delphi 24, Studio 18.0)
    • VER320 - Delphi 10.2 Tokyo (Delphi 25, Studio 19.0)
    • VER330 - Delphi 10.3 Rio (Delphi 26, Studio 20.0)
    • VER340 - Delphi 10.4 Sydney (Delphi 27, Studio 21.0)
    • VER350 - Delphi 11 Alexandria (Delphi 28, Studio 22.0)

    When I ran the folder-specific version of dcc32, it used the correct one:

    image.thumb.png.aed10425001307d92bca0925bf08fac5.png


  15. My favorite and most used feature of the Parnassus plugin is in the Navigator plugin with it's Go To Shortcut. With a default hotkey of Ctrl+G, it drops a stack-based bookmark, incrementally searches as you type a destination, jumps there once you select it, then Escape takes you right back. I'm often going up to the implementation section to add a unit to the uses clause and then want to continue where I was at. This is a huge productivity boost for me.

     

    Most of my development is still in 10.4.2 but I know there are other IDE plugins and shortcuts that could get me close if I move on to D11. Or I could try and remember the built-in keys that do the same thing:

    • Drop a stack-based bookmark: Ctrl+K, Ctrl+G
    • Go to the Navigation Toolbar for Sections: Ctrl+Alt+N, Ctrl+Alt+S
    • Pick up the stack-based bookmark: Ctrl+Q, Ctrl+G

    YUCK!

     

    References:

×