[Delphi 7] TLabel en TColorSelect verdwijnen soms bij kop...

Pagina: 1
Acties:

Onderwerpen


  • Orwell
  • Registratie: December 2009
  • Laatst online: 08-09 22:11
... pelen stylemanifest.

Vooraf: ik heb hier gezocht naar TLabel en kon maar één random post vinden die hier niet over ging, en TColorSelect leverde helemaal niks op. Visual styles dan wel weer, maar niks met Delphi helaas.

Goed, waar ging het over. Ohja, Delphi 7 en visual styles. Als ik aan werkende forms een stylemanifest van ComCtrl 6 koppel verdwijnen een paar TLabels en TColorSelects. Het zijn altijd dezelfdes, het verandert tijdens compiletime en ook runtime niet.

Alleen lijkt me dat het probleem ergens in het automatisch Win32 API-code maken ligt, want ik verander zelf alleen eenmaal .Caption, maar dat doe ik voor alle items, niet alleen bijvoorbeeld de verdwijnendes. Hiervan de volgorde verbouwen of het even weglaten levert niks op. Elke andere property is identiek. Ook overlappen er geen controls.

Sommige andere controls zoals de TBevel worden niet meer ondersteund in ComCtrl6 en zijn daardoor foetsie, maar iets simpels als wat achter de knoppen van de IDE gewoon een LTEXT of CTEXT is, zou toch wel moeten werken?

Lullig is dat ik zelf voor zover ik weet niet bij de code achter de knoppen kan van Delphi. Win32 API is echt totaal geen probleem, maar je mag hier niet verder dan de .dfm's, waarmee je eigenlijk nog niks opschiet.

Ik heb ook nog allerhande VCL-fixpaketten gebruikt, maar die leverden helaas ook al niks op.

Zal zo wel een paar pics maken, maar veel nut hebben die niet denk ik.

Het zou een feest zijn als iemand hier een fix voor heeft! ;)

Hier nog een pic.

Afbeeldingslocatie: http://gamerneeds.org/bestanden/compareDelphi2.png
Weinig op te zien eigenlijk, behalve dat alles gewoon werkt, behalve 'Tab size' en 1 kleurselectding. Dit lijkt tot nu toe puur random, want 'Width' werkt wel bijvoorbeeld.

Wat me dus net opvalt is dat als ik veel rommel met Alt-Tab en Windows+D dat ze soms toch verschijnen:

Afbeeldingslocatie: http://gamerneeds.org/bestanden/compareDelphi.png

[ Voor 11% gewijzigd door Orwell op 25-08-2011 18:31 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Wat gebruik je precies om je app in XP styling te krijgen? Ik gebruikte 10 jaar geleden TXPManifest volgens mij; het ging volgens mij om de unit XPMan.

Anyway, zijn de backing fields van die controls assigned?

Pssst ze zijn al bij versie 15 he...

[ Voor 11% gewijzigd door Verwijderd op 26-08-2011 01:37 ]


Acties:
  • 0 Henk 'm!

  • Coltrui
  • Registratie: Maart 2001
  • Niet online

Coltrui

iddqd

Als het met alt-tab soms wel goed gaat, lijkt het me dat de paint niet goed gaat? Wat doet een Invalidate in het OnActivate-event van je form?

Edit: overigens: Raize components FTW.

[ Voor 16% gewijzigd door Coltrui op 26-08-2011 06:10 ]


Acties:
  • 0 Henk 'm!

  • Orwell
  • Registratie: December 2009
  • Laatst online: 08-09 22:11
Verwijderd schreef op vrijdag 26 augustus 2011 @ 01:36:
Wat gebruik je precies om je app in XP styling te krijgen? Ik gebruikte 10 jaar geleden TXPManifest volgens mij; het ging volgens mij om de unit XPMan.
Ik heb in de rc's (res dus) een manifest gekoppeld.
Anyway, zijn de backing fields van die controls assigned?
De term backing field zegt me niks. Dus het antwoord zal vast nee zijn. :P

Zijn dat (even gegoogled) van die:

Delphi:
1
2
3
4
5
6
7
8
9
10
11
public
  property var read fVar write fVar;

{ of }

function TMainForm.GetPrivateDinges : integer;
begin
result:=privatedinges;
end;

{ Disclaimer: it typ dit zonder IDE, dus er kunnen foutjes inzitten }


Heb eigenlijk nog niet gekeken wat voor interessante properties TLabels verder hebben naast Caption. Noem is wat leuks?
Pssst ze zijn al bij versie 15 he...
Dit is een project waar ik later pas ben ingestapt, en ik heb maar t/m D7 de benodigde packages, en boven 7 garanderen ze ook niet dat de ~100K regels code gaan compilen. Als het echt moet hiervoor zou ik wel upgraden, maar liever niet. ;)
Coltrui schreef op vrijdag 26 augustus 2011 @ 06:06:
Als het met alt-tab soms wel goed gaat, lijkt het me dat de paint niet goed gaat? Wat doet een Invalidate in het OnActivate-event van je form?

Edit: overigens: Raize components FTW.
Ik zal het zo is proberen. Nu bestaat er voor deze form alleen een OnCreate geloof ik, waar dus de captions worden geset afhangend van gekozen taal.

Raize zeg je? Eens naar kijken.

Dat Raize heeft wel een Labelvervanger, maar het zou beter zijn als de ouwe TLabel even wil meewerken.

Oh, en als ik op een TColorSelect klik (terwijl 'ie onzichtbaar is, gewoon goed mikken), verschijnt 'ie ineens.

[ Voor 22% gewijzigd door Orwell op 26-08-2011 09:32 ]


Acties:
  • 0 Henk 'm!

  • Otherside1982
  • Registratie: Februari 2009
  • Laatst online: 07:34
Die TLabel "Tab Size:" die verdwijnt, op welke control staat die? Wat is de parent van die TLabel? In de screenshots lijkt het mij de enige TLabel te zijn die rechtstreeks op de TTabSheet of TPage staat, de rest van de controls staat op TGroupBox of zo. Het kan dus zijn dat de Paint van de TTabSheet of TPage iets niet goed doet.

Op je screenshot zie ik slechts 1 TLabel die niet zichtbaar is, de color selector zie ik toch wel staan.

Acties:
  • 0 Henk 'm!

  • Orwell
  • Registratie: December 2009
  • Laatst online: 08-09 22:11
Otherside1982 schreef op vrijdag 26 augustus 2011 @ 09:29:
Die TLabel "Tab Size:" die verdwijnt, op welke control staat die? Wat is de parent van die TLabel? In de screenshots lijkt het mij de enige TLabel te zijn die rechtstreeks op de TTabSheet of TPage staat, de rest van de controls staat op TGroupBox of zo. Het kan dus zijn dat de Paint van de TTabSheet of TPage iets niet goed doet.
Dan moet ik zo even de dfm induiken. De boel slaapt nog boven, dus mag nog even niet achter PC en dus de IDE en source gaan zitten. ;)
Op je screenshot zie ik slechts 1 TLabel die niet zichtbaar is, de color selector zie ik toch wel staan.
Die onderste was weg, maar ik deed een paar keer Alt-Tab met paint en Chrome, en toen stonden ze er opeens weer. Daarmee heb ik dus de onderste screen geproduceerd terwijl ik de tekst van de bovenste screen gemaakt had. Vandaar dat de tekst niet helemaal klopt. :P

Maar bij andere tabs zijn het altijd de TColorSelects en TLabels die het niet doen.

[ Voor 6% gewijzigd door Orwell op 26-08-2011 09:37 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Wat gebruik je trouwens voor die tabs, standaard TTabControl? Tabs hebben nogal vreemde styling.

Met backing field bedoelde ik de fields die gemaakt worden voor componenten, bijv. FLabel1.

Acties:
  • 0 Henk 'm!

  • Orwell
  • Registratie: December 2009
  • Laatst online: 08-09 22:11
Verwijderd schreef op vrijdag 26 augustus 2011 @ 11:38:
Wat gebruik je trouwens voor die tabs, standaard TTabControl? Tabs hebben nogal vreemde styling.
Jep, standaard TTab met die vreemde streepjes enzo ertussen. Ik zou eens TPageControl moeten gebruiken.
Met backing field bedoelde ik de fields die gemaakt worden voor componenten, bijv. FLabel1.
Name bedoel je? Die zijn bijvoorbeeld lblTabSize enzo.

Dit heeft resultaat:

Delphi:
1
2
3
4
procedure TEditorOptForm.PagesMainChange(Sender: TObject);
begin
  lblTabSize.Refresh;
end;


... maar alleen als ik eerst naar een andere tab ga en dan terugkom, maar dat is logisch, want eerder komt dat Change niet. Interessant.

Hmm, dat ding bij OnActivate toevoegen doet wel precies wat ik wil. Ik merk trouwens ook dat TSpeedButton en TProgressBar bij het rijtje van TLabel en TColorSelect kunnen. :P

De fix dus:

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
procedure TEditorOptForm.PagesMainChange(Sender: TObject);
begin
  HelpKeyword:= Help_Topic[PagesMain.ActivePageIndex];

    // En refresh alle niet-werkende controls

    // General
    lblTabSize.Refresh;

    // Syntax
    lblElements.Refresh;
    lblForeGround.Refresh;
    cpForeGround.Refresh;
    lblBackGround.Refresh;
    cpBackGround.Refresh;
    btnSaveSyntax.Refresh;
    lblSpeed.Refresh;

    // Browsing
    lblCompletionDelay.Refresh;
    lblCCCache.Refresh;
    lblCompletionColor.Refresh;
    cpCompletionBackground.Refresh;
    btnCCCnew.Refresh;
    btnCCCdelete.Refresh;
    pbCCCache.Refresh;
end;

[ Voor 58% gewijzigd door Orwell op 26-08-2011 11:56 ]


Acties:
  • 0 Henk 'm!

  • Coltrui
  • Registratie: Maart 2001
  • Niet online

Coltrui

iddqd

Redelijke baggeroplossing, qua onderhoud en naar uitbreiding toe dan. :)
Werkt Self.Refresh niet? Of Self.Invalidate? Je wil toch niet alle componenten apart gaan refreshen, lijkt me...

