Rene's FAQ Liste
Dank auch den Schreibern in die dcl*

Liste der FAQ Einträge "Windows API"

RemoveMinimizeButton
FindFirst findet unter NTFS keine bzw. nicht alle Dateien
Cut, Copy, Paste und UnDo mit dem Clipboard
Horizontaler Rollbalken mit Länge i
Memo: Zeile, Spalte u.a.
Memo mit Tabs
ListBox mit Tabs
Focus mit ENTER weiterschalten
Anzahl eingestellter Farben ?
User- und Computername ?
Beispiele zum ShellExecute Aufruf
CoInitialize von Speech wurde nicht aufgerufen
Laufende Tasks ohne Zwischenmeldungen schliessen
an WinAmp ueber PostMessages ein File uebergeben
Windows speziellen Folder lesen (Font etc.)
Dateien in den Papierkorb schieben.


RemoveMinimizeButton


 procedure RemoveMinimizeButton;
 var
   hPreview: HWND;
 begin
   hPreview := GetForegroundWindow();
   SetWindowLong(hPreview, GWL_STYLE, GetWindowLong(hPreview, GWL_STYLE) and not WS_MINIMIZEBOX);
   SetWindowPos(hPreview, 0, 0, 0, 0, 0, SWP_DRAWFRAME or SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE or SWP_NOZORDER);
 end;

Seitenanfang

FindFirst findet unter NTFS keine bzw. nicht alle Dateien


Das Dateiattribut für Dateien ohne Attribute (also auch ohne faArchive) ist nicht mehr $00 wie bsiher, sondern nun $80. Um alle 'normale Dateien' in unterschiedlichen Systemen zu finden muß nun als Attribut $A0 eingetragen werden. $20 steht dabei für faArchive.

Seitenanfang

Cut, Copy, Paste und UnDo mit dem Clipboard


 Rückgängig: SendMessage(ActiveControl.Handle, EM_Undo, 0, 0);
 Ausschneiden: SendMessage(ActiveControl.Handle, WM_Cut, 0, 0);
 Kopieren: SendMessage(ActiveControl.Handle, WM_COPY, 0, 0);
 Einfügen: SendMessage(ActiveControl.Handle, WM_Paste, 0, 0);

Seitenanfang

Horizontaler Rollbalken mit Länge i


 i := 0 == ohne Rollbalken
 i > 0 == Breite in Pixel (?)
 
 SendMessage(ListBox1.Handle,LB_SetHorizontalExtent,i,Longint(0))

Seitenanfang

Memo: Zeile, Spalte u.a.


 * Zeilennummer
   Zeile := SendMessage(Memo1.Handle, EM_LINEFROMCHAR, Memo1.SelStart, 0);
 * Spaltennummmer
   Spalte := Memo1.SelStart - SendMessage (Memo1.Handle, EM_LINEINDEX, Zeile, 0);
 * Zeilelänge:
   ZeilenLaenge := SendMessage(Memo1.Handle, EM_LINELENGTH, SendMessage(Memo1.Handle, EM_LINEINDEX, Zeile, 0), 0);
 * Erste sichtbare Zeile im Memo:
   ErsteSichtbareZeile := SendMessage (Memo1.Handle, EM_GETFIRSTVISIBLELINE, 0, 0);
 * aktuelle Memozeile sichtbar machen
   Memo1.Perform(EM_ScrollCaret, 0, 0);

Seitenanfang

Memo mit Tabs


 const TabInc: Array[0..1] of Word = (32,64);
 begin
   Memo1.WantTabs:=TRUE;
   SendMessage(Memo1.Handle,EM_SetTabStops,2,LongInt(@TabInc));
 end;

Seitenanfang

