AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Edit.Text ohne DB oder INI Speichern

Ein Thema von Amenovis · begonnen am 30. Nov 2018 · letzter Beitrag vom 15. Dez 2018
Antwort Antwort
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

AW: Edit.Text ohne DB oder INI Speichern

  Alt 30. Nov 2018, 18:55
Wenns nur flüchtige Werte sein brauchen, eventuell über ClipBoard was zaubern?
Und damit den Inhalt des Benutzers unerwartet zerschießen?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Edit.Text ohne DB oder INI Speichern

  Alt 30. Nov 2018, 19:03
Wenns nur flüchtige Werte sein brauchen, eventuell über ClipBoard was zaubern?
Und damit den Inhalt des Benutzers unerwartet zerschießen?
Ich hatte da eher sowas im Sinne.

Hier copy/paste von da falls der Link tot geht.
Delphi-Quellcode:
// The TClipboard provides easy clipboard access. But what if you
// want to add (several) custom defined items to the clipboard?

// For all actions is the unit Clipboard required.
uses Clipboard;

// First you have to register your own ClipBoard format
// Zuerst registrieren wir unser eigenes ClipBoard Format
const
  MyClipboardFormatStr = 'MyData';

var
  MyClpFormat: integer;

  MyClpFormat := RegisterClipboardFormat(MyClipboardFormatStr);

{ The variable SLMClpFormat will contain a unique format handle for
  your own clipboard format.

  Die Variable SLMClpFormat enthält ein einzigartiges Format Handle
  für unser ClipBoard Format.
}


procedure IncPointer(var p: Pointer; increment: Integer);
begin
  p := PChar(p) + Increment;
end;

// Say you have a data record defined as:
// Definiere zuerst etwa einen solchen Daten Record:
type
  PMyDataRec = ^TMyDataRec;
  TMyDataRec = record
    Name: string[50];
    Value: Integer;
  end;

{ Furthermore let's say the data records are stored in a Listbox
  and shall be copied to a list box.

  Angenommen, die Daten Records sind in einer ListBox gespeichert und
  sollen in eine ListBox kopiert werden.
}


  // Copy like this:
procedure TForm1.CopyItems;
var
  i: integer;
  dh: THandle;
  ic: integer;
  p: Pointer;
  pi: pInteger;
begin
  // get number of items to be copied
  // Die Anzahl zu kopierenden Items
  ic := List1.SelCount;
  dh := GlobalAlloc(GMEM_FIXED or GMEM_ZEROINIT,
    (SizeOf(TMyDataRec) * ic) + SizeOf(Integer));
  { allocate memory for all items plus for a integer variable giving you the number of
    copied items }

  p := GlobalLock(dh); { Lock the allocated memory }
  pi := pInteger(p);
  pi^ := ic; { write number of items to allocated memory }
  IncPointer(p, SizeOf(Integer)); { increment the pointer behind the written data }
  // You don't have to create an instance of clipboard, this is done automatically

  for i := 1 to List1.Items.Count do { check all items if they are selected }
  begin
    if List1.Items[i - 1].Selected then
    begin
      { This one is selected -> copy it o the clipboard }
      PMyDataRec(p)^ := PMyDataRec(List1.Items[i - 1].Data)^;
      { of course data must point to a TMyDataRec }
      IncPointer(p, SizeOf(TMyDataRec));
      { increment the pointer behind the written data }
    end;
  end;

  // You have now filled the allocated memory with all items that shall be copied.
  // Now you can put them to the clipboard
  Clipboard.Open; { Open the clipboard will prevent overwriting of so far copied items }
  Clipboard.Clear; { Clear the clipboard first }
  Clipboard.SetAsHandle(MyClpFormat, Dh); { Copy to clipboard }
  Clipboard.Close; { finally close the clipboard }
  GlobalUnlock(dh);
  { and unlock the allocate memory. But don't free it, it will be used by the clipboard }

  if ic = 0 then
    GlobalFree(dh); { You can free it if you haven't copied anything }
end;

// Check first if your items are still available before pasting them from the clipbard

if Clipboard.HasFormat(MyClpFormat) then
begin
  Form1.Paste1.Enabled := True; { Yes, they are still available }
end;

// And this is, how you paste them after Paste1 is clicked
procedure TMDIForm.Paste1Click(Sender: TObject);
var
  dh: THandle;
  pdr: PSLMDataRec;
  i, ic: integer;
  p: Pointer;
  pi: pInteger;
  li: TListItem;
begin
  if Clipboard.HasFormat(MyClpFormat) then
  // We have already checked, but maybe another application has overwritten the
  // clipboard in between....
  begin
    ClipBoard.Open; { First open the clipboard again }
    dh := Clipboard.GetAsHandle(MyClpFormat); { Catch the handle to the stored items }
    p := GlobalLock(dh); { and lock it }
    pi := pInteger(p); { The first item is an integer giving the number of items }
    ic := pi^; { so get the number of items }
    IncPointer(p, SizeOf(Integer)); { increment the pointer behind the read data }
    for i := 1 to ic do { get all copied items one after another }
    begin
      li := List1.Items.Add; { first create a new listbox item }
      pdr := New(PMyDataRec); { Then create a new pointer to a TMyDataRec }
      pdr^ := PMyDataRec(p)^; { and fill it with data from the clipboard }
      IncPointer(p, SizeOf(TSLMDataRec));
      { increment the pointer behind the written data }

      li.Data := pdr; { Set the data pointer of the list item to the new record }
      LI.Caption := pdr^.Name; { Let the item display the record field "Name" }

      // You can of course add more record fields if the item has subitems:
      LI.SubItems.Add(IntToStr(Value));
    end; { All data retrieved from clipboard }
    Clipboard.Close; { Close it }
    GlobalUnlock(dh);
   { and unlock the pointer, but don't free it. This will be done by the clipboard itself,
     if necessary }

  end;
end;
Gruß vom KodeZwerg

Geändert von KodeZwerg (30. Nov 2018 um 19:07 Uhr)
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#3

AW: Edit.Text ohne DB oder INI Speichern

  Alt 30. Nov 2018, 19:35
So ein Aufwand, obwohl es auch 2 Zeilen absolut tun?
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Edit.Text ohne DB oder INI Speichern

  Alt 30. Nov 2018, 19:53
Ja es tut mir leid, ich selbst würde auch eine ini im AppData ablegen und gut ist, aber ein eigenes Clipboard Objekt kann auch ne schöne Spielerei sein, nicht das langeweile aufkommt mal was neues auszuprobieren hehe
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Amenovis

Registriert seit: 17. Nov 2011
52 Beiträge
 
#5

AW: Edit.Text ohne DB oder INI Speichern

  Alt 30. Nov 2018, 19:57
Lach KodeZwerg du hattest echt super lieb Geduld mit mir beim einkleckern der listview aber das ich das raffe soviel Geduld haben wir beide sicher nicht hahahahaha
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: Edit.Text ohne DB oder INI Speichern

  Alt 30. Nov 2018, 22:08
Aus deinem Quelltext:
Clipboard.Clear; Und damit ist mein Inhalt der Zwischenablage im Nirvana.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Edit.Text ohne DB oder INI Speichern

  Alt 30. Nov 2018, 22:47
Aus deinem Quelltext:
Clipboard.Clear; Und damit ist mein Inhalt der Zwischenablage im Nirvana.
Ich bin untröstlich das der Quelltext von der Schweizer Garde nicht auf Anhieb alle Probleme löst.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

AW: Edit.Text ohne DB oder INI Speichern

  Alt 30. Nov 2018, 23:12
Es ist einfach die falsche Lösung für das Problem.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#9

AW: Edit.Text ohne DB oder INI Speichern

  Alt 30. Nov 2018, 23:32
Einfacher als in eine Ini-Datei geht wohl nicht.

Vielleicht ist es aber einfacher die hier zu verwenden
Delphi-Quellcode:
Edit1.Text := TFile.ReadAllText(Datei);

TFile.WriteAllText(Datei, Edit1.Text);
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz