DevN Skrevet 9. oktober 2004 Del Skrevet 9. oktober 2004 (endret) 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 9. oktober 2004 av DevN Lenke til kommentar
jajajalla Skrevet 9. oktober 2004 Del Skrevet 9. oktober 2004 (endret) 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! mvh Endret 9. oktober 2004 av jajajalla Lenke til kommentar
DevN Skrevet 9. oktober 2004 Forfatter Del Skrevet 9. oktober 2004 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
Jonas Skrevet 9. oktober 2004 Del Skrevet 9. oktober 2004 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
DevN Skrevet 9. oktober 2004 Forfatter Del Skrevet 9. oktober 2004 Bruker jeg 1 byte pr tegn? Er det mulig med en kort kode og opprette en flate på f.eks. 7000x5000 twips i en DLL-fil? Og til slutt, DevN hadde sine grunner! Lenke til kommentar
Jonas Skrevet 9. oktober 2004 Del Skrevet 9. oktober 2004 En flate? Tror ikke helt jeg forstår hva du vil.. Hvis du vil lage en form ut ifra en kode, tror jeg du kan bruke CreateObject(), pluss noe mer. Tror aadnk postet noe om å lage objekter. PM han du Lenke til kommentar
aadnk Skrevet 10. oktober 2004 Del Skrevet 10. oktober 2004 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
DevN Skrevet 10. oktober 2004 Forfatter Del Skrevet 10. oktober 2004 Ja, takk aadnk. Tror jeg fikk vite alt jeg trengte da. Lenke til kommentar
GeirGrusom Skrevet 10. oktober 2004 Del Skrevet 10. oktober 2004 DrawText er også et alternativ, for da kan du begrense hvor teksten kan tegnes (Som System.Drawing.Graphics.DrawString) Lenke til kommentar
DevN Skrevet 10. oktober 2004 Forfatter Del Skrevet 10. oktober 2004 DrawText er også et alternativ, for da kan du begrense hvor teksten kan tegnes (Som System.Drawing.Graphics.DrawString) Kan du gi meg et eksempel på dette? Lenke til kommentar
GeirGrusom Skrevet 10. oktober 2004 Del Skrevet 10. oktober 2004 Æsj, harddisken min er ødelagt, så jeg snakker utifra erfaring, så det er litt tungt å få tak i MSDN nu. Men det står i C++ delen. Lenke til kommentar
aadnk Skrevet 10. oktober 2004 Del Skrevet 10. oktober 2004 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå