18. marts 2009 - 23:04Der er
8 kommentarer og 1 løsning
Frames og events.
Hej,
en Frame indeholder en TButton (Button1). Denne Frame bliver trukket ind paa Form1.
Hvordan er det nu muligt at aktivere en procedure i Form1's unit, naar der trykkes paa Button1 paa Framen, uden at tilgaa Form1 direkte fra Framen (Jeg tilgaar properties i Framen direkte fra Form1, og vil ikke have dette til at gaa i begge retninger)? Dvs., jeg vil ikke have Form1 (Unit1) staaende i uses listen i Framen, men taenkte paa, at Button1.OnClick eventen fra Framen maaske kunne opsnappes af Form1 paa en eller anden maade.
var Xmes: tMessage; x : tComponent; begin x := application.FindComponent('Form1'); xMes.Msg := xm_Catch; xMes.LParam := Parameter1; if x <> nil then if x is tForm then Postmessage(tForm(x).Handle,xm_catch,0,xMes.LParam); end;
Du kan enten sende en message, men den ryger i en (message)kø hvorved der kan være en lille forsinkelse. Det afhænger helt af hvor belastet maskinen er - det må du teste med GetTickCount.
unit UMessage;
interface
uses Messages;
const // Brugeroprettede messages skal komme efter WM_USER WM_MYMESSAGE = WM_USER + $01;
procedure TfrmMain.HandleMyMessage(var aMessage: TMessage); var Sender: TObject; // Here actualle a TFrame ItemNo: integer; ItemState: integer; begin Sender := TObject(aMessage.WParam); ItemNo := aMessage.LParam and $FFFF; ItemState := aMessage LParam shr $10; end;
unit FRMyFrame;
uses ... UMessages;
procedure TfrmeMyFrame.Button1Click(Sender: TObject); var ItemNo: integer; // Number of item to manipulate ItemState: integer; // State 0: off, 1: on begin ItemNo = 5; ItemState := 0; Application.Mainform.Perform(WM_MYMESSAGE,integer(self),ItemNo or ItemState shl $10); end;
js-delphi > Windows er message orienteret, så det er lidt den tanke gang man skal ha' for at kode i windows :-)
Prøv f.eks. at åbne en outlook i mail vinduet, når du så klikker på kalender vinduet og kigger på den lille mini-kalender kan du se et tydeligt eks. på at ms også bruger messages, dine aftaler kan være op til 30-60 sec. om at blive markeret med fed.
martinlind: det at der er ventetid i Outlook kan ligeså godt skyldes at en tråd af som opdaterer efter en tung forespørgsel til exchange-serveren er udført. Eller hvad?
Synes godt om
Ny brugerNybegynder
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.