Jump to content

Pat Foley

Members
  • Content Count

    376
  • Joined

  • Last visited

  • Days Won

    2

Posts posted by Pat Foley


  1. I had a path issue to my mycontrolLibrary. I fixed by making a hard path to it. 

     

    Though this is on Windows and not ARM it still may useful.   Is check if the IDE can "see" the namespaces in uses clause by hovering over them.  If not try a syntax check or compile after manually loading unit not "seen" until the IDE shows the blue tag. After a few days the need to 'prime' the IDE went away and no more small empty blue tags.    

     

     

    Screenshot 2024-05-27 122034.png


  2. 55 minutes ago, Willicious said:

    When you say "pre-made", does this mean the items have to be pre-loaded, or can this be a blank tree which is populated when loading the program?

     

    If the former, then doesn't that mean a lot of manual text editing work for the user? If the latter, how does it differ from/improve on the current stock treeview?

    Pre-make may be a bad 'fork' 😞  

     

    Otherwise saving the treeview and and reloading the treeview could allow a game to be restarted at the level the game was when tree was saved. Rather than needing to play the game at lower levels each time starting the game.  Loading the game saved at higher level would save the users time.  Or  does the menu already have this feature?   


  3. What does the SetInfo do on the TV.onclick?       

     

    I populate my treeview childnodes by finding all the menuitems at startup. Then assign the menuitems onclick to the TV. The TV then follows the menu settings.  

     

    Emba has Space Rocks game on Getit.  Jim M uses a list to animate the rocks as they created and destroyed.      

     

    Treeview has savetofile and loadfromfile.   

     

    How is the game paused? is it ctrl- C? In the future pause the game not the IDE, insert a breakpoint, and restart the game. The IDE will then pause at breakpoint.   

     

      


  4. I didn't know about tabcontrols.  Just started styles last month. Here's my stab at  it using 'Tabber' for the symbol of the TabControl Sender vs 'control' and an assignable TStylefont enum.

     

    procedure TForm7.TabControl1DrawTab(Tabber: TCustomTabControl; TabIndex:
        Integer; const Rect: TRect; Active: Boolean);
    var
        TabStr:String;
        Pt : TPoint;
        R: TRect;
        TabUnderMouse:Integer;
        JohnFontcolorStyle: TStyleFont;
    begin
      with Tabber do
      begin
        Pt := ScreenToClient(Mouse.CursorPos);
        TabUnderMouse := IndexOfTabAt(Pt.X, Pt.Y);
    
        // Setting default font color to normal
        JohnFontcolorStyle := sfTabTextActiveNormal;
    
        if (TabUnderMouse = TabIndex) and Active then
          JohnFontcolorStyle := sfTabTextActiveHot;
    
        if Active then
          JohnFontcolorStyle := sfTabTextActiveNormal;
    
        if TabUnderMouse = TabIndex then
          JohnFontcolorStyle := sfTabTextInActiveHot;
    
        with Canvas do
        begin
          R := Rect;
          Font.Color := TStyleManager.ActiveStyle.GetStyleFontColor
            (JohnFontcolorStyle);
    
          if TabIndex = 0 then
            Font.Style := [fsStrikeout];
    
          TabStr := (Tabber as TTabControl).Tabs[TabIndex]; // ?
    
          Brush.Style := bsClear;
    
          DrawText(Handle, PChar(TabStr), Length(TabStr), R, DT_SINGLELINE or
            DT_VCENTER or DT_CENTER);
        end;
    
      end;

       

     

     


  5. uses
      Vcl.Forms,
               
      MyUnit, //From TrPartUnits.bpl, if remove, breakpoint works in win32 and win64
    
      AppForm in 'AppForm.pas' {Form2};
    
    {$R *.re

    Based on your info when the myunit is removed it compiles.

     

    Delphi 12 in debugger mode even with update often shows the dissembler first under a tab. To avoid compile the program and start the program using the browser in "attach to process" under the run button to start the executable and press f7-f9 buttons if hung up in the dissembler.  If blue dots not lined up with the source check path.  


  6. Quote

    ip 8: Seldom Use Form1 In Other Forms Even in the code of other forms, try to avoid direct references to global objects, such as Form1. It is much better to declare local variables or private fields to refer to other forms. For example, the main form of a program can have a private field referring to a dialog box. Obviously this rule becomes essential if you plan creating multiple instances of the secondary form. You can keep a list in a dynamic array of the main form, or simply use the Forms array of the global Screen object to refer to any form currently existing in the application. From Macro Cantu's Sidney 10.4 Handbook

    Reading between the lines means using a string for finding a form in runtime with the Screen.   Or Each Library should just launch its own forms or class var singleton form as needed.  


  7. program App;
    
    uses
      Vcl.Forms,
      MyUnit, //From TrPartUnits.bpl, if remove, breakpoint works in win32 and win64 = please don't put MyUnit here
      AppForm in 'AppForm.pas' {Form2};
    
    {$R *.res}
    
    begin
      Application.Initialize; //Breakpoint here: on win32 is ok, but 64 the breakpoint dont stop!
      Application.MainFormOnTaskbar := True;
      Application.CreateForm(TForm2, Form2);
      Application.Run;
    end.

    If myunit is available in a library, it can't also be in the program's dpr.  Access the Library myunit in each unit uses clause as needed! 

     

    If the unit uses clause doesn't see myunit adjust the path.  Putting my myunit in apps dpr will hide these issues and defeats the goodness of modular construction methods.    


  8. I try to use EM units say roughly a font of 72 would be one inch high, on a laser printer of 600 dpi you get one inch high lettering.    Using CSS you can set the sizing to show the ... when the ... rule is set. 

     

    Somehow windows can make small images when hovering over an icon or medium size images in task view.   What's neat the image is animated. 

     

    Now I just right-size the form and use units of "fat-finger" on custom control resize events.    This resize event helps on the 4k machines.

     

     

     

     

      

    Screenshot 2024-03-18 222616.png


  9. On 3/3/2024 at 7:05 PM, Anders Melander said:

     

    Given that truncation is supposed to round towards zero, I believe that System.Trunc is correct. But then why is CVTTTSS2SI not doing that?

    Say with periodic stuff like TDateTime Trunc works well if it understood that right now is yesterday date + 0.xxxx fraction so Trunc not supposed be rounding up to zero when negative. 

     

    Conversely

     

    On the Unit circle a truncated 1/4 turn needs one turn  added to get a "reading"   of 1    Now to turn back that turn added, we remove that turn when looking at "negative values"   (-1/4 - 1)   = Trunc(-1.25) = -1.  

     

     


  10. Why not put a break point in it and use the call stack to see who needs it since you found the unit.   Or comment out half the enums or settings in it. 

     

    If it's only a dcu--view in a text editor.    

     

    The graph tool does have a build order output that could in help placing a breakpoint when compiling when unit is renamed. 


  11. Style sludge and shadow it's hard to know which window is showmodal.  I like to move the cursor to control being surfaced to help end user know which window has focus. Windows is flashing the active window though the smoke to alert you pushing buttons on inactive window. :classic_ninja:   


  12. On 3/7/2024 at 2:36 AM, dormky said:
    On 3/6/2024 at 7:27 AM, Pat Foley said:

    You could hide the pagecontrol to show the label parented to the form or change the label parent to control on top. I would use a Tpanel set to top align that "pushes" the Tabsheet/pagecontrol down to mimic the banners used in MS's XL when showing.         

    I don't want to change anything about other controls, I just need a control to be on top of all others.

     

     

    Here's putting the label on a tabsheet.  This allows giving a context to incoming label.  By using tabsheets in the IDE you can group controls readily Then show only what is needed in runtime.  

     

    var ts: TTabsheet;
    var labelNu: Integer = 1;
    
    procedure TForm1.AddLabelwithTabbedIndexClick(Sender: TObject);
    begin
      ts:= TTabsheet.Create(Self);
      ts.PageControl := PageControl1;
      ts.Caption := LabelNu.ToString;
      var llabel := TLabel.Create(Self);  //was TStaticText
      llabel.Name := 'llabel' + LabelNu.ToString;
      lLabel.Caption := 'label&' + LabelNu.ToString;
      lLabel.Parent := ts;
      //LLabel.TabStop := True;
      ts.TabVisible := True;
      Inc(labelNu);
    end;
    
    procedure TForm1.RandomShowHideTabClick(Sender: TObject);
    begin
      ts := PageControl1.Pages[Random(PageControl1.PageCount)];
      with ts do TabVisible := not tabVisible;
    end;
    
    procedure TForm1.Showllabel1Click(Sender: TObject);
    begin
      var lbl := FindComponent('llabel1');
      (lbl as TControl).show;
    end;

        


  13. 2 hours ago, dormky said:

    TFormMain = class(TForm) PageControlMain: TPageControl; Sheet1: TTabSheet;

    You could hide the pagecontrol to show the label parented to the form or change the label parent to control on top. I would use a Tpanel set to top align that "pushes" the Tabsheet/pagecontrol down to mimic the banners used in MS's XL when showing.         


  14. To find what is not connected, use the debugger.   Switch from the form view ~design tab to the code view and insert a breakpoint on a line that has a blue dot on it in left gutter. Using F5 will cover the blue with red dot if the project is in debug mode selected in manager.  

     

    Test the Button click it should halt program at the program line selected. 

     

    Test the DrawGrid ondraw event next. If the program doesn't break at the breakpoint, inspect if the Drawgrid1 event ondraw is assigned using the object inspector Events tag.  

     

     


  15. Observations 12 Patch vs 11.3

    1. 12 eats inifile lines commented out using ;  Unsure if the IDE or program made is doing it. 
    2. 12 IDE editor tabs get resized just like GEx tabs when hot switching from 4K to low resolution. Suggesting that Style needs applied for high DPI to work.  An executable with style seems to "right" size readily:)    

      


  16. Here is a sample of runtime created controls that use same string.  Plus assigns event handler. 

    const
      InputPLC256 = 'x0,x1,x32,pin64,pin128,pin255,None';
    
    procedure TForm1.Button4Click(Sender: TObject);
    begin
      for var I := 1 to 100 do
        begin
          var P := TPanel.Create(Self);
          with P do begin
            Name := 'TagInputEdit_' + I.ToString;
            SetBounds(280 - 5, 17 + I * 34, 204, 30);
            Parent := Self;
            Caption := '';
          end;
          var L := TLabel.Create(Self);
          with L do begin
            SetBounds(80, 6, 64, 22);
            Parent := P;
          end;
    
          var CB := TComboBox.Create(Self);
          with CB do begin
            SetBounds(5, 3, 65, 22);
            Parent := P;
            Show;
            onchange := TagUpdater;
            Tag := NativeInt(L);
            items.CommaText := InputPLC256;//memo1.Lines;
            Text := Items[Random(items.Count)-1];
            L.Caption := Text;
          end;
        end;
    end;
    
    procedure TForm1.TagUpdater(Sender: Tobject);
    begin
      var S := Sender as TComboBox;
      var L := TLabel(S.Tag);
      var N := S.Parent.Name;
      L.Caption := Format('%s %s', [N, S.Text]);
    end;

     

    • Like 1
×