15. juli 2001 - 22:06Der er
7 kommentarer og 1 løsning
wm_paint
Borrisholt viste mig en måde at tilføre canvas property til en panel. Problemet var bare at mine paneler ikke blev tegnet i opstarts proceduren. Jeg valgte derfor at tvinge proceduren gennem en TTimer og på den måde tegne mine paneler. Jeg har imellemtiden fundet ud af at hvis jeg lader min application få besked fra API\'en om en wm_paint så vil mine paneler blive tegnet fra starten (og jeg er fri for at min application skal bruge unødig resourcer). Men noget har undret mig meget:
1. Hvorfor modtager min application ikke en wm_paint besked når jeg eksempelvis flytter min application uden for skærmen og når min application har været minimeret?
2. Min application indeholder 6 paneler. Alle paneler på nær Panel1 bliver tegnet i opstarts proceduren (ellers bliver de alle tegnet ens) hvorfor?
type Tcanvascontrol = class(Tcustomcontrol) property canvas; end;
procedure TForm1.FormCreate(Sender: TObject); begin application.onmessage := appmessage; end;
procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean); begin if (msg.message = wm_paint) then begin //handled := true; formpaint(nil); end; end;
procedure TForm1.FormPaint(Sender: TObject); begin canvas.draw(0,0,skin); //tegner bitmap på form1
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Jeg bliver lige nødt til at spørge hvorfor du vil tegne på dine paneler. Jeg havde nemlig selv tænkt mig at gøre det engang, men så brugte jeg bare et skide tImage i stedet, og det virker da også fint...
Jeg tror faktisk, mht. sp. 1, at man SKAL kalde en hvilken som helt re-paint eller sådan noget, for at tenge vise owner-draw componenter.
Jeg lavede engang et program hvor det var muligt at minimere, så programmet fløj ned i Tray\'en, og når man så klikkede på tray-ikonet, så popede ens program op igen (det kender du jo). Men det viste sig at man skulle kalde en procedure i Application, vist nok, får at den næste gang man valgte at minimere, gjorde det! Så måske ligger det i det. Bare et gæt.
Jeg er nødt til at spørge i hvilken procedure du deklærere pan01..pan06. Det er vist ikke ligegyldtigt hvorhenne...
PS: ved du hvordan, bortset fra bannerklik og svare på spørgsmål der aldrig sker mere med, jeg kan få lidt extra point? Jeg er rimlig flad :<
EasySoft Studios>> Grunden til at jeg har valgt Tpanel\'er er fordi at jeg med dem kan \"forme\" som jeg har lyst til. Jeg kender nemlig en smart kode som kan gøre mine Tforms og Tpanel\'er runde, trekantet eller hvad jeg nu har lyst til - og det skal jeg bruge i min applikation.
Nu er der ingen problemer med det eksempel jeg har vist da alle mine canvas funktioner ligger i FormPaint proceduren, men hvis jeg nu havde valgt at de skulle ligge i en user-defined procedure så kom problemerne...
Du har selvfølig ret at jeg kan tvinge min appliction til at blive Re-Paintet efter at den har været minimeret - men det er mere princippet jeg gerne vil vide.
Mine Tbitmaps bliver created under min initialization og bliver fri-gjort under min finalization (Jeg går ikke ud fra at det skulle have nogen påvirkelse).
Du får automatisk points hverdag af eksperten (jeg tror nok det er 5 points du får) - så du bliver nødt til væbne dig med tålmodighed.
Det kunne godt være et problem med tegne-rækkefølgen, uden att jeg har testet det, du gør jo det at du tegner på dine panel\'er fra din FORM, og ikke fra panelernes Paint, hvilket ville være det rigtige, også evt. lave en bitmap property på din panelcomp. i set proceduren laver du en Invalidate og i den overridet paint kalder du inherited og tegner din bitmap, og vupti så kører det, uden kode i dit project, men gemt i din panel-comp.
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.