Delphi Snippets

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;
archiv/coding/delphi/snippets.txt · Zuletzt geändert: 2011/12/15 22:06
CC Attribution-Noncommercial-Share Alike 4.0 International