Just found by accident: When editing a .pas unit, Shift + Ctrl + [ArrowUp or ArrowDown] jumps from procedure declaration to implementation. Very nice if you have large units with several thousands of lines and numerous procedures and functions.
Als größter Fan von Stargate SG1 und Atlantis bin ich von den ersten 5 Folgen von Stargate Universe enttäuscht. Bin ich zu alt und passe nicht mehr in die Zielgruppe? Muß SciFi heutzutage unbedingt so viele Kompromisse eingehen? Ok, das Militär-Style-Gequatsche war immer schon überflüssig, aber im Gegensatz zu SG1 und Atlantis gibt es bei Universe jede Menge langgezogene Gefühls-Duseleien, viele unbedeutende Dispute die nicht zur Handlung beitragen, und was das schlimmste ist: Null Humor! Kein Colonel der sich als "Fan von Jungfern und von Fahrten" outet oder "mal pinkeln muss" (O'Neill), kein cholerischer Chef-Wissenschaftler (McKay), kein Augenzwinkern. Bedeutet das im Umkehrschluß dass jüngere Zuschauer (auf die die Sendung angeblich zugeschnitten ist), keinen Sinn für Humor haben? Tsss..
Link: ftp://ftp-developpez.com/sjrd/tutoriels/delphi-generics/delphi-generics.pdf
Just found a wonderful and deep look into generics, anonymous routines and routine references here . Written by Sébastien Doeraene.
Generics were introduced in Delphi 2009, and I'm a big fan of them, as they help me do less type casting on TObjectList's items for example.
Want to know how sorting a TObjectList<TWhatever> works? Here's how it works:
type
TDBObject = class
Name: String;
end;
TDBObjectList = TObjectList<TDBObject>;
TDBObjectComparer = class(TComparer<TDBObject>)
function Compare(const Left, Right: TDBObject): Integer; override;
end;
procedure TMainform.btnOkClick(Sender: TObject);
var
o: TDBObject;
begin
Result := TDBObjectList.Create(TDBObjectComparer.Create);
o := TDBObject.Create;
o.Name := 'foo';
Result.Add(o);
o := TDBObject.Create;
o.Name := 'bar';
Result.Add(o);
end;
function TDBObjectComparer.Compare(const Left, Right: TDBObject): Integer;
begin
Result := CompareText(Left.Name, Right.Name);
end;
Letztens nachts bei Vollmond nach draußen geschaut und den Plastik-Raben zum Verjagen von Tauben auf der Garage im fahlen Mondlicht beinah für echt gehalten. Erinnerte mich etwas an die Musik auf Tales of Mystery and Imagination von Alan Parsons bzw. The Raven von den Stranglers.

In the beginning was the word.
And the word was content-type: text/plain
Found somewhere as a forum signature.
Kommentar meines 5-jährigen Sohnes: "köstlich!"
Teig:
- 250g Butter
- 250g Zucker
- 5 Eier
- 1 Päckchen Vanillezucker
- 350g Mehl
- 1 Päckchen Backpulver
- 1kg Äpfel
Äpfel schälen und in kleine Stücke schneiden. Die Butter schaumig rühren. Eier, Zucker und Vanillezucker dazugeben und gut verrühren. Dann Mehl mit Backpulver unterrühren. Die Apfelstücke unter den Teig heben.
Die Mischung auf ein eingefettetes Backblech oder auf Backpapier streichen und bei 200 bis 220° Celsius 30 Minuten lang backen.
Puderzucker mit Zitronensaft glatt rühren und auf den heissen Kuchen verteilen. Zitronensaft kann auch weggelassen werden, aber der Puderzucker sollte schon drüber.
Link: http://typo3.org/documentation/document-library/references/doc_core_tsref/4.1.0/view/4/1/
On the root or first level page you probably want to hide a so called breadcrumb menu, as it would be a single word, identically with the page title, looking like a repetition of the page title. All "deeper" page levels should indeed include the complete path.
There is a HMENU.minItems property which looked pretty like what I needed. But that created a dummy item with three dots for missing level items, not what I wanted. So, the trick is to use a conditional block, where the first one is executed on page level 0 and 1, and the second one for all deeper levels:
[treeLevel = 0,1]
# No breadcrumb on root or first level pages
mainPage.10.marks {
BREADCRUMB = TEXT
BREADCRUMB.value =
}
[else]
mainPage.10.marks {
BREADCRUMB = HMENU
BREADCRUMB {
wrap = <p>|</p>
special = rootline
# No item at all for the root page, so we start at level 1
special.range = 1|-1
1 = TMENU
1.NO = 1
1.NO.allWrap = | »
1.CUR = 1
1.CUR.doNotLinkIt = 1
}
}
[end]
Link: http://www.typo3-jack.net/typo3-dev-lists-netfielders-de/3076-typo3-dev-typolink-anchor.html
getTypoLink() doesn't allow you to pass an anchor parameter. So, in order to add an anchor to such a link you just have to add the anchor part to the id parameter:
$this->cObj->getTypoLink('Link Label', '123#myanchor');
$this->cObj->pi_linkToPage('Link Label', '123#myanchor');
$this->cObj->getTypoLink_URL('123#myanchor');
By the way, ever saw what the harmless function class.tslib_content.php:typoLink() does? Have a look just for fun, it's a 300 liner! Feels like Typo3 has a damned considerable amount of workarounds for various special cases and requirements.
Link: http://www.soft-gems.net/index.php?option=com_content&task=view&id=56&Itemid=1
Mike has just set up a bugtracker at Google Code for his popular VirtualTree component for Delphi. So, finally, all interested developers can actively participate in enhancing and extending this thing.
HeidiSQL makes extensive use of VirtualTree - as replacement for the normal TTree's and TListView's we had in old days. VirtualTree can display tree-like structures as well as lists, in all colors and flavours you can imagine:

Much more: it minimizes CPU and memory usage by strictly following the virtual paradigm (= just process visible nodes, nothing more, the rest is processed when the users scrolls to it). That means you can create millions of nodes in milliseconds. It has support for drag'n drop, custom cell editors (similar to plugins), images in column headers and cells, tons of useful events, and numerous other things you won't like to miss once you get used to them.