Gå til innhold

Opprette en flate eller objekt


Anbefalte innlegg

Jeg vil inn på mer komplisert og avansert programmering.

 

Akkurat nå lurer jeg på hvordan man kan opprette "noe" ut i fra ingenting, liksom. F.eks. en helt tom UserControl, hvordan kan jeg opprette en bokstav da?

 

Kan det gis et fullt eksempel på dette:

En helt tom UserControl, en bokstav skal opprettes på runtime, f.eks. A. Posisjonen X120 og Y120. (Bare et eksempel.) Opprettes f.eks. i Initialize(). Send eventuelt eksemplet pr e-post, hvis det blir ganske langt.

 

Noen guider for de som kan det grunnleggende i Visual Basic da? Nettguider helst, har ikke lyst å kjøpe eller låne bok.

 

EDIT: Leif.

Endret av DevN
Lenke til kommentar
Videoannonse
Annonse

Man kan lage flater ved og bruke VBs innebygde line

funksjon for eksempel, man kan også bruke pSet, men

den er kanskje litt treg...

 

Angående det du vil ha et konkret eksempel på, så kan man

(i VB 6) gjøre:

   UserControl.AutoRedraw = True
   UserControl.CurrentX = 120
   UserControl.CurrentY = 120
   Print "A"
   UserControl.Refresh

Her kan man endre font og størrelse ved å endre

på egenskapene til Font propertien.

 

Man kan også gjøre det ved API;

Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal X As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long

 

Eksempel:

   UserControl.AutoRedraw = True
   TextOut UserControl.hDC, 120, 120, "A", Len("A")
   UserControl.Refresh

 

Man kan også endre størrelse, font, farge og masse mer med andre API.

Med API kan man til og med rotere teksten når man tegner den! :thumbup:

 

mvh

Endret av jajajalla
Lenke til kommentar

API er fint ja, men kan null og niks innen det.

Overrasket meg at det kunne gjøres så lett.

 

Hvis A opprettes på Form_Load, og KeyPress oppretter B FORAN A, hvordan skal jeg flytte A litt fram. Altså på samme måte som en label da f.eks.

 

lblB.Top = lblA.Top

lblB.Left = (lblA.Left + lblA.Width)

 

Gi meg gjerne eksempel på begge eksemplene du ga meg.

 

Takk for hjelpen. :)

Lenke til kommentar

Spør du meg så er dette noe av det sprøeste jeg har sett. Hvorfor ikke bare bruke en label?

 

Hvis du absolutt ikke vil, må du "lage" label'er som variabeler, og printe ut med TextOut-funksjonen. Legg til en CommandButton i formen din, og lim inn denne koden:

Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal X As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
   
   Private Type label
       top As Long
       left As Long
       text As String
   End Type
Dim label(1 To 9999) As label
Dim antall_label As Double

Private Sub Command1_Click()
label(1).text = "BA"
PrintLabels
End Sub

Private Sub Form_Load()

Me.AutoRedraw = True

antall_label = antall_label + 1

label(antall_label).top = 21
label(antall_label).left = 3
label(antall_label).text = "A"

PrintLabels

End Sub

Private Sub PrintLabels()

Me.Cls

Dim i
For i = 1 To antall_label
   
   TextOut Me.hdc, label(i).left, label(i).top, label(i).text, Len(label(i).text)

Next i
   
End Sub

Lenke til kommentar
Bruker jeg 1 byte pr tegn?

Nei. Ettersom de fleste operativsystemer har gått over til Unicode, som forhåndsmessig kan vise enorme mengder tegn, brukes 2 byte pr. bokstav. Selv om enkelte programmer og deler av Windows fremdeles bruker ASCII, vil du knapt merke dette i VB, da den automatisk oversetter for deg.

 

Ta TextOut. Denne funskjonen bruker i relateten ASCII-strenger. Dermed aksepterer den ikke Unicode, men VB vil helt automatisk omgjøre strengen til ASCII.

 

Er det mulig med en kort kode og opprette en flate på f.eks. 7000x5000 twips i en DLL-fil?

 

Snakker du om å lage kontroller i "run time"? Det kan gjøres slik:

 

Dim myControl As Control

Set myControl = Me.Controls.Add("VB.TextBox", "myControl")
myControl.Visible = True

Lenke til kommentar

Google er en nyttig tjeneste.

 

Const DC_ACTIVE = &H1
Const DC_NOTACTIVE = &H2
Const DC_ICON = &H4
Const DC_TEXT = &H8
Const BDR_SUNKENOUTER = &H2
Const BDR_RAISEDINNER = &H4
Const EDGE_ETCHED = (BDR_SUNKENOUTER Or BDR_RAISEDINNER)
Const BF_BOTTOM = &H8
Const BF_LEFT = &H1
Const BF_RIGHT = &H4
Const BF_TOP = &H2
Const BF_RECT = (BF_LEFT Or BF_TOP Or BF_RIGHT Or BF_BOTTOM)
Const DFC_BUTTON = 4
Const DFC_POPUPMENU = 5            'Only Win98/2000 !!
Const DFCS_BUTTON3STATE = &H10
Const DT_CENTER = &H1
Const DC_GRADIENT = &H20          'Only Win98/2000 !!
Private Type RECT
   Left As Long
   Top As Long
   Right As Long
   Bottom As Long
End Type
Private Declare Function DrawCaption Lib "user32" (ByVal hWnd As Long, ByVal hdc As Long, pcRect As RECT, ByVal un As Long) As Long
Private Declare Function DrawEdge Lib "user32" (ByVal hdc As Long, qrc As RECT, ByVal edge As Long, ByVal grfFlags As Long) As Long
Private Declare Function DrawFocusRect Lib "user32" (ByVal hdc As Long, lpRect As RECT) As Long
Private Declare Function DrawFrameControl Lib "user32" (ByVal hdc As Long, lpRect As RECT, ByVal un1 As Long, ByVal un2 As Long) As Long
Private Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long
Private Declare Function SetRect Lib "user32" (lpRect As RECT, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function OffsetRect Lib "user32" (lpRect As RECT, ByVal x As Long, ByVal y As Long) As Long
Private Sub Form_Paint()
   'KPD-Team 1999
   'URL: http://www.allapi.net/
   'E-Mail: [email protected]
   Dim R As RECT
   'Clear the form
   Me.Cls
   'API uses pixels
   Me.ScaleMode = vbPixels
   'Set the rectangle's values
   SetRect R, 0, 0, Me.ScaleWidth, 20
   'Draw a caption on the form
   DrawCaption Me.hWnd, Me.hdc, R, DC_ACTIVE Or DC_ICON Or DC_TEXT Or DC_GRADIENT
   'Move the recatangle
   OffsetRect R, 0, 22
   'Draw an edge on our window
   DrawEdge Me.hdc, R, EDGE_ETCHED, BF_RECT
   OffsetRect R, 0, 22
   'Draw a focus rectangle on our window
   DrawFocusRect Me.hdc, R
   OffsetRect R, 0, 22
   'Draw a frame control on our window
   DrawFrameControl Me.hdc, R, DFC_BUTTON, DFCS_BUTTON3STATE
   OffsetRect R, 0, 22
   'draw some text on our form
   DrawText Me.hdc, "Hello World !", Len("Hello World !"), R, DT_CENTER
End Sub

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...