Forum Replies Created
-
AuthorPosts
-
JohnGParticipant
Following on the Range Markers idea…
How about events for Meter (min/max) limit, and Range (low/high) limit?
These would trip if some limit was reached.
Some commercial panel meter images attached, for inspiration.
John
JohnGParticipant> I'm in dire need of help learning how to design a good form in Delphi
Years ago, Microsoft published a book on the visual aspects of application design. Whether it's still available I don't know. Also, check their KnowledgeBase, you'll likely find some documents there. Google should help too.
> pages look good no matter how the screen is resized
There are/were 3rd party components for this. A post in the Embt/Delphi/ThirdParty forum should get you some answers.
Some general thoughts…
– different kinds of apps tend to have different styles of visual presentation
(eg: money management, scientific, audio, music, industrial, medical, etc)
– look at all kinds of apps on the 'net (whether they're ones you're interested in, or not). Make notes on the different styles you see. Which ones “click” for you, visually (speaks to your personal taste)? Which ones seem downright “ugly”? (Which ones are “confusing” will depend somewhat on your understanding of what the app does.)
– will the app be in-house, or publicly available?
– related to the previous… who are your users/customers? Are they conservative, bleeding edge, or…?
– will there be a series of apps that must maintain a visual theme?
– to some extent the functionality of the app defines the presentation
– logical in layout (like an address form) and visually intuitive.
– since you posted in an A.C. forum, I assume you're talking about Windows VCL apps. Consider that there are basic “standards” for a Windows app, like menu bars and popup menus, the border icons, etc. Users know and are quite familiar with these ways of navigating in an app. That doesn't mean you're locked into using them. But if you depart from the accepted way, make sure your users can relate (intuitively and logically) to what you've done.
– watch out for “cool” — does it really fit with what you're presenting (or who you're presenting to)? I include Alpha Controls in this category. I sometimes feel like the proverbial kid in a candy shop, when testing design ideas with A.C. I've learned that restraint is a good thing. 🙂
Hope this helps,
John
JohnGParticipantHello Support…
The problem is only *partially* resolved.
Steps to reproduce:
– recompile the demo app with A.C. v10.22
– run
– click the “Skin Active” button, so that the skin is disabled.
– in the “TabStyle” radiogroup, select Buttons or FlatButtons.
What I see is that the pagecontrol background is white (not properly painted).
(If “Tabs” is selected, the background is ok)
Thanks,
John
JohnGParticipantI assume you mean the .exe of the Demo app.
See attached.
John
JohnGParticipantHello Support,
I just rebuilt my app with v10.21.
The cutoff problem persists 🙁
As noted in my previous post, I think it might be an issue with this particular popup. I've created a new popup menu (with the same structure as the problem one) from scratch, and all is okay.
John
JohnGParticipantI look forward to v10.21 🙂
However, I've been doing some further checking…
This is what I've found:
– if I replace the 32×32 image with a 24×24 one (in the problem popup), the visual cutoff continues.
– if I replace the existing Skin Manager and Provider, and do a rebuild, the problem persists.
– if I build a new popup menu from scratch, there is _no_ cutoff problem — the shortcuts are fully visible, when the app is skinned.
I've looked at the dfm as text, and don't see anything obvious there.
I'm not sure what to think, but it seems it's not necessarily an A.C. problem?
John
JohnGParticipantWell, I broke down and used an sTitleBar component, using _wide_ images to create the spacing for each item.
Thinking about the appearance of different skins, I imagine there's a way to define icon spacing using the Skin Editor. Someday, I'll take a look. I've been spoiled so far, by the ease of using the AC components as they come, straight out of the box.
John
JohnGParticipantQuote:the following code should work for you:
So that's how you do it. Thanks!
JohnGParticipantThankyou! I was stuck in my own view and couldn't see this.
Not an AC problem, so especially thanks for taking the time to look.
John
JohnGParticipantHello,
The first demo was more complex than needed. But there was a reason for that: to demonstrate and confirm that my config set/get technique was working correctly — it was, except for the Radiogroups.
Attached is a stripped-down demo, using only 2 Radiogroups. There is also a Combobox demo attached. Both projects use the exact same code, except for the Radiogroup vs the Combobox on the Config form.
It's hard to believe that there are such problems with a Radiogroup, after all these years of Delphi development. I would be happy to be shown the error of my ways. 🙂
John
[attachment=6953:Radiogroup Test.zip]
[attachment=6954:Combobox Test.zip]
JohnGParticipantQuote:Maybe AlphaConvert may do this work?
I'll take a look, thanks.
JohnGParticipantQuote:but I see a same behaviour with standard controls.
Yes, I see that now. So the problem lies somewhere in the original component.
Quote:Maybe I not quite understand a problem…
The problem is that the Radiogroup's ItemIndex changes unexpectedly (when there is more than 1 Radiogroup). If I replace the sRadioGroup with sComboBox, then setting/getting config values works as expected. Now, when I set an ItemIndex := 1 it stays as configured.
I do think the visual presentation using a Radiogroup looks better for this particular case, though. Perhaps you could consider this an opportunity to improve on the original component? 😉
John
JohnGParticipantQuote:Could you localize which control was changed when this error occurs?
The components I've mainly done conversions on are: TLabel, TEdit, TPanel, TMemo, TComboBox, TRadioGroup, TGroupbox. It doesn't seem to be related to a particular component — it's happened with all that I've tried to convert. It's not consistent: it may start with (for example) attempting to convert a TPanel to TsPanel, producing an AV. After that, any other conversion attempts are usually (but not always) doomed until I restart Delphi. Sometimes I can convert several components before things begin to fall apart, other times problems happen immediately.
I've used the free version of AC with D7, D2010, XE2 and XE3. I purchased the full version last year, starting with v8.x, and now at v9.17 (working mainly with XE2 now). Conversion problems have occurred through all AC, Delphi, and GExperts versions.
In v8.x and previous AC versions, I would get an AV error. With v9.x, there is a more intelligent message, that appears to come from GExperts (attempting to convert TButton to TsButton):
[AC v9.17, GExperts v1.36, in DXE2 Pro (with updates), on Win7/64 Pro]
Error
tsbutton is not a valid component class to replace with..
OK Details >>
============== Error Details ==========================
[0AEB2795]{GExpertsRSXE2.dll} INITWIZARD0001 + $67AD1
[50332EEB]{vcl160.bpl } Vcl.Controls.TControl.Click (Line 7320, “Vcl.Controls.pas” + 9) + $8
[50357392]{vcl160.bpl } Vcl.StdCtrls.TCustomButton.Click (Line 5160, “Vcl.StdCtrls.pas” + 3) + $2
[50357EC0]{vcl160.bpl } Vcl.StdCtrls.TCustomButton.CNCommand (Line 5621, “Vcl.StdCtrls.pas” + 1) + $D
[50332995]{vcl160.bpl } Vcl.Controls.TControl.WndProc (Line 7204, “Vcl.Controls.pas” + 91) + $6
[503372F3]{vcl160.bpl } Vcl.Controls.TWinControl.WndProc (Line 9976, “Vcl.Controls.pas” + 152) + $6
[5035705C]{vcl160.bpl } Vcl.StdCtrls.TButtonControl.WndProc (Line 5002, “Vcl.StdCtrls.pas” + 13) + $4
[503325D0]{vcl160.bpl } Vcl.Controls.TControl.Perform (Line 6982, “Vcl.Controls.pas” + 10) + $8
[50337443]{vcl160.bpl } Vcl.Controls.DoControlMsg (Line 10045, “Vcl.Controls.pas” + 12) + $11
[50337ED7]{vcl160.bpl } Vcl.Controls.TWinControl.WMCommand (Line 10320, “Vcl.Controls.pas” + 1) + $5
[5044D1F8]{vcl160.bpl } Vcl.Forms.TCustomForm.WMCommand (Line 6105, “Vcl.Forms.pas” + 3) + $4
[50332995]{vcl160.bpl } Vcl.Controls.TControl.WndProc (Line 7204, “Vcl.Controls.pas” + 91) + $6
[20F90B36]{designide160.bpl} DeskUtil.SetFocusHook (Line 462, “DeskUtil.pas” + 4) + $C
[503372F3]{vcl160.bpl } Vcl.Controls.TWinControl.WndProc (Line 9976, “Vcl.Controls.pas” + 152) + $6
[5044A021]{vcl160.bpl } Vcl.Forms.TCustomForm.WndProc (Line 4344, “Vcl.Forms.pas” + 201) + $5
[50336948]{vcl160.bpl } Vcl.Controls.TWinControl.MainWndProc (Line 9689, “Vcl.Controls.pas” + 3) + $6
[500B6890]{rtl160.bpl } System.Classes.StdWndProc (Line 13878, “System.Classes.pas” + 8) + $0
[20F90B36]{designide160.bpl} DeskUtil.SetFocusHook (Line 462, “DeskUtil.pas” + 4) + $C
[503373F0]{vcl160.bpl } Vcl.Controls.TWinControl.DefaultHandler (Line 10017, “Vcl.Controls.pas” + 30) + $17
[50333340]{vcl160.bpl } Vcl.Controls.TControl.WMLButtonUp (Line 7453, “Vcl.Controls.pas” + 1) + $6
[50332995]{vcl160.bpl } Vcl.Controls.TControl.WndProc (Line 7204, “Vcl.Controls.pas” + 91) + $6
[50336B3B]{vcl160.bpl } Vcl.Controls.TWinControl.IsControlMouseMsg (Line 9745, “Vcl.Controls.pas” + 1) + $9
[503372F3]{vcl160.bpl } Vcl.Controls.TWinControl.WndProc (Line 9976, “Vcl.Controls.pas” + 152) + $6
[5035705C]{vcl160.bpl } Vcl.StdCtrls.TButtonControl.WndProc (Line 5002, “Vcl.StdCtrls.pas” + 13) + $4
[50336948]{vcl160.bpl } Vcl.Controls.TWinControl.MainWndProc (Line 9689, “Vcl.Controls.pas” + 3) + $6
[500B6890]{rtl160.bpl } System.Classes.StdWndProc (Line 13878, “System.Classes.pas” + 8) + $0
[50453213]{vcl160.bpl } Vcl.Forms.TApplication.ProcessMessage (Line 10164, “Vcl.Forms.pas” + 23) + $1
[50453256]{vcl160.bpl } Vcl.Forms.TApplication.HandleMessage (Line 10194, “Vcl.Forms.pas” + 1) + $4
[5044EA75]{vcl160.bpl } Vcl.Forms.TCustomForm.ShowModal (Line 7035, “Vcl.Forms.pas” + 33) + $5
[0AEB39DB]{GExpertsRSXE2.dll} INITWIZARD0001 + $68D17
[0AE0CD64]{GExpertsRSXE2.dll} ShowCodeLib + $11ACC
[51D40374]{vcldesigner160.bpl} VCLSurface.TVclDesignSurface.SelectionVerb (Line 3814, “VCLSurface.pas” + 1) + $1E
[50438083]{vcl160.bpl } Vcl.Menus.TMenuItem.Click (Line 2522, “Vcl.Menus.pas” + 19) + $8
[50439687]{vcl160.bpl } Vcl.Menus.TMenu.DispatchCommand (Line 3435, “Vcl.Menus.pas” + 5) + $2
[5043A8F6]{vcl160.bpl } Vcl.Menus.TPopupList.WndProc (Line 4596, “Vcl.Menus.pas” + 4) + $E
[5003CF1C]{rtl160.bpl } System.TMonitor.CheckOwningThread (Line 14411, “System.pas” + 2) + $0
[5003D222]{rtl160.bpl } System.TMonitor.Exit (Line 14600, “System.pas” + 9) + $7
[5003D25B]{rtl160.bpl } System.TMonitor.Exit (Line 14614, “System.pas” + 2) + $7
[50313723]{vcl160.bpl } Vcl.Graphics.FreeMemoryContexts (Line 7043, “Vcl.Graphics.pas” + 12) + $8
[50336948]{vcl160.bpl } Vcl.Controls.TWinControl.MainWndProc (Line 9689, “Vcl.Controls.pas” + 3) + $6
[5043A845]{vcl160.bpl } Vcl.Menus.TPopupList.MainWndProc (Line 4571, “Vcl.Menus.pas” + 2) + $5
[500B6890]{rtl160.bpl } System.Classes.StdWndProc (Line 13878, “System.Classes.pas” + 8) + $0
[50453213]{vcl160.bpl } Vcl.Forms.TApplication.ProcessMessage (Line 10164, “Vcl.Forms.pas” + 23) + $1
[50453256]{vcl160.bpl } Vcl.Forms.TApplication.HandleMessage (Line 10194, “Vcl.Forms.pas” + 1) + $4
[50453595]{vcl160.bpl } Vcl.Forms.TApplication.Run (Line 10332, “Vcl.Forms.pas” + 26) + $3
================== end Details ====================
JohnGParticipantThanks!
-
AuthorPosts