ListBox mit Tabs


 const istops: Array[0..3] of integer = (20,60,80);
 begin
   Memo1.WantTabs:=TRUE;
   SendMessage(ListBox11.Handle,EM_SetTabStops,High(istops),LongInt(@istops));
 end;
 Bsp.: ListBox1.Items.Add('Format('%d'#9'%s'#9'%0:d'#9'%s',[i, Chr(i+Ord('A')-1)]);
 aus: www.borland.com/delphi/news/zd/1999/june99

Seitenanfang

Focus mit ENTER weiterschalten


 procedure Edit1KeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
 begin
   if Key = VK_RETURN then SendMessage(Self.Handle, WM_NEXTDLGCTL, 0, 0);
 end;

Seitenanfang

Anzahl eingestellter Farben


 numberOfColors :=
   1 shl (GetDeviceCaps(Form1.Canvas.Handle, BITSPIXEL) *
          GetDeviceCaps(Form1.Canvas.Handle, PLANES);

Seitenanfang

User- und Computername


 tmpbuf: array[0..80] of Char;
 laenge: DWORD;
 user_name, pc_name: string;
 
 // Namen holen
 laenge:=120;GetUserName(tmpbuf,laenge);user_name:=StrPas(tmpbuf);
 laenge:=120;GetComputerName(tmpbuf,laenge);pc_name:=StrPas(tmpbuf);
 // 1. Buchstabe groß, Rest klein !
 user_name := AnsiUpperCase(Copy(user_name,1,1))+Copy(user_name,2,Length(user_name)-1);

Seitenanfang

Beispiele zum ShellExecute Aufruf


 ShellExecute(Handle, 'open', 'MyFile.pdf', NIL, NIL, SW_SHOWNORMAL);
 ShellExecute(Self.Handle,'Open','http://www.shd-online.de/','','',1);
 ShellExecute(0, nil, PChar('mailto:' + MailTo1+'?body=your text'), nil, nil,SW_NORMAL);

Seitenanfang

CoInitialize von Speech wurde nicht aufgerufen


 -> dann das:
 
 try
   CoInitialize(NIL);
   VTxt:=CreateOLEObject('Speech.VoiceText');
   VTxt.Speak(s, $40 or $80);
   VTxt:=null;
 finally
   CoUninitialize;
 end;

Seitenanfang

Laufende Tasks ohne Zwischenmeldungen schliessen


 procedure TForm1.ButtonKillAllClick(Sender: TObject);
 var
   pTask : PTaskEntry;
   Task : Bool;
   ThisTask: THANDLE;
 begin
   GetMem (pTask, SizeOf (TTaskEntry));
   pTask^.dwSize := SizeOf (TTaskEntry);
   Task := TaskFirst (pTask);
   while Task do begin
     if pTask^.hInst = hInstance then
       ThisTask := pTask^.hTask
     else
       TerminateApp (pTask^.hTask, NO_UAE_BOX);
     Task := TaskNext (pTask);
   end;
   TerminateApp (ThisTask, NO_UAE_BOX);
 end;

Seitenanfang

WinAmp ueber PostMessages ein File uebergeben


 jedes Zeichen einzeln!
 
 const IC_PLAYFILE = 100 ;
 MP3File: String = 'D:\Musik\mp3\Sexmachine.mp3'#0 ;
 
 var x: Integer ;
 begin
   for x := 1 to Length (MP3File) do
     PostMessage (FindWindow ('Winamp v1.x', nil), WM_USER, LParam(MP3File[x]), IDC_PLAYFILE) ;
 end;

Seitenanfang

Windows spezielle Folder lesen


 uses shlobj ;
 
 function GetSpecialFolder(FolderID : longint): string;
 var
   Path: pchar;
   idList: PItemIDList;
 begin
   GetMem(Path,MAX_PATH);
   SHGetSpecialFolderLocation(0, FolderID, idList);
   SHGetPathFromIDList(idList, Path);
   Result := string(Path);
   FreeMem(Path);
 end;

Seitenanfang

Dateien in den Papierkorb schieben.


 uses ShellAPI;
 
 function DeleteFileWithUndo(sFileName :string): boolean;
 var fos: TSHFileOpStruct;
 begin
   Fillchar(fos, SizeOf (fos), 0);
   with fos do begin
     wFunc := FO_DELETE;
     pFrom := PChar(sFileName);
     fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION or FOF_SILENT;
   end;
   Result := (0 = ShFileOperation(fos));
 end;

Seitenanfang

Zeiele / Spalte eines Memos.


 function GetRow(M: TMemo): longint;
 begin
   Result := SendMessage(M.Handle, EM_LINEFROMCHAR, M.SelStart, 0);
 end;
 
 function GetCol(M: TMemo): longint;
 begin
   Result := SendMessage(M.Handle, EM_LINEINDEX, GetRow(M), 0);
 end;

Seitenanfang