27. september 2003 - 10:46Der er
13 kommentarer og 1 løsning
Redigering af komponent i et andet program.
Jeg har før stillet et spørgsmål om hvordan man aflæser data fra et andet program. Jeg fik også et udemærket svar, problemet er bare at jeg nu har opdaget et masse fejl. Her den kode jeg bruger når jeg skal skrive til det andet program: procedure SetTriggerText(S: String); var Wnd: HWND; ClassName: array[0..144] of char; Num: Integer; begin Num := 0; { Find the "calc" window } Wnd := FindWindow(PCHAR('#32770'), NIL); if Wnd <> 0 then begin { get the first child window... } Wnd := GetWindow(Wnd, GW_CHILD); repeat { ...and search the siblings for the first class named "Static" } GetClassName(Wnd, @ClassName, SizeOf(ClassName)); if StrComp(ClassName, 'Edit') = 0 then begin Num := Num + 1; if Num = 2 then // Edit #2 is one we want begin SendMessage(Wnd, WM_SETTEXT, 0, Integer(S)); Exit; end; end; { if StrComp... } Wnd := GetWindow(Wnd, GW_HWNDNEXT); until (Wnd = 0); end; end;
Og her er den til når jeg aflæser:
function GetTriggerText: string; var Wnd: HWND; ClassName: array[0..144] of char; L: Integer; Num: Integer; begin Result := ''; Num := 0; { Find the "calc" window } Wnd := FindWindow(PCHAR('#32770'), NIL); if Wnd <> 0 then begin { get the first child window... } Wnd := GetWindow(Wnd, GW_CHILD); repeat { ...and search the siblings for the first class named "Static" } GetClassName(Wnd, @ClassName, SizeOf(ClassName)); if StrComp(ClassName, 'Edit') = 0 then begin Num := Num + 1; if Num = 2 then // Edit #2 is one we want begin { get the text length } L := SendMessage(Wnd, WM_GETTEXTLENGTH, 0, 0); if L > 0 then begin { allocate space for the text } SetString(Result, NIL, L); { get the text (into Result) } SendMessage(Wnd, WM_GETTEXT, L, Longint(@Result[1])); { set actual size } SetLength(Result, StrLen(PCHAR(Result))); end; Exit; end; end; { if StrComp... } Wnd := GetWindow(Wnd, GW_HWNDNEXT); until (Wnd = 0); end; end;
Problemerne er: 1) Når jeg skriver til komponentet, så gemmer den ikke den tekst jeg har skrevet. Jeg gætter på at grunden er at den ikke kører sin onChange eller hvad det nu er, når jeg bruger SendMessage.
2) Både aflæsning og indsætning af tekst virker tilsyneladende kun nogle gange. De gange hvor det ikke virker hjælpe det som regel (ikke sikker på at det virker hver gang) at lave en lille ændring i teksten først.
Jeg vil meget gerne have hjælp til at løse de to problemer. Hvis i vil vide noget specifikt de pågældende programmer så bare sig til, dog har jeg kun adgang til kildekoden i det program som aflæser/skriver til det andet.
Nej. Tryk på "Edit" og så "Convert trigger to custom text". Det er den box hvor koden står i, jeg vil ændre.
Jeg mener at vis jeg gemmer teksten til editoren, så bliver teksten ændret, men hvis jeg vælger en anden trigger bliver ændringerne tabt. Man kan godt få den til at gemme dem ved at lave en lille ændring i koden. F.eks at lave et mellemrum og slette det igen.
Den kode du gav mig redigerer kommentar boksen, dvs den som du markerede i billedet.
Den gemmer stadig ikke ændringerne... men koden er en del simplere end min så den vil jeg bruge, tak for det. Men den gemmer stadig ikke ændringerne... Er der en måde hvorpå jeg kan få den til at køre sin onChange event?
Kan SendNotifyMessage måske bruges til noget her???
Synes godt om
Slettet bruger
27. september 2003 - 22:38#6
Ved ik hvordan man sender en onchange, men du kan prøve:
SendNotifyMessage(Memo1.Handle, EN_CHANGE,0,0);
Eller:
SendMessage(Memo1.Handle, EN_CHANGE,0,0);
Synes godt om
Slettet bruger
27. september 2003 - 22:49#7
Har fundet ud af hvordan man sender en OnChange til en TMemo:
Jeg prøvede lige at gøre det med et program jeg selv lavede, og konstaterede at det rent faktisk kører dens onChange. Måske er det keyDown eller sådan noget der skal køres? Hvordan bruger man SendInput() ??
Synes godt om
Slettet bruger
27. september 2003 - 23:10#9
Ved ik hvordan man bruger SendInput, men prøv at send en wm_keydown:
JUBIIIIIIIIII!!!! Det virker! :D Jeg satte lige en PostMessage mere ind med en VK_BACK for at få fjernet mellemrummet igen! Tak for hjælpen! Og læg lige et svar ;)
Nej, tak... hvis der er noget jeg er træt af nu er det at rode i windows' underlige kode :o|
Synes godt om
Slettet bruger
27. september 2003 - 23:35#14
hehe :-)
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.