Pat Foley
Members-
Content Count
409 -
Joined
-
Last visited
-
Days Won
2
Everything posted by Pat Foley
-
Desktop App Development with Object Pascal
Pat Foley replied to PhilBoy's topic in Algorithms, Data Structures and Class Design
Much of the roadmap should include reticulation of the system you are modeling. Bond graphs allow cause effect, modular construction, and the relationship between the domains to be surfaced with causal strokes the bonds (effort vs flow) are drawn . To avoid paying 20 K to Twente sim, I draw the system out in bound book. these drawings help in connecting sources to sinks. A book on bond graphs mentioned that eigenvalue would be easier to understand written as characteristic wert. 🙂 Delphi to Laz. // in lpr was dpr {$IFDEF FPC} {$MODE Delphi}// saves using specialize in generic constructs {$ENDIF} uses {$IFnDEF FPC} {$ELSE} Interfaces, // lets the laz work {$ENDIF} -
Making both vertical axis visible at all times in TeeChart
Pat Foley replied to dummzeuch's topic in VCL
I found this This one works well. Thank you pep. at http://teechart.net/support/viewtopic.php?t=4313 -
2. May need to review how the opendialog uses style in the source then. I am running 12.2 but next year will test some stuff with 10.2 win 7 and will compare the source 3. Pix shows showmessage with and without style.
-
1. put a "banner" on the form say a tpanel and get the textextent of its caption there. use to set bounds of form add in 20*button count and be done. 2. Look at TMessageForm in Vcl.dialogs source that shows how team Emba does it. Time ~ 3 hours. 3. Pix shows windows dialog vs a TmessageForm. (arrows point out differences in needing different code to view classtype of dialogs when not using style this is 12.2 though.)
-
Case: Please Explain Why Inline Variable Prevents Compilation
Pat Foley replied to rgdawson's topic in RTL and Delphi Object Pascal
How are the () implemented then are they to be implied? procedure X(i: Integer); begin end; procedure Y; begin var f: TFunc<Integer>; //X(f); You need give the compiler a "Clue" X(f()); //runs //(procedure begin Beep; end); Boo (procedure begin Beep; end) (); //Yay! //In VBA need use either Call or add (); 'To even add a line of code. end; -
Insert an save item in ComboEdit at first position
Pat Foley replied to Nicolò Blunda's topic in FMX
What keys or click did you use to connect the append. Under windows code seems to add a line when tabbed? // if you wire up onClick In Events in Object Inspector procedure TForm13.ComboEdit1Click(Sender: TObject); begin if Sender is TComboEdit then begin var CE := Sender as TComboEdit; CE.Items.Insert(0, CE.text); //CE.Items.add(CE.Text); //CE.Items.Insert(CE.Items.Count, CE.text); CE.Text := ''; //clears for newline end; end; -
I thought Remy mentioned using Add with a memo control. Here is a Sample using a nested procedure and a procedure with arguments that pass in controls that update the UI as needed. This sample uses both Format and ToString to help show the logic in the Controls as the program runs. implementation {$R *.dfm} const BooleanOperators: TArray<string> = ['And', 'or', 'xor','NotAnd','NotOr']; var A, B, RC: Boolean; procedure TForm13.Button1Click(Sender: TObject); begin A := True; B := True; // filter the controls props here use nil or '' if control or string not made yet demo357Repair(Memo1.Lines, Listbox1.Items, nil, A, B); end; { TForm13 } /// <summary> /// The TStrings of TMEMO are passed and requires a Memo1 and a Listbox1 to work /// /// </summary> procedure TForm13.Demo357Repair(const memoStrs, lbAItems, lbBItems : TStrings;var argA,argB: Boolean); // this flyover updates the value of RC each pass // how would you update A each time function flyoverCase(const Idx: NativeInt): Boolean; begin case Idx of 0: Result := argA and argB; 1: Result := argA or argB; 2: Result := argA xor argB; 3: Result := not argA or argB; // adjust these to suit your schema 4: Result := argA and not argB; else begin Result := False; memoStrs.Add('flyover needs attention');//surface errors end; end; // A := Result; // UX = User outputs memoStrs.Add( Format('%2s = %2s %s %2s', [RC.toString, argA.ToString(True), BooleanOperators[Idx], ArgB.ToString(False)]) ); lbAItems.Add(RC.ToString); //how would you connect lbBItems end; begin for var I := Low(BooleanOperators) to High(booleanOperators) do RC := flyoverCase(I); end;
-
I like the extra one or two code lines showing gained by not showing them. If only the debug pause button had a key.
-
How do I set debugging ranges with-in lines?
Pat Foley replied to JohnLM's topic in Delphi IDE and APIs
procedure TForm1.Button1Click(Sender: TObject); begin 1 2 -- debugging started via F8. 3 4 5 6 7 -- stop debugging after this. so if i press F8, debugging will not continue to step past it 7. // move to end 8 9 end;// <== put break point here to stop loading the next block or unit use F9 to resume or f7 to enter By putting a trap at the end lets you use F9 to advance to trap to either move to next routine or F9 to run. As the program is debugged these traps are last to remove. -
Does baseform have the onMyEvent assigned to empty event simply a frameclick(Sender:TObject)begin..end? doing that allows the inherited form a stub to hook up its event.
-
The feature I like best is the time loading metric when starting the IDE... Mostly the reading is 1728 if the reading is above 22xx I will restart the IDE several times to freshen the OS file MRUs/caches. When the reading was 65xxx the machine was having a quota issue*. It would interesting to compare MMX load time on different machines. The tip of the day, refactor with and link-analyzer are used or useful. Thanks for providing it. *Edge died off then and only D12 ran albeit no Co-Pilot . The next months windows update fixed the issue.
-
I had had some luck following these rules. Place only mature controls in the palette. If a control coding is changed just select Install that seems to tell the IDE to do the right thing. Needs to be 32 bit to see install. Any existing control needs removed from the designer view with ctrl X and the control gets the update as it pasted back in. This saves restarting the IDE. Check the path of control ensure that it's codebase made the trip to 290 and not using a control that using a 11 or 280 codebase. Have a sub project that allows the custom controls and forms to be compiled as standalone allowing modular construction getting custom controls working. then the main project uses the forms that have the controls placed on them.
- 11 replies
-
- rad studio c++ builder
- custom components
-
(and 1 more)
Tagged with:
-
Only 2 GB available despite IMAGE_FILE_LARGE_ADDRESS_AWARE
Pat Foley replied to dummzeuch's topic in Windows API
My machine shows the same but shows 131.xxx when compiled as 64 I set the kernel32 to Kernelbase. My swapfile is hard set at 2917 or so. -
Features of using command line compilers for Android64, Linux64, MacOS64, iOS64.
Pat Foley replied to dmitrybv's topic in Cross-platform
1. Read the "hints" on the error your compiling for "32" 64 with version 35.0 compiler switched to using a D11 path. I would say its a proj copied from d11 codebase to to a d12 codebase that kept the d11 proj guid. -
Delete
-
My tool suspects the load.php? business most. We will see what happens.
-
They could get a free trial of a Tool to resolve issue here https://www.idera.com/ppc/precise/performance-intelligence-from-click-to-storage/ That product may provide a remedy.
-
1. form := GetParentForm(AControl); 2. example speedbutton click overridden to allow click to jump to control on another form. TpfJumper = class(TSpeedButton) private FgotoName: string; FgotoControl: TControl; procedure SetgotoControl(const Value: TControl); procedure SetgotoName(const Value: string); // procedure onclick; protected procedure Paint; override; public property gotoControl: TControl read FgotoControl write SetgotoControl; property gotoName: string read FgotoName write SetgotoName; published { Published declarations } procedure Click; override; end; 3. The events for the Control. Procedure TpfJumper.Paint; begin with Canvas do begin brush.Color := clMoneyGreen; Point(85,21),Point(17,0)]); polygon([Point(68,0),Point(68,7),Point(85,7),Point(85,34),Point(68,34),Point(68,41), Point(0,21),Point(68,0)]); end; end; procedure TpfJumper.click; begin inherited; gotoControl.Show; end; 4. In the designer you can assign several controls to one event. In the handler cast the sender as needed.
- 5 replies
-
- vcl
- component classes
-
(and 2 more)
Tagged with:
-
"Death to WITH" in your Delphi Code
Pat Foley replied to Darian Miller's topic in Tips / Blogs / Tutorials / Videos
How about qualified with. procedure TMyForm.UpdateInventoryItem(const NewQty: Integer); procedure &With(A: TDataModule; B: TTable; const NewQty: Integer); begin B.Edit; B.FieldByName('Qty').AsInteger := NewQty; B.Post; end; begin &With(dmStoreInventoryData, dmStoreInventoryData.tblUpdateItemForStore, NewQty); end; -
How about a second machine for the user. They can view old work flows to gain insight on the work flows they are working on presently. This second machine is simply left on so it doesn't need to download the "knowledge base" each time a user wants to know how a work flow was implemented last time. Since a second machine and screen is used you could charge additional license fees. If the user can get more done each day by running a second application on second machine it should pay off since first machine used for work orders and IT work done concurrently on second machine albeit losing their "knowledge base" view when backing up. In short, Historian functions adds a lot of overhead in bandwidth and screens!
-
How about procedure TChangeForm.dostuff(inDBName, inDBTable, inTable: Variant) begin if not assigned(Changeform) then Changeform := Tchangeform.create(Application); // hookup up the incoming // end;
-
Here's example of finger measure applied*. The example refactored your code into a mypanel. This code surfaces the numbers to aid in sizing. *finger measure ~ 13 mm grid layout size. I added a panel inside the ScrollBox unit Unit8; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.UITypes, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ToolWin, Vcl.ComCtrls, Vcl.ExtCtrls; type TmyPanel = class(TPanel) const // 96 dpi ~ 25.4 mm * 4 baseFinger = 96 div 2; baseFatFinger = 3 * 96 div 2; public TopOffset: Integer; Finger: Integer; class var UsedHeight: Integer; procedure Paint; override; procedure WMSIZE(var message: TWMSIZE); procedure SetUp(AParent: TWinControl; const AColor: TColor; const Offset: Integer; const AAlign: TAlign); end; TForm8 = class(TForm) ScrollBox1: TScrollBox; ToolBar1: TToolBar; Button3: TButton; Button4: TButton; Button1: TButton; Panel1: TPanel; procedure Button4Click(Sender: TObject); end; var Form8: TForm8; implementation {$R *.dfm} // Let's pass ScrollBox1 using ScrollBox in SetUp procedure parameter} //var // ScrollBox: TScrollBox; procedure TForm8.Button4Click(Sender: TObject); var panel : TmyPanel; TagNu: NativeInt; Prnt: TWinControl; Aln: TAlign; begin Prnt := panel1;//ScrollBox1; Aln := alTop;// alNone; panel := TmyPanel.Create(Self); TagNu := (Sender as TControl).Tag; Case Tagnu of 0: panel.SetUp(Prnt, clSkyBlue, 8, aln); 1: panel.SetUp(Prnt,clMoneyGreen, 4, aln); 2: panel.Setup(Prnt, clCream, 2, aln); End; end; { TmyPanel } // Note how only current numbers are used and top offset used for naming not used for scrolling! procedure TmyPanel.Paint; begin inherited; canvas.TextOut(10,10,format('%s class Top %d Rect.Top %d',[Name, UsedHeight, BoundsRect.Top])); end; procedure TmyPanel.SetUp(AParent: TWinControl; const AColor: TColor; const Offset: Integer; const AAlign: TAlign); begin Parent := AParent; self.Color := AColor; ParentBackground := False; // moved top to here to avoid firsttime flag // and when align = alNone sets panel top else // size the parent to fit with resize event finger := baseFinger; Top := UsedHeight + 2 * finger; Inc(UsedHeight, (Offset+1) * finger); TopOffset := UsedHeight; AParent.Height := TopOffset; Name := 'MyPanel'+'_'+ UsedHeight.ToString; Caption := '';//Name;// + ' ' + UseCount.ToString; Height := Offset * finger; Left := 2 * finger; Width := 200;//aParent.Width - 34 - Left; Align := AAlign; show; // if ScrollBox1.height > anOwner.Height div 2 then // begin // ScrollBox1.AutoSize := False; // ScrollBox1.Height := anOwner.Height div 2; // end; //e end; procedure TmyPanel.WMSIZE(var message: TWMSIZE); begin //Finger adjusted here finger := basefinger * {DPI/96} 1; end; end.
-
If 12 acts up I been restarting it several times just to freshen the file caches MRU. A pinched network cable caused some issues last spring.
-
Mm, What happens using F7 vs F9 key to run the program.
-
Hey, Where's the blue dots I would check in project manager that debug is bolded. Pat