Visual Basic: tekst uitlijnen in titlebar caption

Pagina: 1
Acties:
  • 394 views sinds 30-01-2008
  • Reageer

  • robbertb
  • Registratie: September 2000
  • Niet online
Ik wil in mijn applicatie in de titlebar 3 teksten die niet achterelkaar staan maar netjes uitgelijnt zijn, Linksbovenin bedrijfsnaam, in het midden applicatienaam en rechts modulecode.
Nu weet ik dat je gewoon form1.caption="bla" kan doen, maar vraag me dus af hoe ze uitgelijnt kunnen worden, vraag me af of het uberhaupt wel mogelijk is

Verwijderd

Nee, volgens mij is dat niet mogelijk.

Wat je wel kan doen is een picturebox nemen met dezelfde breedte en font instelling als de titlebar en dan bij het resizen gaan zitten prutten met spaties.

edit:
Of een eigen titlebar bouwen en je applicatie zonder titlebar laten draaien

[ Voor 18% gewijzigd door Verwijderd op 12-02-2003 21:41 ]


  • robbertb
  • Registratie: September 2000
  • Niet online
Verwijderd schreef op 12 februari 2003 @ 21:40:
Nee, volgens mij is dat niet mogelijk.

Wat je wel kan doen is een picturebox nemen met dezelfde breedte en font instelling als de titlebar en dan bij het resizen gaan zitten prutten met spaties.

edit:
Of een eigen titlebar bouwen en je applicatie zonder titlebar laten draaien
mja die oplossing had ik ook al bedacht maar dat leek me niet zo fraaie oplossing dus zocht nog naar iets anders.

Want dan moet ik ook allemaal gaan uitzoeken wat ik allemaal moet doen om de picturebox dezelfde mogelijkheden tegeven als een titelbalk.. dus maximaliseren/minimaliseren die knopjes,actief worden, niet actief etc

Verwijderd

heeft toch maar 3 states? vbminimized, vbmaximized en vbnormal..

  • robbertb
  • Registratie: September 2000
  • Niet online
Verwijderd schreef op 12 February 2003 @ 22:00:
heeft toch maar 3 states? vbminimized, vbmaximized en vbnormal..
daarnaast ziet het er ook niet zo moooi uit :'( en dan is het resizen ook lastig

[ Voor 8% gewijzigd door robbertb op 12-02-2003 22:17 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Plus als ik mijn windows instellingen anders heb staan (of een skin gebruik!) het programma doodleuk met de oude look komt ;)

Misschien zijn er wat API's die je kunnen helpen... Kzal eens googlen...

Helaas, ik krijg zo snel nix gevonden. Ik ben eerlijk gezegd ook niet kapot van je idee, je ziet het immers (bijna?) nergens. Kun je het niet meer "standaard" oplossen, of is dit ECHT wat je wil?

Ik heb overigens wel een aanrader: http://www.mvps.org/vbnet/code/forms/index.html

[ Voor 46% gewijzigd door RobIII op 12-02-2003 22:30 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

ik denk dat het gewoon het old-good spatiewerk wordt...

offtopic:
heb ooit in de beatrixgebouw te utrecht een MM-devver horen vertellen dat hij geen andere mogelijkheid had dan de klant te vragen bij ieder in te voeren artikel 100 spaties te gebruiken... (Was mbt generator dat flink wat duizenden guldens kostte toen)

Verwijderd

robbertb schreef op 12 februari 2003 @ 22:16:
[...]

daarnaast ziet het er ook niet zo moooi uit :'( en dan is het resizen ook lastig
code:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
picturebox titlebar
buttons min, max, normal, close (of images)
labels links, midden, rechts

Sub Form_Resize
if(windowstate = vbMinimized) then exit sub
Titlebar.top = scaletop
Titlebar.left = scaleleft
Titlebar.width = scalewidth
if(windowstate = vbMaximized) then normal.visible = true
if(windowstate = vbNormal) then normal.visible = false
max.visible= not normal.visible
End Sub

Sub titlebar_Resize
 close.left = titlebar.scalewidth - close.width
 close.top = titlebar.scaletop
 max.left = close.left - max.width
 max.top = titlebar.scaletop
 min.left = max.left - min.width
 min.top = titlebar.scaletop
 normal.left = max.left
 normal.top = titlebar.scaletop
 
 if(min.left > 10)

 links.top = titlebar.scaletop
 links.height = titlebar.scaleheight
 links.left = titlebar.scaleleft
 links.width = 0.25 * (min.left - titlebar.scaleleft)

 rechts.top = titlebar.scaletop
 rechts.height = titlebar.scaleheight
 rechts.width = links.width
 rechts.left = min.left - rechts.width

 midden.top = titlebar.scaletop
 midden.height = titlebar.scaleheight
 midden.left = links.left + links.width
 midden.width = rechts.left - links.left - links.width

 else
  'doe wat leuks met de labels
 end if
End Sub


Voor de buttons kan je gewoon een screenshot maken van windows, of iets fixen wat meer bij je layout van je app past.

  • robbertb
  • Registratie: September 2000
  • Niet online
RobIII schreef op 12 februari 2003 @ 22:20:
Plus als ik mijn windows instellingen anders heb staan (of een skin gebruik!) het programma doodleuk met de oude look komt ;)

Misschien zijn er wat API's die je kunnen helpen... Kzal eens googlen...

Helaas, ik krijg zo snel nix gevonden. Ik ben eerlijk gezegd ook niet kapot van je idee, je ziet het immers (bijna?) nergens. Kun je het niet meer "standaard" oplossen, of is dit ECHT wat je wil?

Ik heb overigens wel een aanrader: http://www.mvps.org/vbnet/code/forms/index.html
dat bedoel ik dus... zou mooier zijn als het toch op de een of andere manier uit te lijnen valt.. vraag me af hoe anderen dat hebben opgelost, zullen toch wel meer met dit probleem hebben gezeten.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Welke "anderen"?? Heb je een voorbeeld (of liever: screenshot)??

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • robbertb
  • Registratie: September 2000
  • Niet online
RobIII schreef op 12 februari 2003 @ 23:00:
Welke "anderen"?? Heb je een voorbeeld (of liever: screenshot)??
Nee maar ik neem aan dat hier vast wel anderen ook tegenaan gelopen zijn

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Nee, je begrijpt me denk ik niet helemaal: De GUI specs voor windows zijn gedefinieerd door (like it or not) Microsoft. ZO ziet een form caption eruit, ZO ziet een knop eruit etc... Als we allemaal wat anders gaan doen, dan snapt de gebruiker niet meer wat wat is...

* RobIII heeft ook een hekel aan ge-skinned-e programma's (cooledit, winamp, poser ga zo maar door).

Geef mij maar lekker standaard windows grijs.

Maarre, on-topic: Een form-caption is dus niet echt bedoeld voor dat soort geintjes. Nogmaals, misschien kan het met een of andere API, maar ik vrees dat je zelf aan het BitBlt-ten komt ofzo.. Is het echt zo belangrijk? Want vaak gaat hier teveel tijd in zitten, en kun je die tijd beter gebruiken om bugs eruit te halen of functionalteiten toe te voegen...

Just my $0.02

/edit/
Bedenk overigens dat als je je form gaat re-sizen deze teksten mekaar kunnen gaan overlappen of "wegduwen" ofzo... Hoe ga je dat oplossen?

[ Voor 10% gewijzigd door RobIII op 12-02-2003 23:28 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Rataplan
  • Registratie: Oktober 2001
  • Niet online

Rataplan

per aspera ad astra

Vertel je hem er ook even bij hoe hij moet zorgen dat als ik mijn taskbar bovenin het scherm heb en zijn app maximized open, zijn custom titlebar op de goede plek komt?

En voor je verder gaat, voor elke oplossing die je hiervoor kan bedenken, kan ik tien uitzonderingen bedenken waar vervolgens weer extra programmeerwerk voor gedaan moet worden.
RobIII schreef op 12 februari 2003 @ 23:26:
Nee, je begrijpt me denk ik niet helemaal
Ik wel, en ik geef je gelijk ;)
maar ik vrees dat je zelf aan het BitBlt-ten komt ofzo..
Laatste afwijkend activetitlebartextcolorpixeltje detecteren, yummie :) En de tussenliggende tekst ook gaan analyseren, want proportionele fonts en tekst links en rechts niet even breed enzo, en vervolgens een hele zooi events trappen om te zorgen dat je je titlebar tijdig herschrijft. En, idd overlap.

Plus dat mensen die denken dat ze je tekst kunnen lezen (terwijl het window half verstopt zit) mis zitten omdat ze op een standaard UI verwachten te werken.
Is het echt zo belangrijk?
Het is belangrijk dat de TS deze feature *niet* implementeert. That's my 2 cents.

[ Voor 24% gewijzigd door Rataplan op 13-02-2003 00:06 ]


Journalism is printing what someone else does not want printed; everything else is public relations.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Pak een form, pleur er 3 labels op en paste onderstaande code.
Je hoeft geen properties te zetten, dat gebeurt in form_load voor je :Y)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Option Explicit

Private Sub Form_Load()
    Label1.AutoSize = True
    Label2.AutoSize = True
    Label3.AutoSize = True
    
    Label1.BackStyle = 0
    Label2.BackStyle = 0
    Label3.BackStyle = 0
    
    Label1.Caption = "Dit is een test"
    Label2.Caption = "Voor robbertb"
    Label3.Caption = "Vanwege zijn post @ GoT"
End Sub

Private Sub Form_Resize()
    Label1.Move 100, 100
    Label2.Move (Me.Width / 2) - (Label2.Width / 2), 100
    Label3.Move Me.Width - 200 - Label3.Width, 100
End Sub


Runnen, en je form resizen. Kijk wat het doet. Heb je nu een idee wat we bedoelen met "overlap" enzo? Enige is dus dat dit niet in je titlebar staat. Wellicht is iets in deze richting wel een optie?

[ Voor 23% gewijzigd door RobIII op 13-02-2003 00:12 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • robbertb
  • Registratie: September 2000
  • Niet online
RobIII schreef op 12 February 2003 @ 23:26:
Nee, je begrijpt me denk ik niet helemaal: De GUI specs voor windows zijn gedefinieerd door (like it or not) Microsoft. ZO ziet een form caption eruit, ZO ziet een knop eruit etc... Als we allemaal wat anders gaan doen, dan snapt de gebruiker niet meer wat wat is...

* RobIII heeft ook een hekel aan ge-skinned-e programma's (cooledit, winamp, poser ga zo maar door).

Geef mij maar lekker standaard windows grijs.

Maarre, on-topic: Een form-caption is dus niet echt bedoeld voor dat soort geintjes. Nogmaals, misschien kan het met een of andere API, maar ik vrees dat je zelf aan het BitBlt-ten komt ofzo.. Is het echt zo belangrijk? Want vaak gaat hier teveel tijd in zitten, en kun je die tijd beter gebruiken om bugs eruit te halen of functionalteiten toe te voegen...

Just my $0.02

/edit/
Bedenk overigens dat als je je form gaat re-sizen deze teksten mekaar kunnen gaan overlappen of "wegduwen" ofzo... Hoe ga je dat oplossen?
Dat is jammer. Ik denk ook dat er erg veel programmeer werk in gaat zitten, dus daarom wilde ik even uitzoeken of er misschien ook een andere manier was.
Ik wilde de tekst graag uitlijnen omdat dit ook zo in het systeemontwerp staat. Ik heb een project, wat al draaiit binnen het bedrijf alleen wij moeten het herschrijven, en met een picturebox, dat is ook precies hoe de vorige het hebben opgelost, maar das niet zo fraaie oplossing, vandaar dat ik het erg mooi zou vinden als ik hier een andere oplossing voor zou kunnen vinden. Dat gerommel met die pictureboxjes lijkt me niks.. En vraag me af of je echt kan zorgen dat deze helemaal dezelfde functionaliteit krijgt als een standaard titelbar.
En de positie van de tekst zou dan gewoon moeten worden uitgelijnt op uiterst links, midden en rechts, die dan berekent wordt aan de hand van de breedte van de form.. dus bij resize opnieuw berekenen

  • abeker
  • Registratie: Mei 2002
  • Laatst online: 07-08 15:52

abeker

...

Ik denk dat je met het idee van RobIII aardig ver kunt komen. Het belangrijkste dat je moet weten is hoe je kunt achterhalen hoeveel pixels een stuk tekst in beslag neemt. Dan kun je ook wel achterhalen hoeveel spaties tussen de verschillende teksten moet komen.

the less one forgets, the less one remembers


Verwijderd

form.textWidth(string) kan je makkelijk de breedte mee achterhalen.

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 14-08 12:38

Crazy D

I think we should take a look.

Het kan wel, maar dat wordt subclassen. Ik heb geen zin om het precies uit te zoeken voor je ;) Maar begin eens bij de WM_NCPAINT windows message in MSDN, dat is de message die je ontvangt als een window-frame moet worden gepaint (waar de caption-balk onder valt).
De caption-text zelf printen zal wel met een BitBlt moeten gebeuren, tenzij je simpel met spaties gaat uitlijnen (maar dan hoef je enkel het form-resize event af te vangen).

Exact expert nodig?


Verwijderd

Als je zoiets bedoelt kan 't dus wel.
Afbeeldingslocatie: http://home.wanadoo.nl/ronald.steen/got/title-balk.jpg

Dit is een IE-popup gegenereerd via javascript volgensmij. Het is onderdeel van een website die wij moeten gebruiken om een project te doen voor school. (Het heet STUDIO).

http://www.studio.tbm.tudelft.nl/studio/

bekijk eventjes de showcase over energie, die is voor iedereen toegankelijk zonder login / pass.

Linksboven zie je dan een cirkel met wat bolletjes erin, klik op de 2 bolletjes die aan elkaar zitten, je komt nu bij de "kaarten".
Klik op "Probleemstelling" links in het menu, daarna op "Opdracht, bovenin de grijze balk.
Klik daarna op een 'I'
er verschijnt dan een popup, zoals in het screenshot hierboven.
Met een beetje verstand van html is de source wel terug te vinden denk ik.

Hoop dat ik je een beetje opweg geholpen heb.
Pagina: 1