Liste der FAQ Einträge "Windows API"
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;
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.
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);
Horizontaler Rollbalken mit Länge i
i := 0 == ohne Rollbalken
i > 0 == Breite in Pixel (?)
SendMessage(ListBox1.Handle,LB_SetHorizontalExtent,i,Longint(0))
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);
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;
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
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;
Anzahl eingestellter Farben
numberOfColors :=
1 shl (GetDeviceCaps(Form1.Canvas.Handle, BITSPIXEL) *
GetDeviceCaps(Form1.Canvas.Handle, PLANES);
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);
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);
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;
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;
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;
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;
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;
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;