coil Skrevet 4. mars 2006 Del Skrevet 4. mars 2006 Snurrig sak, følgende kode (som tegner to streker) fungerer når den står i form_load , men ikke under command1_click. Hvorfor ikke? Private Declare Function LineTo Lib "gdi32" _ (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long Private Declare Function MoveToEx Lib "gdi32" _ (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, _ lpPoint As POINTAPI) As Long Private Type POINTAPI x As Long y As Long End Type Private Sub Command1_Click() Dim RetVal As Long, pp As POINTAPI Form1.ScaleMode = vbPixels Picture1.AutoRedraw = True Picture1.DrawWidth = 3 RetVal = MoveToEx(Picture1.hdc, 10, 10, pp) RetVal = LineTo(Picture1.hdc, 100, 20) RetVal = MoveToEx(Picture1.hdc, 90, 10, pp) RetVal = LineTo(Picture1.hdc, 100, 30) End Sub Lenke til kommentar
GeirGrusom Skrevet 7. mars 2006 Del Skrevet 7. mars 2006 (endret) Prøv å bytt ut Picture1.hdc med Picture1.Image.Hdc ihvertfall hvis du skal ha på autoredraw. Endret 7. mars 2006 av GeirGrusom Lenke til kommentar
aadnk Skrevet 9. mars 2006 Del Skrevet 9. mars 2006 Årsaken til problematiken er simpelthen at API-funksjonene du kaller til, i mostetning til alle eksisterende kommandoer i bildeboksklassen (såsom Pset, Line, Circle, osv.), ikke eksekverer oppdateringsprosedyren til buffervinduet som benyttes i tilknytning til AutoRedraw. Når denne egenskapen er påkrudd, anvendes det nemlig en midlertidig buffer der alle tegneoperasjoner påføres før det endelig overføres til hovedvinduet (oppdateringsprosedyren). Dette vil - som du muligens har merket - forhindre flimring, da tegneoperasjoner som utføres direkte på hovedvinduet til tider kan være halvferdig når dette vinduet sendes til visning på skjermen. Løsningen er å kalle oppdateringsprosedyren manuelt når du er ferdig med API-kallene. Dette kan gjøres nokså enkelt med følgende kommando: Picture1.Refresh 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å