gerri28 Skrevet 9. februar 2005 Del Skrevet 9. februar 2005 (endret) Tenkte at vi her i Delphi forumet også burde ha en tråd for kodesnutter som andre kan ha bruk for. Reglene for tråden er enkle; ingen diskusjon, bare pasting av kode med evt kommentarer til hva som ble pasta. Ønsker du/dere å diskutere noe fra tråden anbefaler jeg å lage en tråd dedikert til dette. HUSK! Ikke ta æren for koden du finner her. Hvis du bruker koden i et prosjekt vær vennelig å gi opphavsmann credits, hvis ikke annet er nevnt. Pasta litt fra invictus sin tråd i c++ forumet. Denne koden får Form2 til å dukke opp på oppgavelinjen. type TForm2 = class(TForm) procedure CreateParams(var params: TCreateParams); override; procedure TForm2.CreateParams(var params: TCreateParams); begin inherited CreateParams(params); params.ExStyle := params.ExStyle or WS_EX_APPWINDOW; params.WndParent := GetDesktopwindow; end; Credit: Peter Below (TeamB) Søkefunksjon i ListView: function FindAndSelectItems(lv: TListView; const S: string; column: Integer; WholeWord: boolean): boolean; var i: Integer; found: Boolean; lvItem: TListItem; begin Assert(Assigned(lv)); Assert((lv.ViewStyle = vsReport) or (column = 0)); Assert(S <> ''); for i := 0 to lv.Items.Count - 1 do begin lvItem := lv.Items[i]; if column = 0 then begin if WholeWord then found := AnsiCompareText(lvItem.Caption, S) = 0 else if pos(s, lvItem.Caption) > 0 then found := true else found := false; end else if column > 0 then begin if lvItem.SubItems.Count >= Column then begin if WholeWord then found := AnsiCompareText(lvItem.SubItems[column - 1], S) = 0 else if pos(s, lvItem.SubItems[column - 1]) > 0 then found := true else found := false; end else found := False; end else found := False; result := found; if found then begin lv.Selected := lvItem; end; end; end; Endret 11. februar 2005 av gerri28 Lenke til kommentar
Wedvich Skrevet 7. mars 2005 Del Skrevet 7. mars 2005 Syntes det høres ut som en god idé, jeg... Men det burde vel egentlig fått et separat forum, siden det ville vært mye mer organisert og mye mer oversiktlig. Uansett, her er en prosedyre som laster inn tekst fra en ressurs-dll: procedure LoadTextFromResource(ResLibPath, TextID: string; Strings: TStrings); var ResLib: THandle; ResStream: TResourceStream; begin try ResLib := LoadLibrary(ResLibPath); if ResLib <> 0 then begin ResStream := TResourceStream.Create(ResLib, TextID, RT_RCDATA); ResStream.Position := 0; Strings.LoadFromStream(ResStream); ResStream.Free; end else MessageDlg('Failed to load resource library.', mtError, [mbOk], 0); finally FreeLibrary(ResLib); end; end; Lenke til kommentar
efikkan Skrevet 7. mars 2005 Del Skrevet 7. mars 2005 Her er noe jeg bruker å skrive i mine programmer: Procedure TForm1.FormCreate(Sender: TObject); Begin AppPath := ExtractFilePath(Application.ExeName); End; Lenke til kommentar
Zoxc Skrevet 14. april 2005 Del Skrevet 14. april 2005 (endret) For å få Windows XP skygge på formen: type TForm2 = class(TForm) procedure CreateParams(var params: TCreateParams); override; procedure TForm2.CreateParams(var Params: TCreateParams); const CS_DROPSHADOW = $20000; begin inherited; Params.Style := WS_POPUP; Params.WindowClass.style := Params.WindowClass.style or CS_DROPSHADOW; end; Endret 14. april 2005 av Zoxc Lenke til kommentar
PoseFant Skrevet 15. april 2005 Del Skrevet 15. april 2005 Dette er en bug jeg pleier å legge inn i betaversjoner: SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_RESTORE, 0); --- /pF Lenke til kommentar
Wedvich Skrevet 16. april 2005 Del Skrevet 16. april 2005 Her er et par måter å fjerne flimring i programmer der du bruker GDI mye. Den første er bruken av dobbel bufring. Konseptet med dobbel bufring er å først tegne bildet i usynlig minne, for så å enten gjøre det minnet synlig eller kopiere fra det usynlige minnet til det synlige minnet. Det er faktisk utrolig enkelt å gjøre det i Delphi: procedure TForm1.Create(Sender: TObject); begin DoubleBuffered := True; end; Husk at denne verdien kun er tilgjengelig fra Delphi 4 og oppover, og å bruke denne kommandoen vil også gjøre at programmet bruker littegranne mer minne. Måte nummer 2: gjør kontrollen ugjennomsiktig. Da vil Delphi skjønne at bakgrunnen ikke skal slettes, siden den er ugjennomsiktig, og siden det ville føre til flimring. Dette ville for såvidt funke dårlig på kontroller som faktisk har gjennomsiktighet. procedure TForm1.Create(Sender: TObject); begin ControlStyle := ControlStyle + [csOpaque]; end; Den siste jeg vet om er en måte som funker utrolig bra til å redusere flimring, nemlig å ta seg av WM_ERASEBKGND-beskjeden. Windows sender denne beskjeden når bakgrunnen til et vindu skal slettes. Men om du planlegger å tegne over hele bakgrunnen, blir det bare masse unødvendig flimring på grunn av dette. Så, under private-direktivet i klassen som inneholder formen din, legger du til denne lille kodesnutten: procedure StopFlicker(var Msg: TWMEraseBkgnd); message WM_ERASEBKGND; Deretter legger du til selve prosedyren under implementation, som ganske enkelt ser slik ut: procedure TForm1.StopFlicker(var Msg: TWMEraseBkgnd); begin Msg.Result := 1; end; Der har du 3 fine måter å gjøre din jobb enklere på når du skriver grafiske programmer Kan være verdt å nevne at stort sett all denne informasjonen har jeg lært fra delphi.about.com. Hvis dere vil finne ut mer om dette her, anbefaler jeg at dere sjekker den siden. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå