Avatar billede Kim Neesgaard Seniormester
02. april 2003 - 20:54 Der 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?
Avatar billede joern Nybegynder
02. april 2003 - 21:01 #1
Hej.

Behøver den at blive oprettet?  Kan den ikke findes i forvejen og gøres visible?
Avatar billede Kim Neesgaard Seniormester
02. april 2003 - 21:20 #2
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.
Avatar billede joern Nybegynder
02. april 2003 - 22:47 #3
Hej.

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?

M.v.h.  Jørn
Avatar billede Kim Neesgaard Seniormester
02. april 2003 - 22:58 #4
Hvis jeg sætter Frame1 som SendtoBack, kan man godt se textboxen og hvis Frame1 er lidt større end textboxen, ser det ud som en indramning.

Jeg kan se, at man skal bruge textbox. DrawLine x,y, osv., men jeg får ikke lov at bruge denne metode kan VB ikke finde?

Kan man have en label med en farvet ramme?
Avatar billede joern Nybegynder
03. april 2003 - 00:33 #5
Hej.

Har puslet med 'line' - forkert med drawline  :-(
Mangler at få angivelsen af color til at fungere.

Private Sub Form_Click()
    DrawWidth = 3
    Line Step(Text1.Left - 50, Text1.Top - 50)-Step(Text1.Width + 100, Text1.Height + 100), ForeColor = RGB(0, 255, 0), B
End Sub
Avatar billede joern Nybegynder
03. april 2003 - 00:38 #6
Hej.

Så er den der.

Private Sub Form_Click()
    DrawWidth = 3
    ForeColor = RGB(255, 0, 0)
    Line Step(Text1.Left - 50, Text1.Top - 50)-Step(Text1.Width + 100, Text1.Height + 100), , B
End Sub
Avatar billede Kim Neesgaard Seniormester
03. april 2003 - 21:43 #7
Sk..... godt!!! Det var nøjagtigt, hvad jeg havde brug for!
Avatar billede Kim Neesgaard Seniormester
07. april 2003 - 14:37 #8
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?
Avatar billede joern Nybegynder
07. april 2003 - 15:32 #9
Hej.

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.

M.v.h.  Jørn
Avatar billede Kim Neesgaard Seniormester
07. april 2003 - 15:46 #10
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?
Avatar billede joern Nybegynder
07. april 2003 - 16:18 #11
Hej.

Angivelsen af color skal stå mellem de to kommaer sidst i linien, se onlinehjælp: Marker 'line' og tryk F1.

M.v.h.  Jørn
Avatar billede joern Nybegynder
07. april 2003 - 16:27 #12
Hej igen.

Nu måtte jeg altså have det til at virke:

Line Step(Text1.Left - 50, Text1.Top - 50)-Step(Text1.Width + 100, Text1.Height + 100),rgb(192,0,192), B

Altså ikke 'color ='

De gamle stadig understøttede Quick Basic farver skriver qbcolor(3), der er 16 værdier.

mv.h. Jørn
Avatar billede Kim Neesgaard Seniormester
07. april 2003 - 16:37 #13
Endnu en gang: perfekt!!!
Avatar billede Kim Neesgaard Seniormester
30. maj 2003 - 17:02 #14
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.
Avatar billede joern Nybegynder
02. juni 2003 - 06:51 #15
Hej.

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.

M.v.h. Jørn
Avatar billede Kim Neesgaard Seniormester
03. juni 2003 - 19:36 #16
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.
Avatar billede Kim Neesgaard Seniormester
31. juli 2003 - 17:26 #17
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.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester