====== Delphi Snippets ====== ===== Balloon Tipps anzeigen ===== procedure ShowBalloonTip(Control: TWinControl; Icon: integer; Title: pchar; Text: PWideChar); const TOOLTIPS_CLASS = 'tooltips_class32'; TTS_ALWAYSTIP = $01; TTS_NOPREFIX = $02; TTS_BALLOON = $40; TTF_SUBCLASS = $0010; TTF_TRANSPARENT = $0100; TTF_CENTERTIP = $0002; TTM_ADDTOOL = $0400 + 50; TTM_SETTITLE = (WM_USER + 32); ICC_WIN95_CLASSES = $000000FF; type TOOLINFO = packed record cbSize: Integer; uFlags: Integer; hwnd: THandle; uId: Integer; rect: TRect; hinst: THandle; lpszText: PWideChar; lParam: Integer; end; var hWndTip: THandle; ti: TOOLINFO; hWnd: THandle; begin hWnd := Control.Handle; hWndTip := CreateWindow(TOOLTIPS_CLASS, nil, WS_POPUP or TTS_NOPREFIX or TTS_BALLOON or TTS_ALWAYSTIP, 0, 0, 0, 0, hWnd, 0, HInstance, nil); if hWndTip <> 0 then begin SetWindowPos(hWndTip, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE); ti.cbSize := SizeOf(ti); ti.uFlags := TTF_CENTERTIP or TTF_TRANSPARENT or TTF_SUBCLASS; ti.hwnd := hWnd; ti.lpszText := Text; Windows.GetClientRect(hWnd, ti.rect); SendMessage(hWndTip, TTM_ADDTOOL, 1, Integer(@ti)); SendMessage(hWndTip, TTM_SETTITLE, Icon mod 4, Integer(Title)); end; end; ===== Dateinamen mit Zufallszahlen ===== function CheckCoverName(CoverName:string):string; var i: integer; begin //SysDir := ExtractFilePath(ParamStr(0)); if FileExists(SDir+'cover\'+CoverName) then begin i := splitscount(CoverName,'.'); randomize; result := SplitOutIndex(CoverName,'.',0)+ IntToStr(Random(99999)+1)+'.'+ SplitOutIndex(CoverName,'.',i-1); end else result := CoverName; end; ===== SQLite Wrapper ===== procedure TForm1.btnTestClick(Sender: TObject); var slDBpath: string; sldb: TSQLiteDatabase; sltb: TSQLIteTable; sSQL: String; Notes: String; begin slDBPath := ExtractFilepath(application.exename) + 'test.db'; sldb := TSQLiteDatabase.Create(slDBPath); try if sldb.TableExists('testTable') then begin sSQL := 'DROP TABLE testtable'; sldb.execsql(sSQL); end; sSQL := 'CREATE TABLE testtable ([ID] INTEGER PRIMARY KEY,[OtherID] INTEGER NULL,'; sSQL := sSQL + '[Name] VARCHAR (255),[Number] FLOAT, [notes] BLOB, [picture] BLOB COLLATE NOCASE);'; sldb.execsql(sSQL); sldb.execsql('CREATE INDEX TestTableName ON [testtable]([Name]);'); //begin a transaction sldb.BeginTransaction; sSQL := 'INSERT INTO testtable(Name,OtherID,Number,Notes) VALUES ("Some Name",4,587.6594,"Here are some notes");'; //do the insert sldb.ExecSQL(sSQL); sSQL := 'INSERT INTO testtable(Name,OtherID,Number,Notes) VALUES ("Another Name",12,4758.3265,"More notes");'; //do the insert sldb.ExecSQL(sSQL); //end the transaction sldb.Commit; //query the data sltb := slDb.GetTable('SELECT * FROM testtable'); try if sltb.Count > 0 then begin //display first row ebName.Text := sltb.FieldAsString(sltb.FieldIndex['Name']); ebID.Text := inttostr(sltb.FieldAsInteger(sltb.FieldIndex['ID'])); ebNumber.Text := floattostr( sltb.FieldAsDouble(sltb.FieldIndex['Number'])); Notes := sltb.FieldAsBlobText(sltb.FieldIndex['Notes']); memNotes.Text := notes; end; finally sltb.Free; end; finally sldb.Free; end; end; ===== Random Passwort Klasse ===== unit Password; interface type TPasswordMode = set of (pmUpper, pmLower, pmNumbers, pmExtra); TPassword = class private // FCharUpp, FCharLow, FChar09, FCharSy: boolean; // FpwLength, FpwCount: integer; public function GeneratePassword(ALength: Integer; Mode: TPasswordMode):String; end; implementation uses unit1; function TPassword.GeneratePassword(ALength: Integer; Mode: TPasswordMode):String; const cLower = 'abcdefghijklmnopqrstuvwxyz'; cUpper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; cNumbers = '0123456789'; cExtra = '!§$&?€@~'; var i : Integer; S : String; iM: BYTE; begin // Kein mode angegeben, dann raus... if Mode = [] then Exit; i := 0; Randomize; While (i < ALength) do begin iM := RANDOM(4); Case iM of // Kleinbuchstaben 0: if (pmLower in Mode) then begin S := S + cLower[1+RANDOM(Length(cLower))]; Inc(i); end; // Grossbuchstaben 1: if (pmUpper in Mode) then begin S := S + cUpper[1+RANDOM(Length(cUpper))]; Inc(i); end; // Nummern 2: if (pmNumbers in Mode) then begin S := S + cNumbers[1+RANDOM(Length(cNumbers))]; Inc(i); end; // Sonderzeichen 3: if (pmExtra in Mode) then begin S := S + cExtra[1+RANDOM(Length(cExtra))]; Inc(i); end; end; end; // Generiertes Passwort zurueckgeben Result := S; end; end. ==== Aufruf (Beispiel) ==== procedure TForm1.Button1Click(Sender: TObject); var i, ii, g: integer; a: string; Password1: TPassword; begin if ((StrToInt(LabeledEdit4.Text) >= 9999) or (StrToInt(LabeledEdit1.Text) >= 999)) then begin if MessageBox(handle, PChar('Das generieren von langen bzw. vielen Passwörtern kann sich negativ auf die'+ 'Systemperformance auswirken. Wollen Sie dennoch fortfahren?'), PChar('Achtung'), MB_YESNO+MB_ICONWARNING ) = IDNO then Exit; end; Memo1.Lines.Clear; if ((LabeledEdit4.Text <> '') and (LabeledEdit1.Text <> '')) then begin ii := StrToInt(LabeledEdit1.Text); i := StrToInt(LabeledEdit4.Text); g := 1; Password1 := TPassword.Create; while g <= ii do begin a := Password1.GeneratePassword(i,[pmUpper,pmLower,pmExtra,pmNumbers]); if a <> '' then Memo1.Lines.Add(a); inc(g); end; counter := counter+ii; StatusBar1.Panels[2].Text := IntToStr(counter)+ ' generierte Passwörter'; Password1.Free; end else MessageBox(handle,Pchar('Bitte in beide Eingabefelder'+ 'die Längen eingeben!'), PChar('Error'),MB_OK+MB_ICONERROR); end;