Delphi // Programmieren – Arbeitsblog http://www.pontipix.de Online-Marketing: SEO, Social-Media & Die Dinge drumherum Fri, 26 Aug 2016 18:45:24 +0000 de-DE hourly 1 https://wordpress.org/?v=4.6 Instagram, Tagreichweiten und Tags via Json holen und interpretieren. http://www.pontipix.de/instagram-tagreichweiten-und-tags-via-json-holen-und-interpretieren/ http://www.pontipix.de/instagram-tagreichweiten-und-tags-via-json-holen-und-interpretieren/#respond Wed, 10 Aug 2016 08:14:50 +0000 http://www.pontipix.de/?p=3041 Möchte man sich die aufwändige Entwicklung eines eigenen Parsers sparen, lässt sich der Export der Daten via API problemlos via JSON realisieren. Hier geht man wiefolgt vor:

[Einbindung der Unit]
uses json;

[Prozedur]
procedure tagdaten_holen;
var lauf: integer;
JSONArray: tJSONArray;
JSONValue: tJSONValue;
JSONPair: TJSONPair;
JSON: TJSONObject;
i: integer;
begin
try
debug.Text:=idhttp1.Get(‚https://api.instagram.com/v1/tags/search?q=’+tagrecherche.text+’&access_token=’+token.text);
JSONValue := TJSONObject.ParseJSONValue(debug.text);
JSON := TJSONObject.ParseJSONValue(debug.Lines.Text) as TJSONObject;
JSONArray := TJSONArray(JSON.Get(‚data‘).JsonValue);
with tagr_roh do
begin
cells[0,0]:=’Nr.‘;
cells[1,0]:=’Tag‘;
cells[2,0]:=’Reichweite‘;
colcount:=3;
rowcount:=1;
end;
for i := 0 to JSONArray.Size – 1 do
begin
with tagr_roh do
begin
cells[0,rowcount]:=inttostr(rowcount);
cells[1,rowcount]:=(TJSONPair(TJSONObject(JSONArray.Get(i)).Get(’name‘)).JsonValue.Value);
cells[2,rowcount]:=(TJSONPair(TJSONObject(JSONArray.Get(i)).Get(‚media_count‘)).JsonValue.Value);
rowcount:=rowcount+1;
end;
end;
except
showmessage(‚Fehler mit der Internetverbindung. Prüfe Diese und den Token!‘);
end;
end;

]]>
http://www.pontipix.de/instagram-tagreichweiten-und-tags-via-json-holen-und-interpretieren/feed/ 0
TWebbrowser: ID-lose Elemente anklicken http://www.pontipix.de/twebbrowser-id-lose-elemente-anklicken/ http://www.pontipix.de/twebbrowser-id-lose-elemente-anklicken/#respond Sat, 30 Jul 2016 21:36:22 +0000 http://www.pontipix.de/?p=3032 Bei einem aktuellen Projekt aus dem Bereich „Webautomatisierung“ musste das folgende Problem gelöst werden:

[Ausgangslage]
– Klicken von Tags
– anzuklickende Tags besitzen keine individuelle ID
– es existiert eine Tagliste, aus der der anzuklickende Tag ausgewählt werden muss
– anzuklickende Tags besitzen individuelle „innertext

[Vorgehensweise]

(1) Variablendeklaration
uses mshtml;
var ovElements, ovelements_1: OleVariant;

(2) Suchen und Klicken
ovElements_1 := WebBrowser1.OleObject.Document.all;
for j := 0 to (ovElements.Length - 1) do
if (ovElements_1.item(j).className = 'name') then
begin
if ovelements_1.item(j).innertext="wort" then
begin
ovElements_1.item(j).Click;
end;
end;

Weitere Infos:
TWebbrowser – Oledata

]]>
http://www.pontipix.de/twebbrowser-id-lose-elemente-anklicken/feed/ 0
TWebbrowser: Einbindung und Arbeitsspeicherprobleme http://www.pontipix.de/twebbrowser-einbindung-und-arbeitsspeicherprobleme/ http://www.pontipix.de/twebbrowser-einbindung-und-arbeitsspeicherprobleme/#respond Sat, 30 Jul 2016 17:12:45 +0000 http://www.pontipix.de/?p=3030 Bei der Arbeit an den Webautomatismen entdeckte ich, dass der TWebbrowser enorm viel Arbeitsspeicher verbraucht. Das Problem lässt sich wie folgt lösen:

(1) Webbrowser – Prozess durchführen und auf Beendigung warten
(2) SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF); in den Code einfügen

Bei einem konkreten Projekt wurde hierüber der durchschnittliche Verbrauch von ca. 650MB auf 60-80MB (schwankend) gedrückt.

]]>
http://www.pontipix.de/twebbrowser-einbindung-und-arbeitsspeicherprobleme/feed/ 0
UTF8 in TMemo (Delphi) http://www.pontipix.de/utf8-in-tmemo-delphi/ http://www.pontipix.de/utf8-in-tmemo-delphi/#respond Tue, 14 Jun 2016 21:09:33 +0000 http://www.pontipix.de/?p=2930 Bei einem neuen Projekt vermisste ich die Umlaute. Dieses Problem lässt sich so lösen:

memo_ziel.text:=Utf8ToAnsi(memo_quelle.Text);

]]>
http://www.pontipix.de/utf8-in-tmemo-delphi/feed/ 0
Delphi: TWebbrowser – Formulare ausfüllen und „abschicken“ http://www.pontipix.de/delphi-twebbrowser-formulare-ausfuellen-und-abschicken/ http://www.pontipix.de/delphi-twebbrowser-formulare-ausfuellen-und-abschicken/#respond Fri, 03 Jun 2016 17:12:08 +0000 http://www.pontipix.de/?p=2892 Für die Automatisierung mit Hilfe des TWebbrowser benötigt man den folgenden Code.
uses mshtml;

function FillForm(WebBrowser: TWebBrowser; FieldName: string; Value: string): Boolean;
var
i, j: Integer;
FormItem: Variant;
begin
Result := False;
//no form on document
if WebBrowser.OleObject.Document.all.tags('FORM').Length = 0 then
begin
Exit;
end;
//count forms on document
for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do
begin
FormItem := WebBrowser.OleObject.Document.forms.Item(I);
for j := 0 to FormItem.Length - 1 do
begin
try
//when the fieldname is found, try to fill out
if FormItem.Item(j).Name = FieldName then
begin
FormItem.Item(j).Value := Value;
Result := True;
end;
except
Exit;
end;
end;
end;
end;


if FillForm(WebBrowser1, 'username', 'mein_username') = False then
Form1.caption:=version;

=> Ausfüllen des Formularfeldes „username“ mit dem Inhalt „Username“.
=> Ausweitbar auf weitere Formularfelder wie „passwort“, „webseite“ usw., sofern Objektnamen bekannt.
Webbrowser1.OleObject.document.forms.item(0).submit();
=> Ausgefüllte Inhalte werden abgeschickt

]]>
http://www.pontipix.de/delphi-twebbrowser-formulare-ausfuellen-und-abschicken/feed/ 0
Delphi: Twebbrowser – Elemente (ohne ID) automatisch anklicken lassen http://www.pontipix.de/delphi-twebbrowser-elemente-ohne-id-automatisch-anklicken-lassen/ http://www.pontipix.de/delphi-twebbrowser-elemente-ohne-id-automatisch-anklicken-lassen/#respond Thu, 02 Jun 2016 21:55:26 +0000 http://www.pontipix.de/?p=2895 Bei einem unserer Projekte musste ich eine Lösung suchen, welche das Anklicken von Webseitenelementen erlaubt.
Vorausgesetzt, es handelt sich hierbei um einen „span“-tag, welcher einen eindeutigen (!) Namen trägt, gehe ich so vor:

var
ovElements: OleVariant;
i: Integer;


try
ovElements := WebBrowser1.OleObject.Document.all;
for i := 0 to (ovElements.Length - 1) do
if (ovElements.item(i).className = 'name') then
begin
try
ovElements.item(i).Click;
except
//fehlerbehandlung I
end;
end;
except
//fehlerbehandlung II => TEST
end;

]]>
http://www.pontipix.de/delphi-twebbrowser-elemente-ohne-id-automatisch-anklicken-lassen/feed/ 0
Delphi: TWebbrowser – Version wechseln // festlegen http://www.pontipix.de/delphi-twebbrowser-version-wechseln-festlegen/ http://www.pontipix.de/delphi-twebbrowser-version-wechseln-festlegen/#respond Thu, 02 Jun 2016 21:13:16 +0000 http://www.pontipix.de/?p=2886 Vardeklaration procedure SetWebbrowserMode(Mode: TIEMode; AppName: string = ''); const REG_KEY = 'Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION'; var […]]]> Im Normalfall muss man sich (leider) bei Delphi mit einer veralteten IExplorer-Version herum ärgern, wenn man Seiten wie bspw. Instagram aufrufen und „bearbeiten“ möchte.
Dieses Problem kann man nun so lösen:

uses registry

type
TIEMode = (iemIE7, iemIE8, iemIE10);

=> Vardeklaration
procedure SetWebbrowserMode(Mode: TIEMode; AppName: string = '');
const
REG_KEY = 'Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION';
var
Reg: TRegistry;
Value: Integer;
begin
if AppName = '' then
AppName := ExtractFileName(Application.ExeName);
Case Mode of
iemIE7 : Value := $1B58;
iemIE8 : Value := $1F40;
iemIE10 : value := $2710;

end;
Reg := TRegistry.Create();
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey(REG_KEY, True) then
begin
Reg.WriteInteger(AppName, Value);
Reg.CloseKey;
end;
finally
Reg.Free;
end;
end;

=> Funktion für Browserversionswechsel
SetWebbrowserMode(iemIE10);
=> Browserversion auf IE10 setzen (Funktionsaufruf)

]]>
http://www.pontipix.de/delphi-twebbrowser-version-wechseln-festlegen/feed/ 0
[Delphi XE8] Dateigrößen der compilierten Anwendungen optimieren http://www.pontipix.de/delphi-xe8-dateigroessen-der-compilierten-anwendungen-optimieren/ http://www.pontipix.de/delphi-xe8-dateigroessen-der-compilierten-anwendungen-optimieren/#comments Mon, 11 Apr 2016 17:47:51 +0000 http://www.pontipix.de/?p=2778 Um die Datengrößen überschaubar zu halten, fügt man den folgenden Code vor „uses“ in die Projektdatei ein:

{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}

]]>
http://www.pontipix.de/delphi-xe8-dateigroessen-der-compilierten-anwendungen-optimieren/feed/ 2
[Delphi] – Stringgrid sortieren. http://www.pontipix.de/delphi-stringgrid-sortieren/ http://www.pontipix.de/delphi-stringgrid-sortieren/#respond Sat, 05 Mar 2016 23:37:25 +0000 http://www.pontipix.de/?p=2718 strtoint(Grid.Cells[Col, i-1]) then begin prev:= Grid.Rows[i- 1].CommaText; Grid.Rows[i- 1].CommaText:= Grid.Rows[i].CommaText; Grid.Rows[i].CommaText:= prev; […]]]> Folgender Code löst das Sortierproblem bei folgender Ausgangslage:
– Stringgrid, gefüllt mit Zahlen

procedure SortGrid(Grid: TStringGrid; Col: integer);
var i, j: integer;
prev: string;
begin
for j:= 0 to Grid.RowCount- 1 do
for i:= 2 to Grid.RowCount- 1 do
begin
if strtoint(Grid.Cells[Col, i])> strtoint(Grid.Cells[Col, i-1]) then
begin
prev:= Grid.Rows[i- 1].CommaText;
Grid.Rows[i- 1].CommaText:= Grid.Rows[i].CommaText;
Grid.Rows[i].CommaText:= prev;
end;
end;
end;

Der Aufruf funktioniert über den folgenden Befehl:
SortGrid(grid, [spalte]);
„[spalte]“ muss dann entsprechend gefüllt werden (2,1 etc.).

]]>
http://www.pontipix.de/delphi-stringgrid-sortieren/feed/ 0
Links aus Dateien auslesen (via Delphi) http://www.pontipix.de/links-aus-dateien-auslesen-via-delphi/ http://www.pontipix.de/links-aus-dateien-auslesen-via-delphi/#respond Tue, 13 May 2014 13:54:28 +0000 http://www.pontipix.de/?p=1551 Auf der Suche nach einer Möglichkeit, Links aus bspw. CSV, XML etc. auslesen zu können, entdeckte ich die folgende Möglichkeit:

Unit zum Auslesen von Links aus Text-Datei (Delphipraxis, Account zum Download der Unit notwendig)

Die Einbindung funktioniert wie folgt:

//ausleseprozedur
procedure auslesen;
var
Links: TExtractLinksFromTextFile;
Link: TLinkObj;
i: Integer;
begin
Memo1.Clear;
Links := TExtractLinksFromTextFile.Create;
try
Links.Filename := filename;
Links.ExtractLinks;
for i := 0 to Links.LinkList.Count – 1 do
begin
Link := TLinkObj(Links.LinkList.Items[i]);
Memo1.Lines.Add(Link.Caption+‘: ‚+ Link.HREF);
end;
finally
Links.Free;
end;
end;

//einleseprozedur
procedure einlesen;
begin
quelle.text:=idhttp1.get(quell_datei);
auslesen;
memo1.lines.savetofile(ziel_datei);
// gef.-Liste weiter verarbeiten
end;

]]>
http://www.pontipix.de/links-aus-dateien-auslesen-via-delphi/feed/ 0
Friendfeed – API und Delphi http://www.pontipix.de/friendfeed-api-und-delphi/ http://www.pontipix.de/friendfeed-api-und-delphi/#respond Mon, 17 Feb 2014 22:46:57 +0000 http://www.pontipix.de/?p=1480 Nach langer und intensiver Recherche entdeckte ich eine Befüllungsoption für unser beliebtes „SocialMedia“ Friendfeed.

Man benötigt hier die folgenden Units.

ffapi, httpsend, synacode, TypInfo.

Unter webdelphi.ru befindet sich eine russischsprachige Anleitung und Problemlösung der API-Anbindung sowie die Unit „ffapi“.

Ich ergänze die „piXologisch EasyPromo“ um ein entsprechendes Feature und gebe zeitnah ein Update heraus.

 

]]>
http://www.pontipix.de/friendfeed-api-und-delphi/feed/ 0