unit MerkRecord;
interface
uses Classes,Variants;
type
// Dieser Rekord soll in der Liste enthalten sein
TMerkRecord = Record
I :integer;
s :string;
v : Variant;
a :array of char;
End;
// die eigentliche Liste
TMerkList = class(TList)
private
function GetItems(index: integer): TMerkRecord;
protected
// Freigabe des Speichers
procedure Notify(Ptr: Pointer; Action: TListNotification); override;
public
// Zugriff auf den Rekord
property Items[index :integer] :TMerkRecord read GetItems; default;
// Neuen Record hinzufügen
function Add(R :TMerkRecord) :integer;
end;
implementation
type
PMerkRecord = ^TMerkrecord;
{ TMerkList }
function TMerkList.Add(R: TMerkRecord): integer;
var
P :PMerkRecord;
begin
P:= new(PMerkRecord);
P^:=R;
Result:=inherited Add(P);
end;
function TMerkList.GetItems(index: integer): TMerkRecord;
begin
Result:=PMerkRecord(inherited Items[Index])^;
end;
{Strings und dynamische Arrays müssen auf die Länge von 0 gesetzt werden.
Da Variants alle Typen enthalten können, müssen sie auf NULL gesetzt werden}
procedure TMerkList.Notify(Ptr: Pointer; Action: TListNotification);
begin
if Action=lnDeleted then begin
PMerkRecord(Ptr).s:='';
PMerkRecord(Ptr).V:=Null;
SetLength(PMerkRecord(Ptr).a,0);
Dispose(Ptr);
end;
inherited;
end;
end.
Tags: Delphi Delphi 2009
Ich habe im Internet einen Emulator für meinen 2. Rechner (Z1013) gefunden. Sogar eines meiner ersten Programme war dabei.
Wir hatten damals schon Freeware

Beim Filtern einer Column mit Datumswerten sollen nur die Jahre angezeigt werden

Dadurch ist auch eine Mehrfachauswahl möglich. dafür sind 2 Schritte notwendig: Es müssen die Events OnGetFilterValues und OnInitFilteringDateRanges genutzt werden
procedure THWFilter.OnInitFilteringDateRanges(Sender: TcxCustomGridTableItem; ADateRanges: TcxGridDateRanges);
begin
ADateRanges.Add(TcxGridYearRange); // nach Jahren filtern
end;
procedure THWFilter.OnGetFilterValues(Sender: TcxCustomGridTableItem; AValueList: TcxDataFilterValueList);
var
z: integer;
begin
// löschen der einzelnen Tage
for z := AValueList.Count - 1 downto 0 do
if AValueList[z].Kind = fviValue then
AValueList.Delete(z);
end;
Tags: Delphi Delphi 2009 DevGrid
Transfer mit arvdude
avrdude -p m328p -P /dev/ttyUSB0 -c arduino -D -b57600 -U flash:w:[Dateiname]:i
Start Simulator simavr
run_avr -m atmega328p -f 16000000 /usr/share/arduino/hardware/arduino/bootloaders/atmega/ATmegaBOOT_168_atmega328.hex Datei.hex
der Bootloader "/usr/share/arduino/hardware/arduino/bootloaders/atmega/ATmegaBOOT_168_atmega328.hex" kann weggelassen werden.
AVR Assembler mit Geany programmieren
Tags: Linux Arduino DuemilanoveDiese Prozedur gibt 1 zurück falls s eine Zahl ist ansonsten eine 0.
CREATE PROCEDURE ISZAHL (S VARCHAR (100))
RETURNS (ISZAHL SMALLINT)
AS
declare variable l integer;
declare variable i integer;
declare variable c char(1);
BEGIN
l=char_length(s);
if (s is null or l=0) then
ISZAHL=0;
else begin
i=1;
ISZAHL=1;
while (i<=l and ISZAHL=1) do begin
c=substring(S from i for 1);
if (c between '0' and '9' or (i=1 and c in ('+','-'))) then
i=i+1;
else
ISZAHL=0;
end
end
SUSPEND;
END
Tags: Firebird SQL
Nach dem Upgrade auf Ubuntu 10.04 Serveredition funktionierte das Ausschalten des Servers mit dem Power-Button nicht mehr. Das Paket acpid ist installiert.
Die Ausgabe von acpi_listen beim drücken des Schalters war auch ok:
button/power PWRF 00000080 00000001
/etc/acpi/events/powerbtnenthielt auch die richtige Definition des Events. Der manuelle Aufruf der dazugehörenden Datei mit
sudo /etc/acpi/powerbtnzum Test brachte dann eine Fehlermeldung. Diese Datei nutzt Funktionen eines Paketes, das in der Serveredition nicht installiert ist (acpi-support).
#!/bin/shAnschließend wird die Datei etc/acpi/events/powerbtn geändert:
# /etc/acpi/powerbtn_server.sh
# Initiates a shutdown when the power putton has been
# pressed.
/sbin/shutdown -h now "Power button pressed"
event=button[ /]power
action=/etc/acpi/powerbtn_server.sh
Update: Mit den Update vom 5.5.2010 ist dieser Fehler beseitigt.
Tags: Ubuntu Linux 10.04 Server