Seite 22 von 43
Re: WinAPI Library (Snippets) (493)
Verfasst: 02.06.2010 18:56
von neotoma
Beschäftige mich gerade mit dem EditorGadget.
(Wobei mir Deine WinAPI schon sehr geholfen hat!)
SetZoom/GetZoom in Prozent, evtl. als Erweiterung zu dem Zoom-Eintrag in der WinAPI.
Code: Alles auswählen
Procedure.f Editor_GetZoomPct(Gadget)
Protected wParam.l, hParam.l , result.l
result.l = SendMessage_(GadgetID(Gadget),#EM_GETZOOM,@wParam, @hParam)
If wParam=0 And hParam = 0 ; No Zoom
ProcedureReturn 100
EndIf
ProcedureReturn (wParam/hParam *100)
EndProcedure
Procedure Editor_SetZoomPct(Gadget,zoom.l)
Protected result.l
result.l = SendMessage_(GadgetID(Gadget),#EM_SETZOOM,zoom,10)
EndProcedure
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
EditorGadget(1,10,10,480,200,0)
TrackBarGadget(2,10,220,480,20,1,100,0)
AddGadgetItem(1,-1,"Teststring",0,0)
SetWindowTitle(0, "Window Zoom="+StrF(Editor_GetZoomPct(1),0)+"%")
Repeat
EventID=WaitWindowEvent()
If EventID=#PB_Event_Gadget
Select EventGadget()
Case 2
Editor_SetZoomPct(1, GetGadgetState(2))
SetWindowTitle(0, "Window Zoom="+StrF(Editor_GetZoomPct(1),0)+"%")
EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow
EndIf
Gruß,
Mike
Re: WinAPI Library (Snippets) (493)
Verfasst: 02.06.2010 21:14
von RSBasic
Hallo neotoma,
stimmt, das Ändern des Zoom-Faktors ist in der Library vorhanden, aber das Ermitteln des Zoom-Faktors noch nicht.
Danke für das Posten des Beispielcodes

Re: WinAPI Library (Snippets) (493)
Verfasst: 03.06.2010 11:56
von neotoma
Hi RSBasic,
hier habe ich noch einen.
Indent/Outdent auf Zentimeterbasis.
Code: Alles auswählen
Procedure.l Twip(mm.f)
ProcedureReturn Int(mm * (1440/25.4))
EndProcedure
Procedure Editor_Indent(Gadget)
format.PARAFORMAT2
format\cbSize = SizeOf(PARAFORMAT2)
;Read first
SendMessage_(GadgetID(Gadget), #EM_GETPARAFORMAT, 0, @format)
format\dxStartIndent = Twip(10) ; Ten Milimeters right
format\dwMask = #PFM_OFFSETINDENT
SendMessage_(GadgetID(Gadget), #EM_SETPARAFORMAT, 0, @format)
EndProcedure
Procedure Editor_Outdent(Gadget)
format.PARAFORMAT2
format\cbSize = SizeOf(PARAFORMAT2)
;Read first
SendMessage_(GadgetID(Gadget), #EM_GETPARAFORMAT, 0, @format)
format\dxStartIndent = 0-Twip(10) ; Ten Milimeters left
format\dwMask = #PFM_OFFSETINDENT
SendMessage_(GadgetID(Gadget), #EM_SETPARAFORMAT, 0, @format)
EndProcedure
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
EditorGadget(1,10,10,480,200,0)
ButtonGadget(2,10,220,100,20,"Indent")
ButtonGadget(3,390,220,100,20,"Outdent")
For a=1 To 10
AddGadgetItem(1,-1,"Teststring",0,0)
Next
Repeat
EventID=WaitWindowEvent()
If EventID=#PB_Event_Gadget
Select EventGadget()
Case 2
SendMessage_(GadgetID(1),#EM_SETSEL,0,-1) ; Select all
Editor_Indent(1)
SendMessage_(GadgetID(1),#EM_SETSEL,0,0) ;Deselect all
Case 3
SendMessage_(GadgetID(1),#EM_SETSEL,0,-1) ; Select all
Editor_Outdent(1)
SendMessage_(GadgetID(1),#EM_SETSEL,0,0) ;Deselect all
EndSelect
EndIf
If EventID=#PB_Event_CloseWindow
Quit=1
EndIf
Until Quit=1
EndIf
Gruß,
Mike
Re: WinAPI Library (Snippets) (493)
Verfasst: 07.06.2010 19:15
von neotoma
GetParentPID - Die PID des aufrufenden Processes ermitteln:
Code: Alles auswählen
Structure PROCESS_BASIC_INFORMATION
ExitStatus.i
PebBaseAddress.i
AffinityMask.i
BasePriority.i
UniqueProcessId.i
InheritedFromUniqueProcessId.i
EndStructure
Procedure.i GetParentPid( hProcess)
Protected pbi.PROCESS_BASIC_INFORMATION
; Query the ProcessBasicInformation(0)
ZwQueryInformationProcess_(hProcess, 0, @pbi, SizeOf(PROCESS_BASIC_INFORMATION), 0);
ProcedureReturn pbi\InheritedFromUniqueProcessId;
EndProcedure
;Example:
dwParentId.i = GetParentPid(GetCurrentProcess_());
Debug("Parent Process:" + Str(dwParentId))
Gruß,
Mike
Re: WinAPI Library (Snippets) (493)
Verfasst: 07.06.2010 19:46
von RSBasic
Hallo neotoma,
neotoma hat geschrieben:Indent/Outdent auf Zentimeterbasis.
Vielen lieben Dank für dein Code, sehr interessant, danke
--------------------------------------------------
Das Ermitteln der PID-Nummer gibt es schon in der WinAPI Library:
http://www.rsbasic.de/index.php?option= ... &Itemid=59 /
http://www.rsbasic.de/index.php?option= ... &Itemid=59 /
http://www.rsbasic.de/index.php?option= ... &Itemid=59
Trotzdem danke fürs Posten des Codes^^
Re: WinAPI Library (Snippets) (493)
Verfasst: 07.06.2010 20:27
von neotoma
Hi RSBasic,
diese Codes ermitteln aber nicht den Vater-Prozess. Also von welchem Prozess man aufgerufen wurde.
Das ist noch nicht in der WinAPI.
Ist jedooch Deine Entscheidung.
Gruß,
Mike
Re: WinAPI Library (Snippets) (493)
Verfasst: 12.06.2010 20:07
von edel
@neotoma
Danke fuer den Code, aber bei der Struktur PROCESS_BASIC_INFORMATION muss Integer statt Long benutzt werden.
Re: WinAPI Library (Snippets) (493)
Verfasst: 14.06.2010 11:33
von neotoma
edel hat geschrieben:@neotoma
Danke fuer den Code, aber bei der Struktur PROCESS_BASIC_INFORMATION muss Integer statt Long benutzt werden.
Danke für die Info. Habe es geändert.
Gruß,
Mike
Re: WinAPI Library (Snippets) (493)
Verfasst: 14.06.2010 20:34
von RSBasic
Hallo neotoma,
sorry, dass ich erst jetzt schreibe.
Ich find dein Code gerade sehr nützlich, weil ich den Code jetzt brauch
Vielen lieben Dank fürs Schreiben und Posten
Jetzt verstehe ich auch, was du mit Vater-PID meintest.
Sehr nützlich dein Code, werd ich auf jeden Fall in meiner Library hinzufügen.
Danke nochmal
Hab jetzt schon insgesamt 54 neue WinAPI-Codes in meiner ToDo-Liste, die ich "irgendwann" (

) abarbeiten werde.
Wenn ich mein neues Projekt "PureBasic Updater" fertig gestellt habe, dann werde ich anfangen, die ganzen neuen nützlichen Codes hinzuzufügen.
Re: WinAPI Library (Snippets) (493)
Verfasst: 14.06.2010 21:58
von RSBasic
neotoma hat geschrieben:GetParentPID - Die PID des aufrufenden Processes ermitteln:[...]
Gibt es auch eine Möglichkeit, das Handle des aufrufenden Prozesses zu ermitteln?