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 :allright:

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 :mrgreen:
Vielen lieben Dank fürs Schreiben und Posten :allright:
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 :allright:

Hab jetzt schon insgesamt 54 neue WinAPI-Codes in meiner ToDo-Liste, die ich "irgendwann" ( :oops: ) 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?