[ Voor 3% gewijzigd door Coltrui op 26-08-2011 19:11 ]


Acties:
  • 0 Henk 'm!

  • Orwell
  • Registratie: December 2009
  • Laatst online: 08-09 22:11
Coltrui schreef op vrijdag 26 augustus 2011 @ 19:10:
Redelijke baggeroplossing, qua onderhoud en naar uitbreiding toe dan. :)
Behoorlijk. :P
Werkt Self.Refresh niet? Of Self.Invalidate? Je wil toch niet alle componenten apart gaan refreshen, lijkt me...
Dit zijn alle niet-werkende-items. Zal eens proberen om gewoon dat tabding zelf inderdaad te laten refreshen.

Nee, dat werkt niet. Eerst is even eten, dan verder rommelen.

[ Voor 6% gewijzigd door Orwell op 26-08-2011 19:25 ]


Acties:
  • 0 Henk 'm!

  • Coltrui
  • Registratie: Maart 2001
  • Niet online

Coltrui

iddqd

Orwell schreef op vrijdag 26 augustus 2011 @ 19:18:
[...]


Behoorlijk. :P


[...]


Dit zijn alle niet-werkende-items. Zal eens proberen om gewoon dat tabding zelf inderdaad te laten refreshen.

Nee, dat werkt niet. Eerst is even eten, dan verder rommelen.
In een of andere event van je form (activate/show/create...) he, niet in je PagesMainChange-event. :)

smakelijk

Acties:
  • 0 Henk 'm!

  • Orwell
  • Registratie: December 2009
  • Laatst online: 08-09 22:11
Coltrui schreef op vrijdag 26 augustus 2011 @ 19:41:
In een of andere event van je form (activate/show/create...) he, niet in je PagesMainChange-event. :)
Ook geprobeerd uiteraard (heb echt alle smaken aan events geprobeerd, maar echt alleen die losse items refreshen/repainten werkt.

En ik vind het best zo eigenlijk, die forms veranderen voorlopig toch niet. ;)

Acties:
  • 0 Henk 'm!

Verwijderd

En TPageControl dan?

Acties:
  • 0 Henk 'm!

  • Orwell
  • Registratie: December 2009
  • Laatst online: 08-09 22:11
Die laat ik voor wat 'ie is.

Er wordt een tabcontrol gebruikt die tot op het bot custom is. Het is niet zomaar een op TCustomPageControl gebaseerde class, maar is vanaf een kale TCustomControl opgebouwd.

En omdat ik dus een tijd later in dit project ben gestapt, laat ik het maar mooi zo. Alles werkt zonder merkbare vertraging. ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Ik denk dat het daar wel mee te maken heeft. Kan me niet voorstellen dat standaard tabs van Delphi dit gedrag vertonen met een manifest. Maargoed, kan economisch dus niet uit om het te fixen ;)

Acties:
  • 0 Henk 'm!

  • Orwell
  • Registratie: December 2009
  • Laatst online: 08-09 22:11
Verwijderd schreef op zondag 28 augustus 2011 @ 22:19:
Ik denk dat het daar wel mee te maken heeft. Kan me niet voorstellen dat standaard tabs van Delphi dit gedrag vertonen met een manifest. Maargoed, kan economisch dus niet uit om het te fixen ;)
Die van Delphi doen het perfect. ;)

Alleen deze custum gevallen, dus:

Delphi:
1
2
3
4
5
TdevCustomTabs = class(TCustomControl)

(2000 regels)

end.


... vind ik iets te intimiderend om a) eruit te slopen en b) te gaan vervangen. Maar inderdaad, een standaard TPageControl werkt perfect, en ondersteunt zelfs een ComCtrl 6-skin. Deze custom niet helaas.

Acties:
  • 0 Henk 'm!

Verwijderd

Orwell schreef op maandag 29 augustus 2011 @ 14:32:
[...]
... vind ik iets te intimiderend om a) eruit te slopen en b) te gaan vervangen.
Snap ik. Les 1 van programmeren is wel dat je je niet moet laten intimideren door code ;)
Anyway, lijkt mij kwestie van copy paste en event handlers toewijzen en je hebt alles in TPageControl. Ik zie geen meerwaarde van dat custom control. Maargoed, kost tijd maar je hebt er nu ook al heel wat tijd in zitten dus los het dan mooi op :>
Pagina: 1