Dualzahl in Dezimalzahl

Dualzahl in Dezimalzahl
  Hey ihr!
Vielleicht kann mir jemand weiterhelfen oder einen Ansatz geben.
Ich muss ein Programm mit einer Function für Delphi entwerfen, dass eine vom Benutzer eingegebene Dualzahl in eine Dezimalzahl umwandelt. Ich hab schon was entworfen, aber immer wenn ichs ausführen möchte, hängt sich alles auf =( Weiü auch nich was da los is:

FUNCTION dualindez (zahl:integer):integer; //"zahl" ist die eingegebene Dualzahl des Benutzers
VAR y,i,potenz:integer;
r:string;
BEGIN
r:=inttostr(zahl);
y:=length(r)-1; //Länge der Zahl wird ermittelt
potenz:=1;
FOR i:=0 TO y DO
WHILE NOT zahl MOD 10=0 //Wenn Dualzahl durch 10 teilbar ist, steht jam Ende ine Null, dafür braucht die Potenz nicht berechnet werden
DO potenz:=potenz*2;
result:=potenz;
END;

Irgendwie fehlt mir das i aus der Zählschleife im Darauffolgenden...naja vllt. hab ich auch einen völlig falschen Ansatz. Also wäre echt lieb wenn jemand mit Ahnung mal ne Meinung sagt =) Weil das Programm wird leider bewertet.

Vielen Dank schonmal

 

C++ Code in Delphi-Code umwandeln

C++ Code in Delphi-Code umwandeln
  Hallo,

wer kann mir dem C++ Code in Delphi übersetzen? Ich habe es mal probiert
bin aber nicht auf die richtige Lösung gekommen.

Danke

Tobias

Hier ist der Code:

void __fastcall TForm1::SaveBtnClick(TObject *Sender)

{

TStringList *list = new TStringList();

for (int i = 0; i < LiVReferenz->Items->Count; i++)

{

list->Add(LiVReferenz->Items->Item[i]->Caption);

list->Add(LiVReferenz->Items->Item[i]->SubItems->CommaText);

}

list->SaveToFile("C:\temp\lv.txt");

delete list;

}

void __fastcall TForm1::LoadBtnClick(TObject *Sender)

{
TStringList *list = new TStringList();

list->LoadFromFile("c:\temp\lv.txt");

LiVReferenz->Items->Clear();

TListItem* item(NULL);

int itemCount = list->Count / 2;

for (int i = 0; (i <= itemCount) && (itemCount > 0); i+=2)

{

item = LiVReferenz->Items->Add();

item->Caption = list->Strings[i];

item->SubItems->CommaText = list->Strings[i + 1];

}

delete list;

}

Es ist ein Code wie man die ListView-Einträge in eine StringList abspeichern kann und dann wiede aufrufen.

Danke

TextOut

TextOut kannst du nur verwenden wenn der Clientbereich eines Fenster(-objektes) neugezeichnet werden muss. Du übergibst das Handle der Zeichenfläche (hDC) und die Clientkoordinaten X und Y. Dann folgt ein Zeiger auf einen String und die Länge des Strings. Jetzt kommts drauf an, was du für eine Variable hast, deren Inhalt musst du in einen String umwandeln, Beispiele:

Code: // Beispiele C / C++

AnsiString s = "Ich bin ein String.";    // Diese Variable wird ausgegeben
TextOut(hDC,x,y,&s[1],s.Length());

int Variable = 12345;    // Diese Variable wird ausgegeben
AnsiString dest = IntToStr(Variable);
char sz[200];
TextOut(hDC,x,y,StrPCopy(sz,dest),dest.Length());

// Beispiel Delphi

var
  s: string;
  Variable: extended;
begin
  Variable:= Pi;    // Diese Variable wird ausgegeben (Pi)
  s:= Format('%n',[Variable]);
  TextOut(hDC,x,y,Addr(s[1]),Length(s));
end;

Benutzerverwaltung

Hmm, ich dachte mir ich speicher die datei Binär und jeder favorit kommt auf ne neue zeile.

Bin zur zeit erstmal nur bestrebt mich mit Delphi Vertraut zumachen ... So paar kleine programme schreiben und immer wieder paar Funktionen dazu die mir bei dem Projekt helfen und jetzt ist halt das speichern von datein dran ;) Und ich will gleich versuchen die Datei von dem test programm als Benutzerdefinierte datei abzuspeichern.

Was gibt GetEnviroment('Userprofile!); wieder?!

gibt es den Namen des angemeldeten Users wieder?!

Edit:

wie kann ich Strings in Integer umwandeln ?! In C gibts da "StrToInt()" gibt es eine vergleichbare Fkt. in Delphi?

 

Datentyp Fehler

[quote author=Psycho Fred link=board=7;threadid=16792;start=0#msg98687 date=1062485136]soll ich dann jetzt bis heute abend um 5 uhr hier auf der arbeit rumsitzen und däumchen drehen, bis ich nach hause komme?[/quote]
Ich hoffe, Du hast noch mehr zu tun ...

Zitat:
Cytat: woran kann das liegen?

Z1C ist von Typ DWord und Caption vom Typ String. Das ist nicht kompatibel. Du muüt DWord schon umwandeln in einen String. Wie? Delphi-Hilfe, www.delphi-source.de, www.delphi-treff.de ...

Oder halt mal "Int und Strg + Space" tippen.

Record in Class umwandeln

Hallo,

ich habe eine Record der aus bei Strings, einem TStrings, einem integer und einem anderen Record besteht.

Nun haben sich weitere anforderungen ergeben, und es sollen auch methoden eingeführt werden. Also muss ich aus dem Record eine Klasse machen.

Was ist dabei in Delphi zu beachten, besonders bezüglich des speichers?

vielen Dank für Hilfe.
Bitte bedenkt beim antworten dass ich noch (relativ) neu in Delphi bin, programmiere seit kurzem in Delphi 6. Objektorientierung ist mir jedoch aus Java bereits gut bekannt.

Stefan

result als string

hi
wie kann man einen integer od. double als string wiedergeben?
gibt es da vielleicht nen befehl der integer in string umwandelt?

http://www.tipps.delphi-source.de/sy...20020608.shtml
da zum bsp. möchte ich das ergebnis in ein label reintun!
wenn ich es so versuche kommt eine fehlermeldung
label10.caption = getcpuspeed

mfg bgbgbg

WideString - Speicherproblem!?

WideString - Speicherproblem!?
  Hi,
ich schreiben gerade eine Anwendung die Daten in WideString speichert. Dazu hab ich unter anderem das TTNTStringList Objekt benutzt. Allerdings habe ich festgestellt das Delphi mit WideStrings nicht gut klar kommt.

Code: var
  S: TTntStringList;
  I: Integer;
begin
  S := TTntStringList.Create;
  
  for I:=1 to 100000 do
     S.Add('1234');

  // Das Freigeben dauert beim 1.Mal ca 1.2, danach sogar 11(!!!) Sekunden und länger
  FreeAndNil(S);  
end; Dieser einfache Test zeigt, dass das Freigeben ziemlich lange dauert und das ist immer so, wenn man viele Widestrings benutzt und wieder freigibt, wie z.B. mit einem dynamischen Array.

Gibt es da irgendwie einen Compiler Befehl oder einen anderen Speichermanager der das Problem irgendwie löst? Mit Delphi2005 ist das Problem auch noch da...

Mein einziger Gedanke ist die WideStrings in UTF8 Umwandeln und als normale Strings speichern, allerdings kostet das Umwandeln auch ne menge Zeit...

Bin für jeden Vorschlag offen...
Micha

ASCII in Binär wandeln

ASCII in Binär wandeln
  Hallo,
ich habe ein Programm das mir Werte von einem Mikrocontroller Ausgibt.
kleiner schnipsel des Programs.
Code: procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer); var   Str: String; begin   ComPort.ReadStr(Str, Count);   Memo.Text := Memo.Text + Str; end; Das Priblem ist das er mir die Zeichen als ASCII Zeichen ausgibt müsste sie aber binär ausgeben.
Kann mir jemand sagen wie man das umwandelt oder gibt es da ein vernünftiges Tutorial?

Vielen Dank

MfG michael

//Edit: delphi-Tags ergänzt. Sie dienen der besseren Lesbarkeit. Bitte nächstes Mal selbst dran denken... mfg R2C2

Abbrechen einer Inputbox

OK, habs schon gemerkt.
Beim drücken von 'Abbrechen' gibt er den ADefault-Parameter zurück.

Problem nur, bei mir ist der leer.

Wenn ich jetzt aber den Benutzer nach einem Wert (Zahl) frage, wäre ja eine Möglichkeit, den String vor dem umwandeln zwischenzuspeichern und dann mit der if-Anweisung hier abzufragen.

[delphi:1:4c230a03bd]if stringwert<>'' then
begin ..
end;[/delphi:1:4c230a03bd]

Jetzt aber das Problem:
Der umgewandelte Stringwert soll als Integerwert als Rückgabewert einer Funktion übergeben werden. Wie realisiere ich denn dass? Nach der einen Abfrage-Funktion kommt nämlich normalerweise eine zweite, doch bei drücken von 'Abbrechen', soll er die Funktion ja nicht mehr ausführen.

Ich brauche da unbedingt eure Hilfe. Hoffe ich habe das Problem einigermaüen verständlich dargestellt.

Danke im Vorraus.

SuperD

Ps: Gleich im Vorraus "Nein, Ihr sollt nicht meine Programme schreiben. Ich möchte nur eure Unterstützung." Danke.

XML/WDDX mit Delphi (COM,MTS)

XML/WDDX mit Delphi (COM,MTS)
  Hallo
Ich versuche gerade, ein MTS Objekt zu machen, das Daten aus einer
Datenbank liest, diese in XML umwandelt und einem Client zur Bearbeitung
schickt. Nach der Bearbeitung sollen die XML Daten wieder in die DB
geschrieben werden.
Da der Client eine ColdFusion Applikation ist, möchte ich die Daten
im XML/WDDX Format transportieren, das von CF einfach verarbeitet werden
kann (http://www.wddx.org). Für die Konvertierung gibt es auch fertige
COM DLL's, die bei wddx.org heruntergeladen werden können.
Während es mir relativ einfach gelungen ist, die Daten aus der DB mit
Hilfe der WDDXRecordset und WDDXSerializer Komponenten zu serialisieren,
funktioniert der umgekehrte Weg noch nicht.
<p>In VisualBasic funktioniert dieser Prozess so:<br>
dim MyRS WDDXRecordset;<br>
dim MyDeser WDDXDeserializer;<br>
Set MyRS MyDeser.deserialize(MyXML);<br>
<p>
Die Methode deserialize, gibt als Resultat einen OLEVariant zurück.
Wie kann man in Delphi diesen OLEVariant zu einem IWDDXRecordset machen?
<p>
Hier noch einer meiner misslungenen Versuche für die Deserialisierung
(das Ganze ist in einer MTS Komponente versorgt):<br><br>

function TXWire.insertIntoDB(const sWDDX: WideString): Integer;<br>
var newRecordID: integer;<br>
wddxRS: IWDDXRecordset;<br>
wddxDeser: IWDDXDeserializer;<br>
begin<br>
newRecordID:= 0;<br>
try<br>
// Create Deserializer Interface<br>
wddxDeser:= CoWDDXDeserializer.Create;<br>
// 1. Deserialize<br>
wddxRS:= wddxDeser.deserialize(NewsWDDX);<br>
<br>
// 2. for ex. Insert Row in Database, from WDDXRecordset<br>
// ....<br>
// newRecordID:= 'ID of inserted record';<br>
<br>
SetComplete;<br>
except<br>
SetAbort;<br>
end;<br>
<br>
result:= NewRecordID;<br>
end;<br>
<p>
Die Frage wurde auch schon mehrmals im WDDX Public Forum gestellt.
Ich habe aber keine passende Antwort dazu gefunden.

var, da verstehe ich etwas nicht

Ich denke, er meint meine 2 Codeschnipsel von oben :)

Hmm.. also ganz check cih die Frage nicht.. was ist das Problem?
Wie du sie benutzen kannst.. nunja, du must eben die Variablen definieren, also

VAR a,b,c:STRING;

und dann kannst du die Strings benutzen.. oder meinst du, wie man genau die Beispiele von mir einsetzt? Nunja.. sie sind zwar recht unnötig, aber dazu müstest du dir erstmal ein Formular basteln, mit 3 Editfeldern, also Eingabefeldern. Dann noch einen Button und zwei Labels.
Die Namen lässt du alle wie von Delphi vorgegeben. Dann doppelklickst du den Button. Delphi bringt dich nun zu dem Bereich im Code, der ausgeführt wird, wenn im laufenden Programm jemand auf den Button drückt. Jetzt gehst du mit dem Cursor genau vor das &quot;begin&quot; drückst Enter und gehst in die entstandene freie Zeile. Dort tippst du dann die VAR ... : ...; Zeile(n) ein.

VAR ergebniszahl:INTEGER;
ergebnistext:STRING;

Dann gehst du wieder hinter das &quot;begin&quot;. Zwischen begin und end tippst du nun:

ergebniszahl := StrToInt(Edit1.Text) + StrToInt(Edit2.Text) + StrToInt(Edit3.Text);
ergebnistext := Edit1.Text + Edit2.Text + Edit3.Text;

OK. Die erste der 2 Zeilen bewirkt, dass das Programm schaut was in den Feldern steht, diese Texte in Zahlen, mit denen du rechnen kannst, umwandelt (StrToInt) und dann in der Variable ergebniszahl die Zahl speichert, die die 3 eingegebenen Wete zusammen ergeben.
Die zweite Zeile liest wieder die eingegebenen Buchstaben (Texte, Strings) aus den Editfeldern aus, diesmal wird aber nicht gerechnet sondern zusammengehängt: An den Text von Feld1 wird nahtlos der Text von Feld2 und dann daran der von Feld3 angefügt.
Du siehst: 2 ganz verschiedene Vorgänge.
Jetzt tippst du noch:

Label1.Caption := IntToStr(egebniszahl);
Label2.Caption := ergebnistext;

ein, was bewrikt, dass in Label1 jetzt das Ergebnis der Addition von oben steht, wozu der Zahlenwert erst in einen Text umgewandelt werden muss, da nur Texte auf Buttons/Labels/etc. stehen dürfen. (IntToStr)
Und in Label2 steht jetzt der zusammengesetzte String/Text.

Ich hofe, ich hab dir ein klein wenig geholfen :)

mfg, Agent

Screenshot Programm

Screenshot Programm
  Hallo, ich habe mal ein Programm geschrieben das einen Screenshot macht, diesen in JPEG umwandelt und dann auf einen FTP läd, nur leider ist das schon ewig her und ich habe keine ahnung mehr von delphi... heute habe ich angefangen ein neues Screenshot Programm zu schreiben, im moment macht das programm den screenshot und wandelt ihn in ein JPG um... bei der neuen umwandelung kann ich jetzt die Qualität des JPEGS angeben, aber nur im source, und ich würd jetzt gerne wissen wie ich die Qualität (zahl zwischen 1 und 100) aus einem Edit feld auslesen kann...

Hier der Code:

unit Unit3;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, JPEG;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
Bitmap: TBitmap;
DeskWh: HWND;
DeskDC: HDC;
DeskRc: TRect;
begin
DeskWh := GetDesktopWindow;
DeskDC := GetDC(DeskWh);
GetWindowRect(DeskWh, DeskRc);
Bitmap := TBitmap.Create;
try
Bitmap.Width := DeskRc.Right - DeskRc.Left;
Bitmap.Height := DeskRc.Bottom - DeskRc.Top;
BitBlt(Bitmap.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height,
DeskDC, 0, 0, SRCCOPY);
Bitmap.SaveToFile('c:screen.bmp');
finally
ReleaseDC(DeskWh, DeskDC);
bitmap.Free;
end;
end;

