02. april 2003 - 20:54Der er
16 kommentarer og 1 løsning
Oprettelse af en frame ved runtime
Så vidt jeg kan se af tidligere spørgsmål, er det muligt at oprette en kontrol på formen ved runtime med kommandoen load x. Hvad skal man skrive for at oprette en frame på formen?
Støv, fibre og metalliske partikler kan påvirke både uptime, levetid og driftssikkerhed. Derfor arbejder flere datacentre systematisk med contamination control.
Jo, men jeg tænkte, at det var 'pænere' at danne den end at have den 'flydende' på formen. Jeg skal helt konkret bruge den til at lave en ramme om en textbox, dvs. jeg tager positionen af textboxen og giver framen fx. +10 i position hele vejen rundt, giver den rammefarven og sender den i baggrunden - på den måde vil rammen hele tiden tilpasse sig anden størrelse og position af textboxen.
Det du mener er altså mogle streger rundt om en tekstboks, for en frame vil jo dække en kontrol, der ligger på formen neden under. Hvis det er streger skal du bruge drawline og koordinater.
jeg vil anbefale en label der er transperant og med border=true. Dens størrelse og position er nem at fastsætte i forhold til en tekstboks, men ændrer din tekstboks størrelse og position?
Lige et tillægsspørgsmål: det er jo fristende at gøre koden genanvendelig ved at lægge den i en procedure. Jeg har prøvet at sende tekstboksen ned i proceduren med 'Text1 as Control', men så vil VB ikke kendes ved 'Line'. Heller ikke text1.Line virker - er der et lille fif?
Det kan jeg ikke svare på. Men jeg lavede en fejl da jeg ville angive farve i selve linie 'Line', jeg skrev 'forecolor = ...' og så virkede det ikke. Når forecolor sættes som selvstændig kommando vil evt. andre senere tilføjelser til formen (tekst f.eks.) også få den farve, - med mindre den forinden ændres igen. Inde i linien 'line' skal kun skrives 'color = ..."
I øvrigt vil jeg mene at en kommando der kun består at én linie ikke hensigtsmæssigt lægges i en procedure. Når du ikke gør det, kan du jo også let variere farve, liniebredde og afstand til kontrollen, hvis der ellers er behov for det.
Noget andet er, hvis du skulle ønske at få stregerne væk igen, det har jeg ikke puslet med. Ville evt. prøve med redraw.
Hvis man kan 'koge det ned' til 2 linier (DrawWidth og Line), så er en procedure i overkanten! Hvis man skal have color med i Line-linien, hvordan skal den så helt nøjagtigt se ud?
Nu er jeg endelig kommet til at bruge det i den faktiske applikation og så melder der sig endnu et par spørgsmål:
1/ Det er øjensynligt kun muligt at omkranse eet felt på en form - de efterfølgende tegnes ikke op? Jeg har lagt koden i Form_Activate for at få den kørt hver gang formen vises.
2/ Når man har lukket formen og så åbner den igen, er rammen væk - så kommer den først igen, når man har lukket applikationen og startet den igen.
Hvad gør jeg mon galt? Jeg har også prøvet det på en testform og her får jeg samme reaktion.
Den sag skal jeg så have genopfrisket. Men hvorfor lukke en form, kan du ikke bare gøre den usynlig? Det anvender jeg altid Form1.Visible = False og Form1.Visible = True
Sp. 1 ovenfor: Har du angivet tekstfelternes forskellige navne? Text1.Width...
Lad der ikke gå 2 mdr. igen, så glemmer jeg da forfra.
Til min ringe undskyldning havde jeg prøvet det igennem og konstateret, at det virkede - men kun på eet felt!
1/ Ja - de hedder: Line Step(txtDato.Left, txtDato.Top)-Step(txtDato.Width, txtDato.Height), RGB(239, 132, 80), B Line Step(txtNote.Left - 100, txtNote.Top)-Step(txtNote.Width, txtNote.Height), RGB(239, 132, 80), B etc.
2/ Selvom jeg bruger Form.Visible = True/False forsvinder rammerne.
Nu har jeg fundet ud af det!! Problemet er, at for hver gang men tegner en ramme, forskydes positionen i forhold til det aktuelle endepunkt af den tegnede ramme, dvs. efterfølgende rammer tegnes på en position, der går længere og længere ud over kanten. Dette gør, at det ser ud som om man kun kan tegne een ramme een gang.
Følgende procedure kan kaldes med feltnavnet:
Rammekant(Felt1)
---
Sub Rammekant(Feltnavn As Control) CurrentX = 0 CurrentY = 0 DrawWidth = 5 Line Step(Feltnavn.Left, Feltnavn.Top) _ -Step(Feltnavn.Width - DrawWidth, Feltnavn.Height - DrawWidth), RGB(239, 132, 80), B End Sub
så kan der nemt tegnes rammer omkring alle indtastningsfelter.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.