Procedure Bmp2Jpg (FileName : String; Quality : Integer);
type
TJPEGQualityRange = 1..100;
var bmp : TBitmap;
Jpg : TJpegImage;
begin
bmp := TBitmap.Create;
jpg := TJpegImage.Create;
try
bmp.LoadFromFile (FileName);
Jpg.CompressionQuality := Quality;
Jpg.Assign(bmp);
Jpg.SaveToFile ( ChangeFileExt(FileName, '.jpg' ));
finally
jpg.Free;
bmp.Free;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Bmp2Jpg('C:screen.bmp',100);
end;

end.

bitte helft mir... mfg
DXT

Richedit beschleunigen?

Richedit beschleunigen?
  Also, ich habe das Problem, dass ich ein Programm geschrieben habe, welches ein Bitmap in eine .RTF-Datei umwandelt.

Dabei wird so vorgegangen: Zuerst wird pro Pixel auf einer Richedit-Komponente ein # als Platzhalter erstellt.
Danach wird jedes dieser #s mit der entsprechenden Farbe "gefüllt".

Das funktioniert soweit auch ganz gut, bloü leider ist diese Prozedur furchtbar langsam.

[delphi:1:962ddae564]procedure BitmapToRTF(Bitmap: TBitmap; var Dest: TRichedit);
var x ,
y ,
xwidth ,
xheight: integer;
s: string;
line: pRGB24Array;
begin
xwidth := bitmap.Width;
xheight := bitmap.height; // Hoehe und Breite festlegen
bitmap.PixelFormat := pf24bit; //Pixel-Format einstellen

for x := 0 to xwidth-1 do
s := s+ '#'; // eine Zeile mit #s "vollschreiben"

for y := 0 to xheight-1 do
dest.lines.Add(s); // Zeile für Zeile #s schreiben

for y := 0 to xheight-1 do
begin
line := Bitmap.ScanLine[y]; // Line wird pointer von aktueller zeile zugewiesen
for x := 0 to xwidth-1 do
begin
dest.SelStart := y*(xwidth+2)+x; // Springe zu aktuellem Zeichen
dest.sellength := 1; // Selektiere 1 Zeichen
dest.SelAttributes.Color := rgb(line[x].r,line[x].g,line[x].b); // Gib dem selektierten Zeichen seine Farbe
end;
end;
end;[/delphi:1:962ddae564]

Vereinbart sind die Typen übrigens so:
[delphi:1:962ddae564] TRGB24 = packed record
B, G, R: Byte;
end;
TRGB24Array = packed array[0..MaxInt div SizeOf(TRGB24)-1] of TRGB24;
PRGB24Array = ^TRGB24Array;[/delphi:1:962ddae564]

Fällt jemandem eine schnellere Methode ein?
(Für Sourcecode bin ich dankbar :wink: )